[
  {
    "path": ".gitignore",
    "content": ".idea\n"
  },
  {
    "path": "LICENSE.txt",
    "content": "\njUI遵循Apache2开源协议发布，并提供免费使用。\n版权所有Copyright © 2009-2020 by DWZ (http://j-ui.com) All rights reserved。\njUI® 商标和著作权所有者为DWZ团队。\n\nApache Licence是著名的非盈利开源组织Apache采用的协议。\n该协议和BSD类似，鼓励代码共享和尊重原作者的著作权，允许代码修改，再作为开源或商业软件发布。需要满足的条件：\n1． 需要给代码的用户一份Apache Licence ；\n2． 如果你修改了代码，需要在被修改的文件中说明；\n3． 在延伸的代码中（修改和有源代码衍生的代码中）需要带有原来代码中的协议，商标，专利声明和其他原来作者规定需要包含的说明；\n4． 如果再发布的产品中包含一个Notice文件，则在Notice文\n件中需要带有本协议内容。你可以在Notice中增加自己的许可，但不可以表现为对Apache Licence构成更改。\n具体的协议参考：http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\nFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\nCOPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "README.md",
    "content": "> ## 介绍\r\n\r\ngithub源码下载：https://github.com/dwzteam/dwz_jui\r\n\r\nDWZ富客户端框架(jQuery RIA framework), 是中国人自己开发的基于jQuery实现的Ajax RIA开源框架.\r\n\r\nDWZ富客户端框架设计目标是<b>简单实用、扩展方便、快速开发、RIA思路、轻量级</b>\r\n\r\nDWZ支持用html扩展的方式来代替javascript代码, 基本可以保证程序员不懂javascript, 也能使用各种页面组件和ajax技术. 如果有特定需求也可以扩展DWZ做定制化开化.\r\n\r\n国内很多程序员javascript不熟, 大大影响了开发速度. 使用DWZ框架自动邦定javascript效果. 不需要开发人员去关心javascript怎么写, 只要写标准html就可以了. DWZ简单扩展了html标准, 给HTML定义了一些特别的class 和attribute. DWZ框架会找到当前请求结果中的那些特别的class 和attribute, 并自动关联上相应的js处理事件和效果.\r\n\r\nDWZ基于jQuery可以非常方便的定制特定需求的UI组件, 并以jQuery插件的形式发布.\r\n\r\n欢迎大家提出建议, 我们将在下一版本中进一步调整和完善功能。\r\n\r\nDWZ富客户端框架完全开源，可以免费获取全部源码。团队中的每个人都是开源的拥护者，都希望为中国软件开源事业尽自己的一份力量。\r\n\r\nDWZ官方微博 http://weibo.com/dwzui\r\n在线演示地址 http://jui.org\r\n\r\n### 学习DWZ的建议\r\n- 通读DWZ文档，很多新手提的问题文档中都写了\r\n- 看demo每个组件演示效果和代码（留意组件html结构）\r\n- 建议安装firebug，用firebug看html结构、CSS和调试JS都非常方便。见附录一 firebug介绍\r\n- 对于初学者不建议看DWZ全部源码，但还是非常有必要看看dwz.ui.js和dwz.ajax.js\r\n- 可以从google code下载dwz_thinkphp版本，结合php后台去理解DWZ和服务器端的交互方式\r\n\r\n### DWZ区别于其它JS框架，最大的优点\r\n\r\n- 完全开源，源码没有做任何混淆处理，方便扩展\r\n- CSS和js代码彻底分离，修改样式方便\r\n- 简单实用，扩展方便，轻量级框架，快速开发\r\n- 仍然保留了html的页面布局方式\r\n- 支持HTML扩展方式调用UI组件，开发人员不需写js\r\n- 只要懂html语法不需精通js，就可以使用ajax开发后台\r\n- 基于jQuery，UI组件以jQuery插件的形式发布，扩展方便\r\n\r\n### 有偿服务\r\n- 公司培训，技术支持，解决使用jUI过程中出现的全部疑难问题\r\n- 定制化开发\r\n\r\n### 联系方式\r\n\r\n\t合作电话：18600055221\r\n\t技术支持：17767167745\r\n\t邮箱：support@jui.org\r\n\r\n\tDWZ创始人：\r\n\t[北京]杜权(UI设计/制作)\td@jui.org\r\n\t[杭州]吴平(Ajax开发)\tw@jui.org\r\n\t[杭州]张慧华(Ajax开发)\tz@jui.org\r\n\r\n\t新加入成员：\r\n\t[北京]张涛\tQQ:122794105\r\n\t[北京]冀刚\tQQ:63502308\tjiweigang2008@tom.com\r\n\t[南京]郑应海\tQQ:55691650\r\n\t[成都]COCO\tQQ:80095667\r\n\r\n\t官方微博(欢迎加入) http://weibo.com/dwzui \r\n\r\n\tjQuery.DWZ-jUI-1群 369203\r\n\tjQuery.DWZ-jUI-2群 69611933\r\n\tjQuery.DWZ-jUI-3群 20866231\r\n\tjQuery.DWZ-jUI-5群 85031937\r\n\tjQuery.DWZ-jUI-6群 172602882\r\n\tjQuery.DWZ-jUI-7群 210322217\r\n\tjQuery.DWZ-jUI-8群 139067378\r\n\tjQuery.DWZ-jUI-9群 59680552\r\n\tjQuery.DWZ-jUI-10群 329597326\r\n\r\n### 技术服务微信\r\n![](./themes/default/images/wx_zhh.jpg?width=200)\r\n\r\n> ## DWZ 移动端框架\r\n\r\n- 在线演示版，使用chrome 开发模式设置手机版：`http://mobile.jui.org`\r\n- git源码：`https://gitee.com/dwzteam/dwz_mobile_app`\r\n- 在线文档：`http://dwzteam.gitee.io/dwz_mobile_doc_v1`\r\n- 安卓 Apk 安装测试版：`http://mobile.jui.org/apk/dwz_mobile_app.apk`\r\n\r\n![](./doc/dwz_mobile_app.jpg)\r\n\r\n## 捐助\r\n\r\n如果您觉得我们的开源软件对你有所帮助，请扫下方二维码打赏我们一杯咖啡。\r\n\r\n|支付宝|微信|\r\n|:---:|:---:|\r\n|![](./themes/default/images/zfb.png?width=200)|![](./themes/default/images/wx.png?width=200)|\r\n\r\n<b>版权声明:</b>\r\n\r\n\tjUI遵循Apache2开源协议发布，并提供免费使用。\r\n\t版权所有Copyright © 2009-2020 by DWZ (http://jui.org) All rights reserved。\r\n\tApache Licence是著名的非盈利开源组织Apache采用的协议。\r\n\t该协议和BSD类似，鼓励代码共享和尊重原作者的著作权，允许代码修改，再作为开源或商业软件发布。需要满足的条件： \r\n\t\r\n\t需要给代码的用户一份Apache Licence\r\n\t如果你修改了代码，需要在被修改的文件中说明\r\n\t在延伸的代码中（修改和有源代码衍生的代码中）需要带有原来代码中的协议，商标，专利声明和其他原来作者规定需要包含的说明\r\n\t如果再发布的产品中包含一个Notice文件，则在Notice文\r\n\t件中需要带有本协议内容。你可以在Notice中增加自己的许可，但不可以表现为对Apache Licence构成更改\r\n\t\r\n具体的协议参考：http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n\tTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOTLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESSFOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THECOPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVERCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICTLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING INANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THEPOSSIBILITY OF SUCH DAMAGE.\r\n\t\r\n"
  },
  {
    "path": "bin/ESC.wsf",
    "content": "<?xml version=\"1.0\"?>\n<!-- Generated by Soya.IO.WSFFactory v0.95 [Tue, 28 Feb 2006 21:22:15 UTC] -->\n<package>\n<job>\n<?job error=\"false\" debug=\"false\" ?>\n<resource id=\"about\">\n-----------------------------------------------------------------------------\n  ESC (ECMAScript Cruncher)\n  * Version       : 1.14\n  * Date          : 2006-02-28 22:22:15 [+0100]\n  * License       : GNU GPL 2 (http://www.gnu.org/copyleft/gpl.txt)\n  * Copyright (C) 2001-2006 Thomas Loo &lt;tloo@saltstorm.net&gt;\n\n  ---------------------------------------------------------------------------\n  ESC is an ECMAScript(*) pre-processor enabling an unlimited number of\n  external scripts to be compressed/crunched into tight, bandwidth-optimized\n  packages. ESC supports compressing of external sources only. Trying to\n  process scripts inlined in HTML, ASP, PHP or equivalent pages are NOT\n  recommended with this version of ESC. This feature might be added in a\n  future version. Type \"cscript ESC.wsf -help\" for usage instructions.\n\n  ESC is built using components from the Soya Scripting API 1.0.0-b10,\n  a uni-host/cross-browser ECMAScript compliant class-library distributed\n  freely under the terms of the BSD License. The Soya Scripting API,\n  'lib-soya' and the Soya SDK can be found at http://www.saltstorm.net/\n  ---------------------------------------------------------------------------\n  * ECMAScript is the international standard for javascript.\n-----------------------------------------------------------------------------\n</resource>\n\n<resource id=\"copyright\">\n-----------------------------------------------------------------------------\n\n  This program is free software; you can redistribute it and/or\n  modify it under the terms of the GNU General Public License\n  version 2 as published by the Free Software Foundation.\n\n  This program is distributed in the hope that it will be useful,\n  but WITHOUT ANY WARRANTY; without even the implied warranty of\n  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n  GNU General Public License for more details.\n\n  You should have received a copy of the GNU General Public License\n  along with this program; if not, write to the Free Software\n  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA\n\n-----------------------------------------------------------------------------\n\n</resource>\n\n<resource id=\"usage\">\n------------------------------------------------------------------------------\n Usage: cscript ESC.wsf -l [0-4] -ow output.js foo.js bar.js C:\\scripts\\baz...\n -----------------------------------------------------------------------------\n  -a  [-about]             : Description page\n  -c  [-copyright]         : Copyright/license notice\n  -e  [-example]           : Examples of usage\n  -h  [-help]              : This help-screen\n -----------------------------------------------------------------------------\n  -l  [-level]   [01(2)34] : [optional] Set crunch-level (4 sets -$ on)\n  -s  [-silent]            : [optional] Run silent, nada stdout\n  -v  [-verbose]           : [optional] Run in verbose mode\n  -$                       : [optional] Activate variable-substitution engine\n -----------------------------------------------------------------------------\n  -oa &lt;filename&gt;           : Target filename for appending\n  -ow &lt;filename&gt;           : Target filename for writing\n  -ow STDOUT               : Write stream to STDOUT\n -----------------------------------------------------------------------------\n &lt;input-file(s)&gt;           : [required]\n  file(s) and/or directories containing scripts to crunch...\n  (paths containing spaces must be quoted)\n</resource>\n\n<resource id=\"example\">\n-----------------------------------------------------------------------------\n Examples of usage.\n\n  Crunch 'original1.js','original2.js' and 'original3.js' at\n  level 2 (default) and save the output as 'crunched.js'.\n  Any previous file named 'crunched.js' will be overwritten.\n   X:\\cscript ESC.wsf -ow crunched.js original1.js original2.js original3.js\n  ---------------------------------------------------------------------------\n\n  Grab all scriptfiles (.js) in directory 'C:\\script-directory' and crunch\n  them at level 1 (comment and empty line removal only) and append the result\n  to 'crunched.js'. If 'crunched.js' doesn't exist, it will be created.\n   X:\\cscript ESC.wsf -l 1 -oa crunched.js C:\\script-directory\n  ---------------------------------------------------------------------------\n\n  Subject 'original1.js' and 'original2.js' for variable substitution,\n  but perform no comment or whitespace removal.\n  Redirect output to STDOUT instead of writing to file.\n   X:\\cscript ESC.wsf -l 0 -$ -ow STDOUT original1.js original2.js\n  ---------------------------------------------------------------------------\n\n  Crunch 'original.js' using variable substitution and remove\n  any occurance of whitespace (where permitted...)\n  and save it as 'crunched.js' (equals -l 3 -$)\n   X:\\cscript ESC.wsf -l 4 -ow crunched.js original.js\n  ---------------------------------------------------------------------------\n\n Try 'ESC.wsf -help' for information about available run-time directives.\n-----------------------------------------------------------------------------\n</resource>\n\n<resource id=\"wscript\">\nESC must be run from a DOS command prompt under\t\ncscript.exe. Do you want to switch host and have\nESC bring up a helpscreen ?\n\n</resource>\n\n<resource id=\"jscript\">\nESC needs JScript 5.5 or higher to score...\nYou need to update your version of JScript to run ESC.\nRead the 'Requirements' section in the manual for information\nhow to obtain and install the latest version of Microsofts\n'Windows Script' package.\n\n</resource>\n\n<resource id=\"common.map\">\n\nAnchor\nActiveXObject\nCall\nClosure\nComponents\nDictionary\nDocument\nDOMParser\nEmbed\nEvalError\nEvent\nForm\nGlobal\nHttpCookie\nImage\nJavaArray\nJavaClass\nJavaMethod\nJavaObject\nJavaPackage\nLayer\nMimeType\nMimeTypeArray\nOption\nUrl\nPackages\nPlugin\nPluginArray\nPopup\nRangeError\nReferenceError\nTypeError\nStyleClass\nStyleSelector\nSyntaxError\nTypeError\nWScript\nURIError\nXMLHttpRequest\nXMLSerializer\nXPathEvaluator\nXSLTDocument\nXSLTProcessor\nAttr\nCDATASection\nCharacterData\nComment\nCSS2Properties\nDOMException\nDOMImplementation\nDocumentType\nElement\nEntityReference\nEvalError\nNamedNodeMap\nNode\nNodeList\nNotation\nProcessingInstruction\nText\nHTMLElement\nHTMLDocument\nHTMLCollection\nHTMLHtmlElement\nHTMLHeadElement\nHTMLLinkElement\nHTMLTitleElement\nHTMLMetaElement\nHTMLBaseElement\nHTMLIsIndexElement\nHTMLStyleElement\nHTMLBodyElement\nHTMLFormElement\nHTMLSelectElement\nHTMLOptGroupElement\nHTMLOptionElement\nHTMLInputElement\nHTMLTextAreaElement\nHTMLButtonElement\nHTMLLabelElement\nHTMLFieldSetElement\nHTMLLegendElement\nHTMLUListElement\nHTMLOListElement \nHTMLDListElement\nHTMLDirectoryElement\nHTMLMenuElement\nHTMLLIElement\nHTMLBlockquoteElement \nHTMLDivElement\nHTMLParagraphElement\nHTMLHeadingElement\nHTMLQuoteElement\nHTMLPreElement\nHTMLBRElement\nHTMLBaseFontElement \nHTMLFontElement\nHTMLHRElement\nHTMLModElement \nHTMLAnchorElement\nHTMLImageElement\nHTMLObjectElement\nHTMLParamElement\nHTMLAppletElement\nHTMLMapElement\nHTMLAreaElement\nHTMLScriptElement\nHTMLTableElement\nHTMLTableCaptionElement\nHTMLTableColElement\nHTMLTableSectionElement\nHTMLTableRowElement\nHTMLTableCellElement\nHTMLFrameSetElement\nHTMLFrameElement\nHTMLIFrameElement\n_newEnum\nalert\natob\nattachEvent\nback\nbtoa\ncaptureEvents\nclearTimeout\nclearInterval\nclose\nCollectGarbage\nconfirm\ncreateEventObject \ncreatePopup\ndecodeURI\ndecodeURIComponent\ndetachEvent\ndump\nencodeURI\nencodeURIComponent\nescape\neval\nexecScript\nfind\nforward\nframeElement\ngetAttention\nGetAttention\ngetClass\ngetComputedStyle\ngetResource\nGetObject\nhome\nisFinite\nisNaN\nmoveBy\nmoveTo\nopen\nopenDialog\nparseInt\nparseFloat\nprint\nprompt\nreleaseEvents\nresizeBy\nresizeTo\nScriptEngine\nScriptEngineMajorVersion\nScriptEngineMinorVersion\nScriptEngineBuildVersion    \nscroll\nscrollBy\nscrollByLines\nscrollByPages\nscrollIntoView\nscrollTo\nsetCursor\nsetInterval\nsetTimeout\nshowHelp\nshowModalDialog\nshowModelessDialog\nsizeToContent\nstop\ntaint\ntoString\nupdateCommands\nunescape\nuntaint\nvalueOf\n_content\nappCore\narguments\narity\ncallee\ncaller\nclientInformation\nclipboardData\nclosed\nconstructor\ncontrollers\ncrypto\ndebug\ndefaultStatus\ndirectories\ndocument\nelement\nevent\nexternal\nhistory\nforward\nframes\nInfinity\ninnerHeight\ninnerWidth\njava\nlength\nloading\nlocation\nlocationbar\nname\nmenubar\nnavigator\nnetscape\noffscreenBuffering\nopener\nopera\nouterHeight\nouterWidth\npageXOffset\npageYOffset\nparent\npersonalbar\npkcs11\nprompter\nprototype\nreturnValue\nscreen\nscreenLeft\nscreenTop\nscreenX\nscreenY\nscrollX\nscrollY\nscrollbars\nself\nsidebar\nstatus\nstatusbar\nstyle\nsun\ntitle\ntoolbar\ntop\nwindow\nonafterprint\nonbeforeprint\nonbeforeunload\nonblur\nonchange\nonclick\nonclose\nonerror\nonfocus\nonhelp\nonload\nonresize\nonreset\nonscroll\nonselect\nonunload\nonmousedown\nonmouseup\nonmouseover\nonmouseout\nonkeydown\nonkeyup\nonkeypress\nonmousemove\nonsubmit\nonreset\nonchange\nonselect\nonclose\nonabort\nonerror\nonpaint\nondragdrop\nSoya\nBOOTSTRAP\n</resource>\n\n<resource id=\"core.map\">\n\nabstract\nbreak\ncontinue\nconst\nclass\ncatch\ncase\ndebugger\ndefault\ndouble\ndelete\ndo\nenum\nextends\nelse\nfunction\nfinally\nfloat\nfalse\nfor\nget\ninstanceof\nimplements\nimport\nint\nin\nif\nlong\nnull\nnew\nprotected\nprivate\npackage\npublic\nreturn\nswitch\nstatic\nsuper\nset\ntypeof\nthrow\ntrue\nthis\ntry\nundefined\nvoid\nvar\nwhile\nwith\ngetter\nsetter\n__defineGetter__\n__defineSetter__\nend\nelif \ncc_on \n_win32\n_win16\n_mac\n_alpha\n_x86\n_mc680x0\n_PowerPC\n_jscript\n_jscript_build\n_jscript_version\nArray\nBoolean\nDate\nEnumerator\nError\nFunction\nMath\nNumber\nObject\nRegExp\nString\nVBArray\n\n</resource>\n\n<script language=\"JScript\">\n<![CDATA[\n/*** <POD [ESCtool] (Soya/1.0.0-b10; crlvl:2/1; Tue, 28 Feb 2006 21:22:16 UTC)> ***/\n/**\nProving that ESC actually can handle name-mangling and as a general self-sanity\n check, ESC has been used to compress itself along with other required Soya-beans\n while creating the package you see below. To examine these beans in a more human\n readable form, get the latest distribution of the Soya API.\n**/\nfunction Soya_API($h)\n{\nthis.name='Soya';\nthis.version='1.0.0-b10';\nthis.type='static';\nthis.debug=0;\nthis.host=$h;\nthis.libPath='/lib-soya/';\nthis.podPath='pods';\nthis.resourcePath='resources';\nthis.attachBean=$a;\nthis.declareBean=$b;\nthis.registerBean=$c;\nthis.BeanPrototype=Soya_BeanPrototype;\nthis.beans=new Object();\nthis.beans.all=new Array();\nSoya_Loader.prototype=new this.BeanPrototype();\nthis.Loader=new Object();\nthis.Loader.orphans=new Array();\nthis.Loader.callbacks=new Object();\nthis.declareBean('Soya.BeanPrototype',null,this.name,false,true);\n}\nfunction Soya_VirtualBean(){}\nfunction Soya_BeanPrototype(){\nthis.name='Soya.BeanPrototype';\n}\nfunction $a($i){\nif(!$i.virtual){\neval($i.mutexName).prototype=$i;\neval($i.name+'='+(!$i.constructable?'new ':' ')+\n$i.mutexName+(!$i.constructable?'()':''));\n}\nelse eval($i.name+'=this.beans[\"'+$i.name+'\"]');\n$i.complete=true;\nif(this.Loader&&this.Loader.callbacks[$i.name])\nthis.Loader.callbacks[$i.name](eval($i.name));\n}\nfunction $b($j,$k,$l,$m,$n){\nvar $o=$k?new this.BeanPrototype():new Soya_VirtualBean();\n$o.name=$j;\n$o.mutexName=$k||'Soya_VirtualBean';\n$o.parentName=$l;\n$o.iid=0;\n$o.stack=new Array();\n$o.complete=Boolean($n);\n$o.constructable=($k&&!$m);\n$o.virtual=!$k;\nreturn(this.beans[$j]=this.beans.all[this.beans.all.length]=$o);\n}\nfunction $c($j,$m,$p,i){\nvar $q;\nvar $r=$j.split('\\x2e');\nvar $k=$r.join('\\x5f');\nif(!this.beans[$j]){\nif($p){\nvar $s='';\n$q=$r[0];\nfor(i=1;i<$r.length-1;i++){\n$s+=$q;\n$q+=('\\x2e'+$r[i]);\nif(i<=$p&&!this.beans[$q])\nthis.attachBean(this.declareBean($q,null,$s,true,true));\n}\n}\n$r.length-=$p?$p:1;\n$q=$r.join('\\x2e');\nthis.declareBean($j,$k,$q,$m);\nif($r.length>1&&!this.beans[$q])\nthis.Loader.orphans[this.Loader.orphans.length]=this.beans[$j];\nelse{\nthis.attachBean(this.beans[$j]);\nvar $t=new Array();\nfor(i=0;i<this.Loader.orphans.length;i++)\nif(this.Loader.orphans[i].parentName==$j)\nthis.attachBean(this.Loader.orphans[i]);\nelse $t[$t.length]=this.Loader.orphans[i];\nthis.Loader.orphans=$t;\n}\n}\nreturn Boolean(i)\n}\nfunction $d($u){\nthis.getResourcePath=Function('sName',\n\"return(Soya.libPath + Soya.resourcePath + '/' + (sName||this.name).split('.').join('/') + '/')\");\nthis.getClass=Function('sName','return eval(Soya.beans[sName || this.name].mutexName)');\nthis.toString=Function(\"return('[object ' + (this.name || 'noname') + ']')\");\nthis.getBeanPath=Function('sName',\n\"return(Soya.libPath + (sName||this.name).split('.').join('/') + '.js')\");\nthis.type='static';\nif(!$u){\nthis.finalize=$f;\nthis.initialize=$e;\n}\n}\nfunction $e($v){\nthis.iid=this.getClass().prototype.iid++;\nif(this.stackable)\nthis.stack[this.iid]=this;\nif(!Soya.beans[this.name].initialized){\n$v=$v||\nSoya.host[Soya.beans[this.name].mutexName+'_initialize'];\nif(typeof($v)=='function')\nSoya.beans[this.name].initialized=!$v(this.getClass(),this);\n}\n}\nfunction $f($w){\n$w=$w||\nSoya.host[Soya.beans[this.name].mutexName+'_finalize'];\nif(typeof($w)=='function')\n$w(this.getClass(),this);\n}\nfunction Soya_Loader(){};\nfunction $g($x,$y,$z){\nif(!Soya.fso)\nSoya.fso=new ActiveXObject('Scripting.FilesystemObject');\nif(Soya.fso.FileExists($x)){\nvar $i=Soya.fso.GetFile($x),\n$A=Soya.fso.OpenTextFile($i.Path),\n$B=$A.Read($z||$i.Size);\n$A.Close();\nreturn $B;\n}\nelse if(!$y)\nreturn(WScript.Echo(this.name+' '+Soya.version+\n'> File Not found: '+$x),WScript.Quit(99));\nelse return '';\n}\nSoya_BeanPrototype.prototype=new $d(0);\nSoya_VirtualBean.prototype=new $d(1);\nSoya_API.prototype=new $d(1);\nvar Soya=new Soya_API(this);\nif(typeof(BOOTSTRAP)=='function')BOOTSTRAP(Soya);\nfunction Soya_Common()\n{\nthis.name='Soya.Common';\nthis.type='static';\nthis.version='1.03';\nthis.dependencies=[];\nthis.destroy=$E;\nthis.makeFunction=$G;\nthis.typematch=$F;\nthis.getObject=$C;\nthis.$ih=$H;\nFunction.prototype.getArguments=$D;\nSoya.BeanPrototype.prototype.Extends=\nFunction('oBean','bOvr','Soya.Common.$ih(oBean, this, bOvr)');\nSoya.BeanPrototype.prototype.Implements=\nFunction('oBean','bOvr','Soya.Common.$ih(this, oBean, bOvr)');\nthis.interfaces=new Object();\nthis.interfaces['Scripting.FilesystemObject']=Soya.fso;\n}\nfunction $C($I,$J){\nif(typeof(this.interfaces[$I])=='undefined'){\nif(typeof ActiveXObject=='function'){\nSoya.host.msieax=null;\nif(typeof Error=='function')\neval('try{Soya.host.msieax=new ActiveXObject(\"'+$I+'\")}catch(e){}');\nelse{\nvar $K=String(\"on error resume next\\nself.msieax=CreateObject('\"+$I+\"'))\");\nself.execScript($K,'vbscript');\n}\nif(!$J)\nreturn Soya.host.msieax;\nthis.interfaces[$I]=Soya.host.msieax;\n}\n}\nreturn this.interfaces[$I]||void(0);\n}\nfunction $D($L){\nvar $M=[],\n$N=(isNaN($L)||$L<1)?\n0:Math.min($L,this.arguments.length);\nfor(;$N<this.arguments.length;$N++)\n$M[$M.length]=this.arguments[$N];\nreturn $M;\n}\nfunction $E($O){\nif($O!=null&&typeof($O)=='object')\nfor(var $P in $O){\nif(typeof($O[$P])=='object'&&$O[$P])\nif($O[$P].constructor&&!$O[$P].style){\nthis.destroy($O[$P]);\ndelete($O[$P]);\n}\nelse $O[$P]=null;\n}\n}\nfunction $F($Q,$R){\nvar $S;\nswitch(typeof($Q)){\ncase 'number':$S=2;break;\ncase 'boolean':$S=4;break;\ncase 'string':$S=8;break;\ncase 'function':$S=16;break;\ncase 'object':$S=32;break;\ndefault:$S=1;break;\n}\nreturn Boolean($S&($R||62));\n}\nfunction $G($T){\nif($T&&this.typematch($T,16))\nreturn $T;\nelse return Function(($T&&this.typematch($T,8))?$T:'');\n}\nfunction $H($U,$V,$W){\nfor(var $P in $U)\nif($P!='name'&&(!$W||typeof($V[$P])=='undefined'))\n$V[$P]=$U[$P];\n}\nif(typeof(Soya)=='object')Soya.registerBean('Soya.Common',true);\nfunction Soya_WSH()\n{\nthis.name='Soya.WSH';\nthis.type='static';\nthis.version='0.88';\nthis.dependencies=['Soya.Common','Soya.WSH.Registry'];\nthis.osInfo={};\nthis.arguments={length:0};\nthis.$09=function($00)\n{return $00.length<2?$00:$00.replace(/^\\\\-/,'-').replace(/\\\\{2}/g,'\\\\')};\nthis.getArgument=function($01){return(this.arguments[$01]||\"\")}\nthis.getArguments=$X;\nthis.getOSInfo=$Z;\nthis.getShell=$Y;\n}\nfunction $X(){\nif(!this.arguments.length&&WScript.Arguments.length){\nvar i,$02,$03=[],$04=new RegExp('^-+');\nfor(i=0;i<WScript.Arguments.length;i++)\n$03[$03.length]=WScript.Arguments.item(i);\nfor(i=0;i<$03.length;i++){\n$02=$03[i].replace($04,'-');\nif($02.length>1&&$04.test($02)){\nif(typeof $03[i+1]!='undefined'&&!$04.test($03[i+1]))\nthis.arguments[this.$09($02.replace($04,''))]=\nthis.$09($03[1+(i++)]);\nelse this.arguments[this.$09($02.replace($04,''))]=1;\n};\nelse if($02.length)\nthis.arguments[this.arguments.length++]=this.$09($03[i]);\n}\n}\nreturn this.arguments;\n}\nfunction $Y(){\nif(!this.shell)\nthis.shell=Soya.Common.getObject('WScript.Shell');\nreturn this.shell;\n}\nfunction $Z(){\nif(this.osInfo.$0a)\nreturn this.osInfo;\nvar $05=Soya.Common.getObject('Scripting.FilesystemObject'),\n$06=this.getShell().ExpandEnvironmentStrings(\"%SYSTEMROOT%\");\nthis.osInfo.MSIEVersion=Soya.WSH.Registry.regRead('HKLM\\\\SOFTWARE\\\\Microsoft\\\\Internet Explorer\\\\Version');\nthis.osInfo.NETVersion=Soya.WSH.Registry.regRead('HKLM\\SOFTWARE\\Microsoft\\.NETFramework\\\\Version')||-1;\nthis.osInfo.SPVersion=Soya.WSH.Registry.regRead('HKLM\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CSDVersion')||-1;\nthis.osInfo.JSVersion=parseFloat(ScriptEngineMajorVersion()+'.'+ScriptEngineMinorVersion());\nif($05.FolderExists($06+'\\\\system32'))\n$07=$05.GetFileVersion($06+'\\\\system32\\\\kernel32.dll');\nelse if($05.FolderExists($06+'\\\\system'))\n$07=$05.GetFileVersion($06+'\\\\system\\\\kernel32.dll');\nif($07){\n/^(\\d)\\.(\\d+)\\.(\\d+)\\.\\d+$/.test($07);\nthis.osInfo.majorVersion=parseInt(RegExp.$1);\nthis.osInfo.minorVersion=parseInt(RegExp.$2,10);\nthis.osInfo.buildVersion=parseInt(RegExp.$3,10);\nthis.osInfo.version=$07;\nvar $08={\n'4.00.950':'Win95',\n'4.00.1111':'Win95 OSR2',\n'4.00.1381':'WinNT',\n'4.10.1998':'Win98',\n'4.10.2222':'Win98SE',\n'4.90.3000':'WinME',\n'5.0.2195':'Win2K',\n'5.10.2600':'WinXP'\n};\nthis.osInfo.name=$08[$07.replace(/\\.\\d+$/,'')]||'unknown';\n}\nthis.osInfo.$0a=1;\nreturn this.osInfo;\n}\nif(typeof(Soya)=='object')Soya.registerBean('Soya.WSH',true);\nfunction Soya_Saltstorm_ESC($0t,$0u,$0v,$y)\n{\nthis.name='Soya.Saltstorm.ESC';\nthis.version='1.14';\nthis.type='constructor';\nthis.dependencies=['Soya.Common','Soya.ECMA.Array'];\nthis.resourcePath=$0v||'';\nthis.crunchLevel=$0t||2;\nthis.substitute=false;\nthis.verbose=$0u;\nthis.silent=($y||typeof window=='object');\nthis.initialize();\nthis.flush();\n}\nfunction Soya_Saltstorm_ESC_initialize($0w,$0x){\n$0y=$0x;\nvar $0z=\"(?:\\\"{2}|'{2}|\\\".*?.\\\"|'.*?.'|\\\\/(?!\\\\*|\\\\/)..*?\\\\/)\";\nvar $0A=\"[-!%&;<=>~:\\\\/\\\\^\\\\+\\\\|\\\\,\\\\(\\\\)\\\\*\\\\?\\\\[\\\\]\\\\{\\\\}]+\";\nvar $0B=\"\\\\/\\\\*(?!@).(?:.|\\\\n)*?\\\\*\\\\/|\\\\/\\\\/.*\";\nvar $0C=\"\\\".*?.\\\"|'.*?.'|\\\\s*\\\\/{2,}.*\\\\n\";\nvar $0D=\"\\\\}(?!catch|else|while)([^;,\\\\|\\\\.\\\\]\\\\)\\\\}])\";\nwith($0w){\nprototype.fileFilter=new RegExp('.+\\\\\\\\(?!$|_)\\\\w*\\\\.js$','i');\nprototype.$1r=[\"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\",9];\nprototype.$1s={};\nprototype.fso=Soya.Loader.fso||new ActiveXObject('Scripting.FilesystemObject');\nprototype.core={};\nprototype.bless={};\nprototype.mangle={};\nprototype.common={};\nprototype.$1t=$g;\nprototype.crunch=$0r;\nprototype.flush=function(){this.buffer='';this.report=new $0c()};\nprototype.getSubstitute=$0g;\nprototype.loadMaps=$0d;\nprototype.out=$0b;\nprototype.load=$0e;\nprototype.save=$0f;\nprototype.getReport=$0s;\nprototype.$1u=new RegExp(\"[$_]\");\nprototype.$1v=new RegExp(\"[^$\\\\w]\",\"g\");\nprototype.$1w=new RegExp(\"^[\\\\x00\\\\.\\\"']\");\nprototype.$1x=new RegExp(\"\\\\s+$\");\nprototype.$1y=new RegExp(\"^\\\\s*\\\\W\");\nprototype.$1z=new RegExp(\"^[-\\\\\\\\+\\\"~'!]\");\nprototype.$1A=new RegExp(\"(\"+$0z+\")|(\"+$0B+\")\",\"g\");\nprototype.$1B=new RegExp(\"(\"+$0C+\")\",\"g\");\nprototype.$1C=new RegExp(\"(\"+$0z+\")|(\\\\r?\\\\n\\\\s+)|(\\\\x20{2,})\",\"g\");\nprototype.$1D=new RegExp(\"(\"+$0z+\")|(\\\\w+)?\\\\s+(\"+$0A+\")\",\"g\");\nprototype.$1E=new RegExp(\"(\"+$0z+\")|(\"+$0A+\")[ \\\\t]+\",\"g\");\nprototype.$1F=new RegExp(\"(\"+$0z+\")|function[\\\\n\\\\s]+([$\\\\w]+)\",\"g\");\nprototype.$1G=new RegExp(\"(\"+$0z+\")|(\"+$0B+\")|(\\\\W[\\\\n\\\\s]*?[$\\\\w]+)\\\\b\",\"gm\");\nprototype.$1H=new RegExp(\"(\"+$0z+\")|(\\\\x00)|\\\\.[\\\\n\\\\s]*?([$_][$\\\\w]{3,})\",\"g\");\nprototype.$1I=new RegExp(\"(\"+$0z+\")|(\\\\S)\\\\s*[\\\\r\\\\n]+\\\\s*(\\\\S)\",\"g\");\nprototype.$1J=new RegExp(\"[$\\\\w][$\\\\w]\");\nprototype.$1K=new RegExp(\"(\"+$0D+\")\",\"g\");\n}\n}\nfunction $0b($0E,$0F){\nif(!this.silent){\nvar $0G=String((!$0F?'ESC> ':'')+($0E||''));\nWScript.Echo($0G);\n}\n}\nfunction $0c(){\nthis.scripts=[];\nthis.rawSize=\nthis.crunchedSize=\nthis.elapsedTime=0;\n}\nfunction $0d(){\nif(this.$1L)\nreturn;\nvar $0H,$0I,$0J,$0K,$0L;\nfor(var i=0;i<arguments.length;i++){\n$0H=arguments[i].replace(/\\W.+$/,'');\ntry{\n$0J=getResource(arguments[i]).split(/\\r?\\n/g)||[];\nfor(var j=0;j<$0J.length;j++)\nif($0J[j].length&&!$0y.$1y.test($0J[j]))\nSoya_Saltstorm_ESC.prototype[$0H][$0J[j].replace($0y.$1x,'')]=1;\nif(this.verbose)\nthis.out('Parsed map \"'+$0H+'\", '+$0J.length+' entries.')\n}\ncatch($0M){\nif($0M)\n$0J=null;\n}\nif($0J)\ncontinue;\nelse $0I=this.fso.BuildPath(this.resourcePath,arguments[i]);\nif(/^common|core/.test(arguments[i])&&!this.fso.FileExists($0I)){\nthis.out('Couldn\\'t $0N $0O:'+\nthis.fso.GetAbsolutePathName($0I));\nreturn WScript.Quit(99);\n}\nelse if(typeof this[$0H]!='object'){\nthis.out('Unrecognized mapname : '+$0H);\nreturn WScript.Quit(99);\n}\nelse if(this.fso.FileExists($0I)){\n$0J=this.fso.OpenTextFile($0I);\n$0L=0;\nwhile(!$0J.AtEndOfStream){\n$0K=$0J.ReadLine();\nif($0K.length&&!$0y.$1y.test($0K))\nSoya_Saltstorm_ESC.prototype[$0H][$0K.replace($0y.$1x,'')]=++$0L;\n}\n$0J.Close();\nSoya_Saltstorm_ESC.prototype[$0H].length=$0L;\nif(this.verbose)\nthis.out('Loaded map \"'+$0H+'\", '+$0L+' entries. ['+$0I+']');\n}\n}\nthis.$1L=1;\n}\nfunction $0e(){\nvar i,$0P,$0Q,$0R,$0S=[];\nfor(i=0;i<arguments.length;i++){\nif(arguments[i]&&this.fso.FolderExists(arguments[i])){\n$0R=new Enumerator(this.fso.GetFolder(arguments[i]).SubFolders);\nfor(;!$0R.atEnd();$0R.moveNext())\narguments[arguments.length++]=$0R.item().Path;\n$0R=new Enumerator(this.fso.GetFolder(arguments[i]).Files);\nfor(;!$0R.atEnd();$0R.moveNext())\nif($0R.item().Size&&this.fileFilter.test($0R.item().Path))\n$0S.push($0R.item().Path);\n}\nelse if(arguments[i])\n$0S.push(arguments[i]);\n}\nfor(i=0;i<$0S.length;i++){\nif(!this.fso.FileExists($0S[i])){\nthis.out('Couldn\\'t $0N $0T:\"' + this.fso.GetAbsolutePathName(aLoadQueue[i]) + '\"');\nreturn WScript.Quit(99);\n}\nelse if(this.verbose)\nthis.out('Loading script :\"'+this.fso.GetAbsolutePathName($0S[i])+'\"');\n$0Q=this.fso.GetFile($0S[i]);\nthis.buffer+=(this.report.scripts.length?'\\r\\n':'');\nthis.buffer+=this.$1t($0Q.Path,true);\nthis.report.scripts.push(\n$0Q.Path+' ('+($0Q.Size/1024).toFixed(2)+' kb)');\n}\nreturn $0S.length;\n}\nfunction $0f($0U,$0V){\nvar $0W;\nif(!$0U){\nthis.out('Need an output filename!');\nreturn WScript.Quit(99);\n}\nelse if(this.fso.FolderExists($0U)){\nthis.out('Need an output filename, \"'+\nthis.fso.GetAbsolutePathName($0U)+'\" is a folder.');\nreturn WScript.Quit(99);\n}\nthis.outFile=this.fso.GetAbsolutePathName($0U);\nthis.outMode=$0V?'Writing':'Appending';\n$0W=this.fso.OpenTextFile(this.outFile,($0V?2:8),true);\n$0W.WriteLine(this.buffer);\n$0W.Close();\n}\nfunction $0g($0X){\nif(!this.$1s[$0X]){\nvar k=1;\nwhile(k<5){\nthis.$1r[k]++;\nif(this.$1r[k]&&!(this.$1r[k]%62)){\nk++;\nif(this.$1r.length==k)\nthis.$1r[k]=-1;\n}\nelse break;\n}\nthis.$1s[$0X]='$';\nfor(k=this.$1r.length-1;k>0;k--)\nthis.$1s[$0X]+=this.$1r[0].charAt(this.$1r[k]%62);\nif(this.verbose)\nthis.out('Substituting ['+this.$1s[$0X]+'] -> ['+$0X+']');\n}\nreturn this.$1s[$0X];\n}\nfunction $0h($0Y,$0Z,$10){\nif(typeof $10!='undefined')\nreturn '';\nelse return $0Y;\n}\nfunction $0i($0Y,$11){\nif(typeof $11!='undefined'&&/^\\s+/.test($11))\nreturn '\\r\\n';\nelse return $0Y;\n}\nfunction $0j($0Y,$12,$13){\nif(typeof $12!='undefined')\nreturn $0Y;\nelse if($13&&$13.length>2&&\n($0y.mangle[$13]||$0y.$1u.test($13.charAt(0))))\n$13=$0y.getSubstitute($13);\nelse Soya_Saltstorm_ESC.prototype.bless[$13]=1;\nreturn String('function \\x00'+$13);\n}\nfunction $0k($0Y,$12,$14,$15){\nif(typeof $12=='undefined'&&typeof $14=='undefined'&&typeof $15=='string'){\n$15=$15.replace(/\\s+/g,'');\nif(!$0y.$1w.test($15)&&isNaN(parseInt($15.substr(1),10))){\n$15=$15.replace($0y.$1v,'');\nif($15.length>2&&!$0y.core[$15]&&!$0y.common[$15]&&\n!$0y.bless[$15]&&($0y.mangle[$15]||!$0y.mangle.length))\nreturn $0Y.replace($15,$0y.getSubstitute($15));\n}\n}\nreturn $0Y;\n}\nfunction $0l($0Y,$12,$16,$P){\nif(typeof $P=='string')\nreturn(!$0y.core[$P]&&!$0y.common[$P]&&!$0y.bless[$P])?\nString('.'+$0y.getSubstitute($P)):$0Y;\nelse if(typeof $12!='undefined')\nreturn $0Y;\nelse return '';\n}\nfunction $0m($0Y,$12,$17,$18,$19){\nif(typeof $12!='undefined')\nreturn $0Y;\nelse if(typeof $17!='undefined')\nreturn '\\r\\n';\nelse if(typeof $18!='undefined')\nreturn ' ';\nelse return '';\n}\nfunction $0n($0Y,$12,$1a,$1b){\nif(typeof $12=='undefined'){\nif(!$0y.$1z.test($1b)||!$1a||!$0y.core[$1a])\nreturn($1a||'')+$1b;\nelse return $0Y;\n}\nelse return $12;\n}\nfunction $0o($0Y,$12,$1b){\nif(typeof $12!='undefined')\nreturn $0Y;\nelse return $1b;\n}\nfunction $0p($0Y,$1c,$1d){\nreturn('};'+$1d);\n}\nfunction $0q($0Y,$12,$1e,$1f){\nif(typeof $1e=='undefined')\nreturn $0Y;\nvar $1g=($0y.$1J.test($1e+$1f))?' ':'';\nreturn $1e+$1g+$1f;\n}\nfunction $0r($1h,$0t,$1i){\nvar $B=(typeof $1h=='string')?$1h:this.buffer;\nthis.loadMaps('core.map','common.map','bless.map','mangle.map');\nif(!this.buffer.length&&!$1h)\nreturn String();\nelse if(typeof $0t=='number')\nthis.crunchLevel=$0t;\nvar $1j=(new Date()).getTime()-1;\nvar $1k=$B.length;\nthis.report.rawSize+=$B.length;\nif(this.crunchLevel>=1){\n$B=$B.replace(this.$1A,$0h)\n.replace(this.$1B,$0i)\n.replace(/\\s*\\r?\\n/g,'\\r\\n');\nif(this.verbose)\nthis.out('Removing comments, empty lines and trailing whitespace, saved '+\n($1k-$B.length)+' bytes.');\n$1k=$B.length;\n}\nif(this.crunchLevel>=2){\n$B=$B.replace(this.$1C,$0m);\nif(this.verbose)\nthis.out('Removing tabs and spaces, saved '+\n($1k-$B.length)+' bytes.');\n$1k=$B.length;\n$B=$B.replace(this.$1D,$0n);\nif(this.verbose)\nthis.out('Removing spaces left to operators, saved '+\n($1k-$B.length)+' bytes.');\n$1k=$B.length;\n$B=$B.replace(this.$1E,$0o);\nif(this.verbose)\nthis.out('Removing spaces right to operators, saved '+\n($1k-$B.length)+' bytes.');\n$1k=$B.length;\n}\nif(this.substitute||$1i||this.crunchLevel>=4){\n$B=$B.replace(this.$1F,$0j);\n$B=$B.replace(this.$1G,$0k);\n$B=$B.replace(this.$1H,$0l);\nif(this.verbose)\nthis.out('Substitution summary, saved '+\n($1k-$B.length)+' bytes.');\n$1k=$B.length;\n}\nif(this.crunchLevel>=3){\n$B=$B.replace(this.$1I,$0q);\n$B=$B.replace(this.$1K,$0p);\n$B+='\\r\\n';\nif(this.verbose){\nthis.out('Removing newlines, saved '+\n($1k-$B.length)+' bytes.');\nthis.out('',1);\n}\n}\nif(typeof $1h=='string'){\nthis.report.crunchedSize+=$B.length;\nthis.buffer+=$B;\n}\nelse{\nthis.buffer=$B;\nthis.report.crunchedSize=$B.length;\n}\nthis.report.elapsedTime+=(new Date()).getTime()-$1j;\nreturn this.buffer;\n}\nfunction $0s($1l){\nvar $1m=($1l||'\\r\\n'),\n$1n=this.label?String($1m+this.label+$1m):'';\nif(!this.report.elapsedTime){\n$1n+='Nothing to report, yet...';\nreturn(!$1o)?this.out($1n,1):$1n;\n}\nvar $1p=Boolean(this.substitute||this.crunchLevel>=4),\n$1q=this.report.rawSize-this.report.crunchedSize;\nif(this.report.scripts.length){\n$1n+=\"-----------------------------------------------------------------------------\"+$1m;\n$1n+=\" Crunching script(s):\\r\\n\\t * \"+this.report.scripts.join(\"\\r\\n\\t * \")+$1m;\n$1n+=\"-----------------------------------------------------------------------------\"+$1m;\n$1n+=\" \"+(this.outMode||\"Put\")+\" to : \"+(this.outFile||\"[buffer]\")+\" (\"+\n(this.report.crunchedSize/1024).toFixed(2)+\" kb)\"+$1m;\n}\n$1n+=\"-----------------------------------------------------------------------------\"+$1m;\n$1n+=\" Processtime     :\\t\"+(this.report.elapsedTime/1000).toFixed(3)+\" secs\"+$1m;\n$1n+=\" Crunch-level    :\\t\"+this.crunchLevel+$1m;\n$1n+=\" Subst. engine   :\\t\"+($1p?'On':'Off')+$1m;\nif($1p)\n$1n+=\" Substitutions   :\\t\"+(this.$1r[1]-9)+$1m;\n$1n+=\" Original size   :\\t\"+(this.report.rawSize/1024).toFixed(2)+\" kb\"+$1m;\n$1n+=\" Crunched size   :\\t\"+(this.report.crunchedSize/1024).toFixed(2)+\" kb\"+$1m;\n$1n+=\" Saving ratio    :\\t\"+($1q/1024).toFixed(2)+\" kb\"+$1m;\n$1n+=\"   -'' ''-   (%) :\\t\"+(($1q/this.report.rawSize)*100).toFixed(2)+\" %\"+$1m;\n$1n+=\"-----------------------------------------------------------------------------\"+$1m;\nreturn $1n;\n}\nif(typeof(Soya)=='object')Soya.registerBean('Soya.Saltstorm.ESC',false,1);\n\n/*** </POD> ***/\n\n]]>\n</script>\n<script language=\"JScript\">\n<![CDATA[\n\t/*\n\tCommand flow control script for ESC.wsf\n\tEdited : 2005-02-06\n\t*/\n\n\tvar oShell = WScript.CreateObject('WScript.Shell');\n\n\tif(!oShell)\n\t  WScript.Quit(64);\n\n\t// Do we have Jscript 5.5+ ?\n\telse if(oShell && parseFloat(ScriptEngineMajorVersion() + '.' + ScriptEngineMinorVersion()) < 5.5)\n\t  oShell.Popup(getResource('jscript'), 64, WScript.ScriptName, 16), WScript.Quit(4);\n\t\n\t// Is ESC executed under cscript ?\n\t// if not let user select switching to cscript automagically.\n\telse if(oShell && WScript.FullName.toLowerCase().indexOf('cscript') < 0){\n\t  if(oShell.Popup(getResource('wscript'), 64, WScript.ScriptName, 52) == 6)\n\t    oShell.Run('%comspec% /Q /K cscript //NoLogo ' + WScript.ScriptName + ' -a', 9);\n\t  WScript.Quit(3);\n\t  }\n\n\t// get the cmdline arguments formatted in a nice manner.\n\tvar oArgs = Soya.WSH.getArguments();\n\n\t// should we run in verbose-mode ?;\n\tvar bVerbose = Boolean(!oArgs.s && !oArgs.silent && (oArgs.v || oArgs.verbose));\n\n\t// create an instance of the ESC object.\n\tvar esc = new Soya.Saltstorm.ESC(oArgs.l || oArgs.level, bVerbose);\n\tesc.label = 'ESC (ECMAScript Cruncher) ' + esc.version +\n\t\t\t '\\r\\nCopyright (C) 2001-2005 Thomas Loo <tloo@saltstorm.net>';\n\n\tesc.resourcePath = esc.fso.GetParentFolderName(WScript.ScriptFullName || '.');\n\tvar sOutput = String(oArgs.oa || oArgs.ow || '');\n\n\tif(oArgs.a || oArgs.about){\n\t  WScript.Echo(getResource('about'));\n\t  WScript.Quit(1);\n\t  }\n\telse if(oArgs.c || oArgs.copyright){\n\t  WScript.Echo('\\n' + esc.label + getResource('copyright'));\n\t  WScript.Quit(1);\n\t  }\n\telse if(oArgs.e || oArgs.example){\n\t  WScript.Echo('\\n' + esc.label + getResource('example'));\n\t  WScript.Quit(1);\n\t  }\n\n\t// if there are options missing, print out the help table and quit.\n\telse if((oArgs.h || oArgs.help) || !sOutput.length || !oArgs[0]){\n\t  WScript.Echo('\\n' + esc.label + getResource('usage'));\n\t  WScript.Quit((oArgs.h || oArgs.help) ? 1 : 2);\n\t  }\n\t\n\t// Wake up the variable substitution engine if option set (-$);\n\tesc.substitute = Boolean(oArgs.$);\n\n\t// load input files;\n\tfor(var i = 0; i < oArgs.length; i++)\n\t  esc.load(oArgs[i]);\n\n\t// crunch baby, crunch!;\n\tif(sOutput.toUpperCase() == 'STDOUT'){\n\t  esc.silent = true;\n\t  WScript.StdOut.Write(esc.crunch());\n\t  }\n\telse if(sOutput.length){\n\t  esc.crunch();\n\t  esc.save(sOutput, Boolean(oArgs.ow));\n\t  // write report to stdout if not silence'd.\n\t  if(!oArgs.s && !oArgs.silent)\n\t    WScript.StdOut.Write(esc.getReport());\n\t  }\n\t\n\t// Shutting down nicely..\n\tWScript.Quit(0);\n\n]]>\n</script>\n</job>\n</package>\n"
  },
  {
    "path": "bin/gzjs-esc.bat",
    "content": "cd D:\\workspace\\UI\\dev\\dwz_jui\\bin\n\nREM -------------- start package javascript --------------\n\ntype ..\\js\\dwz.core.js > dwzESC.js\ntype ..\\js\\dwz.util.date.js >> dwzESC.js\ntype ..\\js\\dwz.validate.method.js >> dwzESC.js\ntype ..\\js\\dwz.barDrag.js >> dwzESC.js\ntype ..\\js\\dwz.drag.js >> dwzESC.js\ntype ..\\js\\dwz.tree.js >> dwzESC.js\ntype ..\\js\\dwz.accordion.js >> dwzESC.js\ntype ..\\js\\dwz.ui.js >> dwzESC.js\ntype ..\\js\\dwz.theme.js >> dwzESC.js\ntype ..\\js\\dwz.switchEnv.js >> dwzESC.js\n\ntype ..\\js\\dwz.alertMsg.js >> dwzESC.js\ntype ..\\js\\dwz.contextmenu.js >> dwzESC.js\ntype ..\\js\\dwz.navTab.js >> dwzESC.js\ntype ..\\js\\dwz.tab.js >> dwzESC.js\ntype ..\\js\\dwz.resize.js >> dwzESC.js\ntype ..\\js\\dwz.dialog.js >> dwzESC.js\ntype ..\\js\\dwz.dialogDrag.js >> dwzESC.js\ntype ..\\js\\dwz.sortDrag.js >> dwzESC.js\ntype ..\\js\\dwz.cssTable.js >> dwzESC.js\ntype ..\\js\\dwz.stable.js >> dwzESC.js\ntype ..\\js\\dwz.taskBar.js >> dwzESC.js\ntype ..\\js\\dwz.ajax.js >> dwzESC.js\ntype ..\\js\\dwz.pagination.js >> dwzESC.js\ntype ..\\js\\dwz.database.js >> dwzESC.js\ntype ..\\js\\dwz.datepicker.js >> dwzESC.js\ntype ..\\js\\dwz.effects.js >> dwzESC.js\ntype ..\\js\\dwz.panel.js >> dwzESC.js\ntype ..\\js\\dwz.checkbox.js >> dwzESC.js\ntype ..\\js\\dwz.combox.js >> dwzESC.js\ntype ..\\js\\dwz.history.js >> dwzESC.js\ntype ..\\js\\dwz.print.js >> dwzESC.js\n\ncscript ESC.wsf -l 1 -ow dwzESC1.js dwzESC.js\ncscript ESC.wsf -l 2 -ow dwzESC2.js dwzESC1.js\ncscript ESC.wsf -l 3 -ow dwzESC3.js dwzESC2.js\n\ntype dwzESC2.js > dwz.min.js\n#gzip -f dwz.min.js\n#copy dwz.min.js.gz dwz.min.gzjs /y\n\ndel dwzESC*.js\ndel dwz.min.js.gz"
  },
  {
    "path": "bin/gzjs.sh",
    "content": "# http://tool.chinaz.com/js.aspx\n\n# -------------- start package javascript --------------\n\ncat ../js/dwz.core.js > dwz.all.js\ncat ../js/dwz.util.date.js >> dwz.all.js\ncat ../js/dwz.validate.method.js >> dwz.all.js\ncat ../js/dwz.barDrag.js >> dwz.all.js\ncat ../js/dwz.drag.js >> dwz.all.js\ncat ../js/dwz.tree.js >> dwz.all.js\ncat ../js/dwz.accordion.js >> dwz.all.js\ncat ../js/dwz.ui.js >> dwz.all.js\ncat ../js/dwz.theme.js >> dwz.all.js\ncat ../js/dwz.switchEnv.js >> dwz.all.js\n\ncat ../js/dwz.alertMsg.js >> dwz.all.js\ncat ../js/dwz.contextmenu.js >> dwz.all.js\ncat ../js/dwz.navTab.js >> dwz.all.js\ncat ../js/dwz.tab.js >> dwz.all.js\ncat ../js/dwz.resize.js >> dwz.all.js\ncat ../js/dwz.dialog.js >> dwz.all.js\ncat ../js/dwz.dialogDrag.js >> dwz.all.js\ncat ../js/dwz.sortDrag.js >> dwz.all.js\ncat ../js/dwz.cssTable.js >> dwz.all.js\ncat ../js/dwz.stable.js >> dwz.all.js\ncat ../js/dwz.taskBar.js >> dwz.all.js\ncat ../js/dwz.ajax.js >> dwz.all.js\ncat ../js/dwz.pagination.js >> dwz.all.js\ncat ../js/dwz.database.js >> dwz.all.js\ncat ../js/dwz.selectedLoad.js >> dwz.all.js\ncat ../js/dwz.datepicker.js >> dwz.all.js\ncat ../js/dwz.effects.js >> dwz.all.js\ncat ../js/dwz.panel.js >> dwz.all.js\ncat ../js/dwz.checkbox.js >> dwz.all.js\ncat ../js/dwz.combox.js >> dwz.all.js\ncat ../js/dwz.file.js >> dwz.all.js\ncat ../js/dwz.history.js >> dwz.all.js\ncat ../js/dwz.print.js >> dwz.all.js\n\njava -jar yuicompressor-2.4.8.jar dwz.all.js -o dwz.min.js --charset utf-8 --type js --nomunge\n\nrm -f dwz.all.js\n\n# gzip压缩\n# gzip -f dwz.all.js\n# mv dwz.min.js.gz dwz.min.gzjs\n\n\n# -------------- start package css --------------\n# cat ../../css/style.css > style.min.css\n# gzip -f style.min.css\n# mv style.min.css.gz style.min.gzcss\n"
  },
  {
    "path": "changepwd.html",
    "content": "\n<div class=\"pageContent\">\n\n\t<form method=\"post\" action=\"demo/common/ajaxDone.json\" class=\"pageForm required-validate\" onsubmit=\"return validateCallback(this, dialogAjaxDone)\">\n\t\t<div class=\"pageFormContent\" layoutH=\"58\">\n\n\t\t\t<div class=\"unit\">\n\t\t\t\t<label>旧密码：</label>\n\t\t\t\t<input type=\"password\" name=\"oldPassword\" size=\"30\" minlength=\"6\" maxlength=\"20\" class=\"required\" />\n\t\t\t</div>\n\t\t\t<div class=\"unit\">\n\t\t\t\t<label>新密码：</label>\n\t\t\t\t<input type=\"password\" id=\"cp_newPassword\" name=\"newPassword\" size=\"30\" minlength=\"6\" maxlength=\"20\" class=\"required alphanumeric\"/>\n\t\t\t</div>\n\t\t\t<div class=\"unit\">\n\t\t\t\t<label>重复输入新密码：</label>\n\t\t\t\t<input type=\"password\" name=\"rnewPassword\" size=\"30\" equalTo=\"#cp_newPassword\" class=\"required alphanumeric\"/>\n\t\t\t</div>\n\t\t\t<div class=\"unit\">\n\t\t\t\t<label>部门名称：</label>\n\t\t\t\t<input id=\"inputOrg1\" name=\"org1.id\" value=\"\" type=\"hidden\">\n\t\t\t\t<input class=\"required textInput valid\" name=\"org1.orgName\" type=\"text\" postfield=\"keyword\" suggestfields=\"orgNum,orgName\" suggesturl=\"demo/database/db_lookupSuggest.html\" lookupgroup=\"org1\" autocomplete=\"off\">\n\t\t\t\t<a class=\"btnLook\" href=\"demo/database/dwzOrgLookup.html\" lookupgroup=\"org1\">查找带回</a>\n\t\t\t\t<span class=\"info\">(suggest+lookup)</span>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"formBar\">\n\t\t\t<ul>\n\t\t\t\t<li><div class=\"buttonActive\"><div class=\"buttonContent\"><button type=\"submit\">提交</button></div></div></li>\n\t\t\t\t<li><div class=\"button\"><div class=\"buttonContent\"><button type=\"button\" class=\"close\">取消</button></div></div></li>\n\t\t\t</ul>\n\t\t</div>\n\t</form>\n\n</div>\n"
  },
  {
    "path": "chart/test/barchart.html",
    "content": "\n<div id=\"test_barchart\" style=\"height: 400px;\"></div>\n\n<script type=\"text/javascript\">\n\n(function($){\n\n\tvar myChart = echarts.init(document.getElementById('test_barchart'));\n\n\t// 指定图表的配置项和数据\n\tvar option = {\n\t\ttitle : {\n\t\t\ttext: '温度计式图表',\n\t\t\tsubtext: 'From ExcelHome',\n\t\t\tsublink: 'http://e.weibo.com/1341556070/AizJXrAEa'\n\t\t},\n\t\ttooltip : {\n\t\t\ttrigger: 'axis',\n\t\t\taxisPointer : {            // 坐标轴指示器，坐标轴触发有效\n\t\t\t\ttype : 'shadow'        // 默认为直线，可选为：'line' | 'shadow'\n\t\t\t},\n\t\t\tformatter: function (params){\n\t\t\t\treturn params[0].name + '<br/>'\n\t\t\t\t\t\t+ params[0].seriesName + ' : ' + params[0].value + '<br/>'\n\t\t\t\t\t\t+ params[1].seriesName + ' : ' + (params[1].value + params[0].value);\n\t\t\t}\n\t\t},\n\t\tlegend: {\n\t\t\tselectedMode:false,\n\t\t\tdata:['Acutal', 'Forecast']\n\t\t},\n\t\ttoolbox: {\n\t\t\tshow : true,\n\t\t\tfeature : {\n\t\t\t\tmark : {show: true},\n\t\t\t\tdataView : {show: true, readOnly: false},\n\t\t\t\trestore : {show: true},\n\t\t\t\tsaveAsImage : {show: true}\n\t\t\t}\n\t\t},\n\t\tcalculable : true,\n\t\txAxis : [\n\t\t\t{\n\t\t\t\ttype : 'category',\n\t\t\t\tdata : ['Cosco','CMA','APL','OOCL','Wanhai','Zim']\n\t\t\t}\n\t\t],\n\t\tyAxis : [\n\t\t\t{\n\t\t\t\ttype : 'value',\n\t\t\t\tboundaryGap: [0, 0.1]\n\t\t\t}\n\t\t],\n\t\tseries : [\n\t\t\t{\n\t\t\t\tname:'Acutal',\n\t\t\t\ttype:'bar',\n\t\t\t\tstack: 'sum',\n\t\t\t\tbarCategoryGap: '50%',\n\t\t\t\titemStyle: {\n\t\t\t\t\tnormal: {\n\t\t\t\t\t\tcolor: 'tomato',\n\t\t\t\t\t\tbarBorderColor: 'tomato',\n\t\t\t\t\t\tbarBorderWidth: 6,\n\t\t\t\t\t\tbarBorderRadius:0,\n\t\t\t\t\t\tlabel : {\n\t\t\t\t\t\t\tshow: true, position: 'insideTop'\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdata:[260, 200, 220, 120, 100, 80]\n\t\t\t},\n\t\t\t{\n\t\t\t\tname:'Forecast',\n\t\t\t\ttype:'bar',\n\t\t\t\tstack: 'sum',\n\t\t\t\titemStyle: {\n\t\t\t\t\tnormal: {\n\t\t\t\t\t\tcolor: '#fff',\n\t\t\t\t\t\tbarBorderColor: 'tomato',\n\t\t\t\t\t\tbarBorderWidth: 6,\n\t\t\t\t\t\tbarBorderRadius:0,\n\t\t\t\t\t\tlabel : {\n\t\t\t\t\t\t\tshow: true,\n\t\t\t\t\t\t\tposition: 'top',\n\t\t\t\t\t\t\tformatter: function (params) {\n\t\t\t\t\t\t\t\tfor (var i = 0, l = option.xAxis[0].data.length; i < l; i++) {\n\t\t\t\t\t\t\t\t\tif (option.xAxis[0].data[i] == params.name) {\n\t\t\t\t\t\t\t\t\t\treturn option.series[0].data[i] + params.value;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttextStyle: {\n\t\t\t\t\t\t\t\tcolor: 'tomato'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdata:[40, 80, 50, 80,80, 70]\n\t\t\t}\n\t\t]\n\t};\n\n\n\t// 使用刚指定的配置项和数据显示图表。\n\tmyChart.setOption(option);\n\n})(jQuery);\n\n</script>\n"
  },
  {
    "path": "chart/test/hbarchart.html",
    "content": "\n<div id=\"test_barchart\" style=\"height: 400px;\"></div>\n\n<script type=\"text/javascript\">\n\n\t(function($){\n\n\t\tvar myChart = echarts.init(document.getElementById('test_barchart'));\n\n\t\t// 指定图表的配置项和数据\n\t\tvar option = {\n\t\t\ttitle: {\n\t\t\t\ttext: 'ECharts 入门示例'\n\t\t\t},\n\t\t\ttooltip: {},\n\t\t\tlegend: {\n\t\t\t\tdata:['销量']\n\t\t\t},\n\t\t\tyAxis: {\n\t\t\t\tdata: [\"衬衫\",\"羊毛衫\",\"雪纺衫\",\"裤子\",\"高跟鞋\",\"袜子\"]\n\t\t\t},\n\t\t\txAxis: {},\n\t\t\tseries: [{\n\t\t\t\tname: '销量',\n\t\t\t\ttype: 'bar',\n\t\t\t\tdata: [5, 20, 36, 10, 10, 20]\n\t\t\t}]\n\t\t};\n\n\t\t// 使用刚指定的配置项和数据显示图表。\n\t\tmyChart.setOption(option);\n\n\t})(jQuery);\n\n</script>\n"
  },
  {
    "path": "chart/test/linechart.html",
    "content": "\n<div id=\"test_linechart\" style=\"height: 400px;\"></div>\n\n<script type=\"text/javascript\">\n\n\t(function($){\n\n\t\tvar myChart = echarts.init(document.getElementById('test_linechart'));\n\n\t\t// 指定图表的配置项和数据\n\t\tvar option = {\n\t\t\ttitle : {\n\t\t\t\ttext: '未来一周气温变化',\n\t\t\t\tsubtext: '纯属虚构'\n\t\t\t},\n\t\t\ttooltip : {\n\t\t\t\ttrigger: 'axis'\n\t\t\t},\n\t\t\tlegend: {\n\t\t\t\tdata:['最高气温','最低气温']\n\t\t\t},\n\t\t\ttoolbox: {\n\t\t\t\tshow : true,\n\t\t\t\tfeature : {\n\t\t\t\t\tmark : {show: true},\n\t\t\t\t\tdataView : {show: true, readOnly: false},\n\t\t\t\t\tmagicType : {show: true, type: ['line', 'bar']},\n\t\t\t\t\trestore : {show: true},\n\t\t\t\t\tsaveAsImage : {show: true}\n\t\t\t\t}\n\t\t\t},\n\t\t\tcalculable : true,\n\t\t\txAxis : [\n\t\t\t\t{\n\t\t\t\t\ttype : 'category',\n\t\t\t\t\tboundaryGap : false,\n\t\t\t\t\tdata : ['周一','周二','周三','周四','周五','周六','周日']\n\t\t\t\t}\n\t\t\t],\n\t\t\tyAxis : [\n\t\t\t\t{\n\t\t\t\t\ttype : 'value',\n\t\t\t\t\taxisLabel : {\n\t\t\t\t\t\tformatter: '{value} °C'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\t\t\tseries : [\n\t\t\t\t{\n\t\t\t\t\tname:'最高气温',\n\t\t\t\t\ttype:'line',\n\t\t\t\t\tdata:[11, 11, 15, 13, 12, 13, 10],\n\t\t\t\t\tmarkPoint : {\n\t\t\t\t\t\tdata : [\n\t\t\t\t\t\t\t{type : 'max', name: '最大值'},\n\t\t\t\t\t\t\t{type : 'min', name: '最小值'}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\tmarkLine : {\n\t\t\t\t\t\tdata : [\n\t\t\t\t\t\t\t{type : 'average', name: '平均值'}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname:'最低气温',\n\t\t\t\t\ttype:'line',\n\t\t\t\t\tdata:[1, -2, 2, 5, 3, 2, 0],\n\t\t\t\t\tmarkPoint : {\n\t\t\t\t\t\tdata : [\n\t\t\t\t\t\t\t{name : '周最低', value : -2, xAxis: 1, yAxis: -1.5}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\tmarkLine : {\n\t\t\t\t\t\tdata : [\n\t\t\t\t\t\t\t{type : 'average', name : '平均值'}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\n\n\t\t// 使用刚指定的配置项和数据显示图表。\n\t\tmyChart.setOption(option);\n\n\t})(jQuery);\n\n</script>\n"
  },
  {
    "path": "chart/test/linechart2.html",
    "content": "\n<div id=\"test_linechart2\" style=\"height: 400px;\"></div>\n\n<script type=\"text/javascript\">\n\n\t(function($){\n\n\t\tvar myChart = echarts.init(document.getElementById('test_linechart2'));\n\n\t\t// 指定图表的配置项和数据\n\t\tvar option = {\n\t\t\ttooltip : {\n\t\t\t\ttrigger: 'axis'\n\t\t\t},\n\t\t\tlegend: {\n\t\t\t\tdata:['邮件营销','联盟广告','视频广告','直接访问','搜索引擎']\n\t\t\t},\n\t\t\ttoolbox: {\n\t\t\t\tshow : true,\n\t\t\t\tfeature : {\n\t\t\t\t\tmark : {show: true},\n\t\t\t\t\tdataView : {show: true, readOnly: false},\n\t\t\t\t\tmagicType : {show: true, type: ['line', 'bar', 'stack', 'tiled']},\n\t\t\t\t\trestore : {show: true},\n\t\t\t\t\tsaveAsImage : {show: true}\n\t\t\t\t}\n\t\t\t},\n\t\t\tcalculable : true,\n\t\t\txAxis : [\n\t\t\t\t{\n\t\t\t\t\ttype : 'category',\n\t\t\t\t\tboundaryGap : false,\n\t\t\t\t\tdata : ['周一','周二','周三','周四','周五','周六','周日']\n\t\t\t\t}\n\t\t\t],\n\t\t\tyAxis : [\n\t\t\t\t{\n\t\t\t\t\ttype : 'value'\n\t\t\t\t}\n\t\t\t],\n\t\t\tseries : [\n\t\t\t\t{\n\t\t\t\t\tname:'邮件营销',\n\t\t\t\t\ttype:'line',\n\t\t\t\t\tstack: '总量',\n\t\t\t\t\titemStyle: {normal: {areaStyle: {type: 'default'}}},\n\t\t\t\t\tsmooth: true,\n\t\t\t\t\tdata:[120, 132, 101, 134, 90, 230, 210]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname:'联盟广告',\n\t\t\t\t\ttype:'line',\n\t\t\t\t\tstack: '总量',\n\t\t\t\t\titemStyle: {normal: {areaStyle: {type: 'default'}}},\n\t\t\t\t\tsmooth: true,\n\t\t\t\t\tdata:[220, 182, 191, 234, 290, 330, 310]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname:'视频广告',\n\t\t\t\t\ttype:'line',\n\t\t\t\t\tstack: '总量',\n\t\t\t\t\titemStyle: {normal: {areaStyle: {type: 'default'}}},\n\t\t\t\t\tsmooth: true,\n\t\t\t\t\tdata:[150, 232, 201, 154, 190, 330, 410]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname:'直接访问',\n\t\t\t\t\ttype:'line',\n\t\t\t\t\tstack: '总量',\n\t\t\t\t\titemStyle: {normal: {areaStyle: {type: 'default'}}},\n\t\t\t\t\tsmooth: true,\n\t\t\t\t\tdata:[320, 332, 301, 334, 390, 330, 320]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname:'搜索引擎',\n\t\t\t\t\ttype:'line',\n\t\t\t\t\tstack: '总量',\n\t\t\t\t\titemStyle: {normal: {areaStyle: {type: 'default'}}},\n\t\t\t\t\tsmooth: true,\n\t\t\t\t\tdata:[820, 932, 901, 934, 1290, 1330, 1320]\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\n\n\n\t\t// 使用刚指定的配置项和数据显示图表。\n\t\tmyChart.setOption(option);\n\n\t})(jQuery);\n\n</script>\n"
  },
  {
    "path": "chart/test/piechart.html",
    "content": "\n<div id=\"test_piechart\" style=\"height: 400px;\"></div>\n\n<script type=\"text/javascript\">\n\n\t(function($){\n\n\t\tvar myChart = echarts.init(document.getElementById('test_piechart'));\n\n\t\t// 指定图表的配置项和数据\n\t\tvar option = {\n\t\t\ttitle : {\n\t\t\t\ttext: '某站点用户访问来源',\n\t\t\t\tsubtext: '纯属虚构',\n\t\t\t\tx:'center'\n\t\t\t},\n\t\t\ttooltip : {\n\t\t\t\ttrigger: 'item',\n\t\t\t\tformatter: \"{a} <br/>{b} : {c} ({d}%)\"\n\t\t\t},\n\t\t\tlegend: {\n\t\t\t\torient : 'vertical',\n\t\t\t\tx : 'left',\n\t\t\t\tdata:['直接访问','邮件营销','联盟广告','视频广告','搜索引擎']\n\t\t\t},\n\t\t\ttoolbox: {\n\t\t\t\tshow : true,\n\t\t\t\tfeature : {\n\t\t\t\t\tmark : {show: true},\n\t\t\t\t\tdataView : {show: true, readOnly: false},\n\t\t\t\t\tmagicType : {\n\t\t\t\t\t\tshow: true,\n\t\t\t\t\t\ttype: ['pie', 'funnel'],\n\t\t\t\t\t\toption: {\n\t\t\t\t\t\t\tfunnel: {\n\t\t\t\t\t\t\t\tx: '25%',\n\t\t\t\t\t\t\t\twidth: '50%',\n\t\t\t\t\t\t\t\tfunnelAlign: 'left',\n\t\t\t\t\t\t\t\tmax: 1548\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\trestore : {show: true},\n\t\t\t\t\tsaveAsImage : {show: true}\n\t\t\t\t}\n\t\t\t},\n\t\t\tcalculable : true,\n\t\t\tseries : [\n\t\t\t\t{\n\t\t\t\t\tname:'访问来源',\n\t\t\t\t\ttype:'pie',\n\t\t\t\t\tradius : '55%',\n\t\t\t\t\tcenter: ['50%', '60%'],\n\t\t\t\t\tdata:[\n\t\t\t\t\t\t{value:335, name:'直接访问'},\n\t\t\t\t\t\t{value:310, name:'邮件营销'},\n\t\t\t\t\t\t{value:234, name:'联盟广告'},\n\t\t\t\t\t\t{value:135, name:'视频广告'},\n\t\t\t\t\t\t{value:1548, name:'搜索引擎'}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\n\n\t\t// 使用刚指定的配置项和数据显示图表。\n\t\tmyChart.setOption(option);\n\n\t})(jQuery);\n\n</script>\n"
  },
  {
    "path": "demo/baidu_map.html",
    "content": "<style type=\"text/css\">\n\t\t#baidu_map {width:100%; height: 500px;}\n\t\t#r-result {width:100%;font-size:12px;}\n\t</style>\n\n<div id=\"baidu_map\"></div>\n<div id=\"r-result\">\n\t<input type=\"button\"  onclick=\"openHeatmap();\" value=\"显示热力图\"/><input type=\"button\"  onclick=\"closeHeatmap();\" value=\"关闭热力图\"/>\n</div>\n<script type=\"text/javascript\">\n\n\tvar map = new BMap.Map(\"baidu_map\");          // 创建地图实例\n\n\tvar point = new BMap.Point(116.418261, 39.921984);\n\tmap.centerAndZoom(point, 15);             // 初始化地图，设置中心点坐标和地图级别\n\tmap.enableScrollWheelZoom(); // 允许滚轮缩放\n\n\tvar points =[\n\t\t{\"lng\":116.418261,\"lat\":39.921984,\"count\":50},\n\t\t{\"lng\":116.423332,\"lat\":39.916532,\"count\":51},\n\t\t{\"lng\":116.419787,\"lat\":39.930658,\"count\":15},\n\t\t{\"lng\":116.418455,\"lat\":39.920921,\"count\":40},\n\t\t{\"lng\":116.418843,\"lat\":39.915516,\"count\":100},\n\t\t{\"lng\":116.42546,\"lat\":39.918503,\"count\":6},\n\t\t{\"lng\":116.423289,\"lat\":39.919989,\"count\":18},\n\t\t{\"lng\":116.418162,\"lat\":39.915051,\"count\":80},\n\t\t{\"lng\":116.422039,\"lat\":39.91782,\"count\":11},\n\t\t{\"lng\":116.41387,\"lat\":39.917253,\"count\":7},\n\t\t{\"lng\":116.41773,\"lat\":39.919426,\"count\":42},\n\t\t{\"lng\":116.421107,\"lat\":39.916445,\"count\":4},\n\t\t{\"lng\":116.417521,\"lat\":39.917943,\"count\":27},\n\t\t{\"lng\":116.419812,\"lat\":39.920836,\"count\":23},\n\t\t{\"lng\":116.420682,\"lat\":39.91463,\"count\":60},\n\t\t{\"lng\":116.415424,\"lat\":39.924675,\"count\":8},\n\t\t{\"lng\":116.419242,\"lat\":39.914509,\"count\":15},\n\t\t{\"lng\":116.422766,\"lat\":39.921408,\"count\":25},\n\t\t{\"lng\":116.421674,\"lat\":39.924396,\"count\":21},\n\t\t{\"lng\":116.427268,\"lat\":39.92267,\"count\":1},\n\t\t{\"lng\":116.417721,\"lat\":39.920034,\"count\":51},\n\t\t{\"lng\":116.412456,\"lat\":39.92667,\"count\":7},\n\t\t{\"lng\":116.420432,\"lat\":39.919114,\"count\":11},\n\t\t{\"lng\":116.425013,\"lat\":39.921611,\"count\":35},\n\t\t{\"lng\":116.418733,\"lat\":39.931037,\"count\":22},\n\t\t{\"lng\":116.419336,\"lat\":39.931134,\"count\":4},\n\t\t{\"lng\":116.413557,\"lat\":39.923254,\"count\":5},\n\t\t{\"lng\":116.418367,\"lat\":39.92943,\"count\":3},\n\t\t{\"lng\":116.424312,\"lat\":39.919621,\"count\":100},\n\t\t{\"lng\":116.423874,\"lat\":39.919447,\"count\":87},\n\t\t{\"lng\":116.424225,\"lat\":39.923091,\"count\":32},\n\t\t{\"lng\":116.417801,\"lat\":39.921854,\"count\":44},\n\t\t{\"lng\":116.417129,\"lat\":39.928227,\"count\":21},\n\t\t{\"lng\":116.426426,\"lat\":39.922286,\"count\":80},\n\t\t{\"lng\":116.421597,\"lat\":39.91948,\"count\":32},\n\t\t{\"lng\":116.423895,\"lat\":39.920787,\"count\":26},\n\t\t{\"lng\":116.423563,\"lat\":39.921197,\"count\":17},\n\t\t{\"lng\":116.417982,\"lat\":39.922547,\"count\":17},\n\t\t{\"lng\":116.426126,\"lat\":39.921938,\"count\":25},\n\t\t{\"lng\":116.42326,\"lat\":39.915782,\"count\":100},\n\t\t{\"lng\":116.419239,\"lat\":39.916759,\"count\":39},\n\t\t{\"lng\":116.417185,\"lat\":39.929123,\"count\":11},\n\t\t{\"lng\":116.417237,\"lat\":39.927518,\"count\":9},\n\t\t{\"lng\":116.417784,\"lat\":39.915754,\"count\":47},\n\t\t{\"lng\":116.420193,\"lat\":39.917061,\"count\":52},\n\t\t{\"lng\":116.422735,\"lat\":39.915619,\"count\":100},\n\t\t{\"lng\":116.418495,\"lat\":39.915958,\"count\":46},\n\t\t{\"lng\":116.416292,\"lat\":39.931166,\"count\":9},\n\t\t{\"lng\":116.419916,\"lat\":39.924055,\"count\":8},\n\t\t{\"lng\":116.42189,\"lat\":39.921308,\"count\":11},\n\t\t{\"lng\":116.413765,\"lat\":39.929376,\"count\":3},\n\t\t{\"lng\":116.418232,\"lat\":39.920348,\"count\":50},\n\t\t{\"lng\":116.417554,\"lat\":39.930511,\"count\":15},\n\t\t{\"lng\":116.418568,\"lat\":39.918161,\"count\":23},\n\t\t{\"lng\":116.413461,\"lat\":39.926306,\"count\":3},\n\t\t{\"lng\":116.42232,\"lat\":39.92161,\"count\":13},\n\t\t{\"lng\":116.4174,\"lat\":39.928616,\"count\":6},\n\t\t{\"lng\":116.424679,\"lat\":39.915499,\"count\":21},\n\t\t{\"lng\":116.42171,\"lat\":39.915738,\"count\":29},\n\t\t{\"lng\":116.417836,\"lat\":39.916998,\"count\":99},\n\t\t{\"lng\":116.420755,\"lat\":39.928001,\"count\":10},\n\t\t{\"lng\":116.414077,\"lat\":39.930655,\"count\":14},\n\t\t{\"lng\":116.426092,\"lat\":39.922995,\"count\":16},\n\t\t{\"lng\":116.41535,\"lat\":39.931054,\"count\":15},\n\t\t{\"lng\":116.413022,\"lat\":39.921895,\"count\":13},\n\t\t{\"lng\":116.415551,\"lat\":39.913373,\"count\":17},\n\t\t{\"lng\":116.421191,\"lat\":39.926572,\"count\":1},\n\t\t{\"lng\":116.419612,\"lat\":39.917119,\"count\":9},\n\t\t{\"lng\":116.418237,\"lat\":39.921337,\"count\":54},\n\t\t{\"lng\":116.423776,\"lat\":39.921919,\"count\":26},\n\t\t{\"lng\":116.417694,\"lat\":39.92536,\"count\":17},\n\t\t{\"lng\":116.415377,\"lat\":39.914137,\"count\":19},\n\t\t{\"lng\":116.417434,\"lat\":39.914394,\"count\":43},\n\t\t{\"lng\":116.42588,\"lat\":39.922622,\"count\":27},\n\t\t{\"lng\":116.418345,\"lat\":39.919467,\"count\":8},\n\t\t{\"lng\":116.426883,\"lat\":39.917171,\"count\":3},\n\t\t{\"lng\":116.423877,\"lat\":39.916659,\"count\":34},\n\t\t{\"lng\":116.415712,\"lat\":39.915613,\"count\":14},\n\t\t{\"lng\":116.419869,\"lat\":39.931416,\"count\":12},\n\t\t{\"lng\":116.416956,\"lat\":39.925377,\"count\":11},\n\t\t{\"lng\":116.42066,\"lat\":39.925017,\"count\":38},\n\t\t{\"lng\":116.416244,\"lat\":39.920215,\"count\":91},\n\t\t{\"lng\":116.41929,\"lat\":39.915908,\"count\":54},\n\t\t{\"lng\":116.422116,\"lat\":39.919658,\"count\":21},\n\t\t{\"lng\":116.4183,\"lat\":39.925015,\"count\":15},\n\t\t{\"lng\":116.421969,\"lat\":39.913527,\"count\":3},\n\t\t{\"lng\":116.422936,\"lat\":39.921854,\"count\":24},\n\t\t{\"lng\":116.41905,\"lat\":39.929217,\"count\":12},\n\t\t{\"lng\":116.424579,\"lat\":39.914987,\"count\":57},\n\t\t{\"lng\":116.42076,\"lat\":39.915251,\"count\":70},\n\t\t{\"lng\":116.425867,\"lat\":39.918989,\"count\":8}];\n\n\tif(!isSupportCanvas()){\n\t\talert('热力图目前只支持有canvas支持的浏览器,您所使用的浏览器不能使用热力图功能~')\n\t}\n\t//详细的参数,可以查看heatmap.js的文档 https://github.com/pa7/heatmap.js/blob/master/README.md\n\t//参数说明如下:\n\t/* visible 热力图是否显示,默认为true\n\t * opacity 热力的透明度,1-100\n\t * radius 势力图的每个点的半径大小\n\t * gradient  {JSON} 热力图的渐变区间 . gradient如下所示\n\t *\t{\n\t .2:'rgb(0, 255, 255)',\n\t .5:'rgb(0, 110, 255)',\n\t .8:'rgb(100, 0, 255)'\n\t }\n\t 其中 key 表示插值的位置, 0~1.\n\t value 为颜色值.\n\t */\n\theatmapOverlay = new BMapLib.HeatmapOverlay({\"radius\":20});\n\tmap.addOverlay(heatmapOverlay);\n\theatmapOverlay.setDataSet({data:points,max:100});\n\t//是否显示热力图\n\tfunction openHeatmap(){\n\t\theatmapOverlay.show();\n\t}\n\tfunction closeHeatmap(){\n\t\theatmapOverlay.hide();\n\t}\n\topenHeatmap();\n\tfunction setGradient(){\n\t\t/*格式如下所示:\n\t\t {\n\t\t 0:'rgb(102, 255, 0)',\n\t\t .5:'rgb(255, 170, 0)',\n\t\t 1:'rgb(255, 0, 0)'\n\t\t }*/\n\t\tvar gradient = {};\n\t\tvar colors = document.querySelectorAll(\"input[type='color']\");\n\t\tcolors = [].slice.call(colors,0);\n\t\tcolors.forEach(function(ele){\n\t\t\tgradient[ele.getAttribute(\"data-key\")] = ele.value;\n\t\t});\n\t\theatmapOverlay.setOptions({\"gradient\":gradient});\n\t}\n\t//判断浏览区是否支持canvas\n\tfunction isSupportCanvas(){\n\t\tvar elem = document.createElement('canvas');\n\t\treturn !!(elem.getContext && elem.getContext('2d'));\n\t}\n\n</script>\n\n"
  },
  {
    "path": "demo/baidu_map_iframe.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n\t<meta name=\"viewport\" content=\"initial-scale=1.0, user-scalable=no\" />\n\t<style type=\"text/css\">\n\t\tbody, html{width: 100%;height: 100%;margin:0;font-family:\"微软雅黑\";}\n\t\t#panorama {width:100%; height: 500px;}\n\t\t#result {width:100%;font-size:12px;}\n\t</style>\n\t<script type=\"text/javascript\" src=\"//api.map.baidu.com/api?v=2.0&ak=6PYkS1eDz5pMnyfO0jvBNE0F\"></script>\n\t<title>显示/隐藏导航控件</title>\n</head>\n<body>\n<div id=\"panorama\"></div>\n<div id=\"result\">\n\t<button id=\"hideNavigationControl\">隐藏导航控件</button>\n\t<button id=\"showNavigationControl\">显示导航控件</button>\n</div>\n</body>\n</html>\n<script type=\"text/javascript\">\n\tvar panorama = new BMap.Panorama('panorama'); //默认为显示导航控件\n\tpanorama.setPosition(new BMap.Point(116.316169, 40.005567));\n\n\tdocument.getElementById(\"hideNavigationControl\").onclick = function(){\n\t\tpanorama.setOptions({\n\t\t\tnavigationControl: false //隐藏导航控件\n\t\t});\n\t};\n\tdocument.getElementById(\"showNavigationControl\").onclick = function(){\n\t\tpanorama.setOptions({\n\t\t\tnavigationControl: true //显示导航控件\n\t\t});\n\t};\n</script>\n\n"
  },
  {
    "path": "demo/combox/city_all.html",
    "content": "[\n    [\"all\", \"请选择省份\"]\n]"
  },
  {
    "path": "demo/combox/city_bj.html",
    "content": "[\n\t[\"bj\", \"北京市\"]\n]"
  },
  {
    "path": "demo/combox/city_sh.html",
    "content": "[\n\t[\"sh\", \"上海市\"]\n]"
  },
  {
    "path": "demo/common/ajaxDone.json",
    "content": "{\n\t\"statusCode\":\"200\",\n\t\"message\":\"\\u64cd\\u4f5c\\u6210\\u529f\",\n\t\"navTabId\":\"\",\n\t\"rel\":\"\",\n\t\"callbackType\":\"\",\n\t\"forwardUrl\":\"\",\n\t\"confirmMsg\":\"\"\n}\n"
  },
  {
    "path": "demo/common/ajaxDone_loadPage_error.json",
    "content": "{\n\t\"statusCode\":\"300\",\n\t\"message\":\"加载页面验证失败，关闭页面\",\n\t\"navTabId\":\"\",\n\t\"rel\":\"\",\n\t\"callbackType\":\"closeCurrentNavTab\", // closeCurrentNavTab, closeCurrentDialog\n\t\"forwardUrl\":\"\",\n\t\"confirmMsg\":\"\"\n}\n"
  },
  {
    "path": "demo/common/ajaxDone_w_list.json",
    "content": "{\n\t\"statusCode\":\"200\",\n\t\"message\":\"\\u64cd\\u4f5c\\u6210\\u529f\",\n\t\"navTabId\":\"w_list\",\n\t\"rel\":\"\",\n\t\"callbackType\":\"closeCurrent\",\n\t\"forwardUrl\":\"\",\n\t\"confirmMsg\":\"\"\n}\n"
  },
  {
    "path": "demo/common/ajaxTimeout.json",
    "content": "{\n\t\"statusCode\":\"301\",\n\t\"message\":\"\\u4f1a\\u8bdd\\u8d85\\u65f6\\uff0c\\u8bf7\\u91cd\\u65b0\\u767b\\u5f55\\u3002\",\n\t\"navTabId\":\"\",\n\t\"callbackType\":\"\",\n\t\"forwardUrl\":\"\"\n}\n"
  },
  {
    "path": "demo/database/db_attachmentBrightBack.html",
    "content": "{\n\t\"id\":\"1000\",\n\t\"fileName\":\"测试文件.txt\",\n\t\"attachmentPath\":\"/upload/测试文件.txt\",\n\t\"attachmentSize\":\"1024\"\n}"
  },
  {
    "path": "demo/database/db_attachmentLookup.html",
    "content": "\n<h2 class=\"contentTitle\">请选择需要上传的附件</h2>\n\n<form action=\"demo/database/db_attachmentBrightBack.html\" method=\"post\" enctype=\"multipart/form-data\" class=\"pageForm required-validate\" onsubmit=\"return iframeCallback(this, $.bringBack)\">\n\n<div class=\"pageContent\">\n\t<div class=\"pageFormContent\" layoutH=\"97\">\n\t\t<dl>\n\t\t\t<dt>附件：</dt><dd><input type=\"file\" name=\"image\" class=\"required\" size=\"30\" /></dd>\n\t\t</dl>\n\t</div>\n\t<div class=\"formBar\">\n\t\t<ul>\n\t\t\t<li><div class=\"buttonActive\"><div class=\"buttonContent\"><button type=\"submit\">上传</button></div></div></li>\n\t\t\t<li><div class=\"button\"><div class=\"buttonContent\"><button class=\"close\" type=\"button\">关闭</button></div></div></li>\n\t\t</ul>\n\t</div>\n</div>\n</form>"
  },
  {
    "path": "demo/database/db_lookupSuggest.html",
    "content": "[\n\t{\"id\":\"1\", \"orgName\":\"技术部\", \"orgNum\":\"1001\"},\n\t{\"id\":\"2\", \"orgName\":\"人事部\", \"orgNum\":\"1002\"},\n\t{\"id\":\"3\", \"orgName\":\"销售部\", \"orgNum\":\"1003\"},\n\t{\"id\":\"4\", \"orgName\":\"售后部\", \"orgNum\":\"1004\"}\n]"
  },
  {
    "path": "demo/database/db_select.html",
    "content": "<select class=\"combox\" name=\"${param.inputName}\">\n\t<option value=\"Yes\">是</option>\n\t<option value=\"No\">否</option>\n</select>"
  },
  {
    "path": "demo/database/db_widget.html",
    "content": "<h2 class=\"contentTitle\">suggest+lookup</h2>\n<form action=\"demo/common/ajaxDone.json\" method=\"post\" class=\"pageForm required-validate\" onsubmit=\"return validateCallback(this, navTabAjaxDone)\">\n<div class=\"pageContent\">\n\t<div class=\"pageFormContent\" layoutH=\"97\">\n\n\t\t<dl class=\"nowrap\">\n\t\t\t<dt>部门名称A1：</dt>\n\t\t\t<dd>\n\t\t\t\t<input id=\"inputOrg1\" name=\"org1.id\" value=\"\" type=\"hidden\"/>\n\t\t\t\t<input class=\"required\" name=\"org1.orgName\" type=\"text\" postField=\"keyword\" suggestFields=\"orgNum,orgName\"\n\t\t\t\t\tsuggestUrl=\"demo/database/db_lookupSuggest.html\" lookupGroup=\"org1\"/>\n\t\t\t\t<a class=\"btnLook\" href=\"demo/database/dwzOrgLookup.html\" lookupGroup=\"org1\">查找带回</a>\n\t\t\t\t<span class=\"info\">(suggest+lookup)</span>\n\t\t\t</dd>\n\t\t</dl>\n\t\t<dl class=\"nowrap\">\n\t\t\t<dt>部门编号A1：</dt>\n\t\t\t<dd>\n\t\t\t\t<input class=\"readonly\" name=\"org1.orgNum\" readonly=\"readonly\" type=\"text\"/>\n\t\t\t</dd>\n\t\t</dl>\n\n\t\t<dl class=\"nowrap\">\n\t\t\t<dt>部门名称A2：</dt>\n\t\t\t<dd>\n\t\t\t\t<input name=\"org1_1.id\" value=\"\" type=\"hidden\"/>\n\t\t\t\t<input class=\"required\" name=\"org1_1.orgName\" type=\"text\" suggestFields=\"orgNum,orgName\"\n\t\t\t\t\tsuggestUrl=\"demo/database/db_lookupSuggest.html?orgId={inputOrg1}\" warn=\"请选择部门A1\" lookupGroup=\"org1_1\"/>\n\t\t\t\t<a class=\"btnLook\" href=\"demo/database/dwzOrgLookup.html?orgId={inputOrg1}\" warn=\"请选择部门A1\" lookupGroup=\"org1_1\">查找带回</a>\n\t\t\t\t<span class=\"info\">(suggest、lookup 联动效果)</span>\n\t\t\t</dd>\n\t\t</dl>\n\t\t<div class=\"divider\"></div>\n\n\t\t<dl class=\"nowrap\">\n\t\t\t<dt>部门名称B：</dt>\n\t\t\t<dd>\n\t\t\t\t<input name=\"org2.id\" value=\"\" type=\"hidden\">\n\t\t\t\t<input class=\"required\" name=\"org2.orgName\" type=\"text\" suggestFields=\"orgName\" suggestUrl=\"demo/database/db_lookupSuggest.html\" lookupGroup=\"org2\"/>\n\t\t\t\t<span class=\"info\">(suggest)</span>\n\t\t\t</dd>\n\t\t</dl>\n\n\t\t<div class=\"divider\"></div>\n\n\t\t<dl class=\"nowrap\">\n\t\t\t<dt>部门名称C：</dt>\n\t\t\t<dd>\n\t\t\t\t<input name=\"org3.id\" value=\"\" type=\"hidden\">\n\t\t\t\t<input name=\"org3.orgName\" type=\"text\"/>\n\t\t\t\t<a class=\"btnLook\" href=\"demo/database/dwzOrgLookup2.html\" lookupGroup=\"org3\">查找带回</a>\n\t\t\t\t<span class=\"info\">(lookup 通过复选框选择多个值查找回带)</span>\n\t\t\t</dd>\n\t\t</dl>\n\t\t<dl class=\"nowrap\">\n\t\t\t<dt>部门编号C：</dt>\n\t\t\t<dd>\n\t\t\t\t<input class=\"readonly\" name=\"org3.orgNum\" readonly=\"readonly\" type=\"text\"/>\n\t\t\t</dd>\n\t\t</dl>\n\n\t\t<div class=\"divider\"></div>\n\t\t<dl class=\"nowrap\">\n\t\t\t<dt>部门（结尾带下标）：</dt>\n\t\t\t<dd>\n\t\t\t\t<input name=\"org.id[]\" value=\"1\" type=\"hidden\"/>\n\t\t\t\t<input class=\"required\" name=\"org.orgName[]\" value=\"技术部\" type=\"text\" suggestFields=\"orgNum,orgName\" suggestUrl=\"demo/database/db_lookupSuggest.html\" lookupGroup=\"org\" suffix=\"[]\"/>\n\t\t\t\t<a class=\"btnLook\" href=\"demo/database/dwzOrgLookup.html\" lookupGroup=\"org\" suffix=\"[]\">查找带回</a>\n\t\t\t\t<span class=\"info\">需要suffix=\"[]\"属性，下标一般用于主从结构子表</span>\n\t\t\t</dd>\n\t\t</dl>\n\n\t\t<div class=\"divider\"></div>\n\t\t<dl class=\"nowrap\">\n\t\t\t<dt>部门（中间带下标）：</dt>\n\t\t\t<dd>\n\t\t\t\t<input name=\"org[].id\" value=\"1\" type=\"hidden\"/>\n\t\t\t\t<input class=\"required\" name=\"org[].orgName\" value=\"技术部\" type=\"text\" suggestFields=\"orgNum,orgName\" suggestUrl=\"demo/database/db_lookupSuggest.html\" lookupGroup=\"org[]\"/>\n\t\t\t\t<a class=\"btnLook\" href=\"demo/database/dwzOrgLookup.html\" lookupGroup=\"org[]\">查找带回</a>\n\t\t\t\t<span class=\"info\">不需要suffix=\"[]\"属性，lookupGroup属性中加上方括号[]</span>\n\t\t\t</dd>\n\t\t</dl>\n\n\t\t<div class=\"divider\"></div>\n\t\t<dl class=\"nowrap\">\n\t\t\t<dt>自定义lookupPk：</dt>\n\t\t\t<dd>\n\t\t\t\t<input name=\"obj.orgNum\" value=\"\" type=\"hidden\"/>\n\t\t\t\t<input class=\"required\" name=\"obj.orgName\" type=\"text\" suggestFields=\"orgNum,orgName\" suggestUrl=\"demo/database/db_lookupSuggest.html\" lookupGroup=\"obj\" lookupPk=\"orgNum\"/>\n\t\t\t\t<a class=\"btnLook\" href=\"demo/database/dwzOrgLookup.html\" lookupGroup=\"obj\" lookupPk=\"orgNum\">查找带回</a>\n\t\t\t\t<span class=\"info\">自定义lookup主键，只需添加lookupPk=\"xxx\"属性（lookupPk默认值为id）</span>\n\t\t\t</dd>\n\t\t</dl>\n\n\t\t<div class=\"divider\"></div>\n\n\t\t<dl class=\"nowrap\">\n\t\t\t<dt>附件：</dt>\n\t\t\t<dd>\n\t\t\t\t<input name=\"attachment.id\" value=\"\" type=\"hidden\">\n\t\t\t\t<input class=\"readonly\" name=\"attachment.fileName\" value=\"\" readonly=\"readonly\" type=\"text\"/>\n\t\t\t\t<a class=\"btnAttach\" href=\"demo/database/db_attachmentLookup.html\" lookupGroup=\"attachment\" width=\"560\" height=\"300\" title=\"附件\">附件</a>\n\t\t\t\t<span class=\"info\">(lookup附件)</span>\n\t\t\t</dd>\n\t\t</dl>\n\n\t\t<div class=\"divider\"></div>\n\t\t<h3 class=\"contentTitle\">主从结构</h3>\n\t\t<div class=\"tabs\">\n\t\t\t<div class=\"tabsHeader\">\n\t\t\t\t<div class=\"tabsHeaderContent\">\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li class=\"selected\"><a href=\"javascript:void(0)\"><span>从表1【Struts2 示例】</span></a></li>\n\t\t\t\t\t\t<li><a href=\"javascript:void(0)\"><span>从表2【PHP 示例 - 结尾带下标[#index#]】</span></a></li>\n\t\t\t\t\t\t<li><a href=\"javascript:void(0)\"><span>从表2【PHP 示例 - 结尾带下标[]】</span></a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"tabsContent\" style=\"height: 150px;\">\n\t\t\t\t<div>\n\t\t\t\t\t<table class=\"list nowrap itemDetail\" addButton=\"新建从表1条目\" width=\"100%\">\n\t\t\t\t\t\t<thead>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<th type=\"text\" name=\"items[#index#].itemString\" size=\"12\" fieldClass=\"required\" fieldAttrs=\"{remote:'validate_remote.html', maxlength:10}\">从字符串</th>\n\t\t\t\t\t\t\t\t<th type=\"text\" name=\"items[#index#].itemInt\" defaultVal=\"#index#\" size=\"12\" fieldClass=\"digits\">从整数</th>\n\t\t\t\t\t\t\t\t<th type=\"text\" name=\"items[#index#].itemFloat\" defaultVal=\"0.8\" size=\"12\" fieldClass=\"number\">从浮点</th>\n\t\t\t\t\t\t\t\t<th type=\"date\" name=\"items[#index#].itemDate\" defaultVal=\"2011-12-28\" size=\"12\">从日期</th>\n\t\t\t\t\t\t\t\t<th type=\"date\" format=\"yyyy-MM-dd HH:mm:ss\" name=\"items[#index#].itemDataTime\" size=\"16\">从日期时间</th>\n\t\t\t\t\t\t\t\t<th type=\"lookup\" name=\"items[#index#].org.orgName\" lookupGroup=\"items[#index#].org\" lookupUrl=\"demo/database/dwzOrgLookup.html\" suggestUrl=\"demo/database/db_lookupSuggest.html\" suggestFields=\"orgName\" postField=\"keywords\" size=\"12\" fieldClass=\"required\">部门名称</th>\n\t\t\t\t\t\t\t\t<th type=\"enum\" name=\"items[#index#].itemEnum\" enumUrl=\"demo/database/db_select.html\" size=\"12\">从枚举</th>\n\t\t\t\t\t\t\t\t<th type=\"attach\" name=\"items[#index#].attachment.fileName\" lookupGroup=\"items[#index#].attachment\" lookupUrl=\"demo/database/db_attachmentLookup.html\" size=\"12\">从附件</th>\n\t\t\t\t\t\t\t\t<th type=\"del\" width=\"60\">操作</th>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t</thead>\n\t\t\t\t\t\t<tbody>\n\t\t\t\t\t\t\t<tr class=\"unitBox\">\n\t\t\t\t\t\t\t\t<td><input type=\"text\" name=\"items[0].itemString\" value=\"\" size=\"12\" class=\"required\" remote=\"validate_remote.html\" maxlength=\"10\"></td>\n\t\t\t\t\t\t\t\t<td><input type=\"text\" name=\"items[0].itemInt\" value=\"1\" size=\"12\" class=\"digits textInput\"></td>\n\t\t\t\t\t\t\t\t<td><input type=\"text\" name=\"items[0].itemFloat\" value=\"0.8\" size=\"12\" class=\"number textInput\"></td>\n\t\t\t\t\t\t\t\t<td><input type=\"text\" name=\"items[0].itemDate\" value=\"2011-12-28\" class=\"date  textInput\" datefmt=\"yyyy-MM-dd\" size=\"12\">\n\t\t\t\t\t\t\t\t\t<a class=\"inputDateButton\" href=\"javascript:void(0)\">选择</a></td>\n\t\t\t\t\t\t\t\t<td><input type=\"text\" name=\"items[0].itemDataTime\" value=\"\" class=\"date  textInput\" datefmt=\"yyyy-MM-dd\" size=\"16\"><a class=\"inputDateButton\" href=\"javascript:void(0)\">选择</a></td>\n\t\t\t\t\t\t\t\t<td><input type=\"hidden\" name=\"items[0].org.id\"><input type=\"text\" name=\"items[0].org.orgName\" autocomplete=\"off\" lookupgroup=\"items[0].org\" suggesturl=\"demo/database/db_lookupSuggest.html\" suggestfields=\"orgName\" postfield=\"keywords\" lookuppk=\"id\" size=\"12\" class=\"required textInput\"><a class=\"btnLook\" href=\"demo/database/dwzOrgLookup.html\" lookupgroup=\"items[0].org\" autocomplete=\"off\" suggesturl=\"demo/database/db_lookupSuggest.html\" suggestfields=\"orgName\" postfield=\"keywords\" lookuppk=\"id\" title=\"查找带回\">查找带回</a></td>\n\t\t\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t\t\t<select class=\"combox\" name=\"${param.inputName}\">\n\t\t\t\t\t\t\t\t\t\t<option value=\"Yes\">是</option>\n\t\t\t\t\t\t\t\t\t\t<option value=\"No\">否</option>\n\t\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t<td><input type=\"hidden\" name=\"items[0].attachment.id\"><input type=\"text\" name=\"items[0].attachment.fileName\" size=\"12\" readonly=\"readonly\" class=\"textInput readonly\"><a class=\"btnAttach\" href=\"demo/database/db_attachmentLookup.html\" lookupgroup=\"items[0].attachment\" lookuppk=\"id\" width=\"560\" height=\"300\" title=\"查找带回\">查找带回</a></td>\n\t\t\t\t\t\t\t\t<td><a href=\"javascript:void(0)\" class=\"btnDel \">删除</a></td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t</tbody>\n\t\t\t\t\t</table>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<table class=\"list nowrap itemDetail\" addButton=\"新建从表2条目\" width=\"100%\">\n\t\t\t\t\t\t<thead>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<th type=\"text\" name=\"items.itemString[#index#]\" size=\"12\" fieldClass=\"required\">从字符串</th>\n\t\t\t\t\t\t\t\t<th type=\"text\" name=\"items.itemInt[#index#]\" size=\"12\" fieldClass=\"digits\">从整数</th>\n\t\t\t\t\t\t\t\t<th type=\"text\" name=\"items.itemFloat[#index#]\" size=\"12\" fieldClass=\"number\">从浮点</th>\n\t\t\t\t\t\t\t\t<th type=\"date\" name=\"items.itemDate[#index#]\" size=\"12\">从日期</th>\n\t\t\t\t\t\t\t\t<th type=\"date\" format=\"yyyy-MM-dd HH:mm:ss\" name=\"items.itemDataTime[#index#]\" size=\"16\">从日期时间</th>\n\t\t\t\t\t\t\t\t<th type=\"lookup\" name=\"items.org.orgName[#index#]\" lookupGroup=\"items.org\" lookupUrl=\"demo/database/dwzOrgLookup.html\" lookupPk=\"orgNum\" suggestUrl=\"demo/database/db_lookupSuggest.html\" suggestFields=\"orgNum,orgName\" size=\"12\">部门名称</th>\n\t\t\t\t\t\t\t\t<th type=\"enum\" name=\"items.itemEnum[#index#]\" enumUrl=\"demo/database/db_select.html\" size=\"12\">从枚举</th>\n\t\t\t\t\t\t\t\t<th type=\"attach\" name=\"items.attachment.fileName[#index#]\" lookupGroup=\"items.attachment\" lookupUrl=\"demo/database/db_attachmentLookup.html\" size=\"12\">从附件</th>\n\t\t\t\t\t\t\t\t<th type=\"del\" width=\"60\">操作</th>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t</thead>\n\t\t\t\t\t\t<tbody></tbody>\n\t\t\t\t\t</table>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<table class=\"list nowrap itemDetail\" addButton=\"新建从表3条目\" width=\"100%\">\n\t\t\t\t\t\t<thead>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<th type=\"text\" name=\"items.itemString[]\" size=\"12\" fieldClass=\"required\">从字符串</th>\n\t\t\t\t\t\t\t\t<th type=\"text\" name=\"items.itemInt[]\" size=\"12\" fieldClass=\"digits\">从整数</th>\n\t\t\t\t\t\t\t\t<th type=\"text\" name=\"items.itemFloat[]\" size=\"12\" fieldClass=\"number\">从浮点</th>\n\t\t\t\t\t\t\t\t<th type=\"date\" name=\"items.itemDate[]\" size=\"12\">从日期</th>\n\t\t\t\t\t\t\t\t<th type=\"date\" format=\"yyyy-MM-dd HH:mm:ss\" name=\"items.itemDataTime[]\" size=\"16\">从日期时间</th>\n\t\t\t\t\t\t\t\t<th type=\"lookup\" name=\"items.org.orgName[]\" lookupGroup=\"items.org\" lookupUrl=\"demo/database/dwzOrgLookup.html\" suggestUrl=\"demo/database/db_lookupSuggest.html\" suggestFields=\"orgName\" size=\"12\">部门名称</th>\n\t\t\t\t\t\t\t\t<th type=\"enum\" name=\"items.itemEnum[]\" enumUrl=\"demo/database/db_select.html\" size=\"12\">从枚举</th>\n\t\t\t\t\t\t\t\t<th type=\"attach\" name=\"items.attachment.fileName[]\" lookupGroup=\"items.attachment\" lookupUrl=\"demo/database/db_attachmentLookup.html\" size=\"12\">从附件</th>\n\t\t\t\t\t\t\t\t<th type=\"del\" width=\"60\">操作</th>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t</thead>\n\t\t\t\t\t\t<tbody></tbody>\n\t\t\t\t\t</table>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"tabsFooter\">\n\t\t\t\t<div class=\"tabsFooterContent\"></div>\n\t\t\t</div>\n\t\t</div>\n\n\t</div>\n\t<div class=\"formBar\">\n\t\t<ul>\n\t\t\t<li><div class=\"buttonActive\"><div class=\"buttonContent\"><button type=\"submit\">保存</button></div></div></li>\n\t\t\t<li><div class=\"button\"><div class=\"buttonContent\"><button class=\"close\" type=\"button\">关闭</button></div></div></li>\n\t\t</ul>\n\t</div>\n</div>\n</form>\n"
  },
  {
    "path": "demo/database/dwzOrgLookup.html",
    "content": "\n<form id=\"pagerForm\" action=\"demo/database/dwzOrgLookup.html\">\n\t<input type=\"hidden\" name=\"pageNum\" value=\"1\" />\n\t<input type=\"hidden\" name=\"numPerPage\" value=\"${model.numPerPage}\" />\n\t<input type=\"hidden\" name=\"orderField\" value=\"${param.orderField}\" />\n\t<input type=\"hidden\" name=\"orderDirection\" value=\"${param.orderDirection}\" />\n</form>\n\n<div class=\"pageHeader\">\n\t<form rel=\"pagerForm\" method=\"post\" action=\"demo/database/dwzOrgLookup.html\" onsubmit=\"return dwzSearch(this, 'dialog');\">\n\t<div class=\"searchBar\">\n\t\t<ul class=\"searchContent\">\n\t\t\t<li>\n\t\t\t\t<label>部门名称:</label>\n\t\t\t\t<input class=\"textInput\" name=\"orgName\" value=\"\" type=\"text\">\n\t\t\t</li>\t  \n\t\t\t<li>\n\t\t\t\t<label>部门编号:</label>\n\t\t\t\t<input class=\"textInput\" name=\"orgNum\" value=\"\" type=\"text\">\n\t\t\t</li>\n\t\t\t<li>\n\t\t\t\t<label>部门经理:</label>\n\t\t\t\t<input class=\"textInput\" name=\"fullName\" value=\"\" type=\"text\">\n\t\t\t</li>\n\t\t\t\t<li>\n\t\t\t\t<label>上级部门:</label>\n\t\t\t\t<input class=\"textInput\" name=\"parentOrg.orgName\" value=\"\" type=\"text\">\n\t\t\t</li> \n\t\t</ul>\n\t\t<div class=\"subBar\">\n\t\t\t<ul>\n\t\t\t\t<li><div class=\"buttonActive\"><div class=\"buttonContent\"><button type=\"submit\">查询</button></div></div></li>\n\t\t\t</ul>\n\t\t</div>\n\t</div>\n\t</form>\n</div>\n<div class=\"pageContent\">\n\n\t<table class=\"table\" layoutH=\"118\" targetType=\"dialog\" width=\"100%\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th orderfield=\"orgName\">部门名称</th>\n\t\t\t\t<th orderfield=\"orgNum\">部门编号</th>\n\t\t\t\t<th orderfield=\"leader\">部门经理</th>\n\t\t\t\t<th orderfield=\"creator\">创建人</th>\n\t\t\t\t<th width=\"80\">查找带回</th>\n\t\t\t</tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td>技术部</td>\n\t\t\t\t<td>1001</td>\n\t\t\t\t<td>administrator</td>\n\t\t\t\t<td>administrator</td>\n\t\t\t\t<td>\n\t\t\t\t\t<a class=\"btnSelect\" href=\"javascript:$.bringBack({id:'1', orgName:'技术部', orgNum:'1001'})\" title=\"查找带回\">选择</a>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td>人事部</td>\n\t\t\t\t<td>1002</td>\n\t\t\t\t<td>test</td>\n\t\t\t\t<td>administrator</td>\n\t\t\t\t<td>\n\t\t\t\t\t<a class=\"btnSelect\" href=\"javascript:$.bringBack({id:'2', orgName:'人事部', orgNum:'1002'})\" title=\"查找带回\">选择</a>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t</tbody>\n\t</table>\n\n\t<div class=\"panelBar\">\n\t\t<div class=\"pages\">\n\t\t\t<span>每页</span>\n\n\t\t\t<select name=\"numPerPage\" onchange=\"dwzPageBreak({targetType:'dialog', numPerPage:'10'})\">\n\t\t\t\t<option value=\"10\" selected=\"selected\">10</option>\n\t\t\t\t<option value=\"20\">20</option>\n\t\t\t\t<option value=\"50\">50</option>\n\t\t\t\t<option value=\"100\">100</option>\n\t\t\t</select>\n\t\t\t<span>条，共2条</span>\n\t\t</div>\n\t\t<div class=\"pagination\" targetType=\"dialog\" totalCount=\"2\" numPerPage=\"10\" pageNumShown=\"1\" currentPage=\"1\"></div>\n\t</div>\n</div>"
  },
  {
    "path": "demo/database/dwzOrgLookup2.html",
    "content": "\n<form id=\"pagerForm\" action=\"demo/database/dwzOrgLookup2.html\">\n\t<input type=\"hidden\" name=\"pageNum\" value=\"1\" />\n\t<input type=\"hidden\" name=\"numPerPage\" value=\"${model.numPerPage}\" />\n\t<input type=\"hidden\" name=\"orderField\" value=\"${param.orderField}\" />\n\t<input type=\"hidden\" name=\"orderDirection\" value=\"${param.orderDirection}\" />\n</form>\n\n<div class=\"pageHeader\">\n\t<form rel=\"pagerForm\" method=\"post\" action=\"demo/database/dwzOrgLookup2.html\" onsubmit=\"return dwzSearch(this, 'dialog');\">\n\t<div class=\"searchBar\">\n\t\t<ul class=\"searchContent\">\n\t\t\t<li>\n\t\t\t\t<label>部门名称:</label>\n\t\t\t\t<input class=\"textInput\" name=\"orgName\" value=\"\" type=\"text\">\n\t\t\t</li>\t  \n\t\t\t<li>\n\t\t\t\t<label>部门编号:</label>\n\t\t\t\t<input class=\"textInput\" name=\"orgNum\" value=\"\" type=\"text\">\n\t\t\t</li>\n\t\t\t<li>\n\t\t\t\t<label>部门经理:</label>\n\t\t\t\t<input class=\"textInput\" name=\"leader\" value=\"\" type=\"text\">\n\t\t\t</li>\n\t\t\t\t<li>\n\t\t\t\t<label>上级部门:</label>\n\t\t\t\t<input class=\"textInput\" name=\"parentOrg.orgName\" value=\"\" type=\"text\">\n\t\t\t</li> \n\t\t</ul>\n\t\t<div class=\"subBar\">\n\t\t\t<ul>\n\t\t\t\t<li><div class=\"buttonActive\"><div class=\"buttonContent\"><button type=\"submit\">查询</button></div></div></li>\n\t\t\t\t<li><div class=\"button\"><div class=\"buttonContent\"><button type=\"button\" multLookup=\"orgId\" warn=\"请选择部门\">选择带回</button></div></div></li>\n\t\t\t</ul>\n\t\t</div>\n\t</div>\n\t</form>\n</div>\n<div class=\"pageContent\">\n\n\t<table class=\"table\" layoutH=\"118\" targetType=\"dialog\" width=\"100%\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th width=\"30\"><input type=\"checkbox\" class=\"checkboxCtrl\" group=\"orgId\" /></th>\n\t\t\t\t<th orderfield=\"orgName\">部门名称</th>\n\t\t\t\t<th orderfield=\"orgNum\">部门编号</th>\n\t\t\t\t<th orderfield=\"leader\">部门经理</th>\n\t\t\t\t<th orderfield=\"creator\">创建人</th>\n\t\t\t</tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td><input type=\"checkbox\" name=\"orgId\" value=\"{id:'1', orgName:'技术部', orgNum:'1001'}\"/></td>\n\t\t\t\t<td>技术部</td>\n\t\t\t\t<td>1001</td>\n\t\t\t\t<td>leader</td>\n\t\t\t\t<td>administrator</td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td><input type=\"checkbox\" name=\"orgId\" value=\"{id:'2', orgName:'人事部', orgNum:'1002'}\"/></td>\n\t\t\t\t<td>人事部</td>\n\t\t\t\t<td>1002</td>\n\t\t\t\t<td>test</td>\n\t\t\t\t<td>administrator</td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td><input type=\"checkbox\" name=\"orgId\" value=\"{id:'3', orgName:'销售部', orgNum:'1003'}\"/></td>\n\t\t\t\t<td>人事部</td>\n\t\t\t\t<td>1002</td>\n\t\t\t\t<td>test</td>\n\t\t\t\t<td>administrator</td>\n\t\t\t</tr>\n\t\t</tbody>\n\t</table>\n\n\t<div class=\"panelBar\">\n\t\t<div class=\"pages\">\n\t\t\t<span>每页</span>\n\n\t\t\t<select name=\"numPerPage\" onchange=\"dwzPageBreak({targetType:'dialog', numPerPage:'10'})\">\n\t\t\t\t<option value=\"10\" selected=\"selected\">10</option>\n\t\t\t\t<option value=\"20\">20</option>\n\t\t\t\t<option value=\"50\">50</option>\n\t\t\t\t<option value=\"100\">100</option>\n\t\t\t</select>\n\t\t\t<span>条，共2条</span>\n\t\t</div>\n\t\t<div class=\"pagination\" targetType=\"dialog\" totalCount=\"2\" numPerPage=\"10\" pageNumShown=\"1\" currentPage=\"1\"></div>\n\t</div>\n</div>"
  },
  {
    "path": "demo/database/treeBringBack.html",
    "content": "<h2 class=\"contentTitle\">tree查找带回</h2>\n\n<div class=\"pageContent\">\n<form action=\"demo/common/ajaxDone.json\" method=\"post\" class=\"pageForm required-validate\" onsubmit=\"return validateCallback(this, navTabAjaxDone)\">\n\n\t<div class=\"pageFormContent\" layoutH=\"97\">\n\t\t<dl class=\"nowrap\">\n\t\t\t<dt>城市：</dt>\n\t\t\t<dd>\n\t\t\t\t<input class=\"required\" name=\"district.cityName\" type=\"text\" readonly/>\n\t\t\t</dd>\n\t\t</dl>\n\n\t\t<dl class=\"nowrap\">\n\t\t\t<dt>区县：</dt>\n\t\t\t<dd>\n\t\t\t\t<input name=\"district.id\" value=\"\" type=\"hidden\"/>\n\t\t\t\t<input class=\"required\" name=\"district.districtName\" type=\"text\" readonly/>\n\t\t\t\t<a class=\"btnLook\" href=\"demo/database/treeLookup.html\" lookupGroup=\"district\">查找带回</a>\n\t\t\t</dd>\n\t\t</dl>\n\t</div>\n\t<div class=\"formBar\">\n\t\t<ul>\n\t\t\t<li><div class=\"buttonActive\"><div class=\"buttonContent\"><button type=\"submit\">保存</button></div></div></li>\n\t\t\t<li><div class=\"button\"><div class=\"buttonContent\"><button class=\"close\" type=\"button\">关闭</button></div></div></li>\n\t\t</ul>\n\t</div>\n</form>\n</div>\n"
  },
  {
    "path": "demo/database/treeLookup.html",
    "content": "\n<div class=\"pageContent\">\n\t<div class=\"pageFormContent\" layoutH=\"58\">\n\t\t<ul class=\"tree expand\">\n\t\t\t<li><a href=\"javascript:\">北京</a>\n\t\t\t\t<ul>\n\t\t\t\t\t<li><a href=\"javascript:\" onclick=\"$.bringBack({id:'1', districtName:'东城', cityName:'北京'})\">东城</a></li>\n\t\t\t\t\t<li><a href=\"javascript:\" onclick=\"$.bringBack({id:'2', districtName:'西城', cityName:'北京'})\">西城</a></li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li><a href=\"javascript:\">上海</a>\n\t\t\t\t<ul>\n\t\t\t\t\t<li><a href=\"javascript:\" onclick=\"$.bringBack({id:'1', districtName:'崇明', cityName:'上海'})\">崇明</a></li>\n\t\t\t\t\t<li><a href=\"javascript:\" onclick=\"$.bringBack({id:'2', districtName:'黄浦', cityName:'上海'})\">黄浦</a></li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n\t\n\t<div class=\"formBar\">\n\t\t<ul>\n\t\t\t<li><div class=\"button\"><div class=\"buttonContent\"><button class=\"close\" type=\"button\">关闭</button></div></div></li>\n\t\t</ul>\n\t</div>\n</div>"
  },
  {
    "path": "demo/pagination/ajaxDone1.html",
    "content": "{\n\t\"statusCode\":\"200\",\n\t\"message\":\"\\u64cd\\u4f5c\\u6210\\u529f\",\n\t\"navTabId\":\"pagination\",\n\t\"rel\":\"\",\n\t\"callbackType\":\"closeCurrent\",\n\t\"forwardUrl\":\"\",\n\t\"confirmMsg\":\"\"\n}\n"
  },
  {
    "path": "demo/pagination/ajaxDone2.html",
    "content": "{\n\t\"statusCode\":\"200\",\n\t\"message\":\"\\u64cd\\u4f5c\\u6210\\u529f\",\n\t\"navTabId\":\"\",\n\t\"rel\":\"jbsxBox2\",\n\t\"callbackType\":\"closeCurrent\",\n\t\"forwardUrl\":\"\",\n\t\"confirmMsg\":\"\"\n}\n"
  },
  {
    "path": "demo/pagination/ajaxDone3.html",
    "content": "{\n\t\"statusCode\":\"200\",\n\t\"message\":\"\\u64cd\\u4f5c\\u6210\\u529f\",\n\t\"navTabId\":\"\",\n\t\"rel\":\"jbsxBox2\",\n\t\"callbackType\":\"\",\n\t\"forwardUrl\":\"\",\n\t\"confirmMsg\":\"\"\n}\n"
  },
  {
    "path": "demo/pagination/dialog1.html",
    "content": "\n<div class=\"pageContent\">\n\t\n\t<form method=\"post\" action=\"demo/pagination/ajaxDone1.html\" class=\"pageForm required-validate\" onsubmit=\"return validateCallback(this, dialogAjaxDone)\">\n\t\t<div class=\"pageFormContent\" layoutH=\"58\">\n\n\t\t\t<div class=\"unit\">\n\t\t\t\t<label>病历号：</label>\n\t\t\t\t<input type=\"text\" name=\"patientNo\" size=\"30\" minlength=\"6\" maxlength=\"20\" class=\"required\" />\n\t\t\t</div>\n\t\t\t<div class=\"unit\">\n\t\t\t\t<label>病人姓名：</label>\n\t\t\t\t<input type=\"text\" name=\"patientNames\" size=\"30\" class=\"required\"/>\n\t\t\t</div>\n\t\t\t\n\t\t</div>\n\t\t<div class=\"formBar\">\n\t\t\t<ul>\n\t\t\t\t<li><div class=\"buttonActive\"><div class=\"buttonContent\"><button type=\"submit\">提交</button></div></div></li>\n\t\t\t\t<li><div class=\"button\"><div class=\"buttonContent\"><button type=\"button\" class=\"close\">取消</button></div></div></li>\n\t\t\t</ul>\n\t\t</div>\n\t</form>\n\t\n</div>\n\n"
  },
  {
    "path": "demo/pagination/dialog2.html",
    "content": "\n<div class=\"pageContent\">\n\t\n\t<form method=\"post\" action=\"demo/pagination/ajaxDone2.html\" class=\"pageForm required-validate\" onsubmit=\"return validateCallback(this, dialogAjaxDone)\">\n\t\t<div class=\"pageFormContent\" layoutH=\"58\">\n\n\t\t\t<div class=\"unit\">\n\t\t\t\t<label>病历号：</label>\n\t\t\t\t<input type=\"text\" name=\"patientNo\" size=\"30\" minlength=\"6\" maxlength=\"20\" class=\"required\" />\n\t\t\t</div>\n\t\t\t<div class=\"unit\">\n\t\t\t\t<label>病人姓名：</label>\n\t\t\t\t<input type=\"text\" name=\"patientNames\" size=\"30\" class=\"required\"/>\n\t\t\t</div>\n\t\t\t\n\t\t</div>\n\t\t<div class=\"formBar\">\n\t\t\t<ul>\n\t\t\t\t<li><div class=\"buttonActive\"><div class=\"buttonContent\"><button type=\"submit\">提交</button></div></div></li>\n\t\t\t\t<li><div class=\"button\"><div class=\"buttonContent\"><button type=\"button\" class=\"close\">取消</button></div></div></li>\n\t\t\t</ul>\n\t\t</div>\n\t</form>\n\t\n</div>\n\n"
  },
  {
    "path": "demo/pagination/layout1.html",
    "content": "<style type=\"text/css\">\n\tul.rightTools {float:right; display:block;}\n\tul.rightTools li{float:left; display:block; margin-left:5px}\n</style>\n\n<div class=\"pageContent\" style=\"padding:5px\">\n\t<div class=\"panel\" defH=\"40\">\n\t\t<h1>病人基本信息</h1>\n\t\t<div>\n\t\t\t病人编号：<input type=\"text\" name=\"patientNo\" />\n\t\t\t<ul class=\"rightTools\">\n\t\t\t\t<li><a class=\"button\" target=\"dialog\" href=\"demo/pagination/dialog1.html\" mask=\"true\"><span>创建病例</span></a></li>\n\t\t\t\t<li><div class=\"buttonDisabled\"><div class=\"buttonContent\"><button>病人治疗流程</button></div></div></li>\n\t\t\t\t<li><div class=\"buttonDisabled\"><div class=\"buttonContent\"><button>按病人编号检索病例</button></div></div></li>\n\t\t\t\t<li><div class=\"buttonDisabled\"><div class=\"buttonContent\"><button>从病人列表选取病例</button></div></div></li>\n\t\t\t</ul>\n\t\t</div>\n\t</div>\n\t<div class=\"divider\"></div>\n\t<div class=\"tabs\">\n\t\t<div class=\"tabsHeader\">\n\t\t\t<div class=\"tabsHeaderContent\">\n\t\t\t\t<ul>\n\t\t\t\t\t<li><a href=\"javascript:;\"><span>实验室检测</span></a></li>\n\t\t\t\t\t<li><a href=\"javascript:;\"><span>病人处方</span></a></li>\n\t\t\t\t\t<li><a href=\"javascript:;\"><span>病人服药情况</span></a></li>\n\t\t\t\t\t<li><a href=\"javascript:;\"><span>基线调查</span></a></li>\n\t\t\t\t\t<li><a href=\"javascript:;\"><span>随访</span></a></li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"tabsContent\">\n\t\t\t<div>\n\t\n\t\t\t\t<div layoutH=\"146\" style=\"float:left; display:block; overflow:auto; width:240px; border:solid 1px #CCC; line-height:21px; background:#fff\">\n\t\t\t\t    <ul class=\"tree treeFolder\">\n\t\t\t\t\t\t<li><a href=\"javascript\">实验室检测</a>\n\t\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t\t<li><a href=\"demo/pagination/list1.html\" target=\"ajax\" rel=\"jbsxBox\">尿检</a></li>\n\t\t\t\t\t\t\t\t<li><a href=\"demo/pagination/list1.html\" target=\"ajax\" rel=\"jbsxBox\">HIV检测</a></li>\n\t\t\t\t\t\t\t\t<li><a href=\"demo/pagination/list1.html\" target=\"ajax\" rel=\"jbsxBox\">HCV检测</a></li>\n\t\t\t\t\t\t\t\t<li><a href=\"demo/pagination/list1.html\" target=\"ajax\" rel=\"jbsxBox\">TB检测</a></li>\n\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\n\t\t\t\t     </ul>\n\t\t\t\t</div>\n\t\t\t\t\n\t\t\t\t<div id=\"jbsxBox\" class=\"unitBox\" style=\"margin-left:246px;\">\n\t\t\t\t\t<!--#include virtual=\"list1.html\" -->\n\t\t\t\t</div>\n\t\n\t\t\t</div>\n\t\t\t\n\t\t\t<div>病人处方</div>\n\t\t\t\n\t\t\t<div>病人服药情况</div>\n\t\t\t\n\t\t\t<div>基线调查</div>\n\t\t\t\n\t\t\t<div>随访</div>\n\t\t</div>\n\t\t<div class=\"tabsFooter\">\n\t\t\t<div class=\"tabsFooterContent\"></div>\n\t\t</div>\n\t</div>\n\t\n</div>\n\n\n\t\n\n"
  },
  {
    "path": "demo/pagination/layout2.html",
    "content": "<div class=\"pageContent\">\n\t<div id=\"jbsxBox2\" class=\"unitBox\" style=\"float:left; display:block; overflow:auto; width:514px;\">\n\t\t<div class=\"pageHeader\" style=\"border:1px #B8D0D6 solid\">\n\t\t\t<form id=\"pagerForm\" onsubmit=\"return divSearch(this, 'jbsxBox2');\" action=\"demo/pagination/list2.html\" method=\"post\">\n\t\t\t\t<input type=\"hidden\" name=\"pageNum\" value=\"1\" />\n\t\t\t\t<input type=\"hidden\" name=\"numPerPage\" value=\"${model.numPerPage}\" />\n\t\t\t\t<input type=\"hidden\" name=\"orderField\" value=\"${param.orderField}\" />\n\t\t\t\t<input type=\"hidden\" name=\"orderDirection\" value=\"${param.orderDirection}\" />\n\t\t\t\t<div class=\"searchBar\">\n\t\t\t\t\t<table class=\"searchContent\">\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t\t姓名：<input type=\"text\" name=\"name\" />\n\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t<td><div class=\"buttonActive\"><div class=\"buttonContent\"><button type=\"submit\">检索</button></div></div></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</table>\n\t\t\t\t</div>\n\t\t\t</form>\n\t\t</div>\n\t</div>\n\t\n\t<div id=\"jbsxBox3\" class=\"unitBox\" style=\"margin-left:520px;\">\n\t\t<div class=\"pageHeader\" style=\"border:1px #B8D0D6 solid\">\n\t\t\t<form id=\"pagerForm\" onsubmit=\"return divSearch(this, 'jbsxBox3');\" action=\"demo/pagination/list3.html\" method=\"post\">\n\t\t\t\t<input type=\"hidden\" name=\"pageNum\" value=\"1\" />\n\t\t\t\t<input type=\"hidden\" name=\"numPerPage\" value=\"${model.numPerPage}\" />\n\t\t\t\t<input type=\"hidden\" name=\"orderField\" value=\"${param.orderField}\" />\n\t\t\t\t<input type=\"hidden\" name=\"orderDirection\" value=\"${param.orderDirection}\" />\n\t\t\t\t<div class=\"searchBar\">\n\t\t\t\t\t<table class=\"searchContent\">\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t\t姓名：<input type=\"text\" name=\"name\" />\n\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t<td><div class=\"buttonActive\"><div class=\"buttonContent\"><button type=\"submit\">检索</button></div></div></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</table>\n\t\t\t\t</div>\n\t\t\t</form>\n\t\t</div>\n\t</div>\n\t\n</div>\n"
  },
  {
    "path": "demo/pagination/list1.html",
    "content": "<div class=\"pageHeader\" style=\"border:1px #B8D0D6 solid\">\n\t<form id=\"pagerForm\" onsubmit=\"return divSearch(this, 'jbsxBox');\" action=\"demo/pagination/list1.html\" method=\"post\">\n\t<input type=\"hidden\" name=\"pageNum\" value=\"1\" />\n\t<input type=\"hidden\" name=\"numPerPage\" value=\"${model.numPerPage}\" />\n\t<input type=\"hidden\" name=\"orderField\" value=\"${param.orderField}\" />\n\t<input type=\"hidden\" name=\"orderDirection\" value=\"${param.orderDirection}\" />\n\t<div class=\"searchBar\">\n\t\t<table class=\"searchContent\">\n\t\t\t<tr>\n\t\t\t\t<td class=\"dateRange\">\n\t\t\t\t\t尿检日期:\n\t\t\t\t\t<input type=\"text\" value=\"\" readonly=\"readonly\" class=\"date\" name=\"dateStart\">\n\t\t\t\t\t<span class=\"limit\">-</span>\n\t\t\t\t\t<input type=\"text\" value=\"\" readonly=\"readonly\" class=\"date\" name=\"dateEnd\">\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t尿检结果：\n\t\t\t\t\t<input type=\"radio\" name=\"njjg\" value=\"\" checked=\"checked\" />全部\n\t\t\t\t\t<input type=\"radio\" name=\"njjg\" value=\"1\"/>阴性\n\t\t\t\t\t<input type=\"radio\" name=\"njjg\" value=\"2\"/>阳性\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t病人编号：<input type=\"text\" name=\"keyword\" />\n\t\t\t\t</td>\n\t\t\t\t<td><div class=\"buttonActive\"><div class=\"buttonContent\"><button type=\"submit\">检索</button></div></div></td>\n\t\t\t</tr>\n\t\t</table>\n\t</div>\n\t</form>\n</div>\n\n<div class=\"pageContent\" style=\"border-left:1px #B8D0D6 solid;border-right:1px #B8D0D6 solid\">\n<div class=\"panelBar\">\n\t\t<ul class=\"toolBar\">\n\t\t\t<li><a class=\"add\" href=\"demo/pagination/dialog2.html\" target=\"dialog\" mask=\"true\"><span>添加尿检检测</span></a></li>\n\t\t\t<li><a class=\"delete\" href=\"demo/pagination/ajaxDone3.html?uid={sid_obj}\" target=\"ajaxTodo\" title=\"确定要删除吗?\"><span>删除</span></a></li>\n\t\t\t<li><a class=\"edit\" href=\"demo/pagination/dialog2.html?uid={sid_obj}\" target=\"dialog\" mask=\"true\"><span>修改</span></a></li>\n\t\t\t<li class=\"line\">line</li>\n\t\t\t<li><a class=\"icon\" href=\"demo/common/dwz-team.xls\" target=\"dwzExport\" title=\"实要导出这些记录吗?\"><span>导出EXCEL</span></a></li>\n\t\t</ul>\n\t</div>\n\t<table class=\"table\" width=\"99%\" layoutH=\"260\" rel=\"jbsxBox\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th width=\"80\">序号</th>\n\t\t\t\t<th width=\"120\" orderField=\"number\" class=\"asc\">诊所编号</th>\n\t\t\t\t<th orderField=\"name\">诊所名称</th>\n\t\t\t\t<th width=\"100\">病人编号</th>\n\t\t\t\t<th width=\"100\">病人姓名</th>\n\t\t\t\t<th width=\"120\">尿检日期</th>\n\t\t\t\t<th width=\"100\">尿检结果</th>\n\t\t\t\t<th width=\"80\">检验次数</th>\n\t\t\t</tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr target=\"sid_obj\" rel=\"1\">\n\t\t\t\t<td>1</td>\n\t\t\t\t<td>bj0001</td>\n\t\t\t\t<td>xxx诊所</td>\n\t\t\t\t<td>xxx</td>\n\t\t\t\t<td>张三</td>\n\t\t\t\t<td>2011-9-6</td>\n\t\t\t\t<td>xxx</td>\n\t\t\t\t<td>1</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_obj\" rel=\"2\">\n\t\t\t\t<td>1</td>\n\t\t\t\t<td>bj0001</td>\n\t\t\t\t<td>xxx诊所</td>\n\t\t\t\t<td>xxx</td>\n\t\t\t\t<td>李四</td>\n\t\t\t\t<td>2011-9-6</td>\n\t\t\t\t<td>xxx</td>\n\t\t\t\t<td>1</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_obj\" rel=\"1\">\n\t\t\t\t<td>1</td>\n\t\t\t\t<td>bj0001</td>\n\t\t\t\t<td>xxx诊所</td>\n\t\t\t\t<td>xxx</td>\n\t\t\t\t<td>张三</td>\n\t\t\t\t<td>2011-9-6</td>\n\t\t\t\t<td>xxx</td>\n\t\t\t\t<td>1</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_obj\" rel=\"2\">\n\t\t\t\t<td>1</td>\n\t\t\t\t<td>bj0001</td>\n\t\t\t\t<td>xxx诊所</td>\n\t\t\t\t<td>xxx</td>\n\t\t\t\t<td>李四</td>\n\t\t\t\t<td>2011-9-6</td>\n\t\t\t\t<td>xxx</td>\n\t\t\t\t<td>1</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_obj\" rel=\"1\">\n\t\t\t\t<td>1</td>\n\t\t\t\t<td>bj0001</td>\n\t\t\t\t<td>xxx诊所</td>\n\t\t\t\t<td>xxx</td>\n\t\t\t\t<td>张三</td>\n\t\t\t\t<td>2011-9-6</td>\n\t\t\t\t<td>xxx</td>\n\t\t\t\t<td>1</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_obj\" rel=\"2\">\n\t\t\t\t<td>1</td>\n\t\t\t\t<td>bj0001</td>\n\t\t\t\t<td>xxx诊所</td>\n\t\t\t\t<td>xxx</td>\n\t\t\t\t<td>李四</td>\n\t\t\t\t<td>2011-9-6</td>\n\t\t\t\t<td>xxx</td>\n\t\t\t\t<td>1</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_obj\" rel=\"1\">\n\t\t\t\t<td>1</td>\n\t\t\t\t<td>bj0001</td>\n\t\t\t\t<td>xxx诊所</td>\n\t\t\t\t<td>xxx</td>\n\t\t\t\t<td>张三</td>\n\t\t\t\t<td>2011-9-6</td>\n\t\t\t\t<td>xxx</td>\n\t\t\t\t<td>1</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_obj\" rel=\"2\">\n\t\t\t\t<td>1</td>\n\t\t\t\t<td>bj0001</td>\n\t\t\t\t<td>xxx诊所</td>\n\t\t\t\t<td>xxx</td>\n\t\t\t\t<td>李四</td>\n\t\t\t\t<td>2011-9-6</td>\n\t\t\t\t<td>xxx</td>\n\t\t\t\t<td>1</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_obj\" rel=\"1\">\n\t\t\t\t<td>1</td>\n\t\t\t\t<td>bj0001</td>\n\t\t\t\t<td>xxx诊所</td>\n\t\t\t\t<td>xxx</td>\n\t\t\t\t<td>张三</td>\n\t\t\t\t<td>2011-9-6</td>\n\t\t\t\t<td>xxx</td>\n\t\t\t\t<td>1</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_obj\" rel=\"2\">\n\t\t\t\t<td>1</td>\n\t\t\t\t<td>bj0001</td>\n\t\t\t\t<td>xxx诊所</td>\n\t\t\t\t<td>xxx</td>\n\t\t\t\t<td>李四</td>\n\t\t\t\t<td>2011-9-6</td>\n\t\t\t\t<td>xxx</td>\n\t\t\t\t<td>1</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_obj\" rel=\"1\">\n\t\t\t\t<td>1</td>\n\t\t\t\t<td>bj0001</td>\n\t\t\t\t<td>xxx诊所</td>\n\t\t\t\t<td>xxx</td>\n\t\t\t\t<td>张三</td>\n\t\t\t\t<td>2011-9-6</td>\n\t\t\t\t<td>xxx</td>\n\t\t\t\t<td>1</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_obj\" rel=\"2\">\n\t\t\t\t<td>1</td>\n\t\t\t\t<td>bj0001</td>\n\t\t\t\t<td>xxx诊所</td>\n\t\t\t\t<td>xxx</td>\n\t\t\t\t<td>李四</td>\n\t\t\t\t<td>2011-9-6</td>\n\t\t\t\t<td>xxx</td>\n\t\t\t\t<td>1</td>\n\t\t\t</tr>\n\t\t</tbody>\n\t</table>\n\t<div class=\"panelBar\">\n\t\t<div class=\"pages\">\n\t\t\t<span>显示</span>\n\t\t\t<select class=\"combox\" name=\"numPerPage\" onchange=\"navTabPageBreak({numPerPage:this.value}, 'jbsxBox')\">\n\t\t\t\t<option value=\"20\">20</option>\n\t\t\t\t<option value=\"50\">50</option>\n\t\t\t\t<option value=\"100\">100</option>\n\t\t\t\t<option value=\"200\">200</option>\n\t\t\t</select>\n\t\t\t<span>条，共50条</span>\n\t\t</div>\n\t\t\n\t\t<div class=\"pagination\" rel=\"jbsxBox\" totalCount=\"200\" numPerPage=\"20\" pageNumShown=\"5\" currentPage=\"1\"></div>\n\n\t</div>\n</div>"
  },
  {
    "path": "demo/pagination/list2.html",
    "content": "<div class=\"pageHeader\" style=\"border:1px #B8D0D6 solid\">\n\t<form id=\"pagerForm\" onsubmit=\"return divSearch(this, 'jbsxBox2');\" action=\"demo/pagination/list2.html\" method=\"post\">\n\t<input type=\"hidden\" name=\"pageNum\" value=\"1\" />\n\t<input type=\"hidden\" name=\"numPerPage\" value=\"${model.numPerPage}\" />\n\t<input type=\"hidden\" name=\"orderField\" value=\"${param.orderField}\" />\n\t<input type=\"hidden\" name=\"orderDirection\" value=\"${param.orderDirection}\" />\n\t<div class=\"searchBar\">\n\t\t<table class=\"searchContent\">\n\t\t\t<tr>\n\t\t\t\t<td>\n\t\t\t\t\t姓名：<input type=\"text\" name=\"name\" />\n\t\t\t\t</td>\n\t\t\t\t<td><div class=\"buttonActive\"><div class=\"buttonContent\"><button type=\"submit\">检索</button></div></div></td>\n\t\t\t</tr>\n\t\t</table>\n\t</div>\n\t</form>\n</div>\n\n<div class=\"pageContent\" style=\"border-left:1px #B8D0D6 solid;border-right:1px #B8D0D6 solid\">\n<div class=\"panelBar\">\n\t\t<ul class=\"toolBar\">\n\t\t\t<li><a class=\"add\" href=\"demo/pagination/dialog2.html\" target=\"dialog\" mask=\"true\"><span>添加</span></a></li>\n\t\t\t<li><a class=\"delete\" href=\"demo/pagination/ajaxDone3.html?uid={sid_obj}\" target=\"ajaxTodo\" title=\"确定要删除吗?\"><span>删除</span></a></li>\n\t\t\t<li><a class=\"edit\" href=\"demo/pagination/dialog2.html?uid={sid_obj}\" target=\"dialog\" mask=\"true\"><span>修改</span></a></li>\n\t\t\t<li class=\"line\">line</li>\n\t\t\t<li><a class=\"icon\" href=\"demo/common/dwz-team.xls\" target=\"dwzExport\" title=\"实要导出这些记录吗?\"><span>导出EXCEL</span></a></li>\n\t\t</ul>\n\t</div>\n\t<table class=\"table\" width=\"99%\" layoutH=\"138\" rel=\"jbsxBox2\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th width=\"80\">序号</th>\n\t\t\t\t<th orderField=\"name\" class=\"asc\">姓名</th>\n\t\t\t\t<th orderField=\"sex\">性别</th>\n\t\t\t\t<th>操作</th>\n\t\t\t</tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr target=\"sid_obj\" rel=\"1\">\n\t\t\t\t<td>1</td>\n\t\t\t\t<td>张三</td>\n\t\t\t\t<td>男</td>\n\t\t\t\t<td><a href=\"demo/pagination/list3.html\" target=\"ajax\" rel=\"jbsxBox3\">载入右边grid</a></td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_obj\" rel=\"2\">\n\t\t\t\t<td>2</td>\n\t\t\t\t<td>李四</td>\n\t\t\t\t<td>女</td>\n\t\t\t\t<td><a href=\"demo/pagination/list3.html\" target=\"ajax\" rel=\"jbsxBox3\">载入右边grid</a></td>\n\t\t\t</tr>\n\t\t</tbody>\n\t</table>\n\t<div class=\"panelBar\">\n\t\t<div class=\"pages\">\n\t\t\t<span>显示</span>\n\t\t\t<select class=\"combox\" name=\"numPerPage\" onchange=\"navTabPageBreak({numPerPage:this.value}, 'jbsxBox2')\">\n\t\t\t\t<option value=\"20\">20</option>\n\t\t\t\t<option value=\"50\">50</option>\n\t\t\t\t<option value=\"100\">100</option>\n\t\t\t\t<option value=\"200\">200</option>\n\t\t\t</select>\n\t\t\t<span>条，共2条</span>\n\t\t</div>\n\t\t\n\t\t<div class=\"pagination\" rel=\"jbsxBox2\" totalCount=\"200\" numPerPage=\"20\" pageNumShown=\"5\" currentPage=\"1\"></div>\n\n\t</div>\n</div>"
  },
  {
    "path": "demo/pagination/list3.html",
    "content": "<div class=\"pageHeader\" style=\"border:1px #B8D0D6 solid\">\n\t<form id=\"pagerForm\" onsubmit=\"return divSearch(this, 'jbsxBox3');\" action=\"demo/pagination/list3.html\" method=\"post\">\n\t<input type=\"hidden\" name=\"pageNum\" value=\"1\" />\n\t<input type=\"hidden\" name=\"numPerPage\" value=\"${model.numPerPage}\" />\n\t<input type=\"hidden\" name=\"orderField\" value=\"${param.orderField}\" />\n\t<input type=\"hidden\" name=\"orderDirection\" value=\"${param.orderDirection}\" />\n\t<div class=\"searchBar\">\n\t\t<table class=\"searchContent\">\n\t\t\t<tr>\n\t\t\t\t<td>\n\t\t\t\t\t姓名：<input type=\"text\" name=\"name\" />\n\t\t\t\t</td>\n\t\t\t\t<td><div class=\"buttonActive\"><div class=\"buttonContent\"><button type=\"submit\">检索</button></div></div></td>\n\t\t\t</tr>\n\t\t</table>\n\t</div>\n\t</form>\n</div>\n\n<div class=\"pageContent\" style=\"border-left:1px #B8D0D6 solid;border-right:1px #B8D0D6 solid\">\n<div class=\"panelBar\">\n\t\t<ul class=\"toolBar\">\n\t\t\t<li><a class=\"add\" href=\"demo/pagination/dialog2.html\" target=\"dialog\" mask=\"true\"><span>添加</span></a></li>\n\t\t\t<li><a class=\"delete\" href=\"demo/pagination/ajaxDone3.html?uid={sid_obj}\" target=\"ajaxTodo\" title=\"确定要删除吗?\"><span>删除</span></a></li>\n\t\t\t<li><a class=\"edit\" href=\"demo/pagination/dialog2.html?uid={sid_obj}\" target=\"dialog\" mask=\"true\"><span>修改</span></a></li>\n\t\t\t<li class=\"line\">line</li>\n\t\t\t<li><a class=\"icon\" href=\"demo/common/dwz-team.xls\" target=\"dwzExport\" title=\"实要导出这些记录吗?\"><span>导出EXCEL</span></a></li>\n\t\t</ul>\n\t</div>\n\t<table class=\"table\" width=\"99%\" layoutH=\"138\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th width=\"80\">序号</th>\n\t\t\t\t<th>姓名</th>\n\t\t\t\t<th>性别</th>\n\t\t\t</tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr target=\"sid_obj\" rel=\"1\">\n\t\t\t\t<td>1</td>\n\t\t\t\t<td>张三</td>\n\t\t\t\t<td>男</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_obj\" rel=\"2\">\n\t\t\t\t<td>2</td>\n\t\t\t\t<td>李四</td>\n\t\t\t\t<td>女</td>\n\t\t\t</tr>\n\t\t</tbody>\n\t</table>\n\t<div class=\"panelBar\">\n\t\t<div class=\"pages\">\n\t\t\t<span>显示</span>\n\t\t\t<select class=\"combox\" name=\"numPerPage\" onchange=\"navTabPageBreak({numPerPage:this.value}, 'jbsxBox3')\">\n\t\t\t\t<option value=\"20\">20</option>\n\t\t\t\t<option value=\"50\">50</option>\n\t\t\t\t<option value=\"100\">100</option>\n\t\t\t\t<option value=\"200\">200</option>\n\t\t\t</select>\n\t\t\t<span>条，共2条</span>\n\t\t</div>\n\t\t\n\t\t<div class=\"pagination\" rel=\"jbsxBox3\" totalCount=\"200\" numPerPage=\"20\" pageNumShown=\"5\" currentPage=\"1\"></div>\n\n\t</div>\n</div>"
  },
  {
    "path": "demo/row-col.html",
    "content": "\n<div layoutH=\"0\">\n\t<div class=\"row\">\n\t\t<div class=\"col-md-6 col-sm-12\">\n\n\t\t\t<div class=\"panel collapse\" defH=\"150\">\n\t\t\t\t<h1>左边容器</h1>\n\t\t\t\t<div>\n\t\t\t\t\t拖动浏览器窗口大小,测试页面布局\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t</div>\n\t\t<div class=\"col-md-6 col-sm-12\">\n\n\t\t\t<div class=\"panel collapse\" defH=\"150\">\n\t\t\t\t<h1>右边容器</h1>\n\t\t\t\t<div>\n\t\t\t\t\t拖动浏览器窗口大小,测试页面布局\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t</div>\n\t</div>\n\n\t<h2 class=\"subTitle\">TEST Layout</h2>\n\t<div class=\"row\" style=\"padding: 0 10px;\">\n\t\t<div class=\"col-md-3 col-sm-12\" style=\"border: 1px dashed #f00\">\n\t\t\ttest1\n\t\t</div>\n\t\t<div class=\"col-md-6 col-sm-12\" style=\"border: 1px dashed #f00;\">\n\t\t\t<p>test2</p>\n\t\t</div>\n\t\t<div class=\"col-md-3 col-sm-12\" style=\"border: 1px dashed #f00\">\n\t\t\ttest3\n\t\t</div>\n\t</div>\n\t<div class=\"row\" style=\"padding: 0 10px;\">\n\t\t<div class=\"col-md-3 col-sm-12\" style=\"border: 1px dashed #f00\">\n\t\t\ttest4\n\t\t</div>\n\t\t<div class=\"col-md-6 col-sm-12\" style=\"border: 1px dashed #f00\">\n\t\t\ttest5\n\t\t</div>\n\t\t<div class=\"col-md-3 col-sm-12\" style=\"border: 1px dashed #f00\">\n\t\t\ttest6\n\t\t</div>\n\t</div>\n</div>"
  },
  {
    "path": "demo/sortDrag/1.html",
    "content": "<h2 class=\"contentTitle\">单个sortDrag示例</h2>\n\n<div class=\"pageContent\" layoutH=\"42\">\n\n\t<!--<div style=\"border: 1px red dashed; height: 500px\"></div>-->\n\n\t<div class=\"sortDrag\">\n\t\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">A1</div>\n\t\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">A2</div>\n\t\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">A3</div>\n\t\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">A4</div>\n\t\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">A5</div>\n\t\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">A6</div>\n\t\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">A7</div>\n\t\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">A8</div>\n\t\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">A9</div>\n\t\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">A10</div>\n\t\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">A11</div>\n\t\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">A12</div>\n\t\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">A13</div>\n\t\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">A14</div>\n\t\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">A15</div>\n\t\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">A16</div>\n\t\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">A17</div>\n\t\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">A18</div>\n\t\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">A19</div>\n\t\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">A20</div>\n\t</div>\n\n\n</div>"
  },
  {
    "path": "demo/sortDrag/2.html",
    "content": "<h2 class=\"contentTitle\">多个sortDrag示例</h2>\n\n<div class=\"pageContent\" layoutH=\"42\">\n\n<div class=\"sortDrag\" data-over-sort=\"true\" style=\"width:48%;border:1px solid #e66;margin:5px;float:left;min-height:100px; max-height: 300px; overflow-y: auto;\">\n\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">A1</div>\n\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">A2</div>\n\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">A3</div>\n\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">A4</div>\n\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">A5</div>\n\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">A6</div>\n\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">A7</div>\n\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">A8</div>\n\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">A9</div>\n\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">A10</div>\n\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">A11</div>\n\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">A12</div>\n\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">A13</div>\n\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">A14</div>\n\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">A15</div>\n\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">A16</div>\n\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">A17</div>\n\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">A18</div>\n\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">A19</div>\n\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">A20</div>\n</div>\n\n<div class=\"sortDrag\" data-over-sort=\"true\" style=\"width:48%;border:1px solid #e66;margin:5px;float:left;min-height:100px\">\n\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">B1</div>\n\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">B2</div>\n\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">B3</div>\n\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">B4</div>\n\t<div style=\"border:1px solid #B8D0D6;padding:5px;margin:5px\">B5</div>\n</div>\n\n</div>"
  },
  {
    "path": "demo/sortDrag/form.html",
    "content": "<h2 class=\"contentTitle\">可拖动表单示例</h2>\n<form method=\"post\" action=\"demo/common/ajaxDone.json\" class=\"pageForm required-validate\" onsubmit=\"return validateCallback(this)\">\n<div class=\"pageContent\">\n\t<div class=\"pageFormContent sortDrag\" layoutH=\"97\">\n\t\t<dl>\n\t\t\t<dt>客户名称：</dt><dd><input name=\"name\" class=\"required\" alt=\"请输入名称\" type=\"text\"></dd>\n\t\t</dl>\n\t\t<dl>\n\t\t\t<dt>性别：</dt><dd><input type=\"radio\" name=\"sex\" value=\"1\">男 <input type=\"radio\" name=\"sex\" value=\"0\">女</dd>\n\t\t</dl>\n\t\t<dl>\n\t\t\t<dt>年龄：</dt><dd><input name=\"age\" value=\"25\" /></dd>\n\t\t</dl>\n\t\t<dl>\n\t\t\t<dt>电话：</dt><dd><input name=\"phone\" /></dd>\n\t\t</dl>\n\t\t<dl>\n\t\t\t<dt>生日：</dt>\n\t\t\t<dd>\n\t\t\t\t<input name=\"birthday\" class=\"date\" readonly=\"readonly\" value=\"2011-03-21\" type=\"text\">\n\t\t\t\t<a href=\"javascript:void(0)\" class=\"inputDateButton\">选择</a>\n\t\t\t</dd>\n\t\t</dl>\n\t\t<dl>\n\t\t\t<dt>部门名称：</dt>\n\t\t\t<dd>\n\t\t\t\t<input id=\"inputOrg1\" name=\"org1.id\" value=\"\" type=\"hidden\"/>\n\t\t\t\t<input class=\"required\" name=\"org1.orgName\" type=\"text\" postField=\"keyword\" suggestFields=\"orgNum,orgName\"\n\t\t\t\t\tsuggestUrl=\"demo/database/db_lookupSuggest.html\" lookupGroup=\"org1\"/>\n\t\t\t\t<a class=\"btnLook\" href=\"demo/database/dwzOrgLookup.html\" lookupGroup=\"org1\">查找带回</a>\n\t\t\t</dd>\n\t\t</dl>\n\t\t<dl>\n\t\t\t<dt>部门编号：</dt>\n\t\t\t<dd>\n\t\t\t\t<input class=\"readonly\" name=\"org1.orgNum\" readonly=\"readonly\" type=\"text\"/>\n\t\t\t</dd>\n\t\t</dl>\n\t\t<dl>\n\t\t\t<dt>客户状态：</dt>\n\t\t\t<dd>\n\t\t\t\t<select class=\"combox\">\n\t\t\t\t\t<option value=\"Yes\">是</option>\n\t\t\t\t\t<option value=\"No\">否</option>\n\t\t\t\t</select>\n\t\t\t</dd>\n\t\t</dl>\n\t\t<dl>\n\t\t\t<dt>附件：</dt>\n\t\t\t<dd>\n\t\t\t\t<input name=\"attachment.id\" value=\"\" type=\"hidden\">\n\t\t\t\t<input class=\"readonly\" name=\"attachment.fileName\" value=\"\" readonly=\"readonly\" type=\"text\"/>\n\t\t\t\t<a class=\"btnAttach\" href=\"demo/database/db_attachmentLookup.html\" lookupGroup=\"attachment\" width=\"560\" height=\"300\" title=\"附件\">附件</a>\n\t\t\t</dd>\n\t\t</dl>\n\t\t<dl class=\"nowrap\">\n\t\t\t<dt>介绍：</dt>\n\t\t\t<dd>\n\t\t\t\t<textarea class=\"editor\" name=\"note\" rows=\"8\" cols=\"95\"></textarea>\n\t\t\t</dd>\n\t\t</dl>\n\t</div>\n\n\t<div class=\"formBar\">\n\t\t<ul>\n\t\t\t<li><div class=\"buttonActive\"><div class=\"buttonContent\"><button type=\"submit\">保存</button></div></div></li>\n\t\t\t<li><div class=\"button\"><div class=\"buttonContent\"><button class=\"close\" type=\"button\">关闭</button></div></div></li>\n\t\t</ul>\n\t</div>\n\n</div>\n</form>\n"
  },
  {
    "path": "demo_page1.html",
    "content": "<form id=\"pagerForm\" method=\"post\" action=\"demo_page1.html\">\n\t<input type=\"hidden\" name=\"status\" value=\"${param.status}\">\n\t<input type=\"hidden\" name=\"keywords\" value=\"${param.keywords}\" />\n\t<input type=\"hidden\" name=\"pageNum\" value=\"1\" />\n\t<input type=\"hidden\" name=\"numPerPage\" value=\"${model.numPerPage}\" />\n\t<input type=\"hidden\" name=\"orderField\" value=\"${param.orderField}\" />\n</form>\n\n\n<div class=\"pageHeader\">\n\t<form onsubmit=\"return navTabSearch(this);\" action=\"demo_page1.html\" method=\"post\" onreset=\"$(this).find('select.combox').comboxReset()\">\n\t<div class=\"searchBar\">\n\t\t<!--<ul class=\"searchContent\">\n\t\t\t<li>\n\t\t\t\t<label>我的客户：</label>\n\t\t\t\t<input type=\"text\"/>\n\t\t\t</li>\n\t\t\t<li>\n\t\t\t<select class=\"combox\" name=\"province\">\n\t\t\t\t<option value=\"\">所有省市</option>\n\t\t\t\t<option value=\"北京\">北京</option>\n\t\t\t\t<option value=\"上海\">上海</option>\n\t\t\t\t<option value=\"天津\">天津</option>\n\t\t\t\t<option value=\"重庆\">重庆</option>\n\t\t\t\t<option value=\"广东\">广东</option>\n\t\t\t</select>\n\t\t\t</li>\n\t\t</ul>\n\t\t-->\n\t\t<table class=\"searchContent\">\n\t\t\t<tr>\n\t\t\t\t<td>\n\t\t\t\t\t我的客户：<input type=\"text\" name=\"keyword\" />\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<select class=\"combox\" name=\"province\" ref=\"demo_combox_city\" refUrl=\"demo/combox/city_{value}.html\" reset-value=\"bj\">\n\t\t\t\t\t\t<option value=\"all\">所有省市</option>\n\t\t\t\t\t\t<option value=\"bj\">北京</option>\n\t\t\t\t\t\t<option value=\"sh\">上海</option>\n\t\t\t\t\t\t<option value=\"zj\">浙江省</option>\n\t\t\t\t\t</select>\n\t\t\t\t\t<select class=\"combox\" name=\"city\" id=\"demo_combox_city\" ref=\"demo_combox_region\" refUrl=\"demo/combox/region_{value}.html\">\n\t\t\t\t\t\t<option value=\"all\">所有城市</option>\n\t\t\t\t\t</select>\n\t\t\t\t\t<select class=\"combox\" name=\"region\" id=\"demo_combox_region\">\n\t\t\t\t\t\t<option value=\"all\">所有区县</option>\n\t\t\t\t\t</select>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<select class=\"combox\" name=\"type\">\n\t\t\t\t\t\t<option value=\"all\">所有等级</option>\n\t\t\t\t\t\t<option value=\"1\">1级</option>\n\t\t\t\t\t\t<option value=\"2\">2级</option>\n\t\t\t\t\t\t<option value=\"3\" selected>3级</option>\n\t\t\t\t\t</select>\n\t\t\t\t</td>\n\t\t\t\t<td class=\"dateRange\">\n\t\t\t\t\t建档日期:\n\t\t\t\t\t<input name=\"startDate\" class=\"date readonly\" readonly=\"readonly\" type=\"text\" value=\"\">\n\t\t\t\t\t<span class=\"limit\">-</span>\n\t\t\t\t\t<input name=\"endDate\" class=\"date readonly\" readonly=\"readonly\" type=\"text\" value=\"\">\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t</table>\n\t\t<div class=\"subBar\">\n\t\t\t<ul>\n\t\t\t\t<li><div class=\"button\"><div class=\"buttonContent\"><button type=\"reset\">重置</button></div></div></li>\n\t\t\t\t<li><div class=\"buttonActive\"><div class=\"buttonContent\"><button type=\"submit\">检索</button></div></div></li>\n\t\t\t\t<li><a class=\"button\" href=\"demo_page6.html\" target=\"dialog\" mask=\"true\" title=\"查询框\"><span>高级检索</span></a></li>\n\t\t\t</ul>\n\t\t</div>\n\t</div>\n\t</form>\n</div>\n<div class=\"pageContent\">\n\t<div class=\"panelBar\">\n\t\t<ul class=\"toolBar\">\n\t\t\t<li><a class=\"add\" href=\"demo_page4.html\" target=\"navTab\"><span>添加</span></a></li>\n\t\t\t<li><a class=\"delete\" href=\"demo/common/ajaxDone.json?uid={sid_user}\" target=\"ajaxTodo\" title=\"确定要删除吗?\"><span>删除</span></a></li>\n\t\t\t<li><a class=\"edit\" href=\"demo_page4.html?uid={sid_user}\" target=\"navTab\"><span>修改</span></a></li>\n\t\t\t<li class=\"line\">line</li>\n\t\t\t<li><a class=\"icon\" href=\"demo/common/dwz-team.xls\" target=\"dwzExport\" targetType=\"navTab\" title=\"实要导出这些记录吗?\"><span>导出EXCEL</span></a></li>\n\t\t</ul>\n\t</div>\n\t<table class=\"table\" width=\"100%\" layoutH=\"138\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th width=\"80\"></th>\n\t\t\t\t<th width=\"120\">客户号</th>\n\t\t\t\t<th>客户名称</th>\n\t\t\t\t<th width=\"100\">客户类型</th>\n\t\t\t\t<th width=\"150\">证件号码</th>\n\t\t\t\t<th width=\"80\" align=\"center\">信用等级</th>\n\t\t\t\t<th width=\"80\">所属行业</th>\n\t\t\t\t<th width=\"80\">建档日期</th>\n\t\t\t</tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr target=\"sid_user\" rel=\"1\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"2\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"3\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"4\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"5\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"6\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"7\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"8\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"9\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"10\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"1\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"2\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"3\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"4\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"5\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"6\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"7\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"8\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"9\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"10\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"1\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"2\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"3\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"4\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"5\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"6\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"7\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"8\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"9\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"10\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"1\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"2\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"3\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"4\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"5\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"6\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"7\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"8\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"9\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"10\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"1\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"2\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"3\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"4\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"5\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"6\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"7\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"8\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"9\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"10\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"1\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"2\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"3\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"4\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"5\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"6\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"7\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"8\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"9\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"10\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"1\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"2\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"3\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"4\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"5\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"6\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"7\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"8\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"9\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"10\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"1\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"2\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"3\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"4\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"5\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"6\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"7\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"8\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"9\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"10\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"1\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"2\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"3\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"4\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"5\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"6\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"7\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"8\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"9\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"10\">\n\t\t\t\t<td>天津农信社</td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t</tbody>\n\t</table>\n\t<div class=\"panelBar\">\n\t\t<div class=\"pages\">\n\t\t\t<span>显示</span>\n\t\t\t<select class=\"combox\" name=\"numPerPage\" onchange=\"navTabPageBreak({numPerPage:this.value})\">\n\t\t\t\t<option value=\"20\">20</option>\n\t\t\t\t<option value=\"50\">50</option>\n\t\t\t\t<option value=\"100\">100</option>\n\t\t\t\t<option value=\"150\">150</option>\n\t\t\t\t<option value=\"200\">200</option>\n\t\t\t\t<option value=\"250\">250</option>\n\t\t\t</select>\n\t\t\t<span>条，共${totalCount}条</span>\n\t\t</div>\n\n\t\t<div class=\"pagination\" targetType=\"navTab\" totalCount=\"200\" numPerPage=\"20\" pageNumShown=\"10\" currentPage=\"1\"></div>\n\n\t</div>\n</div>\n"
  },
  {
    "path": "demo_page2.html",
    "content": "\n<textarea style=\"width:95%;height:200px\">\nDWZ富客户端框架\n\n在线演示地址\thttp://j-ui.com/\n下载地址\thttp://code.google.com/p/dwz/\n\n官方微博： http://weibo.com/dwzui\n\nDWZ创始人：\n\t[北京]杜权(UI设计)\t\td@j-ui.com\n\t[杭州]吴平(Ajax开发)\tw@j-ui.com\n\t[北京]张慧华(Ajax开发)\tz@j-ui.com\n\n新加入成员：\n\t[北京]张涛\tQQ:122794105\n\t[北京]冀刚\tQQ:63502308\tjiweigang2008@tom.com\n\t[北京]郑应海\tQQ:55691650\n\t[成都]COCO\tQQ:80095667\n\t\n有问题尽量发邮件或微博\t\n</textarea>\n\n<br>\n"
  },
  {
    "path": "demo_page4.html",
    "content": "\n<div class=\"pageContent\">\n\t<form method=\"post\" action=\"demo/common/ajaxDone_w_list.json\" class=\"pageForm required-validate\" onsubmit=\"return validateCallback(this, navTabAjaxDone);\">\n\t\t<div class=\"pageFormContent\" layoutH=\"56\">\n\t\t\t<p>\n\t\t\t\t<label>客 户 号：</label>\n\t\t\t\t<input name=\"sn\" type=\"text\" size=\"30\" value=\"100001\" readonly=\"readonly\"/>\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<label>客户名称：</label>\n\t\t\t\t<input name=\"name\" class=\"required\" type=\"text\" size=\"30\" value=\"张慧华\" alt=\"请输入客户名称\"/>\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<label>部门名称：</label>\n\t\t\t\t<input type=\"hidden\" name=\"orgLookup.id\" value=\"${orgLookup.id}\"/>\n\t\t\t\t<input type=\"text\" class=\"required\" name=\"orgLookup.orgName\" value=\"\" suggestFields=\"orgNum,orgName\" suggestUrl=\"demo/database/db_lookupSuggest.html\" lookupGroup=\"orgLookup\" />\n\t\t\t\t<a class=\"btnLook\" href=\"demo/database/dwzOrgLookup.html\" lookupGroup=\"orgLookup\">查找带回</a>\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<label>部门编号：</label>\n\t\t\t\t<input type=\"text\" readonly=\"readonly\" value=\"\" name=\"dwz_orgLookup.orgNum\" class=\"textInput\">\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<label>识 别 码：</label>\n\t\t\t\t<input name=\"code\" class=\"digits\" type=\"text\" size=\"30\" alt=\"请输入数字\"/>\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<label>客户类型：</label>\n\t\t\t\t<select name=\"type\" class=\"required combox\">\n\t\t\t\t\t<option value=\"\">请选择</option>\n\t\t\t\t\t<option value=\"个人\">个人</option>\n\t\t\t\t\t<option value=\"公司\" selected>公司</option>\n\t\t\t\t</select>\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<label>营业执照号：</label>\n\t\t\t\t<input type=\"text\" size=\"30\" />\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<label>执照签发日期：</label>\n\t\t\t\t<input type=\"text\" name=\"startDate\" class=\"date\" size=\"30\" /><a class=\"inputDateButton\" href=\"javascript:;\">选择</a>\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<label>执照到期日期：</label>\n\t\t\t\t<input type=\"text\" name=\"endDate\" class=\"date\" size=\"30\" /><a class=\"inputDateButton\" href=\"javascript:;\">选择</a>\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<label>注册资金：</label>\n\t\t\t\t<select name=\"capital\" class=\"required combox\">\n\t\t\t\t\t<option value=\"\">请选择</option>\n\t\t\t\t\t<option value=\"10\">10</option>\n\t\t\t\t\t<option value=\"50\" selected>50</option>\n\t\t\t\t\t<option value=\"100\">100</option>\n\t\t\t\t</select>\n\t\t\t\t<span class=\"unit\">万元</span>\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<label>注册类型：</label>\n\t\t\t\t<input type=\"text\" size=\"30\" />\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<label>注册地址：</label>\n\t\t\t\t<input type=\"text\" size=\"30\" />\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<label>所属行业：</label>\n\t\t\t\t<input type=\"text\" size=\"30\" />\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<label>组织机构代码：</label>\n\t\t\t\t<input type=\"text\" size=\"30\" />\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<label>国税登记证号码：</label>\n\t\t\t\t<input type=\"text\" size=\"30\" />\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<label>地税登记证号码：</label>\n\t\t\t\t<input type=\"text\" size=\"30\" />\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<label>贷款卡编码：</label>\n\t\t\t\t<input type=\"text\" size=\"30\" />\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<label>法人姓名：</label>\n\t\t\t\t<input type=\"text\" size=\"30\" />\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<label>法人代表身份证号：</label>\n\t\t\t\t<input type=\"text\" size=\"30\" />\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<label>身份证到期日期：</label>\n\t\t\t\t<input type=\"text\" size=\"30\" />\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<label>其他证件及号码：</label>\n\t\t\t\t<input type=\"text\" size=\"30\" />\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<label>曾用名称：</label>\n\t\t\t\t<input type=\"text\" size=\"30\" />\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<label>首次贷款日期：</label>\n\t\t\t\t<input readonly=\"readonly\" type=\"text\" size=\"30\" />\n\t\t\t</p>\n\t\t\t<div class=\"divider\"></div>\n\t\t\t<p>\n\t\t\t\t<label>建档日期：</label>\n\t\t\t\t<input readonly=\"readonly\" type=\"text\" size=\"30\" />\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<label>管户经理：</label>\n\t\t\t\t<input readonly=\"readonly\" type=\"text\" size=\"30\" />\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<label>最新修改时间：</label>\n\t\t\t\t<input readonly=\"readonly\" type=\"text\" size=\"30\" />\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<label>最新修改人员：</label>\n\t\t\t\t<input readonly=\"readonly\" type=\"text\" size=\"30\" />\n\t\t\t</p>\n\t\t</div>\n\t\t<div class=\"formBar\">\n\t\t\t<ul>\n\t\t\t\t<!--<li><a class=\"buttonActive\" href=\"javascript:;\"><span>保存</span></a></li>-->\n\t\t\t\t<li><div class=\"buttonActive\"><div class=\"buttonContent\"><button type=\"submit\">保存</button></div></div></li>\n\t\t\t\t<li>\n\t\t\t\t\t<div class=\"button\"><div class=\"buttonContent\"><button type=\"button\" class=\"close\">取消</button></div></div>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t</div>\n\t</form>\n</div>\n"
  },
  {
    "path": "demo_page5.html",
    "content": "\n<div class=\"pageContent\">\n\t<form method=\"post\" action=\"demo/common/ajaxDone.html\" class=\"pageForm required-validate\" onsubmit=\"return validateCallback(this, navTabAjaxDone);\">\n\t\t<div class=\"pageFormContent\" layoutH=\"57\">\n\t\t\t<dl>\n\t\t\t\t<dt>资产总额：</dt>\n\t\t\t\t<dd><input class=\"required\" name=\"total\" type=\"text\" size=\"30\" /></dd>\n\t\t\t</dl>\n\t\t\t<dl class=\"nowrap\">\n\t\t\t\t<dt>数据来源：</dt>\n\t\t\t\t<dd><textarea cols=\"45\" rows=\"5\" name=\"source\"></textarea></dd>\n\t\t\t</dl>\n\n\t\t\t<div class=\"divider\"></div>\n\t\t\t<dl>\n\t\t\t\t<dt>最新修改时间：</dt>\n\t\t\t\t<dd><input readonly=\"readonly\" type=\"text\" size=\"30\" /></dd>\n\t\t\t</dl>\n\t\t\t<dl>\n\t\t\t\t<dt>最新修改人员：</dt>\n\t\t\t\t<dd><input readonly=\"readonly\" type=\"text\" size=\"30\" /></dd>\n\t\t\t</dl>\n\t\t</div>\n\t\t<div class=\"formBar\">\n\t\t\t<ul>\n\t\t\t\t<li><div class=\"buttonActive\"><div class=\"buttonContent\"><button type=\"submit\">保存</button></div></div></li>\n\t\t\t\t<li><div class=\"button\"><div class=\"buttonContent\"><button type=\"button\" class=\"close\">取消</button></div></div></li>\n\t\t\t</ul>\n\t\t</div>\n\t</form>\n</div>\n"
  },
  {
    "path": "demo_page6.html",
    "content": "\n<div class=\"pageContent\">\n\t<form method=\"post\" action=\"demo_page1.html\" class=\"pageForm\" onsubmit=\"return navTabSearch(this);\">\n\t\t<div class=\"pageFormContent\" layoutH=\"58\">\n\t\t\t<div class=\"unit\">\n\t\t\t\t<label>请输入检索条件：</label>\n\t\t\t\t<input type=\"text\" size=\"50\" minlength=\"3\" maxlength=\"10\"/>\n\t\t\t</div>\n\t\t\t<div class=\"divider\">divider</div>\n\t\t\t<div class=\"unit\">\n\t\t\t\t<label>客户划分：</label>\n\t\t\t\t<label class=\"radioButton\"><input name=\"name\" type=\"radio\" />全部</label>\n\t\t\t\t<label class=\"radioButton\"><input name=\"name\" type=\"radio\" />企业</label>\n\t\t\t\t<label class=\"radioButton\"><input name=\"name\" type=\"radio\" />商户</label>\n\t\t\t\t<label class=\"radioButton\"><input name=\"name\" type=\"radio\" />农户</label>\n\t\t\t\t<label class=\"radioButton\"><input name=\"name\" type=\"radio\" />个人</label>\n\t\t\t</div>\n\t\t\t<div class=\"unit\">\n\t\t\t\t<label>客户名称：</label>\n\t\t\t\t<input type=\"text\" size=\"25\" name=\"name\"/>\n\t\t\t\t<span class=\"inputInfo\">关键字或全称</span>\n\t\t\t</div>\n\t\t\t<div class=\"unit\">\n\t\t\t\t<label>识 别 码：</label>\n\t\t\t\t<input type=\"text\" size=\"25\" name=\"code\" class=\"lettersonly\"/>\n\t\t\t\t<span class=\"inputInfo\">汉字拼音首字母</span>\n\t\t\t</div>\n\t\t\t<div class=\"unit\">\n\t\t\t\t<label>客 户 号：</label>\n\t\t\t\t<input type=\"text\" size=\"25\" name=\"accountNo\" class=\"alphanumeric\"/>\n\t\t\t\t<span class=\"inputInfo\">完整的客户号</span>\n\t\t\t</div>\n\t\t\t<div class=\"unit\">\n\t\t\t\t<label>证件号码：</label>\n\t\t\t\t<input type=\"text\" size=\"25\" name=\"certNo\" class=\"alphanumeric\"/>\n\t\t\t\t<span class=\"inputInfo\">完整的营业执照号、身份证号</span>\n\t\t\t</div>\n\t\t\t<div class=\"unit\">\n\t\t\t\t<label>组织机构代码：</label>\n\t\t\t\t<input type=\"text\" size=\"25\" />\n\t\t\t\t<span class=\"inputInfo\">完整的号码</span>\n\t\t\t</div>\n\t\t\t<div class=\"unit\">\n\t\t\t\t<label>法人姓名：</label>\n\t\t\t\t<input type=\"text\" size=\"25\" />\n\t\t\t\t<span class=\"inputInfo\">关键字或全名</span>\n\t\t\t</div>\n\t\t\t<div class=\"unit\">\n\t\t\t\t<label>客户类型：</label>\n\t\t\t\t<input type=\"text\" size=\"25\" />\n\t\t\t\t<span class=\"inputInfo\">可多选</span>\n\t\t\t</div>\n\t\t\t<div class=\"unit\">\n\t\t\t\t<label>信用等级：</label>\n\t\t\t\t<input type=\"text\" size=\"25\" />\n\t\t\t\t<span class=\"inputInfo\">可多选</span>\n\t\t\t</div>\n\t\t\t<div class=\"unit\">\n\t\t\t\t<label>所属行业：</label>\n\t\t\t\t<input type=\"text\" size=\"25\" />\n\t\t\t\t<span class=\"inputInfo\">可多选</span>\n\t\t\t</div>\n\t\t\t<div class=\"unit\">\n\t\t\t\t<label>曾用名称：</label>\n\t\t\t\t<input type=\"text\" size=\"25\" />\n\t\t\t\t<span class=\"inputInfo\">关键字或全称</span>\n\t\t\t</div>\n\t\t\t<div class=\"unit\">\n\t\t\t\t<label>建档日期：</label>\n\t\t\t\t<input type=\"text\" size=\"25\" name=\"date1\" class=\"date\"/>\n\t\t\t\t<span class=\"inputInfo\">大于等于，小于等于</span>\n\t\t\t</div>\n\t\t\t<div class=\"unit\">\n\t\t\t\t<label>管户经理：</label>\n\t\t\t\t<input type=\"text\" size=\"25\" />\n\t\t\t\t<span class=\"inputInfo\">全辖查询时用</span>\n\t\t\t</div>\n\t\t\t<div class=\"divider\">divider</div>\n\t\t\t<div class=\"unit\">\n\t\t\t\t<label>排序条件：</label>\n\t\t\t\t<select>\n\t\t\t\t\t<option>按客户号倒排</option>\n\t\t\t\t\t<option>按建档日期倒排</option>\n\t\t\t\t\t<option>按信用等级顺排</option>\n\t\t\t\t\t<option>按客户号顺排</option>\n\t\t\t\t\t<option>按建档日期顺排</option>\n\t\t\t\t\t<option>按所属行业顺排</option>\n\t\t\t\t</select>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"formBar\">\n\t\t\t<ul>\n\t\t\t\t<li><div class=\"buttonActive\"><div class=\"buttonContent\"><button type=\"submit\">开始检索</button></div></div></li>\n\t\t\t\t<li><div class=\"button\"><div class=\"buttonContent\"><button type=\"reset\">清空重输</button></div></div></li>\n\t\t\t</ul>\n\t\t</div>\n\t</form>\n</div>\n"
  },
  {
    "path": "demo_upload.html",
    "content": "\n<div class=\"pageContent\">\n\t<form method=\"post\" action=\"demo/common/ajaxDone.html\" enctype=\"multipart/form-data\" class=\"pageForm required-validate\" onsubmit=\"return iframeCallback(this);\">\n\t\t<div class=\"pageFormContent\" layoutH=\"56\">\n\t\t\t<p>\n\t\t\t\t<label>文件一：</label>\n\t\t\t\t<input name=\"file1\" type=\"file\" />\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<label>文件二：</label>\n\t\t\t\t<input name=\"file2\" type=\"file\" />\n\t\t\t</p>\n\t\t\t\n\t\t\t<p><label>多文件上传：</label>\n\t\t\t\t<a rel=\"w_uploadify\" target=\"navTab\" href=\"w_uploadify.html\" class=\"button\"><span>uploadify上传示例</span></a>\n\t\t\t</p>\n\t\t</div>\n\t\t<div class=\"formBar\">\n\t\t\t<ul>\n\t\t\t\t<li><div class=\"buttonActive\"><div class=\"buttonContent\"><button type=\"submit\">提交</button></div></div></li>\n\t\t\t\t<li><div class=\"button\"><div class=\"buttonContent\"><button type=\"button\" class=\"close\">取消</button></div></div></li>\n\t\t\t</ul>\n\t\t</div>\n\t</form>\n</div>\n"
  },
  {
    "path": "doc/git.txt",
    "content": "#git remote add github https://github.com/dwzteam/dwz_jui.git\ngit remote add github git@github.com:dwzteam/dwz_jui.git\ngit remote add oschina git@git.oschina.net:dwzteam/dwz_jui.git\n\n#提交到csdn code\ngit push -u origin master\n#提交到github\ngit push -u github master\n#提交到oschina\ngit push -u oschina master\n\ngit tag -a v1.5.1 -m '升级到jQuery1.11.3'\ngit push origin v1.5.1\ngit push github v1.5.1\ngit push oschina v1.5.1\n\n#删除tag\ngit tag -d v1.5.1\ngit push origin :refs/tags/v1.5.1\n\ngithub生成SSH公钥\nssh-keygen -t rsa -C \"zhanghuihua@sohu.com\"\n~/.ssh/id_rsa.pub 中内容复制到github\n\n#清理git账号\ngit config --global user.name\n\n#检查git链接\nssh -T git@github.com\nssh -T git@git.oschina.net"
  },
  {
    "path": "donation.html",
    "content": "\n<div class=\"pageContent\">\n\n\t<div class=\"pageFormContent nowrap\" layoutH=\"10\">\n\n\t\t<p style=\"padding:3px;line-height: 20px; height:auto; width:auto;text-indent:2em;\">每一个访问到这个页面的人，一定也是同样对技术有所追求的人。我们需要您的支持、鼓励，以及对我们所做成果的认可。如果您已经在使用jUI并为您创造了价值，请多多支持jUI吧，有了您的支持jUI才会走的更远更好，谢谢！</p>\n\n\t\t<p style=\"padding:3px;line-height: 20px; height:auto; width:auto;text-indent:2em;\">\n\t\t\t感谢大家一直以来的支持和关注推出:\n\t\t\t<a style=\"color:blue\" href=\"#dwz-video\">DWZ系列视频教程</a>\n\t\t</p>\n\n\t\t<p style=\"padding:3px;line-height: 20px; height:auto; width:auto;text-indent:2em;\">使用支付钱包或微信扫描二维码。 捐赠时希望能留下姓名QQ号保持联系，谢谢支持！</p>\n\n\n\t\t<table width=\"100%\" class=\"list nowrap\">\n\t\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th align=\"center\">支付宝扫一扫</th>\n\t\t\t\t<th align=\"center\">微信扫一扫</th>\n\t\t\t</tr>\n\t\t\t</thead>\n\t\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td align=\"center\"><img src=\"themes/default/images/zfb.png\" width=\"200\"/></td>\n\t\t\t\t<td align=\"center\"><img src=\"themes/default/images/wx.png\" width=\"200\"/></td>\n\t\t\t</tr>\n\t\t\t</tbody>\n\t\t</table>\n\n\t\t<div class=\"divider\"></div>\n\t\t<a name=\"dwz-video\"></a>\n\t\t<ul>\n\t\t\t<li><a style=\"padding:3px;line-height: 20px;color:blue\" href=\"http://pan.baidu.com/s/1nvlGR93\" target=\"_blank\">\n\t\t\t\tDWZ ThinkPHP 学习视频</a> 提取密码:<span style=\"color:red\">qkdk</span></li>\n\t\t\t<li><a style=\"padding:3px;line-height: 20px;color:blue\" href=\"http://pan.baidu.com/s/1o79LiT8\" target=\"_blank\">\n\t\t\t\tDWZ Java 学习视频</a> 提取密码:<span style=\"color:red\">wu67</span></li>\n\t\t\t<li><a style=\"padding:3px;line-height: 20px;color:blue\" href=\"https://pan.baidu.com/s/1nTrTG1-Jcd0uoM2KV0SO_Q\" target=\"_blank\">\n\t\t\t\tDWZ Mobile 学习视频</a></li>\n\t\t</ul>\n\n\t</div>\n\n</div>\n"
  },
  {
    "path": "dwz.frag.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<_AJAX_>\n\n<!-- dwz.dialog -->\n<_PAGE_ id=\"dialogFrag\"><![CDATA[\n<div class=\"dialog\" style=\"top:150px; left:300px;\">\n\t<div class=\"dialogHeader\" onselectstart=\"return false;\" oncopy=\"return false;\" onpaste=\"return false;\" oncut=\"return false;\">\n\t\t<div class=\"dialogHeader_r\">\n\t\t\t<div class=\"dialogHeader_c\">\n\t\t\t\t<a class=\"close\" href=\"#close\">close</a>\n\t\t\t\t<a class=\"maximize\" href=\"#maximize\">maximize</a>\n\t\t\t\t<a class=\"restore\" href=\"#restore\">restore</a>\n\t\t\t\t<a class=\"minimize\" href=\"#minimize\">minimize</a>\n\t\t\t\t<h1>弹出窗口</h1>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class=\"dialogContent layoutBox unitBox\">\n\t</div>\n\t<div class=\"dialogFooter\"><div class=\"dialogFooter_r\"><div class=\"dialogFooter_c\"></div></div></div>\n\t<div class=\"resizable_h_l\" tar=\"nw\"></div>\n\t<div class=\"resizable_h_r\" tar=\"ne\"></div>\n\t<div class=\"resizable_h_c\" tar=\"n\"></div>\n\t<div class=\"resizable_c_l\" tar=\"w\" style=\"height:300px;\"></div>\n\t<div class=\"resizable_c_r\" tar=\"e\" style=\"height:300px;\"></div>\n\t<div class=\"resizable_f_l\" tar=\"sw\"></div>\n\t<div class=\"resizable_f_r\" tar=\"se\"></div>\n\t<div class=\"resizable_f_c\" tar=\"s\"></div>\n</div>\n]]></_PAGE_>\n<!-- dwz.dialog shadow -->\n<_PAGE_ id=\"dialogProxy\"><![CDATA[\n<div id=\"dialogProxy\" class=\"dialog dialogProxy\">\n\t<div class=\"dialogHeader\">\n\t\t<div class=\"dialogHeader_r\">\n\t\t\t<div class=\"dialogHeader_c\">\n\t\t\t\t<a class=\"close\" href=\"#close\">close</a>\n\t\t\t\t<a class=\"maximize\" href=\"#maximize\">maximize</a>\n\t\t\t\t<a class=\"minimize\" href=\"#minimize\">minimize</a>\n\t\t\t\t<h1></h1>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class=\"dialogContent\"></div>\n\t<div class=\"dialogFooter\">\n\t\t<div class=\"dialogFooter_r\">\n\t\t\t<div class=\"dialogFooter_c\">\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n]]></_PAGE_>\n<!-- dwz.dialog taskbar -->\n<_PAGE_ id=\"taskbar\"><![CDATA[\n<div id=\"taskbar\" style=\"left:0px; display:none;\">\n\t<div class=\"taskbarContent\">\n\t\t<ul></ul>\n\t</div>\n\t<div class=\"taskbarLeft taskbarLeftDisabled\" style=\"display:none;\">taskbarLeft</div>\n\t<div class=\"taskbarRight\" style=\"display:none;\">taskbarRight</div>\n</div>\n]]></_PAGE_>\n\n<!-- other dwz fragment -->\n<_PAGE_ id=\"dwzFrag\"><![CDATA[\n<div id=\"splitBar\"></div>\n<div id=\"splitBarProxy\"></div>\n\n<!--拖动效果-->\n<div class=\"resizable\"></div>\n<!--阴影-->\n<div class=\"shadow\" style=\"width:508px; top:148px; left:296px;\">\n\t<div class=\"shadow_h\">\n\t\t<div class=\"shadow_h_l\"></div>\n\t\t<div class=\"shadow_h_r\"></div>\n\t\t<div class=\"shadow_h_c\"></div>\n\t</div>\n\t<div class=\"shadow_c\">\n\t\t<div class=\"shadow_c_l\" style=\"height:296px;\"></div>\n\t\t<div class=\"shadow_c_r\" style=\"height:296px;\"></div>\n\t\t<div class=\"shadow_c_c\" style=\"height:296px;\"></div>\n\t</div>\n\t<div class=\"shadow_f\">\n\t\t<div class=\"shadow_f_l\"></div>\n\t\t<div class=\"shadow_f_r\"></div>\n\t\t<div class=\"shadow_f_c\"></div>\n\t</div>\n</div>\n<!--遮盖屏幕-->\n<div id=\"alertBackground\" class=\"alertBackground\"></div>\n<div id=\"dialogBackground\" class=\"dialogBackground\"></div>\n\n<div id='background' class='background'></div>\n<div id='progressBar' class='progressBar'>数据加载中，请稍等...</div>\n]]></_PAGE_>\n\n<!-- dwz.pagination -->\n<_PAGE_ id=\"pagination\"><![CDATA[\n<ul>\n\t<li class=\"j-first\">\n\t\t<a class=\"first\" href=\"javascript:;\"><span>首页</span></a>\n\t\t<span class=\"first\"><span>首页</span></span>\n\t</li>\n\t<li class=\"j-prev\">\n\t\t<a class=\"previous\" href=\"javascript:;\"><span>上一页</span></a>\n\t\t<span class=\"previous\"><span>上一页</span></span>\n\t</li>\n\t#pageNumFrag#\n\t<li class=\"j-next\">\n\t\t<a class=\"next\" href=\"javascript:;\"><span>下一页</span></a>\n\t\t<span class=\"next\"><span>下一页</span></span>\n\t</li>\n\t<li class=\"j-last\">\n\t\t<a class=\"last\" href=\"javascript:;\"><span>末页</span></a>\n\t\t<span class=\"last\"><span>末页</span></span>\n\t</li>\n\t<li class=\"jumpto\"><input class=\"textInput\" type=\"text\" size=\"4\" value=\"#currentPage#\" /><input class=\"goto\" type=\"button\" value=\"确定\" /></li>\n</ul>\n]]></_PAGE_>\n\n\n<!-- dwz.alertMsg -->\n<_PAGE_ id=\"alertBoxFrag\"><![CDATA[\n<div id=\"alertMsgBox\" class=\"alert\"><div class=\"alertContent\"><div class=\"#type#\"><div class=\"alertInner\"><h1>#title#</h1><div class=\"msg\">#message#</div></div><div class=\"toolBar\"><ul>#butFragment#</ul></div></div></div><div class=\"alertFooter\"><div class=\"alertFooter_r\"><div class=\"alertFooter_c\"></div></div></div></div>\n]]></_PAGE_>\n\n<_PAGE_ id=\"alertButFrag\"><![CDATA[\n<li><a class=\"button\" rel=\"#callback#\" onclick=\"alertMsg.close()\" href=\"javascript:\"><span>#butMsg#</span></a></li>\n]]></_PAGE_>\n\n<_PAGE_ id=\"calendarFrag\"><![CDATA[\n<div id=\"calendar\">\n\t<div class=\"main\">\n\t\t<div class=\"head\">\n\t\t\t<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"2\">\n\t\t\t<tr>\n\t\t\t\t<td><select name=\"year\"></select></td>\n\t\t\t\t<td><select name=\"month\"></select></td>\n\t\t\t\t<td width=\"20\"><span class=\"close\">×</span></td>\n\t\t\t</tr>\n\t\t\t</table>\n\t\t</div>\n\t\t<div class=\"body\">\n\t\t\t<dl class=\"dayNames\"><dt>日</dt><dt>一</dt><dt>二</dt><dt>三</dt><dt>四</dt><dt>五</dt><dt>六</dt></dl>\n\t\t\t<dl class=\"days\">日期列表选项</dl>\n\t\t\t<div style=\"clear:both;height:0;line-height:0\"></div>\n\n\t\t</div>\n\n\t\t<div class=\"foot\">\n\t\t\t<table class=\"time\">\n\t\t\t\t<tr>\n\t\t\t\t\t<td>\n\t\t\t\t\t\t<input type=\"text\" class=\"hh\" maxlength=\"2\" start=\"0\" end=\"23\"/>:\n\t\t\t\t\t\t<input type=\"text\" class=\"mm\" maxlength=\"2\" start=\"0\" end=\"59\"/>:\n\t\t\t\t\t\t<input type=\"text\" class=\"ss\" maxlength=\"2\" start=\"0\" end=\"59\"/>\n\t\t\t\t\t</td>\n\t\t\t\t\t<td><ul><li class=\"up\">&and;</li><li class=\"down\">&or;</li></ul></td>\n\t\t\t\t</tr>\n\t\t\t</table>\n\t\t\t<button type=\"button\" class=\"clearBut\">清空</button>\n\t\t\t<button type=\"button\" class=\"okBut\">确定</button>\n\t\t</div>\n\t\t<div class=\"tm\">\n\t\t\t<ul class=\"hh\">\n\t\t\t\t<li>0</li>\n\t\t\t\t<li>1</li>\n\t\t\t\t<li>2</li>\n\t\t\t\t<li>3</li>\n\t\t\t\t<li>4</li>\n\t\t\t\t<li>5</li>\n\t\t\t\t<li>6</li>\n\t\t\t\t<li>7</li>\n\t\t\t\t<li>8</li>\n\t\t\t\t<li>9</li>\n\t\t\t\t<li>10</li>\n\t\t\t\t<li>11</li>\n\t\t\t\t<li>12</li>\n\t\t\t\t<li>13</li>\n\t\t\t\t<li>14</li>\n\t\t\t\t<li>15</li>\n\t\t\t\t<li>16</li>\n\t\t\t\t<li>17</li>\n\t\t\t\t<li>18</li>\n\t\t\t\t<li>19</li>\n\t\t\t\t<li>20</li>\n\t\t\t\t<li>21</li>\n\t\t\t\t<li>22</li>\n\t\t\t\t<li>23</li>\n\t\t\t</ul>\n\t\t\t<ul class=\"mm\">\n\t\t\t\t<li>0</li>\n\t\t\t\t<li>5</li>\n\t\t\t\t<li>10</li>\n\t\t\t\t<li>15</li>\n\t\t\t\t<li>20</li>\n\t\t\t\t<li>25</li>\n\t\t\t\t<li>30</li>\n\t\t\t\t<li>35</li>\n\t\t\t\t<li>40</li>\n\t\t\t\t<li>45</li>\n\t\t\t\t<li>50</li>\n\t\t\t\t<li>55</li>\n\t\t\t</ul>\n\t\t\t<ul class=\"ss\">\n\t\t\t\t<li>0</li>\n\t\t\t\t<li>10</li>\n\t\t\t\t<li>20</li>\n\t\t\t\t<li>30</li>\n\t\t\t\t<li>40</li>\n\t\t\t\t<li>50</li>\n\t\t\t</ul>\n\t\t</div>\n\t</div>\n</div>\n]]></_PAGE_>\n\n<_PAGE_ id=\"navTabCM\"><![CDATA[\n<ul id=\"navTabCM\">\n\t<li rel=\"reload\">刷新标签页</li>\n\t<li rel=\"closeCurrent\">关闭标签页</li>\n\t<li rel=\"closeOther\">关闭其它标签页</li>\n\t<li rel=\"closeAll\">关闭全部标签页</li>\n</ul>\n]]></_PAGE_>\n<_PAGE_ id=\"dialogCM\"><![CDATA[\n<ul id=\"dialogCM\">\n\t<li rel=\"closeCurrent\">关闭弹出窗口</li>\n\t<li rel=\"closeOther\">关闭其它弹出窗口</li>\n\t<li rel=\"closeAll\">关闭全部弹出窗口</li>\n</ul>\n]]></_PAGE_>\n<_PAGE_ id=\"externalFrag\"><![CDATA[\n<iframe src=\"{url}\" style=\"width:100%;height:{height};\" frameborder=\"no\" border=\"0\" marginwidth=\"0\" marginheight=\"0\"></iframe>\n]]></_PAGE_>\n<_MSG_ id=\"statusCode_503\"><![CDATA[服务器当前负载过大或者正在维护!]]></_MSG_>\n<_MSG_ id=\"validateFormError\"><![CDATA[提交数据不完整，{0}个字段有错误，请改正后再提交!]]></_MSG_>\n<_MSG_ id=\"sessionTimout\"><![CDATA[会话超时，请重新登录!]]></_MSG_>\n<_MSG_ id=\"alertSelectMsg\"><![CDATA[请选择信息!]]></_MSG_>\n<_MSG_ id=\"forwardConfirmMsg\"><![CDATA[继续下一步!]]></_MSG_>\n\n<_MSG_ id=\"dwzTitle\"><![CDATA[DWZ富客户端框架]]></_MSG_>\n<_MSG_ id=\"mainTabTitle\"><![CDATA[我的主页]]></_MSG_>\n</_AJAX_>\n"
  },
  {
    "path": "index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n<title>简单实用国产jQuery UI框架 - DWZ富客户端框架(J-UI.com)</title>\n\n<link href=\"themes/default/style.css\" rel=\"stylesheet\" type=\"text/css\" media=\"screen\"/>\n<link href=\"themes/css/core.css\" rel=\"stylesheet\" type=\"text/css\" media=\"screen\"/>\n<link href=\"themes/css/print.css\" rel=\"stylesheet\" type=\"text/css\" media=\"print\"/>\n<link href=\"uploadify/css/uploadify.css\" rel=\"stylesheet\" type=\"text/css\" media=\"screen\"/>\n<!--[if IE]>\n<link href=\"themes/css/ieHack.css\" rel=\"stylesheet\" type=\"text/css\" media=\"screen\"/>\n<![endif]-->\n\n<!--[if lt IE 9]><script src=\"js/speedup.js\" type=\"text/javascript\"></script><script src=\"js/jquery-1.12.4.js\" type=\"text/javascript\"></script><![endif]-->\n<!--[if gte IE 9]><!--><script src=\"js/jquery-3.4.1.js\" type=\"text/javascript\"></script><!--<![endif]-->\n\n<script src=\"js/jquery.cookie.js\" type=\"text/javascript\"></script>\n<script src=\"js/jquery.validate.js\" type=\"text/javascript\"></script>\n<!--<script src=\"js/jquery.bgiframe.js\" type=\"text/javascript\"></script>-->\n<script src=\"xheditor/xheditor-1.2.2.min.js\" type=\"text/javascript\"></script>\n<script src=\"xheditor/xheditor_lang/zh-cn.js\" type=\"text/javascript\"></script>\n<script src=\"uploadify/scripts/jquery.uploadify.js\" type=\"text/javascript\"></script>\n\n<script type=\"text/javascript\" src=\"chart/echarts.min.js\"></script>\n<script type=\"text/javascript\" src=\"//api.map.baidu.com/api?v=2.0&ak=6PYkS1eDz5pMnyfO0jvBNE0F\"></script>\n<script type=\"text/javascript\" src=\"//api.map.baidu.com/library/Heatmap/2.0/src/Heatmap_min.js\"></script>\n\n<script src=\"js/dwz.core.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.util.date.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.validate.method.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.barDrag.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.drag.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.tree.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.accordion.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.ui.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.theme.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.switchEnv.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.alertMsg.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.contextmenu.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.navTab.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.tab.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.resize.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.dialog.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.dialogDrag.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.sortDrag.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.cssTable.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.stable.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.taskBar.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.ajax.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.pagination.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.database.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.selectedLoad.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.datepicker.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.effects.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.panel.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.checkbox.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.history.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.combox.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.file.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.print.js\" type=\"text/javascript\"></script>\n\n<!-- 可以用dwz.min.js替换前面全部dwz.*.js (注意：替换时下面dwz.regional.zh.js还需要引入)\n<script src=\"bin/dwz.min.js\" type=\"text/javascript\"></script>\n-->\n<script src=\"js/dwz.regional.zh.js\" type=\"text/javascript\"></script>\n\n<script type=\"text/javascript\">\n$(function(){\n\tDWZ.init(\"dwz.frag.xml\", {\n\t\tloginUrl:\"login_dialog.html\", loginTitle:\"登录\",\t// 弹出登录对话框\n//\t\tloginUrl:\"login.html\",\t// 跳到登录页面\n\t\tstatusCode:{ok:200, error:300, timeout:301}, //【可选】\n\t\tpageInfo:{pageNum:\"pageNum\", numPerPage:\"numPerPage\", orderField:\"orderField\", orderDirection:\"orderDirection\"}, //【可选】\n\t\tkeys: {statusCode:\"statusCode\", message:\"message\"}, //【可选】\n\t\tui:{hideMode:'offsets'}, //【可选】hideMode:navTab组件切换的隐藏方式，支持的值有’display’，’offsets’负数偏移位置的值，默认值为’display’\n\t\tdebug:false,\t// 调试模式 【true|false】\n\t\tcallback:function(){\n\t\t\tinitEnv();\n\t\t\t$(\"#themeList\").theme({themeBase:\"themes\"}); // themeBase 相对于index页面的主题base路径\n\t\t}\n\t});\n});\n\n</script>\n\n</head>\n\n<body>\n\t<div id=\"layout\">\n\t\t<div id=\"header\">\n\t\t\t<div class=\"headerNav\">\n\t\t\t\t<a class=\"logo\" href=\"http://j-ui.com\">标志</a>\n\t\t\t\t<ul class=\"nav\">\n\t\t\t\t\t<li id=\"switchEnvBox\"><a href=\"javascript:\">（<span>北京</span>）切换城市</a>\n\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t<li><a href=\"sidebar_1.html\">北京</a></li>\n\t\t\t\t\t\t\t<li><a href=\"sidebar_2.html\">上海</a></li>\n\t\t\t\t\t\t\t<li><a href=\"sidebar_2.html\">南京</a></li>\n\t\t\t\t\t\t\t<li><a href=\"sidebar_2.html\">深圳</a></li>\n\t\t\t\t\t\t\t<li><a href=\"sidebar_2.html\">广州</a></li>\n\t\t\t\t\t\t\t<li><a href=\"sidebar_2.html\">天津</a></li>\n\t\t\t\t\t\t\t<li><a href=\"sidebar_2.html\">杭州</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li><a href=\"donation.html\" target=\"dialog\" height=\"400\" title=\"捐赠 & DWZ学习视频\">捐赠</a></li>\n\t\t\t\t\t<li><a href=\"changepwd.html\" target=\"dialog\" rel=\"changepwd\" width=\"600\">设置</a></li>\n\t\t\t\t\t<li><a href=\"http://www.cnblogs.com/dwzjs\" target=\"_blank\">博客</a></li>\n\t\t\t\t\t<li><a href=\"http://weibo.com/dwzui\" target=\"_blank\">微博</a></li>\n\t\t\t\t\t<li><a href=\"login.html\">退出</a></li>\n\t\t\t\t</ul>\n\t\t\t\t<ul class=\"themeList\" id=\"themeList\">\n\t\t\t\t\t<li theme=\"default\"><div class=\"selected\">蓝色</div></li>\n\t\t\t\t\t<li theme=\"green\"><div>绿色</div></li>\n\t\t\t\t\t<!--<li theme=\"red\"><div>红色</div></li>-->\n\t\t\t\t\t<li theme=\"purple\"><div>紫色</div></li>\n\t\t\t\t\t<li theme=\"silver\"><div>银色</div></li>\n\t\t\t\t\t<li theme=\"azure\"><div>天蓝</div></li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\n\t\t\t<!-- navMenu -->\n\n\t\t</div>\n\n\t\t<div id=\"leftside\">\n\t\t\t<div id=\"sidebar_s\">\n\t\t\t\t<div class=\"collapse\">\n\t\t\t\t\t<div class=\"toggleCollapse\"><div></div></div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div id=\"sidebar\">\n\t\t\t\t<div class=\"toggleCollapse\"><h2>主菜单</h2><div>收缩</div></div>\n\n\t\t\t\t<div class=\"accordion\" fillSpace=\"sidebar\">\n\t\t\t\t\t<div class=\"accordionHeader\">\n\t\t\t\t\t\t<h2><span>Folder</span>界面组件</h2>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"accordionContent\">\n\t\t\t\t\t\t<ul class=\"tree treeFolder\">\n\t\t\t\t\t\t\t<li><a href=\"tabsPage.html\" target=\"navTab\">主框架面板</a>\n\t\t\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t\t\t<li><a href=\"main.html\" target=\"navTab\" rel=\"main\">我的主页</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"demo/row-col.html\" target=\"navTab\" rel=\"row-col\">栅格系统(Bootstrap)</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"http://www.baidu.com\" target=\"navTab\" rel=\"page1\">页面一(外部链接)</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"demo/baidu_map_iframe.html\" target=\"navTab\" rel=\"bmap\" external=\"true\" title=\"需要设置external属性为true\">地图(external iframe方式)</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"demo/baidu_map.html\" target=\"navTab\" rel=\"bmap\">地图(直接嵌入方式)</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"demo_page1.html\" target=\"navTab\" rel=\"page1\" fresh=\"false\">替换页面一</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"demo_page2.html\" target=\"navTab\" rel=\"page2\">页面二</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"demo_page4.html\" target=\"navTab\" rel=\"page3\" title=\"页面三（自定义标签名）\">页面三</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"demo_page4.html\" target=\"navTab\" rel=\"page4\" fresh=\"false\">测试页面(fresh=\"false\")</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"w_editor.html\" target=\"navTab\">表单提交会话超时</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"demo/common/ajaxTimeout.json\" target=\"navTab\">navTab会话超时</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"demo/common/ajaxTimeout.json\" target=\"dialog\">dialog会话超时</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"demo/common/ajaxDone_loadPage_error.json\" target=\"navTab\">navTab加载页面验证失败</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"demo/common/ajaxDone_loadPage_error.json\" target=\"dialog\">dialog加载页面验证失败</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"index_menu.html\" target=\"_blank\">横向导航条</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"miscDragScreen1.html\" target=\"_blank\">屏幕拖拽配制示例</a></li>\n\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t</li>\n\n\t\t\t\t\t\t\t<li><a>常用组件</a>\n\t\t\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t\t\t<li><a href=\"w_panel.html\" target=\"navTab\" rel=\"w_panel\">面板</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"w_tabs.html\" target=\"navTab\" rel=\"w_tabs\">选项卡面板</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"w_dialog.html\" target=\"navTab\" rel=\"w_dialog\">弹出窗口</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"w_alert.html\" target=\"navTab\" rel=\"w_alert\">提示窗口</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"w_list.html\" target=\"navTab\" rel=\"w_list\">CSS表格容器</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"demo_page1.html\" target=\"navTab\" rel=\"w_table\">表格容器</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"w_removeSelected.html\" target=\"navTab\" rel=\"w_table\">表格数据库排序+批量删除</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"w_tree.html\" target=\"navTab\" rel=\"w_tree\">树形菜单</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"w_accordion.html\" target=\"navTab\" rel=\"w_accordion\">滑动菜单</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"w_editor.html\" target=\"navTab\" rel=\"w_editor\">编辑器</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"w_datepicker.html\" target=\"navTab\" rel=\"w_datepicker\">日期控件</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"demo/database/db_widget.html\" target=\"navTab\" rel=\"db\">suggest+lookup+主从结构</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"demo/database/treeBringBack.html\" target=\"navTab\" rel=\"db\">tree查找带回</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"demo/sortDrag/1.html\" target=\"navTab\" rel=\"sortDrag\">单个sortDrag示例</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"demo/sortDrag/2.html\" target=\"navTab\" rel=\"sortDrag\">多个sortDrag示例</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"demo/sortDrag/form.html\" target=\"navTab\" rel=\"sortDrag\">可拖动表单示例</a></li>\n\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t</li>\n\n\t\t\t\t\t\t\t<li><a>表单组件</a>\n\t\t\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t\t\t<li><a href=\"w_validation.html\" target=\"navTab\" rel=\"w_validation\">表单验证</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"w_button.html\" target=\"navTab\" rel=\"w_button\">按钮</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"w_textInput.html\" target=\"navTab\" rel=\"w_textInput\">文本框/文本域</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"w_combox.html\" target=\"navTab\" rel=\"w_combox\">下拉菜单</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"w_checkbox.html\" target=\"navTab\" rel=\"w_checkbox\">多选框/单选框</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"demo_upload.html\" target=\"navTab\" rel=\"demo_upload\">iframeCallback表单提交</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"w_uploadify.html\" target=\"navTab\" rel=\"w_uploadify\">uploadify多文件上传</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"w_html5_upload.html\" target=\"navTab\" rel=\"html5_upload\">html5文件上传</a></li>\n\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li><a>组合应用</a>\n\t\t\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t\t\t<li><a href=\"demo/pagination/layout1.html\" target=\"navTab\" rel=\"pagination1\">局部刷新分页1</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"demo/pagination/layout2.html\" target=\"navTab\" rel=\"pagination2\">局部刷新分页2</a></li>\n\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li><a>echarts图表</a>\n\t\t\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t\t\t<li><a href=\"chart/test/barchart.html\" target=\"navTab\" rel=\"chart\">柱状图(垂直)</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"chart/test/hbarchart.html\" target=\"navTab\" rel=\"chart\">柱状图(水平)</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"chart/test/linechart.html\" target=\"navTab\" rel=\"chart\">折线图</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"chart/test/linechart2.html\" target=\"navTab\" rel=\"chart\">曲线图</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"chart/test/piechart.html\" target=\"navTab\" rel=\"chart\">饼图</a></li>\n\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li><a href=\"dwz.frag.xml\" target=\"navTab\" external=\"true\">dwz.frag.xml</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"accordionHeader\">\n\t\t\t\t\t\t<h2><span>Folder</span>典型页面</h2>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"accordionContent\">\n\t\t\t\t\t\t<ul class=\"tree treeFolder treeCheck\">\n\t\t\t\t\t\t\t<li><a href=\"demo_page1.html\" target=\"navTab\" rel=\"demo_page1\">查询我的客户</a></li>\n\t\t\t\t\t\t\t<li><a href=\"demo_page1.html\" target=\"navTab\" rel=\"demo_page2\">表单查询页面</a></li>\n\t\t\t\t\t\t\t<li><a href=\"demo_page4.html\" target=\"navTab\" rel=\"demo_page4\">表单录入页面</a></li>\n\t\t\t\t\t\t\t<li><a href=\"demo_page5.html\" target=\"navTab\" rel=\"demo_page5\">有文本输入的表单</a></li>\n\t\t\t\t\t\t\t<li><a href=\"javascript:;\">有提示的表单输入页面</a>\n\t\t\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t\t\t<li><a href=\"javascript:;\">页面一</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"javascript:;\">页面二</a></li>\n\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li><a href=\"javascript:;\">选项卡和图形的页面</a>\n\t\t\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t\t\t<li><a href=\"javascript:;\">页面一</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"javascript:;\">页面二</a></li>\n\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li><a href=\"javascript:;\">选项卡和图形切换的页面</a></li>\n\t\t\t\t\t\t\t<li><a href=\"javascript:;\">左右两个互动的页面</a></li>\n\t\t\t\t\t\t\t<li><a href=\"javascript:;\">列表输入的页面</a></li>\n\t\t\t\t\t\t\t<li><a href=\"javascript:;\">双层栏目列表的页面</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"accordionHeader\">\n\t\t\t\t\t\t<h2><span>Folder</span>流程演示</h2>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"accordionContent\">\n\t\t\t\t\t\t<ul class=\"tree\">\n\t\t\t\t\t\t\t<li><a href=\"newPage1.html\" target=\"dialog\" rel=\"dlg_page\">列表</a></li>\n\t\t\t\t\t\t\t<li><a href=\"newPage1.html\" target=\"dialog\" rel=\"dlg_page2\">列表</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div id=\"container\">\n\t\t\t<div id=\"navTab\" class=\"tabsPage\">\n\t\t\t\t<div class=\"tabsPageHeader\">\n\t\t\t\t\t<div class=\"tabsPageHeaderContent\"><!-- 显示左右控制时添加 class=\"tabsPageHeaderMargin\" -->\n\t\t\t\t\t\t<ul class=\"navTab-tab\">\n\t\t\t\t\t\t\t<li tabid=\"main\" class=\"main\"><a href=\"javascript:;\"><span><span class=\"home_icon\">我的主页</span></span></a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"tabsLeft\">left</div><!-- 禁用只需要添加一个样式 class=\"tabsLeft tabsLeftDisabled\" -->\n\t\t\t\t\t<div class=\"tabsRight\">right</div><!-- 禁用只需要添加一个样式 class=\"tabsRight tabsRightDisabled\" -->\n\t\t\t\t\t<div class=\"tabsMore\">more</div>\n\t\t\t\t</div>\n\t\t\t\t<ul class=\"tabsMoreList\">\n\t\t\t\t\t<li><a href=\"javascript:;\">我的主页</a></li>\n\t\t\t\t</ul>\n\t\t\t\t<div class=\"navTab-panel tabsPageContent layoutBox\">\n\t\t\t\t\t<div class=\"page unitBox\">\n\t\t\t\t\t\t<div class=\"accountInfo\">\n\t\t\t\t\t\t\t<div class=\"alertInfo\">\n\t\t\t\t\t\t\t\t<p><a href=\"https://gitee.com/dwzteam/dwz_jui/blob/master/doc/dwz-user-guide.pdf\" target=\"_blank\" style=\"line-height:19px\"><span>DWZ框架使用手册</span></a></p>\n\t\t\t\t\t\t\t\t<p><a href=\"http://pan.baidu.com/s/18Bb8Z\" target=\"_blank\" style=\"line-height:19px\">DWZ框架开发视频教材</a></p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"right\">\n\t\t\t\t\t\t\t\t<p style=\"color:red\">DWZ官方微博 <a href=\"http://weibo.com/dwzui\" target=\"_blank\">http://weibo.com/dwzui</a></p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<p><span>DWZ富客户端框架</span></p>\n\t\t\t\t\t\t\t<p>DWZ官方微博:<a href=\"http://weibo.com/dwzui\" target=\"_blank\">http://weibo.com/dwzui</a></p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"pageFormContent\" layoutH=\"80\" style=\"margin-right:230px\">\n\n\n<h2>DWZ系列开源项目:</h2>\n<div class=\"unit\"><a href=\"https://git.oschina.net/dwzteam/dwz_jui\" target=\"_blank\">dwz富客户端框架 - jUI</a></div>\n<div class=\"unit\"><a href=\"https://git.oschina.net/dwzteam/dwz_group\" target=\"_blank\">DWZ框架 + ThinkPHP 实现小组工作日志系统</a></div>\n<div class=\"unit\"><a href=\"https://code.csdn.net/dwzteam/dwz_ssh2\" target=\"_blank\">dwz4j企业级Java Web快速开发框架(Hibernate+Spring+Struts2) + jUI整合应用</a></div>\n<div class=\"unit\"><a href=\"https://code.csdn.net/dwzteam/dwz_springmvc\" target=\"_blank\">dwz4j企业级Java Web快速开发框架(Mybatis + SpringMVC) + jUI整合应用</a></div>\n<div class=\"unit\"><a href=\"https://code.csdn.net/dwzteam/dwz_thinkphp\" target=\"_blank\">ThinkPHP + jUI整合应用</a></div>\n<div class=\"unit\"><a href=\"https://code.csdn.net/dwzteam/dwz_zendframework\" target=\"_blank\">Zend Framework + jUI整合应用</a></div>\n<div class=\"unit\"><a href=\"http://www.yiiframework.com/extension/dwzinterface/\" target=\"_blank\">YII + jUI整合应用</a></div>\n<div class=\"unit\"><a href=\"https://gitee.com/dwzteam/dwz_mobile_app\" target=\"_blank\">DWZ Mobile HTML5混合APP框架</a></div>\n\n<a class=\"buttonActive\" href=\"https://git.oschina.net/dwzteam/\" target=\"_blank\"><span>DWZ开源系列源码（oschina）</span></a>\n<a class=\"button\" href=\"https://github.com/dwzteam/\" target=\"_blank\"><span>DWZ开源系列源码（github）</span></a>\n<a class=\"button\" href=\"donation.html\" target=\"dialog\" height=\"400\"><span style=\"color: red\">捐赠 & DWZ学习视频</span></a>\n\n<div class=\"divider\"></div>\n<h2>有偿服务(<span style=\"\">公司培训，技术支持，解决使用jUI过程中出现的全部疑难问题</span>):</h2><br/>\n<pre style=\"margin:5px;line-height:1.4em;\">\n合作电话：18600055221(杜权)\n技术支持：17767167745(张慧华)\n邮箱：support@jui.org\n</pre>\n<!--<a class=\"button\" href=\"http://code.csdn.net/groups/2155\" target=\"_blank\"><span>DWZ讨论组</span></a>-->\n\n<div class=\"divider\"></div>\n<h2>DWZ 移动端框架(<span style=\"color: red\">DWZ Mobile HTML5混合APP框架)</span></h2>\n<pre style=\"margin:5px;line-height:1.4em\">\n- 在线演示版，使用chrome 开发模式设置手机版：http://mobile.jui.org\n- git源码：https://gitee.com/dwzteam/dwz_mobile_app\n- 在线文档：http://dwzteam.gitee.io/dwz_mobile_doc_v1\n- 安卓 Apk 安装测试版：http://mobile.jui.org/apk/dwz_mobile_app.apk\n</pre>\n<img src=\"./doc/dwz_mobile_app.jpg\" width=\"100%\">\n\n<div class=\"divider\"></div>\n<h2>常见问题及解决:</h2>\n<pre style=\"margin:5px;line-height:1.4em\">\nError loading XML document: dwz.frag.xml\n直接用IE打开index.html弹出一个对话框：Error loading XML document: dwz.frag.xml\n原因：没有加载成功dwz.frag.xml。IE ajax laod本地文件有限制, 是ie安全级别的问题, 不是框架的问题。\n解决方法：部署到apache 等 Web容器下。\n\n如何精简JS：\n\t1) dwz.min.js替换全部dwz.*.js (注意：替换时下面dwz.regional.zh.js还需要引入\n\t2) demo index页面head中引入的几个第三方JS库也可以根据项目情况删除：\n\t\tjs/jquery.cookie.js\t\t\t用于cookie中纪录jUI主题theme，下次打开浏览器时纪录用户选择的主题风格\n\t\tjs/jquery.validate.js\t\t用于form表单验证\n\t\tjs/jquery.bgiframe.js\t\t用于解决IE6 dialog盖不住navTab页面中的select问题\n\t\txheditor/xheditor-1.2.2.min.js\t在线编辑器\n\t\txheditor/xheditor_lang/zh-cn.js\t在线编辑器国际化\n\t\tuploadify/scripts/jquery.uploadify.min.js\t多文件上传\n</pre>\n\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div style=\"width:230px;position: absolute;top:60px;right:0\" layoutH=\"80\">\n\t\t\t\t\t\t\t<iframe width=\"100%\" height=\"430\" class=\"share_self\" frameborder=\"0\" scrolling=\"no\" src=\"//widget.weibo.com/weiboshow/index.php?width=0&height=430&fansRow=2&ptype=1&skin=1&isTitle=0&noborder=1&isWeibo=1&isFans=0&uid=1739071261&verifier=c683dfe7\"></iframe>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t</div>\n\n\t<div id=\"footer\">Copyright &copy; 2020 <a href=\"demo_page2.html\" target=\"dialog\">DWZ团队</a> 京ICP备15053290号-2</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "index_menu.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=7\" />\n<title>简单实用国产jQuery UI框架 - DWZ富客户端框架(J-UI.com)</title>\n\n<link href=\"themes/default/style.css\" rel=\"stylesheet\" type=\"text/css\" media=\"screen\"/>\n<link href=\"themes/css/core.css\" rel=\"stylesheet\" type=\"text/css\" media=\"screen\"/>\n<link href=\"themes/css/print.css\" rel=\"stylesheet\" type=\"text/css\" media=\"print\"/>\n<link href=\"uploadify/css/uploadify.css\" rel=\"stylesheet\" type=\"text/css\" media=\"screen\"/>\n<!--[if IE]>\n<link href=\"themes/css/ieHack.css\" rel=\"stylesheet\" type=\"text/css\" media=\"screen\"/>\n<![endif]-->\n<style type=\"text/css\">\n\t#header{height:85px}\n\t#leftside, #container, #splitBar, #splitBarProxy{top:90px}\n</style>\n\n<!--[if lt IE 9]><script src=\"js/speedup.js\" type=\"text/javascript\"></script><script src=\"js/jquery-1.12.4.js\" type=\"text/javascript\"></script><![endif]-->\n<!--[if gte IE 9]><!--><script src=\"js/jquery-3.4.1.js\" type=\"text/javascript\"></script><!--<![endif]-->\n\n<script src=\"js/jquery.cookie.js\" type=\"text/javascript\"></script>\n<script src=\"js/jquery.validate.js\" type=\"text/javascript\"></script>\n<!--<script src=\"js/jquery.bgiframe.js\" type=\"text/javascript\"></script>-->\n<script src=\"xheditor/xheditor-1.2.2.min.js\" type=\"text/javascript\"></script>\n<script src=\"xheditor/xheditor_lang/zh-cn.js\" type=\"text/javascript\"></script>\n<script src=\"uploadify/scripts/jquery.uploadify.min.js\" type=\"text/javascript\"></script>\n\n<script src=\"bin/dwz.min.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.regional.zh.js\" type=\"text/javascript\"></script>\n\t<script src=\"js/dwz.selectedLoad.js\" type=\"text/javascript\"></script>\n\n<script type=\"text/javascript\">\n$(function(){\n\tDWZ.init(\"dwz.frag.xml\", {\n\t\tloginUrl:\"login_dialog.html\", loginTitle:\"登录\",\t// 弹出登录对话框\n//\t\tloginUrl:\"login.html\",\t// 跳到登录页面\n\t\tstatusCode:{ok:200, error:300, timeout:301}, //【可选】\n\t\tkeys: {statusCode:\"statusCode\", message:\"message\"}, //【可选】\n\t\tpageInfo:{pageNum:\"pageNum\", numPerPage:\"numPerPage\", orderField:\"orderField\", orderDirection:\"orderDirection\"}, //【可选】\n\t\tdebug:false,\t// 调试模式 【true|false】\n\t\tcallback:function(){\n\t\t\tinitEnv();\n\t\t\t$(\"#themeList\").theme({themeBase:\"themes\"});\n\t\t\tsetTimeout(function() {$(\"#sidebar .toggleCollapse div\").trigger(\"click\");}, 10);\n\t\t}\n\t});\n});\n</script>\n</head>\n\n<body scroll=\"no\">\n\t<div id=\"layout\">\n\t\t<div id=\"header\">\n\t\t\t<div class=\"headerNav\">\n\t\t\t\t<a class=\"logo\" href=\"http://j-ui.com\">标志</a>\n\t\t\t\t<ul class=\"nav\">\n\t\t\t\t\t<li id=\"switchEnvBox\"><a href=\"javascript:\">（<span>北京</span>）切换城市</a>\n\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t<li><a href=\"sidebar_1.html\">北京</a></li>\n\t\t\t\t\t\t\t<li><a href=\"sidebar_2.html\">上海</a></li>\n\t\t\t\t\t\t\t<li><a href=\"sidebar_2.html\">南京</a></li>\n\t\t\t\t\t\t\t<li><a href=\"sidebar_2.html\">深圳</a></li>\n\t\t\t\t\t\t\t<li><a href=\"sidebar_2.html\">广州</a></li>\n\t\t\t\t\t\t\t<li><a href=\"sidebar_2.html\">天津</a></li>\n\t\t\t\t\t\t\t<li><a href=\"sidebar_2.html\">杭州</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li><a href=\"donation.html\" target=\"dialog\" height=\"400\" title=\"捐赠 & DWZ学习视频\">捐赠</a></li>\n\t\t\t\t\t<li><a href=\"changepwd.html\" target=\"dialog\" width=\"600\">设置</a></li>\n\t\t\t\t\t<li><a href=\"http://www.cnblogs.com/dwzjs\" target=\"_blank\">博客</a></li>\n\t\t\t\t\t<li><a href=\"http://weibo.com/dwzui\" target=\"_blank\">微博</a></li>\n\t\t\t\t\t<li><a href=\"http://bbs.dwzjs.com\" target=\"_blank\">论坛</a></li>\n\t\t\t\t\t<li><a href=\"login.html\">退出</a></li>\n\t\t\t\t</ul>\n\t\t\t\t<ul class=\"themeList\" id=\"themeList\">\n\t\t\t\t\t<li theme=\"default\"><div class=\"selected\">蓝色</div></li>\n\t\t\t\t\t<li theme=\"green\"><div>绿色</div></li>\n\t\t\t\t\t<!--<li theme=\"red\"><div>红色</div></li>-->\n\t\t\t\t\t<li theme=\"purple\"><div>紫色</div></li>\n\t\t\t\t\t<li theme=\"silver\"><div>银色</div></li>\n\t\t\t\t\t<li theme=\"azure\"><div>天蓝</div></li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\n\t\t\t<div id=\"navMenu\">\n\t\t\t\t<ul>\n\t\t\t\t\t<li class=\"selected\"><a href=\"sidebar_1.html\"><span>资讯管理</span></a></li>\n\t\t\t\t\t<li><a href=\"sidebar_2.html\"><span>订单管理</span></a></li>\n\t\t\t\t\t<li><a href=\"sidebar_1.html\"><span>产品管理</span></a></li>\n\t\t\t\t\t<li><a href=\"sidebar_2.html\"><span>会员管理</span></a></li>\n\t\t\t\t\t<li><a href=\"sidebar_1.html\"><span>服务管理</span></a></li>\n\t\t\t\t\t<li><a href=\"sidebar_2.html\"><span>系统设置</span></a></li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div id=\"leftside\">\n\t\t\t<div id=\"sidebar_s\">\n\t\t\t\t<div class=\"collapse\">\n\t\t\t\t\t<div class=\"toggleCollapse\"><div></div></div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div id=\"sidebar\">\n\t\t\t\t<div class=\"toggleCollapse\"><h2>主菜单</h2><div>收缩</div></div>\n\n\t\t\t\t<div class=\"accordion\" fillSpace=\"sidebar\">\n\t\t\t\t\t<div class=\"accordionHeader\">\n\t\t\t\t\t\t<h2><span>Folder</span>界面组件</h2>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"accordionContent\">\n\t\t\t\t\t\t<ul class=\"tree treeFolder\">\n\t\t\t\t\t\t\t<li><a href=\"tabsPage.html\" target=\"navTab\">主框架面板</a>\n\t\t\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t\t\t<li><a href=\"main.html\" target=\"navTab\" rel=\"main\">我的主页</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"demo/row-col.html\" target=\"navTab\" rel=\"row-col\">栅格系统(Bootstrap)</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"http://www.baidu.com\" target=\"navTab\" rel=\"page1\">页面一(外部页面)</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"demo_page2.html\" target=\"navTab\" rel=\"external\" external=\"true\">iframe navTab页面</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"demo_page1.html\" target=\"navTab\" rel=\"page1\" fresh=\"false\">替换页面一</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"demo_page2.html\" target=\"navTab\" rel=\"page2\">页面二</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"demo_page4.html\" target=\"navTab\" rel=\"page3\" title=\"页面三（自定义标签名）\">页面三</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"demo_page4.html\" target=\"navTab\" rel=\"page4\" fresh=\"false\">测试页面（fresh=\"false\"）</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"w_editor.html\" target=\"navTab\">表单提交会话超时</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"demo/common/ajaxTimeout.json\" target=\"navTab\">navTab会话超时</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"demo/common/ajaxTimeout.json\" target=\"dialog\">dialog会话超时</a></li>\n\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t</li>\n\n\t\t\t\t\t\t\t<li><a>常用组件</a>\n\t\t\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t\t\t<li><a href=\"w_panel.html\" target=\"navTab\" rel=\"w_panel\">面板</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"w_tabs.html\" target=\"navTab\" rel=\"w_tabs\">选项卡面板</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"w_dialog.html\" target=\"navTab\" rel=\"w_dialog\">弹出窗口</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"w_alert.html\" target=\"navTab\" rel=\"w_alert\">提示窗口</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"w_list.html\" target=\"navTab\" rel=\"w_list\">CSS表格容器</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"demo_page1.html\" target=\"navTab\" rel=\"w_table\">表格容器</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"w_removeSelected.html\" target=\"navTab\" rel=\"w_table\">表格数据库排序+批量删除</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"w_tree.html\" target=\"navTab\" rel=\"w_tree\">树形菜单</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"w_accordion.html\" target=\"navTab\" rel=\"w_accordion\">滑动菜单</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"w_editor.html\" target=\"navTab\" rel=\"w_editor\">编辑器</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"w_datepicker.html\" target=\"navTab\" rel=\"w_datepicker\">日期控件</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"demo/database/db_widget.html\" target=\"navTab\" rel=\"db\">suggest+lookup+主从结构</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"demo/sortDrag/1.html\" target=\"navTab\" rel=\"sortDrag\">单个sortDrag示例</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"demo/sortDrag/2.html\" target=\"navTab\" rel=\"sortDrag\">多个sortDrag示例</a></li>\n\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t</li>\n\n\t\t\t\t\t\t\t<li><a>表单组件</a>\n\t\t\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t\t\t<li><a href=\"w_validation.html\" target=\"navTab\" rel=\"w_validation\">表单验证</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"w_button.html\" target=\"navTab\" rel=\"w_button\">按钮</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"w_textInput.html\" target=\"navTab\" rel=\"w_textInput\">文本框/文本域</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"w_combox.html\" target=\"navTab\" rel=\"w_combox\">下拉菜单</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"w_checkbox.html\" target=\"navTab\" rel=\"w_checkbox\">多选框/单选框</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"demo_upload.html\" target=\"navTab\" rel=\"demo_upload\">iframeCallback表单提交</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"w_uploadify.html\" target=\"navTab\" rel=\"w_uploadify\">uploadify多文件上传</a></li>\n\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li><a>组合应用</a>\n\t\t\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t\t\t<li><a href=\"demo/pagination/layout1.html\" target=\"navTab\" rel=\"pagination1\">局部刷新分页1</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"demo/pagination/layout2.html\" target=\"navTab\" rel=\"pagination2\">局部刷新分页2</a></li>\n\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li><a href=\"dwz.frag.xml\" target=\"navTab\" external=\"true\">dwz.frag.xml</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"accordionHeader\">\n\t\t\t\t\t\t<h2><span>Folder</span>典型页面</h2>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"accordionContent\">\n\t\t\t\t\t\t<ul class=\"tree treeFolder treeCheck\">\n\t\t\t\t\t\t\t<li><a href=\"demo_page1.html\" target=\"navTab\" rel=\"demo_page1\">查询我的客户</a></li>\n\t\t\t\t\t\t\t<li><a href=\"demo_page1.html\" target=\"navTab\" rel=\"demo_page2\">表单查询页面</a></li>\n\t\t\t\t\t\t\t<li><a href=\"demo_page4.html\" target=\"navTab\" rel=\"demo_page4\">表单录入页面</a></li>\n\t\t\t\t\t\t\t<li><a href=\"demo_page5.html\" target=\"navTab\" rel=\"demo_page5\">有文本输入的表单</a></li>\n\t\t\t\t\t\t\t<li><a href=\"javascript:;\">有提示的表单输入页面</a>\n\t\t\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t\t\t<li><a href=\"javascript:;\">页面一</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"javascript:;\">页面二</a></li>\n\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li><a href=\"javascript:;\">选项卡和图形的页面</a>\n\t\t\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t\t\t<li><a href=\"javascript:;\">页面一</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"javascript:;\">页面二</a></li>\n\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li><a href=\"javascript:;\">选项卡和图形切换的页面</a></li>\n\t\t\t\t\t\t\t<li><a href=\"javascript:;\">左右两个互动的页面</a></li>\n\t\t\t\t\t\t\t<li><a href=\"javascript:;\">列表输入的页面</a></li>\n\t\t\t\t\t\t\t<li><a href=\"javascript:;\">双层栏目列表的页面</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"accordionHeader\">\n\t\t\t\t\t\t<h2><span>Folder</span>流程演示</h2>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"accordionContent\">\n\t\t\t\t\t\t<ul class=\"tree\">\n\t\t\t\t\t\t\t<li><a href=\"newPage1.html\" target=\"dialog\" rel=\"dlg_page\">列表</a></li>\n\t\t\t\t\t\t\t<li><a href=\"newPage1.html\" target=\"dialog\" rel=\"dlg_page\">列表</a></li>\n\t\t\t\t\t\t\t<li><a href=\"newPage1.html\" target=\"dialog\" rel=\"dlg_page2\">列表</a></li>\n\t\t\t\t\t\t\t<li><a href=\"newPage1.html\" target=\"dialog\" rel=\"dlg_page2\">列表</a></li>\n\t\t\t\t\t\t\t<li><a href=\"newPage1.html\" target=\"dialog\" rel=\"dlg_page2\">列表</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t</div>\n\t\t</div>\n\t\t<div id=\"container\">\n\t\t\t<div id=\"navTab\" class=\"tabsPage\">\n\t\t\t\t<div class=\"tabsPageHeader\">\n\t\t\t\t\t<div class=\"tabsPageHeaderContent\"><!-- 显示左右控制时添加 class=\"tabsPageHeaderMargin\" -->\n\t\t\t\t\t\t<ul class=\"navTab-tab\">\n\t\t\t\t\t\t\t<li tabid=\"main\" class=\"main\"><a href=\"javascript:;\"><span><span class=\"home_icon\">我的主页</span></span></a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"tabsLeft\">left</div><!-- 禁用只需要添加一个样式 class=\"tabsLeft tabsLeftDisabled\" -->\n\t\t\t\t\t<div class=\"tabsRight\">right</div><!-- 禁用只需要添加一个样式 class=\"tabsRight tabsRightDisabled\" -->\n\t\t\t\t\t<div class=\"tabsMore\">more</div>\n\t\t\t\t</div>\n\t\t\t\t<ul class=\"tabsMoreList\">\n\t\t\t\t\t<li><a href=\"javascript:;\">我的主页</a></li>\n\t\t\t\t</ul>\n\t\t\t\t<div class=\"navTab-panel tabsPageContent layoutBox\">\n\t\t\t\t\t<div class=\"page unitBox\">\n\t\t\t\t\t\t<div class=\"accountInfo\">\n\t\t\t\t\t\t\t<div class=\"alertInfo\">\n\t\t\t\t\t\t\t\t<h2><a href=\"doc/dwz-user-guide.pdf\" target=\"_blank\">DWZ框架使用手册(PDF)</a></h2>\n\t\t\t\t\t\t\t\t<a href=\"doc/dwz-user-guide.swf\" target=\"_blank\">DWZ框架演示视频</a>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"right\">\n\t\t\t\t\t\t\t\t<p><a href=\"doc/dwz-user-guide.zip\" target=\"_blank\" style=\"line-height:19px\">DWZ框架使用手册(CHM)</a></p>\n\t\t\t\t\t\t\t\t<p><a href=\"doc/dwz-ajax-develop.swf\" target=\"_blank\" style=\"line-height:19px\">DWZ框架Ajax开发视频教材</a></p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<p><span>DWZ富客户端框架</span></p>\n\t\t\t\t\t\t\t<p>DWZ官方微博:<a href=\"http://weibo.com/dwzui\" target=\"_blank\">http://weibo.com/dwzui</a></p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"pageFormContent\" layoutH=\"80\">\n\t\t\t\t\t\t\t<iframe width=\"100%\" height=\"430\" class=\"share_self\" frameborder=\"0\" scrolling=\"no\" src=\"//widget.weibo.com/weiboshow/index.php?width=0&height=430&fansRow=2&ptype=1&speed=300&skin=1&isTitle=0&noborder=1&isWeibo=1&isFans=0&uid=1739071261&verifier=c683dfe7\"></iframe>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t</div>\n\n\t<div id=\"footer\">Copyright &copy; 2020 <a href=\"demo_page2.html\" target=\"dialog\">DWZ团队</a></div>\n\n</body>\n</html>\n"
  },
  {
    "path": "js/dwz.accordion.js",
    "content": "/**\n * @author Roger Wu\n */\n\n(function($) {\nvar jmenus = new Map();\n// If the DWZ scope is not available, add it\n$.dwz = $.dwz || {};\n\n$(window).resize(function(){\n\tsetTimeout(function(){\n\t\tfor (var i=0; i<jmenus.size();i++){\n\t\t\tfillSpace(jmenus.element(i).key);\n\t\t}\n\t}, 100);\n});\n$.fn.extend({\n\taccordion: function(options, data) {\n\n\t\tvar args = Array.prototype.slice.call(arguments, 1);\n\n\t\treturn this.each(function() {\n\t\t\tif (options.fillSpace) jmenus.put(options.fillSpace, this);\n\t\t\tif (typeof options == \"string\") {\n\t\t\t\tvar accordion = $.data(this, \"dwz-accordion\");\n\t\t\t\taccordion[options].apply(accordion, args);\n\t\t\t// INIT with optional options\n\t\t\t} else if (!$(this).is(\".dwz-accordion\"))\n\t\t\t\t$.data(this, \"dwz-accordion\", new $.dwz.accordion(this, options));\n\t\t});\n\t},\n\t/**\n\t * deprecated, use accordion(\"activate\", index) instead\n\t * @param {Object} index\n\t */\n\tactivate: function(index) {\n\t\treturn this.accordion(\"activate\", index);\n\t}\n});\n\n$.dwz.accordion = function(container, options) {\n\n\t// setup configuration\n\tthis.options = options = $.extend({}, $.dwz.accordion.defaults, options);\n\tthis.element = container;\n\n\t$(container).addClass(\"dwz-accordion\");\n\tif ( options.navigation ) {\n\t\tvar current = $(container).find(\"a\").filter(options.navigationFilter);\n\t\tif ( current.length ) {\n\t\t\tif ( current.filter(options.header).length ) {\n\t\t\t\toptions.active = current;\n\t\t\t} else {\n\t\t\t\toptions.active = current.parent().parent().prev();\n\t\t\t\tcurrent.addClass(\"current\");\n\t\t\t}\n\t\t}\n\t}\n\t// calculate active if not specified, using the first header\n\toptions.headers = $(container).find(options.header);\n\toptions.active = findActive(options.headers, options.active);\n\n\tif ( options.fillSpace ) {\n\t\tfillSpace(options.fillSpace);\n\t} else if ( options.autoheight ) {\n\t\tvar maxHeight = 0;\n\t\toptions.headers.next().each(function() {\n\t\t\tmaxHeight = Math.max(maxHeight, $(this).outerHeight());\n\t\t}).height(maxHeight);\n\t}\n\n\toptions.headers\n\t\t.not(options.active || \"\")\n\t\t.next()\n\t\t.hide();\n\toptions.active.find(\"h2\").addClass(options.selectedClass);\n\n\tif (options.event)\n\t\t$(container).bind((options.event) + \".dwz-accordion\", clickHandler);\n};\n\n$.dwz.accordion.prototype = {\n\tactivate: function(index) {\n\t\t// call clickHandler with custom event\n\t\tclickHandler.call(this.element, {\n\t\t\ttarget: findActive( this.options.headers, index )[0]\n\t\t});\n\t},\n\n\tenable: function() {\n\t\tthis.options.disabled = false;\n\t},\n\tdisable: function() {\n\t\tthis.options.disabled = true;\n\t},\n\tdestroy: function() {\n\t\tthis.options.headers.next().css(\"display\", \"\");\n\t\tif ( this.options.fillSpace || this.options.autoheight ) {\n\t\t\tthis.options.headers.next().css(\"height\", \"\");\n\t\t}\n\t\t$.removeData(this.element, \"dwz-accordion\");\n\t\t$(this.element).removeClass(\"dwz-accordion\").unbind(\".dwz-accordion\");\n\t}\n}\n\nfunction scopeCallback(callback, scope) {\n\treturn function() {\n\t\treturn callback.apply(scope, arguments);\n\t};\n}\n\nfunction completed(cancel) {\n\t// if removed while animated data can be empty\n\tif (!$.data(this, \"dwz-accordion\"))\n\t\treturn;\n\tvar instance = $.data(this, \"dwz-accordion\");\n\tvar options = instance.options;\n\toptions.running = cancel ? 0 : --options.running;\n\tif ( options.running )\n\t\treturn;\n\tif ( options.clearStyle ) {\n\t\toptions.toShow.add(options.toHide).css({\n\t\t\theight: \"\",\n\t\t\toverflow: \"\"\n\t\t});\n\t}\n\t$(this).triggerHandler(\"change.dwz-accordion\", [options.data], options.change);\n}\n\nfunction fillSpace(key){\n\tvar obj = jmenus.get(key);\n\tif (!obj) return;\n\n\tvar parent = $(obj).parent();\n\tvar height = parent.height() - (($(\".accordionHeader\", obj).length) * ($(\".accordionHeader:first-child\", obj).outerHeight())) -2;\n\n\tvar os = parent.children().not(obj);\n\t$.each(os, function(i){\n\t\theight -= $(os[i]).outerHeight();\n\t});\n\t$(\".accordionContent\",obj).height(height);\n}\n\nfunction toggle(toShow, toHide, data, clickedActive, down) {\n\tvar options = $.data(this, \"dwz-accordion\").options;\n\toptions.toShow = toShow;\n\toptions.toHide = toHide;\n\toptions.data = data;\n\tvar complete = scopeCallback(completed, this);\n\n\t// count elements to animate\n\toptions.running = toHide.length == 0 ? toShow.length : toHide.length;\n\n\tif ( options.animated ) {\n\t\tif ( !options.alwaysOpen && clickedActive ) {\n\t\t\t$.dwz.accordion.animations[options.animated]({\n\t\t\t\ttoShow: jQuery([]),\n\t\t\t\ttoHide: toHide,\n\t\t\t\tcomplete: complete,\n\t\t\t\tdown: down,\n\t\t\t\tautoheight: options.autoheight\n\t\t\t});\n\t\t} else {\n\t\t\t$.dwz.accordion.animations[options.animated]({\n\t\t\t\ttoShow: toShow,\n\t\t\t\ttoHide: toHide,\n\t\t\t\tcomplete: complete,\n\t\t\t\tdown: down,\n\t\t\t\tautoheight: options.autoheight\n\t\t\t});\n\t\t}\n\t} else {\n\t\tif ( !options.alwaysOpen && clickedActive ) {\n\t\t\ttoShow.toggle();\n\t\t} else {\n\t\t\ttoHide.hide();\n\t\t\ttoShow.show();\n\t\t}\n\t\tcomplete(true);\n\t}\n}\n\nfunction clickHandler(event) {\n\tvar options = $.data(this, \"dwz-accordion\").options;\n\tif (options.disabled)\n\t\treturn false;\n\n\t// called only when using activate(false) to close all parts programmatically\n\tif ( !event.target && !options.alwaysOpen ) {\n\t\toptions.active.find(\"h2\").toggleClass(options.selectedClass);\n\t\tvar toHide = options.active.next(),\n\t\t\tdata = {\n\t\t\t\tinstance: this,\n\t\t\t\toptions: options,\n\t\t\t\tnewHeader: jQuery([]),\n\t\t\t\toldHeader: options.active,\n\t\t\t\tnewContent: jQuery([]),\n\t\t\t\toldContent: toHide\n\t\t\t},\n\t\t\ttoShow = options.active = $([]);\n\t\ttoggle.call(this, toShow, toHide, data );\n\t\treturn false;\n\t}\n\t// get the click target\n\tvar clicked = $(event.target);\n\n\t// due to the event delegation model, we have to check if one\n\t// of the parent elements is our actual header, and find that\n\tif ( clicked.parents(options.header).length )\n\t\twhile ( !clicked.is(options.header) )\n\t\t\tclicked = clicked.parent();\n\n\tvar clickedActive = clicked[0] == options.active[0];\n\n\t// if animations are still active, or the active header is the target, ignore click\n\tif (options.running || (options.alwaysOpen && clickedActive))\n\t\treturn false;\n\tif (!clicked.is(options.header))\n\t\treturn;\n\n\t// switch classes\n\toptions.active.find(\"h2\").toggleClass(options.selectedClass);\n\tif ( !clickedActive ) {\n\t\tclicked.find(\"h2\").addClass(options.selectedClass);\n\t}\n\n\t// find elements to show and hide\n\tvar toShow = clicked.next(),\n\t\ttoHide = options.active.next(),\n\t\t//data = [clicked, options.active, toShow, toHide],\n\t\tdata = {\n\t\t\tinstance: this,\n\t\t\toptions: options,\n\t\t\tnewHeader: clicked,\n\t\t\toldHeader: options.active,\n\t\t\tnewContent: toShow,\n\t\t\toldContent: toHide\n\t\t},\n\t\tdown = options.headers.index( options.active[0] ) > options.headers.index( clicked[0] );\n\n\toptions.active = clickedActive ? $([]) : clicked;\n\ttoggle.call(this, toShow, toHide, data, clickedActive, down );\n\n\treturn false;\n};\n\nfunction findActive(headers, selector) {\n\treturn selector != undefined\n\t\t? typeof selector == \"number\"\n\t\t\t? headers.filter(\":eq(\" + selector + \")\")\n\t\t\t: headers.not(headers.not(selector))\n\t\t: selector === false\n\t\t\t? $([])\n\t\t\t: headers.filter(\":eq(0)\");\n}\n\n$.extend($.dwz.accordion, {\n\tdefaults: {\n\t\tselectedClass: \"collapsable\",\n\t\talwaysOpen: true,\n\t\tanimated: 'slide',\n\t\tevent: \"click\",\n\t\theader: \".accordionHeader\",\n\t\tautoheight: true,\n\t\trunning: 0,\n\t\tnavigationFilter: function() {\n\t\t\treturn this.href.toLowerCase() == location.href.toLowerCase();\n\t\t}\n\t},\n\tanimations: {\n\t\tslide: function(options, additions) {\n\t\t\toptions = $.extend({\n\t\t\t\teasing: \"swing\",\n\t\t\t\tduration: 300\n\t\t\t}, options, additions);\n\t\t\tif ( !options.toHide.length ) {\n\t\t\t\toptions.toShow.animate({height: \"show\"}, options);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar hideHeight = options.toHide.height(),\n\t\t\t\tshowHeight = options.toShow.height(),\n\t\t\t\tdifference = showHeight / hideHeight;\n\t\t\toptions.toShow.css({ height: 0}).show();\n\t\t\toptions.toHide.filter(\":hidden\").each(options.complete).end().filter(\":visible\").animate({height:\"hide\"},{\n\t\t\t\tstep: function(now) {\n\t\t\t\t\tvar current = (hideHeight - now) * difference;\n\t\t\t\t\tif (/msie|opera/.test(navigator.userAgent.toLowerCase())) {\n\t\t\t\t\t\tcurrent = Math.ceil(current);\n\t\t\t\t\t}\n\t\t\t\t\toptions.toShow.height( current );\n\t\t\t\t},\n\t\t\t\tduration: options.duration,\n\t\t\t\teasing: options.easing,\n\t\t\t\tcomplete: function() {\n\t\t\t\t\tif ( !options.autoheight ) {\n\t\t\t\t\t\toptions.toShow.css({height:\"auto\"});\n\t\t\t\t\t}\n\t\t\t\t\toptions.toShow.css({overflow:\"auto\"});\n\t\t\t\t\toptions.complete();\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tbounceslide: function(options) {\n\t\t\tthis.slide(options, {\n\t\t\t\teasing: options.down ? \"bounceout\" : \"swing\",\n\t\t\t\tduration: options.down ? 1000 : 200\n\t\t\t});\n\t\t},\n\t\teaseslide: function(options) {\n\t\t\tthis.slide(options, {\n\t\t\t\teasing: \"easeinout\",\n\t\t\t\tduration: 700\n\t\t\t})\n\t\t}\n\t}\n});\n})(jQuery);\n"
  },
  {
    "path": "js/dwz.ajax.js",
    "content": "/**\n * @author 张慧华 z@j-ui.com\n *\n */\n\n/**\n * 普通ajax表单提交\n * @param {Object} form\n * @param {Object} callback\n * @param {String} confirmMsg 提示确认信息\n */\nfunction validateCallback(form, callback, confirmMsg) {\n\tvar $form = $(form);\n\n\tif (!$form.valid()) {\n\t\treturn false;\n\t}\n\n\tvar _submitFn = function(){\n\t\t$form.find(':focus').blur();\n\n\t\tvar url = $form.attr(\"action\");\n\t\t$.ajax({\n\t\t\ttype: url.endsWith('.json')? 'GET' : form.method || 'POST',\n\t\t\turl: url,\n\t\t\tdata: $form.serializeArray(),\n\t\t\tdataType: \"json\",\n\t\t\tcache: false,\n\t\t\tsuccess: callback || DWZ.ajaxDone,\n\t\t\terror: DWZ.ajaxError\n\t\t});\n\t}\n\n\tif (confirmMsg) {\n\t\talertMsg.confirm(confirmMsg, {okCall: _submitFn});\n\t} else {\n\t\t_submitFn();\n\t}\n\n\treturn false;\n}\n/**\n * 带文件上传的ajax表单提交\n * @param {Object} form\n * @param {Object} callback\n */\nfunction iframeCallback(form, callback){\n\tvar $form = $(form), $iframe = $(\"#callbackframe\");\n\tif(!$form.valid()) {return false;}\n\n\tif ($iframe.length == 0) {\n\t\t$iframe = $('<iframe id=\"callbackframe\" name=\"callbackframe\" src=\"about:blank\" style=\"display:none\"></iframe>').appendTo('body');\n\t}\n\tif(!form.ajax) {\n\t\t$form.append('<input type=\"hidden\" name=\"ajax\" value=\"1\" />');\n\t}\n\tform.target = 'callbackframe';\n\n\t$form.find(':focus').blur();\n\n\t_iframeResponse($iframe[0], callback || DWZ.ajaxDone);\n}\nfunction _iframeResponse(iframe, callback, dataType){\n\tvar $iframe = $(iframe), $document = $(document);\n\n\t$document.trigger(\"ajaxStart\");\n\n\t$iframe.bind(\"load\", function(event){\n\t\t$iframe.unbind(\"load\");\n\t\t$document.trigger(\"ajaxStop\");\n\n\t\tif (iframe.src == \"javascript:'%3Chtml%3E%3C/html%3E';\" || // For Safari\n\t\t\tiframe.src == \"javascript:'<html></html>';\") { // For FF, IE\n\t\t\treturn;\n\t\t}\n\n\t\tvar doc = iframe.contentDocument || iframe.document;\n\n\t\t// fixing Opera 9.26,10.00\n\t\tif (doc.readyState && doc.readyState != 'complete') return;\n\t\t// fixing Opera 9.64\n\t\tif (doc.body && doc.body.innerHTML == \"false\") return;\n\n\t\tvar response;\n\n\t\tif (doc.XMLDocument) {\n\t\t\t// response is a xml document Internet Explorer property\n\t\t\tresponse = doc.XMLDocument;\n\t\t} else if (doc.body){\n\t\t\ttry{\n\t\t\t\tif (dataType == 'html') {\n\t\t\t\t\tresponse = $iframe.contents().find(\"body\").html();\n\t\t\t\t} else {\n\t\t\t\t\tresponse = $iframe.contents().find(\"body\").text();\n\t\t\t\t\tresponse = jQuery.parseJSON(response);\n\t\t\t\t}\n\t\t\t} catch (e){ // response is html document or plain text\n\t\t\t\tresponse = doc.body.innerHTML;\n\t\t\t}\n\t\t} else {\n\t\t\t// response is a xml document\n\t\t\tresponse = doc;\n\t\t}\n\n\t\tcallback(response);\n\t});\n}\n\n/**\n * navTabAjaxDone是DWZ框架中预定义的表单提交回调函数．\n * 服务器转回navTabId可以把那个navTab标记为reloadFlag=1, 下次切换到那个navTab时会重新载入内容.\n * callbackType如果是closeCurrent就会关闭当前tab\n * 只有callbackType=\"forward\"时需要forwardUrl值\n * navTabAjaxDone这个回调函数基本可以通用了，如果还有特殊需要也可以自定义回调函数.\n * 如果表单提交只提示操作是否成功, 就可以不指定回调函数. 框架会默认调用DWZ.ajaxDone()\n * <form action=\"/user.do?method=save\" onsubmit=\"return validateCallback(this, navTabAjaxDone)\">\n *\n * form提交后返回json数据结构statusCode=DWZ.statusCode.ok表示操作成功, 做页面跳转等操作. statusCode=DWZ.statusCode.error表示操作失败, 提示错误原因.\n * statusCode=DWZ.statusCode.timeout表示session超时，下次点击时跳转到DWZ.loginUrl\n * {\"statusCode\":\"200\", \"message\":\"操作成功\", \"navTabId\":\"navNewsLi\", \"forwardUrl\":\"\", \"callbackType\":\"closeCurrent\", \"rel\".\"xxxId\"}\n * {\"statusCode\":\"300\", \"message\":\"操作失败\"}\n * {\"statusCode\":\"301\", \"message\":\"会话超时\"}\n *\n */\nfunction navTabAjaxDone(json){\n\tDWZ.ajaxDone(json);\n\tif (json[DWZ.keys.statusCode] == DWZ.statusCode.ok){\n\t\tif (json.navTabId){ //把指定navTab页面标记为需要“重新载入”。注意navTabId不能是当前navTab页面的\n\t\t\tnavTab.reloadFlag(json.navTabId);\n\t\t} else { //重新载入当前navTab页面\n\t\t\tvar $pagerForm = $(\"#pagerForm\", navTab.getCurrentPanel());\n\t\t\tvar args = $pagerForm.length>0 ? $pagerForm.serializeArray() : {}\n\t\t\tnavTabPageBreak(args, json.rel);\n\t\t}\n\n\t\tif (\"closeCurrent\" == json.callbackType) {\n\t\t\tsetTimeout(function(){navTab.closeCurrentTab(json.navTabId);}, 100);\n\t\t} else if (\"forward\" == json.callbackType) {\n\t\t\tnavTab.reload(json.forwardUrl);\n\t\t} else if (\"forwardConfirm\" == json.callbackType) {\n\t\t\talertMsg.confirm(json.confirmMsg || DWZ.msg(\"forwardConfirmMsg\"), {\n\t\t\t\tokCall: function(){\n\t\t\t\t\tnavTab.reload(json.forwardUrl);\n\t\t\t\t},\n\t\t\t\tcancelCall: function(){\n\t\t\t\t\tnavTab.closeCurrentTab(json.navTabId);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tnavTab.getCurrentPanel().find(\":input[initValue]\").each(function(){\n\t\t\t\tvar initVal = $(this).attr(\"initValue\");\n\t\t\t\t$(this).val(initVal);\n\t\t\t});\n\t\t}\n\t}\n}\n\n/**\n * dialog上的表单提交回调函数\n * 当前navTab页面有pagerForm就重新加载\n * 服务器转回navTabId，可以重新载入指定的navTab. statusCode=DWZ.statusCode.ok表示操作成功, 自动关闭当前dialog\n *\n * form提交后返回json数据结构,json格式和navTabAjaxDone一致\n */\nfunction dialogAjaxDone(json){\n\tDWZ.ajaxDone(json);\n\tif (json[DWZ.keys.statusCode] == DWZ.statusCode.ok){\n\t\tif (json.navTabId){\n\t\t\tnavTab.reload(json.forwardUrl, {navTabId: json.navTabId});\n\t\t} else {\n\t\t\tvar $pagerForm = $(\"#pagerForm\", navTab.getCurrentPanel());\n\t\t\tvar args = $pagerForm.length>0 ? $pagerForm.serializeArray() : {}\n\t\t\tnavTabPageBreak(args, json.rel);\n\t\t}\n\t\tif (\"closeCurrent\" == json.callbackType) {\n\t\t\t$.pdialog.closeCurrent();\n\t\t}\n\t}\n}\n\n/**\n * 处理navTab上的查询, 会重新载入当前navTab\n * @param {Object} form\n */\nfunction navTabSearch(form, navTabId){\n\tvar $form = $(form);\n\tif (form[DWZ.pageInfo.pageNum]) form[DWZ.pageInfo.pageNum].value = 1;\n\tnavTab.reload($form.attr('action'), {data: $form.serializeArray(), navTabId:navTabId});\n\treturn false;\n}\n/**\n * 处理dialog弹出层上的查询, 会重新载入当前dialog\n * @param {Object} form\n */\nfunction dialogSearch(form){\n\tvar $form = $(form);\n\tif (form[DWZ.pageInfo.pageNum]) form[DWZ.pageInfo.pageNum].value = 1;\n\t$.pdialog.reload($form.attr('action'), {data: $form.serializeArray()});\n\treturn false;\n}\nfunction dwzSearch(form, targetType){\n\tif (targetType == \"dialog\") dialogSearch(form);\n\telse navTabSearch(form);\n\treturn false;\n}\n/**\n * 处理div上的局部查询, 会重新载入指定div\n * @param {Object} form\n */\nfunction divSearch(form, rel){\n\tvar $form = $(form);\n\tif (form[DWZ.pageInfo.pageNum]) form[DWZ.pageInfo.pageNum].value = 1;\n\tif (rel) {\n\t\tvar $box = $(\"#\" + rel);\n\t\t$box.ajaxUrl({\n\t\t\ttype:\"POST\", url:$form.attr(\"action\"), data: $form.serializeArray(), callback:function(){\n\t\t\t\t$box.find(\"[layoutH]\").layoutH();\n\t\t\t}\n\t\t});\n\t}\n\treturn false;\n}\n/**\n *\n * @param {Object} args {pageNum:\"\",numPerPage:\"\",orderField:\"\",orderDirection:\"\"}\n * @param String formId 分页表单选择器，非必填项默认值是 \"pagerForm\"\n */\nfunction _getPagerForm($parent, args) {\n\tvar form = $(\"#pagerForm\", $parent).get(0);\n\n\tif (form) {\n\t\tif (args[\"pageNum\"]) form[DWZ.pageInfo.pageNum].value = args[\"pageNum\"];\n\t\tif (args[\"numPerPage\"]) form[DWZ.pageInfo.numPerPage].value = args[\"numPerPage\"];\n\t\tif (args[\"orderField\"]) form[DWZ.pageInfo.orderField].value = args[\"orderField\"];\n\t\tif (args[\"orderDirection\"] && form[DWZ.pageInfo.orderDirection]) form[DWZ.pageInfo.orderDirection].value = args[\"orderDirection\"];\n\t}\n\n\treturn form;\n}\n\n\n/**\n * 处理navTab中的分页和排序\n * targetType: navTab 或 dialog\n * rel: 可选 用于局部刷新div id号\n * data: pagerForm参数 {pageNum:\"n\", numPerPage:\"n\", orderField:\"xxx\", orderDirection:\"\"}\n * callback: 加载完成回调函数\n */\nfunction dwzPageBreak(options){\n\tvar op = $.extend({ targetType:\"navTab\", rel:\"\", data:{pageNum:\"\", numPerPage:\"\", orderField:\"\", orderDirection:\"\"}, callback:null}, options);\n\tvar $parent = op.targetType == \"dialog\" ? $.pdialog.getCurrent() : navTab.getCurrentPanel();\n\n\tif (op.rel) {\n\t\tvar $box = $parent.find(\"#\" + op.rel);\n\t\tvar form = _getPagerForm($box, op.data);\n\t\tif (form) {\n\t\t\t$box.ajaxUrl({\n\t\t\t\ttype:\"POST\", url:$(form).attr(\"action\"), data: $(form).serializeArray(), callback:function(){\n\t\t\t\t\t$box.find(\"[layoutH]\").layoutH();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t} else {\n\t\tvar form = _getPagerForm($parent, op.data);\n\t\tvar params = $(form).serializeArray();\n\n\t\tif (op.targetType == \"dialog\") {\n\t\t\tif (form) $.pdialog.reload($(form).attr(\"action\"), {data: params, callback: op.callback});\n\t\t} else {\n\t\t\tif (form) navTab.reload($(form).attr(\"action\"), {data: params, callback: op.callback});\n\t\t}\n\t}\n}\n/**\n * 处理navTab中的分页和排序\n * @param args {pageNum:\"n\", numPerPage:\"n\", orderField:\"xxx\", orderDirection:\"\"}\n * @param rel： 可选 用于局部刷新div id号\n */\nfunction navTabPageBreak(args, rel){\n\tdwzPageBreak({targetType:\"navTab\", rel:rel, data:args});\n}\n/**\n * 处理dialog中的分页和排序\n * 参数同 navTabPageBreak\n */\nfunction dialogPageBreak(args, rel){\n\tdwzPageBreak({targetType:\"dialog\", rel:rel, data:args});\n}\n\n\nfunction ajaxTodo(url, callback){\n\tvar $callback = callback || navTabAjaxDone;\n\tif (! $.isFunction($callback)) $callback = eval('(' + callback + ')');\n\t$.ajax({\n\t\ttype:'POST',\n\t\turl:url,\n\t\tdataType:\"json\",\n\t\tcache: false,\n\t\tsuccess: $callback,\n\t\terror: DWZ.ajaxError\n\t});\n}\n\n/**\n * http://www.uploadify.com/documentation/uploadify/onqueuecomplete/\n */\nfunction uploadifyQueueComplete(queueData){\n\n\tvar msg = \"The total number of files uploaded: \"+queueData.uploadsSuccessful+\"<br/>\"\n\t\t+ \"The total number of errors while uploading: \"+queueData.uploadsErrored+\"<br/>\"\n\t\t+ \"The total number of bytes uploaded: \"+queueData.queueBytesUploaded+\"<br/>\"\n\t\t+ \"The average speed of all uploaded files: \"+queueData.averageSpeed;\n\n\tif (queueData.uploadsErrored) {\n\t\talertMsg.error(msg);\n\t} else {\n\t\talertMsg.correct(msg);\n\t}\n}\n/**\n * http://www.uploadify.com/documentation/uploadify/onuploadsuccess/\n */\nfunction uploadifySuccess(file, data, response){\n\talert(data)\n}\n\n/**\n * http://www.uploadify.com/documentation/uploadify/onuploaderror/\n */\nfunction uploadifyError(file, errorCode, errorMsg) {\n\talertMsg.error(errorCode+\": \"+errorMsg);\n}\n\n\n/**\n * http://www.uploadify.com/documentation/\n * @param {Object} event\n * @param {Object} queueID\n * @param {Object} fileObj\n * @param {Object} errorObj\n */\nfunction uploadifyError(event, queueId, fileObj, errorObj){\n\talert(\"event:\" + event + \"\\nqueueId:\" + queueId + \"\\nfileObj.name:\"\n\t\t+ fileObj.name + \"\\nerrorObj.type:\" + errorObj.type + \"\\nerrorObj.info:\" + errorObj.info);\n}\n\nDWZ.pargerFormExport = function (url, $form) {\n\n\tif ($form.length == 0) {\n\t\twindow.location = url;\n\t\treturn;\n\t}\n\n\tvar $iframe = $(\"#callbackframe\");\n\tif ($iframe.length == 0) {\n\t\t$iframe = $(\"<iframe id='callbackframe' name='callbackframe' src='about:blank' style='display:none'></iframe>\").appendTo(\"body\");\n\t}\n\n\tvar pagerFormUrl = $form[0].action,\n\t\tpagerFormOnSubmit = $form.attr('onsubmit');\n\n\t$form[0].action = url;\n\t$form[0].target = \"callbackframe\";\n\t$form.removeAttr('onsubmit');\n\t$form.submit();\n\n\t$form[0].action = pagerFormUrl;\n\t$form.attr('onsubmit', pagerFormOnSubmit);\n};\n\n$.fn.extend({\n\tajaxTodo:function(){\n\t\treturn this.each(function(){\n\t\t\tvar $this = $(this);\n\t\t\t$this.click(function(event){\n\t\t\t\tif ($this.hasClass('disabled') || $this.hasClass('buttonDisabled')) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tvar url = unescape($this.attr(\"href\")).replaceTmById($(event.target).parents(\".unitBox:first\"));\n\t\t\t\tDWZ.debug(url);\n\t\t\t\tif (!url.isFinishedTm()) {\n\t\t\t\t\talertMsg.error($this.attr(\"warn\") || DWZ.msg(\"alertSelectMsg\"));\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tvar title = $this.attr(\"title\");\n\t\t\t\tif (title) {\n\t\t\t\t\talertMsg.confirm(title, {\n\t\t\t\t\t\tokCall: function(){\n\t\t\t\t\t\t\tajaxTodo(url, $this.attr(\"callback\"));\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tajaxTodo(url, $this.attr(\"callback\"));\n\t\t\t\t}\n\t\t\t\tevent.preventDefault();\n\t\t\t});\n\t\t});\n\t},\n\tdwzExport: function(){\n\t\tfunction _doExport($this) {\n\t\t\tvar $p = $this.attr(\"targetType\") == \"dialog\" ? $.pdialog.getCurrent() : navTab.getCurrentPanel();\n\t\t\tvar $form = $(\"#pagerForm\", $p);\n\t\t\tvar url = $this.attr(\"href\");\n\n\t\t\tDWZ.pargerFormExport(url, $form);\n\t\t}\n\n\t\treturn this.each(function(){\n\t\t\tvar $this = $(this);\n\t\t\t$this.click(function(event){\n\t\t\t\tif ($this.hasClass('disabled') || $this.hasClass('buttonDisabled')) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tvar title = $this.attr(\"title\");\n\t\t\t\tif (title) {\n\t\t\t\t\talertMsg.confirm(title, {\n\t\t\t\t\t\tokCall: function(){_doExport($this);}\n\t\t\t\t\t});\n\t\t\t\t} else {_doExport($this);}\n\n\t\t\t\tevent.preventDefault();\n\t\t\t});\n\t\t});\n\t}\n});\n\n/**\n * The W3C XMLHttpRequest specification dictates that the charset is always UTF-8; specifying another charset will not force the browser to change the encoding.\n * iframe模拟ajax load, 解决GBK页面ajax load乱码问题\n *\n * @param url\n * @param callback\n */\n$.iframeLoad = function(url, callback) {\n\n\tvar $form = $('<form method=\"post\" action=\"'+url+'\" target=\"callbackframe\" style=\"display: none\"><button type=\"submit\">submit</button></form>').appendTo('body'),\n\t\t$iframe = $(\"#callbackframe\");\n\n\tif ($iframe.length == 0) {\n\t\t$iframe = $('<iframe id=\"callbackframe\" name=\"callbackframe\" src=\"about:blank\" style=\"display:none\"></iframe>').appendTo('body');\n\t}\n\n\t_iframeResponse($iframe[0], function(response) {\n\t\t$form.remove();\n\t\tif (callback) callback.call($iframe, response);\n\t}, 'html');\n\n\t$form.submit();\n};\n\n$.fn.iframeLoad = function(url, callback) {\n\treturn this.each(function(){\n\t\tvar $box = $(this);\n\n\t\t$.iframeLoad(url, function(response){\n\t\t\t$box.html(response).initUI();\n\t\t\tif (callback) callback.call($box, response);\n\t\t});\n\t});\n};\n"
  },
  {
    "path": "js/dwz.alertMsg.js",
    "content": "/**\n * @author 张慧华 z@j-ui.com\n */\n$.setRegional(\"alertMsg\", {\n\ttitle:{error:\"Error\", info:\"Information\", warn:\"Warning\", correct:\"Successful\", confirm:\"Confirmation\"},\n\tbutMsg:{ok:\"OK\", yes:\"Yes\", no:\"No\", cancel:\"Cancel\"}\n});\nvar alertMsg = {\n\t_boxId: \"#alertMsgBox\",\n\t_bgId: \"#alertBackground\",\n\t_closeTimer: null,\n\n\ttypes: {error:\"error\", info:\"info\", warn:\"warn\", correct:\"correct\", confirm:\"confirm\"},\n\n\t_getTitle: function(key){\n\t\treturn $.regional.alertMsg.title[key];\n\t},\n\n\t_keydownOk: function(event){\n\t\tif (event.keyCode == DWZ.keyCode.ENTER) event.data.target.trigger(\"click\");\n\t\treturn false;\n\t},\n\t_keydownEsc: function(event){\n\t\tif (event.keyCode == DWZ.keyCode.ESC) event.data.target.trigger(\"click\");\n\t},\n\t/**\n\t * \n\t * @param {Object} type\n\t * @param {Object} msg\n\t * @param {Object} buttons [button1, button2]\n\t */\n\topen: function(type, msg, buttons){\n\t\t$(this._boxId).remove();\n\t\tvar butsHtml = \"\";\n\t\tif (buttons) {\n\t\t\tfor (var i = 0; i < buttons.length; i++) {\n\t\t\t\tvar sRel = buttons[i].call ? \"callback\" : \"\";\n\t\t\t\tbutsHtml += DWZ.frag[\"alertButFrag\"].replace(\"#butMsg#\", buttons[i].name).replace(\"#callback#\", sRel);\n\t\t\t}\n\t\t}\n\t\tvar boxHtml = DWZ.frag[\"alertBoxFrag\"].replace(\"#type#\", type).replace(\"#title#\", this._getTitle(type)).replace(\"#message#\", msg).replace(\"#butFragment#\", butsHtml);\n\t\t$(boxHtml).appendTo(\"body\").css({top:-$(this._boxId).height()+\"px\"}).animate({top:\"0px\"}, 500);\n\t\t\t\t\n\t\tif (this._closeTimer) {\n\t\t\tclearTimeout(this._closeTimer);\n\t\t\tthis._closeTimer = null;\n\t\t}\n\t\tif (this.types.info == type || this.types.correct == type){\n\t\t\tthis._closeTimer = setTimeout(function(){alertMsg.close()}, 3500);\n\t\t} else {\n\t\t\t$(this._bgId).show();\n\t\t}\n\t\t\n\t\tvar jButs = $(this._boxId).find(\"a.button\");\n\t\tvar jCallButs = jButs.filter(\"[rel=callback]\");\n\t\tvar jDoc = $(document);\n\t\t\n\t\tfor (var i = 0; i < buttons.length; i++) {\n\t\t\tif (buttons[i].call) jCallButs.eq(i).click(buttons[i].call);\n\t\t\tif (buttons[i].keyCode == DWZ.keyCode.ENTER) {\n\t\t\t\tjDoc.bind(\"keydown\",{target:jButs.eq(i)}, this._keydownOk);\n\t\t\t}\n\t\t\tif (buttons[i].keyCode == DWZ.keyCode.ESC) {\n\t\t\t\tjDoc.bind(\"keydown\",{target:jButs.eq(i)}, this._keydownEsc);\n\t\t\t}\n\t\t}\n\t},\n\tclose: function(){\n\t\t$(document).unbind(\"keydown\", this._keydownOk).unbind(\"keydown\", this._keydownEsc);\n\t\t$(this._boxId).animate({top:-$(this._boxId).height()}, 500, function(){\n\t\t\t$(this).remove();\n\t\t});\n\t\t$(this._bgId).hide();\n\t},\n\terror: function(msg, options) {\n\t\tthis._alert(this.types.error, msg, options);\n\t},\n\tinfo: function(msg, options) {\n\t\tthis._alert(this.types.info, msg, options);\n\t},\n\twarn: function(msg, options) {\n\t\tthis._alert(this.types.warn, msg, options);\n\t},\n\tcorrect: function(msg, options) {\n\t\tthis._alert(this.types.correct, msg, options);\n\t},\n\t_alert: function(type, msg, options) {\n\t\tvar op = {okName:$.regional.alertMsg.butMsg.ok, okCall:null};\n\t\t$.extend(op, options);\n\t\tvar buttons = [\n\t\t\t{name:op.okName, call: op.okCall, keyCode:DWZ.keyCode.ENTER}\n\t\t];\n\t\tthis.open(type, msg, buttons);\n\t},\n\t/**\n\t * \n\t * @param {Object} msg\n\t * @param {Object} options {okName, okCal, cancelName, cancelCall}\n\t */\n\tconfirm: function(msg, options) {\n\t\tvar op = {okName:$.regional.alertMsg.butMsg.ok, okCall:null, cancelName:$.regional.alertMsg.butMsg.cancel, cancelCall:null};\n\t\t$.extend(op, options);\n\t\tvar buttons = [\n\t\t\t{name:op.okName, call: op.okCall, keyCode:DWZ.keyCode.ENTER},\n\t\t\t{name:op.cancelName, call: op.cancelCall, keyCode:DWZ.keyCode.ESC}\n\t\t];\n\t\tthis.open(this.types.confirm, msg, buttons);\n\t}\n};\n\n"
  },
  {
    "path": "js/dwz.barDrag.js",
    "content": "/**\n * @author Roger Wu \n * @version 1.0\n */\n(function($){\n\t$.fn.cssv = function(pre){\n\t\tvar cssPre = $(this).css(pre);\n\t\treturn cssPre.substring(0, cssPre.indexOf(\"px\")) * 1;\n\t};\n\t$.fn.jBar = function(options){\n\t\tvar op = $.extend({container:\"#container\", collapse:\".collapse\", toggleBut:\".toggleCollapse div\", sideBar:\"#sidebar\", sideBar2:\"#sidebar_s\", splitBar:\"#splitBar\", splitBar2:\"#splitBarProxy\"}, options);\n\t\treturn this.each(function(){\n\t\t\tvar jbar = this;\n\t\t\tvar sbar = $(op.sideBar2, jbar);\n\t\t\tvar bar = $(op.sideBar, jbar);\n\t\t\t$(op.toggleBut, bar).click(function(){\n\t\t\t\tDWZ.ui.sbar = false;\n\t\t\t\t$(op.splitBar).hide();\n\t\t\t\tvar sbarwidth = sbar.cssv(\"left\") + sbar.outerWidth();\n\t\t\t\tvar barleft = sbarwidth - bar.outerWidth();\n\t\t\t\tvar cleft = $(op.container).cssv(\"left\") - (bar.outerWidth() - sbar.outerWidth());\n\t\t\t\tvar cwidth = bar.outerWidth() - sbar.outerWidth() + $(op.container).outerWidth();\n\t\t\t\t$(op.container).animate({left: cleft,width: cwidth},50,function(){\n\t\t\t\t\tbar.animate({left: barleft}, 500, function(){\n\t\t\t\t\t\tbar.hide();\n\t\t\t\t\t\tsbar.show().css(\"left\", -50).animate({left: 5}, 200);\n\t\t\t\t\t\t$(window).trigger(DWZ.eventType.resizeGrid);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\t$(op.collapse,sbar).click(function(){\n\t\t\t\t\tvar sbarwidth = sbar.cssv(\"left\") + sbar.outerWidth();\n\t\t\t\t\tif(bar.is(\":hidden\")) {\n\t\t\t\t\t\t$(op.toggleBut, bar).hide();\n\t\t\t\t\t\tbar.show().animate({left: sbarwidth}, 500);\n\t\t\t\t\t\t$(op.container).click(_hideBar);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbar.animate({left: barleft}, 500, function(){\n\t\t\t\t\t\t\tbar.hide();\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tfunction _hideBar() {\n\t\t\t\t\t\t$(op.container).unbind(\"click\", _hideBar);\n\t\t\t\t\t\tif (!DWZ.ui.sbar) {\n\t\t\t\t\t\t\tbar.animate({left: barleft}, 500, function(){\n\t\t\t\t\t\t\t\tbar.hide();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t});\n\t\t\t$(op.toggleBut, sbar).click(function(){\n\t\t\t\tDWZ.ui.sbar = true;\n\t\t\t\tsbar.animate({left: -25}, 200, function(){\t\t\t\t\n\t\t\t\t\tbar.show();\n\t\t\t\t});\n\t\t\t\tbar.animate({left: 5}, 800, function(){\n\t\t\t\t\t$(op.splitBar).show();\n\t\t\t\t\t$(op.toggleBut, bar).show();\t\t\t\t\t\n\t\t\t\t\tvar cleft = 5 + bar.outerWidth() + $(op.splitBar).outerWidth();\n\t\t\t\t\tvar cwidth = $(op.container).outerWidth() - (cleft - $(op.container).cssv(\"left\"));\n\t\t\t\t\t$(op.container).css({left: cleft,width: cwidth});\n\t\t\t\t\t$(op.collapse, sbar).unbind('click');\n\t\t\t\t\t$(window).trigger(DWZ.eventType.resizeGrid);\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t});\n\t\t\t$(op.splitBar).mousedown(function(event){\n\t\t\t\t$(op.splitBar2).each(function(){\n\t\t\t\t\tvar spbar2 = $(this);\n\t\t\t\t\tsetTimeout(function(){spbar2.show();}, 100);\n\t\t\t\t\tspbar2.css({visibility: \"visible\",left: $(op.splitBar).css(\"left\")});\t\t\t\t\t\n\t\t\t\t\tspbar2.jDrag($.extend(options, {obj:$(\"#sidebar\"), move:\"horizontal\", event:event,stop: function(){\n\t\t\t\t\t\t$(this).css(\"visibility\", \"hidden\");\n\t\t\t\t\t\tvar move = $(this).cssv(\"left\") - $(op.splitBar).cssv(\"left\");\n\t\t\t\t\t\tvar sbarwidth = bar.outerWidth() + move;\n\t\t\t\t\t\tvar cleft = $(op.container).cssv(\"left\") + move;\n\t\t\t\t\t\tvar cwidth = $(op.container).outerWidth() - move;\n\t\t\t\t\t\tbar.css(\"width\", sbarwidth);\n\t\t\t\t\t\t$(op.splitBar).css(\"left\", $(this).css(\"left\"));\n\t\t\t\t\t\t$(op.container).css({left: cleft,width: cwidth});\n\n\t\t\t\t\t}}));\n\t\t\t\t\treturn false;\t\t\t\t\t\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t}\n})(jQuery);\n"
  },
  {
    "path": "js/dwz.checkbox.js",
    "content": "/**\n * @author 张慧华 z@j-ui.com\n */\n(function($){\n\t$.fn.extend({\n\n\t\tcheckboxCtrl: function(parent){\n\t\t\treturn this.each(function(){\n\t\t\t\tvar $trigger = $(this);\n\t\t\t\t$trigger.click(function(){\n\t\t\t\t\tvar group = $trigger.attr(\"group\");\n\t\t\t\t\tif ($trigger.is(\":checkbox\")) {\n\t\t\t\t\t\tvar type = $trigger.is(\":checked\") ? \"all\" : \"none\";\n\t\t\t\t\t\tif (group) $.checkbox.select(group, type, parent);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (group) $.checkbox.select(group, $trigger.attr(\"selectType\") || \"all\", parent);\n\t\t\t\t\t}\n\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t});\n\n\t$.checkbox = {\n\t\tselectAll: function(_name, _parent){\n\t\t\tthis.select(_name, \"all\", _parent);\n\t\t},\n\t\tunSelectAll: function(_name, _parent){\n\t\t\tthis.select(_name, \"none\", _parent);\n\t\t},\n\t\tselectInvert: function(_name, _parent){\n\t\t\tthis.select(_name, \"invert\", _parent);\n\t\t},\n\t\tselect: function(_name, _type, _parent){\n\t\t\tvar $parent = $(_parent || document),\n\t\t\t\t$checkboxLi = $parent.find(\":checkbox[name='\"+_name+\"']\");\n\t\t\tswitch(_type){\n\t\t\t\tcase \"invert\":\n\t\t\t\t\t$checkboxLi.each(function(){\n\t\t\t\t\t\tthis.checked = !this.checked;\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"none\":\n\t\t\t\t\t$checkboxLi.prop('checked', false);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t$checkboxLi.prop('checked', true);\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t$checkboxLi.trigger('change');\n\t\t}\n\t};\n})(jQuery);\n"
  },
  {
    "path": "js/dwz.combox.js",
    "content": "/**\n * @author Roger Wu\n */\n\n(function($){\n\tvar allSelectBox = [];\n\tvar killAllBox = function(bid){\n\t\t$.each(allSelectBox, function(i){\n\t\t\tif (allSelectBox[i] != bid) {\n\t\t\t\tif (!$(\"#\" + allSelectBox[i])[0]) {\n\t\t\t\t\t$(\"#op_\" + allSelectBox[i]).remove();\n\t\t\t\t\t//allSelectBox.splice(i,1);\n\t\t\t\t} else {\n\t\t\t\t\t$(\"#op_\" + allSelectBox[i]).css({ height: \"\", width: \"\" }).hide();\n\t\t\t\t}\n\t\t\t\t$(document).unbind(\"click\", killAllBox);\n\t\t\t}\n\t\t});\n\t};\n\n\tvar _onchange = function(event){\n\t\tvar $ref = $(\"#\"+event.data.ref);\n\t\tif ($ref.length == 0) return false;\n\t\t$.ajax({\n\t\t\ttype:'POST', dataType:\"json\", url:event.data.refUrl.replace(\"{value}\", encodeURIComponent(event.data.$this.val())), cache: false,\n\t\t\tdata:{},\n\t\t\tsuccess: function(json){\n\t\t\t\t_comboxRefresh($ref, json);\n\t\t\t},\n\t\t\terror: DWZ.ajaxError\n\t\t});\n\t};\n\n\tvar _comboxRefresh = function($select, json){\n\t\tif (!json) return;\n\t\tvar html = '';\n\n\t\t$.each(json, function(i){\n\t\t\tif (json[i] && json[i].length > 1){\n\t\t\t\thtml += '<option value=\"'+json[i][0]+'\">' + json[i][1] + '</option>';\n\t\t\t}\n\t\t});\n\n\t\tvar $refCombox = $select.parents(\"div.combox:first\");\n\t\t$select.html(html).insertAfter($refCombox);\n\t\t$refCombox.remove();\n\t\t$select.trigger(\"change\").combox();\n\t};\n\n\tvar _comboxReset = function($select){\n\t\tvar $box = $select.parents('div.select:first'),\n\t\t\tdefaultValue = $box.find('>a').attr('default-value');\n\t\t$('#op_'+$box.attr('id')).find('>li a[value=\"'+defaultValue+'\"]').trigger('click');\n\t};\n\n\t$.extend($.fn, {\n\t\tcomboxSelect: function(options){\n\t\t\tvar op = $.extend({ selector: \">a\" }, options);\n\n\t\t\treturn this.each(function(){\n\t\t\t\tvar box = $(this);\n\t\t\t\tvar selector = $(op.selector, box);\n\n\t\t\t\tallSelectBox.push(box.attr(\"id\"));\n\t\t\t\t$(op.selector, box).click(function(){\n\t\t\t\t\tif (! box.hasClass('disabled')) {\n\t\t\t\t\t\tvar options = $(\"#op_\"+box.attr(\"id\"));\n\t\t\t\t\t\tif (options.is(\":hidden\")) {\n\t\t\t\t\t\t\tif(options.height() > 300) {\n\t\t\t\t\t\t\t\toptions.css({height:\"300px\",overflow:\"scroll\"});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvar top = box.offset().top+box[0].offsetHeight-50;\n\t\t\t\t\t\t\tif(top + options.height() > $(window).height() - 20) {\n\t\t\t\t\t\t\t\ttop =  $(window).height() - 20 - options.height();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\toptions.css({top:top,left:box.offset().left}).show();\n\t\t\t\t\t\t\tkillAllBox(box.attr(\"id\"));\n\t\t\t\t\t\t\t$(document).click(killAllBox);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$(document).unbind(\"click\", killAllBox);\n\t\t\t\t\t\t\tkillAllBox();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\t\t\t\t$(\"#op_\"+box.attr(\"id\")).find(\">li\").comboxOption(selector, box);\n\t\t\t});\n\t\t},\n\t\tcomboxOption: function(selector, box){\n\t\t\treturn this.each(function(){\n\t\t\t\t$(\">a\", this).click(function(){\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\t$this.parent().parent().find(\".selected\").removeClass(\"selected\");\n\t\t\t\t\t$this.addClass(\"selected\");\n\t\t\t\t\tselector.text($this.text());\n\n\t\t\t\t\tvar $input = $(\"select\", box);\n\t\t\t\t\tif ($input.val() != $this.attr(\"value\")) {\n\t\t\t\t\t\t$(\"select\", box).val($this.attr(\"value\")).trigger(\"change\");\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\t\tcombox:function(){\n\t\t\t/* 清理下拉层 */\n\t\t\tvar _selectBox = [];\n\t\t\t$.each(allSelectBox, function(i){\n\t\t\t\tif ($(\"#\" + allSelectBox[i])[0]) {\n\t\t\t\t\t_selectBox.push(allSelectBox[i]);\n\t\t\t\t} else {\n\t\t\t\t\t$(\"#op_\" + allSelectBox[i]).remove();\n\t\t\t\t}\n\t\t\t});\n\t\t\tallSelectBox = _selectBox;\n\n\t\t\treturn this.each(function(i){\n\t\t\t\tvar $this = $(this).hide();\n\n\t\t\t\tvar name = $this.attr(\"name\");\n\t\t\t\tvar value= $this.val();\n\t\t\t\tvar label = $('option[value=\"' + value + '\"]',$this).text();\n\t\t\t\tvar ref = $this.attr(\"ref\");\n\t\t\t\tvar refUrl = $this.attr('refUrl') || '';\n\t\t\t\tvar resetValue = $this.attr('reset-value') !== undefined ? $this.attr('reset-value') : value\n\n\t\t\t\tvar cid = $this.attr(\"id\") || Math.round(Math.random()*10000000);\n\t\t\t\tvar select = '<div class=\"combox\"><div id=\"combox_'+ cid +'\" class=\"select\"' + (ref?' ref=\"' + ref + '\"' : '') + '>';\n\t\t\t\tselect += '<a href=\"javascript:\" name=\"' + name +'\" value=\"' + value + '\" default-value=\"'+resetValue+'\">' + label +'</a></div></div>';\n\t\t\t\tvar options = '<ul class=\"comboxop\" id=\"op_combox_'+ cid +'\">';\n\t\t\t\t$(\"option\", $this).each(function(){\n\t\t\t\t\tvar option = $(this);\n\t\t\t\t\toptions +=\"<li><a class=\\\"\"+ ((value||option[0].text) && value==option[0].value?\"selected\":\"\") +\"\\\" href=\\\"#\\\" value=\\\"\" + option[0].value + \"\\\">\" + option[0].text + \"</a></li>\";\n\t\t\t\t});\n\t\t\t\toptions +=\"</ul>\";\n\n\t\t\t\t$(\"body\").append(options);\n\t\t\t\t$this.after(select);\n\t\t\t\t$(\"div.select\", $this.next()).comboxSelect().append($this);\n\n\t\t\t\tif (ref && refUrl) {\n\t\t\t\t\t$this.unbind(\"change\", _onchange).bind(\"change\", {ref:ref, refUrl:refUrl, $this:$this}, _onchange);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t// combox 刷新全部 option 项\n\t\tcomboxRefresh: function(json){\n\t\t\treturn this.each(function(){\n\t\t\t\tvar $select = $(this);\n\t\t\t\t_comboxRefresh($select, json);\n\t\t\t});\n\t\t},\n\n\t\t// combox reset还原初始值\n\t\tcomboxReset: function(){\n\t\t\treturn this.each(function(){\n\t\t\t\tvar $select = $(this);\n\t\t\t\t_comboxReset($select);\n\t\t\t});\n\t\t},\n\n\t\tcomboxDisable: function(){\n\t\t\treturn this.each(function(){\n\t\t\t\t$(this).parents('.combox .select:first').addClass('disabled');\n\t\t\t});\n\t\t},\n\n\t\tcomboxEnable: function(){\n\t\t\treturn this.each(function(){\n\t\t\t\t$(this).parents('.combox .select:first').removeClass('disabled');\n\t\t\t});\n\t\t},\n\t\tcomboxVal: function(val){\n\t\t\treturn this.each(function(){\n\t\t\t\tvar $box = $(this).parents('.combox .select:first');\n\t\t\t\t$('#op_'+$box.attr('id')).find('>li a[value=\"'+val+'\"]').trigger('click');\n\t\t\t});\n\t\t}\n\n\t});\n})(jQuery);\n"
  },
  {
    "path": "js/dwz.contextmenu.js",
    "content": "/**\n * @author 张慧华 z@j-ui.com\n */\n\n(function($){\n\tvar menu, shadow, hash;\n\t$.fn.extend({\n\t\tcontextMenu: function(id, options){\n\t\t\tvar op = $.extend({\n\t\t\t\t    shadow : true,\n\t\t\t\t    bindings:{},\n\t\t\t\t\tctrSub:null\n\t\t\t\t}, options\n\t\t\t);\n\t\t\t\n\t\t\tif (!menu) {\n\t\t\t\tmenu = $('<div id=\"contextmenu\"></div>').appendTo('body').hide();\n\t\t\t}\n\t\t\tif (!shadow) {\n\t\t\t\tshadow = $('<div id=\"contextmenuShadow\"></div>').appendTo('body').hide();\n\t\t\t}\n\t\t\t\n\t\t\thash = hash || [];\n\t\t\thash.push({\n\t\t\t\tid : id,\n\t\t\t\tshadow: op.shadow,\n\t\t\t\tbindings: op.bindings || {},\n\t\t\t\tctrSub: op.ctrSub\n\t\t\t});\n\t\t\t\n\t\t\tvar index = hash.length - 1;\n\t\t\t$(this).bind('contextmenu', function(e) {\n\t\t\t\tdisplay(index, this, e, op);\n\t\t\t\treturn false;\n\t\t\t});\n\t\t\treturn this;\n\t\t}\n\t});\n\t\n\tfunction display(index, trigger, e, options) {\n\t\tvar cur = hash[index];\n\n\t\tvar content = $(DWZ.frag[cur.id]);\n\t\tcontent.find('li').hoverClass();\n\t\n\t\t// Send the content to the menu\n\t\tmenu.html(content);\n\t\n\t\t$.each(cur.bindings, function(id, func) {\n\t\t\t$(\"[rel='\"+id+\"']\", menu).bind('click', function(e) {\n\t\t\t\thide();\n\t\t\t\tfunc($(trigger), $(\"#\"+cur.id));\n\t\t\t});\n\t\t});\n\t\t\n\t\tvar posX = e.pageX;\n\t\tvar posY = e.pageY;\n\t\tif ($(window).width() < posX + menu.width()) posX -= menu.width();\n\t\tif ($(window).height() < posY + menu.height()) posY -= menu.height();\n\n\t\tmenu.css({'left':posX,'top':posY}).show();\n\t\tif (cur.shadow) shadow.css({width:menu.width(),height:menu.height(),left:posX+3,top:posY+3}).show();\n\t\t$(document).one('click', hide);\n\t\t\n\t\tif ($.isFunction(cur.ctrSub)) {cur.ctrSub($(trigger), $(\"#\"+cur.id));}\n\t}\n\t\n\tfunction hide() {\n\t\tmenu.hide();\n\t\tshadow.hide();\n\t}\n})(jQuery);\n\n"
  },
  {
    "path": "js/dwz.core.js",
    "content": "/**\n * @author 张慧华 z@j-ui.com\n *\n */\n\nvar DWZ = {\n\tversion: '1.6.2',\n\tregPlugins: [], // [function($parent){} ...]\n\t// sbar: show sidebar\n\tkeyCode: {\n\t\tENTER: 13, ESC: 27, END: 35, HOME: 36,\n\t\tSHIFT: 16, TAB: 9,\n\t\tLEFT: 37, RIGHT: 39, UP: 38, DOWN: 40,\n\t\tDELETE: 46, BACKSPACE:8\n\t},\n\teventType: {\n\t\tpageClear:\"pageClear\",\t// 用于重新ajaxLoad、关闭nabTab, 关闭dialog时，去除xheditor等需要特殊处理的资源\n\t\tresizeGrid:\"resizeGrid\",\t// 用于窗口或dialog大小调整\n\t\tinitEnvAfter: \"initEnvAfter\" // initEnv完成出发\n\t},\n\tisOverAxis: function(x, reference, size) {\n\t\t//Determines when x coordinate is over \"b\" element axis\n\t\treturn (x > reference) && (x < (reference + size));\n\t},\n\tisOver: function(y, x, top, left, height, width) {\n\t\t//Determines when x, y coordinates is over \"b\" element\n\t\treturn this.isOverAxis(y, top, height) && this.isOverAxis(x, left, width);\n\t},\n\n\tpageInfo: {pageNum:\"pageNum\", numPerPage:\"numPerPage\", orderField:\"orderField\", orderDirection:\"orderDirection\"},\n\tstatusCode: {ok:200, error:300, timeout:301},\n\tkeys: {statusCode:\"statusCode\", message:\"message\"},\n\tui:{\n\t\tsbar:true,\n\t\thideMode:'display' //navTab组件切换的隐藏方式，支持的值有’display’，’offsets’负数偏移位置的值，默认值为’display’\n\t},\n\tfrag:{}, //page fragment\n\t_msg:{}, //alert message\n\t_set:{\n\t\tloginUrl:\"\", //session timeout\n\t\tloginTitle:\"\", //if loginTitle open a login dialog\n\t\tdebug:false\n\t},\n\tmsg:function(key, args){\n\t\tvar _format = function(str,args) {\n\t\t\targs = args || [];\n\t\t\tvar result = str || \"\";\n\t\t\tfor (var i = 0; i < args.length; i++){\n\t\t\t\tresult = result.replace(new RegExp(\"\\\\{\" + i + \"\\\\}\", \"g\"), args[i]);\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t\treturn _format(this._msg[key], args);\n\t},\n\tdebug:function(msg){\n\t\tif (this._set.debug) {\n\t\t\tif (typeof(console) != \"undefined\") console.log(msg);\n\t\t\telse alert(msg);\n\t\t}\n\t},\n\tloadLogin:function(){\n\t\tif ($.pdialog && DWZ._set.loginTitle) {\n\t\t\t$.pdialog.open(DWZ._set.loginUrl, \"login\", DWZ._set.loginTitle, {mask:true,width:520,height:260});\n\t\t} else {\n\t\t\twindow.location = DWZ._set.loginUrl;\n\t\t}\n\t},\n\n\t/*\n\t * json to string\n\t */\n\tobj2str:function(o) {\n\t\tvar r = [];\n\t\tif(typeof o ==\"string\") return \"\\\"\"+o.replace(/([\\'\\\"\\\\])/g,\"\\\\$1\").replace(/(\\n)/g,\"\\\\n\").replace(/(\\r)/g,\"\\\\r\").replace(/(\\t)/g,\"\\\\t\")+\"\\\"\";\n\t\tif(typeof o == \"object\"){\n\t\t\tif(!o.sort){\n\t\t\t\tfor(var i in o)\n\t\t\t\t\tr.push(i+\":\"+DWZ.obj2str(o[i]));\n\t\t\t\tif(!!document.all && !/^\\n?function\\s*toString\\(\\)\\s*\\{\\n?\\s*\\[native code\\]\\n?\\s*\\}\\n?\\s*$/.test(o.toString)){\n\t\t\t\t\tr.push(\"toString:\"+o.toString.toString());\n\t\t\t\t}\n\t\t\t\tr=\"{\"+r.join()+\"}\"\n\t\t\t}else{\n\t\t\t\tfor(var i =0;i<o.length;i++) {\n\t\t\t\t\tr.push(DWZ.obj2str(o[i]));\n\t\t\t\t}\n\t\t\t\tr=\"[\"+r.join()+\"]\"\n\t\t\t}\n\t\t\treturn r;\n\t\t}\n\t\treturn o.toString();\n\t},\n\tjsonEval:function(data) {\n\t\ttry{\n\t\t\tif ($.type(data) == 'string')\n\t\t\t\treturn eval('(' + data + ')');\n\t\t\telse return data;\n\t\t} catch (e){\n\t\t\treturn {};\n\t\t}\n\t},\n\tgetHtmlBody:function(content){\n\t\tvar result = /<body[^>]*>([\\s\\S]*)<\\/body>/.exec(content);\n\t\tif(result && result.length === 2)\n\t\t\treturn result[1];\n\t\treturn content;\n\t},\n\tajaxError:function(xhr, ajaxOptions, thrownError){\n\t\tif (alertMsg) {\n\t\t\talertMsg.error(\"<div>Http status: \" + xhr.status + \" \" + xhr.statusText + \"</div>\"\n\t\t\t\t+ \"<div>ajaxOptions: \"+ajaxOptions + \"</div>\"\n\t\t\t\t+ \"<div>thrownError: \"+thrownError + \"</div>\"\n\t\t\t\t+ \"<div>\"+DWZ.getHtmlBody(xhr.responseText)+\"</div>\");\n\t\t} else {\n\t\t\talert(\"Http status: \" + xhr.status + \" \" + xhr.statusText + \"\\najaxOptions: \" + ajaxOptions + \"\\nthrownError:\"+thrownError + \"\\n\" +xhr.responseText);\n\t\t}\n\t},\n\tajaxDone:function(json){\n\t\tif(json[DWZ.keys.statusCode] == DWZ.statusCode.error) {\n\t\t\tif(json[DWZ.keys.message] && alertMsg) alertMsg.error(json[DWZ.keys.message]);\n\t\t} else if (json[DWZ.keys.statusCode] == DWZ.statusCode.timeout) {\n\t\t\tif(alertMsg) alertMsg.error(json[DWZ.keys.message] || DWZ.msg(\"sessionTimout\"), {okCall:DWZ.loadLogin});\n\t\t\telse DWZ.loadLogin();\n\t\t} else if (json[DWZ.keys.statusCode] == DWZ.statusCode.ok){\n\t\t\tif(json[DWZ.keys.message] && alertMsg) alertMsg.correct(json[DWZ.keys.message]);\n\t\t};\n\t},\n\n\tinit:function(pageFrag, options){\n\t\tvar op = $.extend({\n\t\t\t\tloginUrl:\"login.html\", loginTitle:null, callback:null, debug:false,\n\t\t\t\tstatusCode:{}, keys:{}\n\t\t\t}, options);\n\t\tthis._set.loginUrl = op.loginUrl;\n\t\tthis._set.loginTitle = op.loginTitle;\n\t\tthis._set.debug = op.debug;\n\t\t$.extend(DWZ.statusCode, op.statusCode);\n\t\t$.extend(DWZ.keys, op.keys);\n\t\t$.extend(DWZ.pageInfo, op.pageInfo);\n\t\t$.extend(DWZ.ui, op.ui);\n\n\t\tjQuery.ajax({\n\t\t\ttype:'GET',\n\t\t\turl:pageFrag,\n\t\t\tdataType:'xml',\n\t\t\ttimeout: 50000,\n\t\t\tcache: false,\n\t\t\terror: function(xhr){\n\t\t\t\talert('Error loading XML document: ' + pageFrag + \"\\nHttp status: \" + xhr.status + \" \" + xhr.statusText);\n\t\t\t},\n\t\t\tsuccess: function(xml){\n\t\t\t\t$(xml).find(\"_PAGE_\").each(function(){\n\t\t\t\t\tvar pageId = $(this).attr(\"id\");\n\t\t\t\t\tif (pageId) DWZ.frag[pageId] = $(this).text();\n\t\t\t\t});\n\n\t\t\t\t$(xml).find(\"_MSG_\").each(function(){\n\t\t\t\t\tvar id = $(this).attr(\"id\");\n\t\t\t\t\tif (id) DWZ._msg[id] = $(this).text();\n\t\t\t\t});\n\n\t\t\t\tif (jQuery.isFunction(op.callback)) op.callback();\n\t\t\t}\n\t\t});\n\n\t\tvar _doc = $(document);\n\t\tif (!_doc.isBind(DWZ.eventType.pageClear)) {\n\t\t\t_doc.bind(DWZ.eventType.pageClear, function(event){\n\t\t\t\tvar box = event.target;\n\t\t\t\tif ($.fn.xheditor) {\n\t\t\t\t\t$(\"textarea.editor\", box).xheditor(false);\n\t\t\t\t}\n\n\t\t\t\tif (window.UE && UE.getEditor) {\n\t\t\t\t\t$('div.edui-editor', box).each(function(){\n\t\t\t\t\t\tvar editorId = $(this).parent().attr('id');\n\t\t\t\t\t\tUE.getEditor(editorId).destroy();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n};\n\n\n(function($){\n\t// DWZ set regional\n\t$.setRegional = function(key, value){\n\t\tif (!$.regional) $.regional = {};\n\t\t$.regional[key] = value;\n\t};\n\n\t$.fn.extend({\n\t\t/**\n\t\t * @param {Object} op: {type:GET/POST, url:ajax请求地址, data:ajax请求参数列表, callback:回调函数 }\n\t\t */\n\t\tajaxUrl: function(op){\n\t\t\tvar $this = $(this);\n\n\t\t\t$this.trigger(DWZ.eventType.pageClear);\n\n\t\t\t$.ajax({\n\t\t\t\ttype: op.type || 'GET',\n\t\t\t\turl: op.url,\n\t\t\t\tdata: op.data,\n\t\t\t\tcache: false,\n\t\t\t\tsuccess: function(response){\n\t\t\t\t\tvar json = DWZ.jsonEval(response);\n\n\t\t\t\t\tif (json[DWZ.keys.statusCode]==DWZ.statusCode.error){\n\t\t\t\t\t\tif ($.pdialog) $.pdialog.checkCloseCurrent(json);\n\t\t\t\t\t\tif (navTab) navTab.checkCloseCurrent(json);\n\n\t\t\t\t\t\tif (json[DWZ.keys.message]) alertMsg.error(json[DWZ.keys.message]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$this.html(response).initUI();\n\t\t\t\t\t\tif ($.isFunction(op.callback)) op.callback(response);\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif (json[DWZ.keys.statusCode]==DWZ.statusCode.timeout){\n\t\t\t\t\t\tif ($.pdialog) $.pdialog.checkCloseCurrent(json);\n\t\t\t\t\t\tif (navTab) navTab.checkCloseCurrent(json);\n\n\t\t\t\t\t\talertMsg.error(json[DWZ.keys.message] || DWZ.msg(\"sessionTimout\"), {okCall:function(){\n\t\t\t\t\t\t\tDWZ.loadLogin();\n\t\t\t\t\t\t}});\n\t\t\t\t\t}\n\n\t\t\t\t},\n\t\t\t\terror: DWZ.ajaxError,\n\t\t\t\tstatusCode: {\n\t\t\t\t\t503: function(xhr, ajaxOptions, thrownError) {\n\t\t\t\t\t\talert(DWZ.msg(\"statusCode_503\") || thrownError);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tloadUrl: function(url,data,callback){\n\t\t\t$(this).ajaxUrl({url:url, data:data, callback:callback});\n\t\t},\n\n\t\tinitUI: function() {\n\t\t\treturn this.each(function(){\n\t\t\t\tvar $this = $(this);\n\t\t\t\t$.each(DWZ.regPlugins, function(index, fn){\n\t\t\t\t\tfn($this);\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\t\t/**\n\t\t * adjust component inner reference box height\n\t\t * @param {Object} refBox: reference box jQuery Obj\n\t\t */\n\t\tlayoutH: function($refBox){\n\t\t\treturn this.each(function(){\n\t\t\t\tvar $this = $(this);\n\t\t\t\tif (! $refBox) $refBox = $this.getLayoutBox();\n\t\t\t\tvar iRefH = $refBox.height();\n\t\t\t\tvar iLayoutH = parseInt($this.attr(\"layoutH\"));\n\t\t\t\tvar iH = iRefH - iLayoutH > 50 ? iRefH - iLayoutH : 50;\n\n\t\t\t\tif ($this.isTag(\"table\")) {\n\t\t\t\t\t$this.removeAttr(\"layoutH\").wrap('<div layoutH=\"'+iLayoutH+'\" style=\"overflow:auto;height:'+iH+'px\"></div>');\n\t\t\t\t} else {\n\t\t\t\t\t$this.height(iH).css(\"overflow\",\"auto\");\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tgetLayoutBox: function(){\n\t\t\treturn $(this).parents(\"div.layoutBox:first\");\n\t\t},\n\t\thoverClass: function(className, speed){\n\t\t\tvar _className = className || \"hover\";\n\t\t\treturn this.each(function(){\n\t\t\t\tvar $this = $(this), mouseOutTimer;\n\t\t\t\t$this.hover(function(){\n\t\t\t\t\tif (mouseOutTimer) clearTimeout(mouseOutTimer);\n\t\t\t\t\t$this.addClass(_className);\n\t\t\t\t},function(){\n\t\t\t\t\tmouseOutTimer = setTimeout(function(){$this.removeClass(_className);}, speed||10);\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\t\tfocusClass: function(className){\n\t\t\tvar _className = className || \"textInputFocus\";\n\t\t\treturn this.each(function(){\n\t\t\t\t$(this).focus(function(){\n\t\t\t\t\t$(this).addClass(_className);\n\t\t\t\t}).blur(function(){\n\t\t\t\t\t$(this).removeClass(_className);\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\t\tinputAlert: function(){\n\t\t\treturn this.each(function(){\n\n\t\t\t\tvar $this = $(this);\n\n\t\t\t\tfunction getAltBox(){\n\t\t\t\t\treturn $this.parent().find(\"label.alt\");\n\t\t\t\t}\n\t\t\t\tfunction altBoxCss(opacity){\n\t\t\t\t\tvar position = $this.position();\n\t\t\t\t\treturn {\n\t\t\t\t\t\twidth:$this.width(),\n\t\t\t\t\t\ttop:position.top+'px',\n\t\t\t\t\t\tleft:position.left +'px',\n\t\t\t\t\t\topacity:opacity || 1\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif (getAltBox().length < 1) {\n\t\t\t\t\tif (!$this.attr(\"id\")) $this.attr(\"id\", $this.attr(\"name\") + \"_\" +Math.round(Math.random()*10000));\n\t\t\t\t\tvar $label = $('<label class=\"alt\" for=\"'+$this.attr(\"id\")+'\">'+$this.attr(\"alt\")+'</label>').appendTo($this.parent());\n\n\t\t\t\t\t$label.css(altBoxCss(0.6));\n\t\t\t\t\tif ($this.val()) $label.hide();\n\t\t\t\t}\n\n\t\t\t\t$this.focus(function(){\n\t\t\t\t\tgetAltBox().css(altBoxCss(0.3));\n\t\t\t\t}).blur(function(){\n\t\t\t\t\tif (!$(this).val()) getAltBox().show().css(\"opacity\",1);\n\t\t\t\t}).keydown(function(){\n\t\t\t\t\tgetAltBox().hide();\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\t\tisTag:function(tn) {\n\t\t\tif(!tn) return false;\n\t\t\treturn $(this)[0].tagName.toLowerCase() == tn?true:false;\n\t\t},\n\t\t/**\n\t\t * 判断当前元素是否已经绑定某个事件\n\t\t * @param {Object} type\n\t\t */\n\t\tisBind:function(type) {\n\t\t\tvar _events = $(this).data(\"events\");\n\t\t\treturn _events && type && _events[type];\n\t\t},\n\t\t/**\n\t\t * 输出firebug日志\n\t\t * @param {Object} msg\n\t\t */\n\t\tlog:function(msg){\n\t\t\treturn this.each(function(){\n\t\t\t\tif (console) console.log(\"%s: %o\", msg, this);\n\t\t\t});\n\t\t}\n\t});\n\n\t/**\n\t * 扩展String方法\n\t */\n\t$.extend(String.prototype, {\n\t\tisPositiveInteger:function(){\n\t\t\treturn (new RegExp(/^[1-9]\\d*$/).test(this));\n\t\t},\n\t\tisInteger:function(){\n\t\t\treturn (new RegExp(/^\\d+$/).test(this));\n\t\t},\n\t\tisNumber: function(value, element) {\n\t\t\treturn (new RegExp(/^-?(?:\\d+|\\d{1,3}(?:,\\d{3})+)(?:\\.\\d+)?$/).test(this));\n\t\t},\n\t\ttrim:function(){\n\t\t\treturn this.replace(/(^\\s*)|(\\s*$)|\\r|\\n/g, \"\");\n\t\t},\n\t\tstartsWith:function (pattern){\n\t\t\treturn this.indexOf(pattern) === 0;\n\t\t},\n\t\tendsWith:function(pattern) {\n\t\t\tvar d = this.length - pattern.length;\n\t\t\treturn d >= 0 && this.lastIndexOf(pattern) === d;\n\t\t},\n\t\treplaceSuffix:function(index){\n\t\t\treturn this.replace(/\\[[0-9]+\\]/,'['+index+']').replace('#index#',index);\n\t\t},\n\t\ttrans:function(){\n\t\t\treturn this.replace(/&lt;/g, '<').replace(/&gt;/g,'>').replace(/&quot;/g, '\"');\n\t\t},\n\t\tencodeTXT: function(){\n\t\t\treturn (this).replaceAll('&', '&amp;').replaceAll(\"<\",\"&lt;\").replaceAll(\">\", \"&gt;\").replaceAll(\" \", \"&nbsp;\");\n\t\t},\n\t\treplaceAll:function(os, ns){\n\t\t\treturn this.replace(new RegExp(os,\"gm\"),ns);\n\t\t},\n\t\treplaceTm:function(data){\n\t\t\tif (!data) return this;\n\t\t\treturn this.replace(RegExp(\"({[A-Za-z_]+[A-Za-z0-9_]*})\",\"g\"), function($1){\n\t\t\t\treturn data[$1.replace(/[{}]+/g, \"\")];\n\t\t\t});\n\t\t},\n\t\treplaceTmById:function(_box){\n\t\t\tvar $parent = _box || $(document);\n\t\t\treturn this.replace(RegExp(\"({[A-Za-z_]+[A-Za-z0-9_]*})\",\"g\"), function($1){\n\t\t\t\tvar $input = $parent.find(\"#\"+$1.replace(/[{}]+/g, \"\"));\n\t\t\t\treturn $input.val() ? $input.val() : $1;\n\t\t\t});\n\t\t},\n\t\tisFinishedTm:function(){\n\t\t\treturn !(new RegExp(\"{[A-Za-z_]+[A-Za-z0-9_]*}\").test(this));\n\t\t},\n\t\tskipChar:function(ch) {\n\t\t\tif (!this || this.length===0) {return '';}\n\t\t\tif (this.charAt(0)===ch) {return this.substring(1).skipChar(ch);}\n\t\t\treturn this;\n\t\t},\n\t\tisValidPwd:function() {\n\t\t\treturn (new RegExp(/^([_]|[a-zA-Z0-9]){6,32}$/).test(this));\n\t\t},\n\t\tisValidMail:function(){\n\t\t\treturn(new RegExp(/^\\w+((-\\w+)|(\\.\\w+))*\\@[A-Za-z0-9]+((\\.|-)[A-Za-z0-9]+)*\\.[A-Za-z0-9]+$/).test(this.trim()));\n\t\t},\n\t\tisSpaces:function() {\n\t\t\tfor(var i=0; i<this.length; i+=1) {\n\t\t\t\tvar ch = this.charAt(i);\n\t\t\t\tif (ch!=' '&& ch!=\"\\n\" && ch!=\"\\t\" && ch!=\"\\r\") {return false;}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\tisPhone:function() {\n\t\t\treturn (new RegExp(/(^([0-9]{3,4}[-])?\\d{3,8}(-\\d{1,6})?$)|(^\\([0-9]{3,4}\\)\\d{3,8}(\\(\\d{1,6}\\))?$)|(^\\d{3,8}$)/).test(this));\n\t\t},\n\t\tisUrl:function(){\n\t\t\treturn (new RegExp(/^[a-zA-z]+:\\/\\/([a-zA-Z0-9\\-\\.]+)([-\\w .\\/?%&=:]*)$/).test(this));\n\t\t},\n\t\tisExternalUrl:function(){\n\t\t\treturn this.isUrl() && this.indexOf(\"://\"+document.domain) == -1;\n\t\t}\n\t});\n})(jQuery);\n\n/**\n * You can use this map like this:\n * var myMap = new Map();\n * myMap.put(\"key\",\"value\");\n * var key = myMap.get(\"key\");\n * myMap.remove(\"key\");\n */\nfunction Map(){\n\n\tthis.elements = new Array();\n\n\tthis.size = function(){\n\t\treturn this.elements.length;\n\t}\n\n\tthis.isEmpty = function(){\n\t\treturn (this.elements.length < 1);\n\t}\n\n\tthis.clear = function(){\n\t\tthis.elements = new Array();\n\t}\n\n\tthis.put = function(_key, _value){\n\t\tthis.remove(_key);\n\t\tthis.elements.push({key: _key, value: _value});\n\t}\n\n\tthis.remove = function(_key){\n\t\ttry {\n\t\t\tfor (i = 0; i < this.elements.length; i++) {\n\t\t\t\tif (this.elements[i].key == _key) {\n\t\t\t\t\tthis.elements.splice(i, 1);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t\treturn false;\n\t}\n\n\tthis.get = function(_key){\n\t\ttry {\n\t\t\tfor (i = 0; i < this.elements.length; i++) {\n\t\t\t\tif (this.elements[i].key == _key) { return this.elements[i].value; }\n\t\t\t}\n\t\t} catch (e) {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tthis.element = function(_index){\n\t\tif (_index < 0 || _index >= this.elements.length) { return null; }\n\t\treturn this.elements[_index];\n\t}\n\n\tthis.containsKey = function(_key){\n\t\ttry {\n\t\t\tfor (i = 0; i < this.elements.length; i++) {\n\t\t\t\tif (this.elements[i].key == _key) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t\treturn false;\n\t}\n\n\tthis.values = function(){\n\t\tvar arr = new Array();\n\t\tfor (i = 0; i < this.elements.length; i++) {\n\t\t\tarr.push(this.elements[i].value);\n\t\t}\n\t\treturn arr;\n\t}\n\n\tthis.keys = function(){\n\t\tvar arr = new Array();\n\t\tfor (i = 0; i < this.elements.length; i++) {\n\t\t\tarr.push(this.elements[i].key);\n\t\t}\n\t\treturn arr;\n\t}\n}\n"
  },
  {
    "path": "js/dwz.cssTable.js",
    "content": "/**\n * Theme Plugins\n * @author 张慧华 z@j-ui.com\n */\n(function($){\n\t$.fn.extend({\n\t\tcssTable: function(options){\n\n\t\t\treturn this.each(function(){\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar $trs = $this.find('tbody>tr');\n\t\t\t\tvar $grid = $this.parent(); // table\n\t\t\t\tvar nowrap = $this.hasClass(\"nowrap\");\n\n\t\t\t\t$trs.hoverClass(\"hover\").each(function(index){\n\t\t\t\t\tvar $tr = $(this);\n\t\t\t\t\tif (!nowrap && index % 2 == 1) $tr.addClass(\"trbg\");\n\n\t\t\t\t\t$tr.click(function(){\n\t\t\t\t\t\t$trs.filter(\".selected\").removeClass(\"selected\");\n\t\t\t\t\t\t$tr.addClass(\"selected\");\n\t\t\t\t\t\tvar sTarget = $tr.attr(\"target\");\n\t\t\t\t\t\tif (sTarget) {\n\t\t\t\t\t\t\tif ($(\"#\"+sTarget, $grid).length == 0) {\n\t\t\t\t\t\t\t\t$grid.prepend('<input id=\"'+sTarget+'\" type=\"hidden\" />');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t$(\"#\"+sTarget, $grid).val($tr.attr(\"rel\"));\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t});\n\n\t\t\t\t$this.find(\"thead [orderField]\").orderBy({\n\t\t\t\t\ttargetType: $this.attr(\"targetType\"),\n\t\t\t\t\trel:$this.attr(\"rel\"),\n\t\t\t\t\tasc: $this.attr(\"asc\") || \"asc\",\n\t\t\t\t\tdesc:  $this.attr(\"desc\") || \"desc\"\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t});\n})(jQuery);\n"
  },
  {
    "path": "js/dwz.database.js",
    "content": "/**\n * @author ZhangHuihua@msn.com\n */\n(function($){\n\tvar _lookup = {currentGroup:\"\", suffix:\"\", $target:null, pk:\"id\"};\n\tvar _util = {\n\t\t_lookupPrefix: function(key){\n\t\t\tvar strDot = _lookup.currentGroup ? \".\" : \"\";\n\t\t\treturn _lookup.currentGroup + strDot + key + _lookup.suffix;\n\t\t},\n\t\tlookupPk: function(key){\n\t\t\treturn this._lookupPrefix(key);\n\t\t},\n\t\tlookupField: function(key){\n\t\t\treturn this.lookupPk(key);\n\t\t}\n\t};\n\n\t$.extend({\n\t\tbringBackSuggest: function(args){\n\t\t\tvar $box = _lookup['$target'].parents(\".unitBox:first\");\n\t\t\t// $box.trigger('bringBackSuggestDone', args);\n\t\t\t$box.find(\":input\").each(function(){\n\t\t\t\tvar $input = $(this), inputName = $input.attr(\"name\");\n\n\t\t\t\tfor (var key in args) {\n\t\t\t\t\tvar name = (_lookup.pk == key) ? _util.lookupPk(key) : _util.lookupField(key);\n\n\t\t\t\t\tif (name == inputName) {\n\t\t\t\t\t\t$input.val(args[key]);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tbringBack: function(args){\n\t\t\t$.bringBackSuggest(args);\n\t\t\t$.pdialog.closeCurrent();\n\t\t},\n\t\tgetSelectedIds: function(selectedIds, targetType){\n\t\t\tvar ids = \"\";\n\t\t\tvar $box = targetType == \"dialog\" ? $.pdialog.getCurrent() : navTab.getCurrentPanel();\n\t\t\t$box.find(\"input:checked\").filter(\"[name='\"+selectedIds+\"']\").each(function(i){\n\t\t\t\tvar val = $(this).val();\n\t\t\t\tids += i==0 ? val : \",\"+val;\n\t\t\t});\n\t\t\treturn ids;\n\t\t}\n\t});\n\n\t$.fn.extend({\n\t\tlookup: function(){\n\t\t\treturn this.each(function(){\n\t\t\t\tvar $this = $(this), options = {mask:true,\n\t\t\t\t\twidth:$this.attr('width')||820, height:$this.attr('height')||400,\n\t\t\t\t\tmaxable:eval($this.attr(\"maxable\") || \"true\"),\n\t\t\t\t\tresizable:eval($this.attr(\"resizable\") || \"true\")\n\t\t\t\t};\n\t\t\t\t$this.click(function(event){\n\t\t\t\t\t_lookup = $.extend(_lookup, {\n\t\t\t\t\t\tcurrentGroup: $this.attr(\"lookupGroup\") || \"\",\n\t\t\t\t\t\tsuffix: $this.attr(\"suffix\") || \"\",\n\t\t\t\t\t\t$target: $this,\n\t\t\t\t\t\tpk: $this.attr(\"lookupPk\") || \"id\"\n\t\t\t\t\t});\n\n\t\t\t\t\tvar url = unescape($this.attr(\"href\")).replaceTmById($(event.target).parents(\".unitBox:first\"));\n\t\t\t\t\tif (!url.isFinishedTm()) {\n\t\t\t\t\t\talertMsg.error($this.attr(\"warn\") || DWZ.msg(\"alertSelectMsg\"));\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\t$.pdialog.open(url, \"_blank\", $this.attr(\"title\") || $this.text(), options);\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\t\tmultLookup: function(){\n\t\t\treturn this.each(function(){\n\t\t\t\tvar $this = $(this), args={};\n\t\t\t\t$this.click(function(event){\n\t\t\t\t\tvar $unitBox = $this.parents(\".unitBox:first\");\n\t\t\t\t\t$unitBox.find(\"[name='\"+$this.attr(\"multLookup\")+\"']\").filter(\":checked\").each(function(){\n\t\t\t\t\t\tvar _args = DWZ.jsonEval($(this).val());\n\t\t\t\t\t\tfor (var key in _args) {\n\t\t\t\t\t\t\tvar value = args[key] ? args[key]+\",\" : \"\";\n\t\t\t\t\t\t\targs[key] = value + _args[key];\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tif ($.isEmptyObject(args)) {\n\t\t\t\t\t\talertMsg.error($this.attr(\"warn\") || DWZ.msg(\"alertSelectMsg\"));\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\t$.bringBack(args);\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\t\tsuggest: function(){\n\t\t\tvar op = {suggest$:\"#suggest\", suggestShadow$: \"#suggestShadow\"};\n\t\t\tvar selectedIndex = -1;\n\t\t\treturn this.each(function(){\n\t\t\t\tvar $input = $(this).attr('autocomplete', 'off').keydown(function(event){\n\t\t\t\t\tif (event.keyCode == DWZ.keyCode.ENTER && $(op.suggest$).is(':visible')) return false; //屏蔽回车提交\n\t\t\t\t});\n\n\t\t\t\tvar suggestFields=$input.attr('suggestFields').split(\",\");\n\n\t\t\t\tfunction _show(event){\n\t\t\t\t\tvar offset = $input.offset();\n\t\t\t\t\tvar iTop = offset.top+this.offsetHeight;\n\t\t\t\t\tvar $suggest = $(op.suggest$);\n\t\t\t\t\tif ($suggest.length == 0) $suggest = $('<div id=\"suggest\"></div>').appendTo($('body'));\n\n\t\t\t\t\t$suggest.css({\n\t\t\t\t\t\tleft:offset.left+'px',\n\t\t\t\t\t\ttop:iTop+'px'\n\t\t\t\t\t}).show();\n\n\t\t\t\t\t_lookup = $.extend(_lookup, {\n\t\t\t\t\t\tcurrentGroup: $input.attr(\"lookupGroup\") || \"\",\n\t\t\t\t\t\tsuffix: $input.attr(\"suffix\") || \"\",\n\t\t\t\t\t\t$target: $input,\n\t\t\t\t\t\tpk: $input.attr(\"lookupPk\") || \"id\"\n\t\t\t\t\t});\n\n\t\t\t\t\tvar url = unescape($input.attr(\"suggestUrl\")).replaceTmById($(event.target).parents(\".unitBox:first\"));\n\t\t\t\t\tif (!url.isFinishedTm()) {\n\t\t\t\t\t\talertMsg.error($input.attr(\"warn\") || DWZ.msg(\"alertSelectMsg\"));\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar postData = {};\n\t\t\t\t\tpostData[$input.attr(\"postField\")||\"inputValue\"] = $input.val();\n\n\t\t\t\t\t$.ajax({\n\t\t\t\t\t\tglobal:false,\n\t\t\t\t\t\ttype:'POST', dataType:\"json\", url:url, cache: false,\n\t\t\t\t\t\tdata: postData,\n\t\t\t\t\t\tsuccess: function(response){\n\t\t\t\t\t\t\tif (!response) return;\n\t\t\t\t\t\t\tvar html = '';\n\n\t\t\t\t\t\t\t$.each(response, function(i){\n\t\t\t\t\t\t\t\tvar liAttr = '', liLabel = '';\n\n\t\t\t\t\t\t\t\tfor (var i=0; i<suggestFields.length; i++){\n\t\t\t\t\t\t\t\t\tvar str = this[suggestFields[i]];\n\t\t\t\t\t\t\t\t\tif (str) {\n\t\t\t\t\t\t\t\t\t\tif (liLabel) liLabel += '-';\n\t\t\t\t\t\t\t\t\t\tliLabel += str;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tfor (var key in this) {\n\t\t\t\t\t\t\t\t\tif (liAttr) liAttr += ',';\n\t\t\t\t\t\t\t\t\tliAttr += key+\":'\"+this[key]+\"'\";\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\thtml += '<li lookupAttrs=\"'+liAttr+'\">' + liLabel + '</li>';\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tvar $lis = $suggest.html('<ul>'+html+'</ul>').find(\"li\");\n\t\t\t\t\t\t\t$lis.hoverClass(\"selected\").click(function(){\n\t\t\t\t\t\t\t\t_select($(this));\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tif ($lis.length == 1 && event.keyCode != DWZ.keyCode.BACKSPACE) {\n\t\t\t\t\t\t\t\t_select($lis.eq(0));\n\t\t\t\t\t\t\t} else if ($lis.length == 0){\n\t\t\t\t\t\t\t\tvar jsonStr = \"\";\n\t\t\t\t\t\t\t\tfor (var i=0; i<suggestFields.length; i++){\n\t\t\t\t\t\t\t\t\tif (_util.lookupField(suggestFields[i]) == event.target.name) {\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (jsonStr) jsonStr += ',';\n\t\t\t\t\t\t\t\t\tjsonStr += suggestFields[i]+\":''\";\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tjsonStr = \"{\"+_lookup.pk+\":'',\" + jsonStr +\"}\";\n\t\t\t\t\t\t\t\t$.bringBackSuggest(DWZ.jsonEval(jsonStr));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\terror: function(){\n\t\t\t\t\t\t\t$suggest.html('');\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\t$(document).bind(\"click\", _close);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tfunction _select($item){\n\t\t\t\t\tvar jsonStr = \"{\"+ $item.attr('lookupAttrs') +\"}\";\n\n\t\t\t\t\t$.bringBackSuggest(DWZ.jsonEval(jsonStr));\n\t\t\t\t}\n\t\t\t\tfunction _close(){\n\t\t\t\t\t$(op.suggest$).html('').hide();\n\t\t\t\t\tselectedIndex = -1;\n\t\t\t\t\t$(document).unbind(\"click\", _close);\n\t\t\t\t}\n\n\t\t\t\t$input.focus(_show).click(false).keyup(function(event){\n\t\t\t\t\tvar $items = $(op.suggest$).find(\"li\");\n\t\t\t\t\tswitch(event.keyCode){\n\t\t\t\t\t\tcase DWZ.keyCode.ESC:\n\t\t\t\t\t\tcase DWZ.keyCode.TAB:\n\t\t\t\t\t\tcase DWZ.keyCode.SHIFT:\n\t\t\t\t\t\tcase DWZ.keyCode.HOME:\n\t\t\t\t\t\tcase DWZ.keyCode.END:\n\t\t\t\t\t\tcase DWZ.keyCode.LEFT:\n\t\t\t\t\t\tcase DWZ.keyCode.RIGHT:\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase DWZ.keyCode.ENTER:\n\t\t\t\t\t\t\t_close();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase DWZ.keyCode.DOWN:\n\t\t\t\t\t\t\tif (selectedIndex >= $items.length-1) selectedIndex = -1;\n\t\t\t\t\t\t\telse selectedIndex++;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase DWZ.keyCode.UP:\n\t\t\t\t\t\t\tif (selectedIndex < 0) selectedIndex = $items.length-1;\n\t\t\t\t\t\t\telse selectedIndex--;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t_show(event);\n\t\t\t\t\t}\n\t\t\t\t\t$items.removeClass(\"selected\");\n\t\t\t\t\tif (selectedIndex>=0) {\n\t\t\t\t\t\tvar $item = $items.eq(selectedIndex).addClass(\"selected\");\n\t\t\t\t\t\t_select($item);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\n\t\titemDetail: function(){\n\t\t\treturn this.each(function(){\n\t\t\t\tvar $table = $(this).css(\"clear\",\"both\"), $tbody = $table.find(\"tbody\");\n\t\t\t\tvar fields=[];\n\n\t\t\t\t$table.find(\"tr:first th[type]\").each(function(i){\n\t\t\t\t\tvar $th = $(this);\n\t\t\t\t\tvar field = {\n\t\t\t\t\t\ttype: $th.attr(\"type\") || \"text\",\n\t\t\t\t\t\tpatternDate: $th.attr(\"dateFmt\") || \"yyyy-MM-dd\",\n\t\t\t\t\t\tname: $th.attr(\"name\") || \"\",\n\t\t\t\t\t\tdefaultVal: $th.attr(\"defaultVal\") || \"\",\n\t\t\t\t\t\tsize: $th.attr(\"size\") || \"12\",\n\t\t\t\t\t\tenumUrl: $th.attr(\"enumUrl\") || \"\",\n\t\t\t\t\t\tlookupGroup: $th.attr(\"lookupGroup\") || \"\",\n\t\t\t\t\t\tlookupUrl: $th.attr(\"lookupUrl\") || \"\",\n\t\t\t\t\t\tlookupPk: $th.attr(\"lookupPk\") || \"id\",\n\t\t\t\t\t\tsuggestUrl: $th.attr(\"suggestUrl\"),\n\t\t\t\t\t\tsuggestFields: $th.attr(\"suggestFields\"),\n\t\t\t\t\t\tpostField: $th.attr(\"postField\") || \"\",\n\t\t\t\t\t\tfieldClass: $th.attr(\"fieldClass\") || \"\",\n\t\t\t\t\t\tfieldAttrs: $th.attr(\"fieldAttrs\") || \"\"\n\t\t\t\t\t};\n\t\t\t\t\tfields.push(field);\n\t\t\t\t});\n\n\t\t\t\t$tbody.find(\"a.btnDel\").click(function(){\n\t\t\t\t\tvar $btnDel = $(this);\n\n\t\t\t\t\tif ($btnDel.is(\"[href^=javascript:]\")){\n\t\t\t\t\t\t$btnDel.parents(\"tr:first\").remove();\n\t\t\t\t\t\tinitSuffix($tbody);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tfunction delDbData(){\n\t\t\t\t\t\t$.ajax({\n\t\t\t\t\t\t\ttype:'POST', dataType:\"json\", url:$btnDel.attr('href'), cache: false,\n\t\t\t\t\t\t\tsuccess: function(){\n\t\t\t\t\t\t\t\t$btnDel.parents(\"tr:first\").remove();\n\t\t\t\t\t\t\t\tinitSuffix($tbody);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\terror: DWZ.ajaxError\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif ($btnDel.attr(\"title\")){\n\t\t\t\t\t\talertMsg.confirm($btnDel.attr(\"title\"), {okCall: delDbData});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdelDbData();\n\t\t\t\t\t}\n\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\n\t\t\t\tvar addButTxt = $table.attr('addButton') || \"Add New\";\n\t\t\t\tif (addButTxt) {\n\t\t\t\t\tvar $addBut = $('<div class=\"button\"><div class=\"buttonContent\"><button type=\"button\">'+addButTxt+'</button></div></div>').insertBefore($table).find(\"button\");\n\t\t\t\t\tvar $rowNum = $('<input type=\"text\" name=\"dwz_rowNum\" class=\"textInput\" style=\"margin:2px;\" value=\"1\" size=\"2\"/>').insertBefore($table);\n\n\t\t\t\t\tvar trTm = \"\";\n\t\t\t\t\t$addBut.click(function(){\n\t\t\t\t\t\tif (! trTm) trTm = trHtml(fields);\n\t\t\t\t\t\tvar rowNum = 1;\n\t\t\t\t\t\ttry{rowNum = parseInt($rowNum.val())} catch(e){}\n\n\t\t\t\t\t\tfor (var i=0; i<rowNum; i++){\n\t\t\t\t\t\t\tvar $tr = $(trTm);\n\t\t\t\t\t\t\t$tr.appendTo($tbody).initUI().find(\"a.btnDel\").click(function(){\n\t\t\t\t\t\t\t\t$(this).parents(\"tr:first\").remove();\n\t\t\t\t\t\t\t\tinitSuffix($tbody);\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tinitSuffix($tbody);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t/**\n\t\t\t * 删除时重新初始化下标\n\t\t\t */\n\t\t\tfunction initSuffix($tbody) {\n\t\t\t\t$tbody.find('>tr').each(function(i){\n\t\t\t\t\t$(':input, a.btnLook, a.btnAttach', this).each(function(){\n\t\t\t\t\t\tvar $this = $(this), name = $this.attr('name'), val = $this.val();\n\n\t\t\t\t\t\tif (name) $this.attr('name', name.replaceSuffix(i));\n\n\t\t\t\t\t\tvar lookupGroup = $this.attr('lookupGroup');\n\t\t\t\t\t\tif (lookupGroup) {$this.attr('lookupGroup', lookupGroup.replaceSuffix(i));}\n\n\t\t\t\t\t\tvar suffix = $this.attr(\"suffix\");\n\t\t\t\t\t\tif (suffix) {$this.attr('suffix', suffix.replaceSuffix(i));}\n\n\t\t\t\t\t\tif (val && val.indexOf(\"#index#\") >= 0) $this.val(val.replace('#index#',i+1));\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfunction tdHtml(field){\n\t\t\t\tvar html = '', suffix = '';\n\n\t\t\t\tif (field.name.endsWith(\"[#index#]\")) suffix = \"[#index#]\";\n\t\t\t\telse if (field.name.endsWith(\"[]\")) suffix = \"[]\";\n\n\t\t\t\tvar suffixFrag = suffix ? ' suffix=\"' + suffix + '\" ' : '';\n\n\t\t\t\tvar attrFrag = '';\n\t\t\t\tif (field.fieldAttrs){\n\t\t\t\t\tvar attrs = DWZ.jsonEval(field.fieldAttrs);\n\t\t\t\t\tfor (var key in attrs) {\n\t\t\t\t\t\tattrFrag += key+'=\"'+attrs[key]+'\"';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tswitch(field.type){\n\t\t\t\t\tcase 'del':\n\t\t\t\t\t\thtml = '<a href=\"javascript:void(0)\" class=\"btnDel '+ field.fieldClass + '\">删除</a>';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'lookup':\n\t\t\t\t\t\tvar suggestFrag = '';\n\t\t\t\t\t\tif (field.suggestFields) {\n\t\t\t\t\t\t\tsuggestFrag = 'autocomplete=\"off\" lookupGroup=\"'+field.lookupGroup+'\"'+suffixFrag+' suggestUrl=\"'+field.suggestUrl+'\" suggestFields=\"'+field.suggestFields+'\"' + ' postField=\"'+field.postField+'\"';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\thtml = '<input type=\"hidden\" name=\"'+field.lookupGroup+'.'+field.lookupPk+suffix+'\"/>'\n\t\t\t\t\t\t\t+ '<input type=\"text\" name=\"'+field.name+'\"'+suggestFrag+' lookupPk=\"'+field.lookupPk+'\" size=\"'+field.size+'\" class=\"'+field.fieldClass+'\"/>'\n\t\t\t\t\t\t\t+ '<a class=\"btnLook\" href=\"'+field.lookupUrl+'\" lookupGroup=\"'+field.lookupGroup+'\" '+suggestFrag+' lookupPk=\"'+field.lookupPk+'\" title=\"查找带回\">查找带回</a>';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'attach':\n\t\t\t\t\t\thtml = '<input type=\"hidden\" name=\"'+field.lookupGroup+'.'+field.lookupPk+suffix+'\"/>'\n\t\t\t\t\t\t\t+ '<input type=\"text\" name=\"'+field.name+'\" size=\"'+field.size+'\" readonly=\"readonly\" class=\"'+field.fieldClass+'\"/>'\n\t\t\t\t\t\t\t+ '<a class=\"btnAttach\" href=\"'+field.lookupUrl+'\" lookupGroup=\"'+field.lookupGroup+'\" '+suffixFrag+' lookupPk=\"'+field.lookupPk+'\" width=\"560\" height=\"300\" title=\"查找带回\">查找带回</a>';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'enum':\n\t\t\t\t\t\t$.ajax({\n\t\t\t\t\t\t\ttype:\"POST\", dataType:\"html\", async: false,\n\t\t\t\t\t\t\turl:field.enumUrl,\n\t\t\t\t\t\t\tdata:{inputName:field.name},\n\t\t\t\t\t\t\tsuccess:function(response){\n\t\t\t\t\t\t\t\thtml = response;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'date':\n\t\t\t\t\t\thtml = '<input type=\"text\" name=\"'+field.name+'\" value=\"'+field.defaultVal+'\" class=\"date '+field.fieldClass+'\" dateFmt=\"'+field.patternDate+'\" size=\"'+field.size+'\"/>'\n\t\t\t\t\t\t\t+'<a class=\"inputDateButton\" href=\"javascript:void(0)\">选择</a>';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\thtml = '<input type=\"'+field.type+'\" name=\"'+field.name+'\" value=\"'+field.defaultVal+'\" size=\"'+field.size+'\" class=\"'+field.fieldClass+'\" '+attrFrag+'/>';\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn '<td>'+html+'</td>';\n\t\t\t}\n\t\t\tfunction trHtml(fields){\n\t\t\t\tvar html = '';\n\t\t\t\t$(fields).each(function(){\n\t\t\t\t\thtml += tdHtml(this);\n\t\t\t\t});\n\t\t\t\treturn '<tr class=\"unitBox\">'+html+'</tr>';\n\t\t\t}\n\t\t},\n\n\t\tselectedTodo: function(){\n\n\t\t\treturn this.each(function(){\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar selectedIds = $this.attr(\"rel\") || \"ids\";\n\t\t\t\tvar postType = $this.attr(\"postType\") || \"map\";\n\n\t\t\t\t$this.click(function(){\n\t\t\t\t\tvar targetType = $this.attr(\"targetType\");\n\t\t\t\t\tvar ids = $.getSelectedIds(selectedIds, targetType);\n\t\t\t\t\tif (!ids) {\n\t\t\t\t\t\talertMsg.error($this.attr(\"warn\") || DWZ.msg(\"alertSelectMsg\"));\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar _callback = $this.attr(\"callback\") || (targetType == \"dialog\" ? dialogAjaxDone : navTabAjaxDone);\n\t\t\t\t\tif (! $.isFunction(_callback)) _callback = eval('(' + _callback + ')');\n\n\t\t\t\t\tfunction _doPost(){\n\t\t\t\t\t\t$.ajax({\n\t\t\t\t\t\t\ttype:'POST', url:$this.attr('href'), dataType:'json', cache: false,\n\t\t\t\t\t\t\tdata: function(){\n\t\t\t\t\t\t\t\tif (postType == 'map'){\n\t\t\t\t\t\t\t\t\treturn $.map(ids.split(','), function(val, i) {\n\t\t\t\t\t\t\t\t\t\treturn {name: selectedIds, value: val};\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tvar _data = {};\n\t\t\t\t\t\t\t\t\t_data[selectedIds] = ids;\n\t\t\t\t\t\t\t\t\treturn _data;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}(),\n\t\t\t\t\t\t\tsuccess: _callback,\n\t\t\t\t\t\t\terror: DWZ.ajaxError\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tvar title = $this.attr(\"title\");\n\t\t\t\t\tif (title) {\n\t\t\t\t\t\talertMsg.confirm(title, {okCall: _doPost});\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_doPost();\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\n\t\t\t});\n\t\t},\n\n\t\tselectedBlank: function(){\n\n\t\t\treturn this.each(function(){\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar selectedIds = $this.attr(\"rel\") || \"ids\";\n\t\t\t\tvar postType = $this.attr(\"postType\") || \"map\";\n\n\t\t\t\t$this.click(function(){\n\t\t\t\t\tvar targetType = $this.attr(\"targetType\");\n\t\t\t\t\tvar ids = $.getSelectedIds(selectedIds, targetType);\n\t\t\t\t\tif (!ids) {\n\t\t\t\t\t\talertMsg.error($this.attr(\"warn\") || DWZ.msg(\"alertSelectMsg\"));\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar data = {};\n\t\t\t\t\tif (postType == 'map'){\n\t\t\t\t\t\tdata = $.map(ids.split(','), function(val, i) {\n\t\t\t\t\t\t\treturn {name: selectedIds, value: val};\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdata[0] = {name: selectedIds, value: ids};\n\t\t\t\t\t}\n\n\t\t\t\t\tvar html = '';\n\t\t\t\t\t$.each(data, function(index){\n\t\t\t\t\t\thtml += '<input type=\"hidden\" name=\"'+this.name+'\" value=\"'+this.value+'\">'\n\t\t\t\t\t});\n\t\t\t\t\thtml = '<form method=\"post\" target=\"_blank\" action=\"'+$this.attr('href')+'\">'+html+'</form>'\n\t\t\t\t\tvar $form = $(html).appendTo('body');\n\n\t\t\t\t\tvar title = $this.attr(\"title\");\n\t\t\t\t\tif (title) {\n\t\t\t\t\t\talertMsg.confirm(title, {okCall: function() {\n\t\t\t\t\t\t\t$form.submit();\n\t\t\t\t\t\t\t$form.remove();\n\t\t\t\t\t\t}});\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$form.submit();\n\t\t\t\t\t\t$form.remove();\n\t\t\t\t\t}\n\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\n\t\t\t});\n\t\t}\n\t});\n})(jQuery);\n\n"
  },
  {
    "path": "js/dwz.datepicker.js",
    "content": "/**\n * reference dwz.util.date.js\n * @author ZhangHuihua@msn.com\n * \n */\n(function($){\n\t$.setRegional(\"datepicker\", {\n\t\tdayNames:['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n\t\tmonthNames:['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']\n\t});\n\n\t$.fn.datepicker = function(opts){\n\t\tvar setting = {\n\t\t\tbox$:\"#calendar\",\n\t\t\tyear$:\"#calendar [name=year]\", month$:\"#calendar [name=month]\",\n\t\t\ttmInputs$:\"#calendar .time :text\", hour$:\"#calendar .time .hh\", minute$:\"#calendar .time .mm\", second$:\"#calendar .time .ss\",\n\t\t\ttmBox$:\"#calendar .tm\", tmUp$:\"#calendar .time .up\", tmDown$:\"#calendar .time .down\",\n\t\t\tclose$:\"#calendar .close\", calIcon$:\"a.inputDateButton\",\n\t\t\tmain$:\"#calendar .main\", days$:\"#calendar .days\", dayNames$:\"#calendar .dayNames\",\n\t\t\tclearBut$:\"#calendar .clearBut\", okBut$:\"#calendar .okBut\"\n\t\t};\n\n\t\tfunction changeTmMenu(sltClass){\n\t\t\tvar $tm = $(setting.tmBox$);\n\t\t\t$tm.removeClass(\"hh\").removeClass(\"mm\").removeClass(\"ss\");\n\t\t\tif (sltClass) {\n\t\t\t\t$tm.addClass(sltClass);\n\t\t\t\t$(setting.tmInputs$).removeClass(\"slt\").filter(\".\" + sltClass).addClass(\"slt\");\n\t\t\t}\n\t\t}\n\t\tfunction clickTmMenu($input, type){\n\t\t\t$(setting.tmBox$).find(\".\"+type+\" li\").each(function(){\n\t\t\t\tvar $li = $(this);\n\t\t\t\t$li.click(function(){\n\t\t\t\t\t$input.val($li.text());\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\tfunction keydownInt(e){\n\t\t\tif (!((e.keyCode >= 48 && e.keyCode <= 57) || (e.keyCode == DWZ.keyCode.DELETE || e.keyCode == DWZ.keyCode.BACKSPACE))) { return false; }\n\t\t}\n\t\tfunction changeTm($input, type){\n\t\t\tvar ivalue = parseInt($input.val()), istart = parseInt($input.attr(\"start\")) || 0, iend = parseInt($input.attr(\"end\"));\n\t\t\tvar istep = parseInt($input.attr('step') || 1);\n\t\t\tif (type == 1) {\n\t\t\t\tif (ivalue <= iend-istep){$input.val(ivalue + istep);}\n\t\t\t} else if (type == -1){\n\t\t\t\tif (ivalue >= istart+istep){$input.val(ivalue - istep);}\n\t\t\t} else if (ivalue > iend) {\n\t\t\t\t$input.val(iend);\n\t\t\t} else if (ivalue < istart) {\n\t\t\t\t$input.val(istart);\n\t\t\t}\n\t\t}\n\t\t\t\t\n\t\treturn this.each(function(){\n\t\t\tvar $this = $(this);\n\t\t\tvar dp = new Datepicker($this.val(), opts);\n\t\t\t\n\t\t\tfunction generateCalendar(dp){\n\t\t\t\tvar dw = dp.getDateWrap();\n\t\t\t\tvar minDate = dp.getMinDate();\n\t\t\t\tvar maxDate = dp.getMaxDate();\n\n\t\t\t\tvar monthStart = new Date(dw.year,dw.month-1,1);\n\t\t\t\tvar startDay = monthStart.getDay();\n\t\t\t\tvar dayStr=\"\";\n\t\t\t\tif (startDay > 0){ //日历前面补齐\n\t\t\t\t\tmonthStart.setMonth(monthStart.getMonth() - 1);\n\t\t\t\t\tvar prevDateWrap = dp.getDateWrap(monthStart);\n\t\t\t\t\tfor(var t=prevDateWrap.days-startDay+1;t<=prevDateWrap.days;t++) {\n\t\t\t\t\t\tvar _date = new Date(dw.year,dw.month-2,t);\n\t\t\t\t\t\tvar _ctrClass = (_date >= minDate && _date <= maxDate) ? '' : 'disabled';\n\t\t\t\t\t\tdayStr+='<dd class=\"other '+_ctrClass+'\" chMonth=\"-1\" day=\"' + t + '\">'+t+'</dd>';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor(var t=1;t<=dw.days;t++){\n\t\t\t\t\tvar _date = new Date(dw.year,dw.month-1,t);\n\t\t\t\t\tvar _ctrClass = (_date >= minDate && _date <= maxDate) ? '' : 'disabled';\n\t\t\t\t\tif(t==dw.day){\n\t\t\t\t\t\tdayStr+='<dd class=\"slt '+_ctrClass+'\" day=\"' + t + '\">'+t+'</dd>';\n\t\t\t\t\t}else{\n\t\t\t\t\t\tdayStr+='<dd class=\"'+_ctrClass+'\" day=\"' + t + '\">'+t+'</dd>';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor(var t=1;t<=42-startDay-dw.days;t++){ // 日历后面补齐\n\t\t\t\t\tvar _date = new Date(dw.year,dw.month,t);\n\t\t\t\t\tvar _ctrClass = (_date >= minDate && _date <= maxDate) ? '' : 'disabled';\n\t\t\t\t\tdayStr+='<dd class=\"other '+_ctrClass+'\" chMonth=\"1\" day=\"' + t + '\">'+t+'</dd>';\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar $days = $(setting.days$).html(dayStr).find(\"dd\");\n\t\t\t\t$days.not('.disabled').click(function(){\n\t\t\t\t\tvar $day = $(this);\n\t\t\t\t\t\n\t\t\t\t\tif (!dp.hasTime()) {\n\t\t\t\t\t\t$this.val(dp.formatDate(dp.changeDay($day.attr(\"day\"), $day.attr(\"chMonth\"))));\n\t\t\t\t\t\tcloseCalendar(); \n\t\t\t\t\t} else {\n\t\t\t\t\t\t$days.removeClass(\"slt\");\n\t\t\t\t\t\t$day.addClass(\"slt\");\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (!dp.hasDate()) $(setting.main$).addClass('nodate'); // 仅时间，无日期\n\t\t\t\t\n\t\t\t\tif (dp.hasTime()) {\n\t\t\t\t\t$(\"#calendar .time\").show();\n\n\t\t\t\t\tvar iHour = dw.hour, iMinute = dw.minute, iSecond = dw.second;\n\n\t\t\t\t\tif (dp.opts.defaultTime && !$this.val()) {\n\t\t\t\t\t\tvar timeStr = dp.opts.defaultTime.split(':');\n\t\t\t\t\t\tiHour = parseInt(timeStr[0]);\n\t\t\t\t\t\tiMinute = parseInt(timeStr[1]);\n\t\t\t\t\t\tiSecond = parseInt(timeStr[2]);\n\t\t\t\t\t}\n\t\t\t\t\tiMinute = parseInt(iMinute / dp.opts.mmStep) * dp.opts.mmStep;\n\t\t\t\t\tiSecond = dp.hasSecond() ? iSecond : 0;\n\n\t\t\t\t\tvar $hour = $(setting.hour$).val(iHour).focus(function(){\n\t\t\t\t\t\tchangeTmMenu(\"hh\");\n\t\t\t\t\t});\n\t\t\t\t\tvar $minute = $(setting.minute$).val(iMinute).attr('step',dp.opts.mmStep).focus(function(){\n\t\t\t\t\t\tchangeTmMenu(\"mm\");\n\t\t\t\t\t});\n\t\t\t\t\tvar $second = $(setting.second$).val(iSecond).attr('step',dp.opts.ssStep).focus(function(){\n\t\t\t\t\t\tchangeTmMenu(\"ss\");\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\t$hour.add($minute).add($second).click(function(){return false});\n\t\t\t\t\t\n\t\t\t\t\tclickTmMenu($hour,\"hh\");\n\t\t\t\t\tclickTmMenu($minute,\"mm\");\n\t\t\t\t\tclickTmMenu($second,\"ss\");\n\t\t\t\t\t$(setting.box$).click(function(){\n\t\t\t\t\t\tchangeTmMenu();\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tvar $inputs = $(setting.tmInputs$);\n\t\t\t\t\t$inputs.keydown(keydownInt).each(function(){\n\t\t\t\t\t\tvar $input = $(this);\n\t\t\t\t\t\t$input.keyup(function(){\n\t\t\t\t\t\t\tchangeTm($input, 0);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t\t$(setting.tmUp$).click(function(){\n\t\t\t\t\t\t$inputs.filter(\".slt\").each(function(){\n\t\t\t\t\t\t\tchangeTm($(this), 1);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t\t$(setting.tmDown$).click(function(){\n\t\t\t\t\t\t$inputs.filter(\".slt\").each(function(){\n\t\t\t\t\t\t\tchangeTm($(this), -1);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tif (!dp.hasHour()) $hour.attr(\"disabled\",true);\n\t\t\t\t\tif (!dp.hasMinute()) $minute.attr(\"disabled\",true);\n\t\t\t\t\tif (!dp.hasSecond()) $second.attr(\"disabled\",true);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tfunction closeCalendar() {\n\t\t\t\t$(setting.box$).remove();\n\t\t\t\t$(document).unbind(\"click\", closeCalendar);\n\t\t\t}\n\n\t\t\t$this.click(function(event){\n\t\t\t\tcloseCalendar();\n\t\t\t\tvar dp = new Datepicker($this.val(), opts);\n\t\t\t\tvar offset = $this.offset();\n\t\t\t\tvar iTop = offset.top+this.offsetHeight;\n\t\t\t\t$(DWZ.frag['calendarFrag']).appendTo(\"body\").css({\n\t\t\t\t\tleft:offset.left+'px',\n\t\t\t\t\ttop:iTop+'px'\n\t\t\t\t}).show().click(function(event){\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\t($.fn.bgiframe && $(setting.box$).bgiframe());\n\t\t\t\t\n\t\t\t\tvar dayNames = \"\";\n\t\t\t\t$.each($.regional.datepicker.dayNames, function(i,v){\n\t\t\t\t\tdayNames += \"<dt>\" + v + \"</dt>\"\n\t\t\t\t});\n\t\t\t\t$(setting.dayNames$).html(dayNames);\n\t\t\t\t\n\t\t\t\tvar dw = dp.getDateWrap();\n\t\t\t\tvar $year = $(setting.year$);\n\t\t\t\tvar yearstart = dp.getMinDate().getFullYear();\n\t\t\t\tvar yearend = dp.getMaxDate().getFullYear();\n\t\t\t\tfor(y=yearstart; y<=yearend; y++){\n\t\t\t\t\t$year.append('<option value=\"'+ y +'\"'+ (dw.year==y ? 'selected=\"selected\"' : '') +'>'+ y +'</option>');\n\t\t\t\t}\n\t\t\t\tvar $month = $(setting.month$);\n\t\t\t\t$.each($.regional.datepicker.monthNames, function(i,v){\n\t\t\t\t\tvar m = i+1;\n\t\t\t\t\t$month.append('<option value=\"'+ m +'\"'+ (dw.month==m ? 'selected=\"selected\"' : '') +'>'+ v +'</option>');\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\t// generate calendar\n\t\t\t\tgenerateCalendar(dp);\n\t\t\t\t$year.add($month).change(function(){\n\t\t\t\t\tdp.changeDate($year.val(), $month.val());\n\t\t\t\t\tgenerateCalendar(dp);\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\t// fix top\n\t\t\t\tvar iBoxH = $(setting.box$).outerHeight(true);\n\t\t\t\tif (iTop > iBoxH && iTop > $(window).height()-iBoxH) {\n\t\t\t\t\t$(setting.box$).css(\"top\", offset.top - iBoxH);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t$(setting.close$).click(function(){\n\t\t\t\t\tcloseCalendar();\n\t\t\t\t});\n\t\t\t\t$(setting.clearBut$).click(function(){\n\t\t\t\t\t$this.val(\"\");\n\t\t\t\t\tcloseCalendar();\n\t\t\t\t});\n\t\t\t\t$(setting.okBut$).click(function(){\n\t\t\t\t\tvar $dd = $(setting.days$).find(\"dd.slt\");\n\t\t\t\t\t\n\t\t\t\t\tif ($dd.hasClass(\"disabled\")) return false;\n\t\t\t\t\t\n\t\t\t\t\tvar date = dp.changeDay($dd.attr(\"day\"), $dd.attr(\"chMonth\"));\n\t\t\t\t\t\n\t\t\t\t\tif (dp.hasTime()) {\n\t\t\t\t\t \tdate.setHours(parseInt($(setting.hour$).val()));\n\t\t\t\t\t\tdate.setMinutes(parseInt($(setting.minute$).val()));\n\t\t\t\t\t\tdate.setSeconds(parseInt($(setting.second$).val()));\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t$this.val(dp.formatDate(date));\n\t\t\t\t\tcloseCalendar();\n\t\t\t\t});\n\t\t\t\t$(document).bind(\"click\", closeCalendar);\n\t\t\t\treturn false;\n\t\t\t});\n\t\t\t\n\t\t\t$this.parent().find(setting.calIcon$).click(function(){\n\t\t\t\t$this.trigger(\"click\");\n\t\t\t\treturn false;\n\t\t\t});\n\t\t});\n\t\t\n\t}\n\n\tvar Datepicker = function(sDate, opts) {\n\t\tthis.opts = $.extend({\n\t\t\tpattern:'yyyy-MM-dd',\n\t\t\tminDate:\"1900-01-01\",\n\t\t\tmaxDate:\"2099-12-31\",\n\t\t\tmmStep:1,\n\t\t\tssStep:1\n\t\t}, opts);\n\t\t\n\t\t//动态minDate、maxDate\n\t\tvar now = new Date();\n\t\tthis.opts.minDate = now.formatDateTm(this.opts.minDate);\n\t\tthis.opts.maxDate = now.formatDateTm(this.opts.maxDate);\n\t\t\n\t\tthis.sDate = sDate.trim();\n\t}\n\t\n\t$.extend(Datepicker.prototype, {\n\t\tget: function(name) {\n\t\t\treturn this.opts[name];\n\t\t},\n\t\t_getDays: function (y,m){//获取某年某月的天数\n\n\t\t\treturn m==2?(y%4||!(y%100)&&y%400?28:29):(/4|6|9|11/.test(m)?30:31);\n\t\t},\n\n\t\t_minMaxDate: function(sDate){\n\t\t\tvar _count = sDate.split('-').length -1;\n\t\t\tvar _format = 'y-M-d';\n\t\t\tif (_count == 1) _format = 'y-M';\n\t\t\telse if (_count == 0) _format = 'y';\n\t\t\t\n\t\t\treturn sDate.parseDate(_format);\n\t\t},\n\t\tgetMinDate: function(){\n\t\t\treturn this._minMaxDate(this.opts.minDate);\n\t\t},\n\t\tgetMaxDate: function(){\n\t\t\tvar _sDate = this.opts.maxDate;\n\t\t\tvar _count = _sDate.split('-').length -1;\n\t\t\tvar _date = this._minMaxDate(_sDate);\n\t\t\t\n\t\t\tif (_count < 2) { //format:y-M、y\n\n\t\t\t\tvar _day = this._getDays(_date.getFullYear(), _date.getMonth()+1);\n\t\t\t\t_date.setDate(_day);\n\t\t\t\tif (_count == 0) {//format:y\n\n\t\t\t\t\t_date.setMonth(11);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn _date;\n\t\t},\n\t\tgetDateWrap: function(date){ //得到年,月,日\n\n\t\t\tif (!date) date = this.parseDate(this.sDate) || new Date();\n\t\t\tvar y = date.getFullYear();\n\t\t\tvar m = date.getMonth()+1;\n\t\t\tvar days = this._getDays(y,m);\n\t\t\treturn {\n\t\t\t\tyear:y, month:m, day:date.getDate(),\n\t\t\t\thour:date.getHours(),minute:date.getMinutes(),second:date.getSeconds(),\n\t\t\t\tdays: days, date:date\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * @param {year:2010, month:05, day:24}\n\t\t */\n\t\tchangeDate: function(y, m, d){\n\t\t\tvar date = new Date(y, m - 1, d || 1);\n\t\t\tthis.sDate = this.formatDate(date);\n\t\t\treturn date;\n\t\t},\n\t\tchangeDay: function(day, chMonth){\n\t\t\tif (!chMonth) chMonth = 0;\n\t\t\tvar dw = this.getDateWrap();\n\t\t\treturn this.changeDate(dw.year, dw.month+parseInt(chMonth), day);\n\t\t},\n\t\tparseDate: function(sDate){\n\t\t\tif (!sDate) return null;\n\t\t\treturn sDate.parseDate(this.opts.pattern);\n\t\t},\n\t\tformatDate: function(date){\n\t\t\treturn date.formatDate(this.opts.pattern);\n\t\t},\n\t\thasHour: function() {\n\t\t\treturn this.opts.pattern.indexOf(\"H\") != -1;\n\t\t},\n\t\thasMinute: function() {\n\t\t\treturn this.opts.pattern.indexOf(\"m\") != -1;\n\t\t},\n\t\thasSecond: function() {\n\t\t\treturn this.opts.pattern.indexOf(\"s\") != -1;\n\t\t},\n\t\thasTime: function() {\n\t\t\treturn this.hasHour() || this.hasMinute() || this.hasSecond();\n\t\t},\n\t\thasDate: function() {\n\t\t\tvar _dateKeys = ['y','M','d','E'];\n\t\t\tfor (var i=0; i<_dateKeys.length; i++){\n\t\t\t\tif (this.opts.pattern.indexOf(_dateKeys[i]) != -1) return true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\t});\n})(jQuery);\n "
  },
  {
    "path": "js/dwz.dialog.js",
    "content": "/**\n * @author Roger Wu\n * reference:dwz.drag.js, dwz.dialogDrag.js, dwz.resize.js, dwz.taskBar.js\n */\n(function($){\n\t$.pdialog = {\n\t\t_op:{height:300, width:580, minH:40, minW:50, total:20, max:false, mask:false, resizable:true, drawable:true, maxable:true,minable:true,fresh:true},\n\t\t_current:null,\n\t\t_zIndex:42,\n\t\tgetCurrent:function(){\n\t\t\treturn this._current;\n\t\t},\n\t\treload:function(url, options){\n\t\t\tvar op = $.extend({data:{}, dialogId:\"\", callback:null}, options);\n\t\t\tvar dialog = (op.dialogId && $(\"body\").data(op.dialogId)) || this._current;\n\t\t\tif (dialog){\n\t\t\t\tvar jDContent = dialog.find(\".dialogContent\");\n\t\t\t\tjDContent.ajaxUrl({\n\t\t\t\t\ttype:\"POST\", url:url, data:op.data, callback:function(response){\n\t\t\t\t\t\tjDContent.find(\"[layoutH]\").layoutH(jDContent);\n\t\t\t\t\t\t$(\".pageContent\", dialog).width($(dialog).width()-14);\n\t\t\t\t\t\t$(\":button.close\", dialog).click(function(){\n\t\t\t\t\t\t\t$.pdialog.close(dialog);\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif ($.isFunction(op.callback)) op.callback(response);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t//打开一个层\n\t\topen:function(url, dlgid, title, options) {\n\t\t\tvar op = $.extend({},$.pdialog._op, options);\n\t\t\tvar dialog = $(\"body\").data(dlgid);\n\t\t\t//重复打开一个层\n\t\t\tif(dialog) {\n\t\t\t\tif(dialog.is(\":hidden\")) {\n\t\t\t\t\tdialog.show();\n\t\t\t\t}\n\t\t\t\tif(op.fresh || url != $(dialog).data(\"url\")){\n\t\t\t\t\tdialog.data(\"url\",url);\n\t\t\t\t\tdialog.find(\".dialogHeader\").find(\"h1\").html(title);\n\t\t\t\t\tthis.switchDialog(dialog);\n\t\t\t\t\tvar jDContent = dialog.find(\".dialogContent\");\n\n\t\t\t\t\tjDContent.ajaxUrl({\n\t\t\t\t\t\ttype:options.type||'GET', url:url, data:options.data || {}, callback:function(){\n\t\t\t\t\t\t\tjDContent.find(\"[layoutH]\").layoutH(jDContent);\n\t\t\t\t\t\t\t$(\".pageContent\", dialog).width($(dialog).width()-14);\n\t\t\t\t\t\t\t$(\"button.close\", dialog).click(function(){\n\t\t\t\t\t\t\t\t$.pdialog.close(dialog);\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t} else { //打开一个全新的层\n\n\t\t\t\t$(\"body\").append(DWZ.frag[\"dialogFrag\"]);\n\t\t\t\tdialog = $(\">.dialog:last-child\", \"body\");\n\t\t\t\tdialog.data(\"id\",dlgid);\n\t\t\t\tdialog.data(\"url\",url);\n\t\t\t\tif(options.close) dialog.data(\"close\",options.close);\n\t\t\t\tif(options.param) dialog.data(\"param\",options.param);\n\t\t\t\t($.fn.bgiframe && dialog.bgiframe());\n\n\t\t\t\tdialog.find(\".dialogHeader\").find(\"h1\").html(title);\n\t\t\t\t$(dialog).css(\"zIndex\", ($.pdialog._zIndex+=2));\n\t\t\t\t$(\"div.shadow\").css(\"zIndex\", $.pdialog._zIndex - 3).show();\n\t\t\t\t$.pdialog._init(dialog, options);\n\t\t\t\t$(dialog).click(function(){\n\t\t\t\t\t$.pdialog.switchDialog(dialog);\n\t\t\t\t});\n\n\t\t\t\tif(op.resizable)\n\t\t\t\t\tdialog.jresize();\n\t\t\t\tif(op.drawable)\n\t\t\t\t \tdialog.dialogDrag();\n\t\t\t\t$(\"a.close\", dialog).click(function(event){\n\t\t\t\t\t$.pdialog.close(dialog);\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\t\t\t\tif (op.maxable) {\n\t\t\t\t\t$(\"a.maximize\", dialog).show().click(function(event){\n\t\t\t\t\t\t$.pdialog.switchDialog(dialog);\n\t\t\t\t\t\t$.pdialog.maxsize(dialog);\n\t\t\t\t\t\tdialog.jresize(\"destroy\").dialogDrag(\"destroy\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\t$(\"a.maximize\", dialog).hide();\n\t\t\t\t}\n\t\t\t\t$(\"a.restore\", dialog).click(function(event){\n\t\t\t\t\t$.pdialog.restore(dialog);\n\t\t\t\t\tdialog.jresize().dialogDrag();\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\t\t\t\tif (op.minable) {\n\t\t\t\t\t$(\"a.minimize\", dialog).show().click(function(event){\n\t\t\t\t\t\t$.pdialog.minimize(dialog);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\t$(\"a.minimize\", dialog).hide();\n\t\t\t\t}\n\t\t\t\t$(\"div.dialogHeader a\", dialog).mousedown(function(){\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\t\t\t\t$(\"div.dialogHeader\", dialog).dblclick(function(){\n\t\t\t\t\tif($(\"a.restore\",dialog).is(\":hidden\"))\n\t\t\t\t\t\t$(\"a.maximize\",dialog).trigger(\"click\");\n\t\t\t\t\telse\n\t\t\t\t\t\t$(\"a.restore\",dialog).trigger(\"click\");\n\t\t\t\t});\n\t\t\t\tif(op.max) {\n//\t\t\t\t\t$.pdialog.switchDialog(dialog);\n\t\t\t\t\t$.pdialog.maxsize(dialog);\n\t\t\t\t\tdialog.jresize(\"destroy\").dialogDrag(\"destroy\");\n\t\t\t\t}\n\t\t\t\t$(\"body\").data(dlgid, dialog);\n\t\t\t\t$.pdialog._current = dialog;\n\t\t\t\t$.pdialog.attachShadow(dialog);\n\t\t\t\t//load data\n\t\t\t\tvar jDContent = $(\".dialogContent\",dialog);\n\t\t\t\tjDContent.ajaxUrl({\n\t\t\t\t\ttype:options.type||'GET', url:url, data:options.data || {}, callback:function(){\n\t\t\t\t\t\tjDContent.find(\"[layoutH]\").layoutH(jDContent);\n\t\t\t\t\t\t$(\".pageContent\", dialog).width($(dialog).width()-14);\n\t\t\t\t\t\t$(\"button.close\", dialog).click(function(){\n\t\t\t\t\t\t\t$.pdialog.close(dialog);\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (op.mask) {\n\t\t\t\t$(dialog).css(\"zIndex\", 1000);\n\t\t\t\t$(\"a.minimize\",dialog).hide();\n\t\t\t\t$(dialog).data(\"mask\", true);\n\t\t\t\t$(\"#dialogBackground\").show();\n\t\t\t}else {\n\t\t\t\t//add a task to task bar\n\t\t\t\tif(op.minable) $.taskBar.addDialog(dlgid,title);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * 切换当前层\n\t\t * @param {Object} dialog\n\t\t */\n\t\tswitchDialog:function(dialog) {\n\t\t\tvar index = $(dialog).css(\"zIndex\");\n\t\t\t$.pdialog.attachShadow(dialog);\n\t\t\tif($.pdialog._current) {\n\t\t\t\tvar cindex = $($.pdialog._current).css(\"zIndex\");\n\t\t\t\t$($.pdialog._current).css(\"zIndex\", index);\n\t\t\t\t$(dialog).css(\"zIndex\", cindex);\n\t\t\t\t$(\"div.shadow\").css(\"zIndex\", cindex - 1);\n\t\t\t\t$.pdialog._current = dialog;\n\t\t\t}\n\t\t\t$.taskBar.switchTask(dialog.data(\"id\"));\n\t\t},\n\t\t/**\n\t\t * 给当前层附上阴隐层\n\t\t * @param {Object} dialog\n\t\t */\n\t\tattachShadow:function(dialog) {\n\t\t\tvar shadow = $(\"div.shadow\");\n\t\t\tif(shadow.is(\":hidden\")) shadow.show();\n\t\t\tshadow.css({\n\t\t\t\ttop: parseInt($(dialog)[0].style.top) - 2,\n\t\t\t\tleft: parseInt($(dialog)[0].style.left) - 4,\n\t\t\t\theight: parseInt($(dialog).height()) + 8,\n\t\t\t\twidth: parseInt($(dialog).width()) + 8,\n\t\t\t\tzIndex:parseInt($(dialog).css(\"zIndex\")) - 1\n\t\t\t});\n\t\t\t$(\".shadow_c\", shadow).children().addBack().each(function(){\n\t\t\t\t$(this).css(\"height\", $(dialog).outerHeight() - 4);\n\t\t\t});\n\t\t},\n\t\t_init:function(dialog, options) {\n\t\t\tvar op = $.extend({}, this._op, options);\n\t\t\tvar height = op.height>op.minH?op.height:op.minH;\n\t\t\tvar width = op.width>op.minW?op.width:op.minW;\n\t\t\tif(isNaN(dialog.height()) || dialog.height() < height){\n\t\t\t\t$(dialog).height(height+\"px\");\n\t\t\t\t$(\".dialogContent\",dialog).height(height - $(\".dialogHeader\", dialog).outerHeight() - $(\".dialogFooter\", dialog).outerHeight() - 6);\n\t\t\t}\n\t\t\tif(isNaN(dialog.css(\"width\")) || dialog.width() < width) {\n\t\t\t\t$(dialog).width(width+\"px\");\n\t\t\t}\n\n\t\t\tvar iTop = ($(window).height()-dialog.height())/2;\n\t\t\tdialog.css({\n\t\t\t\tleft: ($(window).width()-dialog.width())/2,\n\t\t\t\ttop: iTop > 0 ? iTop : 0\n\t\t\t});\n\t\t},\n\t\t/**\n\t\t * 初始化半透明层\n\t\t * @param {Object} resizable\n\t\t * @param {Object} dialog\n\t\t * @param {Object} target\n\t\t */\n\t\tinitResize:function(resizable, dialog,target) {\n\t\t\t$(\"body\").css(\"cursor\", target + \"-resize\");\n\t\t\tresizable.css({\n\t\t\t\ttop: $(dialog).css(\"top\"),\n\t\t\t\tleft: $(dialog).css(\"left\"),\n\t\t\t\theight:$(dialog).css(\"height\"),\n\t\t\t\twidth:$(dialog).css(\"width\")\n\t\t\t});\n\t\t\tresizable.show();\n\t\t},\n\t\t/**\n\t\t * 改变阴隐层\n\t\t * @param {Object} target\n\t\t * @param {Object} options\n\t\t */\n\t\trepaint:function(target,options){\n\t\t\tvar shadow = $(\"div.shadow\");\n\t\t\tif(target != \"w\" && target != \"e\") {\n\t\t\t\tshadow.css(\"height\", shadow.outerHeight() + options.tmove);\n\t\t\t\t$(\".shadow_c\", shadow).children().addBack().each(function(){\n\t\t\t\t\t$(this).css(\"height\", $(this).outerHeight() + options.tmove);\n\t\t\t\t});\n\t\t\t}\n\t\t\tif(target == \"n\" || target ==\"nw\" || target == \"ne\") {\n\t\t\t\tshadow.css(\"top\", options.otop - 2);\n\t\t\t}\n\t\t\tif(options.owidth && (target != \"n\" || target != \"s\")) {\n\t\t\t\tshadow.css(\"width\", options.owidth + 8);\n\t\t\t}\n\t\t\tif(target.indexOf(\"w\") >= 0) {\n\t\t\t\tshadow.css(\"left\", options.oleft - 4);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * 改变左右拖动层的高度\n\t\t * @param {Object} target\n\t\t * @param {Object} tmove\n\t\t * @param {Object} dialog\n\t\t */\n\t\tresizeTool:function(target, tmove, dialog) {\n\t\t\t$(\"div[class^='resizable']\", dialog).filter(function(){\n\t\t\t\treturn $(this).attr(\"tar\") == 'w' || $(this).attr(\"tar\") == 'e';\n\t\t\t}).each(function(){\n\t\t\t\t$(this).css(\"height\", $(this).outerHeight() + tmove);\n\t\t\t});\n\t\t},\n\t\t/**\n\t\t * 改变原始层的大小\n\t\t * @param {Object} obj\n\t\t * @param {Object} dialog\n\t\t * @param {Object} target\n\t\t */\n\t\tresizeDialog:function(obj, dialog, target) {\n\t\t\tvar oleft = parseInt(obj.style.left);\n\t\t\tvar otop = parseInt(obj.style.top);\n\t\t\tvar height = parseInt(obj.style.height);\n\t\t\tvar width = parseInt(obj.style.width);\n\t\t\tif(target == \"n\" || target == \"nw\") {\n\t\t\t\ttmove = parseInt($(dialog).css(\"top\")) - otop;\n\t\t\t} else {\n\t\t\t\ttmove = height - parseInt($(dialog).css(\"height\"));\n\t\t\t}\n\t\t\t$(dialog).css({left:oleft,width:width,top:otop,height:height});\n\t\t\t$(\".dialogContent\", dialog).css(\"width\", (width-12) + \"px\");\n\t\t\t$(\".pageContent\", dialog).css(\"width\", (width-14) + \"px\");\n\t\t\tif (target != \"w\" && target != \"e\") {\n\t\t\t\tvar content = $(\".dialogContent\", dialog);\n\t\t\t\tcontent.css({height:height - $(\".dialogHeader\", dialog).outerHeight() - $(\".dialogFooter\", dialog).outerHeight() - 6});\n\t\t\t\tcontent.find(\"[layoutH]\").layoutH(content);\n\t\t\t\t$.pdialog.resizeTool(target, tmove, dialog);\n\t\t\t}\n\t\t\t$.pdialog.repaint(target, {oleft:oleft,otop: otop,tmove: tmove,owidth:width});\n\n\t\t\t$(window).trigger(DWZ.eventType.resizeGrid);\n\t\t},\n\t\tclose:function(dialog) {\n\t\t\tif(typeof dialog == 'string') dialog = $(\"body\").data(dialog);\n\t\t\tif (!dialog) return;\n\t\t\tvar close = dialog.data(\"close\");\n\t\t\tvar go = true;\n\t\t\tif(close && $.isFunction(close)) {\n\t\t\t\tvar param = dialog.data(\"param\");\n\t\t\t\tif(param && param != \"\"){\n\t\t\t\t\tparam = DWZ.jsonEval(param);\n\t\t\t\t\tgo = close(param);\n\t\t\t\t} else {\n\t\t\t\t\tgo = close();\n\t\t\t\t}\n\t\t\t\tif(!go) return;\n\t\t\t}\n\n\t\t\t$(dialog).hide();\n\t\t\t$(\"div.shadow\").hide();\n\t\t\tif($(dialog).data(\"mask\")){\n\t\t\t\t$(\"#dialogBackground\").hide();\n\t\t\t} else{\n\t\t\t\tif ($(dialog).data(\"id\")) $.taskBar.closeDialog($(dialog).data(\"id\"));\n\t\t\t}\n\t\t\t$(\"body\").removeData($(dialog).data(\"id\"));\n\t\t\t$(dialog).trigger(DWZ.eventType.pageClear).remove();\n\t\t},\n\t\tcloseCurrent:function(){\n\t\t\tthis.close($.pdialog._current);\n\t\t},\n\t\tcheckCloseCurrent:function(json){\n\t\t\tif (!json) return;\n\t\t\tif (json[DWZ.keys.statusCode] == DWZ.statusCode.timeout\n\t\t\t\t|| (json[DWZ.keys.statusCode] == DWZ.statusCode.error && \"closeCurrentDialog\" == json.callbackType) ) {\n\t\t\t\tthis.closeCurrent();\n\t\t\t}\n\t\t},\n\t\tmaxsize:function(dialog) {\n\t\t\t$(dialog).data(\"original\",{\n\t\t\t\ttop:$(dialog).css(\"top\"),\n\t\t\t\tleft:$(dialog).css(\"left\"),\n\t\t\t\twidth:$(dialog).css(\"width\"),\n\t\t\t\theight:$(dialog).css(\"height\")\n\t\t\t});\n\t\t\t$(\"a.maximize\",dialog).hide();\n\t\t\t$(\"a.restore\",dialog).show();\n\t\t\tvar iContentW = $(window).width();\n\t\t\tvar iContentH = $(window).height() - 34;\n\t\t\t$(dialog).css({top:\"0px\",left:\"0px\",width:iContentW+\"px\",height:iContentH+\"px\"});\n\t\t\t$.pdialog._resizeContent(dialog,iContentW,iContentH);\n\t\t},\n\t\trestore:function(dialog) {\n\t\t\tvar original = $(dialog).data(\"original\");\n\t\t\tvar dwidth = parseInt(original.width);\n\t\t\tvar dheight = parseInt(original.height);\n\t\t\t$(dialog).css({\n\t\t\t\ttop:original.top,\n\t\t\t\tleft:original.left,\n\t\t\t\twidth:dwidth,\n\t\t\t\theight:dheight\n\t\t\t});\n\t\t\t$.pdialog._resizeContent(dialog,dwidth,dheight);\n\t\t\t$(\"a.maximize\",dialog).show();\n\t\t\t$(\"a.restore\",dialog).hide();\n\t\t\t$.pdialog.attachShadow(dialog);\n\t\t},\n\t\tminimize:function(dialog){\n\t\t\t$(dialog).hide();\n\t\t\t$(\"div.shadow\").hide();\n\t\t\tvar task = $.taskBar.getTask($(dialog).data(\"id\"));\n\t\t\t$(\".resizable\").css({\n\t\t\t\ttop: $(dialog).css(\"top\"),\n\t\t\t\tleft: $(dialog).css(\"left\"),\n\t\t\t\theight:$(dialog).css(\"height\"),\n\t\t\t\twidth:$(dialog).css(\"width\")\n\t\t\t}).show().animate({top:$(window).height()-60,left:task.position().left,width:task.outerWidth(),height:task.outerHeight()},250,function(){\n\t\t\t\t$(this).hide();\n\t\t\t\t$.taskBar.inactive($(dialog).data(\"id\"));\n\t\t\t});\n\t\t},\n\t\t_resizeContent:function(dialog,width,height) {\n\t\t\tvar content = $(\".dialogContent\", dialog);\n\t\t\tcontent.css({width:(width-12) + \"px\",height:height - $(\".dialogHeader\", dialog).outerHeight() - $(\".dialogFooter\", dialog).outerHeight() - 6});\n\t\t\tcontent.find(\"[layoutH]\").layoutH(content);\n\t\t\t$(\".pageContent\", dialog).css(\"width\", (width-14) + \"px\");\n\n\t\t\t$(window).trigger(DWZ.eventType.resizeGrid);\n\t\t}\n\t};\n})(jQuery);\n"
  },
  {
    "path": "js/dwz.dialogDrag.js",
    "content": "/**\n * @author Roger Wu\n */\n(function($){\n\t$.fn.dialogDrag = function(options){\n        if (typeof options == 'string') {\n                if (options == 'destroy')\n\t\t\t\t\treturn this.each(function() {\n\t\t\t\t\t\t\tvar dialog = this;\n\t\t\t\t\t\t\t$(\"div.dialogHeader\", dialog).unbind(\"mousedown\");\n\t                });\n        }\n\t\treturn this.each(function(){\n\t\t\tvar dialog = $(this);\n\t\t\t$(\"div.dialogHeader\", dialog).mousedown(function(e){\n\t\t\t\t$.pdialog.switchDialog(dialog);\n\t\t\t\tdialog.data(\"task\",true);\n\t\t\t\tsetTimeout(function(){\n\t\t\t\t\tif(dialog.data(\"task\"))$.dialogDrag.start(dialog,e);\n\t\t\t\t},100);\n\t\t\t\treturn false;\n\t\t\t}).mouseup(function(e){\n\t\t\t\tdialog.data(\"task\",false);\n\t\t\t\treturn false;\n\t\t\t});\n\t\t});\n\t};\n\t$.dialogDrag = {\n\t\tcurrId:null,\n\t\t_init:function(dialog) {\n\t\t\tthis.currId = new Date().getTime();\n\t\t\tvar shadow = $(\"#dialogProxy\");\n\t\t\tif (!shadow.length) {\n\t\t\t\tshadow = $(DWZ.frag[\"dialogProxy\"]);\n\t\t\t\t$(\"body\").append(shadow);\n\t\t\t}\n\t\t\t$(\"h1\", shadow).html($(\".dialogHeader h1\", dialog).text());\n\t\t},\n\t\tstart:function(dialog,event){\n\t\t\t\tthis._init(dialog);\n\t\t\t\tvar sh = $(\"#dialogProxy\");\n\t\t\t\tsh.css({\n\t\t\t\t\tleft: dialog.css(\"left\"),\n\t\t\t\t\ttop: dialog.css(\"top\"),\n\t\t\t\t\theight: dialog.css(\"height\"),\n\t\t\t\t\twidth: dialog.css(\"width\"),\n\t\t\t\t\tzIndex:parseInt(dialog.css(\"zIndex\")) + 1\n\t\t\t\t}).show();\n\t\t\t\t$(\"div.dialogContent\",sh).css(\"height\",$(\"div.dialogContent\",dialog).css(\"height\"));\n\t\t\t\tsh.data(\"dialog\",dialog);\n\t\t\t\tdialog.css({left:\"-10000px\",top:\"-10000px\"});\n\t\t\t\t$(\".shadow\").hide();\n\t\t\t\t$(sh).jDrag({\n\t\t\t\t\tselector:\".dialogHeader\",\n\t\t\t\t\tstop: this.stop,\n\t\t\t\t\tevent:event\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t},\n\t\tstop:function(){\n\t\t\tvar sh = $(arguments[0]);\n\t\t\tvar dialog = sh.data(\"dialog\");\n\t\t\t$(dialog).css({left:$(sh).css(\"left\"),top:$(sh).css(\"top\")});\n\t\t\t$.pdialog.attachShadow(dialog);\n\t\t\t$(sh).hide();\n\t\t}\n\t}\n})(jQuery);\n"
  },
  {
    "path": "js/dwz.drag.js",
    "content": "/**\n * @author Roger Wu\n */\n(function($){\n\n\t$.scrollPosParents = function(el){\n\t\tvar $el = $(el);\n\t\t// var scrollPos = {top:$el.scrollTop(), left:$el.scrollLeft()};\n\t\tvar scrollPos = {top:0, left:0};\n\t\t$el.parents().each(function(){\n\t\t\tvar $p = $(this);\n\t\t\tscrollPos.top += $p.scrollTop();\n\t\t\tscrollPos.left += $p.scrollLeft();\n\t\t});\n\n\t\treturn scrollPos;\n\t};\n\n\t$.fn.jDrag = function(options){\n\t\tif (typeof options == 'string') {\n\t\t\tif (options == 'destroy') \n\t\t\t\treturn this.each(function(){\n\t\t\t\t\t$(this).unbind('mousedown', $.rwdrag.start);\n\t\t\t\t\t$.data(this, 'pp-rwdrag', null);\n\t\t\t\t});\n\t\t}\n\t\treturn this.each(function(){\n\t\t\tvar el = $(this);\n\t\t\t$.data($.rwdrag, 'pp-rwdrag', {\n\t\t\t\toptions: $.extend({\n\t\t\t\t\tel: el,\n\t\t\t\t\tobj: el\n\t\t\t\t}, options)\n\t\t\t});\n\t\t\tif (options.event) \n\t\t\t\t$.rwdrag.start(options.event);\n\t\t\telse {\n\t\t\t\tvar select = options.selector;\n\t\t\t\t$(select, obj).bind('mousedown', $.rwdrag.start);\n\t\t\t}\n\t\t});\n\t};\n\t$.rwdrag = {\n\t\tstart: function(e){\n\t\t\tdocument.onselectstart=function(e){return false};//禁止选择\n\n\t\t\tvar data = $.data(this, 'pp-rwdrag');\n\t\t\tvar el = data.options.el[0];\n\t\t\t$.data(el, 'pp-rwdrag', {\n\t\t\t\toptions: data.options\n\t\t\t});\n\t\t\tif (!$.rwdrag.current) {\n\n\t\t\t\t$.rwdrag.current = {\n\t\t\t\t\tel: el,\n\t\t\t\t\toleft: parseInt(el.style.left) || 0,\n\t\t\t\t\totop: parseInt(el.style.top) || 0,\n\t\t\t\t\tox: e.pageX || e.screenX,\n\t\t\t\t\toy: e.pageY || e.screenY\n\t\t\t\t};\n\t\t\t\t$(document).bind(\"mouseup\", $.rwdrag.stop).bind(\"mousemove\", $.rwdrag.drag);\n\t\t\t}\n\t\t},\n\t\tdrag: function(e){\n\t\t\tif (!e)  var e = window.event;\n\t\t\tvar current = $.rwdrag.current;\n\t\t\tvar data = $.data(current.el, 'pp-rwdrag');\n\t\t\tvar left = (current.oleft + (e.pageX || e.clientX) - current.ox);\n\t\t\tvar top = (current.otop + (e.pageY || e.clientY) - current.oy);\n\t\t\tif (top < 1) top = 0;\n\n\t\t\tif (data.options.move == 'horizontal') {\n\t\t\t\tif ((data.options.minW && left >= $(data.options.obj).cssv(\"left\") + data.options.minW) && (data.options.maxW && left <= $(data.options.obj).cssv(\"left\") + data.options.maxW)) \n\t\t\t\t\tcurrent.el.style.left = left + 'px';\n\t\t\t\telse if (data.options.scop) {\n\t\t\t\t\tif (data.options.relObj) {\n\t\t\t\t\t\tif ((left - parseInt(data.options.relObj.style.left)) > data.options.cellMinW) {\n\t\t\t\t\t\t\tcurrent.el.style.left = left + 'px';\n\t\t\t\t\t\t}\n\t\t\t\t\t} else \n\t\t\t\t\t\tcurrent.el.style.left = left + 'px';\n\t\t\t\t}\n\t\t\t} else if (data.options.move == 'vertical') {\n\t\t\t\t\tcurrent.el.style.top = top + 'px';\n\t\t\t} else {\n\t\t\t\tvar selector = data.options.selector ? $(data.options.selector, data.options.obj) : $(data.options.obj);\n\t\t\t\t// if (left >= -selector.outerWidth() * 2 / 3 && top >= 0 && (left + selector.outerWidth() / 3 < $(window).width()) && (top + selector.outerHeight() < $(window).height())) { //浏览器缩放后有bug，先注释掉\n\t\t\t\t\tcurrent.el.style.left = left + 'px';\n\t\t\t\t\tcurrent.el.style.top = top + 'px';\n\t\t\t\t// }\n\t\t\t}\n\n\t\t\tif (data.options.drag) {\n\t\t\t\tdata.options.drag.apply(current.el, [current.el, e]);\n\t\t\t}\n\t\t\t\n\t\t\treturn $.rwdrag.preventEvent(e);\n\t\t},\n\t\tstop: function(e){\n\t\t\tvar current = $.rwdrag.current;\n\t\t\tvar data = $.data(current.el, 'pp-rwdrag');\n\t\t\t$(document).unbind('mousemove', $.rwdrag.drag).unbind('mouseup', $.rwdrag.stop);\n\t\t\tif (data.options.stop) {\n\t\t\t\tdata.options.stop.apply(current.el, [current.el, e]);\n\t\t\t}\n\t\t\t$.rwdrag.current = null;\n\n\t\t\tdocument.onselectstart=function(e){return true};//启用选择\n\t\t\treturn $.rwdrag.preventEvent(e);\n\t\t},\n\t\tpreventEvent:function(e){\n\t\t\tif (e.stopPropagation) e.stopPropagation();\n\t\t\tif (e.preventDefault) e.preventDefault();\n\t\t\treturn false;\t\t\t\n\t\t}\n\t};\n})(jQuery);\n"
  },
  {
    "path": "js/dwz.effects.js",
    "content": "/**\n * @author Roger Wu\n */\n(function($){\n\t$.extend($.fn, {\n\t\tjBlindUp: function(options){\n\t\t\tvar op = $.extend({duration: 500, easing: \"swing\", call: function(){}}, options);\n\t\t\treturn this.each(function(){\n\t\t\t\tvar $this = $(this);\n\t\t\t\t$(this).animate({height: 0}, {\n\t\t\t\t\tstep: function(){},\n\t\t\t\t\tduration: op.duration,\n\t\t\t\t\teasing: op.easing,\n\t\t\t\t\tcomplete: function(){ \n\t\t\t\t\t\t$this.css({display: \"none\"});\n\t\t\t\t\t\top.call();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\t\tjBlindDown: function(options){\n\t\t\tvar op = $.extend({to:0, duration: 500,easing: \"swing\",call: function(){}}, options);\n\t\t\treturn this.each(function(){\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar\tfixedPanelHeight = (op.to > 0)?op.to:$.effect.getDimensions($this[0]).height;\n\t\t\t\t$this.animate({height: fixedPanelHeight}, {\n\t\t\t\t\tstep: function(){},\n\t\t\t\t\tduration: op.duration,\n\t\t\t\t\teasing: op.easing,\n\t\t\t\t\tcomplete: function(){ \n\t\t\t\t\t$this.css({display: \"\"});\n\t\t\t\t\top.call(); }\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\t\tjSlideUp:function(options) {\n\t\t\tvar op = $.extend({to:0, duration: 500,easing: \"swing\",call: function(){}}, options);\n\t\t\treturn this.each(function(){\n\t\t\t\tvar $this = $(this);\n\t\t\t\t$this.wrapInner(\"<div></div>\");\n\t\t\t\tvar\tfixedHeight = (op.to > 0)?op.to:$.effect.getDimensions($(\">div\",$this)[0]).height;\n\t\t\t\t$this.css({overflow:\"visible\",position:\"relative\"});\n\t\t\t\t$(\">div\",$this).css({position:\"relative\"}).animate({top: -fixedHeight}, {\n\t\t\t\t\teasing: op.easing,\n\t\t\t\t\tduration: op.duration,\n\t\t\t\t\tcomplete:function(){$this.html($(this).html());}\n\t\t\t\t});\n\t\t\t\t\n\t\t\t});\n\t\t},\n\t\tjSlideDown:function(options) {\n\t\t\tvar op = $.extend({to:0, duration: 500,easing: \"swing\",call: function(){}}, options);\n\t\t\treturn this.each(function(){\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar\tfixedHeight = (op.to > 0)?op.to:$.effect.getDimensions($this[0]).height;\n\t\t\t\t$this.wrapInner(\"<div style=\\\"top:-\" + fixedHeight + \"px;\\\"></div>\");\n\t\t\t\t$this.css({overflow:\"visible\",position:\"relative\", height:\"0px\"})\n\t\t\t\t.animate({height: fixedHeight}, {\n\t\t\t\t\tduration: op.duration,\n\t\t\t\t\teasing: op.easing,\n\t\t\t\t\tcomplete: function(){  $this.css({display: \"\", overflow:\"\"}); op.call(); }\n\t\t\t\t});\n\t\t\t\t$(\">div\",$this).css({position:\"relative\"}).animate({top: 0}, {\n\t\t\t\t\teasing: op.easing,\n\t\t\t\t\tduration: op.duration,\n\t\t\t\t\tcomplete:function(){$this.html($(this).html());}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t});\n\t$.effect = {\n\t\tgetDimensions: function(element, displayElement){\n\t\t\tvar dimensions = new $.effect.Rectangle;\n\t\t\tvar displayOrig = $(element).css('display');\n\t\t\tvar visibilityOrig = $(element).css('visibility');\n\t\t\tvar isZero = $(element).height()==0?true:false;\n\t\t\tif ($(element).is(\":hidden\")) {\n\t\t\t\t$(element).css({visibility: 'hidden', display: 'block'});\n\t\t\t\tif(isZero)$(element).css(\"height\",\"\");\n\t\t\t\t// if ($.browser.opera) refElement.focus();\n\t\t\t}\n\t\t\tdimensions.height = $(element).outerHeight();\n\t\t\tdimensions.width = $(element).outerWidth();\n\t\t\tif (displayOrig == 'none'){\n\t\t\t\t$(element).css({visibility: visibilityOrig, display: 'none'});\n\t\t\t\tif(isZero) if(isZero)$(element).css(\"height\",\"0px\");\n\t\t\t}\n\t\t\treturn dimensions;\n\t\t}\n\t}\n\t$.effect.Rectangle = function(){\n\t\tthis.width = 0;\n\t\tthis.height = 0;\n\t\tthis.unit = \"px\";\n\t}\n\n\t$.extend(DWZ, {\n\t\t_randomColorFactor:function() {\n\t\t\t//return Math.round(Math.random() * 255);\n\t\t\treturn Math.round(Math.random() * 223);\n\t\t},\n\n\t\trandomColor:function(opacity) {\n\t\t\treturn 'rgba(' + this._randomColorFactor() + ',' + this._randomColorFactor() + ',' + this._randomColorFactor() + ',' + (opacity || '.3') + ')';\n\t\t}\n\t});\n})(jQuery);\n"
  },
  {
    "path": "js/dwz.file.js",
    "content": "/**\n * Created by huihuazhang on 2016/4/27.\n * 基于HTML5 文件上传的核心脚本\n * http://www.w3.org/TR/html-markup/input.file.html\n */\n(function($){\n\tfunction readAsDataURL(img, file, maxW, maxH){\n\t\t// Using FileReader to display the image content\n\t\tvar reader = new FileReader();\n\t\treader.onload = (function(aImg) {\n\t\t\treturn function(e) {\n\t\t\t\taImg.src = e.target.result;\n\n\t\t\t\tvar width = aImg.naturalWidth,\n\t\t\t\t\theight = aImg.naturalHeight;\n\t\t\t\taImg.setAttribute('data-width', width);\n\t\t\t\taImg.setAttribute('data-height', height);\n\n\t\t\t\tif (maxW && maxH) {\n\n\t\t\t\t\tif (width/maxW > height/maxH) {\n\t\t\t\t\t\taImg.setAttribute('height', maxH);\n\t\t\t\t\t} else {\n\t\t\t\t\t\taImg.setAttribute('width', maxW);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t};\n\t\t})(img);\n\n\t\treader.readAsDataURL(file);\n\t}\n\n\tfunction previewUploadImg($uploadWrap, files, maxW, maxH) {\n\n\t\tvar $previewElem = $('<div class=\"thumbnail\"></div>').appendTo($uploadWrap);\n\n\t\tvar file = files[0];\n\n\t\tif (!file) {return false;}\n\n\t\tif (!file.type.match(/image.*/)) {\n\t\t\tthrow \"File Type must be an image\";\n\t\t}\n\n\t\tvar img = document.createElement(\"img\");\n\t\timg.file = file;\n\t\t$previewElem.empty().append(img);\n\n\t\t// if ($previewElem.find('.edit-icon').length == 0) {\n\t\t// \t$previewElem.append('<span class=\"edit-icon\"></span>');\n\t\t// }\n\n\t\tif ($previewElem.find('.del-icon').length == 0) {\n\t\t\t$('<a class=\"del-icon\"></a>').appendTo($previewElem).click(function(event){\n\t\t\t\t$previewElem.remove();\n\t\t\t\t$uploadWrap.find('input[type=file]').val('');\n\t\t\t});\n\t\t}\n\n\t\treadAsDataURL(img, file, maxW, maxH);\n\n\t}\n\n\t// multiple\n\tfunction previewUploadImg2($uploadWrap, files, maxW, maxH) {\n\n\t\tvar rel = $uploadWrap.attr('rel');\n\t\tvar $previewElem = $(rel);\n\n\t\t$previewElem.empty();\n\t\tfor (var index=0; index<files.length; index++) {\n\t\t\tvar file = files[index];\n\n\t\t\tvar $thumb = $('<li class=\"thumbnail\"></li>');\n\n\t\t\tvar img = document.createElement(\"img\");\n\t\t\timg.file = file;\n\t\t\t$thumb.append(img);\n\t\t\t$previewElem.append($thumb);\n\n\t\t\treadAsDataURL(img, file, maxW, maxH);\n\t\t}\n\n\t}\n\n\t$.fn.extend({\n\t\t/**\n\t\t * 选择上传图片缩略图列表预览\n\t\t * @param options\n\t\t */\n\t\tpreviewUploadImg: function(options){\n\t\t\tvar op = $.extend({maxW:80, maxH:80}, options);\n\t\t\treturn this.each(function(){\n\t\t\t\tvar $uploadWrap = $(this);\n\n\t\t\t\tvar $inputFiles = $uploadWrap.find('input[type=file]');\n\t\t\t\t$inputFiles.each(function(index){\n\t\t\t\t\tvar $inputFile = $(this).css({left:(op.maxW*index)+'px'});\n\t\t\t\t\t$inputFile.on('change', function () {\n\t\t\t\t\t\tvar files = this.files;\n\n\t\t\t\t\t\tif (this.multiple) {\n\t\t\t\t\t\t\tpreviewUploadImg2($uploadWrap, files, op.maxW, op.maxH);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpreviewUploadImg($uploadWrap, files, op.maxW, op.maxH);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\tvar $delIcon = $uploadWrap.find('.del-icon');\n\t\t\t\tif ($delIcon) { // 删除服务器上的图片\n\t\t\t\t\t$delIcon.click(function(event){\n\t\t\t\t\t\t$.ajax({\n\t\t\t\t\t\t\ttype: 'GET',\n\t\t\t\t\t\t\turl:$delIcon.attr('href'),\n\t\t\t\t\t\t\tdataType:\"json\",\n\t\t\t\t\t\t\tcache: false,\n\t\t\t\t\t\t\tsuccess: function(json){\n\t\t\t\t\t\t\t\tDWZ.ajaxDone(json);\n\n\t\t\t\t\t\t\t\tif (json[DWZ.keys.statusCode] == DWZ.statusCode.ok){\n\t\t\t\t\t\t\t\t\t$uploadWrap.find('div.thumbnail').remove();\n\t\t\t\t\t\t\t\t\t$uploadWrap.find('input[type=file]').val('');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\terror: DWZ.ajaxError\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t});\n\t\t}\n\t});\n\n\n\tDWZ.regPlugins.push(function($p){\n\t\t$(\"div.upload-wrap\", $p).previewUploadImg();\n\t});\n\n})(jQuery);\n"
  },
  {
    "path": "js/dwz.history.js",
    "content": "/**\n * jQuery ajax history plugins\n * @author 张慧华 z@j-ui.com\n */\n\n\n(function($){\n\n\t$.extend({\n\t\t\n\t\tHistory: {\n\t\t\t_hash: new Array(),\n\t\t\t_cont: undefined,\n\t\t\t_currentHash: \"\",\n\t\t\t_callback: undefined,\n\t\t\tinit: function(cont, callback){\n\t\t\t\t$.History._cont = cont;\n\t\t\t\t$.History._callback = callback;\n\t\t\t\tvar current_hash = location.hash.replace(/\\?.*$/, '');\n\t\t\t\t$.History._currentHash = current_hash;\n\n\t\t\t\tif (/msie/.test(navigator.userAgent.toLowerCase())) {\n\t\t\t\t\tif ($.History._currentHash == '') {\n\t\t\t\t\t\t$.History._currentHash = '#';\n\t\t\t\t\t}\n\t\t\t\t\t$(\"body\").append('<iframe id=\"jQuery_history\" style=\"display: none;\" src=\"about:blank\"></iframe>');\n\t\t\t\t\tvar ihistory = $(\"#jQuery_history\")[0];\n\t\t\t\t\tvar iframe = ihistory.contentDocument || ihistory.contentWindow.document;\n\t\t\t\t\tiframe.open();\n\t\t\t\t\tiframe.close();\n\t\t\t\t\tiframe.location.hash = current_hash;\n\t\t\t\t}\n\t\t\t\tif ($.isFunction(this._callback)) \n\t\t\t\t\t$.History._callback(current_hash.skipChar(\"#\"));\n\t\t\t\tsetInterval($.History._historyCheck, 100);\n\t\t\t},\n\t\t\t_historyCheck: function(){\n\t\t\t\tvar current_hash = \"\";\n\t\t\t\tif (/msie/.test(navigator.userAgent.toLowerCase())) {\n\t\t\t\t\tvar ihistory = $(\"#jQuery_history\")[0];\n\t\t\t\t\tvar iframe = ihistory.contentWindow;\n\t\t\t\t\tcurrent_hash = iframe.location.hash.skipChar(\"#\").replace(/\\?.*$/, '');\n\t\t\t\t} else {\n\t\t\t\t\tcurrent_hash = location.hash.skipChar('#').replace(/\\?.*$/, '');\n\t\t\t\t}\n//\t\t\t\tif (!current_hash) {\n//\t\t\t\t\tif (current_hash != $.History._currentHash) {\n//\t\t\t\t\t\t$.History._currentHash = current_hash;\n//\t\t\t\t\t\t//TODO\n//\t\t\t\t\t}\n//\t\t\t\t} else {\n\t\t\t\t\tif (current_hash != $.History._currentHash) {\n\t\t\t\t\t\t$.History._currentHash = current_hash;\n\t\t\t\t\t\t$.History.loadHistory(current_hash);\n\t\t\t\t\t}\n//\t\t\t\t}\n\t\t\t\t\n\t\t\t},\n\t\t\taddHistory: function(hash, fun, args){\n\t\t\t\t$.History._currentHash = hash;\n\t\t\t\tvar history = [hash, fun, args];\n\t\t\t\t$.History._hash.push(history);\n\t\t\t\tif (/msie/.test(navigator.userAgent.toLowerCase())) {\n\t\t\t\t\tvar ihistory = $(\"#jQuery_history\")[0];\n\t\t\t\t\tvar iframe = ihistory.contentDocument || ihistory.contentWindow.document;\n\t\t\t\t\tiframe.open();\n\t\t\t\t\tiframe.close();\n\t\t\t\t\tiframe.location.hash = hash.replace(/\\?.*$/, '');\n\t\t\t\t\tlocation.hash = hash.replace(/\\?.*$/, '');\n\t\t\t\t} else {\n\t\t\t\t\tlocation.hash = hash.replace(/\\?.*$/, '');\n\t\t\t\t}\n\t\t\t},\n\t\t\tloadHistory: function(hash){\n\t\t\t\tif (/msie/.test(navigator.userAgent.toLowerCase())) {\n\t\t\t\t\tlocation.hash = hash;\n\t\t\t\t}\n\t\t\t\tfor (var i = 0; i < $.History._hash.length; i += 1) {\n\t\t\t\t\tif ($.History._hash[i][0] == hash) {\n\t\t\t\t\t\t$.History._hash[i][1]($.History._hash[i][2]);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n})(jQuery);\n"
  },
  {
    "path": "js/dwz.miscDrag.js",
    "content": "/**\n * @author 张慧华 z@j-ui.com\n */\n(function ($) {\n    DWZ.miscDrag = {\n        start: function ($sortBox, $item, event, op) {\n\n            var $helper = $item.clone();\n            var position = $item.position();\n\n            $helper.addClass('sortDragHelper').css({\n                position: 'absolute',\n                top: position.top + $sortBox.scrollTop(),\n                left: position.left,\n                zIndex: op.zIndex,\n                minWidth: $item.width() + 'px',\n                height: $item.height() + 'px'\n            }).jDrag({\n                drag: this.drag,\n                stop: this.stop,\n                event: event\n            });\n            $helper.data('$sortBox', $sortBox);\n\n            $item.before($helper);\n            return false;\n        },\n        drag: function (el, event) {\n        },\n        stop: function (el, event) {\n            var $helper = $(arguments[0]),\n                $sortBox = $helper.data('$sortBox'),\n                $overBox = DWZ.miscDrag._getOverSortBox($sortBox.find($sortBox.attr('drag-rel')), $helper);\n\n            if ($overBox.length > 0) { //移动到指定容器\n\n                var $dragBox = $helper.appendTo($overBox).mousedown(function (event) {\n                    $(this).jDrag({event: event});\n                });\n\n                var txt = $dragBox.html(),\n                    icon = $dragBox.attr('data-icon'),\n                    sn = $dragBox.attr('data-sn'),\n                    sequence = $overBox.find('> div').length;\n\n                var overBoxPos = $overBox.position(),\n                    dragBoxPos = $dragBox.position();\n\n                var content = icon ? '<img src=\"' + icon + '\" />' : txt;\n                $dragBox.attr('data-sequence', sequence).html(' <h2>' + sequence + '</h2>' + content).css({\n                    height: 'auto',\n                    top: (dragBoxPos.top - overBoxPos.top) + 'px',\n                    left: (dragBoxPos.left - overBoxPos.left) + 'px'\n                });\n\n                var rel = $sortBox.attr('rel');\n                if (rel) {\n                    $('<div class=\"sortDrag\" data-sn=\"' + sn + '\"><h2>' + sequence + '</h2></div>').appendTo(rel);\n                }\n            } else {\n                $helper.remove();\n            }\n        },\n\n        _getOverSortBox: function ($sortBox, $item) {\n            var itemPos = $item.offset();\n            var y = itemPos.top + ($item.height() / 2), x = itemPos.left + ($item.width() / 2);\n            return $sortBox.filter(':visible').filter(function () {\n                var $sortBox = $(this), sortBoxPos = $sortBox.offset(),\n                    sortBoxH = $sortBox.height(), sortBoxW = $sortBox.width();\n                return DWZ.isOver(y, x, sortBoxPos.top, sortBoxPos.left, sortBoxH, sortBoxW);\n            });\n        },\n        _createPlaceholder: function ($item) {\n            return $('<' + $item[0].nodeName + ' class=\"sortDragPlaceholder\"/>').css({\n                // width:$item.outerWidth()+'px',\n                height: $item.outerHeight() + 'px',\n                marginTop: $item.css('marginTop'),\n                marginRight: $item.css('marginRight'),\n                marginBottom: $item.css('marginBottom'),\n                marginLeft: $item.css('marginLeft')\n            });\n        },\n        startSortDrag: function ($sortBox, $item, event, op) {\n            var $placeholder = this._createPlaceholder($item);\n            var $helper = $item.clone();\n            var position = $item.position();\n            $helper.data('$sortBox', $sortBox).data('op', op).data('$item', $item).data('$placeholder', $placeholder);\n            $helper.addClass('sortDragHelper').css({\n                position: 'absolute',\n                top: position.top + $sortBox.scrollTop(),\n                left: position.left,\n                zIndex: op.zIndex,\n                width: $item.width() + 'px',\n                height: $item.height() + 'px'\n            }).jDrag({\n                drag: this.dragSortDrag,\n                stop: this.stopSortDrag,\n                event: event\n            });\n\n            $item.before($helper).before($placeholder);\n            return false;\n        },\n        dragSortDrag: function (el, event) {\n            var $helper = $(arguments[0]), $sortBox = $helper.data('$sortBox'),\n                $placeholder = $helper.data('$placeholder');\n\n            // 修复出现滚动条拖拽位置\n            var $unitBox = $helper.parents(\".unitBox:first\"),\n                position = $helper.position();\n            $helper.css({\n                top: position.top + $unitBox.scrollTop()\n            });\n\n            var $dragList = $($sortBox.attr('drag-rel'));\n\n            for (var i = 0; i < $dragList.length; i++) {\n\n                var $overBox = DWZ.miscDrag._getOverSortBox($dragList.eq(i), $helper);\n\n                if ($overBox.length > 0 && $overBox[0] != $sortBox[0]) { //移动到其他容器\n                    $placeholder.appendTo($overBox);\n                }\n            }\n\n        },\n        stopSortDrag: function () {\n            var $helper = $(arguments[0]), $sortBox = $helper.data('$sortBox'),\n                $placeholder = $helper.data('$placeholder'), $item = $helper.data('$item');\n\n            if ($placeholder && $placeholder.is(':visible')) {\n                //复制到目标容器\n                var $destBox = $placeholder.parents(\".sortDrag:first\");\n                //var html = $helper.html()+'<span class=\"close\">×</span>';\n                var html = $helper.html();\n\n                $destBox.append('<div class=\"dragItem\" data-sn=\"' + $helper.attr('data-sn') + '\" data-name=\"' + $helper.attr('data-name') + '\">' + html + '</div>');\n\n                $placeholder.remove();\n                $helper.remove();\n                if ($sortBox.attr('data-duplicate') != 1) {\n                    $item.remove();\n                }\n\n                //从新绑定sortDrag\n                if ($.fn.sortDrag) $destBox.sortDrag({refresh: true});\n            } else {\n                $placeholder.remove();\n                $helper.remove();\n            }\n\n        }\n    };\n\n    $.fn.extend({\n        miscDrag: function (options) {\n            var op = $.extend({\n                cursor: 'move', // selector 的鼠标手势\n                sortBoxs: 'div.miscDrag', //拖动排序项父容器\n                replace: false, //2个sortBox之间拖动替换\n                items: '> dt .dragBox', //拖动排序项选择器\n                zIndex: 1000\n            }, options);\n\n            return this.each(function () {\n                var $box = $(this);\n                $box.find(op.items).each(function (i) {\n                    var $item = $(this);\n                    $item.mousedown(function (event) {\n                        DWZ.miscDrag.start($box, $item, event, op);\n\n                        event.preventDefault();\n                    });\n                });\n            });\n        },\n        miscDragData: function () {\n            var $miscDrag = $(this),\n                $miscSortDrag = $($miscDrag.attr('rel')),\n                $dragBoxList = $miscDrag.find('dd .dragBox'),\n                $sortDragList = $miscSortDrag.find('.sortDrag');\n\n            var data = [];\n            for (var i = 0; i < $dragBoxList.length; i++) {\n                var $dragBox = $dragBoxList.eq(i), $sortDrag = $sortDragList.eq(i),\n                    $dragBoxPos = $dragBox.position();\n\n                var dataItem = {\n                    sn: $dragBox.attr('data-sn'),\n                    sequence: $dragBox.attr('data-sequence'),\n                    top: parseInt($dragBoxPos.top),\n                    left: parseInt($dragBoxPos.left),\n                    items: []\n                };\n\n                $sortDrag.find('.dragItem').each(function (index) {\n                    var $dragItem = $(this),\n                        $dragItemPos = $dragItem.position();\n                    dataItem.items.push({\n                        sn: $dragItem.attr('data-sn'),\n                        sequence: index + 1\n                    });\n                });\n\n                data.push(dataItem)\n            }\n\n            return data;\n        },\n\n        miscSortDragData: function () {\n            var $miscSortDrag = $(this),\n                $sortDragList = $miscSortDrag.find('.sortDrag');\n\n            var data = [];\n            for (var i = 0; i < $sortDragList.length; i++) {\n                var $sortDrag = $sortDragList.eq(i)\n\n                var dataItem = {\n                    sn: $sortDrag.attr('data-sn'),\n                    name: $sortDrag.attr('data-name') || '',\n                    sequence: i + 1,\n                    items: []\n                };\n\n                $sortDrag.find('.dragItem').each(function (index) {\n                    var $dragItem = $(this);\n                    var itemData = {\n                        sn: $dragItem.attr('data-sn'),\n                        name: $dragItem.attr('data-name') || '',\n                        sequence: index + 1\n                    };\n\n                    $dragItem.find('.ctl-label :checkbox').each(function () {\n                        var $lable = $(this), lableName = $lable.attr('name');\n                        if (lableName) {\n                            itemData[lableName] = $lable.is(\":checked\");\n                        }\n                    });\n\n                    dataItem.items.push(itemData);\n                });\n\n                data.push(dataItem);\n            }\n\n            return data;\n        },\n\n        miscSortDrag: function (options) {\n            var op = $.extend({\n                cursor: 'move', // selector 的鼠标手势\n                sortBoxs: 'dl.miscSortDrag', //拖动排序项父容器\n                replace: false, //2个sortBox之间拖动替换\n                items: '> dt .dragItem', //拖动排序项选择器\n                zIndex: 1000\n            }, options);\n\n            return this.each(function () {\n\n                var $sortBox = $(this);\n\n                $sortBox.find(op.items).each(function (i) {\n                    var $item = $(this);\n\n                    $item.mousedown(function (event) {\n                        DWZ.miscDrag.startSortDrag($sortBox, $item, event, op);\n\n                        event.preventDefault();\n                    });\n                });\n\n            });\n        }\n    });\n})(jQuery);\n"
  },
  {
    "path": "js/dwz.navTab.js",
    "content": "/**\n * @author 张慧华 z@j-ui.com\n *\n */\nvar navTab = {\n\tcomponentBox: null, // tab component. contain tabBox, prevBut, nextBut, panelBox\n\t_tabBox: null,\n\t_prevBut: null,\n\t_nextBut: null,\n\t_panelBox: null,\n\t_moreBut:null,\n\t_moreBox:null,\n\t_currentIndex: 0,\n\n\t_op: {id:\"navTab\", stTabBox:\".navTab-tab\", stPanelBox:\".navTab-panel\", mainTabId:\"main\", close$:\"a.close\", prevClass:\"tabsLeft\", nextClass:\"tabsRight\", stMore:\".tabsMore\", stMoreLi:\"ul.tabsMoreList\"},\n\n\tinit: function(options){\n\t\tif ($.History) $.History.init(\"#container\");\n\t\tvar $this = this;\n\t\t$.extend(this._op, options);\n\n\t\tthis.componentBox = $(\"#\"+this._op.id);\n\t\tthis._tabBox = this.componentBox.find(this._op.stTabBox);\n\t\tthis._panelBox = this.componentBox.find(this._op.stPanelBox);\n\t\tthis._prevBut = this.componentBox.find(\".\"+this._op.prevClass);\n\t\tthis._nextBut = this.componentBox.find(\".\"+this._op.nextClass);\n\t\tthis._moreBut = this.componentBox.find(this._op.stMore);\n\t\tthis._moreBox = this.componentBox.find(this._op.stMoreLi);\n\n\t\tthis._prevBut.click(function(event) {$this._scrollPrev()});\n\t\tthis._nextBut.click(function(event) {$this._scrollNext()});\n\t\tthis._moreBut.click(function(){\n\t\t\t$this._moreBox.show();\n\t\t\treturn false;\n\t\t});\n\t\t$(document).click(function(){$this._moreBox.hide()});\n\n\t\tthis._contextmenu(this._tabBox);\n\t\tthis._contextmenu(this._getTabs());\n\n\t\tthis._init();\n\t\tthis._ctrlScrollBut();\n\t},\n\t_init: function(){\n\t\tvar $this = this;\n\t\tthis._getTabs().each(function(iTabIndex){\n\t\t\t$(this).unbind(\"click\").click(function(event){\n\t\t\t\t$this._switchTab(iTabIndex);\n\t\t\t});\n\t\t\t$(this).find(navTab._op.close$).unbind(\"click\").click(function(){\n\t\t\t\t$this._closeTab(iTabIndex);\n\t\t\t});\n\t\t});\n\t\tthis._getMoreLi().each(function(iTabIndex){\n\t\t\t$(this).find(\">a\").unbind(\"click\").click(function(event){\n\t\t\t\t$this._switchTab(iTabIndex);\n\t\t\t});\n\t\t});\n\n\t\tthis._switchTab(this._currentIndex);\n\t},\n\t_contextmenu:function($obj){ // navTab右键菜单\n\t\tvar $this = this;\n\t\t$obj.contextMenu('navTabCM', {\n\t\t\tbindings:{\n\t\t\t\treload:function(t,m){\n\t\t\t\t\t$this._reload(t, true);\n\t\t\t\t},\n\t\t\t\tcloseCurrent:function(t,m){\n\t\t\t\t\tvar tabId = t.attr(\"tabid\");\n\t\t\t\t\tif (tabId) $this.closeTab(tabId);\n\t\t\t\t\telse $this.closeCurrentTab();\n\t\t\t\t},\n\t\t\t\tcloseOther:function(t,m){\n\t\t\t\t\tvar index = $this._indexTabId(t.attr(\"tabid\"));\n\t\t\t\t\t$this._closeOtherTab(index > 0 ? index : $this._currentIndex);\n\t\t\t\t},\n\t\t\t\tcloseAll:function(t,m){\n\t\t\t\t\t$this.closeAllTab();\n\t\t\t\t}\n\t\t\t},\n\t\t\tctrSub:function(t,m){\n\t\t\t\tvar mReload = m.find(\"[rel='reload']\");\n\t\t\t\tvar mCur = m.find(\"[rel='closeCurrent']\");\n\t\t\t\tvar mOther = m.find(\"[rel='closeOther']\");\n\t\t\t\tvar mAll = m.find(\"[rel='closeAll']\");\n\t\t\t\tvar $tabLi = $this._getTabs();\n\t\t\t\tif ($tabLi.length < 2) {\n\t\t\t\t\tmCur.addClass(\"disabled\");\n\t\t\t\t\tmOther.addClass(\"disabled\");\n\t\t\t\t\tmAll.addClass(\"disabled\");\n\t\t\t\t}\n\t\t\t\tif ($this._currentIndex == 0 || t.attr(\"tabid\") == $this._op.mainTabId) {\n\t\t\t\t\tmCur.addClass(\"disabled\");\n\t\t\t\t\tmReload.addClass(\"disabled\");\n\t\t\t\t} else if ($tabLi.length == 2) {\n\t\t\t\t\tmOther.addClass(\"disabled\");\n\t\t\t\t}\n\n\t\t\t}\n\t\t});\n\t},\n\n\t_getTabs: function(){\n\t\treturn this._tabBox.find(\"> li\");\n\t},\n\t_getPanels: function(){\n\t\treturn this._panelBox.find(\"> div\");\n\t},\n\t_getMoreLi: function(){\n\t\treturn this._moreBox.find(\"> li\");\n\t},\n\t_getTab: function(tabid){\n\t\tvar index = this._indexTabId(tabid);\n\t\tif (index >= 0) return this._getTabs().eq(index);\n\t},\n\tgetPanel: function(tabid){\n\t\tvar index = this._indexTabId(tabid);\n\t\tif (index >= 0) return this._getPanels().eq(index);\n\t},\n\t_getTabsW: function(iStart, iEnd){\n\t\treturn this._tabsW(this._getTabs().slice(iStart, iEnd));\n\t},\n\t_tabsW:function($tabs){\n\t\tvar iW = 0;\n\t\t$tabs.each(function(){\n\t\t\tiW += $(this).outerWidth(true);\n\t\t});\n\t\treturn iW;\n\t},\n\t_indexTabId: function(tabid){\n\t\tif (!tabid) return -1;\n\t\tvar iOpenIndex = -1;\n\t\tthis._getTabs().each(function(index){\n\t\t\tif ($(this).attr(\"tabid\") == tabid){iOpenIndex = index; return;}\n\t\t});\n\t\treturn iOpenIndex;\n\t},\n\t_getLeft: function(){\n\t\treturn this._tabBox.position().left;\n\t},\n\t_getScrollBarW: function(){\n\t\treturn this.componentBox.width()-55;\n\t},\n\n\t_visibleStart: function(){\n\t\tvar iLeft = this._getLeft(), iW = 0;\n\t\tvar $tabs = this._getTabs();\n\t\tfor (var i=0; i<$tabs.length; i++){\n\t\t\tif (iW + iLeft >= 0) return i;\n\t\t\tiW += $tabs.eq(i).outerWidth(true);\n\t\t}\n\t\treturn 0;\n\t},\n\t_visibleEnd: function(){\n\t\tvar iLeft = this._getLeft(), iW = 0;\n\t\tvar $tabs = this._getTabs();\n\t\tfor (var i=0; i<$tabs.length; i++){\n\t\t\tiW += $tabs.eq(i).outerWidth(true);\n\t\t\tif (iW + iLeft > this._getScrollBarW()) return i;\n\t\t}\n\t\treturn $tabs.length;\n\t},\n\t_scrollPrev: function(){\n\t\tvar iStart = this._visibleStart();\n\t\tif (iStart > 0){\n\t\t\tthis._scrollTab(-this._getTabsW(0, iStart-1));\n\t\t}\n\t},\n\t_scrollNext: function(){\n\t\tvar iEnd = this._visibleEnd();\n\t\tif (iEnd < this._getTabs().length){\n\t\t\tthis._scrollTab(-this._getTabsW(0, iEnd+1) + this._getScrollBarW());\n\t\t}\n\t},\n\t_scrollTab: function(iLeft, isNext){\n\t\tvar $this = this;\n\t\tthis._tabBox.animate({ left: iLeft+'px' }, 200, function(){$this._ctrlScrollBut();});\n\t},\n\t_scrollCurrent: function(){ // auto scroll current tab\n\t\tvar iW = this._tabsW(this._getTabs());\n\t\tif (iW <= this._getScrollBarW()){\n\t\t\tthis._scrollTab(0);\n\t\t} else if (this._getLeft() < this._getScrollBarW() - iW){\n\t\t\tthis._scrollTab(this._getScrollBarW()-iW);\n\t\t} else if (this._currentIndex < this._visibleStart()) {\n\t\t\tthis._scrollTab(-this._getTabsW(0, this._currentIndex));\n\t\t} else if (this._currentIndex >= this._visibleEnd()) {\n\t\t\tthis._scrollTab(this._getScrollBarW() - this._getTabs().eq(this._currentIndex).outerWidth(true) - this._getTabsW(0, this._currentIndex));\n\t\t}\n\t},\n\t_ctrlScrollBut: function(){\n\t\tvar iW = this._tabsW(this._getTabs());\n\t\tif (this._getScrollBarW() > iW){\n\t\t\tthis._prevBut.hide();\n\t\t\tthis._nextBut.hide();\n\t\t\tthis._tabBox.parent().removeClass(\"tabsPageHeaderMargin\");\n\t\t} else {\n\t\t\tthis._prevBut.show().removeClass(\"tabsLeftDisabled\");\n\t\t\tthis._nextBut.show().removeClass(\"tabsRightDisabled\");\n\t\t\tthis._tabBox.parent().addClass(\"tabsPageHeaderMargin\");\n\t\t\tif (this._getLeft() >= 0){\n\t\t\t\tthis._prevBut.addClass(\"tabsLeftDisabled\");\n\t\t\t} else if (this._getLeft() <= this._getScrollBarW() - iW) {\n\t\t\t\tthis._nextBut.addClass(\"tabsRightDisabled\");\n\t\t\t}\n\t\t}\n\t},\n\n\t_switchTab: function(iTabIndex){\n\t\tvar $tab = this._getTabs().removeClass(\"selected\").eq(iTabIndex).addClass(\"selected\");\n\n\t\tif (DWZ.ui.hideMode == 'offsets') {\n\t\t\tthis._getPanels().css({position: 'absolute', top:'-100000px', left:'-100000px'}).eq(iTabIndex).css({position: '', top:'', left:''});\n\t\t} else {\n\t\t\tthis._getPanels().hide().eq(iTabIndex).show();\n\t\t}\n\n\t\tthis._getMoreLi().removeClass(\"selected\").eq(iTabIndex).addClass(\"selected\");\n\t\tthis._currentIndex = iTabIndex;\n\n\t\tthis._scrollCurrent();\n\t\tthis._reload($tab);\n\t},\n\n\t_closeTab: function(index, openTabid){\n\n\t\tthis._getTabs().eq(index).remove();\n\t\tthis._getPanels().eq(index).trigger(DWZ.eventType.pageClear).remove();\n\t\tthis._getMoreLi().eq(index).remove();\n\t\tif (this._currentIndex >= index) this._currentIndex--;\n\n\t\tif (openTabid) {\n\t\t\tvar openIndex = this._indexTabId(openTabid);\n\t\t\tif (openIndex > 0) this._currentIndex = openIndex;\n\t\t}\n\n\t\tthis._init();\n\t\tthis._scrollCurrent();\n\t\tthis._reload(this._getTabs().eq(this._currentIndex));\n\t},\n\tcloseTab: function(tabid){\n\t\tvar index = this._indexTabId(tabid);\n\t\tif (index > 0) { this._closeTab(index); }\n\t},\n\tcloseCurrentTab: function(openTabid){ //openTabid 可以为空，默认关闭当前tab后，打开最后一个tab\n\t\tif (this._currentIndex > 0) {this._closeTab(this._currentIndex, openTabid);}\n\t},\n\tcloseAllTab: function(){\n\t\tthis._getTabs().filter(\":gt(0)\").remove();\n\t\tthis._getPanels().filter(\":gt(0)\").trigger(DWZ.eventType.pageClear).remove();\n\t\tthis._getMoreLi().filter(\":gt(0)\").remove();\n\t\tthis._currentIndex = 0;\n\t\tthis._init();\n\t\tthis._scrollCurrent();\n\t},\n\t_closeOtherTab: function(index){\n\t\tindex = index || this._currentIndex;\n\t\tif (index > 0) {\n\t\t\tvar str$ = \":eq(\"+index+\")\";\n\t\t\tthis._getTabs().not(str$).filter(\":gt(0)\").remove();\n\t\t\tthis._getPanels().not(str$).filter(\":gt(0)\").trigger(DWZ.eventType.pageClear).remove();\n\t\t\tthis._getMoreLi().not(str$).filter(\":gt(0)\").remove();\n\t\t\tthis._currentIndex = 1;\n\t\t\tthis._init();\n\t\t\tthis._scrollCurrent();\n\t\t} else {\n\t\t\tthis.closeAllTab();\n\t\t}\n\t},\n\n\t_loadUrlCallback: function($panel){\n\t\t$panel.find(\"[layoutH]\").layoutH();\n\t\t$panel.find(\":button.close\").click(function(){\n\t\t\tnavTab.closeCurrentTab();\n\t\t});\n\t},\n\t_reload: function($tab, flag){\n\t\tflag = flag || $tab.data(\"reloadFlag\");\n\t\tvar url = $tab.attr(\"url\");\n\t\tif (flag && url) {\n\t\t\t$tab.data(\"reloadFlag\", null);\n\t\t\tvar $panel = this.getPanel($tab.attr(\"tabid\"));\n\n\t\t\tif ($tab.hasClass(\"external\")){\n\t\t\t\tnavTab.openExternal(url, $panel);\n\t\t\t} else {\n\t\t\t\t//获取pagerForm参数\n\t\t\t\tvar $pagerForm = $(\"#pagerForm\", $panel);\n\t\t\t\tvar args = $pagerForm.length>0 ? $pagerForm.serializeArray() : {};\n\n\t\t\t\t$panel.ajaxUrl({\n\t\t\t\t\ttype:\"POST\", url:url, data:args, callback:function(response){\n\t\t\t\t\t\tnavTab._loadUrlCallback($panel);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t},\n\treloadFlag: function(tabid){\n\t\tvar $tab = this._getTab(tabid);\n\t\tif ($tab){\n\t\t\tif (this._indexTabId(tabid) == this._currentIndex) this._reload($tab, true);\n\t\t\telse $tab.data(\"reloadFlag\", 1);\n\t\t}\n\t},\n\treload: function(url, options){\n\t\tvar op = $.extend({data:{}, navTabId:\"\", callback:null}, options);\n\t\tvar $tab = op.navTabId ? this._getTab(op.navTabId) : this._getTabs().eq(this._currentIndex);\n\t\tvar $panel =  op.navTabId ? this.getPanel(op.navTabId) : this._getPanels().eq(this._currentIndex);\n\n\t\tif ($panel){\n\t\t\tif (!url) {\n\t\t\t\turl = $tab.attr(\"url\");\n\t\t\t}\n\t\t\tif (url) {\n\t\t\t\tif ($tab.hasClass(\"external\")) {\n\t\t\t\t\tnavTab.openExternal(url, $panel);\n\t\t\t\t} else {\n\t\t\t\t\tif ($.isEmptyObject(op.data)) { //获取pagerForm参数\n\t\t\t\t\t\tvar $pagerForm = $(\"#pagerForm\", $panel);\n\t\t\t\t\t\top.data = $pagerForm.length>0 ? $pagerForm.serializeArray() : {}\n\t\t\t\t\t}\n\n\t\t\t\t\t$panel.ajaxUrl({\n\t\t\t\t\t\ttype:\"POST\", url:url, data:op.data, callback:function(response){\n\t\t\t\t\t\t\tnavTab._loadUrlCallback($panel);\n\t\t\t\t\t\t\tif ($.isFunction(op.callback)) op.callback(response);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tgetCurrentPanel: function() {\n\t\treturn this._getPanels().eq(this._currentIndex);\n\t},\n\tcheckCloseCurrent:function(json){\n\t\tif (!json) return;\n\t\tif (json[DWZ.keys.statusCode] == DWZ.statusCode.timeout\n\t\t\t|| (json[DWZ.keys.statusCode] == DWZ.statusCode.error && \"closeCurrentNavTab\" == json.callbackType) ) {\n\t\t\tthis.closeCurrentTab();\n\t\t}\n\t},\n\topenExternal:function(url, $panel){\n\t\tvar ih = navTab._panelBox.height();\n\t\t$panel.html(DWZ.frag[\"externalFrag\"].replaceAll(\"{url}\", url).replaceAll(\"{height}\", ih+\"px\"));\n\t},\n\t/**\n\t *\n\t * @param {Object} tabid\n\t * @param {Object} url\n\t * @param {Object} params: title, data, fresh\n\t */\n\topenTab: function(tabid, url, options){ //if found tabid replace tab, else create a new tab.\n\t\tvar op = $.extend({title:\"New Tab\", type:\"GET\", data:{}, fresh:true, external:false}, options);\n\n\t\tvar iOpenIndex = this._indexTabId(tabid);\n\n\t\tif (iOpenIndex >= 0){\n\t\t\tvar $tab = this._getTabs().eq(iOpenIndex);\n\t\t\tvar span$ = $tab.attr(\"tabid\") == this._op.mainTabId ? \"> span > span\" : \"> span\";\n\t\t\t$tab.find(\">a\").attr(\"title\", op.title).find(span$).html(op.title);\n\t\t\tvar $panel = this._getPanels().eq(iOpenIndex);\n\t\t\tif(url && (op.fresh || $tab.attr(\"url\") != url)) {\n\t\t\t\t$tab.attr(\"url\", url);\n\t\t\t\tif (op.external || url.isExternalUrl()) {\n\t\t\t\t\t$tab.addClass(\"external\");\n\t\t\t\t\tnavTab.openExternal(url, $panel);\n\t\t\t\t} else {\n\t\t\t\t\t$tab.removeClass(\"external\");\n\t\t\t\t\t$panel.ajaxUrl({\n\t\t\t\t\t\ttype:op.type, url:url, data:op.data, callback:function(){\n\t\t\t\t\t\t\tnavTab._loadUrlCallback($panel);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._currentIndex = iOpenIndex;\n\t\t} else {\n\t\t\tvar tabFrag = '<li tabid=\"#tabid#\"><a href=\"javascript:\" title=\"#title#\" class=\"#tabid#\"><span>#title#</span></a><a href=\"javascript:;\" class=\"close\">close</a></li>';\n\t\t\tthis._tabBox.append(tabFrag.replaceAll(\"#tabid#\", tabid).replaceAll(\"#title#\", op.title));\n\t\t\tthis._panelBox.append('<div class=\"page unitBox\"></div>');\n\t\t\tthis._moreBox.append('<li><a href=\"javascript:\" title=\"#title#\">#title#</a></li>'.replaceAll(\"#title#\", op.title));\n\n\t\t\tvar $tabs = this._getTabs();\n\t\t\tvar $tab = $tabs.filter(\":last\");\n\t\t\tvar $panel = this._getPanels().filter(\":last\");\n\n\t\t\tif(url) {\n\t\t\t\tif (op.external || url.isExternalUrl()) {\n\t\t\t\t\t$tab.addClass(\"external\");\n\t\t\t\t\tnavTab.openExternal(url, $panel);\n\t\t\t\t} else {\n\t\t\t\t\t$tab.removeClass(\"external\");\n\t\t\t\t\t$panel.ajaxUrl({\n\t\t\t\t\t\ttype: op.type, url: url, data: op.data, callback: function () {\n\t\t\t\t\t\t\tnavTab._loadUrlCallback($panel);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ($.History) {\n\t\t\t\tsetTimeout(function(){\n\t\t\t\t\t$.History.addHistory(tabid, function(tabid){\n\t\t\t\t\t\tvar i = navTab._indexTabId(tabid);\n\t\t\t\t\t\tif (i >= 0) navTab._switchTab(i);\n\t\t\t\t\t}, tabid);\n\t\t\t\t}, 10);\n\t\t\t}\n\n\t\t\tthis._currentIndex = $tabs.length - 1;\n\t\t\tthis._contextmenu($tabs.filter(\":last\").hoverClass(\"hover\"));\n\t\t}\n\n\t\tthis._init();\n\t\tthis._scrollCurrent();\n\n\t\tthis._getTabs().eq(this._currentIndex).attr(\"url\", url);\n\t}\n};\n"
  },
  {
    "path": "js/dwz.pagination.js",
    "content": "/**\n * \n * @author 张慧华 z@j-ui.com\n * @param {Object} opts Several options\n */\n(function($){\n\t$.fn.extend({\n\t\tpagination: function(opts){\n\t\t\tvar setting = {\n\t\t\t\tfirst$:\"li.j-first\", prev$:\"li.j-prev\", next$:\"li.j-next\", last$:\"li.j-last\", nums$:\"li.j-num>a\", jumpto$:\"li.jumpto\",\n\t\t\t\tpageNumFrag:'<li class=\"#liClass#\"><a href=\"javascript:;\">#pageNum#</a></li>'\n\t\t\t};\n\t\t\treturn this.each(function(){\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar pc = new Pagination(opts);\n\t\t\t\tvar interval = pc.getInterval();\n\t\n\t\t\t\tvar pageNumFrag = '';\n\t\t\t\tfor (var i=interval.start; i<interval.end;i++){\n\t\t\t\t\tpageNumFrag += setting.pageNumFrag.replaceAll(\"#pageNum#\", i).replaceAll(\"#liClass#\", i==pc.getCurrentPage() ? 'selected j-num' : 'j-num');\n\t\t\t\t}\n\t\t\t\t$this.html(DWZ.frag[\"pagination\"].replaceAll(\"#pageNumFrag#\", pageNumFrag).replaceAll(\"#currentPage#\", pc.getCurrentPage())).find(\"li\").hoverClass();\n\t\n\t\t\t\tvar $first = $this.find(setting.first$);\n\t\t\t\tvar $prev = $this.find(setting.prev$);\n\t\t\t\tvar $next = $this.find(setting.next$);\n\t\t\t\tvar $last = $this.find(setting.last$);\n\t\t\t\t\n\t\t\t\tif (pc.hasPrev()){\n\t\t\t\t\t$first.add($prev).find(\">span\").hide();\n\t\t\t\t\t_bindEvent($prev, pc.getCurrentPage()-1, pc.targetType(), pc.rel());\n\t\t\t\t\t_bindEvent($first, 1, pc.targetType(), pc.rel());\n\t\t\t\t} else {\n\t\t\t\t\t$first.add($prev).addClass(\"disabled\").find(\">a\").hide();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (pc.hasNext()) {\n\t\t\t\t\t$next.add($last).find(\">span\").hide();\n\t\t\t\t\t_bindEvent($next, pc.getCurrentPage()+1, pc.targetType(), pc.rel());\n\t\t\t\t\t_bindEvent($last, pc.numPages(), pc.targetType(), pc.rel());\n\t\t\t\t} else {\n\t\t\t\t\t$next.add($last).addClass(\"disabled\").find(\">a\").hide();\n\t\t\t\t}\n\t\n\t\t\t\t$this.find(setting.nums$).each(function(i){\n\t\t\t\t\t_bindEvent($(this), i+interval.start, pc.targetType(), pc.rel());\n\t\t\t\t});\n\t\t\t\t$this.find(setting.jumpto$).each(function(){\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar $inputBox = $this.find(\":text\");\n\t\t\t\t\tvar $button = $this.find(\":button\");\n\t\t\t\t\t$button.click(function(event){\n\t\t\t\t\t\tvar pageNum = $inputBox.val();\n\t\t\t\t\t\tif (pageNum && pageNum.isPositiveInteger()) {\n\t\t\t\t\t\t\tdwzPageBreak({targetType:pc.targetType(), rel:pc.rel(), data: {pageNum:pageNum}});\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t$inputBox.keyup(function(event){\n\t\t\t\t\t\tif (event.keyCode == DWZ.keyCode.ENTER) $button.click();\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t\t\n\t\t\tfunction _bindEvent($target, pageNum, targetType, rel){\n\t\t\t\t$target.bind(\"click\", {pageNum:pageNum}, function(event){\n\t\t\t\t\tdwzPageBreak({targetType:targetType, rel:rel, data:{pageNum:event.data.pageNum}});\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t\n\t\torderBy: function(options){\n\t\t\tvar op = $.extend({ targetType:\"navTab\", rel:\"\", asc:\"asc\", desc:\"desc\"}, options);\n\t\t\treturn this.each(function(){\n\t\t\t\tvar $this = $(this).css({cursor:\"pointer\"}).click(function(){\n\t\t\t\t\tvar orderField = $this.attr(\"orderField\");\n\t\t\t\t\tvar orderDirection = $this.hasClass(op.asc) ? op.desc : op.asc;\n\t\t\t\t\tdwzPageBreak({targetType:op.targetType, rel:op.rel, data:{orderField: orderField, orderDirection: orderDirection}});\n\t\t\t\t});\n\t\t\t\t\n\t\t\t});\n\t\t},\n\t\tpagerForm: function(options){\n\t\t\tvar op = $.extend({pagerForm$:\"#pagerForm\", parentBox:document}, options);\n\t\t\tvar frag = '<input type=\"hidden\" name=\"#name#\" value=\"#value#\" />';\n\t\t\treturn this.each(function(){\n\t\t\t\tvar $searchForm = $(this), $pagerForm = $(op.pagerForm$, op.parentBox);\n\t\t\t\tvar actionUrl = $pagerForm.attr(\"action\").replaceAll(\"#rel#\", $searchForm.attr(\"action\"));\n\t\t\t\t$pagerForm.attr(\"action\", actionUrl);\n\t\t\t\t$searchForm.find(\":input\").each(function(){\n\t\t\t\t\tvar $input = $(this), name = $input.attr(\"name\");\n\t\t\t\t\tif (name && (!$input.is(\":checkbox,:radio\") || $input.is(\":checked\"))){\n\t\t\t\t\t\tif ($pagerForm.find(\":input[name='\"+name+\"']\").length == 0) {\n\t\t\t\t\t\t\tvar inputFrag = frag.replaceAll(\"#name#\", name).replaceAll(\"#value#\", $input.val());\n\t\t\t\t\t\t\t$pagerForm.append(inputFrag);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t});\n\t\n\tvar Pagination = function(opts) {\n\t\tthis.opts = $.extend({\n\t\t\ttargetType:\"navTab\",\t// navTab, dialog\n\t\t\trel:\"\", //用于局部刷新div id号\n\t\t\ttotalCount:0,\n\t\t\tnumPerPage:10,\n\t\t\tpageNumShown:10,\n\t\t\tcurrentPage:1,\n\t\t\tcallback:function(){return false;}\n\t\t}, opts);\n\t}\n\t\n\t$.extend(Pagination.prototype, {\n\t\ttargetType:function(){return this.opts.targetType},\n\t\trel:function(){return this.opts.rel},\n\t\tnumPages:function() {\n\t\t\treturn Math.ceil(this.opts.totalCount/this.opts.numPerPage);\n\t\t},\n\t\tgetInterval:function(){\n\t\t\tvar ne_half = Math.ceil(this.opts.pageNumShown/2);\n\t\t\tvar np = this.numPages();\n\t\t\tvar upper_limit = np - this.opts.pageNumShown;\n\t\t\tvar start = this.getCurrentPage() > ne_half ? Math.max( Math.min(this.getCurrentPage() - ne_half, upper_limit), 0 ) : 0;\n\t\t\tvar end = this.getCurrentPage() > ne_half ? Math.min(this.getCurrentPage()+ne_half, np) : Math.min(this.opts.pageNumShown, np);\n\t\t\treturn {start:start+1, end:end+1};\n\t\t},\n\t\tgetCurrentPage:function(){\n\t\t\tvar currentPage = parseInt(this.opts.currentPage);\n\t\t\tif (isNaN(currentPage)) return 1;\n\t\t\treturn currentPage;\n\t\t},\n\t\thasPrev:function(){\n\t\t\treturn this.getCurrentPage() > 1;\n\t\t},\n\t\thasNext:function(){\n\t\t\treturn this.getCurrentPage() < this.numPages();\n\t\t}\n\t});\n})(jQuery);\n"
  },
  {
    "path": "js/dwz.panel.js",
    "content": "/**\n * @author Roger Wu\n * @version 1.0\n */\n(function($){\n\t$.extend($.fn, {\n\t\tjPanel:function(options){\n\t\t\tvar op = $.extend({header:\"panelHeader\", headerC:\"panelHeaderContent\", content:\"panelContent\", coll:\"collapsable\", exp:\"expandable\", footer:\"panelFooter\", footerC:\"panelFooterContent\"}, options);\n\t\t\treturn this.each(function(){\n\t\t\t\tvar $panel = $(this);\n\t\t\t\tvar close = $panel.hasClass(\"close\");\n\t\t\t\tvar collapse = $panel.hasClass(\"collapse\");\n\t\t\t\t\n\t\t\t\tvar $content = $(\">div\", $panel).addClass(op.content);\t\t\t\t\n\t\t\t\tvar title = $(\">h1\",$panel).wrap('<div class=\"'+op.header+'\"><div class=\"'+op.headerC+'\"></div></div>');\n\t\t\t\tif(collapse)$(\"<a href=\\\"javascript:\\\"></a>\").addClass(close?op.exp:op.coll).insertAfter(title);\n\n\t\t\t\tvar header = $(\">div:first\", $panel);\n\t\t\t\tvar footer = $('<div class=\"'+op.footer+'\"><div class=\"'+op.footerC+'\"></div></div>').appendTo($panel);\n\t\t\t\t\n\t\t\t\tvar defaultH = $panel.attr(\"defH\")?$panel.attr(\"defH\"):0;\n\t\t\t\tvar minH = $panel.attr(\"minH\")?$panel.attr(\"minH\"):0;\n\t\t\t\tif (close) \n\t\t\t\t\t$content.css({\n\t\t\t\t\t\theight: \"0px\",\n\t\t\t\t\t\tdisplay: \"none\"\n\t\t\t\t\t});\n\t\t\t\telse {\n\t\t\t\t\tif (defaultH > 0) \n\t\t\t\t\t\t$content.height(defaultH + \"px\");\n\t\t\t\t\telse if(minH > 0){\n\t\t\t\t\t\t$content.css(\"minHeight\", minH+\"px\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(!collapse) return;\n\t\t\t\tvar $pucker = $(\"a\", header);\n\t\t\t\tvar inH = $content.innerHeight() - 6;\n\t\t\t\tif(minH > 0 && minH >= inH) defaultH = minH;\n\t\t\t\telse defaultH = inH;\n\t\t\t\t$pucker.click(function(){\n\t\t\t\t\tif($pucker.hasClass(op.exp)){\n\t\t\t\t\t\t$content.jBlindDown({to:defaultH,call:function(){\n\t\t\t\t\t\t\t$pucker.removeClass(op.exp).addClass(op.coll);\n\t\t\t\t\t\t\tif(minH > 0) $content.css(\"minHeight\",minH+\"px\");\n\t\t\t\t\t\t}});\n\t\t\t\t\t} else { \n\t\t\t\t\t\tif(minH > 0) $content.css(\"minHeight\",\"\");\n\t\t\t\t\t\tif(minH >= inH) $content.css(\"height\", minH+\"px\");\n\t\t\t\t\t\t$content.jBlindUp({call:function(){\n\t\t\t\t\t\t\t$pucker.removeClass(op.coll).addClass(op.exp);\n\t\t\t\t\t\t}});\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t});\n})(jQuery);     \n"
  },
  {
    "path": "js/dwz.print.js",
    "content": "/**\n * @author 张慧华 z@j-ui.com\n *\n */\n(function($){\n\t$.printBox = function(rel){\n\t\tvar _printBoxId = 'printBox';\n\t\tvar $contentBox = rel ? $('#'+rel) : $(\"body\"),\n\t\t\t$printBox = $('#'+_printBoxId);\n\n\t\tif ($printBox.length==0){\n\t\t\t$printBox = $('<div id=\"'+_printBoxId+'\"></div>').appendTo(\"body\");\n\t\t}\n\n\t\t$printBox.html($contentBox.html()).find(\"[layoutH]\").height(\"auto\");\n\t\twindow.print();\n\n\t}\n\n})(jQuery);\n"
  },
  {
    "path": "js/dwz.regional.zh.js",
    "content": "/**\n * @author 张慧华 z@j-ui.com\n */\n(function($){\n\t// jQuery validate\n\tif ($.validator) {\n\t\t$.extend($.validator.messages, {\n\t\t\trequired: \"必填字段\",\n\t\t\tremote: \"请修正该字段\",\n\t\t\temail: \"请输入正确格式的电子邮件\",\n\t\t\turl: \"请输入合法的网址\",\n\t\t\tdate: \"请输入合法的日期\",\n\t\t\tdateISO: \"请输入合法的日期 (ISO).\",\n\t\t\tnumber: \"请输入合法的数字\",\n\t\t\tdigits: \"只能输入整数\",\n\t\t\tcreditcard: \"请输入合法的信用卡号\",\n\t\t\tequalTo: \"请再次输入相同的值\",\n\t\t\taccept: \"请输入拥有合法后缀名的字符串\",\n\t\t\tmaxlength: $.validator.format(\"长度最多是 {0} 的字符串\"),\n\t\t\tminlength: $.validator.format(\"长度最少是 {0} 的字符串\"),\n\t\t\trangelength: $.validator.format(\"长度介于 {0} 和 {1} 之间的字符串\"),\n\t\t\trange: $.validator.format(\"请输入一个介于 {0} 和 {1} 之间的值\"),\n\t\t\tmax: $.validator.format(\"请输入一个最大为 {0} 的值\"),\n\t\t\tmin: $.validator.format(\"请输入一个最小为 {0} 的值\"),\n\n\t\t\talphanumeric: \"字母、数字、下划线\",\n\t\t\tlettersonly: \"必须是字母\",\n\t\t\tphone: \"数字、空格、括号\"\n\t\t});\n\t}\n\t\n\t// DWZ regional\n\t$.setRegional(\"datepicker\", {\n\t\tdayNames: ['日', '一', '二', '三', '四', '五', '六'],\n\t\tmonthNames: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月']\n\t});\n\t$.setRegional(\"alertMsg\", {\n\t\ttitle:{error:\"错误\", info:\"提示\", warn:\"警告\", correct:\"成功\", confirm:\"确认提示\"},\n\t\tbutMsg:{ok:\"确定\", yes:\"是\", no:\"否\", cancel:\"取消\"}\n\t});\n})(jQuery);"
  },
  {
    "path": "js/dwz.resize.js",
    "content": "/**\n * @author Roger Wu\n * @version 1.0\n */\n(function($){\n \t$.fn.extend({jresize:function(options) {\n        if (typeof options == 'string') {\n                if (options == 'destroy') \n\t\t\t\t\treturn this.each(function() {\n\t\t\t\t\t\t\tvar dialog = this;\t\t\n\t\t\t\t\t\t\t$(\"div[class^='resizable']\",dialog).each(function() {\n\t\t\t\t\t\t\t\t$(this).hide();\n\t\t\t\t\t\t\t});\n\t                });\n        }\n\t\treturn this.each(function(){\n\t\t\tvar dialog = $(this);\t\t\t\n\t\t\tvar resizable = $(\".resizable\");\n\t\t\t$(\"div[class^='resizable']\",dialog).each(function() {\n\t\t\t\tvar bar = this;\n\t\t\t\t$(bar).mousedown(function(event) {\n\t\t\t\t\t$.pdialog.switchDialog(dialog);\n\t\t\t\t\t$.resizeTool.start(resizable, dialog, event, $(bar).attr(\"tar\"));\n\t\t\t\t\treturn false;\n\t\t\t\t}).show();\n\t\t\t});\n\t\t});\n\t}});\n\t$.resizeTool = {\n\t\tstart:function(resizable, dialog, e, target) {\n\t\t\t$.pdialog.initResize(resizable, dialog, target);\n\t\t\t$.data(resizable[0], 'layer-drag', {\n\t\t\t\toptions: $.extend($.pdialog._op, {target:target, dialog:dialog,stop:$.resizeTool.stop})\n\t\t\t});\n\t\t\t$.layerdrag.start(resizable[0], e, $.pdialog._op);\n\t\t},\n\t\tstop:function(){\n\t\t\tvar data = $.data(arguments[0], 'layer-drag');\n\t\t\t$.pdialog.resizeDialog(arguments[0], data.options.dialog, data.options.target);\n\t\t\t$(\"body\").css(\"cursor\", \"\");\n\t\t\t$(arguments[0]).hide();\n\t\t}\n\t};\n\t$.layerdrag = { \n\t\tstart:function(obj, e, options) {\n\t\t\tif (!$.layerdrag.current) {\n\t\t\t\t$.layerdrag.current = {\n\t\t\t\t\tel: obj,\n\t\t\t\t\toleft: parseInt(obj.style.left) || 0,\n\t\t\t\t\towidth: parseInt(obj.style.width) || 0,\n\t\t\t\t\totop: parseInt(obj.style.top) || 0,\n\t\t\t\t\toheight:parseInt(obj.style.height) || 0,\n\t\t\t\t\tox: e.pageX || e.screenX,\n\t\t\t\t\toy: e.pageY || e.clientY\n\t\t\t\t};\n\t\t\t\t$(document).bind('mouseup', $.layerdrag.stop);\n\t\t\t\t$(document).bind('mousemove', $.layerdrag.drag);\n\t\t\t}\n\t\t\treturn $.layerdrag.preventEvent(e);\n\t\t},\n        drag: function(e) {\n                if (!e) var e = window.event;\n                var current = $.layerdrag.current;\n\t\t\t\tvar data = $.data(current.el, 'layer-drag');\n\t\t\t\tvar lmove = (e.pageX || e.screenX) - current.ox;\n\t\t\t\tvar tmove = (e.pageY || e.clientY) - current.oy;\n\t\t\t\tif((e.pageY || e.clientY) <= 0 || (e.pageY || e.clientY) >= ($(window).height() - $(\".dialogHeader\", $(data.options.dialog)).outerHeight())) return false;\n\t\t\t\tvar target = data.options.target;\t\n\t\t\t\tvar width = current.owidth;\t\n\t\t\t\tvar height = current.oheight;\t\t\n\t\t\t\tif (target != \"n\" && target != \"s\") {\n\t\t\t\t\twidth += (target.indexOf(\"w\") >= 0)?-lmove:lmove;\n\t\t\t\t}\n\t\t\t\tif (width >= $.pdialog._op.minW) {\n\t\t\t\t\tif (target.indexOf(\"w\") >= 0) {\n\t\t\t\t\t\tcurrent.el.style.left = (current.oleft + lmove) + 'px';\n\t\t\t\t\t}\n\t\t\t\t\tif (target != \"n\" && target != \"s\") {\n\t\t\t\t\t\tcurrent.el.style.width = width + 'px';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (target != \"w\" && target != \"e\") {\n\t\t\t\t\theight += (target.indexOf(\"n\") >= 0)?-tmove:tmove;\n\t\t\t\t}\n\t\t\t\tif (height >= $.pdialog._op.minH) {\n\t\t\t\t\tif (target.indexOf(\"n\") >= 0) {\n\t\t\t\t\t\tcurrent.el.style.top = (current.otop + tmove) + 'px';\n\t\t\t\t\t}\n\t\t\t\t\tif (target != \"w\" && target != \"e\") {\n\t\t\t\t\t\tcurrent.el.style.height = height + 'px';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn $.layerdrag.preventEvent(e);\n        },     \n        stop: function(e) {\n                var current = $.layerdrag.current;\n                var data = $.data(current.el, 'layer-drag');\n\t\t\t\t$(document).unbind('mousemove', $.layerdrag.drag);\n\t\t\t\t$(document).unbind('mouseup', $.layerdrag.stop);\n                if (data.options.stop) {\n                        data.options.stop.apply(current.el, [ current.el ]);\n                }\n                $.layerdrag.current = null;\n\t\t\t\treturn $.layerdrag.preventEvent(e);\n        },\n\t\tpreventEvent:function(e) {\n                if (e.stopPropagation) e.stopPropagation();\n                if (e.preventDefault) e.preventDefault();\n                return false;\n\t\t}\n\t};\n})(jQuery);"
  },
  {
    "path": "js/dwz.scrollCenter.js",
    "content": "/**\n * @desc 兼容不同的浏览器居中scrollCenter\n * @author 张慧华 z@j-ui.com\n */\n(function($){\n\t$.fn.extend({\n\n\t\tgetWindowSize: function(){\n\t\t\tif ($.browser.opera) { return { width: window.innerWidth, height: window.innerHeight }; }\n\t\t\treturn { width: $(window).width(), height: $(window).height() };\n\t\t},\n\t\t/**\n\t\t * @param options\n\t\t */\t\t\n\t\tscrollCenter: function(options){\n\t\t\t// 扩展参数\n\t\t\tvar op = $.extend({ z: 1000000, mode:\"WH\"}, options);\n\t\t\t\n\t\t\t// 追加到 document.body 并设置其样式\n\t\t\tvar windowSize = this.getWindowSize();\n\n\t\t\treturn this.each(function(){\n\t\t\t\tvar $this = $(this).css({\n\t\t\t\t\t'position': 'absolute',\n\t\t\t\t\t'z-index': op.z\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\t// 当前位置参数\n\t\t\t\tvar bodyScrollTop = $(document).scrollTop();\n\t\t\t\tvar bodyScrollLeft = $(document).scrollLeft();\n\t\t\t\tvar movedivTop = (windowSize.height - $this.height()) / 2 + bodyScrollTop;\n\t\t\t\tvar movedivLeft = (windowSize.width - $this.width()) / 2 + bodyScrollLeft;\n\t\t\t\t\n\t\t\t\tif (op.mode == \"W\") {\n\t\t\t\t\t$this.appendTo(document.body).css({\n\t\t\t\t\t\t'left': movedivLeft + 'px'\n\t\t\t\t\t});\n\t\t\t\t} else if (op.model == \"H\"){\n\t\t\t\t\t$this.appendTo(document.body).css({\n\t\t\t\t\t\t'top': movedivTop + 'px'\n\t\t\t\t\t});\t\n\t\t\t\t} else {\n\t\t\t\t\t$this.appendTo(document.body).css({\n\t\t\t\t\t\t'top': (windowSize.height - $this.height()) / 2 + $(window).scrollTop() + 'px',\n\t\t\t\t\t\t'left': movedivLeft + 'px'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// 滚动事件\n\t\t\t\t$(window).scroll(function(e){\n\t\t\t\t\tvar windowSize = $this.getWindowSize();\n\t\t\t\t\tvar tmpBodyScrollTop = $(document).scrollTop();\n\t\t\t\t\tvar tmpBodyScrollLeft = $(document).scrollLeft();\n\t\t\t\t\t\n\t\t\t\t\tmovedivTop += tmpBodyScrollTop - bodyScrollTop;\n\t\t\t\t\tmovedivLeft += tmpBodyScrollLeft - bodyScrollLeft;\n\t\t\t\t\tbodyScrollTop = tmpBodyScrollTop;\n\t\t\t\t\tbodyScrollLeft = tmpBodyScrollLeft;\n\n\t\t\t\t\t// 以动画方式进行移动\n\t\t\t\t\tif (op.mode == \"W\") {\n\t\t\t\t\t\t$this.stop().animate({\n\t\t\t\t\t\t\t'left': movedivLeft + 'px'\n\t\t\t\t\t\t});\n\t\t\t\t\t} else if (op.mode == \"H\") {\n\t\t\t\t\t\t$this.stop().animate({\n\t\t\t\t\t\t\t'top': movedivTop + 'px'\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$this.stop().animate({\n\t\t\t\t\t\t\t'top': movedivTop + 'px',\n\t\t\t\t\t\t\t'left': movedivLeft + 'px'\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\t// 窗口大小重设事件\n\t\t\t\t$(window).resize(function(){\n\t\t\t\t\tvar windowSize = $this.getWindowSize();\n\t\t\t\t\tmovedivTop = (windowSize.height - $this.height()) / 2 + $(document).scrollTop();\n\t\t\t\t\tmovedivLeft = (windowSize.width - $this.width()) / 2 + $(document).scrollLeft();\n\t\t\t\t\t\n\t\t\t\t\tif (op.mode == \"W\") {\n\t\t\t\t\t\t$this.stop().animate({\n\t\t\t\t\t\t\t'left': movedivLeft + 'px'\n\t\t\t\t\t\t});\n\t\t\t\t\t} else if (op.mode == \"H\") {\n\t\t\t\t\t\t$this.stop().animate({\n\t\t\t\t\t\t\t'top': movedivTop + 'px'\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$this.stop().animate({\n\t\t\t\t\t\t\t'top': movedivTop + 'px',\n\t\t\t\t\t\t\t'left': movedivLeft + 'px'\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t});\n\t\t\t});\n\t\t\t\n\t\t}\n\t});\n})(jQuery);"
  },
  {
    "path": "js/dwz.selectedLoad.js",
    "content": "/**\n * Created by huihuazhang on 16/4/9.\n */\n(function($){\n\t$.fn.extend({\n\t\tselectedLoad: function(){\n\n\t\t\tfunction _getIds(selectedIds, targetType){\n\t\t\t\tvar ids = \"\";\n\t\t\t\tvar $box = targetType == \"dialog\" ? $.pdialog.getCurrent() : navTab.getCurrentPanel();\n\t\t\t\t$box.find(\"input:checked\").filter(\"[name='\"+selectedIds+\"']\").each(function(i){\n\t\t\t\t\tvar val = $(this).val();\n\t\t\t\t\tids += i==0 ? val : \",\"+val;\n\t\t\t\t});\n\t\t\t\treturn ids;\n\t\t\t}\n\t\t\treturn this.each(function(){\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar selectedIds = $this.attr(\"rel\") || \"ids\";\n\t\t\t\tvar postType = $this.attr(\"postType\") || \"map\";\n\n\t\t\t\t$this.click(function(){\n\t\t\t\t\tvar targetType = $this.attr(\"targetType\");\n\t\t\t\t\tvar ids = _getIds(selectedIds, targetType);\n\t\t\t\t\tif (!ids) {\n\t\t\t\t\t\talertMsg.error($this.attr(\"warn\") || DWZ.msg(\"alertSelectMsg\"));\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tfunction _doPost(){\n\t\t\t\t\t\tvar data = function(){\n\t\t\t\t\t\t\tif (postType == 'map'){\n\t\t\t\t\t\t\t\treturn $.map(ids.split(','), function(val, i) {\n\t\t\t\t\t\t\t\t\treturn {name: selectedIds, value: val};\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tvar _data = {};\n\t\t\t\t\t\t\t\t_data[selectedIds] = ids;\n\t\t\t\t\t\t\t\treturn _data;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}();\n\n\t\t\t\t\t\tif (targetType == \"dialog\") {\n\t\t\t\t\t\t\tvar options = {\n\t\t\t\t\t\t\t\ttype:'POST',\n\t\t\t\t\t\t\t\tmask:true,\n\t\t\t\t\t\t\t\twidth:$this.attr('width')||820, height:$this.attr('height')||400,\n\t\t\t\t\t\t\t\tmaxable:true,\n\t\t\t\t\t\t\t\tresizable:true,\n\t\t\t\t\t\t\t\tdata: data\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t$.pdialog.open($this.attr('href'), \"_blank\", $this.attr(\"title\") || $this.text(), options);\n\t\t\t\t\t\t} else if (targetType == \"navTab\") {\n\t\t\t\t\t\t\tnavTab.openTab(\"_blank\", $this.attr('href'),{type:'POST', title:$this.attr(\"title\") || $this.text(), data:data});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//var $form = $('<form id=\"selectedLoadForm\" method=\"post\" action=\"'+$this.attr('href')+'\" target=\"_blank\">'\n\t\t\t\t\t\t//\t+ '<input name=\"'+selectedIds+'\" value=\"'+ids+'\"/>'\n\t\t\t\t\t\t//\t+'</form>').appendTo('body');\n\t\t\t\t\t\t//$form.submit().remove();\n\t\t\t\t\t}\n\t\t\t\t\tvar title = $this.attr(\"title\");\n\t\t\t\t\tif (title) {\n\t\t\t\t\t\talertMsg.confirm(title, {okCall: _doPost});\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_doPost();\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\n\t\t\t});\n\t\t}\n\t});\n\n\tDWZ.regPlugins.push(function($p){\n\t\t$(\"a[target=selectedLoad]\", $p).selectedLoad();\n\t});\n})(jQuery);\n"
  },
  {
    "path": "js/dwz.sortDrag.js",
    "content": "/**\n * @author 张慧华 z@j-ui.com\n */\n(function ($) {\n    var _op = {\n        cursor: 'move', // selector 的鼠标手势\n        sortBoxs: 'div.sortDrag', //拖动排序项父容器\n        replace: false, //2个sortBox之间拖动替换\n        items: '> div, >dl, >p', //拖动排序项选择器\n        selector: '', //拖动排序项用于拖动的子元素的选择器，为空时等于item\n        zIndex: 1000\n    };\n    DWZ.sortDrag = {\n        _onDrag: false, //用于判断重复绑定拖动事件\n        start: function ($sortBox, $item, event, op) {\n            var me = this;\n            if (me._onDrag) {\n                setTimeout(function () {\n                    me._onDrag = false;\n                }, 500);\n                return false;\n            }\n            me._onDrag = true;\n\n            var $placeholder = this._createPlaceholder($item);\n            var $helper = $item.clone();\n            var position = $item.position();\n            var scrollPosParents = $.scrollPosParents($sortBox);\n\n            $helper.data('$sortBox', $sortBox).data('op', op).data('$item', $item).data('$placeholder', $placeholder);\n            $helper.addClass('sortDragHelper').css({\n                position: 'absolute',\n                top: position.top + scrollPosParents.top,\n                left: position.left,\n                zIndex: op.zIndex,\n                width: $item.width() + 'px',\n                height: $item.height() + 'px'\n            }).jDrag({\n                selector: op.selector,\n                drag: this.drag,\n                stop: this.stop,\n                event: event\n            });\n\n            $item.before($placeholder).before($helper).hide();\n            return false;\n        },\n        drag: function (el, event) {\n            var $helper = $(arguments[0]), $sortBox = $helper.data('$sortBox'), $placeholder = $helper.data('$placeholder');\n            var $items = $sortBox.find($helper.data('op')['items']).filter(':visible').filter(':not(.sortDragPlaceholder, .sortDragHelper)');\n            var helperPos = $helper.position(), firstPos = $items.eq(0).position();\n\n            var $overBox = DWZ.sortDrag._getOverSortBox($helper, event);\n            if ($sortBox.attr('data-over-sort') == 'true' && $overBox.length > 0 && $overBox[0] != $sortBox[0]) { //移动到其他容器\n                $placeholder.appendTo($overBox);\n                $helper.data('$sortBox', $overBox);\n            } else {\n                for (var i = 0; i < $items.length; i++) {\n                    var $this = $items.eq(i), position = $this.position();\n\n                    if (helperPos.top > position.top + 10 || helperPos.left > position.left + 10) {\n                        $this.after($placeholder);\n                    } else if (helperPos.top <= position.top || helperPos.left <= position.left) {\n                        $this.before($placeholder);\n                        break;\n                    }\n                }\n            }\n        },\n        stop: function () {\n            var $helper = $(arguments[0]), $sortBox = $helper.data('$sortBox'), $item = $helper.data('$item'), $placeholder = $helper.data('$placeholder');\n            var op = $.extend({}, _op, $helper.data('op'));\n\n            var scrollPosParents = $.scrollPosParents($sortBox);\n            var position = $placeholder.position();\n            $helper.animate({\n                    top: (position.top + scrollPosParents.top) + \"px\",\n                    left: position.left + \"px\"\n                },\n                {\n                    complete: function () {\n                        if ($helper.data('op')['replace']) { //2个sortBox之间替换处理\n                            var $srcBox = $item.parents(op.sortBoxs + \":first\");\n                            var $destBox = $placeholder.parents(op.sortBoxs + \":first\");\n                            if ($srcBox[0] != $destBox[0]) { //判断是否移动到其他容器中\n                                var $replaceItem = $placeholder.next();\n                                if ($replaceItem.length > 0) {\n                                    $replaceItem.insertAfter($item);\n                                }\n                            }\n                        }\n                        $item.insertAfter($placeholder).show();\n                        $placeholder.remove();\n                        $helper.remove();\n                    },\n                    duration: 300\n                });\n\n            DWZ.sortDrag._onDrag = false;\n        },\n        _createPlaceholder: function ($item) {\n            return $('<' + $item[0].nodeName + ' class=\"sortDragPlaceholder\"/>').css({\n                width: $item.outerWidth() + 'px',\n                height: $item.outerHeight() + 'px',\n                marginTop: $item.css('marginTop'),\n                marginRight: $item.css('marginRight'),\n                marginBottom: $item.css('marginBottom'),\n                marginLeft: $item.css('marginLeft')\n            });\n        },\n        _getOverSortBox: function ($item, e) {\n            var itemPos = $item.position(),\n                y = itemPos.top + ($item.height() / 2), x = itemPos.left + ($item.width() / 2);\n            var op = $.extend({}, _op, $item.data('op'));\n\n            return $(op.sortBoxs).filter(':visible').filter(function () {\n                var $sortBox = $(this), sortBoxPos = $sortBox.position(),\n                    sortBoxH = $sortBox.height(), sortBoxW = $sortBox.width();\n\n                return DWZ.isOver(y, x, sortBoxPos.top, sortBoxPos.left, sortBoxH, sortBoxW);\n            });\n        }\n    };\n\n    $.fn.sortDrag = function (options) {\n\n        return this.each(function () {\n            var op = $.extend({}, _op, options);\n            var $sortBox = $(this);\n\n            if ($sortBox.attr('selector')) op.selector = $sortBox.attr('selector');\n            $sortBox.find(op.items).each(function (i) {\n                var $item = $(this), $selector = $item;\n                if (op.selector) {\n                    $selector = $item.find(op.selector).css({cursor: op.cursor});\n                }\n\n                if (op.refresh) {\n                    $selector.unbind('mousedown');\n                }\n\n                $selector.mousedown(function (event) {\n\n                    if (!$sortBox.hasClass('disabled')) {\n                        DWZ.sortDrag.start($sortBox, $item, event, op);\n\n                        event.preventDefault();\n                    }\n                });\n\n            });\n\n            $sortBox.find('.close').mousedown(function (event) {\n                $(this).parent().remove();\n                return false;\n            });\n            $sortBox.find('.ctl-label').mousedown(function (event) {\n                return false;\n            });\n        });\n    }\n\n})(jQuery);\n"
  },
  {
    "path": "js/dwz.stable.js",
    "content": "/**\n * @author Roger Wu v1.0\n * @author ZhangHuihua@msn.com 2011-4-1\n */\n(function($){\n\t$.fn.jTable = function(options){\n\t\treturn this.each(function(){\n\t\t \tvar $table = $(this), nowrapTD = $table.attr(\"nowrapTD\");\n\t\t \tvar tlength = $table.width();\n\t\t\tvar aStyles = [];\n\t\t\tvar $tc = $table.parent().addClass(\"j-resizeGrid\"); // table parent container\n\t\t\tvar layoutH = $(this).attr(\"layoutH\");\n\n\t\t\tvar oldThs = $table.find(\"thead>tr:last-child\").find(\"th\");\n\n\t\t\tfor(var i = 0, l = oldThs.length; i < l; i++) {\n\t\t\t\tvar $th = $(oldThs[i]);\n\t\t\t\tvar style = [], width = $th.innerWidth() - (100 * $th.innerWidth() / tlength)-2;\n\t\t\t\tstyle[0] = parseInt(width);\n\t\t\t\tstyle[1] = $th.attr(\"align\");\n\t\t\t\taStyles[aStyles.length] = style;\n\t\t\t}\n\t\t\t$(this).wrap(\"<div class='grid'></div>\");\n\t\t\tvar $grid = $table.parent().html($table.html());\n\t\t\tvar thead = $grid.find(\"thead\");\n\t\t\tthead.wrap(\"<div class='gridHeader'><div class='gridThead'><table style='width:\" + (tlength - 20) + \"px;'></table></div></div>\");\n\n\t\t\tvar lastH = $(\">tr:last-child\", thead);\n\t\t\tvar ths = $(\">th\", lastH);\n\t\t\t$(\"th\",thead).each(function(){\n\t\t\t\tvar $th = $(this);\n\t\t\t\t$th.html(\"<div class='gridCol' title='\"+$th.text()+\"'>\"+ $th.html() +\"</div>\");\n\t\t\t});\n\n\t\t\tths.each(function(i){\n\t\t\t\tvar $th = $(this), style = aStyles[i];\n\t\t\t\t$th.addClass(style[1]).hoverClass(\"hover\").removeAttr(\"align\").removeAttr(\"width\").width(style[0]);\n\t\t\t}).filter(\"[orderField]\").orderBy({\n\t\t\t\ttargetType: $table.attr(\"targetType\"),\n\t\t\t\trel:$table.attr(\"rel\"),\n\t\t\t\tasc: $table.attr(\"asc\") || \"asc\",\n\t\t\t\tdesc:  $table.attr(\"desc\") || \"desc\"\n\t\t\t});\n\n\t\t\tvar tbody = $grid.find(\">tbody\");\n\t\t\tvar layoutStr = layoutH ? \" layoutH='\" + layoutH + \"'\" : \"\";\n\n\t\t\ttbody.wrap(\"<div class='gridScroller'\" + layoutStr + \"><div class='gridTbody'><table style='width:\" + (tlength - 20) + \"px;'></table></div></div>\");\n\t\t\tvar ftr = $(\">tr:first-child\", tbody);\n\t\t\tvar $trs = tbody.find('>tr');\n\n\t\t\t$trs.hoverClass().each(function(){\n\t\t\t\tvar $tr = $(this);\n\t\t\t\tvar $ftds = $(\">td\", this);\n\n\t\t\t\tfor (var i=0; i < $ftds.length; i++) {\n\t\t\t\t\tvar $ftd = $($ftds[i]);\n\t\t\t\t\tif (nowrapTD != \"false\") $ftd.html(\"<div>\" + $ftd.html() + \"</div>\");\n\t\t\t\t\tif (i < aStyles.length) $ftd.addClass(aStyles[i][1]);\n\t\t\t\t}\n\t\t\t\t$tr.click(function(){\n\t\t\t\t\t$trs.filter(\".selected\").removeClass(\"selected\");\n\t\t\t\t\t$tr.addClass(\"selected\");\n\t\t\t\t\tvar sTarget = $tr.attr(\"target\");\n\t\t\t\t\tif (sTarget) {\n\t\t\t\t\t\tif ($(\"#\"+sTarget, $grid).length == 0) {\n\t\t\t\t\t\t\t$grid.prepend('<input id=\"'+sTarget+'\" type=\"hidden\" />');\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(\"#\"+sTarget, $grid).val($tr.attr(\"rel\"));\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\n\t\t\t$(\">td\",ftr).each(function(i){\n\t\t\t\tif (i < aStyles.length) $(this).width(aStyles[i][0]);\n\t\t\t});\n\t\t\t$grid.append(\"<div class='resizeMarker' style='height:300px; left:57px;display:none;'></div><div class='resizeProxy' style='height:300px; left:377px;display:none;'></div>\");\n\n\t\t\tvar scroller = $(\".gridScroller\", $grid);\n\t\t\tscroller.scroll(function(event){\n\t\t\t\tvar header = $(\".gridThead\", $grid);\n\t\t\t\tif(scroller.scrollLeft() > 0){\n\t\t\t\t\theader.css(\"position\", \"relative\");\n\t\t\t\t\tvar scroll = scroller.scrollLeft();\n\t\t\t\t\theader.css(\"left\", scroller.cssv(\"left\") - scroll);\n\t\t\t\t}\n\t\t\t\tif(scroller.scrollLeft() == 0) {\n\t\t\t\t\theader.css(\"position\", \"relative\");\n\t\t\t\t\theader.css(\"left\", \"0px\");\n\t\t\t\t}\n\t\t        return false;\n\t\t\t});\n\n\n\t\t\t$(\">tr\", thead).each(function(){\n\n\t\t\t\t$(\">th\", this).each(function(i){\n\t\t\t\t\tvar th = this, $th = $(this);\n\t\t\t\t\t$th.mouseover(function(event){\n\t\t\t\t\t\tvar offset = $.jTableTool.getOffset(th, event).offsetX;\n\t\t\t\t\t\tif($th.outerWidth() - offset < 5) {\n\t\t\t\t\t\t\t$th.css(\"cursor\", \"col-resize\").mousedown(function(event){\n\t\t\t\t\t\t\t\t$(\".resizeProxy\", $grid).show().css({\n\t\t\t\t\t\t\t\t\tleft: $.jTableTool.getRight(th)- $(\".gridScroller\", $grid).scrollLeft(),\n\t\t\t\t\t\t\t\t\ttop:$.jTableTool.getTop(th),\n\t\t\t\t\t\t\t\t\theight:$.jTableTool.getHeight(th,$grid),\n\t\t\t\t\t\t\t\t\tcursor:\"col-resize\"\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t$(\".resizeMarker\", $grid).show().css({\n\t\t\t\t\t\t\t\t\t\tleft: $.jTableTool.getLeft(th) + 1 - $(\".gridScroller\", $grid).scrollLeft(),\n\t\t\t\t\t\t\t\t\t\ttop: $.jTableTool.getTop(th),\n\t\t\t\t\t\t\t\t\t\theight:$.jTableTool.getHeight(th,$grid)\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t$(\".resizeProxy\", $grid).jDrag($.extend(options, {scop:true, cellMinW:20, relObj:$(\".resizeMarker\", $grid)[0],\n\t\t\t\t\t\t\t\t\t\tmove: \"horizontal\",\n\t\t\t\t\t\t\t\t\t\tevent:event,\n\t\t\t\t\t\t\t\t\t\tstop: function(){\n\t\t\t\t\t\t\t\t\t\t\tvar pleft = $(\".resizeProxy\", $grid).position().left;\n\t\t\t\t\t\t\t\t\t\t\tvar mleft = $(\".resizeMarker\", $grid).position().left;\n\t\t\t\t\t\t\t\t\t\t\tvar move = pleft - mleft - $th.outerWidth() -9;\n\n\t\t\t\t\t\t\t\t\t\t\tvar cols = $.jTableTool.getColspan($th);\n\t\t\t\t\t\t\t\t\t\t\tvar cellNum = $.jTableTool.getCellNum($th);\n\t\t\t\t\t\t\t\t\t\t\tvar oldW = $th.width(), newW = $th.width() + move;\n\t\t\t\t\t\t\t\t\t\t\tvar $dcell = $(\">td\", ftr).eq(cellNum - 1);\n\n\t\t\t\t\t\t\t\t\t\t\t$th.width(newW + \"px\");\n\t\t\t\t\t\t\t\t\t\t\t$dcell.width(newW+\"px\");\n\n\t\t\t\t\t\t\t\t\t\t\tvar $table1 = $(thead).parent();\n\t\t\t\t\t\t\t\t\t\t\t$table1.width(($table1.width() - oldW + newW)+\"px\");\n\t\t\t\t\t\t\t\t\t\t\tvar $table2 = $(tbody).parent();\n\t\t\t\t\t\t\t\t\t\t\t$table2.width(($table2.width() - oldW + newW)+\"px\");\n\n\t\t\t\t\t\t\t\t\t\t\t$(\".resizeMarker,.resizeProxy\", $grid).hide();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$th.css(\"cursor\", $th.attr(\"orderField\") ? \"pointer\" : \"default\");\n\t\t\t\t\t\t\t$th.unbind(\"mousedown\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\n\t\t\t// function _resizeGrid(){\n\t\t\t// \t$(\"div.j-resizeGrid\").each(function(){\n\t\t\t// \t\tvar width = $(this).innerWidth();\n\t\t\t// \t\tif (width){\n\t\t\t// \t\t\t$(\"div.gridScroller\", this).width(width+\"px\");\n\t\t\t// \t\t}\n\t\t\t// \t});\n\t\t\t// }\n\t\t\t// $(window).unbind(DWZ.eventType.resizeGrid).bind(\"resizeGrid\", _resizeGrid);\n\t\t});\n\t};\n\n\n\t$.jTableTool = {\n\t\tgetLeft:function(obj) {\n\t\t\tvar width = 0;\n\t\t\t$(obj).prevAll().each(function(){\n\t\t\t\twidth += $(this).outerWidth();\n\t\t\t});\n\t\t\treturn width - 1;\n\t\t},\n\t\tgetRight:function(obj) {\n\t\t\tvar width = 0;\n\t\t\t$(obj).prevAll().addBack().each(function(){\n\t\t\t\twidth += $(this).outerWidth();\n\t\t\t});\n\t\t\treturn width - 1;\n\t\t},\n\t\tgetTop:function(obj) {\n\t\t\tvar height = 0;\n\t\t\t$(obj).parent().prevAll().each(function(){\n\t\t\t\theight += $(this).outerHeight();\n\t\t\t});\n\t\t\treturn height;\n\t\t},\n\t\tgetHeight:function(obj, parent) {\n\t\t\tvar height = 0;\n\t\t\tvar head = $(obj).parent();\n\t\t\thead.nextAll().addBack().each(function(){\n\t\t\t\theight += $(this).outerHeight();\n\t\t\t});\n\t\t\t$(\".gridTbody\", parent).children().each(function(){\n\t\t\t\theight += $(this).outerHeight();\n\t\t\t});\n\t\t\treturn height;\n\t\t},\n\t\tgetCellNum:function(obj) {\n\t\t\treturn $(obj).prevAll().addBack().length;\n\t\t},\n\t\tgetColspan:function(obj) {\n\t\t\treturn $(obj).attr(\"colspan\") || 1;\n\t\t},\n\t\tgetStart:function(obj) {\n\t\t\tvar start = 1;\n\t\t\t$(obj).prevAll().each(function(){\n\t\t\t\tstart += parseInt($(this).attr(\"colspan\") || 1);\n\t\t\t});\n\t\t\treturn start;\n\t\t},\n\t\tgetPageCoord:function(element){\n\t\t\tvar coord = {x: 0, y: 0};\n\t\t\twhile (element){\n\t\t\t    coord.x += element.offsetLeft;\n\t\t\t    coord.y += element.offsetTop;\n\t\t\t    element = element.offsetParent;\n\t\t\t}\n\t\t\treturn coord;\n\t\t},\n\t\tgetOffset:function(obj, evt){\n\t\t\tif(/msie/.test(navigator.userAgent.toLowerCase())) {\n\t\t\t\tvar objset = $(obj).offset();\n\t\t\t\tvar evtset = {\n\t\t\t\t\toffsetX:evt.pageX || evt.screenX,\n\t\t\t\t\toffsetY:evt.pageY || evt.screenY\n\t\t\t\t};\n\t\t\t\tvar offset ={\n\t\t\t    \toffsetX: evtset.offsetX - objset.left,\n\t\t\t    \toffsetY: evtset.offsetY - objset.top\n\t\t\t\t};\n\t\t\t\treturn offset;\n\t\t\t}\n\t\t\tvar target = evt.target;\n\t\t\tif (target.offsetLeft == undefined){\n\t\t\t    target = target.parentNode;\n\t\t\t}\n\t\t\tvar pageCoord = $.jTableTool.getPageCoord(target);\n\t\t\tvar eventCoord ={\n\t\t\t    x: window.pageXOffset + evt.clientX,\n\t\t\t    y: window.pageYOffset + evt.clientY\n\t\t\t};\n\t\t\tvar offset ={\n\t\t\t    offsetX: eventCoord.x - pageCoord.x,\n\t\t\t    offsetY: eventCoord.y - pageCoord.y\n\t\t\t};\n\t\t\treturn offset;\n\t\t}\n\t};\n})(jQuery);\n\n"
  },
  {
    "path": "js/dwz.switchEnv.js",
    "content": "/**\n * @author zhanghuihua@msn.com\n */\n(function($){\n\t$.fn.navMenu = function(){\n\t\treturn this.each(function(){\n\t\t\tvar $box = $(this);\n\t\t\t$box.find(\"li>a\").click(function(){\n\t\t\t\tvar $a = $(this);\n\t\t\t\t$.post($a.attr(\"href\"), {}, function(html){\n\t\t\t\t\t$(\"#sidebar\").find(\".accordion\").remove().end().append(html).initUI();\n\t\t\t\t\t$box.find(\"li\").removeClass(\"selected\");\n\t\t\t\t\t$a.parent().addClass(\"selected\");\n\t\t\t\t\tnavTab.closeAllTab();\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t});\n\t\t});\n\t}\n\t\n\t$.fn.switchEnv = function(){\n\t\tvar op = {cities$:\">ul>li\", boxTitle$:\">a>span\"};\n\t\treturn this.each(function(){\n\t\t\tvar $this = $(this);\n\t\t\t$this.click(function(){\n\t\t\t\tif ($this.hasClass(\"selected\")){\n\t\t\t\t\t_hide($this);\n\t\t\t\t} else {\n\t\t\t\t\t_show($this);\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t});\n\t\t\t\n\t\t\t$this.find(op.cities$).click(function(){\n\t\t\t\tvar $li = $(this);\n\n\t\t\t\t$.post($li.find(\">a\").attr(\"href\"), {}, function(html){\n\t\t\t\t\t_hide($this);\n\t\t\t\t\t$this.find(op.boxTitle$).html($li.find(\">a\").html());\n\t\t\t\t\tnavTab.closeAllTab();\n\t\t\t\t\t$(\"#sidebar\").find(\".accordion\").remove().end().append(html).initUI();\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t});\n\t\t});\n\t}\n\t\n\tfunction _show($box){\n\t\t$box.addClass(\"selected\");\n\t\t$(document).bind(\"click\",{box:$box}, _handler);\n\t}\n\tfunction _hide($box){\n\t\t$box.removeClass(\"selected\");\n\t\t$(document).unbind(\"click\", _handler);\n\t}\n\t\n\tfunction _handler(event){\n\t\t_hide(event.data.box);\n\t}\n})(jQuery);\n\n\n"
  },
  {
    "path": "js/dwz.tab.js",
    "content": "/**\n * @author 张慧华 z@j-ui.com\n *\n */\n(function($){\n\t$.fn.extend({\n\n\t\t/**\n\t\t * options: reverse[true, false], eventType[click, hover], currentIndex[default index 0]\n\t\t * \t\t\tstTab[tabs selector], stTabPanel[tab panel selector]\n\t\t * \t\t\tajaxClass[ajax load], closeClass[close tab]\n\t\t */\n\t\ttabs: function (options){\n\t\t\tvar op = $.extend({reverse:false, eventType:\"click\", currentIndex:0, stTabHeader:\"> .tabsHeader\", stTab:\">.tabsHeaderContent>ul\", stTabPanel:\"> .tabsContent\", ajaxClass:\"j-ajax\", closeClass:\"close\", prevClass:\"tabsLeft\", nextClass:\"tabsRight\"}, options);\n\n\t\t\treturn this.each(function(){\n\t\t\t\tinitTab($(this));\n\t\t\t});\n\n\t\t\tfunction initTab(jT){\n\t\t\t\tvar jSelector = jT.add($(\"> *\", jT));\n\t\t\t\tvar jTabHeader = $(op.stTabHeader, jSelector);\n\t\t\t\tvar jTabs = $(op.stTab + \" li\", jTabHeader);\n\t\t\t\tvar jGroups = $(op.stTabPanel + \" > *\", jSelector);\n\n\t\t\t\tjTabs.unbind().find(\"a\").unbind();\n\t\t\t\tjTabHeader.find(\".\"+op.prevClass).unbind();\n\t\t\t\tjTabHeader.find(\".\"+op.nextClass).unbind();\n\n\t\t\t\tjTabs.each(function(iTabIndex){\n\t\t\t\t\tif (op.currentIndex == iTabIndex) $(this).addClass(\"selected\");\n\t\t\t\t\telse $(this).removeClass(\"selected\");\n\n\t\t\t\t\tif (op.eventType == \"hover\") $(this).hover(function(event){switchTab(jT, iTabIndex)});\n\t\t\t\t\telse $(this).click(function(event){switchTab(jT, iTabIndex)});\n\n\t\t\t\t\t$(\"a\", this).each(function(){\n\t\t\t\t\t\tvar $link = $(this);\n\t\t\t\t\t\tif ($link.hasClass(op.ajaxClass)) {\n\t\t\t\t\t\t\t$link.click(function(event){\n\t\t\t\t\t\t\t\tvar jGroup = jGroups.eq(iTabIndex);\n\t\t\t\t\t\t\t\tif (this.href && ($(this).attr('data-cache') == 'false' ||!jGroup.attr(\"loaded\")) ) jGroup.loadUrl(this.href,{},function(){\n\t\t\t\t\t\t\t\t\tjGroup.find(\"[layoutH]\").layoutH();\n\t\t\t\t\t\t\t\t\tjGroup.attr(\"loaded\",true);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t} else if ($link.hasClass(op.closeClass)) {\n\t\t\t\t\t\t\t$link.click(function(event){\n\t\t\t\t\t\t\t\tjTabs.eq(iTabIndex).remove();\n\t\t\t\t\t\t\t\tjGroups.eq(iTabIndex).remove();\n\t\t\t\t\t\t\t\tif (iTabIndex == op.currentIndex) {\n\t\t\t\t\t\t\t\t\top.currentIndex = (iTabIndex+1 < jTabs.length) ? iTabIndex : iTabIndex - 1;\n\t\t\t\t\t\t\t\t} else if (iTabIndex < op.currentIndex){\n\t\t\t\t\t\t\t\t\top.currentIndex = iTabIndex;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tinitTab(jT);\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\tswitchTab(jT, op.currentIndex);\n\n\t\t\t\t// 折叠tab\n\t\t\t\tvar collapse = jT.hasClass(\"collapse\"),\n\t\t\t\t\t$tabsHeaderContent = jTabHeader.find('>.tabsHeaderContent');\n\t\t\t\tvar collapseFn = function(event){\n\t\t\t\t\tif (jT.hasClass(\"close\")) {\n\t\t\t\t\t\tjT.removeClass('close');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjT.addClass('close');\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tif(collapse){\n\t\t\t\t\tvar $icon = $('<a href=\"javascript:\" class=\"icon-collapse\"></a>').addClass(close?op.exp:op.coll).insertAfter($tabsHeaderContent);\n\t\t\t\t\t$icon.click(collapseFn);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction switchTab(jT, iTabIndex){\n\t\t\t\tvar jSelector = jT.add($(\"> *\", jT));\n\t\t\t\tvar jTabHeader = $(op.stTabHeader, jSelector);\n\t\t\t\tvar jTabs = $(op.stTab + \" li\", jTabHeader);\n\t\t\t\tvar jGroups = $(op.stTabPanel + \" > *\", jSelector);\n\n\t\t\t\tvar jTab = jTabs.eq(iTabIndex);\n\t\t\t\tvar jGroup = jGroups.eq(iTabIndex);\n\t\t\t\tif (op.reverse && (jTab.hasClass(\"selected\") )) {\n\t\t\t\t\tjTabs.removeClass(\"selected\");\n\t\t\t\t\tjGroups.hide();\n\t\t\t\t} else {\n\t\t\t\t\top.currentIndex = iTabIndex;\n\t\t\t\t\tjTabs.removeClass(\"selected\");\n\t\t\t\t\tjTab.addClass(\"selected\");\n\n\t\t\t\t\tjGroups.hide().eq(op.currentIndex).show();\n\t\t\t\t}\n\n\t\t\t\tif (!jGroup.attr(\"inited\")){\n\t\t\t\t\tjGroup.attr(\"inited\", 1000).find(\"input[type=text]\").filter(\"[alt]\").inputAlert();\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t});\n})(jQuery);\n"
  },
  {
    "path": "js/dwz.taskBar.js",
    "content": "/**\n * @author Roger Wu\n * @version 1.0\n */\n(function($){\n\n\t$.fn.extend({\n\t\tjTask:function(options){\n\t\t\treturn this.each(function(){\n\t\t\t\tvar $task = $(this);\n\t\t\t\tvar id = $task.attr(\"id\");\n\t\t\t\t$task.click(function(e){\n\t\t\t\t\tvar dialog = $(\"body\").data(id);\n\t\t\t\t\tif ($task.hasClass(\"selected\")) {\n\t\t\t\t\t\t$(\"a.minimize\", dialog).trigger(\"click\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (dialog.is(\":hidden\")) {\n\t\t\t\t\t\t\t$.taskBar.restoreDialog(dialog);\n\t\t\t\t\t\t} else\n\t\t\t\t\t\t\t$(dialog).trigger(\"click\");\n\t\t\t\t\t}\n\t\t\t\t\t$.taskBar.scrollCurrent($(this));\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\t\t\t\t$(\"div.close\", $task).click(function(e){\n\t\t\t\t\t$.pdialog.close(id)\n\t\t\t\t\treturn false;\n\t\t\t\t}).hoverClass(\"closeHover\");\n\n\t\t\t\t$task.hoverClass(\"hover\");\n\t\t\t});\n\t\t}\n\t});\n\t$.taskBar = {\n\t\t_taskBar:null,\n\t\t_taskBox:null,\n\t\t_prevBut:null,\n\t\t_nextBut:null,\n\t\t_op:{id:\"taskbar\", taskBox:\"div.taskbarContent\",prevBut:\".taskbarLeft\",prevDis:\"taskbarLeftDisabled\", nextBut:\".taskbarRight\",nextDis:\"taskbarRightDisabled\", selected:\"selected\",boxMargin:\"taskbarMargin\"},\n\t\tinit:function(options) {\n\t\t\tvar $this = this;\n\t\t\t$.extend(this._op, options);\n\t\t\tthis._taskBar = $(\"#\" + this._op.id);\n\t\t\tif (this._taskBar.length == 0) {\n\t\t\t\tthis._taskBar = $(DWZ.frag[\"taskbar\"]).appendTo($(\"#layout\"));\n\n\t\t\t\tthis._taskBar.find(\".taskbarLeft\").hoverClass(\"taskbarLeftHover\");\n\t\t\t\tthis._taskBar.find(\".taskbarRight\").hoverClass(\"taskbarRightHover\");\n\t\t\t}\n\t\t\tthis._taskBox = this._taskBar.find(this._op.taskBox);\n\t\t\tthis._taskList = this._taskBox.find(\">ul\");\n\t\t\tthis._prevBut = this._taskBar.find(this._op.prevBut);\n\t\t\tthis._nextBut = this._taskBar.find(this._op.nextBut);\n\t\t\tthis._prevBut.click(function(e){$this.scrollLeft()});\n\t\t\tthis._nextBut.click(function(e){$this.scrollRight()});\n\n\t\t\tthis._contextmenu(this._taskBox); // taskBar右键菜单\n\t\t},\n\n\t\t_contextmenu:function(obj) {\n\t\t\t$(obj).contextMenu('dialogCM', {\n\t\t\t\tbindings:{\n\t\t\t\t\tcloseCurrent:function(t,m){\n\t\t\t\t\t\tvar obj = t.isTag(\"li\")?t:$.taskBar._getCurrent();\n\t\t\t\t\t\t$(\"div.close\", obj).trigger(\"click\");\n\t\t\t\t\t},\n\t\t\t\t\tcloseOther:function(t,m){\n\t\t\t\t\t\tvar selector = t.isTag(\"li\")?(\"#\" +t.attr(\"id\")):\".selected\";\n\t\t\t\t\t\tvar tasks = $.taskBar._taskList.find(\">li:not(:\"+selector+\")\");\n\t\t\t\t\t\ttasks.each(function(i){\n\t\t\t\t\t\t\t$(\"div.close\",tasks[i]).trigger(\"click\");\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\tcloseAll:function(t,m){\n\t\t\t\t\t\tvar tasks = $.taskBar._getTasks();\n\t\t\t\t\t\ttasks.each(function(i){\n\t\t\t\t\t\t\t$(\"div.close\",tasks[i]).trigger(\"click\");\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tctrSub:function(t,m){\n\t\t\t\t\tvar mCur = m.find(\"[rel='closeCurrent']\");\n\t\t\t\t\tvar mOther = m.find(\"[rel='closeOther']\");\n\t\t\t\t\tif(!$.taskBar._getCurrent()[0]) {\n\t\t\t\t\t\tmCur.addClass(\"disabled\");\n\t\t\t\t\t\tmOther.addClass(\"disabled\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif($.taskBar._getTasks().length == 1)\n\t\t\t\t\t\t\tmOther.addClass(\"disabled\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\t_scrollCurrent:function(){\n\t\t\tvar iW = this._tasksW(this._getTasks());\n\t\t\tif (iW > this._getTaskBarW()) {\n\t\t\t\tvar $this = this;\n\t\t\t\tvar lTask = $(\">li:last-child\", this._taskList);\n\t\t\t\tvar left = this._getTaskBarW() - lTask.position().left - lTask.outerWidth(true);\n\t\t\t\tthis._taskList.animate({\n\t\t\t\t\tleft: left + 'px'\n\t\t\t\t}, 200, function(){\n\t\t\t\t\t$this._ctrlScrollBut();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis._ctrlScrollBut();\n\t\t\t}\n\t\t},\n\t\t_getTaskBarW:function(){\n\t\t\treturn this._taskBox.width()- (this._prevBut.is(\":hidden\")?this._prevBut.width()+2:0) - (this._nextBut.is(\":hidden\")?this._nextBut.width()+2:0);\n\t\t},\n\t\t_scrollTask:function(task){\n\t\t\tvar $this = this;\n\t\t\tif(task.position().left + this._getLeft()+task.outerWidth() > this._getBarWidth()) {\n\t\t\t\tvar left = this._getTaskBarW()- task.position().left  - task.outerWidth(true) - 2;\n\t\t\t\tthis._taskList.animate({left: left + 'px'}, 200, function(){\n\t\t\t\t\t$this._ctrlScrollBut();\n\t\t\t\t});\n\t\t\t} else if(task.position().left + this._getLeft() < 0) {\n\t\t\t\tvar left = this._getLeft()-(task.position().left + this._getLeft());\n\t\t\t\tthis._taskList.animate({left: left + 'px'}, 200, function(){\n\t\t\t\t\t$this._ctrlScrollBut();\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * 控制左右移动按钮何时显示与隐藏\n\t\t */\n\t\t_ctrlScrollBut:function(){\n\t\t\tvar iW = this._tasksW(this._getTasks());\n\t\t\tif (this._getTaskBarW() > iW) {\n\t\t\t\tthis._taskBox.removeClass(this._op.boxMargin);\n\t\t\t\tthis._nextBut.hide();\n\t\t\t\tthis._prevBut.hide();\n\t\t\t\tif(this._getTasks().eq(0)[0])this._scrollTask(this._getTasks().eq(0));\n\t\t\t} else {\n\t\t\t\tthis._taskBox.addClass(this._op.boxMargin);\n\t\t\t\tthis._nextBut.show().removeClass(this._op.nextDis);\n\t\t\t\tthis._prevBut.show().removeClass(this._op.prevDis);\n\t\t\t\tif (this._getLeft() >= 0){\n\t\t\t\t\tthis._prevBut.addClass(this._op.prevDis);\n\t\t\t\t}\n\t\t\t\tif (this._getLeft() <= this._getTaskBarW() - iW) {\n\t\t\t\t\tthis._nextBut.addClass(this._op.nextDis);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t_getLeft: function(){\n\t\t\treturn this._taskList.position().left;\n\t\t},\n\t\t/**\n\t\t * 取得第一个完全显示在taskbar上的任务\n\t\t */\n\t\t_visibleStart: function(){\n\t\t\tvar iLeft = this._getLeft();\n\t\t\tvar jTasks = this._getTasks();\n\t\t\tfor (var i=0; i<jTasks.length; i++){\n\t\t\t\tif (jTasks.eq(i).position().left + jTasks.eq(i).outerWidth(true) + iLeft >= 0) return jTasks.eq(i);\n\t\t\t}\n\t\t\treturn jTasks.eq(0);\n\t\t},\n\t\t/**\n\t\t * 取得最后一个完全显示在taskbar上的任务\n\t\t */\n\t\t_visibleEnd: function(){\n\t\t\tvar iLeft = this._getLeft();\n\t\t\tvar jTasks = this._getTasks();\n\t\t\tfor (var i=0; i<jTasks.length; i++){\n\t\t\t\tif (jTasks.eq(i).position().left + jTasks.eq(i).outerWidth(true) + iLeft > this._getBarWidth()) return jTasks.eq(i);\n\t\t\t}\n\t\t\treturn jTasks.eq(jTasks.length-1);\n\t\t},\n\t\t/**\n\t\t * 取得所有的任务\n\t\t */\n\t\t_getTasks:function(){\n\t\t\treturn this._taskList.find(\">li\");\n\t\t},\n\t\t/**\n\t\t * 计算所传入的所有任务的宽度和\n\t\t * @param {Object} jTasks\n\t\t */\n\t\t_tasksW:function(jTasks){\n\t\t\tvar iW = 0;\n\t\t\tjTasks.each(function(){\n\t\t\t\tiW += $(this).outerWidth(true);\n\t\t\t});\n\t\t\treturn iW;\n\t\t},\n\t\t_getBarWidth: function() {\n\t\t\treturn this._taskBar.innerWidth();\n\t\t},\n\t\t/**\n\t\t * 在任务栏上新加一个任务\n\t\t * @param {Object} id\n\t\t * @param {Object} title\n\t\t */\n\t\taddDialog: function(id, title){\n\t\t\tthis.show();\n\t\t\tvar task = $(\"#\"+id,this._taskList);\n\t\t\tif (!task[0]) {\n\t\t\t\tvar taskFrag = '<li id=\"#taskid#\"><div class=\"taskbutton\"><span>#title#</span></div><div class=\"close\">Close</div></li>';\n\t\t\t\tthis._taskList.append(taskFrag.replace(\"#taskid#\", id).replace(\"#title#\", title));\n\t\t\t\ttask = $(\"#\"+id,this._taskList);\n\t\t\t\ttask.jTask();\n\t\t\t} else {\n\t\t\t\t$(\">div>span\", task).text(title);\n\t\t\t}\n\t\t\tthis._contextmenu(task);\n\t\t\tthis.switchTask(id);\n\t\t\tthis._scrollTask(task);\n\t\t},\n\t\t/**\n\t\t * 关闭一个任务\n\t\t * @param {Object} id\n\t\t */\n\t\tcloseDialog: function(obj){\n\t\t\tvar task = (typeof obj == 'string')? $(\"#\"+obj, this._taskList):obj;\n\n\t\t\tif (task.length == 0) return; // fix bug for minable=false\n\n\t\t\ttask.remove();\n\t\t\tif(this._getTasks().length == 0){\n\t\t\t\tthis.hide();\n\t\t\t}\n\t\t\tthis._scrollCurrent();\n\t\t},\n\t\t/**\n\t\t *\n\t\t * @param {Object} id or dialog\n\t\t */\n\t\trestoreDialog:function(obj){\n\t\t\tvar dialog = (typeof obj == 'string')?$(\"body\").data(obj):obj;\n\t\t\tvar id = (typeof obj == 'string')?obj:dialog.data(\"id\");\n\t\t\tvar task = $.taskBar.getTask(id);\n\t\t\t$(\".resizable\").css({top: $(window).height()-60,left:$(task).position().left,height:$(task).outerHeight(),width:$(task).outerWidth()\n\t\t\t}).show().animate({top:$(dialog).css(\"top\"),left: $(dialog).css(\"left\"),width:$(dialog).css(\"width\"),height:$(dialog).css(\"height\")},250,function(){\n\t\t\t\t$(this).hide();\n\t\t\t\t$(dialog).show();\n\t\t\t\t$.pdialog.attachShadow(dialog);\n\t\t\t});\n\t\t\t$.taskBar.switchTask(id);\n\t\t},\n\t\t/**\n\t\t * 把任务变成不是当前的\n\t\t * @param {Object} id\n\t\t */\n\t\tinactive:function(id){\n\t\t\t$(\"#\" + id, this._taskList).removeClass(\"selected\");\n\t\t},\n\t\t/**\n\t\t * 向左移一个任务\n\t\t */\n\t\tscrollLeft: function(){\n\t\t\tvar task = this._visibleStart();\n\t\t\tthis._scrollTask(task);\n\t\t},\n\t\t/**\n\t\t * 向右移一个任务\n\t\t */\n\t\tscrollRight: function(){\n\t\t\tvar task = this._visibleEnd();\n\t\t\tthis._scrollTask(task);\n\t\t},\n\t\t/**\n\t\t * 移出当前点击的任务\n\t\t * @param {Object} task\n\t\t */\n\t\tscrollCurrent:function(task){\n\t\t\tthis._scrollTask(task);\n\t\t},\n\t\t/**\n\t\t * 切换任务\n\t\t * @param {Object} id\n\t\t */\n\t\tswitchTask:function(id) {\n\t\t\tthis._getCurrent().removeClass(\"selected\");\n\t\t\tthis.getTask(id).addClass(\"selected\");\n\t\t},\n\t\t_getCurrent:function() {\n\t\t\treturn this._taskList.find(\">.selected\");\n\t\t},\n\t\tgetTask:function(id) {\n\t\t\treturn $(\"#\" + id, this._taskList);\n\t\t},\n\t\t/**\n\t\t * 显示任务栏\n\t\t */\n\t\tshow:function(){\n\t\t\tif (this._taskBar.is(\":hidden\")) {\n\t\t\t\tthis._taskBar.css(\"top\", $(window).height() - 34 + this._taskBar.outerHeight()).show();\n\t\t\t\tthis._taskBar.animate({\n\t\t\t\t\ttop: $(window).height() - this._taskBar.outerHeight()\n\t\t\t\t}, 500);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * 隐藏任务栏\n\t\t */\n\t\thide:function(){\n\t\t\tthis._taskBar.animate({\n\t\t\t\ttop: $(window).height() - 29 + this._taskBar.outerHeight(true)\n\t\t\t}, 500,function(){\n\t\t\t\t$.taskBar._taskBar.hide();\n\t\t\t});\n\t\t}\n\t}\n})(jQuery);\n"
  },
  {
    "path": "js/dwz.theme.js",
    "content": "/**\n * Theme Plugins\n * @author 张慧华 z@j-ui.com\n */\n(function($){\n\t$.fn.extend({\n\t\ttheme: function(options){\n\t\t\tvar op = $.extend({themeBase:\"themes\"}, options);\n\t\t\tvar _themeHref = op.themeBase + \"/#theme#/style.css\";\n\t\t\treturn this.each(function(){\n\t\t\t\tvar jThemeLi = $(this).find(\">li[theme]\");\n\t\t\t\tvar setTheme = function(themeName){\n\t\t\t\t\t$(\"head\").find(\"link[href$='style.css']\").attr(\"href\", _themeHref.replace(\"#theme#\", themeName));\n\t\t\t\t\tjThemeLi.find(\">div\").removeClass(\"selected\");\n\t\t\t\t\tjThemeLi.filter(\"[theme=\"+themeName+\"]\").find(\">div\").addClass(\"selected\");\n\t\t\t\t\t\n\t\t\t\t\tif ($.isFunction($.cookie)) $.cookie(\"dwz_theme\", themeName);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tjThemeLi.each(function(index){\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tvar themeName = $this.attr(\"theme\");\n\t\t\t\t\t$this.addClass(themeName).click(function(){\n\t\t\t\t\t\tsetTheme(themeName);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\tif ($.isFunction($.cookie)){\n\t\t\t\t\tvar themeName = $.cookie(\"dwz_theme\");\n\t\t\t\t\tif (themeName) {\n\t\t\t\t\t\tsetTheme(themeName);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t});\n\t\t}\n\t});\n})(jQuery);\n"
  },
  {
    "path": "js/dwz.tree.js",
    "content": "/**\n * @author Roger Wu\n * @version 1.0\n * added extend property oncheck\n */\n (function($){\n \t$.extend($.fn, {\n\t\tjTree:function(options) {\n\t\t\tvar op = $.extend({checkFn:null, selected:\"selected\", exp:\"expandable\", coll:\"collapsable\", firstExp:\"first_expandable\", firstColl:\"first_collapsable\", lastExp:\"last_expandable\", lastColl:\"last_collapsable\", folderExp:\"folder_expandable\", folderColl:\"folder_collapsable\", endExp:\"end_expandable\", endColl:\"end_collapsable\",file:\"file\",ck:\"checked\", unck:\"unchecked\"}, options);\n\t\t\treturn this.each(function(){\n\t\t\t\tvar $this = $(this);\n\t\t\t\tvar cnum = $this.children().length;\n\t\t\t\t$(\">li\", $this).each(function(){\n\t\t\t\t\tvar $li = $(this);\n\n\t\t\t\t\tvar first = $li.prev()[0]?false:true;\n\t\t\t\t\tvar last = $li.next()[0]?false:true;\n\t\t\t\t\t$li.genTree({\n\t\t\t\t\t\ticon:$this.hasClass(\"treeFolder\"),\n\t\t\t\t\t\tckbox:$this.hasClass(\"treeCheck\"),\n\t\t\t\t\t\toptions: op,\n\t\t\t\t\t\tlevel: 0,\n\t\t\t\t\t\texp:(cnum>1?(first?op.firstExp:(last?op.lastExp:op.exp)):op.endExp),\n\t\t\t\t\t\tcoll:(cnum>1?(first?op.firstColl:(last?op.lastColl:op.coll)):op.endColl),\n\t\t\t\t\t\tshowSub:(!$this.hasClass(\"collapse\") && ($this.hasClass(\"expand\") || (cnum>1?(first?true:false):true))),\n\t\t\t\t\t\tisLast:(cnum>1?(last?true:false):true)\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tsetTimeout(function(){\n\t\t\t\t\tif($this.hasClass(\"treeCheck\")){\n\t\t\t\t\t\tvar checkFn = eval($this.attr(\"oncheck\"));\n\t\t\t\t\t\tif(checkFn && $.isFunction(checkFn)) {\n\t\t\t\t\t\t\t$(\"div.ckbox\", $this).each(function(){\n\t\t\t\t\t\t\t\tvar ckbox = $(this);\n\t\t\t\t\t\t\t\tckbox.click(function(){\n\t\t\t\t\t\t\t\t\tvar checked = $(ckbox).hasClass(\"checked\");\n\t\t\t\t\t\t\t\t\tvar tnode = ckbox.parent().parent();\n\t\t\t\t\t\t\t\t\tvar boxes = $(\"input\", tnode);\n\t\t\t\t\t\t\t\t\tvar items = [];\n\n\t\t\t\t\t\t\t\t\tif(boxes.length > 1) {\n\t\t\t\t\t\t\t\t\t\t$(boxes).each(function(){\n\t\t\t\t\t\t\t\t\t\t\titems[items.length] = {name:$(this).attr(\"name\"), value:$(this).val(), text:$(this).attr(\"text\")};\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\titems = {name:boxes.attr(\"name\"), value:boxes.val(), text:boxes.attr(\"text\")};\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tvar parents = [];\n\t\t\t\t\t\t\t\t\ttnode.parents('li').each(function () {\n\t\t\t\t\t\t\t\t\t\tvar $pNode = $(this), $pCkbox = $pNode.find('>div>div.ckbox');\n\n\t\t\t\t\t\t\t\t\t\t$pCkbox.find('input').each(function(){\n\t\t\t\t\t\t\t\t\t\t\tvar pValue = {\n\t\t\t\t\t\t\t\t\t\t\t\tname:$(this).attr(\"name\"),\n\t\t\t\t\t\t\t\t\t\t\t\tvalue:$(this).val(),\n\t\t\t\t\t\t\t\t\t\t\t\ttext:$(this).attr(\"text\"),\n\t\t\t\t\t\t\t\t\t\t\t\tchecked:$pCkbox.hasClass('checked'),\n\t\t\t\t\t\t\t\t\t\t\t\tindeterminate:$pCkbox.hasClass('indeterminate')\n\t\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\t\tparents.push(pValue);\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\tcheckFn({checked:checked, items:items, parents:parents});\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t$(\"a\", $this).click(function(event){\n\t\t\t\t\t\t$(\"div.\" + op.selected, $this).removeClass(op.selected);\n\t\t\t\t\t\tvar parent = $(this).parent().addClass(op.selected);\n\t\t\t\t\t\tvar $li = $(this).parents(\"li:first\"), sTarget = $li.attr(\"target\");\n\t\t\t\t\t\tif (sTarget) {\n\t\t\t\t\t\t\tif ($(\"#\"+sTarget, $this).length == 0) {\n\t\t\t\t\t\t\t\t$this.prepend('<input id=\"'+sTarget+'\" type=\"hidden\" />');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t$(\"#\"+sTarget, $this).val($li.attr(\"rel\"));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t$(\".ckbox\",parent).trigger(\"click\");\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t$(document).trigger(\"click\");\n\t\t\t\t\t\tif (!$(this).attr(\"target\")) return false;\n\t\t\t\t\t});\n\t\t\t\t},1);\n\t\t\t});\n\t\t},\n\t\tsubTree:function(op, level) {\n\t\t\treturn this.each(function(){\n\t\t\t\t$(\">li\", this).each(function(){\n\t\t\t\t\tvar $this = $(this);\n\n\t\t\t\t\tvar isLast = ($this.next()[0]?false:true);\n\t\t\t\t\t$this.genTree({\n\t\t\t\t\t\ticon:op.icon,\n\t\t\t\t\t\tckbox:op.ckbox,\n\t\t\t\t\t\texp:isLast?op.options.lastExp:op.options.exp,\n\t\t\t\t\t\tcoll:isLast?op.options.lastColl:op.options.coll,\n\t\t\t\t\t\toptions:op.options,\n\t\t\t\t\t\tlevel:level,\n\t\t\t\t\t\tspace:isLast?null:op.space,\n\t\t\t\t\t\tshowSub:op.showSub,\n\t\t\t\t\t\tisLast:isLast\n\t\t\t\t\t});\n\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\t\tgenTree:function(options) {\n\t\t\tvar op = $.extend({icon:options.icon,ckbox:options.ckbox,exp:\"\", coll:\"\", showSub:false, level:0, options:null, isLast:false}, options);\n\t\t\treturn this.each(function(){\n\t\t\t\tvar node = $(this);\n\t\t\t\tvar tree = $(\">ul\", node);\n\t\t\t\tvar parent = node.parent().prev();\n\t\t\t\tvar checked = 'unchecked';\n\t\t\t\tif(op.ckbox) {\n\t\t\t\t\tif($(\">.checked\",parent).length > 0) checked = 'checked';\n\t\t\t\t}\n\t\t\t\tif (tree.length>0) {\n\t\t\t\t\tnode.children(\":first\").wrap(\"<div></div>\");\n\t\t\t\t\t$(\">div\", node).prepend(\"<div class='\" + (op.showSub ? op.coll : op.exp) + \"'></div>\"+(op.ckbox ?\"<div class='ckbox \" + checked + \"'></div>\":\"\")+(op.icon?\"<div class='\"+ (op.showSub ? op.options.folderColl : op.options.folderExp) +\"'></div>\":\"\"));\n\t\t\t\t\top.showSub ? tree.show() : tree.hide();\n\t\t\t\t\t$(\">div>div:first,>div>a\", node).click(function(){\n\t\t\t\t\t\tvar $fnode = $(\">li:first\",tree);\n\t\t\t\t\t\tif($fnode.children(\":first\").isTag('a')) tree.subTree(op, op.level + 1);\n\t\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\t\tvar isA = $this.isTag('a');\n\t\t\t\t\t\tvar $this = isA?$(\">div>div\", node).eq(op.level):$this;\n\t\t\t\t\t\tif (!isA || tree.is(\":hidden\")) {\n\t\t\t\t\t\t\t$this.toggleClass(op.exp).toggleClass(op.coll);\n\t\t\t\t\t\t\tif (op.icon) {\n\t\t\t\t\t\t\t\t$(\">div>div:last\", node).toggleClass(op.options.folderExp).toggleClass(op.options.folderColl);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t(tree.is(\":hidden\"))?tree.slideDown(\"fast\"):(isA?\"\":tree.slideUp(\"fast\"));\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t});\n\t\t\t\t\taddSpace(op.level, node);\n\t\t\t\t\tif(op.showSub) tree.subTree(op, op.level + 1);\n\t\t\t\t} else {\n\t\t\t\t\tnode.children().wrap(\"<div></div>\");\n\t\t\t\t\t$(\">div\", node).prepend('<div class=\"node\"></div>'+(op.ckbox?'<div class=\"ckbox '+checked+'\"></div>':'')+(op.icon?'<div class=\"'+(node.attr('data-icon') || 'file')+'\"></div>':''));\n\t\t\t\t\taddSpace(op.level, node);\n\t\t\t\t\tif(op.isLast)$(node).addClass(\"last\");\n\t\t\t\t}\n\t\t\t\tif (op.ckbox) node._check(op);\n\t\t\t\t$(\">div\",node).mouseover(function(){\n\t\t\t\t\t$(this).addClass(\"hover\");\n\t\t\t\t}).mouseout(function(){\n\t\t\t\t\t$(this).removeClass(\"hover\");\n\t\t\t\t});\n\t\t\t\tif(/msie/.test(navigator.userAgent.toLowerCase()))\n\t\t\t\t\t$(\">div\",node).click(function(){\n\t\t\t\t\t\t$(\"a\", this).trigger(\"click\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t});\n\t\t\t});\n\t\t\tfunction addSpace(level,node) {\n\t\t\t\tif (level > 0) {\n\t\t\t\t\tvar parent = node.parent().parent();\n\t\t\t\t\tvar space = !parent.next()[0]?\"indent\":\"line\";\n\t\t\t\t\tvar plist = \"<div class='\" + space + \"'></div>\";\n\t\t\t\t\tif (level > 1) {\n\t\t\t\t\t\tvar next = $(\">div>div\", parent).filter(\":first\");\n\t\t\t\t\t\tvar prev = \"\";\n\t\t\t\t\t\twhile(level > 1){\n\t\t\t\t\t\t\tprev = prev + \"<div class='\" + next.attr(\"class\") + \"'></div>\";\n\t\t\t\t\t\t\tnext = next.next();\n\t\t\t\t\t\t\tlevel--;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tplist = prev + plist;\n\t\t\t\t\t}\n\t\t\t\t\t$(\">div\", node).prepend(plist);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t_check:function(op) {\n\t\t\tvar node = $(this);\n\t\t\tvar ckbox = $(\">div>.ckbox\", node);\n\t\t\tvar $input = node.find(\"a\");\n\t\t\tvar tname = $input.attr(\"tname\"), tvalue = $input.attr(\"tvalue\");\n\t\t\tvar attrs = \"text='\"+$input.text()+\"' \";\n\t\t\tif (tname) attrs += \"name='\"+tname+\"' \";\n\t\t\tif (tvalue) attrs += \"value='\"+tvalue+\"' \";\n\n\t\t\tckbox.append(\"<input type='checkbox' style='display:none;' \" + attrs + \"/>\").click(function(){\n\t\t\t\tvar cked = ckbox.hasClass(\"checked\");\n\t\t\t\tvar aClass = cked?\"unchecked\":\"checked\";\n\t\t\t\tvar rClass = cked?\"checked\":\"unchecked\";\n\t\t\t\tckbox.removeClass(rClass).removeClass(!cked?\"indeterminate\":\"\").addClass(aClass);\n\t\t\t\t$(\"input\", ckbox).attr(\"checked\", !cked);\n\t\t\t\t$(\">ul\", node).find(\"li\").each(function(){\n\t\t\t\t\tvar box = $(\"div.ckbox\", this);\n\t\t\t\t\tbox.removeClass(rClass).removeClass(!cked?\"indeterminate\":\"\").addClass(aClass)\n\t\t\t\t\t   .find(\"input\").attr(\"checked\", !cked);\n\t\t\t\t});\n\t\t\t\t$(node)._checkParent();\n\t\t\t\treturn false;\n\t\t\t});\n\t\t\tvar cAttr = $input.attr(\"checked\") || false;\n\t\t\tif (cAttr) {\n\t\t\t\tckbox.find(\"input\").attr(\"checked\", true);\n\t\t\t\tckbox.removeClass(\"unchecked\").addClass(\"checked\");\n\t\t\t\t$(node)._checkParent();\n\t\t\t}\n\t\t},\n\t\t_checkParent:function(){\n\t\t\tif($(this).parent().hasClass(\"tree\")) return;\n\t\t\tvar parent = $(this).parent().parent();\n\t\t\tvar stree = $(\">ul\", parent);\n\t\t\tvar ckbox = stree.find(\">li>a\").length+stree.find(\"div.ckbox\").length;\n\t\t\tvar ckboxed = stree.find(\"div.checked\").length;\n\t\t\tvar aClass = (ckboxed==ckbox?\"checked\":(ckboxed!=0?\"indeterminate\":\"unchecked\"));\n\t\t\tvar rClass = (ckboxed==ckbox?\"indeterminate\":(ckboxed!=0?\"checked\":\"indeterminate\"));\n\t\t\t$(\">div>.ckbox\", parent).removeClass(\"unchecked\").removeClass(\"checked\").removeClass(rClass).addClass(aClass);\n\n\t\t\tvar $checkbox = $(\":checkbox\", parent);\n\t\t\tif (aClass == \"checked\") $checkbox.attr(\"checked\",\"checked\");\n\t\t\telse if (aClass == \"unchecked\") $checkbox.removeAttr(\"checked\");\n\n\t\t\tparent._checkParent();\n\t\t}\n\t});\n})(jQuery);\n"
  },
  {
    "path": "js/dwz.ui.js",
    "content": "function initEnv() {\n\t$(\"body\").append(DWZ.frag[\"dwzFrag\"]);\n\n\t$(window).resize(function(){\n\t\tinitLayout();\n\t\t$(this).trigger(DWZ.eventType.resizeGrid);\n\t});\n\n\tvar ajaxbg = $(\"#background,#progressBar\");\n\tajaxbg.hide();\n\t$(document).ajaxStart(function(){\n\t\tajaxbg.show();\n\t}).ajaxStop(function(){\n\t\tajaxbg.hide();\n\t});\n\n\tif ($.fn.jBar) $(\"#leftside\").jBar({minW:150, maxW:700});\n\n\tif ($.taskBar) $.taskBar.init();\n\tif ($.fn.switchEnv) $(\"#switchEnvBox\").switchEnv();\n\tif ($.fn.navMenu) $(\"#navMenu\").navMenu();\n\n\tsetTimeout(function(){\n\t\tinitLayout();\n\t\tif (window.navTab) navTab.init();\n\n\t\t// 注册DWZ插件。\n\t\tDWZ.regPlugins.push(initUI); //第三方jQuery插件注册方法：DWZ.regPlugins.push(function($p){});\n\n\t\t// 首次初始化插件\n\t\t$(document).initUI();\n\n\t\t// navTab styles\n\t\tvar jTabsPH = $(\"div.tabsPageHeader\");\n\t\tjTabsPH.find(\".tabsLeft\").hoverClass(\"tabsLeftHover\");\n\t\tjTabsPH.find(\".tabsRight\").hoverClass(\"tabsRightHover\");\n\t\tjTabsPH.find(\".tabsMore\").hoverClass(\"tabsMoreHover\");\n\n\t\t$(document).trigger(DWZ.eventType.initEnvAfter);\n\t}, 10);\n\n}\nfunction initLayout(){\n\tvar iContentW = $(window).width() - (DWZ.ui.sbar ? $(\"#sidebar\").width() + 10 : 34) - 5;\n\tvar iContentH = $(window).height() - $(\"#header\").height() - 34;\n\n\t$(\"#container\").width(iContentW);\n\t$(\"#container .tabsPageContent\").height(iContentH - 34).find(\"[layoutH]\").layoutH();\n\t$(\"#sidebar, #sidebar_s .collapse, #splitBar, #splitBarProxy\").height(iContentH - 5);\n\t$(\"#taskbar\").css({top: iContentH + $(\"#header\").height() + 5, width:$(window).width()});\n}\n\nfunction initUI($p){\n\t//tables\n\tif ($.fn.jTable) $(\"table.table\", $p).jTable();\n\n\t// css tables\n\tif ($.fn.cssTable) $('table.list', $p).not('.nowrap').cssTable();\n\n\tif ($.fn.jPanel) $(\"div.panel\", $p).jPanel();\n\n\t//auto bind tabs\n\t$(\"div.tabs\", $p).each(function(){\n\t\tvar $this = $(this);\n\t\tvar options = {};\n\t\toptions.currentIndex = $this.attr(\"currentIndex\") || 0;\n\t\toptions.eventType = $this.attr(\"eventType\") || \"click\";\n\t\t$this.tabs(options);\n\t});\n\n\tif ($.fn.jTree) $(\"ul.tree\", $p).jTree();\n\n\tif ($.fn.accordion){\n\t\t$('div.accordion', $p).each(function(){\n\t\t\tvar $this = $(this);\n\t\t\t$this.accordion({fillSpace:$this.attr(\"fillSpace\"),alwaysOpen:true,active:0});\n\t\t});\n\t}\n\n\tif ($.fn.checkboxCtrl){\n\t\t$(\":button.checkboxCtrl, :checkbox.checkboxCtrl\", $p).checkboxCtrl($p);\n\t}\n\n\tif ($.fn.combox) $(\"select.combox\",$p).combox();\n\n\tif ($.fn.xheditor) {\n\t\t$(\"textarea.editor\", $p).each(function(){\n\t\t\tvar $this = $(this);\n\t\t\tvar op = {html5Upload:false, skin: 'nostyle',tools: $this.attr(\"tools\") || 'full'};\n\t\t\tvar upAttrs = [\n\t\t\t\t[\"upLinkUrl\",\"upLinkExt\",\"zip,rar,txt\"],\n\t\t\t\t[\"upImgUrl\",\"upImgExt\",\"jpg,jpeg,gif,png\"],\n\t\t\t\t[\"upFlashUrl\",\"upFlashExt\",\"swf\"],\n\t\t\t\t[\"upMediaUrl\",\"upMediaExt\",\"avi\"]\n\t\t\t];\n\n\t\t\t$(upAttrs).each(function(i){\n\t\t\t\tvar urlAttr = upAttrs[i][0];\n\t\t\t\tvar extAttr = upAttrs[i][1];\n\n\t\t\t\tif ($this.attr(urlAttr)) {\n\t\t\t\t\top[urlAttr] = $this.attr(urlAttr);\n\t\t\t\t\top[extAttr] = $this.attr(extAttr) || upAttrs[i][2];\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t$this.xheditor(op);\n\t\t});\n\t}\n\n\tif ($.fn.uploadify) {\n\t\t$(\":file[uploaderOption]\", $p).each(function(){\n\t\t\tvar $this = $(this);\n\t\t\tvar options = {\n\t\t\t\tfileObjName: $this.attr(\"name\") || \"file\",\n\t\t\t\tauto: true,\n\t\t\t\tmulti: true,\n\t\t\t\tonUploadError: uploadifyError\n\t\t\t};\n\n\t\t\tvar uploaderOption = DWZ.jsonEval($this.attr(\"uploaderOption\"));\n\t\t\t$.extend(options, uploaderOption);\n\n\t\t\tDWZ.debug(\"uploaderOption: \"+DWZ.obj2str(uploaderOption));\n\n\t\t\t$this.uploadify(options);\n\t\t});\n\t}\n\n\t// init styles\n\t$(\"input[type=text], input[type=password], textarea\", $p).addClass(\"textInput\").focusClass(\"focus\");\n\n\t$(\"input[readonly], textarea[readonly]\", $p).addClass(\"readonly\");\n\t$(\"input[disabled=true], textarea[disabled=true]\", $p).addClass(\"disabled\");\n\n\t$(\"input[type=text]\", $p).not(\"div.tabs input[type=text]\", $p).filter(\"[alt]\").inputAlert();\n\n\t//Grid ToolBar\n\t$(\"div.panelBar li, div.panelBar\", $p).hoverClass(\"hover\");\n\n\t//Button\n\t$(\"div.button\", $p).hoverClass(\"buttonHover\");\n\t$(\"div.buttonActive\", $p).hoverClass(\"buttonActiveHover\");\n\n\t//tabsPageHeader\n\t$(\"div.tabsHeader li, div.tabsPageHeader li, div.accordionHeader, div.accordion\", $p).hoverClass(\"hover\");\n\n\t//validate form\n\tif ($.fn.validate) {\n\t\t$(\"form.required-validate\", $p).each(function(){\n\t\t\tvar $form = $(this);\n\t\t\t$form.validate({\n\t\t\t\tonsubmit: false,\n\t\t\t\tfocusInvalid: false,\n\t\t\t\tfocusCleanup: true,\n\t\t\t\terrorElement: \"span\",\n\t\t\t\tignore:\".ignore\",\n\t\t\t\tinvalidHandler: function(form, validator) {\n\t\t\t\t\tvar errors = validator.numberOfInvalids();\n\t\t\t\t\tif (errors) {\n\t\t\t\t\t\tvar message = DWZ.msg(\"validateFormError\",[errors]);\n\t\t\t\t\t\talertMsg.error(message);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t$form.find('input[customvalid]').each(function(){\n\t\t\t\tvar $input = $(this);\n\t\t\t\t$input.rules(\"add\", {\n\t\t\t\t\tcustomvalid: $input.attr(\"customvalid\")\n\t\t\t\t})\n\t\t\t});\n\t\t});\n\t}\n\n\tif ($.fn.datepicker){\n\t\t$('input.date', $p).each(function(){\n\t\t\tvar $this = $(this);\n\t\t\tvar opts = {};\n\t\t\tif ($this.attr(\"dateFmt\")) opts.pattern = $this.attr(\"dateFmt\");\n\t\t\tif ($this.attr(\"minDate\")) opts.minDate = $this.attr(\"minDate\");\n\t\t\tif ($this.attr(\"maxDate\")) opts.maxDate = $this.attr(\"maxDate\");\n\t\t\tif ($this.attr(\"mmStep\")) opts.mmStep = $this.attr(\"mmStep\");\n\t\t\tif ($this.attr(\"ssStep\")) opts.ssStep = $this.attr(\"ssStep\");\n\t\t\tif ($this.attr(\"defaultTime\")) opts.defaultTime = $this.attr(\"defaultTime\");\n\t\t\t$this.datepicker(opts);\n\t\t});\n\t}\n\n\t// navTab\n\t$(\"a[target=navTab]\", $p).each(function(){\n\t\t$(this).click(function(event){\n\t\t\tvar $this = $(this);\n\t\t\tif ($this.hasClass('disabled') || $this.hasClass('buttonDisabled')) {return false;}\n\n\t\t\tvar title = $this.attr(\"title\") || $this.text();\n\t\t\tvar tabid = $this.attr(\"rel\") || \"_blank\";\n\t\t\tvar fresh = eval($this.attr(\"fresh\") || \"true\");\n\t\t\tvar external = eval($this.attr(\"external\") || \"false\");\n\t\t\tvar url = unescape($this.attr(\"href\")).replaceTmById($(event.target).parents(\".unitBox:first\"));\n\t\t\tDWZ.debug(url);\n\t\t\tif (!url.isFinishedTm()) {\n\t\t\t\talertMsg.error($this.attr(\"warn\") || DWZ.msg(\"alertSelectMsg\"));\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tnavTab.openTab(tabid, url,{title:title, fresh:fresh, external:external});\n\n\t\t\tevent.preventDefault();\n\t\t});\n\t});\n\n\t//dialogs\n\t$(\"a[target=dialog]\", $p).each(function(){\n\t\t$(this).click(function(event){\n\t\t\tvar $this = $(this);\n\n\t\t\tif ($this.hasClass('disabled') || $this.hasClass('buttonDisabled')) {return false;}\n\n\t\t\tvar title = $this.attr(\"title\") || $this.text();\n\t\t\tvar rel = $this.attr(\"rel\") || \"_blank\";\n\t\t\tvar options = {};\n\t\t\tvar w = $this.attr(\"width\");\n\t\t\tvar h = $this.attr(\"height\");\n\t\t\tif (w) options.width = w;\n\t\t\tif (h) options.height = h;\n\t\t\toptions.max = eval($this.attr(\"max\") || \"false\");\n\t\t\toptions.mask = eval($this.attr(\"mask\") || \"false\");\n\t\t\toptions.maxable = eval($this.attr(\"maxable\") || \"true\");\n\t\t\toptions.minable = eval($this.attr(\"minable\") || \"true\");\n\t\t\toptions.fresh = eval($this.attr(\"fresh\") || \"true\");\n\t\t\toptions.resizable = eval($this.attr(\"resizable\") || \"true\");\n\t\t\toptions.resizable = eval($this.attr(\"resizable\") || \"true\");\n\t\t\toptions.drawable = eval($this.attr(\"drawable\") || \"true\");\n\t\t\toptions.close = eval($this.attr(\"close\") || \"\");\n\t\t\toptions.param = $this.attr(\"param\") || \"\";\n\n\t\t\tvar url = unescape($this.attr(\"href\")).replaceTmById($(event.target).parents(\".unitBox:first\"));\n\t\t\tDWZ.debug(url);\n\t\t\tif (!url.isFinishedTm()) {\n\t\t\t\talertMsg.error($this.attr(\"warn\") || DWZ.msg(\"alertSelectMsg\"));\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t$.pdialog.open(url, rel, title, options);\n\n\t\t\treturn false;\n\t\t});\n\t});\n\t$(\"a[target=ajax], tr[target=ajax]\", $p).each(function(){\n\t\t$(this).click(function(event){\n\t\t\tvar $this = $(this);\n\t\t\tif ($this.hasClass('disabled') || $this.hasClass('buttonDisabled')) {return false;}\n\n\t\t\tvar rel = $this.attr(\"rel\");\n\t\t\tif (rel) {\n\t\t\t\tvar $rel = $(\"#\"+rel);\n\t\t\t\tvar url = unescape($this.attr(\"href\")).replaceTmById($(event.target).parents(\".unitBox:first\"));\n\t\t\t\tDWZ.debug(url);\n\t\t\t\tif (!url.isFinishedTm()) {\n\t\t\t\t\talertMsg.error($this.attr(\"warn\") || DWZ.msg(\"alertSelectMsg\"));\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t$rel.loadUrl(url, {}, function(){\n\t\t\t\t\t$rel.find(\"[layoutH]\").layoutH();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tevent.preventDefault();\n\t\t});\n\t});\n\n\t$(\"div.pagination\", $p).each(function(){\n\t\tvar $this = $(this);\n\t\t$this.pagination({\n\t\t\ttargetType:$this.attr(\"targetType\"),\n\t\t\trel:$this.attr(\"rel\"),\n\t\t\ttotalCount:$this.attr(\"totalCount\"),\n\t\t\tnumPerPage:$this.attr(\"numPerPage\"),\n\t\t\tpageNumShown:$this.attr(\"pageNumShown\") || 10,\n\t\t\tcurrentPage:$this.attr(\"currentPage\")\n\t\t});\n\t});\n\n\tif ($.fn.sortDrag) $(\"div.sortDrag\", $p).sortDrag();\n\n\t// dwz.ajax.js\n\tif ($.fn.ajaxTodo) $(\"a[target=ajaxTodo]\", $p).ajaxTodo();\n\tif ($.fn.dwzExport) $(\"a[target=dwzExport]\", $p).dwzExport();\n\n\tif ($.fn.lookup) $(\"a[lookupGroup]\", $p).lookup();\n\tif ($.fn.multLookup) $(\"[multLookup]:button\", $p).multLookup();\n\tif ($.fn.suggest) $(\"input[suggestFields]\", $p).suggest();\n\tif ($.fn.itemDetail) $(\"table.itemDetail\", $p).itemDetail();\n\tif ($.fn.selectedTodo) $(\"a[target=selectedTodo]\", $p).selectedTodo();\n\tif ($.fn.selectedBlank) $(\"a[target=selectedBlank]\", $p).selectedBlank();\n\tif ($.fn.pagerForm) $(\"form[rel=pagerForm]\", $p).pagerForm({parentBox:$p});\n\n}\n"
  },
  {
    "path": "js/dwz.util.date.js",
    "content": "/**\n * @author 张慧华 z@j-ui.com\n * ----------------------------------------------------------\n * These functions use the same 'format' strings as the \n * java.text.SimpleDateFormat class, with minor exceptions.\n * The format string consists of the following abbreviations:\n * \n * Field        | Full Form          | Short Form\n * -------------+--------------------+-----------------------\n * Year         | yyyy (4 digits)    | yy (2 digits), y (2 or 4 digits)\n * Month        | MMM (name or abbr.)| MM (2 digits), M (1 or 2 digits)\n *              | NNN (abbr.)        |\n * Day of Month | dd (2 digits)      | d (1 or 2 digits)\n * Day of Week  | EE (name)          | E (abbr)\n * Hour (1-12)  | hh (2 digits)      | h (1 or 2 digits)\n * Hour (0-23)  | HH (2 digits)      | H (1 or 2 digits)\n * Hour (0-11)  | KK (2 digits)      | K (1 or 2 digits)\n * Hour (1-24)  | kk (2 digits)      | k (1 or 2 digits)\n * Minute       | mm (2 digits)      | m (1 or 2 digits)\n * Second       | ss (2 digits)      | s (1 or 2 digits)\n * AM/PM        | a                  |\n *\n * NOTE THE DIFFERENCE BETWEEN MM and mm! Month=MM, not mm!\n * Examples:\n *  \"MMM d, y\" matches: January 01, 2000\n *                      Dec 1, 1900\n *                      Nov 20, 00\n *  \"M/d/yy\"   matches: 01/20/00\n *                      9/2/00\n *  \"MMM dd, yyyy hh:mm:ssa\" matches: \"January 01, 2000 12:30:45AM\"\n * ----------------------------------------------------------\n */\n(function(){\nvar MONTH_NAMES=new Array('January','February','March','April','May','June','July','August','September','October','November','December','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');\nvar DAY_NAMES=new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sun','Mon','Tue','Wed','Thu','Fri','Sat');\nfunction LZ(x) {return(x<0||x>9?\"\":\"0\")+x}\n\n/**\n * formatDate (date_object, format)\n * Returns a date in the output format specified.\n * The format string uses the same abbreviations as in parseDate()\n * @param {Object} date\n * @param {Object} format\n */\nfunction formatDate(date,format) {\n\tformat=format+\"\";\n\tvar result=\"\";\n\tvar i_format=0;\n\tvar c=\"\";\n\tvar token=\"\";\n\tvar y=date.getYear()+\"\";\n\tvar M=date.getMonth()+1;\n\tvar d=date.getDate();\n\tvar E=date.getDay();\n\tvar H=date.getHours();\n\tvar m=date.getMinutes();\n\tvar s=date.getSeconds();\n\tvar yyyy,yy,MMM,MM,dd,hh,h,mm,ss,ampm,HH,H,KK,K,kk,k;\n\t// Convert real date parts into formatted versions\n\tvar value={};\n\tif (y.length < 4) {y=\"\"+(y-0+1900);}\n\tvalue[\"y\"]=\"\"+y;\n\tvalue[\"yyyy\"]=y;\n\tvalue[\"yy\"]=y.substring(2,4);\n\tvalue[\"M\"]=M;\n\tvalue[\"MM\"]=LZ(M);\n\tvalue[\"MMM\"]=MONTH_NAMES[M-1];\n\tvalue[\"NNN\"]=MONTH_NAMES[M+11];\n\tvalue[\"d\"]=d;\n\tvalue[\"dd\"]=LZ(d);\n\tvalue[\"E\"]=DAY_NAMES[E+7];\n\tvalue[\"EE\"]=DAY_NAMES[E];\n\tvalue[\"H\"]=H;\n\tvalue[\"HH\"]=LZ(H);\n\tif (H==0){value[\"h\"]=12;}\n\telse if (H>12){value[\"h\"]=H-12;}\n\telse {value[\"h\"]=H;}\n\tvalue[\"hh\"]=LZ(value[\"h\"]);\n\tif (H>11){value[\"K\"]=H-12;} else {value[\"K\"]=H;}\n\tvalue[\"k\"]=H+1;\n\tvalue[\"KK\"]=LZ(value[\"K\"]);\n\tvalue[\"kk\"]=LZ(value[\"k\"]);\n\tif (H > 11) { value[\"a\"]=\"PM\"; }\n\telse { value[\"a\"]=\"AM\"; }\n\tvalue[\"m\"]=m;\n\tvalue[\"mm\"]=LZ(m);\n\tvalue[\"s\"]=s;\n\tvalue[\"ss\"]=LZ(s);\n\twhile (i_format < format.length) {\n\t\tc=format.charAt(i_format);\n\t\ttoken=\"\";\n\t\twhile ((format.charAt(i_format)==c) && (i_format < format.length)) {\n\t\t\ttoken += format.charAt(i_format++);\n\t\t}\n\t\tif (value[token] != null) { result += value[token]; }\n\t\telse { result += token; }\n\t}\n\treturn result;\n}\n\nfunction _isInteger(val) {\n\treturn (new RegExp(/^\\d+$/).test(val));\n}\nfunction _getInt(str,i,minlength,maxlength) {\n\tfor (var x=maxlength; x>=minlength; x--) {\n\t\tvar token=str.substring(i,i+x);\n\t\tif (token.length < minlength) { return null; }\n\t\tif (_isInteger(token)) { return token; }\n\t}\n\treturn null;\n}\n\n/**\n * parseDate( date_string , format_string )\n * \n * This function takes a date string and a format string. It matches\n * If the date string matches the format string, it returns the date. \n * If it does not match, it returns 0.\n * @param {Object} val\n * @param {Object} format\n */\nfunction parseDate(val,format) {\n\tval=val+\"\";\n\tformat=format+\"\";\n\tvar i_val=0;\n\tvar i_format=0;\n\tvar c=\"\";\n\tvar token=\"\";\n\tvar token2=\"\";\n\tvar x,y;\n\tvar now=new Date(1900,0,1);\n\tvar year=now.getYear();\n\tvar month=now.getMonth()+1;\n\tvar date=1;\n\tvar hh=now.getHours();\n\tvar mm=now.getMinutes();\n\tvar ss=now.getSeconds();\n\tvar ampm=\"\";\n\t\n\twhile (i_format < format.length) {\n\t\t// Get next token from format string\n\t\tc=format.charAt(i_format);\n\t\ttoken=\"\";\n\t\twhile ((format.charAt(i_format)==c) && (i_format < format.length)) {\n\t\t\ttoken += format.charAt(i_format++);\n\t\t}\n\t\t// Extract contents of value based on format token\n\t\tif (token==\"yyyy\" || token==\"yy\" || token==\"y\") {\n\t\t\tif (token==\"yyyy\") { x=4;y=4; }\n\t\t\tif (token==\"yy\")   { x=2;y=2; }\n\t\t\tif (token==\"y\")    { x=2;y=4; }\n\t\t\tyear=_getInt(val,i_val,x,y);\n\t\t\tif (year==null) { return 0; }\n\t\t\ti_val += year.length;\n\t\t\tif (year.length==2) {\n\t\t\t\tif (year > 70) { year=1900+(year-0); }\n\t\t\t\telse { year=2000+(year-0); }\n\t\t\t}\n\t\t} else if (token==\"MMM\"||token==\"NNN\"){\n\t\t\tmonth=0;\n\t\t\tfor (var i=0; i<MONTH_NAMES.length; i++) {\n\t\t\t\tvar month_name=MONTH_NAMES[i];\n\t\t\t\tif (val.substring(i_val,i_val+month_name.length).toLowerCase()==month_name.toLowerCase()) {\n\t\t\t\t\tif (token==\"MMM\"||(token==\"NNN\"&&i>11)) {\n\t\t\t\t\t\tmonth=i+1;\n\t\t\t\t\t\tif (month>12) { month -= 12; }\n\t\t\t\t\t\ti_val += month_name.length;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tif ((month < 1)||(month>12)){return 0;}\n\t\t} else if (token==\"EE\"||token==\"E\"){\n\t\t\tfor (var i=0; i<DAY_NAMES.length; i++) {\n\t\t\t\tvar day_name=DAY_NAMES[i];\n\t\t\t\tif (val.substring(i_val,i_val+day_name.length).toLowerCase()==day_name.toLowerCase()) {\n\t\t\t\t\ti_val += day_name.length;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (token==\"MM\"||token==\"M\") {\n\t\t\tmonth=_getInt(val,i_val,token.length,2);\n\t\t\tif(month==null||(month<1)||(month>12)){return 0;}\n\t\t\ti_val+=month.length;\n\t\t} else if (token==\"dd\"||token==\"d\") {\n\t\t\tdate=_getInt(val,i_val,token.length,2);\n\t\t\tif(date==null||(date<1)||(date>31)){return 0;}\n\t\t\ti_val+=date.length;\n\t\t} else if (token==\"hh\"||token==\"h\") {\n\t\t\thh=_getInt(val,i_val,token.length,2);\n\t\t\tif(hh==null||(hh<1)||(hh>12)){return 0;}\n\t\t\ti_val+=hh.length;\n\t\t} else if (token==\"HH\"||token==\"H\") {\n\t\t\thh=_getInt(val,i_val,token.length,2);\n\t\t\tif(hh==null||(hh<0)||(hh>23)){return 0;}\n\t\t\ti_val+=hh.length;}\n\t\telse if (token==\"KK\"||token==\"K\") {\n\t\t\thh=_getInt(val,i_val,token.length,2);\n\t\t\tif(hh==null||(hh<0)||(hh>11)){return 0;}\n\t\t\ti_val+=hh.length;\n\t\t} else if (token==\"kk\"||token==\"k\") {\n\t\t\thh=_getInt(val,i_val,token.length,2);\n\t\t\tif(hh==null||(hh<1)||(hh>24)){return 0;}\n\t\t\ti_val+=hh.length;hh--;\n\t\t} else if (token==\"mm\"||token==\"m\") {\n\t\t\tmm=_getInt(val,i_val,token.length,2);\n\t\t\tif(mm==null||(mm<0)||(mm>59)){return 0;}\n\t\t\ti_val+=mm.length;\n\t\t} else if (token==\"ss\"||token==\"s\") {\n\t\t\tss=_getInt(val,i_val,token.length,2);\n\t\t\tif(ss==null||(ss<0)||(ss>59)){return 0;}\n\t\t\ti_val+=ss.length;\n\t\t} else if (token==\"a\") {\n\t\t\tif (val.substring(i_val,i_val+2).toLowerCase()==\"am\") {ampm=\"AM\";}\n\t\t\telse if (val.substring(i_val,i_val+2).toLowerCase()==\"pm\") {ampm=\"PM\";}\n\t\t\telse {return 0;}\n\t\t\ti_val+=2;\n\t\t} else {\n\t\t\tif (val.substring(i_val,i_val+token.length)!=token) {return 0;}\n\t\t\telse {i_val+=token.length;}\n\t\t}\n\t}\n\t// If there are any trailing characters left in the value, it doesn't match\n\tif (i_val != val.length) { return 0; }\n\t// Is date valid for month?\n\tif (month==2) {\n\t\t// Check for leap year\n\t\tif ( ( (year%4==0)&&(year%100 != 0) ) || (year%400==0) ) { // leap year\n\t\t\tif (date > 29){ return 0; }\n\t\t} else { if (date > 28) { return 0; } }\n\t}\n\tif ((month==4)||(month==6)||(month==9)||(month==11)) {\n\t\tif (date > 30) { return 0; }\n\t}\n\t// Correct hours value\n\tif (hh<12 && ampm==\"PM\") { hh=hh-0+12; }\n\telse if (hh>11 && ampm==\"AM\") { hh-=12; }\n\treturn new Date(year,month-1,date,hh,mm,ss);\n}\n\nDate.prototype.formatDate = function(dateFmt) {\n\treturn formatDate(this, dateFmt);\n};\nString.prototype.parseDate = function(dateFmt) {\n\tif (this.length < dateFmt.length) {\n\t\tdateFmt = dateFmt.slice(0,this.length);\n\t}\n\treturn parseDate(this, dateFmt);\n};\n\n/**\n * replaceTmEval(\"{1+2}-{2-1}\")\n */\nfunction replaceTmEval(data){\n\treturn data.replace(RegExp(\"({[A-Za-z0-9_+-]*})\",\"g\"), function($1){\n\t\treturn eval('(' + $1.replace(/[{}]+/g, \"\") + ')');\n\t});\n}\n/**\n * dateFmt:%y-%M-%d\n * %y-%M-{%d+1}\n * ex: new Date().formatDateTm('%y-%M-{%d-1}')\n * \tnew Date().formatDateTm('2012-1')\n */\nDate.prototype.formatDateTm = function(dateFmt) {\n\tvar y = this.getFullYear();\n\tvar m = this.getMonth()+1;\n\tvar d = this.getDate();\n\n\tvar sDate = dateFmt.replaceAll(\"%y\",y).replaceAll(\"%M\",m).replaceAll(\"%d\",d);\n\tsDate = replaceTmEval(sDate);\n\t\n\tvar _y=1900, _m=0, _d=1;\n\tvar aDate = sDate.split('-');\n\t\n\tif (aDate.length > 0) _y = aDate[0];\n\tif (aDate.length > 1) _m = aDate[1]-1;\n\tif (aDate.length > 2) _d = aDate[2];\n\t\n\treturn new Date(_y,_m,_d).formatDate('yyyy-MM-dd');\n};\n\n})();\n\n"
  },
  {
    "path": "js/dwz.util.number.js",
    "content": "/**\n * @author 张慧华 z@j-ui.com\n * \n */\n(function(){\n\nfunction formatCurrency(num) {\n\tnum = num.toString().replace(/\\$|\\,/g,'');\n\tif(isNaN(num)) {num = \"0\";}\n\t\n\tvar sign = (num == (num = Math.abs(num)));\n\tnum = Math.floor(num*100+0.50000000001);\n\tvar cents = num%100;\n\tnum = Math.floor(num/100).toString();\n\t\n\tif(cents<10) {cents = \"0\" + cents;}\n\t\n\tfor (var i = 0; i < Math.floor((num.length-(1+i))/3); i++){\n\t\tnum = num.substring(0,num.length-(4*i+3))+','+num.substring(num.length-(4*i+3));\n\t}\n\n\treturn (((sign)?'':'-') + num + '.' + cents);\n}\nfunction parseCurrency(str) {\n\tif (!str) return 0;\n\tstr = str.replace(',', '');\n\treturn $.isNumeric(str) ? parseFloat(str) : 0;\n}\n\n/**\n * 数字转中文大写\n */\nfunction amountInWords(dValue, maxDec){\n\t// 验证输入金额数值或数值字符串：\n\tdValue = dValue.toString().replace(/,/g, \"\"); dValue = dValue.replace(/^0+/, \"\");\t  // 金额数值转字符、移除逗号、移除前导零\n\tif (dValue == \"\") { return \"零元整\"; }\t  // （错误：金额为空！）\n\telse if (isNaN(dValue)) { return \"错误：金额不是合法的数值！\"; }\n   \n\tvar minus = \"\";\t\t\t\t\t\t\t // 负数的符号“-”的大写：“负”字。可自定义字符，如“（负）”。\n\tvar CN_SYMBOL = \"\";\t\t\t\t\t\t // 币种名称（如“人民币”，默认空）\n\tif (dValue.length > 1) {\n\t\tif (dValue.indexOf('-') == 0) { dValue = dValue.replace(\"-\", \"\"); minus = \"负\"; }   // 处理负数符号“-”\n\t\tif (dValue.indexOf('+') == 0) { dValue = dValue.replace(\"+\", \"\"); }\t\t\t\t // 处理前导正数符号“+”（无实际意义）\n\t}\n   \n\t// 变量定义：\n\tvar vInt = \"\", vDec = \"\";\t// 字符串：金额的整数部分、小数部分\n\tvar resAIW;\t// 字符串：要输出的结果\n\tvar parts;\t// 数组（整数部分.小数部分），length=1时则仅为整数。\n\tvar digits, radices, bigRadices, decimals;\t// 数组：数字（0~9——零~玖）；基（十进制记数系统中每个数字位的基是10——拾,佰,仟）；大基（万,亿,兆,京,垓,杼,穰,沟,涧,正）；辅币（元以下，角/分/厘/毫/丝）。\n\tvar zeroCount;\t// 零计数\n\tvar i, p, d;\t// 循环因子；前一位数字；当前位数字。\n\tvar quotient, modulus;\t// 整数部分计算用：商数、模数。\n\n\t// 金额数值转换为字符，分割整数部分和小数部分：整数、小数分开来搞（小数部分有可能四舍五入后对整数部分有进位）。\n\tvar NoneDecLen = (typeof(maxDec) == \"undefined\" || maxDec == null || Number(maxDec) < 0 || Number(maxDec) > 5);\t // 是否未指定有效小数位（true/false）\n\tparts = dValue.split('.');\t// 数组赋值：（整数部分.小数部分），Array的length=1则仅为整数。\n\tif (parts.length > 1) {\n\t\tvInt = parts[0]; vDec = parts[1];\t// 变量赋值：金额的整数部分、小数部分\n\t   \n\t\tif(NoneDecLen) { maxDec = vDec.length > 5 ? 5 : vDec.length; }\t// 未指定有效小数位参数值时，自动取实际小数位长但不超5。\n\t\tvar rDec = Number(\"0.\" + vDec);\t\n\t\trDec *= Math.pow(10, maxDec); rDec = Math.round(Math.abs(rDec)); rDec /= Math.pow(10, maxDec);\t// 小数四舍五入\n\t\tvar aIntDec = rDec.toString().split('.');\n\t\tif(Number(aIntDec[0]) == 1) { vInt = (Number(vInt) + 1).toString(); }\t// 小数部分四舍五入后有可能向整数部分的个位进位（值1）\n\t\tif(aIntDec.length > 1) { vDec = aIntDec[1]; } else { vDec = \"\"; }\n\t}\n\telse { vInt = dValue; vDec = \"\"; if(NoneDecLen) { maxDec = 0; } }\n\tif(vInt.length > 44) { return \"错误：金额值太大了！整数位长【\" + vInt.length.toString() + \"】超过了上限——44位/千正/10^43（注：1正=1万涧=1亿亿亿亿亿，10^40）！\"; }\n   \n\t// 准备各字符数组 Prepare the characters corresponding to the digits:\n\tdigits = new Array(\"零\", \"壹\", \"贰\", \"叁\", \"肆\", \"伍\", \"陆\", \"柒\", \"捌\", \"玖\");\n\tradices = new Array(\"\", \"拾\", \"佰\", \"仟\");\t// 拾,佰,仟\n\tbigRadices = new Array(\"\", \"万\", \"亿\", \"兆\", \"京\", \"垓\", \"杼\", \"穰\" ,\"沟\", \"涧\", \"正\");\n\tdecimals = new Array(\"角\", \"分\", \"厘\", \"毫\", \"丝\");\t\n   \n\tresAIW = \"\"; // 开始处理\n   \n\t// 处理整数部分（如果有）\n\tif (Number(vInt) > 0) {\n\t\tzeroCount = 0;\n\t\tfor (i = 0; i < vInt.length; i++) {\n\t\t\tp = vInt.length - i - 1; d = vInt.substr(i, 1); quotient = p / 4; modulus = p % 4;\n\t\t\tif (d == \"0\") { zeroCount++; }\n\t\t\telse {\n\t\t\t\tif (zeroCount > 0) { resAIW += digits[0]; }\n\t\t\t\tzeroCount = 0; resAIW += digits[Number(d)] + radices[modulus];\n\t\t\t}\n\t\t\tif (modulus == 0 && zeroCount < 4) { resAIW += bigRadices[quotient]; }\n\t\t}\n\t\tresAIW += \"元\";\n\t}\n   \n\t// 处理小数部分（如果有）\n\tfor (i = 0; i < vDec.length; i++) { d = vDec.substr(i, 1); if (d != \"0\") { resAIW += digits[Number(d)] + decimals[i]; } }\n   \n\t// 处理结果\n\tif (resAIW == \"\") { resAIW = \"零\" + \"元\"; }\t // 零元\n\tif (vDec == \"\") { resAIW += \"整\"; }\t// ...元整\n\tresAIW = CN_SYMBOL + minus + resAIW;\t// 人民币/负......元角分/整\n\treturn resAIW;\n}\n\nNumber.prototype.formatCurrency = function(format) {\n\treturn formatCurrency(this);\n};\nNumber.prototype.amountInWords = function(maxDec) {\n\treturn amountInWords(this, maxDec);\n}\n\nString.prototype.parseCurrency = function(format) {\n\treturn parseCurrency(this);\n};\nString.prototype.amountInWords = function(maxDec) {\n\tvar dValue = parseCurrency(this);\n\treturn amountInWords(dValue, maxDec);\n}\n\t\n})();\n"
  },
  {
    "path": "js/dwz.validate.method.js",
    "content": "/**\n * @requires jquery.validate.js\n * @author 张慧华 z@j-ui.com\n */\n(function($){\n\tif ($.validator) {\n\t\t$.validator.addMethod(\"alphanumeric\", function(value, element) {\n\t\t\treturn this.optional(element) || /^\\w+$/i.test(value);\n\t\t}, \"Letters, numbers or underscores only please\");\n\t\t\n\t\t$.validator.addMethod(\"lettersonly\", function(value, element) {\n\t\t\treturn this.optional(element) || /^[a-z]+$/i.test(value);\n\t\t}, \"Letters only please\"); \n\t\t\n\t\t$.validator.addMethod(\"phone\", function(value, element) {\n\t\t\treturn this.optional(element) || /^[0-9 \\(\\)]{7,30}$/.test(value);\n\t\t}, \"Please specify a valid phone number\");\n\t\t\n\t\t$.validator.addMethod(\"postcode\", function(value, element) {\n\t\t\treturn this.optional(element) || /^[0-9 A-Za-z]{5,20}$/.test(value);\n\t\t}, \"Please specify a valid postcode\");\n\t\t\n\t\t$.validator.addMethod(\"date\", function(value, element) {\n\t\t\tvalue = value.replace(/\\s+/g, \"\");\n\t\t\tif (String.prototype.parseDate){\n\t\t\t\tvar $input = $(element);\n\t\t\t\tvar pattern = $input.attr('dateFmt') || 'yyyy-MM-dd';\n\t\n\t\t\t\treturn !$input.val() || $input.val().parseDate(pattern);\n\t\t\t} else {\n\t\t\t\treturn this.optional(element) || value.match(/^\\d{4}[\\/-]\\d{1,2}[\\/-]\\d{1,2}$/);\n\t\t\t}\n\t\t}, \"Please enter a valid date.\");\n\t\t\n\t\t/*自定义js函数验证\n\t\t * <input type=\"text\" name=\"xxx\" customvalid=\"xxxFn(element)\" title=\"xxx\" />\n\t\t */\n\t\t$.validator.addMethod(\"customvalid\", function(value, element, params) {\n\t\t\ttry{\n\t\t\t\treturn eval('(' + params + ')');\n\t\t\t}catch(e){\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}, \"Please fix this field.\");\n\t\t\n\t\t$.validator.addClassRules({\n\t\t\tdate: {date: true},\n\t\t\talphanumeric: { alphanumeric: true },\n\t\t\tlettersonly: { lettersonly: true },\n\t\t\tphone: { phone: true },\n\t\t\tpostcode: {postcode: true}\n\t\t});\n\t\t$.validator.setDefaults({errorElement:\"span\"});\n\t\t$.validator.autoCreateRanges = true;\n\t\t\n\t}\n\n})(jQuery);"
  },
  {
    "path": "js/jquery-1.12.4.js",
    "content": "/*!\n * jQuery JavaScript Library v1.12.4\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-05-20T17:17Z\n */\n\n(function( global, factory ) {\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n}(typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Support: Firefox 18+\n// Can't be in strict mode, several libs including ASP.NET trace\n// the stack via arguments.caller.callee and Firefox dies if\n// you try to trace through \"use strict\" call chains. (#13335)\n//\"use strict\";\nvar deletedIds = [];\n\nvar document = window.document;\n\nvar slice = deletedIds.slice;\n\nvar concat = deletedIds.concat;\n\nvar push = deletedIds.push;\n\nvar indexOf = deletedIds.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar support = {};\n\n\n\nvar\n\tversion = \"1.12.4\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android<4.1, IE<9\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([\\da-z])/gi,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num != null ?\n\n\t\t\t// Return just the one element from the set\n\t\t\t( num < 0 ? this[ num + this.length ] : this[ num ] ) :\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tslice.call( this );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\t\tret.context = this.context;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: deletedIds.sort,\n\tsplice: deletedIds.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar src, copyIsArray, copy, name, options, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = jQuery.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\t// See test/unit/core.js for details concerning isFunction.\n\t// Since version 1.3, DOM methods and functions like alert\n\t// aren't supported. They return false on IE (#2968).\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type( obj ) === \"function\";\n\t},\n\n\tisArray: Array.isArray || function( obj ) {\n\t\treturn jQuery.type( obj ) === \"array\";\n\t},\n\n\tisWindow: function( obj ) {\n\t\t/* jshint eqeqeq: false */\n\t\treturn obj != null && obj == obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\n\t\t// parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t// adding 1 corrects loss of precision from parseFloat (#15100)\n\t\tvar realStringObj = obj && obj.toString();\n\t\treturn !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\tvar key;\n\n\t\t// Must be an Object.\n\t\t// Because of IE, we also have to check the presence of the constructor property.\n\t\t// Make sure that DOM nodes and window objects don't pass through, as well\n\t\tif ( !obj || jQuery.type( obj ) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\n\t\t\t// Not own constructor property must be Object\n\t\t\tif ( obj.constructor &&\n\t\t\t\t!hasOwn.call( obj, \"constructor\" ) &&\n\t\t\t\t!hasOwn.call( obj.constructor.prototype, \"isPrototypeOf\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} catch ( e ) {\n\n\t\t\t// IE8,9 Will throw exceptions on certain host objects #9897\n\t\t\treturn false;\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// Handle iteration over inherited properties before own properties.\n\t\tif ( !support.ownFirst ) {\n\t\t\tfor ( key in obj ) {\n\t\t\t\treturn hasOwn.call( obj, key );\n\t\t\t}\n\t\t}\n\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own.\n\t\tfor ( key in obj ) {}\n\n\t\treturn key === undefined || hasOwn.call( obj, key );\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Workarounds based on findings by Jim Driscoll\n\t// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context\n\tglobalEval: function( data ) {\n\t\tif ( data && jQuery.trim( data ) ) {\n\n\t\t\t// We use execScript on Internet Explorer\n\t\t\t// We use an anonymous function so that context is window\n\t\t\t// rather than jQuery in Firefox\n\t\t\t( window.execScript || function( data ) {\n\t\t\t\twindow[ \"eval\" ].call( window, data ); // jscs:ignore requireDotNotation\n\t\t\t} )( data );\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android<4.1, IE<9\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\tvar len;\n\n\t\tif ( arr ) {\n\t\t\tif ( indexOf ) {\n\t\t\t\treturn indexOf.call( arr, elem, i );\n\t\t\t}\n\n\t\t\tlen = arr.length;\n\t\t\ti = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;\n\n\t\t\tfor ( ; i < len; i++ ) {\n\n\t\t\t\t// Skip accessing in sparse arrays\n\t\t\t\tif ( i in arr && arr[ i ] === elem ) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn -1;\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\twhile ( j < len ) {\n\t\t\tfirst[ i++ ] = second[ j++ ];\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists)\n\t\tif ( len !== len ) {\n\t\t\twhile ( second[ j ] !== undefined ) {\n\t\t\t\tfirst[ i++ ] = second[ j++ ];\n\t\t\t}\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar args, proxy, tmp;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\tnow: function() {\n\t\treturn +( new Date() );\n\t},\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\n// JSHint would error on this code due to the Symbol not being defined in ES5.\n// Defining this global in .jshintrc would create a danger of using the global\n// unguarded in another place, it seems safer to just disable JSHint for these\n// three lines.\n/* jshint ignore: start */\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = deletedIds[ Symbol.iterator ];\n}\n/* jshint ignore: end */\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: iOS 8.2 (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.2.1\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2015-10-17\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// General-purpose constants\n\tMAX_NEGATIVE = 1 << 31,\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// http://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\trescape = /'|\\\\/g,\n\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t};\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, nidselect, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rescape, \"\\\\$&\" );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\tnidselect = ridentifier.test( nid ) ? \"#\" + nid : \"[id='\" + nid + \"']\";\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = nidselect + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created div and expects a boolean result\n */\nfunction assert( fn ) {\n\tvar div = document.createElement(\"div\");\n\n\ttry {\n\t\treturn !!fn( div );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( div.parentNode ) {\n\t\t\tdiv.parentNode.removeChild( div );\n\t\t}\n\t\t// release memory in IE\n\t\tdiv = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\n\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, parent,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( (parent = document.defaultView) && parent.top !== parent ) {\n\t\t// Support: IE 11\n\t\tif ( parent.addEventListener ) {\n\t\t\tparent.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( parent.attachEvent ) {\n\t\t\tparent.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( div ) {\n\t\tdiv.className = \"i\";\n\t\treturn !div.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( div ) {\n\t\tdiv.appendChild( document.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( div ) {\n\t\tdocElem.appendChild( div ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID find and filter\n\tif ( support.getById ) {\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\treturn m ? [ m ] : [];\n\t\t\t}\n\t\t};\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t} else {\n\t\t// Support: IE6/7\n\t\t// getElementById is not reliable as a find shortcut\n\t\tdelete Expr.find[\"ID\"];\n\n\t\tExpr.filter[\"ID\"] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See http://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( div ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// http://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( div ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( div.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !div.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibing-combinator selector` fails\n\t\t\tif ( !div.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( div ) {\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tdiv.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( div.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tdiv.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( div ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( div, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": function( elem ) {\n\t\t\treturn elem.disabled === false;\n\t\t},\n\n\t\t\"disabled\": function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tcheckNonElements = base && dir === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( (oldCache = uniqueCache[ dir ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ dir ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\n\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( div1 ) {\n\t// Should return 1, but returns 4 (following)\n\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( div ) {\n\tdiv.innerHTML = \"<a href='#'></a>\";\n\treturn div.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( div ) {\n\tdiv.innerHTML = \"<input/>\";\n\tdiv.firstChild.setAttribute( \"value\", \"\" );\n\treturn div.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( div ) {\n\treturn div.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = ( /^<([\\w-]+)\\s*\\/?>(?:<\\/\\1>|)$/ );\n\n\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\t/* jshint -W018 */\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( typeof qualifier === \"string\" ) {\n\t\tif ( risSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter( qualifier, elements, not );\n\t\t}\n\n\t\tqualifier = jQuery.filter( qualifier, elements );\n\t}\n\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( jQuery.inArray( elem, qualifier ) > -1 ) !== not;\n\t} );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\treturn elems.length === 1 && elem.nodeType === 1 ?\n\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\n\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\t\treturn elem.nodeType === 1;\n\t\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i,\n\t\t\tret = [],\n\t\t\tself = this,\n\t\t\tlen = self.length;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\n\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\n\t\treturn ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// init accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector.charAt( 0 ) === \"<\" &&\n\t\t\t\tselector.charAt( selector.length - 1 ) === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\n\t\t\t\t\t\t// Handle the case where IE and Opera return items\n\t\t\t\t\t\t// by name instead of ID\n\t\t\t\t\t\tif ( elem.id !== match[ 2 ] ) {\n\t\t\t\t\t\t\treturn rootjQuery.find( selector );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Otherwise, we inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis.context = this[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn typeof root.ready !== \"undefined\" ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar i,\n\t\t\ttargets = jQuery( target, this ),\n\t\t\tlen = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t// Always skip document fragments\n\t\t\t\tif ( cur.nodeType < 11 && ( pos ?\n\t\t\t\t\tpos.index( cur ) > -1 :\n\n\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within\n\t// the matched set of elements\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn jQuery.inArray( this[ 0 ], jQuery( elem ) );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn jQuery.inArray(\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem, this );\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\tdo {\n\t\tcur = cur[ dir ];\n\t} while ( cur && cur.nodeType !== 1 );\n\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn jQuery.nodeName( elem, \"iframe\" ) ?\n\t\t\telem.contentDocument || elem.contentWindow.document :\n\t\t\tjQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar ret = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tret = jQuery.filter( selector, ret );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tret = jQuery.uniqueSort( ret );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tret = ret.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnotwhite = ( /\\S+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( jQuery.isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && jQuery.type( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = true;\n\t\t\t\tif ( !memory ) {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, listener list, final state\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ), \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ), \"rejected\" ],\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ) ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\n\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis === promise ? newDefer.promise() : this,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Keep pipe for back-compat\n\t\tpromise.pipe = promise.then;\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 3 ];\n\n\t\t\t// promise[ done | fail | progress ] = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add( function() {\n\n\t\t\t\t\t// state = [ resolved | rejected ]\n\t\t\t\t\tstate = stateString;\n\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n\t\t\t}\n\n\t\t\t// deferred[ resolve | reject | notify ]\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? promise : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\n\t\tvar i = 0,\n\t\t\tresolveValues = slice.call( arguments ),\n\t\t\tlength = resolveValues.length,\n\n\t\t\t// the count of uncompleted subordinates\n\t\t\tremaining = length !== 1 ||\n\t\t\t\t( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t// the master Deferred.\n\t\t\t// If resolveValues consist of only a single Deferred, just use that.\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n\t\t\t// Update function for both resolve and progress values\n\t\t\tupdateFunc = function( i, contexts, values ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tcontexts[ i ] = this;\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( values === progressValues ) {\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n\n\t\t\t\t\t} else if ( !( --remaining ) ) {\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tprogressValues, progressContexts, resolveContexts;\n\n\t\t// add listeners to Deferred subordinates; treat others as resolved\n\t\tif ( length > 1 ) {\n\t\t\tprogressValues = new Array( length );\n\t\t\tprogressContexts = new Array( length );\n\t\t\tresolveContexts = new Array( length );\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n\t\t\t\t\tresolveValues[ i ].promise()\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) )\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n\t\t\t\t\t\t.fail( deferred.reject );\n\t\t\t\t} else {\n\t\t\t\t\t--remaining;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// if we're not waiting on anything, resolve the master\n\t\tif ( !remaining ) {\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\n\t\t}\n\n\t\treturn deferred.promise();\n\t}\n} );\n\n\n// The deferred used on DOM ready\nvar readyList;\n\njQuery.fn.ready = function( fn ) {\n\n\t// Add the callback\n\tjQuery.ready.promise().done( fn );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\n\t\t// Trigger any bound ready events\n\t\tif ( jQuery.fn.triggerHandler ) {\n\t\t\tjQuery( document ).triggerHandler( \"ready\" );\n\t\t\tjQuery( document ).off( \"ready\" );\n\t\t}\n\t}\n} );\n\n/**\n * Clean-up method for dom ready events\n */\nfunction detach() {\n\tif ( document.addEventListener ) {\n\t\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\t\twindow.removeEventListener( \"load\", completed );\n\n\t} else {\n\t\tdocument.detachEvent( \"onreadystatechange\", completed );\n\t\twindow.detachEvent( \"onload\", completed );\n\t}\n}\n\n/**\n * The ready event handler and self cleanup method\n */\nfunction completed() {\n\n\t// readyState === \"complete\" is good enough for us to call the dom ready in oldIE\n\tif ( document.addEventListener ||\n\t\twindow.event.type === \"load\" ||\n\t\tdocument.readyState === \"complete\" ) {\n\n\t\tdetach();\n\t\tjQuery.ready();\n\t}\n}\n\njQuery.ready.promise = function( obj ) {\n\tif ( !readyList ) {\n\n\t\treadyList = jQuery.Deferred();\n\n\t\t// Catch cases where $(document).ready() is called\n\t\t// after the browser event has already occurred.\n\t\t// Support: IE6-10\n\t\t// Older IE sometimes signals \"interactive\" too soon\n\t\tif ( document.readyState === \"complete\" ||\n\t\t\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\twindow.setTimeout( jQuery.ready );\n\n\t\t// Standards-based browsers support DOMContentLoaded\n\t\t} else if ( document.addEventListener ) {\n\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", completed );\n\n\t\t// If IE event model is used\n\t\t} else {\n\n\t\t\t// Ensure firing before onload, maybe late but safe also for iframes\n\t\t\tdocument.attachEvent( \"onreadystatechange\", completed );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.attachEvent( \"onload\", completed );\n\n\t\t\t// If IE and not a frame\n\t\t\t// continually check to see if the document is ready\n\t\t\tvar top = false;\n\n\t\t\ttry {\n\t\t\t\ttop = window.frameElement == null && document.documentElement;\n\t\t\t} catch ( e ) {}\n\n\t\t\tif ( top && top.doScroll ) {\n\t\t\t\t( function doScrollCheck() {\n\t\t\t\t\tif ( !jQuery.isReady ) {\n\n\t\t\t\t\t\ttry {\n\n\t\t\t\t\t\t\t// Use the trick by Diego Perini\n\t\t\t\t\t\t\t// http://javascript.nwbox.com/IEContentLoaded/\n\t\t\t\t\t\t\ttop.doScroll( \"left\" );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn window.setTimeout( doScrollCheck, 50 );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// detach all dom ready events\n\t\t\t\t\t\tdetach();\n\n\t\t\t\t\t\t// and execute any waiting functions\n\t\t\t\t\t\tjQuery.ready();\n\t\t\t\t\t}\n\t\t\t\t} )();\n\t\t\t}\n\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n// Kick off the DOM ready check even if the user does not\njQuery.ready.promise();\n\n\n\n\n// Support: IE<9\n// Iteration over object's inherited properties before its own\nvar i;\nfor ( i in jQuery( support ) ) {\n\tbreak;\n}\nsupport.ownFirst = i === \"0\";\n\n// Note: most support tests are defined in their respective modules.\n// false until the test is run\nsupport.inlineBlockNeedsLayout = false;\n\n// Execute ASAP in case we need to set body.style.zoom\njQuery( function() {\n\n\t// Minified: var a,b,c,d\n\tvar val, div, body, container;\n\n\tbody = document.getElementsByTagName( \"body\" )[ 0 ];\n\tif ( !body || !body.style ) {\n\n\t\t// Return for frameset docs that don't have a body\n\t\treturn;\n\t}\n\n\t// Setup\n\tdiv = document.createElement( \"div\" );\n\tcontainer = document.createElement( \"div\" );\n\tcontainer.style.cssText = \"position:absolute;border:0;width:0;height:0;top:0;left:-9999px\";\n\tbody.appendChild( container ).appendChild( div );\n\n\tif ( typeof div.style.zoom !== \"undefined\" ) {\n\n\t\t// Support: IE<8\n\t\t// Check if natively block-level elements act like inline-block\n\t\t// elements when setting their display to 'inline' and giving\n\t\t// them layout\n\t\tdiv.style.cssText = \"display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1\";\n\n\t\tsupport.inlineBlockNeedsLayout = val = div.offsetWidth === 3;\n\t\tif ( val ) {\n\n\t\t\t// Prevent IE 6 from affecting layout for positioned elements #11048\n\t\t\t// Prevent IE from shrinking the body in IE 7 mode #12869\n\t\t\t// Support: IE<8\n\t\t\tbody.style.zoom = 1;\n\t\t}\n\t}\n\n\tbody.removeChild( container );\n} );\n\n\n( function() {\n\tvar div = document.createElement( \"div\" );\n\n\t// Support: IE<9\n\tsupport.deleteExpando = true;\n\ttry {\n\t\tdelete div.test;\n\t} catch ( e ) {\n\t\tsupport.deleteExpando = false;\n\t}\n\n\t// Null elements to avoid leaks in IE.\n\tdiv = null;\n} )();\nvar acceptData = function( elem ) {\n\tvar noData = jQuery.noData[ ( elem.nodeName + \" \" ).toLowerCase() ],\n\t\tnodeType = +elem.nodeType || 1;\n\n\t// Do not set data on non-element DOM nodes because it will not be cleared (#8335).\n\treturn nodeType !== 1 && nodeType !== 9 ?\n\t\tfalse :\n\n\t\t// Nodes accept data unless otherwise specified; rejection can be conditional\n\t\t!noData || noData !== true && elem.getAttribute( \"classid\" ) === noData;\n};\n\n\n\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /([A-Z])/g;\n\nfunction dataAttr( elem, key, data ) {\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\n\t\tvar name = \"data-\" + key.replace( rmultiDash, \"-$1\" ).toLowerCase();\n\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\t\tdata === \"false\" ? false :\n\t\t\t\t\tdata === \"null\" ? null :\n\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\n\t\t\t\t\t+data + \"\" === data ? +data :\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\tdata;\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tjQuery.data( elem, key, data );\n\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\n\treturn data;\n}\n\n// checks a cache object for emptiness\nfunction isEmptyDataObject( obj ) {\n\tvar name;\n\tfor ( name in obj ) {\n\n\t\t// if the public data object is empty, the private is still empty\n\t\tif ( name === \"data\" && jQuery.isEmptyObject( obj[ name ] ) ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( name !== \"toJSON\" ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nfunction internalData( elem, name, data, pvt /* Internal Use Only */ ) {\n\tif ( !acceptData( elem ) ) {\n\t\treturn;\n\t}\n\n\tvar ret, thisCache,\n\t\tinternalKey = jQuery.expando,\n\n\t\t// We have to handle DOM nodes and JS objects differently because IE6-7\n\t\t// can't GC object references properly across the DOM-JS boundary\n\t\tisNode = elem.nodeType,\n\n\t\t// Only DOM nodes need the global jQuery cache; JS object data is\n\t\t// attached directly to the object so GC can occur automatically\n\t\tcache = isNode ? jQuery.cache : elem,\n\n\t\t// Only defining an ID for JS objects if its cache already exists allows\n\t\t// the code to shortcut on the same path as a DOM node with no cache\n\t\tid = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;\n\n\t// Avoid doing any more work than we need to when trying to get data on an\n\t// object that has no data at all\n\tif ( ( !id || !cache[ id ] || ( !pvt && !cache[ id ].data ) ) &&\n\t\tdata === undefined && typeof name === \"string\" ) {\n\t\treturn;\n\t}\n\n\tif ( !id ) {\n\n\t\t// Only DOM nodes need a new unique ID for each element since their data\n\t\t// ends up in the global cache\n\t\tif ( isNode ) {\n\t\t\tid = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++;\n\t\t} else {\n\t\t\tid = internalKey;\n\t\t}\n\t}\n\n\tif ( !cache[ id ] ) {\n\n\t\t// Avoid exposing jQuery metadata on plain JS objects when the object\n\t\t// is serialized using JSON.stringify\n\t\tcache[ id ] = isNode ? {} : { toJSON: jQuery.noop };\n\t}\n\n\t// An object can be passed to jQuery.data instead of a key/value pair; this gets\n\t// shallow copied over onto the existing cache\n\tif ( typeof name === \"object\" || typeof name === \"function\" ) {\n\t\tif ( pvt ) {\n\t\t\tcache[ id ] = jQuery.extend( cache[ id ], name );\n\t\t} else {\n\t\t\tcache[ id ].data = jQuery.extend( cache[ id ].data, name );\n\t\t}\n\t}\n\n\tthisCache = cache[ id ];\n\n\t// jQuery data() is stored in a separate object inside the object's internal data\n\t// cache in order to avoid key collisions between internal data and user-defined\n\t// data.\n\tif ( !pvt ) {\n\t\tif ( !thisCache.data ) {\n\t\t\tthisCache.data = {};\n\t\t}\n\n\t\tthisCache = thisCache.data;\n\t}\n\n\tif ( data !== undefined ) {\n\t\tthisCache[ jQuery.camelCase( name ) ] = data;\n\t}\n\n\t// Check for both converted-to-camel and non-converted data property names\n\t// If a data property was specified\n\tif ( typeof name === \"string\" ) {\n\n\t\t// First Try to find as-is property data\n\t\tret = thisCache[ name ];\n\n\t\t// Test for null|undefined property data\n\t\tif ( ret == null ) {\n\n\t\t\t// Try to find the camelCased property\n\t\t\tret = thisCache[ jQuery.camelCase( name ) ];\n\t\t}\n\t} else {\n\t\tret = thisCache;\n\t}\n\n\treturn ret;\n}\n\nfunction internalRemoveData( elem, name, pvt ) {\n\tif ( !acceptData( elem ) ) {\n\t\treturn;\n\t}\n\n\tvar thisCache, i,\n\t\tisNode = elem.nodeType,\n\n\t\t// See jQuery.data for more information\n\t\tcache = isNode ? jQuery.cache : elem,\n\t\tid = isNode ? elem[ jQuery.expando ] : jQuery.expando;\n\n\t// If there is already no cache entry for this object, there is no\n\t// purpose in continuing\n\tif ( !cache[ id ] ) {\n\t\treturn;\n\t}\n\n\tif ( name ) {\n\n\t\tthisCache = pvt ? cache[ id ] : cache[ id ].data;\n\n\t\tif ( thisCache ) {\n\n\t\t\t// Support array or space separated string names for data keys\n\t\t\tif ( !jQuery.isArray( name ) ) {\n\n\t\t\t\t// try the string as a key before any manipulation\n\t\t\t\tif ( name in thisCache ) {\n\t\t\t\t\tname = [ name ];\n\t\t\t\t} else {\n\n\t\t\t\t\t// split the camel cased version by spaces unless a key with the spaces exists\n\t\t\t\t\tname = jQuery.camelCase( name );\n\t\t\t\t\tif ( name in thisCache ) {\n\t\t\t\t\t\tname = [ name ];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tname = name.split( \" \" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// If \"name\" is an array of keys...\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\n\t\t\t\t// keys will be converted to camelCase.\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\n\t\t\t\t// both plain key and camelCase key. #12786\n\t\t\t\t// This will only penalize the array argument path.\n\t\t\t\tname = name.concat( jQuery.map( name, jQuery.camelCase ) );\n\t\t\t}\n\n\t\t\ti = name.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete thisCache[ name[ i ] ];\n\t\t\t}\n\n\t\t\t// If there is no data left in the cache, we want to continue\n\t\t\t// and let the cache object itself get destroyed\n\t\t\tif ( pvt ? !isEmptyDataObject( thisCache ) : !jQuery.isEmptyObject( thisCache ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\t// See jQuery.data for more information\n\tif ( !pvt ) {\n\t\tdelete cache[ id ].data;\n\n\t\t// Don't destroy the parent cache unless the internal data object\n\t\t// had been the only thing left in it\n\t\tif ( !isEmptyDataObject( cache[ id ] ) ) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\t// Destroy the cache\n\tif ( isNode ) {\n\t\tjQuery.cleanData( [ elem ], true );\n\n\t// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)\n\t/* jshint eqeqeq: false */\n\t} else if ( support.deleteExpando || cache != cache.window ) {\n\t\t/* jshint eqeqeq: true */\n\t\tdelete cache[ id ];\n\n\t// When all else fails, undefined\n\t} else {\n\t\tcache[ id ] = undefined;\n\t}\n}\n\njQuery.extend( {\n\tcache: {},\n\n\t// The following elements (space-suffixed to avoid Object.prototype collisions)\n\t// throw uncatchable exceptions if you attempt to set expando properties\n\tnoData: {\n\t\t\"applet \": true,\n\t\t\"embed \": true,\n\n\t\t// ...but Flash objects (which have this classid) *can* handle expandos\n\t\t\"object \": \"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"\n\t},\n\n\thasData: function( elem ) {\n\t\telem = elem.nodeType ? jQuery.cache[ elem[ jQuery.expando ] ] : elem[ jQuery.expando ];\n\t\treturn !!elem && !isEmptyDataObject( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn internalData( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\treturn internalRemoveData( elem, name );\n\t},\n\n\t// For internal use only.\n\t_data: function( elem, name, data ) {\n\t\treturn internalData( elem, name, data, true );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\treturn internalRemoveData( elem, name, true );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Special expections of .data basically thwart jQuery.access,\n\t\t// so implement the relevant behavior ourselves\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = jQuery.data( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !jQuery._data( elem, \"parsedAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE11+\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tjQuery._data( elem, \"parsedAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tjQuery.data( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn arguments.length > 1 ?\n\n\t\t\t// Sets one value\n\t\t\tthis.each( function() {\n\t\t\t\tjQuery.data( this, key, value );\n\t\t\t} ) :\n\n\t\t\t// Gets one value\n\t\t\t// Try to fetch any internally stored data first\n\t\t\telem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined;\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeData( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = jQuery._data( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray( data ) ) {\n\t\t\t\t\tqueue = jQuery._data( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// not intended for public consumption - generates a queueHooks object,\n\t// or returns the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn jQuery._data( elem, key ) || jQuery._data( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tjQuery._removeData( elem, type + \"queue\" );\n\t\t\t\tjQuery._removeData( elem, key );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = jQuery._data( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\n\n\n( function() {\n\tvar shrinkWrapBlocksVal;\n\n\tsupport.shrinkWrapBlocks = function() {\n\t\tif ( shrinkWrapBlocksVal != null ) {\n\t\t\treturn shrinkWrapBlocksVal;\n\t\t}\n\n\t\t// Will be changed later if needed.\n\t\tshrinkWrapBlocksVal = false;\n\n\t\t// Minified: var b,c,d\n\t\tvar div, body, container;\n\n\t\tbody = document.getElementsByTagName( \"body\" )[ 0 ];\n\t\tif ( !body || !body.style ) {\n\n\t\t\t// Test fired too early or in an unsupported environment, exit.\n\t\t\treturn;\n\t\t}\n\n\t\t// Setup\n\t\tdiv = document.createElement( \"div\" );\n\t\tcontainer = document.createElement( \"div\" );\n\t\tcontainer.style.cssText = \"position:absolute;border:0;width:0;height:0;top:0;left:-9999px\";\n\t\tbody.appendChild( container ).appendChild( div );\n\n\t\t// Support: IE6\n\t\t// Check if elements with layout shrink-wrap their children\n\t\tif ( typeof div.style.zoom !== \"undefined\" ) {\n\n\t\t\t// Reset CSS: box-sizing; display; margin; border\n\t\t\tdiv.style.cssText =\n\n\t\t\t\t// Support: Firefox<29, Android 2.3\n\t\t\t\t// Vendor-prefix box-sizing\n\t\t\t\t\"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;\" +\n\t\t\t\t\"box-sizing:content-box;display:block;margin:0;border:0;\" +\n\t\t\t\t\"padding:1px;width:1px;zoom:1\";\n\t\t\tdiv.appendChild( document.createElement( \"div\" ) ).style.width = \"5px\";\n\t\t\tshrinkWrapBlocksVal = div.offsetWidth !== 3;\n\t\t}\n\n\t\tbody.removeChild( container );\n\n\t\treturn shrinkWrapBlocksVal;\n\t};\n\n} )();\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHidden = function( elem, el ) {\n\n\t\t// isHidden might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ||\n\t\t\t!jQuery.contains( elem.ownerDocument, elem );\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted,\n\t\tscale = 1,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() { return tween.cur(); } :\n\t\t\tfunction() { return jQuery.css( elem, prop, \"\" ); },\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\tdo {\n\n\t\t\t// If previous iteration zeroed out, double until we get *something*.\n\t\t\t// Use string for doubling so we don't accidentally see scale as unchanged below\n\t\t\tscale = scale || \".5\";\n\n\t\t\t// Adjust and apply\n\t\t\tinitialInUnit = initialInUnit / scale;\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t// Break the loop if scale is unchanged or perfect, or if we've just had enough.\n\t\t} while (\n\t\t\tscale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations\n\t\t);\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlength = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ],\n\t\t\t\t\tkey,\n\t\t\t\t\traw ? value : value.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn chainable ?\n\t\telems :\n\n\t\t// Gets\n\t\tbulk ?\n\t\t\tfn.call( elems ) :\n\t\t\tlength ? fn( elems[ 0 ], key ) : emptyGet;\n};\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([\\w:-]+)/ );\n\nvar rscriptType = ( /^$|\\/(?:java|ecma)script/i );\n\nvar rleadingWhitespace = ( /^\\s+/ );\n\nvar nodeNames = \"abbr|article|aside|audio|bdi|canvas|data|datalist|\" +\n\t\t\"details|dialog|figcaption|figure|footer|header|hgroup|main|\" +\n\t\t\"mark|meter|nav|output|picture|progress|section|summary|template|time|video\";\n\n\n\nfunction createSafeFragment( document ) {\n\tvar list = nodeNames.split( \"|\" ),\n\t\tsafeFrag = document.createDocumentFragment();\n\n\tif ( safeFrag.createElement ) {\n\t\twhile ( list.length ) {\n\t\t\tsafeFrag.createElement(\n\t\t\t\tlist.pop()\n\t\t\t);\n\t\t}\n\t}\n\treturn safeFrag;\n}\n\n\n( function() {\n\tvar div = document.createElement( \"div\" ),\n\t\tfragment = document.createDocumentFragment(),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Setup\n\tdiv.innerHTML = \"  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\";\n\n\t// IE strips leading whitespace when .innerHTML is used\n\tsupport.leadingWhitespace = div.firstChild.nodeType === 3;\n\n\t// Make sure that tbody elements aren't automatically inserted\n\t// IE will insert them into empty tables\n\tsupport.tbody = !div.getElementsByTagName( \"tbody\" ).length;\n\n\t// Make sure that link elements get serialized correctly by innerHTML\n\t// This requires a wrapper element in IE\n\tsupport.htmlSerialize = !!div.getElementsByTagName( \"link\" ).length;\n\n\t// Makes sure cloning an html5 element does not cause problems\n\t// Where outerHTML is undefined, this still works\n\tsupport.html5Clone =\n\t\tdocument.createElement( \"nav\" ).cloneNode( true ).outerHTML !== \"<:nav></:nav>\";\n\n\t// Check if a disconnected checkbox will retain its checked\n\t// value of true after appended to the DOM (IE6/7)\n\tinput.type = \"checkbox\";\n\tinput.checked = true;\n\tfragment.appendChild( input );\n\tsupport.appendChecked = input.checked;\n\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\t// Support: IE6-IE11+\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// #11217 - WebKit loses check when the name is after the checked attribute\n\tfragment.appendChild( div );\n\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput = document.createElement( \"input\" );\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3\n\t// old WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE<9\n\t// Cloned elements keep attachEvent handlers, we use addEventListener on IE9+\n\tsupport.noCloneEvent = !!div.addEventListener;\n\n\t// Support: IE<9\n\t// Since attributes and properties are the same in IE,\n\t// cleanData must set properties to undefined rather than use removeAttribute\n\tdiv[ jQuery.expando ] = 1;\n\tsupport.attributes = !div.getAttribute( jQuery.expando );\n} )();\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\tlegend: [ 1, \"<fieldset>\", \"</fieldset>\" ],\n\tarea: [ 1, \"<map>\", \"</map>\" ],\n\n\t// Support: IE8\n\tparam: [ 1, \"<object>\", \"</object>\" ],\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\tcol: [ 2, \"<table><tbody></tbody><colgroup>\", \"</colgroup></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,\n\t// unless wrapped in a div with non-breaking characters in front of it.\n\t_default: support.htmlSerialize ? [ 0, \"\", \"\" ] : [ 1, \"X<div>\", \"</div>\" ]\n};\n\n// Support: IE8-IE9\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\tvar elems, elem,\n\t\ti = 0,\n\t\tfound = typeof context.getElementsByTagName !== \"undefined\" ?\n\t\t\tcontext.getElementsByTagName( tag || \"*\" ) :\n\t\t\ttypeof context.querySelectorAll !== \"undefined\" ?\n\t\t\t\tcontext.querySelectorAll( tag || \"*\" ) :\n\t\t\t\tundefined;\n\n\tif ( !found ) {\n\t\tfor ( found = [], elems = context.childNodes || context;\n\t\t\t( elem = elems[ i ] ) != null;\n\t\t\ti++\n\t\t) {\n\t\t\tif ( !tag || jQuery.nodeName( elem, tag ) ) {\n\t\t\t\tfound.push( elem );\n\t\t\t} else {\n\t\t\t\tjQuery.merge( found, getAll( elem, tag ) );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\tjQuery.merge( [ context ], found ) :\n\t\tfound;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar elem,\n\t\ti = 0;\n\tfor ( ; ( elem = elems[ i ] ) != null; i++ ) {\n\t\tjQuery._data(\n\t\t\telem,\n\t\t\t\"globalEval\",\n\t\t\t!refElements || jQuery._data( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/,\n\trtbody = /<tbody/i;\n\nfunction fixDefaultChecked( elem ) {\n\tif ( rcheckableType.test( elem.type ) ) {\n\t\telem.defaultChecked = elem.checked;\n\t}\n}\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar j, elem, contains,\n\t\ttmp, tag, tbody, wrap,\n\t\tl = elems.length,\n\n\t\t// Ensure a safe fragment\n\t\tsafe = createSafeFragment( context ),\n\n\t\tnodes = [],\n\t\ti = 0;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || safe.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Manually add leading whitespace removed by IE\n\t\t\t\tif ( !support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {\n\t\t\t\t\tnodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[ 0 ] ) );\n\t\t\t\t}\n\n\t\t\t\t// Remove IE's autoinserted <tbody> from table fragments\n\t\t\t\tif ( !support.tbody ) {\n\n\t\t\t\t\t// String was a <table>, *may* have spurious <tbody>\n\t\t\t\t\telem = tag === \"table\" && !rtbody.test( elem ) ?\n\t\t\t\t\t\ttmp.firstChild :\n\n\t\t\t\t\t\t// String was a bare <thead> or <tfoot>\n\t\t\t\t\t\twrap[ 1 ] === \"<table>\" && !rtbody.test( elem ) ?\n\t\t\t\t\t\t\ttmp :\n\t\t\t\t\t\t\t0;\n\n\t\t\t\t\tj = elem && elem.childNodes.length;\n\t\t\t\t\twhile ( j-- ) {\n\t\t\t\t\t\tif ( jQuery.nodeName( ( tbody = elem.childNodes[ j ] ), \"tbody\" ) &&\n\t\t\t\t\t\t\t!tbody.childNodes.length ) {\n\n\t\t\t\t\t\t\telem.removeChild( tbody );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Fix #12392 for WebKit and IE > 9\n\t\t\t\ttmp.textContent = \"\";\n\n\t\t\t\t// Fix #12392 for oldIE\n\t\t\t\twhile ( tmp.firstChild ) {\n\t\t\t\t\ttmp.removeChild( tmp.firstChild );\n\t\t\t\t}\n\n\t\t\t\t// Remember the top-level container for proper cleanup\n\t\t\t\ttmp = safe.lastChild;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Fix #11356: Clear elements from fragment\n\tif ( tmp ) {\n\t\tsafe.removeChild( tmp );\n\t}\n\n\t// Reset defaultChecked for any radios and checkboxes\n\t// about to be appended to the DOM in IE 6/7 (#8060)\n\tif ( !support.appendChecked ) {\n\t\tjQuery.grep( getAll( nodes, \"input\" ), fixDefaultChecked );\n\t}\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( safe.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\ttmp = null;\n\n\treturn safe;\n}\n\n\n( function() {\n\tvar i, eventName,\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Support: IE<9 (lack submit/change bubble), Firefox (lack focus(in | out) events)\n\tfor ( i in { submit: true, change: true, focusin: true } ) {\n\t\teventName = \"on\" + i;\n\n\t\tif ( !( support[ i ] = eventName in window ) ) {\n\n\t\t\t// Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)\n\t\t\tdiv.setAttribute( eventName, \"t\" );\n\t\t\tsupport[ i ] = div.attributes[ eventName ].expando === false;\n\t\t}\n\t}\n\n\t// Null elements to avoid leaks in IE.\n\tdiv = null;\n} )();\n\n\nvar rformElems = /^(?:input|select|textarea)$/i,\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE9\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\t\tvar tmp, events, t, handleObjIn,\n\t\t\tspecial, eventHandle, handleObj,\n\t\t\thandlers, type, namespaces, origType,\n\t\t\telemData = jQuery._data( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" &&\n\t\t\t\t\t( !e || jQuery.event.triggered !== e.type ) ?\n\t\t\t\t\tjQuery.event.dispatch.apply( eventHandle.elem, arguments ) :\n\t\t\t\t\tundefined;\n\t\t\t};\n\n\t\t\t// Add elem as a property of the handle fn to prevent a memory leak\n\t\t\t// with IE non-native events\n\t\t\teventHandle.elem = elem;\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener/attachEvent if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\t// Bind the global event handler to the element\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle, false );\n\n\t\t\t\t\t} else if ( elem.attachEvent ) {\n\t\t\t\t\t\telem.attachEvent( \"on\" + type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t\t// Nullify elem to prevent memory leaks in IE\n\t\telem = null;\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\t\tvar j, handleObj, tmp,\n\t\t\torigCount, t, events,\n\t\t\tspecial, handlers, type,\n\t\t\tnamespaces, origType,\n\t\t\telemData = jQuery.hasData( elem ) && jQuery._data( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdelete elemData.handle;\n\n\t\t\t// removeData also checks for emptiness and clears the expando if empty\n\t\t\t// so use it instead of delete\n\t\t\tjQuery._removeData( elem, \"events\" );\n\t\t}\n\t},\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\t\tvar handle, ontype, cur,\n\t\t\tbubbleType, special, tmp, i,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( jQuery._data( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tjQuery._data( cur, \"handle\" );\n\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif (\n\t\t\t\t( !special._default ||\n\t\t\t\t special._default.apply( eventPath.pop(), data ) === false\n\t\t\t\t) && acceptData( elem )\n\t\t\t) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\n\t\t\t\t// Can't use an .isFunction() check here because IE6/7 fails that test.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\ttry {\n\t\t\t\t\t\telem[ type ]();\n\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t// IE<9 dies on focus/blur to hidden element (#1486,#12518)\n\t\t\t\t\t\t// only reproducible on winXP IE8 native, not IE9 in IE8 mode\n\t\t\t\t\t}\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event );\n\n\t\tvar i, j, ret, matched, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\targs = slice.call( arguments ),\n\t\t\thandlers = ( jQuery._data( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, matches, sel, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Support (at least): Chrome, IE9\n\t\t// Find delegate handlers\n\t\t// Black-hole SVG <use> instance trees (#13180)\n\t\t//\n\t\t// Support: Firefox<=42+\n\t\t// Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)\n\t\tif ( delegateCount && cur.nodeType &&\n\t\t\t( event.type !== \"click\" || isNaN( event.button ) || event.button < 1 ) ) {\n\n\t\t\t/* jshint eqeqeq: false */\n\t\t\tfor ( ; cur != this; cur = cur.parentNode || this ) {\n\t\t\t\t/* jshint eqeqeq: true */\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== \"click\" ) ) {\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matches[ sel ] ) {\n\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matches } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop, copy,\n\t\t\ttype = event.type,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = this.fixHooks[ type ];\n\n\t\tif ( !fixHook ) {\n\t\t\tthis.fixHooks[ type ] = fixHook =\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\n\t\t\t\t{};\n\t\t}\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = new jQuery.Event( originalEvent );\n\n\t\ti = copy.length;\n\t\twhile ( i-- ) {\n\t\t\tprop = copy[ i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// Fix target property (#1925)\n\t\tif ( !event.target ) {\n\t\t\tevent.target = originalEvent.srcElement || document;\n\t\t}\n\n\t\t// Support: Safari 6-8+\n\t\t// Target should not be a text node (#504, #13143)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// For mouse/key events, metaKey==false if it's undefined (#3368, #11328)\n\t\tevent.metaKey = !!event.metaKey;\n\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\tprops: ( \"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase \" +\n\t\t\"metaKey relatedTarget shiftKey target timeStamp view which\" ).split( \" \" ),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split( \" \" ),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: ( \"button buttons clientX clientY fromElement offsetX offsetY \" +\n\t\t\t\"pageX pageY screenX screenY toElement\" ).split( \" \" ),\n\t\tfilter: function( event, original ) {\n\t\t\tvar body, eventDoc, doc,\n\t\t\t\tbutton = original.button,\n\t\t\t\tfromElement = original.fromElement;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX +\n\t\t\t\t\t( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) -\n\t\t\t\t\t( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY +\n\t\t\t\t\t( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) -\n\t\t\t\t\t( doc && doc.clientTop  || body && body.clientTop  || 0 );\n\t\t\t}\n\n\t\t\t// Add relatedTarget, if necessary\n\t\t\tif ( !event.relatedTarget && fromElement ) {\n\t\t\t\tevent.relatedTarget = fromElement === event.target ?\n\t\t\t\t\toriginal.toElement :\n\t\t\t\t\tfromElement;\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis.focus();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t// Support: IE<9\n\t\t\t\t\t\t// If we error on focus to hidden element (#1486, #12518),\n\t\t\t\t\t\t// let .trigger() run the handlers\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( jQuery.nodeName( this, \"input\" ) && this.type === \"checkbox\" && this.click ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\n\t\t\t\t// Previously, `originalEvent: {}` was set here, so stopPropagation call\n\t\t\t\t// would not be triggered on donor event, since in our own\n\t\t\t\t// jQuery.event.stopPropagation function we had a check for existence of\n\t\t\t\t// originalEvent.stopPropagation method, so, consequently it would be a noop.\n\t\t\t\t//\n\t\t\t\t// Guard for simulated events was moved to jQuery.event.stopPropagation function\n\t\t\t\t// since `originalEvent` should point to the original event for the\n\t\t\t\t// constancy with other events and for more focused logic\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\n\t\tif ( e.isDefaultPrevented() ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n};\n\njQuery.removeEvent = document.removeEventListener ?\n\tfunction( elem, type, handle ) {\n\n\t\t// This \"if\" is needed for plain objects\n\t\tif ( elem.removeEventListener ) {\n\t\t\telem.removeEventListener( type, handle );\n\t\t}\n\t} :\n\tfunction( elem, type, handle ) {\n\t\tvar name = \"on\" + type;\n\n\t\tif ( elem.detachEvent ) {\n\n\t\t\t// #8545, #7054, preventing memory leaks for custom events in IE6-8\n\t\t\t// detachEvent needed property on element, by name of that event,\n\t\t\t// to properly expose it to GC\n\t\t\tif ( typeof elem[ name ] === \"undefined\" ) {\n\t\t\t\telem[ name ] = null;\n\t\t\t}\n\n\t\t\telem.detachEvent( name, handle );\n\t\t}\n\t};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: IE < 9, Android < 4.0\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\t\tif ( !e ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If preventDefault exists, run it on the original event\n\t\tif ( e.preventDefault ) {\n\t\t\te.preventDefault();\n\n\t\t// Support: IE\n\t\t// Otherwise set the returnValue property of the original event to false\n\t\t} else {\n\t\t\te.returnValue = false;\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( !e || this.isSimulated ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If stopPropagation exists, run it on the original event\n\t\tif ( e.stopPropagation ) {\n\t\t\te.stopPropagation();\n\t\t}\n\n\t\t// Support: IE\n\t\t// Set the cancelBubble property of the original event to true\n\t\te.cancelBubble = true;\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && e.stopImmediatePropagation ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://code.google.com/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\n// IE submit delegation\nif ( !support.submit ) {\n\n\tjQuery.event.special.submit = {\n\t\tsetup: function() {\n\n\t\t\t// Only need this for delegated form submit events\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Lazy-add a submit handler when a descendant form may potentially be submitted\n\t\t\tjQuery.event.add( this, \"click._submit keypress._submit\", function( e ) {\n\n\t\t\t\t// Node name check avoids a VML-related crash in IE (#9807)\n\t\t\t\tvar elem = e.target,\n\t\t\t\t\tform = jQuery.nodeName( elem, \"input\" ) || jQuery.nodeName( elem, \"button\" ) ?\n\n\t\t\t\t\t\t// Support: IE <=8\n\t\t\t\t\t\t// We use jQuery.prop instead of elem.form\n\t\t\t\t\t\t// to allow fixing the IE8 delegated submit issue (gh-2332)\n\t\t\t\t\t\t// by 3rd party polyfills/workarounds.\n\t\t\t\t\t\tjQuery.prop( elem, \"form\" ) :\n\t\t\t\t\t\tundefined;\n\n\t\t\t\tif ( form && !jQuery._data( form, \"submit\" ) ) {\n\t\t\t\t\tjQuery.event.add( form, \"submit._submit\", function( event ) {\n\t\t\t\t\t\tevent._submitBubble = true;\n\t\t\t\t\t} );\n\t\t\t\t\tjQuery._data( form, \"submit\", true );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// return undefined since we don't need an event listener\n\t\t},\n\n\t\tpostDispatch: function( event ) {\n\n\t\t\t// If form was submitted by the user, bubble the event up the tree\n\t\t\tif ( event._submitBubble ) {\n\t\t\t\tdelete event._submitBubble;\n\t\t\t\tif ( this.parentNode && !event.isTrigger ) {\n\t\t\t\t\tjQuery.event.simulate( \"submit\", this.parentNode, event );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tteardown: function() {\n\n\t\t\t// Only need this for delegated form submit events\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Remove delegated handlers; cleanData eventually reaps submit handlers attached above\n\t\t\tjQuery.event.remove( this, \"._submit\" );\n\t\t}\n\t};\n}\n\n// IE change delegation and checkbox/radio fix\nif ( !support.change ) {\n\n\tjQuery.event.special.change = {\n\n\t\tsetup: function() {\n\n\t\t\tif ( rformElems.test( this.nodeName ) ) {\n\n\t\t\t\t// IE doesn't fire change on a check/radio until blur; trigger it on click\n\t\t\t\t// after a propertychange. Eat the blur-change in special.change.handle.\n\t\t\t\t// This still fires onchange a second time for check/radio after blur.\n\t\t\t\tif ( this.type === \"checkbox\" || this.type === \"radio\" ) {\n\t\t\t\t\tjQuery.event.add( this, \"propertychange._change\", function( event ) {\n\t\t\t\t\t\tif ( event.originalEvent.propertyName === \"checked\" ) {\n\t\t\t\t\t\t\tthis._justChanged = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t\tjQuery.event.add( this, \"click._change\", function( event ) {\n\t\t\t\t\t\tif ( this._justChanged && !event.isTrigger ) {\n\t\t\t\t\t\t\tthis._justChanged = false;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Allow triggered, simulated change events (#11500)\n\t\t\t\t\t\tjQuery.event.simulate( \"change\", this, event );\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Delegated event; lazy-add a change handler on descendant inputs\n\t\t\tjQuery.event.add( this, \"beforeactivate._change\", function( e ) {\n\t\t\t\tvar elem = e.target;\n\n\t\t\t\tif ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, \"change\" ) ) {\n\t\t\t\t\tjQuery.event.add( elem, \"change._change\", function( event ) {\n\t\t\t\t\t\tif ( this.parentNode && !event.isSimulated && !event.isTrigger ) {\n\t\t\t\t\t\t\tjQuery.event.simulate( \"change\", this.parentNode, event );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t\tjQuery._data( elem, \"change\", true );\n\t\t\t\t}\n\t\t\t} );\n\t\t},\n\n\t\thandle: function( event ) {\n\t\t\tvar elem = event.target;\n\n\t\t\t// Swallow native change events from checkbox/radio, we already triggered them above\n\t\t\tif ( this !== elem || event.isSimulated || event.isTrigger ||\n\t\t\t\t( elem.type !== \"radio\" && elem.type !== \"checkbox\" ) ) {\n\n\t\t\t\treturn event.handleObj.handler.apply( this, arguments );\n\t\t\t}\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tjQuery.event.remove( this, \"._change\" );\n\n\t\t\treturn !rformElems.test( this.nodeName );\n\t\t}\n\t};\n}\n\n// Support: Firefox\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome, Safari\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = jQuery._data( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tjQuery._data( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = jQuery._data( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tjQuery._removeData( doc, fix );\n\t\t\t\t} else {\n\t\t\t\t\tjQuery._data( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t},\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\nvar rinlinejQuery = / jQuery\\d+=\"(?:null|\\d+)\"/g,\n\trnoshimcache = new RegExp( \"<(?:\" + nodeNames + \")[\\\\s/>]\", \"i\" ),\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:-]+)[^>]*)\\/>/gi,\n\n\t// Support: IE 10-11, Edge 10240+\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptTypeMasked = /^true\\/(.*)/,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g,\n\tsafeFragment = createSafeFragment( document ),\n\tfragmentDiv = safeFragment.appendChild( document.createElement( \"div\" ) );\n\n// Support: IE<8\n// Manipulating tables requires a tbody\nfunction manipulationTarget( elem, content ) {\n\treturn jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ?\n\n\t\telem.getElementsByTagName( \"tbody\" )[ 0 ] ||\n\t\t\telem.appendChild( elem.ownerDocument.createElement( \"tbody\" ) ) :\n\t\telem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( jQuery.find.attr( elem, \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\tif ( match ) {\n\t\telem.type = match[ 1 ];\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tif ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {\n\t\treturn;\n\t}\n\n\tvar type, i, l,\n\t\toldData = jQuery._data( src ),\n\t\tcurData = jQuery._data( dest, oldData ),\n\t\tevents = oldData.events;\n\n\tif ( events ) {\n\t\tdelete curData.handle;\n\t\tcurData.events = {};\n\n\t\tfor ( type in events ) {\n\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t}\n\t\t}\n\t}\n\n\t// make the cloned public data object a copy from the original\n\tif ( curData.data ) {\n\t\tcurData.data = jQuery.extend( {}, curData.data );\n\t}\n}\n\nfunction fixCloneNodeIssues( src, dest ) {\n\tvar nodeName, e, data;\n\n\t// We do not need to do anything for non-Elements\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\tnodeName = dest.nodeName.toLowerCase();\n\n\t// IE6-8 copies events bound via attachEvent when using cloneNode.\n\tif ( !support.noCloneEvent && dest[ jQuery.expando ] ) {\n\t\tdata = jQuery._data( dest );\n\n\t\tfor ( e in data.events ) {\n\t\t\tjQuery.removeEvent( dest, e, data.handle );\n\t\t}\n\n\t\t// Event data gets referenced instead of copied if the expando gets copied too\n\t\tdest.removeAttribute( jQuery.expando );\n\t}\n\n\t// IE blanks contents when cloning scripts, and tries to evaluate newly-set text\n\tif ( nodeName === \"script\" && dest.text !== src.text ) {\n\t\tdisableScript( dest ).text = src.text;\n\t\trestoreScript( dest );\n\n\t// IE6-10 improperly clones children of object elements using classid.\n\t// IE10 throws NoModificationAllowedError if parent is null, #12132.\n\t} else if ( nodeName === \"object\" ) {\n\t\tif ( dest.parentNode ) {\n\t\t\tdest.outerHTML = src.outerHTML;\n\t\t}\n\n\t\t// This path appears unavoidable for IE9. When cloning an object\n\t\t// element in IE9, the outerHTML strategy above is not sufficient.\n\t\t// If the src has innerHTML and the destination does not,\n\t\t// copy the src.innerHTML into the dest.innerHTML. #10324\n\t\tif ( support.html5Clone && ( src.innerHTML && !jQuery.trim( dest.innerHTML ) ) ) {\n\t\t\tdest.innerHTML = src.innerHTML;\n\t\t}\n\n\t} else if ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\n\t\t// IE6-8 fails to persist the checked state of a cloned checkbox\n\t\t// or radio button. Worse, IE6-7 fail to give the cloned element\n\t\t// a checked appearance if the defaultChecked value isn't also set\n\n\t\tdest.defaultChecked = dest.checked = src.checked;\n\n\t\t// IE6-7 get confused and end up setting the value of a cloned\n\t\t// checkbox/radio button to an empty string instead of \"on\"\n\t\tif ( dest.value !== src.value ) {\n\t\t\tdest.value = src.value;\n\t\t}\n\n\t// IE6-8 fails to return the selected option to the default selected\n\t// state when cloning options\n\t} else if ( nodeName === \"option\" ) {\n\t\tdest.defaultSelected = dest.selected = src.defaultSelected;\n\n\t// IE6-8 fails to set the defaultValue to the correct value when\n\t// cloning other types of input fields\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar first, node, hasScripts,\n\t\tscripts, doc, fragment,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tisFunction = jQuery.isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( isFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( isFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!jQuery._data( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tjQuery.globalEval(\n\t\t\t\t\t\t\t\t( node.text || node.textContent || node.innerHTML || \"\" )\n\t\t\t\t\t\t\t\t\t.replace( rcleanScript, \"\" )\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Fix #11809: Avoid leaking memory\n\t\t\tfragment = first = null;\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\telems = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = elems[ i ] ) != null; i++ ) {\n\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar destElements, node, clone, i, srcElements,\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\tif ( support.html5Clone || jQuery.isXMLDoc( elem ) ||\n\t\t\t!rnoshimcache.test( \"<\" + elem.nodeName + \">\" ) ) {\n\n\t\t\tclone = elem.cloneNode( true );\n\n\t\t// IE<=8 does not properly clone detached, unknown element nodes\n\t\t} else {\n\t\t\tfragmentDiv.innerHTML = elem.outerHTML;\n\t\t\tfragmentDiv.removeChild( clone = fragmentDiv.firstChild );\n\t\t}\n\n\t\tif ( ( !support.noCloneEvent || !support.noCloneChecked ) &&\n\t\t\t\t( elem.nodeType === 1 || elem.nodeType === 11 ) && !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\t// Fix all IE cloning issues\n\t\t\tfor ( i = 0; ( node = srcElements[ i ] ) != null; ++i ) {\n\n\t\t\t\t// Ensure that the destination node is not null; Fixes #9587\n\t\t\t\tif ( destElements[ i ] ) {\n\t\t\t\t\tfixCloneNodeIssues( node, destElements[ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0; ( node = srcElements[ i ] ) != null; i++ ) {\n\t\t\t\t\tcloneCopyEvent( node, destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\tdestElements = srcElements = node = null;\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems, /* internal */ forceAcceptData ) {\n\t\tvar elem, type, id, data,\n\t\t\ti = 0,\n\t\t\tinternalKey = jQuery.expando,\n\t\t\tcache = jQuery.cache,\n\t\t\tattributes = support.attributes,\n\t\t\tspecial = jQuery.event.special;\n\n\t\tfor ( ; ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\tif ( forceAcceptData || acceptData( elem ) ) {\n\n\t\t\t\tid = elem[ internalKey ];\n\t\t\t\tdata = id && cache[ id ];\n\n\t\t\t\tif ( data ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remove cache only if it was not already removed by jQuery.event.remove\n\t\t\t\t\tif ( cache[ id ] ) {\n\n\t\t\t\t\t\tdelete cache[ id ];\n\n\t\t\t\t\t\t// Support: IE<9\n\t\t\t\t\t\t// IE does not allow us to delete expando properties from nodes\n\t\t\t\t\t\t// IE creates expando attributes along with the property\n\t\t\t\t\t\t// IE does not have a removeAttribute function on Document nodes\n\t\t\t\t\t\tif ( !attributes && typeof elem.removeAttribute !== \"undefined\" ) {\n\t\t\t\t\t\t\telem.removeAttribute( internalKey );\n\n\t\t\t\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t\t\t\t// https://code.google.com/p/chromium/issues/detail?id=378607\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telem[ internalKey ] = undefined;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdeletedIds.push( id );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\n\t// Keep domManip exposed until 3.0 (gh-2225)\n\tdomManip: domManip,\n\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().append(\n\t\t\t\t\t( this[ 0 ] && this[ 0 ].ownerDocument || document ).createTextNode( value )\n\t\t\t\t);\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\n\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t}\n\n\t\t\t// Remove any remaining nodes\n\t\t\twhile ( elem.firstChild ) {\n\t\t\t\telem.removeChild( elem.firstChild );\n\t\t\t}\n\n\t\t\t// If this is a select, ensure that it displays empty (#12336)\n\t\t\t// Support: IE<9\n\t\t\tif ( elem.options && jQuery.nodeName( elem, \"select\" ) ) {\n\t\t\t\telem.options.length = 0;\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined ) {\n\t\t\t\treturn elem.nodeType === 1 ?\n\t\t\t\t\telem.innerHTML.replace( rinlinejQuery, \"\" ) :\n\t\t\t\t\tundefined;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t( support.htmlSerialize || !rnoshimcache.test( value )  ) &&\n\t\t\t\t( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\telem = this[ i ] || {};\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\ti = 0,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\n\nvar iframe,\n\telemdisplay = {\n\n\t\t// Support: Firefox\n\t\t// We have to pre-define these values for FF (#10227)\n\t\tHTML: \"block\",\n\t\tBODY: \"block\"\n\t};\n\n/**\n * Retrieve the actual display of a element\n * @param {String} name nodeName of the element\n * @param {Object} doc Document object\n */\n\n// Called only from within defaultDisplay\nfunction actualDisplay( name, doc ) {\n\tvar elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n\n\t\tdisplay = jQuery.css( elem[ 0 ], \"display\" );\n\n\t// We don't have any data stored on the element,\n\t// so use \"detach\" method as fast way to get rid of the element\n\telem.detach();\n\n\treturn display;\n}\n\n/**\n * Try to determine the default display value of an element\n * @param {String} nodeName\n */\nfunction defaultDisplay( nodeName ) {\n\tvar doc = document,\n\t\tdisplay = elemdisplay[ nodeName ];\n\n\tif ( !display ) {\n\t\tdisplay = actualDisplay( nodeName, doc );\n\n\t\t// If the simple way fails, read from inside an iframe\n\t\tif ( display === \"none\" || !display ) {\n\n\t\t\t// Use the already-created iframe if possible\n\t\t\tiframe = ( iframe || jQuery( \"<iframe frameborder='0' width='0' height='0'/>\" ) )\n\t\t\t\t.appendTo( doc.documentElement );\n\n\t\t\t// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse\n\t\t\tdoc = ( iframe[ 0 ].contentWindow || iframe[ 0 ].contentDocument ).document;\n\n\t\t\t// Support: IE\n\t\t\tdoc.write();\n\t\t\tdoc.close();\n\n\t\t\tdisplay = actualDisplay( nodeName, doc );\n\t\t\tiframe.detach();\n\t\t}\n\n\t\t// Store the correct default display\n\t\telemdisplay[ nodeName ] = display;\n\t}\n\n\treturn display;\n}\nvar rmargin = ( /^margin/ );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar documentElement = document.documentElement;\n\n\n\n( function() {\n\tvar pixelPositionVal, pixelMarginRightVal, boxSizingReliableVal,\n\t\treliableHiddenOffsetsVal, reliableMarginRightVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\tdiv.style.cssText = \"float:left;opacity:.5\";\n\n\t// Support: IE<9\n\t// Make sure that element opacity exists (as opposed to filter)\n\tsupport.opacity = div.style.opacity === \"0.5\";\n\n\t// Verify style float existence\n\t// (IE uses styleFloat instead of cssFloat)\n\tsupport.cssFloat = !!div.style.cssFloat;\n\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tcontainer = document.createElement( \"div\" );\n\tcontainer.style.cssText = \"border:0;width:8px;height:0;top:0;left:-9999px;\" +\n\t\t\"padding:0;margin-top:1px;position:absolute\";\n\tdiv.innerHTML = \"\";\n\tcontainer.appendChild( div );\n\n\t// Support: Firefox<29, Android 2.3\n\t// Vendor-prefix box-sizing\n\tsupport.boxSizing = div.style.boxSizing === \"\" || div.style.MozBoxSizing === \"\" ||\n\t\tdiv.style.WebkitBoxSizing === \"\";\n\n\tjQuery.extend( support, {\n\t\treliableHiddenOffsets: function() {\n\t\t\tif ( pixelPositionVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn reliableHiddenOffsetsVal;\n\t\t},\n\n\t\tboxSizingReliable: function() {\n\n\t\t\t// We're checking for pixelPositionVal here instead of boxSizingReliableVal\n\t\t\t// since that compresses better and they're computed together anyway.\n\t\t\tif ( pixelPositionVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\n\t\tpixelMarginRight: function() {\n\n\t\t\t// Support: Android 4.0-4.3\n\t\t\tif ( pixelPositionVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn pixelMarginRightVal;\n\t\t},\n\n\t\tpixelPosition: function() {\n\t\t\tif ( pixelPositionVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn pixelPositionVal;\n\t\t},\n\n\t\treliableMarginRight: function() {\n\n\t\t\t// Support: Android 2.3\n\t\t\tif ( pixelPositionVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn reliableMarginRightVal;\n\t\t},\n\n\t\treliableMarginLeft: function() {\n\n\t\t\t// Support: IE <=8 only, Android 4.0 - 4.3 only, Firefox <=3 - 37\n\t\t\tif ( pixelPositionVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn reliableMarginLeftVal;\n\t\t}\n\t} );\n\n\tfunction computeStyleTests() {\n\t\tvar contents, divStyle,\n\t\t\tdocumentElement = document.documentElement;\n\n\t\t// Setup\n\t\tdocumentElement.appendChild( container );\n\n\t\tdiv.style.cssText =\n\n\t\t\t// Support: Android 2.3\n\t\t\t// Vendor-prefix box-sizing\n\t\t\t\"-webkit-box-sizing:border-box;box-sizing:border-box;\" +\n\t\t\t\"position:relative;display:block;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"top:1%;width:50%\";\n\n\t\t// Support: IE<9\n\t\t// Assume reasonable values in the absence of getComputedStyle\n\t\tpixelPositionVal = boxSizingReliableVal = reliableMarginLeftVal = false;\n\t\tpixelMarginRightVal = reliableMarginRightVal = true;\n\n\t\t// Check for getComputedStyle so that this code is not run in IE<9.\n\t\tif ( window.getComputedStyle ) {\n\t\t\tdivStyle = window.getComputedStyle( div );\n\t\t\tpixelPositionVal = ( divStyle || {} ).top !== \"1%\";\n\t\t\treliableMarginLeftVal = ( divStyle || {} ).marginLeft === \"2px\";\n\t\t\tboxSizingReliableVal = ( divStyle || { width: \"4px\" } ).width === \"4px\";\n\n\t\t\t// Support: Android 4.0 - 4.3 only\n\t\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\t\tdiv.style.marginRight = \"50%\";\n\t\t\tpixelMarginRightVal = ( divStyle || { marginRight: \"4px\" } ).marginRight === \"4px\";\n\n\t\t\t// Support: Android 2.3 only\n\t\t\t// Div with explicit width and no margin-right incorrectly\n\t\t\t// gets computed margin-right based on width of container (#3333)\n\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\tcontents = div.appendChild( document.createElement( \"div\" ) );\n\n\t\t\t// Reset CSS: box-sizing; display; margin; border; padding\n\t\t\tcontents.style.cssText = div.style.cssText =\n\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Vendor-prefix box-sizing\n\t\t\t\t\"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;\" +\n\t\t\t\t\"box-sizing:content-box;display:block;margin:0;border:0;padding:0\";\n\t\t\tcontents.style.marginRight = contents.style.width = \"0\";\n\t\t\tdiv.style.width = \"1px\";\n\n\t\t\treliableMarginRightVal =\n\t\t\t\t!parseFloat( ( window.getComputedStyle( contents ) || {} ).marginRight );\n\n\t\t\tdiv.removeChild( contents );\n\t\t}\n\n\t\t// Support: IE6-8\n\t\t// First check that getClientRects works as expected\n\t\t// Check if table cells still have offsetWidth/Height when they are set\n\t\t// to display:none and there are still other visible table cells in a\n\t\t// table row; if so, offsetWidth/Height are not reliable for use when\n\t\t// determining if an element has been hidden directly using\n\t\t// display:none (it is still safe to use offsets if a parent element is\n\t\t// hidden; don safety goggles and see bug #4512 for more information).\n\t\tdiv.style.display = \"none\";\n\t\treliableHiddenOffsetsVal = div.getClientRects().length === 0;\n\t\tif ( reliableHiddenOffsetsVal ) {\n\t\t\tdiv.style.display = \"\";\n\t\t\tdiv.innerHTML = \"<table><tr><td></td><td>t</td></tr></table>\";\n\t\t\tdiv.childNodes[ 0 ].style.borderCollapse = \"separate\";\n\t\t\tcontents = div.getElementsByTagName( \"td\" );\n\t\t\tcontents[ 0 ].style.cssText = \"margin:0;border:0;padding:0;display:none\";\n\t\t\treliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;\n\t\t\tif ( reliableHiddenOffsetsVal ) {\n\t\t\t\tcontents[ 0 ].style.display = \"\";\n\t\t\t\tcontents[ 1 ].style.display = \"none\";\n\t\t\t\treliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;\n\t\t\t}\n\t\t}\n\n\t\t// Teardown\n\t\tdocumentElement.removeChild( container );\n\t}\n\n} )();\n\n\nvar getStyles, curCSS,\n\trposition = /^(top|right|bottom|left)$/;\n\nif ( window.getComputedStyle ) {\n\tgetStyles = function( elem ) {\n\n\t\t// Support: IE<=11+, Firefox<=30+ (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\n\tcurCSS = function( elem, name, computed ) {\n\t\tvar width, minWidth, maxWidth, ret,\n\t\t\tstyle = elem.style;\n\n\t\tcomputed = computed || getStyles( elem );\n\n\t\t// getPropertyValue is only needed for .css('filter') in IE9, see #12537\n\t\tret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;\n\n\t\t// Support: Opera 12.1x only\n\t\t// Fall back to style even without computed\n\t\t// computed is undefined for elems on document fragments\n\t\tif ( ( ret === \"\" || ret === undefined ) && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\tif ( computed ) {\n\n\t\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t\t// Chrome < 17 and Safari 5.0 uses \"computed value\"\n\t\t\t// instead of \"used value\" for margin-right\n\t\t\t// Safari 5.1.7 (at least) returns percentage for a larger set of values,\n\t\t\t// but width seems to be reliably pixels\n\t\t\t// this is against the CSSOM draft spec:\n\t\t\t// http://dev.w3.org/csswg/cssom/#resolved-values\n\t\t\tif ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t\t// Remember the original values\n\t\t\t\twidth = style.width;\n\t\t\t\tminWidth = style.minWidth;\n\t\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t\t// Put in the new values to get a computed value out\n\t\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\t\tret = computed.width;\n\n\t\t\t\t// Revert the changed values\n\t\t\t\tstyle.width = width;\n\t\t\t\tstyle.minWidth = minWidth;\n\t\t\t\tstyle.maxWidth = maxWidth;\n\t\t\t}\n\t\t}\n\n\t\t// Support: IE\n\t\t// IE returns zIndex value as an integer.\n\t\treturn ret === undefined ?\n\t\t\tret :\n\t\t\tret + \"\";\n\t};\n} else if ( documentElement.currentStyle ) {\n\tgetStyles = function( elem ) {\n\t\treturn elem.currentStyle;\n\t};\n\n\tcurCSS = function( elem, name, computed ) {\n\t\tvar left, rs, rsLeft, ret,\n\t\t\tstyle = elem.style;\n\n\t\tcomputed = computed || getStyles( elem );\n\t\tret = computed ? computed[ name ] : undefined;\n\n\t\t// Avoid setting ret to empty string here\n\t\t// so we don't default to auto\n\t\tif ( ret == null && style && style[ name ] ) {\n\t\t\tret = style[ name ];\n\t\t}\n\n\t\t// From the awesome hack by Dean Edwards\n\t\t// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291\n\n\t\t// If we're not dealing with a regular pixel number\n\t\t// but a number that has a weird ending, we need to convert it to pixels\n\t\t// but not position css attributes, as those are\n\t\t// proportional to the parent element instead\n\t\t// and we can't measure the parent instead because it\n\t\t// might trigger a \"stacking dolls\" problem\n\t\tif ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\tleft = style.left;\n\t\t\trs = elem.runtimeStyle;\n\t\t\trsLeft = rs && rs.left;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tif ( rsLeft ) {\n\t\t\t\trs.left = elem.currentStyle.left;\n\t\t\t}\n\t\t\tstyle.left = name === \"fontSize\" ? \"1em\" : ret;\n\t\t\tret = style.pixelLeft + \"px\";\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.left = left;\n\t\t\tif ( rsLeft ) {\n\t\t\t\trs.left = rsLeft;\n\t\t\t}\n\t\t}\n\n\t\t// Support: IE\n\t\t// IE returns zIndex value as an integer.\n\t\treturn ret === undefined ?\n\t\t\tret :\n\t\t\tret + \"\" || \"auto\";\n\t};\n}\n\n\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar\n\n\t\tralpha = /alpha\\([^)]*\\)/i,\n\tropacity = /opacity\\s*=\\s*([^)]*)/i,\n\n\t// swappable if display is none or starts with table except\n\t// \"table\", \"table-cell\", or \"table-caption\"\n\t// see here for display values:\n\t// https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trnumsplit = new RegExp( \"^(\" + pnum + \")(.*)$\", \"i\" ),\n\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"O\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style;\n\n\n// return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( name ) {\n\n\t// shortcut for names that are not vendor prefixed\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\n\t// check for vendor prefixed names\n\tvar capName = name.charAt( 0 ).toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem, hidden,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalues[ index ] = jQuery._data( elem, \"olddisplay\" );\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Reset the inline display of this element to learn if it is\n\t\t\t// being hidden by cascaded rules or not\n\t\t\tif ( !values[ index ] && display === \"none\" ) {\n\t\t\t\telem.style.display = \"\";\n\t\t\t}\n\n\t\t\t// Set elements which have been overridden with display: none\n\t\t\t// in a stylesheet to whatever the default browser style is\n\t\t\t// for such an element\n\t\t\tif ( elem.style.display === \"\" && isHidden( elem ) ) {\n\t\t\t\tvalues[ index ] =\n\t\t\t\t\tjQuery._data( elem, \"olddisplay\", defaultDisplay( elem.nodeName ) );\n\t\t\t}\n\t\t} else {\n\t\t\thidden = isHidden( elem );\n\n\t\t\tif ( display && display !== \"none\" || !hidden ) {\n\t\t\t\tjQuery._data(\n\t\t\t\t\telem,\n\t\t\t\t\t\"olddisplay\",\n\t\t\t\t\thidden ? display : jQuery.css( elem, \"display\" )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of most of the elements in a second loop\n\t// to avoid the constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( !show || elem.style.display === \"none\" || elem.style.display === \"\" ) {\n\t\t\telem.style.display = show ? values[ index ] || \"\" : \"none\";\n\t\t}\n\t}\n\n\treturn elements;\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\tvar matches = rnumsplit.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i = extra === ( isBorderBox ? \"border\" : \"content\" ) ?\n\n\t\t// If we already have the right measurement, avoid augmentation\n\t\t4 :\n\n\t\t// Otherwise initialize for horizontal or vertical properties\n\t\tname === \"width\" ? 1 : 0,\n\n\t\tval = 0;\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// at this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// at this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// at this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with offset property, which is equivalent to the border-box value\n\tvar valueIsBorderBox = true,\n\t\tval = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\n\t\tstyles = getStyles( elem ),\n\t\tisBorderBox = support.boxSizing &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// some non-html elements return undefined for offsetWidth, so check for null/undefined\n\t// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\n\t// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\n\tif ( val <= 0 || val == null ) {\n\n\t\t// Fall back to computed then uncomputed css if necessary\n\t\tval = curCSS( elem, name, styles );\n\t\tif ( val < 0 || val == null ) {\n\t\t\tval = elem.style[ name ];\n\t\t}\n\n\t\t// Computed unit is not pixels. Stop here and return.\n\t\tif ( rnumnonpx.test( val ) ) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// we need the check for style in case a browser which returns unreliable values\n\t\t// for getComputedStyle silently falls back to the reliable elem.style\n\t\tvalueIsBorderBox = isBorderBox &&\n\t\t\t( support.boxSizingReliable() || val === elem.style[ name ] );\n\n\t\t// Normalize \"\", auto, and prepare for extra\n\t\tval = parseFloat( val ) || 0;\n\t}\n\n\t// use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\n\t\t// normalize float css property\n\t\t\"float\": support.cssFloat ? \"cssFloat\" : \"styleFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tstyle = elem.style;\n\n\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t// gets hook for the prefixed version\n\t\t// followed by the unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set. See: #7116\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// Fixes #8908, it can be done more correctly by specifing setters in cssHooks,\n\t\t\t// but it would mean to define eight\n\t\t\t// (for every problematic property) identical functions\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\t// Support: IE\n\t\t\t\t// Swallow errors from 'invalid' CSS values (#5509)\n\t\t\t\ttry {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar num, val, hooks,\n\t\t\torigName = jQuery.camelCase( name );\n\n\t\t// Make sure that we're working with the right name\n\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t// gets hook for the prefixed version\n\t\t// followed by the unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t//convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Return, converting to number if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// certain elements can have dimension info if we invisibly show them\n\t\t\t\t// however, it must have a current display style that would benefit from this\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\t\t\t\t\telem.offsetWidth === 0 ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar styles = extra && getStyles( elem );\n\t\t\treturn setPositiveNumber( elem, value, extra ?\n\t\t\t\taugmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tsupport.boxSizing &&\n\t\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\t\tstyles\n\t\t\t\t) : 0\n\t\t\t);\n\t\t}\n\t};\n} );\n\nif ( !support.opacity ) {\n\tjQuery.cssHooks.opacity = {\n\t\tget: function( elem, computed ) {\n\n\t\t\t// IE uses filters for opacity\n\t\t\treturn ropacity.test( ( computed && elem.currentStyle ?\n\t\t\t\telem.currentStyle.filter :\n\t\t\t\telem.style.filter ) || \"\" ) ?\n\t\t\t\t\t( 0.01 * parseFloat( RegExp.$1 ) ) + \"\" :\n\t\t\t\t\tcomputed ? \"1\" : \"\";\n\t\t},\n\n\t\tset: function( elem, value ) {\n\t\t\tvar style = elem.style,\n\t\t\t\tcurrentStyle = elem.currentStyle,\n\t\t\t\topacity = jQuery.isNumeric( value ) ? \"alpha(opacity=\" + value * 100 + \")\" : \"\",\n\t\t\t\tfilter = currentStyle && currentStyle.filter || style.filter || \"\";\n\n\t\t\t// IE has trouble with opacity if it does not have layout\n\t\t\t// Force it by setting the zoom level\n\t\t\tstyle.zoom = 1;\n\n\t\t\t// if setting opacity to 1, and no other filters exist -\n\t\t\t// attempt to remove filter attribute #6652\n\t\t\t// if value === \"\", then remove inline opacity #12685\n\t\t\tif ( ( value >= 1 || value === \"\" ) &&\n\t\t\t\t\tjQuery.trim( filter.replace( ralpha, \"\" ) ) === \"\" &&\n\t\t\t\t\tstyle.removeAttribute ) {\n\n\t\t\t\t// Setting style.filter to null, \"\" & \" \" still leave \"filter:\" in the cssText\n\t\t\t\t// if \"filter:\" is present at all, clearType is disabled, we want to avoid this\n\t\t\t\t// style.removeAttribute is IE Only, but so apparently is this code path...\n\t\t\t\tstyle.removeAttribute( \"filter\" );\n\n\t\t\t\t// if there is no filter style applied in a css rule\n\t\t\t\t// or unset inline opacity, we are done\n\t\t\t\tif ( value === \"\" || currentStyle && !currentStyle.filter ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// otherwise, set new filter values\n\t\t\tstyle.filter = ralpha.test( filter ) ?\n\t\t\t\tfilter.replace( ralpha, opacity ) :\n\t\t\t\tfilter + \" \" + opacity;\n\t\t}\n\t};\n}\n\njQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn swap( elem, { \"display\": \"inline-block\" },\n\t\t\t\tcurCSS, [ elem, \"marginRight\" ] );\n\t\t}\n\t}\n);\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn (\n\t\t\t\tparseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\n\t\t\t\t// Support: IE<=11+\n\t\t\t\t// Running getBoundingClientRect on a disconnected node in IE throws an error\n\t\t\t\t// Support: IE8 only\n\t\t\t\t// getClientRects() errors on disconnected elems\n\t\t\t\t( jQuery.contains( elem.ownerDocument, elem ) ?\n\t\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t0\n\t\t\t\t)\n\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( jQuery.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t},\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHidden( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails\n\t\t\t// so, simple values such as \"10px\" are parsed to Float.\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// use step hook for back compat - use cssHook if its there - use .style if its\n\t\t\t// available and use plain properties where available\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 &&\n\t\t\t\t( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9\n// Panic based approach to setting things on disconnected nodes\n\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back Compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, timerId,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = jQuery.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\tattrs = { height: type },\n\t\ti = 0;\n\n\t// if we include width, step value is 1 to do all cssExpand values,\n\t// if we don't include width, step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4 ; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// we're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\t/* jshint validthis: true */\n\tvar prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHidden( elem ),\n\t\tdataShow = jQuery._data( elem, \"fxshow\" );\n\n\t// handle queue: false promises\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// doing this makes sure that the complete handler will be called\n\t\t\t// before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// height/width overflow pass\n\tif ( elem.nodeType === 1 && ( \"height\" in props || \"width\" in props ) ) {\n\n\t\t// Make sure that nothing sneaks out\n\t\t// Record all 3 overflow attributes because IE does not\n\t\t// change the overflow attribute when overflowX and\n\t\t// overflowY are set to the same value\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Set display property to inline-block for height/width\n\t\t// animations on inline elements that are having width/height animated\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\n\t\t// Test default display if display is currently \"none\"\n\t\tcheckDisplay = display === \"none\" ?\n\t\t\tjQuery._data( elem, \"olddisplay\" ) || defaultDisplay( elem.nodeName ) : display;\n\n\t\tif ( checkDisplay === \"inline\" && jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t// inline-level elements accept inline-block;\n\t\t\t// block-level elements need to be inline with layout\n\t\t\tif ( !support.inlineBlockNeedsLayout || defaultDisplay( elem.nodeName ) === \"inline\" ) {\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t} else {\n\t\t\t\tstyle.zoom = 1;\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tif ( !support.shrinkWrapBlocks() ) {\n\t\t\tanim.always( function() {\n\t\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t\t} );\n\t\t}\n\t}\n\n\t// show/hide pass\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.exec( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// If there is dataShow left over from a stopped hide or show\n\t\t\t\t// and we are going to proceed with show, we should pretend to be hidden\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\n\t\t// Any non-fx value stops us from restoring the original display value\n\t\t} else {\n\t\t\tdisplay = undefined;\n\t\t}\n\t}\n\n\tif ( !jQuery.isEmptyObject( orig ) ) {\n\t\tif ( dataShow ) {\n\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\thidden = dataShow.hidden;\n\t\t\t}\n\t\t} else {\n\t\t\tdataShow = jQuery._data( elem, \"fxshow\", {} );\n\t\t}\n\n\t\t// store state if its toggle - enables .stop().toggle() to \"reverse\"\n\t\tif ( toggle ) {\n\t\t\tdataShow.hidden = !hidden;\n\t\t}\n\t\tif ( hidden ) {\n\t\t\tjQuery( elem ).show();\n\t\t} else {\n\t\t\tanim.done( function() {\n\t\t\t\tjQuery( elem ).hide();\n\t\t\t} );\n\t\t}\n\t\tanim.done( function() {\n\t\t\tvar prop;\n\t\t\tjQuery._removeData( elem, \"fxshow\" );\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t}\n\t\t} );\n\t\tfor ( prop in orig ) {\n\t\t\ttween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\n\t\t\tif ( !( prop in dataShow ) ) {\n\t\t\t\tdataShow[ prop ] = tween.start;\n\t\t\t\tif ( hidden ) {\n\t\t\t\t\ttween.end = tween.start;\n\t\t\t\t\ttween.start = prop === \"width\" || prop === \"height\" ? 1 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t// If this is a noop like .hide().hide(), restore an overwritten display value\n\t} else if ( ( display === \"none\" ? defaultDisplay( elem.nodeName ) : display ) === \"inline\" ) {\n\t\tstyle.display = display;\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = jQuery.camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( jQuery.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// not quite $.extend, this wont overwrite keys already present.\n\t\t\t// also - reusing 'index' from above because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t} else {\n\t\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// if we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// resolve when we played the last frame\n\t\t\t\t// otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length ; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( jQuery.isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tjQuery.proxy( result.stop, result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\t// attach callbacks from options\n\treturn animation.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( jQuery.isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnotwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length ; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tjQuery.isFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t};\n\n\topt.duration = jQuery.fx.off ? 0 : typeof opt.duration === \"number\" ? opt.duration :\n\t\topt.duration in jQuery.fx.speeds ?\n\t\t\tjQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;\n\n\t// normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHidden ).css( \"opacity\", 0 ).show()\n\n\t\t\t// animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || jQuery._data( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = jQuery._data( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// start the next in the queue if the last step wasn't forced\n\t\t\t// timers currently will call their complete callbacks, which will dequeue\n\t\t\t// but only if they were gotoEnd\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = jQuery._data( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ttimers = jQuery.timers,\n\t\ti = 0;\n\n\tfxNow = jQuery.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Checks the timer has not already been removed\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tif ( timer() ) {\n\t\tjQuery.fx.start();\n\t} else {\n\t\tjQuery.timers.pop();\n\t}\n};\n\njQuery.fx.interval = 13;\n\njQuery.fx.start = function() {\n\tif ( !timerId ) {\n\t\ttimerId = window.setInterval( jQuery.fx.tick, jQuery.fx.interval );\n\t}\n};\n\njQuery.fx.stop = function() {\n\twindow.clearInterval( timerId );\n\ttimerId = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// http://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar a,\n\t\tinput = document.createElement( \"input\" ),\n\t\tdiv = document.createElement( \"div\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\t// Setup\n\tdiv = document.createElement( \"div\" );\n\tdiv.setAttribute( \"className\", \"t\" );\n\tdiv.innerHTML = \"  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\";\n\ta = div.getElementsByTagName( \"a\" )[ 0 ];\n\n\t// Support: Windows Web Apps (WWA)\n\t// `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"checkbox\" );\n\tdiv.appendChild( input );\n\n\ta = div.getElementsByTagName( \"a\" )[ 0 ];\n\n\t// First batch of tests.\n\ta.style.cssText = \"top:1px\";\n\n\t// Test setAttribute on camelCase class.\n\t// If it works, we need attrFixes when doing get/setAttribute (ie6/7)\n\tsupport.getSetAttribute = div.className !== \"t\";\n\n\t// Get the style information from getAttribute\n\t// (IE uses .cssText instead)\n\tsupport.style = /top/.test( a.getAttribute( \"style\" ) );\n\n\t// Make sure that URLs aren't manipulated\n\t// (IE normalizes it by default)\n\tsupport.hrefNormalized = a.getAttribute( \"href\" ) === \"/a\";\n\n\t// Check the default checkbox/radio value (\"\" on WebKit; \"on\" elsewhere)\n\tsupport.checkOn = !!input.value;\n\n\t// Make sure that a selected-by-default option has a working selected property.\n\t// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)\n\tsupport.optSelected = opt.selected;\n\n\t// Tests for enctype support on a form (#6743)\n\tsupport.enctype = !!document.createElement( \"form\" ).enctype;\n\n\t// Make sure that the options inside disabled selects aren't marked as disabled\n\t// (WebKit marks them as disabled)\n\tselect.disabled = true;\n\tsupport.optDisabled = !opt.disabled;\n\n\t// Support: IE8 only\n\t// Check if we can trust getAttribute(\"value\")\n\tinput = document.createElement( \"input\" );\n\tinput.setAttribute( \"value\", \"\" );\n\tsupport.input = input.getAttribute( \"value\" ) === \"\";\n\n\t// Check if an input maintains its value after becoming a radio\n\tinput.value = \"t\";\n\tinput.setAttribute( \"type\", \"radio\" );\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar rreturn = /\\r/g,\n\trspaces = /[\\x20\\t\\r\\n\\f]+/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, isFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif (\n\t\t\t\t\thooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\treturn typeof ret === \"string\" ?\n\n\t\t\t\t\t// handle most common string cases\n\t\t\t\t\tret.replace( rreturn, \"\" ) :\n\n\t\t\t\t\t// handle cases where value is null/undef or number\n\t\t\t\t\tret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE10-11+\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tjQuery.trim( jQuery.text( elem ) ).replace( rspaces, \" \" );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\" || index < 0,\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length,\n\t\t\t\t\ti = index < 0 ?\n\t\t\t\t\t\tmax :\n\t\t\t\t\t\tone ? index : 0;\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// oldIE doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t( support.optDisabled ?\n\t\t\t\t\t\t\t\t!option.disabled :\n\t\t\t\t\t\t\t\toption.getAttribute( \"disabled\" ) === null ) &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!jQuery.nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 ) {\n\n\t\t\t\t\t\t// Support: IE6\n\t\t\t\t\t\t// When new option element is added to select box we need to\n\t\t\t\t\t\t// force reflow of newly added node in order to workaround delay\n\t\t\t\t\t\t// of initialization properties\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\toption.selected = optionSet = true;\n\n\t\t\t\t\t\t} catch ( _ ) {\n\n\t\t\t\t\t\t\t// Will be executed only in IE6\n\t\t\t\t\t\t\toption.scrollHeight;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\toption.selected = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\n\t\t\t\treturn options;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\nvar nodeHook, boolHook,\n\tattrHandle = jQuery.expr.attrHandle,\n\truseDefault = /^(?:checked|selected)$/i,\n\tgetSetAttribute = support.getSetAttribute,\n\tgetSetInput = support.input;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// All attributes are lowercase\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\tname = name.toLowerCase();\n\t\t\thooks = jQuery.attrHooks[ name ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tjQuery.nodeName( elem, \"input\" ) ) {\n\n\t\t\t\t\t// Setting the type on a radio button after the value resets the value in IE8-9\n\t\t\t\t\t// Reset value to default in case type is set after value during creation\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name, propName,\n\t\t\ti = 0,\n\t\t\tattrNames = value && value.match( rnotwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\tpropName = jQuery.propFix[ name ] || name;\n\n\t\t\t\t// Boolean attributes get special treatment (#10870)\n\t\t\t\tif ( jQuery.expr.match.bool.test( name ) ) {\n\n\t\t\t\t\t// Set corresponding property to false\n\t\t\t\t\tif ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {\n\t\t\t\t\t\telem[ propName ] = false;\n\n\t\t\t\t\t// Support: IE<9\n\t\t\t\t\t// Also clear defaultChecked/defaultSelected (if appropriate)\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem[ jQuery.camelCase( \"default-\" + name ) ] =\n\t\t\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t\t}\n\n\t\t\t\t// See #9699 for explanation of this approach (setting first, then removal)\n\t\t\t\t} else {\n\t\t\t\t\tjQuery.attr( elem, name, \"\" );\n\t\t\t\t}\n\n\t\t\t\telem.removeAttribute( getSetAttribute ? name : propName );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {\n\n\t\t\t// IE<8 needs the *property* name\n\t\t\telem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );\n\n\t\t} else {\n\n\t\t\t// Support: IE<9\n\t\t\t// Use defaultChecked and defaultSelected for oldIE\n\t\t\telem[ jQuery.camelCase( \"default-\" + name ) ] = elem[ name ] = true;\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tif ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {\n\t\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\t\tvar ret, handle;\n\t\t\tif ( !isXML ) {\n\n\t\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\t\thandle = attrHandle[ name ];\n\t\t\t\tattrHandle[ name ] = ret;\n\t\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\t\tname.toLowerCase() :\n\t\t\t\t\tnull;\n\t\t\t\tattrHandle[ name ] = handle;\n\t\t\t}\n\t\t\treturn ret;\n\t\t};\n\t} else {\n\t\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\t\tif ( !isXML ) {\n\t\t\t\treturn elem[ jQuery.camelCase( \"default-\" + name ) ] ?\n\t\t\t\t\tname.toLowerCase() :\n\t\t\t\t\tnull;\n\t\t\t}\n\t\t};\n\t}\n} );\n\n// fix oldIE attroperties\nif ( !getSetInput || !getSetAttribute ) {\n\tjQuery.attrHooks.value = {\n\t\tset: function( elem, value, name ) {\n\t\t\tif ( jQuery.nodeName( elem, \"input\" ) ) {\n\n\t\t\t\t// Does not return so that setAttribute is also used\n\t\t\t\telem.defaultValue = value;\n\t\t\t} else {\n\n\t\t\t\t// Use nodeHook if defined (#1954); otherwise setAttribute is fine\n\t\t\t\treturn nodeHook && nodeHook.set( elem, value, name );\n\t\t\t}\n\t\t}\n\t};\n}\n\n// IE6/7 do not support getting/setting some attributes with get/setAttribute\nif ( !getSetAttribute ) {\n\n\t// Use this for any attribute in IE6/7\n\t// This fixes almost every IE6/7 issue\n\tnodeHook = {\n\t\tset: function( elem, value, name ) {\n\n\t\t\t// Set the existing or create a new attribute node\n\t\t\tvar ret = elem.getAttributeNode( name );\n\t\t\tif ( !ret ) {\n\t\t\t\telem.setAttributeNode(\n\t\t\t\t\t( ret = elem.ownerDocument.createAttribute( name ) )\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tret.value = value += \"\";\n\n\t\t\t// Break association with cloned elements by also using setAttribute (#9646)\n\t\t\tif ( name === \"value\" || value === elem.getAttribute( name ) ) {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t};\n\n\t// Some attributes are constructed with empty-string values when not defined\n\tattrHandle.id = attrHandle.name = attrHandle.coords =\n\t\tfunction( elem, name, isXML ) {\n\t\t\tvar ret;\n\t\t\tif ( !isXML ) {\n\t\t\t\treturn ( ret = elem.getAttributeNode( name ) ) && ret.value !== \"\" ?\n\t\t\t\t\tret.value :\n\t\t\t\t\tnull;\n\t\t\t}\n\t\t};\n\n\t// Fixing value retrieval on a button requires this module\n\tjQuery.valHooks.button = {\n\t\tget: function( elem, name ) {\n\t\t\tvar ret = elem.getAttributeNode( name );\n\t\t\tif ( ret && ret.specified ) {\n\t\t\t\treturn ret.value;\n\t\t\t}\n\t\t},\n\t\tset: nodeHook.set\n\t};\n\n\t// Set contenteditable to false on removals(#10429)\n\t// Setting to empty string throws an error as an invalid value\n\tjQuery.attrHooks.contenteditable = {\n\t\tset: function( elem, value, name ) {\n\t\t\tnodeHook.set( elem, value === \"\" ? false : value, name );\n\t\t}\n\t};\n\n\t// Set width and height to auto instead of 0 on empty string( Bug #8150 )\n\t// This is for removals\n\tjQuery.each( [ \"width\", \"height\" ], function( i, name ) {\n\t\tjQuery.attrHooks[ name ] = {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( value === \"\" ) {\n\t\t\t\t\telem.setAttribute( name, \"auto\" );\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\n\nif ( !support.style ) {\n\tjQuery.attrHooks.style = {\n\t\tget: function( elem ) {\n\n\t\t\t// Return undefined in the case of empty string\n\t\t\t// Note: IE uppercases css property names, but if we were to .toLowerCase()\n\t\t\t// .cssText, that would destroy case sensitivity in URL's, like in \"background\"\n\t\t\treturn elem.style.cssText || undefined;\n\t\t},\n\t\tset: function( elem, value ) {\n\t\t\treturn ( elem.style.cssText = value + \"\" );\n\t\t}\n\t};\n}\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button|object)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\tname = jQuery.propFix[ name ] || name;\n\t\treturn this.each( function() {\n\n\t\t\t// try/catch handles cases where IE balks (such as removing a property on window)\n\t\t\ttry {\n\t\t\t\tthis[ name ] = undefined;\n\t\t\t\tdelete this[ name ];\n\t\t\t} catch ( e ) {}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\treturn tabindex ?\n\t\t\t\t\tparseInt( tabindex, 10 ) :\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href ?\n\t\t\t\t\t\t\t0 :\n\t\t\t\t\t\t\t-1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Some attributes require a special call on IE\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !support.hrefNormalized ) {\n\n\t// href/src property should get the full normalized URL (#10299/#12915)\n\tjQuery.each( [ \"href\", \"src\" ], function( i, name ) {\n\t\tjQuery.propHooks[ name ] = {\n\t\t\tget: function( elem ) {\n\t\t\t\treturn elem.getAttribute( name, 4 );\n\t\t\t}\n\t\t};\n\t} );\n}\n\n// Support: Safari, IE9+\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\t// Make sure that it also works with optgroups, see #5701\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n// IE6/7 call enctype encoding\nif ( !support.enctype ) {\n\tjQuery.propFix.enctype = \"encoding\";\n}\n\n\n\n\nvar rclass = /[\\t\\r\\n\\f]/g;\n\nfunction getClass( elem ) {\n\treturn jQuery.attr( elem, \"class\" ) || \"\";\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnotwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 &&\n\t\t\t\t\t( \" \" + curValue + \" \" ).replace( rclass, \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tjQuery.attr( elem, \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnotwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 &&\n\t\t\t\t\t( \" \" + curValue + \" \" ).replace( rclass, \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tjQuery.attr( elem, \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value;\n\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( type === \"string\" ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = value.match( rnotwhite ) || [];\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// store className if set\n\t\t\t\t\tjQuery._data( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed \"false\",\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tjQuery.attr( this, \"class\",\n\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\"\" :\n\t\t\t\t\tjQuery._data( this, \"__className__\" ) || \"\"\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + getClass( elem ) + \" \" ).replace( rclass, \" \" )\n\t\t\t\t\t.indexOf( className ) > -1\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\njQuery.each( ( \"blur focus focusin focusout load resize scroll unload click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup error contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\nvar location = window.location;\n\nvar nonce = jQuery.now();\n\nvar rquery = ( /\\?/ );\n\n\n\nvar rvalidtokens = /(,)|(\\[|{)|(}|])|\"(?:[^\"\\\\\\r\\n]|\\\\[\"\\\\\\/bfnrt]|\\\\u[\\da-fA-F]{4})*\"\\s*:?|true|false|null|-?(?!0\\d)\\d+(?:\\.\\d+|)(?:[eE][+-]?\\d+|)/g;\n\njQuery.parseJSON = function( data ) {\n\n\t// Attempt to parse using the native JSON parser first\n\tif ( window.JSON && window.JSON.parse ) {\n\n\t\t// Support: Android 2.3\n\t\t// Workaround failure to string-cast null input\n\t\treturn window.JSON.parse( data + \"\" );\n\t}\n\n\tvar requireNonComma,\n\t\tdepth = null,\n\t\tstr = jQuery.trim( data + \"\" );\n\n\t// Guard against invalid (and possibly dangerous) input by ensuring that nothing remains\n\t// after removing valid tokens\n\treturn str && !jQuery.trim( str.replace( rvalidtokens, function( token, comma, open, close ) {\n\n\t\t// Force termination if we see a misplaced comma\n\t\tif ( requireNonComma && comma ) {\n\t\t\tdepth = 0;\n\t\t}\n\n\t\t// Perform no more replacements after returning to outermost depth\n\t\tif ( depth === 0 ) {\n\t\t\treturn token;\n\t\t}\n\n\t\t// Commas must not follow \"[\", \"{\", or \",\"\n\t\trequireNonComma = open || comma;\n\n\t\t// Determine new depth\n\t\t// array/object open (\"[\" or \"{\"): depth += true - false (increment)\n\t\t// array/object close (\"]\" or \"}\"): depth += false - true (decrement)\n\t\t// other cases (\",\" or primitive): depth += true - true (numeric cast)\n\t\tdepth += !close - !open;\n\n\t\t// Remove this token\n\t\treturn \"\";\n\t} ) ) ?\n\t\t( Function( \"return \" + str ) )() :\n\t\tjQuery.error( \"Invalid JSON: \" + data );\n};\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, tmp;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\ttry {\n\t\tif ( window.DOMParser ) { // Standard\n\t\t\ttmp = new window.DOMParser();\n\t\t\txml = tmp.parseFromString( data, \"text/xml\" );\n\t\t} else { // IE\n\t\t\txml = new window.ActiveXObject( \"Microsoft.XMLDOM\" );\n\t\t\txml.async = \"false\";\n\t\t\txml.loadXML( data );\n\t\t}\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\tif ( !xml || !xml.documentElement || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trhash = /#.*$/,\n\trts = /([?&])_=[^&]*/,\n\n\t// IE leaves an \\r character at EOL\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\trurl = /^([\\w.+-]+:)(?:\\/\\/(?:[^\\/?#]*@|)([^\\/?#:]*)(?::(\\d+)|)|)/,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Document location\n\tajaxLocation = location.href,\n\n\t// Segment location into parts\n\tajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType.charAt( 0 ) === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar deep, key,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\tvar firstDataType, ct, finalDataType, type,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s[ \"throws\" ] ) { // jscs:ignore requireDotNotation\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: ajaxLocation,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": jQuery.parseJSON,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar\n\n\t\t\t// Cross-domain detection vars\n\t\t\tparts,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers as string\n\t\t\tresponseHeadersString,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\ttransport,\n\n\t\t\t// Response headers\n\t\t\tresponseHeaders,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// The jqXHR state\n\t\t\tstate = 0,\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( state === 2 ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn state === 2 ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tvar lname = name.toLowerCase();\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\tname = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\t\t\tfor ( code in map ) {\n\n\t\t\t\t\t\t\t\t// Lazy-add the new callback in a way that preserves old ones\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR ).complete = completeDeferred.add;\n\t\tjqXHR.success = jqXHR.done;\n\t\tjqXHR.error = jqXHR.fail;\n\n\t\t// Remove hash character (#7531: and string promotion)\n\t\t// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || ajaxLocation ) + \"\" )\n\t\t\t.replace( rhash, \"\" )\n\t\t\t.replace( rprotocol, ajaxLocParts[ 1 ] + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = jQuery.trim( s.dataType || \"*\" ).toLowerCase().match( rnotwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when we have a protocol:host:port mismatch\n\t\tif ( s.crossDomain == null ) {\n\t\t\tparts = rurl.exec( s.url.toLowerCase() );\n\t\t\ts.crossDomain = !!( parts &&\n\t\t\t\t( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||\n\t\t\t\t\t( parts[ 3 ] || ( parts[ 1 ] === \"http:\" ? \"80\" : \"443\" ) ) !==\n\t\t\t\t\t\t( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === \"http:\" ? \"80\" : \"443\" ) ) )\n\t\t\t);\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( state === 2 ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\tcacheURL = s.url;\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\tcacheURL = ( s.url += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data );\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add anti-cache in url if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\ts.url = rts.test( cacheURL ) ?\n\n\t\t\t\t\t// If there is already a '_' parameter, set its value\n\t\t\t\t\tcacheURL.replace( rts, \"$1_=\" + nonce++ ) :\n\n\t\t\t\t\t// Otherwise add one to the end\n\t\t\t\t\tcacheURL + ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + nonce++;\n\t\t\t}\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tfor ( i in { success: 1, error: 1, complete: 1 } ) {\n\t\t\tjqXHR[ i ]( s[ i ] );\n\t\t}\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tstate = 1;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Propagate exception as error if not done\n\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\tdone( -1, e );\n\n\t\t\t\t// Simply rethrow otherwise\n\t\t\t\t} else {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Called once\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// State is \"done\" now\n\t\t\tstate = 2;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// We extract error from statusText\n\t\t\t\t// then normalize statusText and status for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapAll( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( this[ 0 ] ) {\n\n\t\t\t// The elements to wrap the target around\n\t\t\tvar wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstChild && elem.firstChild.nodeType === 1 ) {\n\t\t\t\t\telem = elem.firstChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function() {\n\t\treturn this.parent().each( function() {\n\t\t\tif ( !jQuery.nodeName( this, \"body\" ) ) {\n\t\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t\t}\n\t\t} ).end();\n\t}\n} );\n\n\nfunction getDisplay( elem ) {\n\treturn elem.style && elem.style.display || jQuery.css( elem, \"display\" );\n}\n\nfunction filterHidden( elem ) {\n\n\t// Disconnected elements are considered hidden\n\tif ( !jQuery.contains( elem.ownerDocument || document, elem ) ) {\n\t\treturn true;\n\t}\n\twhile ( elem && elem.nodeType === 1 ) {\n\t\tif ( getDisplay( elem ) === \"none\" || elem.type === \"hidden\" ) {\n\t\t\treturn true;\n\t\t}\n\t\telem = elem.parentNode;\n\t}\n\treturn false;\n}\n\njQuery.expr.filters.hidden = function( elem ) {\n\n\t// Support: Opera <= 12.12\n\t// Opera reports offsetWidths and offsetHeights less than zero on some elements\n\treturn support.reliableHiddenOffsets() ?\n\t\t( elem.offsetWidth <= 0 && elem.offsetHeight <= 0 &&\n\t\t\t!elem.getClientRects().length ) :\n\t\t\tfilterHidden( elem );\n};\n\njQuery.expr.filters.visible = function( elem ) {\n\treturn !jQuery.expr.filters.hidden( elem );\n};\n\n\n\n\nvar r20 = /%20/g,\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( jQuery.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, value ) {\n\n\t\t\t// If value is a function, invoke it and return its value\n\t\t\tvalue = jQuery.isFunction( value ) ? value() : ( value == null ? \"\" : value );\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" + encodeURIComponent( value );\n\t\t};\n\n\t// Set traditional to true for jQuery <= 1.3.2 behavior.\n\tif ( traditional === undefined ) {\n\t\ttraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" ).replace( r20, \"+\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is(\":disabled\") so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\treturn val == null ?\n\t\t\t\tnull :\n\t\t\t\tjQuery.isArray( val ) ?\n\t\t\t\t\tjQuery.map( val, function( val ) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t\t} ) :\n\t\t\t\t\t{ name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\n// Create the request object\n// (This is still attached to ajaxSettings for backward compatibility)\njQuery.ajaxSettings.xhr = window.ActiveXObject !== undefined ?\n\n\t// Support: IE6-IE8\n\tfunction() {\n\n\t\t// XHR cannot access local files, always use ActiveX for that case\n\t\tif ( this.isLocal ) {\n\t\t\treturn createActiveXHR();\n\t\t}\n\n\t\t// Support: IE 9-11\n\t\t// IE seems to error on cross-domain PATCH requests when ActiveX XHR\n\t\t// is used. In IE 9+ always use the native XHR.\n\t\t// Note: this condition won't catch Edge as it doesn't define\n\t\t// document.documentMode but it also doesn't support ActiveX so it won't\n\t\t// reach this code.\n\t\tif ( document.documentMode > 8 ) {\n\t\t\treturn createStandardXHR();\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// oldIE XHR does not support non-RFC2616 methods (#13240)\n\t\t// See http://msdn.microsoft.com/en-us/library/ie/ms536648(v=vs.85).aspx\n\t\t// and http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9\n\t\t// Although this check for six methods instead of eight\n\t\t// since IE also does not support \"trace\" and \"connect\"\n\t\treturn /^(get|post|head|put|delete|options)$/i.test( this.type ) &&\n\t\t\tcreateStandardXHR() || createActiveXHR();\n\t} :\n\n\t// For all other browsers, use the standard XMLHttpRequest object\n\tcreateStandardXHR;\n\nvar xhrId = 0,\n\txhrCallbacks = {},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\n// Support: IE<10\n// Open requests must be manually aborted on unload (#5280)\n// See https://support.microsoft.com/kb/2856746 for more info\nif ( window.attachEvent ) {\n\twindow.attachEvent( \"onunload\", function() {\n\t\tfor ( var key in xhrCallbacks ) {\n\t\t\txhrCallbacks[ key ]( undefined, true );\n\t\t}\n\t} );\n}\n\n// Determine support properties\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nxhrSupported = support.ajax = !!xhrSupported;\n\n// Create transport if the browser can provide an xhr\nif ( xhrSupported ) {\n\n\tjQuery.ajaxTransport( function( options ) {\n\n\t\t// Cross domain only allowed if supported through XMLHttpRequest\n\t\tif ( !options.crossDomain || support.cors ) {\n\n\t\t\tvar callback;\n\n\t\t\treturn {\n\t\t\t\tsend: function( headers, complete ) {\n\t\t\t\t\tvar i,\n\t\t\t\t\t\txhr = options.xhr(),\n\t\t\t\t\t\tid = ++xhrId;\n\n\t\t\t\t\t// Open the socket\n\t\t\t\t\txhr.open(\n\t\t\t\t\t\toptions.type,\n\t\t\t\t\t\toptions.url,\n\t\t\t\t\t\toptions.async,\n\t\t\t\t\t\toptions.username,\n\t\t\t\t\t\toptions.password\n\t\t\t\t\t);\n\n\t\t\t\t\t// Apply custom fields if provided\n\t\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override mime type if needed\n\t\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t\t}\n\n\t\t\t\t\t// X-Requested-With header\n\t\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set headers\n\t\t\t\t\tfor ( i in headers ) {\n\n\t\t\t\t\t\t// Support: IE<9\n\t\t\t\t\t\t// IE's ActiveXObject throws a 'Type Mismatch' exception when setting\n\t\t\t\t\t\t// request header to a null-value.\n\t\t\t\t\t\t//\n\t\t\t\t\t\t// To keep consistent with other XHR implementations, cast the value\n\t\t\t\t\t\t// to string and ignore `undefined`.\n\t\t\t\t\t\tif ( headers[ i ] !== undefined ) {\n\t\t\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] + \"\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Do send the request\n\t\t\t\t\t// This may raise an exception which is actually\n\t\t\t\t\t// handled in jQuery.ajax (so no try/catch here)\n\t\t\t\t\txhr.send( ( options.hasContent && options.data ) || null );\n\n\t\t\t\t\t// Listener\n\t\t\t\t\tcallback = function( _, isAbort ) {\n\t\t\t\t\t\tvar status, statusText, responses;\n\n\t\t\t\t\t\t// Was never called and is aborted or complete\n\t\t\t\t\t\tif ( callback && ( isAbort || xhr.readyState === 4 ) ) {\n\n\t\t\t\t\t\t\t// Clean up\n\t\t\t\t\t\t\tdelete xhrCallbacks[ id ];\n\t\t\t\t\t\t\tcallback = undefined;\n\t\t\t\t\t\t\txhr.onreadystatechange = jQuery.noop;\n\n\t\t\t\t\t\t\t// Abort manually if needed\n\t\t\t\t\t\t\tif ( isAbort ) {\n\t\t\t\t\t\t\t\tif ( xhr.readyState !== 4 ) {\n\t\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tresponses = {};\n\t\t\t\t\t\t\t\tstatus = xhr.status;\n\n\t\t\t\t\t\t\t\t// Support: IE<10\n\t\t\t\t\t\t\t\t// Accessing binary-data responseText throws an exception\n\t\t\t\t\t\t\t\t// (#11426)\n\t\t\t\t\t\t\t\tif ( typeof xhr.responseText === \"string\" ) {\n\t\t\t\t\t\t\t\t\tresponses.text = xhr.responseText;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Firefox throws an exception when accessing\n\t\t\t\t\t\t\t\t// statusText for faulty cross-domain requests\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tstatusText = xhr.statusText;\n\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t// We normalize with Webkit giving an empty statusText\n\t\t\t\t\t\t\t\t\tstatusText = \"\";\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Filter status for non standard behaviors\n\n\t\t\t\t\t\t\t\t// If the request is local and we have data: assume a success\n\t\t\t\t\t\t\t\t// (success with no data won't get notified, that's the best we\n\t\t\t\t\t\t\t\t// can do given current implementations)\n\t\t\t\t\t\t\t\tif ( !status && options.isLocal && !options.crossDomain ) {\n\t\t\t\t\t\t\t\t\tstatus = responses.text ? 200 : 404;\n\n\t\t\t\t\t\t\t\t// IE - #1450: sometimes returns 1223 when it should be 204\n\t\t\t\t\t\t\t\t} else if ( status === 1223 ) {\n\t\t\t\t\t\t\t\t\tstatus = 204;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Call complete if needed\n\t\t\t\t\t\tif ( responses ) {\n\t\t\t\t\t\t\tcomplete( status, statusText, responses, xhr.getAllResponseHeaders() );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\t// Do send the request\n\t\t\t\t\t// `xhr.send` may raise an exception, but it will be\n\t\t\t\t\t// handled in jQuery.ajax (so no try/catch here)\n\t\t\t\t\tif ( !options.async ) {\n\n\t\t\t\t\t\t// If we're in sync mode we fire the callback\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t} else if ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t// (IE6 & IE7) if it's in cache and has been\n\t\t\t\t\t\t// retrieved directly we need to fire the callback\n\t\t\t\t\t\twindow.setTimeout( callback );\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Register the callback, but delay it in case `xhr.send` throws\n\t\t\t\t\t\t// Add to the list of active xhr callbacks\n\t\t\t\t\t\txhr.onreadystatechange = xhrCallbacks[ id ] = callback;\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tabort: function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback( undefined, true );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t} );\n}\n\n// Functions to create xhrs\nfunction createStandardXHR() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n}\n\nfunction createActiveXHR() {\n\ttry {\n\t\treturn new window.ActiveXObject( \"Microsoft.XMLHTTP\" );\n\t} catch ( e ) {}\n}\n\n\n\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and global\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t\ts.global = false;\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\n\t\tvar script,\n\t\t\thead = document.head || jQuery( \"head\" )[ 0 ] || document.documentElement;\n\n\t\treturn {\n\n\t\t\tsend: function( _, callback ) {\n\n\t\t\t\tscript = document.createElement( \"script\" );\n\n\t\t\t\tscript.async = true;\n\n\t\t\t\tif ( s.scriptCharset ) {\n\t\t\t\t\tscript.charset = s.scriptCharset;\n\t\t\t\t}\n\n\t\t\t\tscript.src = s.url;\n\n\t\t\t\t// Attach handlers for all browsers\n\t\t\t\tscript.onload = script.onreadystatechange = function( _, isAbort ) {\n\n\t\t\t\t\tif ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {\n\n\t\t\t\t\t\t// Handle memory leak in IE\n\t\t\t\t\t\tscript.onload = script.onreadystatechange = null;\n\n\t\t\t\t\t\t// Remove the script\n\t\t\t\t\t\tif ( script.parentNode ) {\n\t\t\t\t\t\t\tscript.parentNode.removeChild( script );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Dereference the script\n\t\t\t\t\t\tscript = null;\n\n\t\t\t\t\t\t// Callback if not abort\n\t\t\t\t\t\tif ( !isAbort ) {\n\t\t\t\t\t\t\tcallback( 200, \"success\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\t// Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\thead.insertBefore( script, head.firstChild );\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( script ) {\n\t\t\t\t\tscript.onload( undefined, true );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// data: string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\tcontext = context || document;\n\n\tvar parsed = rsingleTag.exec( data ),\n\t\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n// Keep a copy of the old load method\nvar _load = jQuery.fn.load;\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tif ( typeof url !== \"string\" && _load ) {\n\t\treturn _load.apply( this, arguments );\n\t}\n\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = jQuery.trim( url.slice( off, url.length ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( jQuery.isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.expr.filters.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\n\n/**\n * Gets a window from an element\n */\nfunction getWindow( elem ) {\n\treturn jQuery.isWindow( elem ) ?\n\t\telem :\n\t\telem.nodeType === 9 ?\n\t\t\telem.defaultView || elem.parentWindow :\n\t\t\tfalse;\n}\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\tjQuery.inArray( \"auto\", [ curCSSTop, curCSSLeft ] ) > -1;\n\n\t\t// need to be able to calculate position if either top or left\n\t\t// is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\toffset: function( options ) {\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar docElem, win,\n\t\t\tbox = { top: 0, left: 0 },\n\t\t\telem = this[ 0 ],\n\t\t\tdoc = elem && elem.ownerDocument;\n\n\t\tif ( !doc ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdocElem = doc.documentElement;\n\n\t\t// Make sure it's not a disconnected DOM node\n\t\tif ( !jQuery.contains( docElem, elem ) ) {\n\t\t\treturn box;\n\t\t}\n\n\t\t// If we don't have gBCR, just use 0,0 rather than error\n\t\t// BlackBerry 5, iOS 3 (original iPhone)\n\t\tif ( typeof elem.getBoundingClientRect !== \"undefined\" ) {\n\t\t\tbox = elem.getBoundingClientRect();\n\t\t}\n\t\twin = getWindow( doc );\n\t\treturn {\n\t\t\ttop: box.top  + ( win.pageYOffset || docElem.scrollTop )  - ( docElem.clientTop  || 0 ),\n\t\t\tleft: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )\n\t\t};\n\t},\n\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset,\n\t\t\tparentOffset = { top: 0, left: 0 },\n\t\t\telem = this[ 0 ];\n\n\t\t// Fixed elements are offset from window (parentOffset = {top:0, left: 0},\n\t\t// because it is its only offset parent\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// we assume that getBoundingClientRect is available when computed position is fixed\n\t\t\toffset = elem.getBoundingClientRect();\n\t\t} else {\n\n\t\t\t// Get *real* offsetParent\n\t\t\toffsetParent = this.offsetParent();\n\n\t\t\t// Get correct offsets\n\t\t\toffset = this.offset();\n\t\t\tif ( !jQuery.nodeName( offsetParent[ 0 ], \"html\" ) ) {\n\t\t\t\tparentOffset = offsetParent.offset();\n\t\t\t}\n\n\t\t\t// Add offsetParent borders\n\t\t\tparentOffset.top  += jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true );\n\t\t\tparentOffset.left += jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true );\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\t// note: when an element has margin: auto the offsetLeft and marginLeft\n\t\t// are the same in Safari causing offset.left to incorrectly be 0\n\t\treturn {\n\t\t\ttop:  offset.top  - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && ( !jQuery.nodeName( offsetParent, \"html\" ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = /Y/.test( prop );\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\t\t\tvar win = getWindow( elem );\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? ( prop in win ) ? win[ prop ] :\n\t\t\t\t\twin.document.documentElement[ method ] :\n\t\t\t\t\telem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : jQuery( win ).scrollLeft(),\n\t\t\t\t\ttop ? val : jQuery( win ).scrollTop()\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length, null );\n\t};\n} );\n\n// Support: Safari<7-8+, Chrome<37-44+\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// getComputedStyle returns percent when specified for top/left/bottom/right\n// rather than make the css module depend on the offset module, we just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// if curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\tfunction( defaultExtra, funcName ) {\n\n\t\t// margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there\n\t\t\t\t\t// isn't a whole lot we can do. See pull request at this URL for discussion:\n\t\t\t\t\t// https://github.com/jquery/jquery/pull/764\n\t\t\t\t\treturn elem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\t// unfortunately, this causes bug #3838 in IE6/8 only,\n\t\t\t\t\t// but there is currently no good, small way to fix it.\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable, null );\n\t\t};\n\t} );\n} );\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t}\n} );\n\n// The number of elements contained in the matched element set\njQuery.fn.size = function() {\n\treturn this.length;\n};\n\njQuery.fn.andSelf = jQuery.fn.addBack;\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in\n// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\nreturn jQuery;\n}));\n"
  },
  {
    "path": "js/jquery-3.4.1.js",
    "content": "/*!\n * jQuery JavaScript Library v3.4.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2019-05-01T21:04Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar document = window.document;\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n      // Support: Chrome <=57, Firefox <=52\n      // In some browsers, typeof returns \"function\" for HTML <object> elements\n      // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n      // We don't want to classify *any* DOM node as a function.\n      return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n  };\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.4.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code, options ) {\n\t\tDOMEval( code, { nonce: options && options.nonce } );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android <=4.0 only\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.4\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2019-04-08\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trhtml = /HTML$/i,\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) &&\n\n\t\t\t\t// Support: IE 8 only\n\t\t\t\t// Exclude object elements\n\t\t\t\t(nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\") ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 && rdescend.test( selector ) ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = \"#\" + nid + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement(\"fieldset\");\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\tvar namespace = elem.namespaceURI,\n\t\tdocElem = (elem.ownerDocument || elem).documentElement;\n\n\t// Support: IE <=8\n\t// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n\t// https://bugs.jquery.com/ticket/4833\n\treturn !rhtml.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( preferredDoc !== document &&\n\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( el ) {\n\t\tel.appendChild( document.createComment(\"\") );\n\t\treturn !el.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[\"ID\"] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( (elem = elems[i++]) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( el ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll(\":enabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll(\":disabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( el ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn (sel + \"\").replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ?\n\t\t\t\targument + length :\n\t\t\t\targument > length ?\n\t\t\t\t\tlength :\n\t\t\t\t\targument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( (oldCache = uniqueCache[ key ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( el ) {\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement(\"fieldset\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( el ) {\n\treturn el.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n};\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( typeof elem.contentDocument !== \"undefined\" ) {\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the master Deferred\n\t\t\tmaster = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tmaster.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( master.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), master.reject );\n\t\t}\n\n\t\treturn master.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (#9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE <=9 only\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE <=9 only\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 - 11+\n// focus() and blur() are asynchronous, except when they are no-op.\n// So expect focus to be synchronous when the element is already active,\n// and blur to be synchronous when the element is not already active.\n// (focus and blur are always synchronous in other supported browsers,\n// this just defines when we can count on it).\nfunction expectSync( elem, type ) {\n\treturn ( elem === safeActiveElement() ) === ( type === \"focus\" );\n}\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", returnTrue );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, expectSync ) {\n\n\t// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !expectSync ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar notAsync, result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t// Saved data should be false in such cases, but might be a leftover capture object\n\t\t\t\t// from an async native handler (gh-4350)\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t// focus() and blur() are asynchronous\n\t\t\t\t\tnotAsync = expectSync( this, type );\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tif ( saved !== result || notAsync ) {\n\t\t\t\t\t\tdataPriv.set( this, type, false );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = {};\n\t\t\t\t\t}\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\treturn result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering the\n\t\t\t\t// native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\n\t\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t\t// Extend with the prototype to reset the above stopImmediatePropagation()\n\t\t\t\t\t\tjQuery.extend( saved[ 0 ], jQuery.Event.prototype ),\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, expectSync );\n\n\t\t\t// Return false to allow normal processing in the caller\n\t\t\treturn false;\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t/* eslint-disable max-len */\n\n\t// See https://github.com/eslint/eslint/issues/3229\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,\n\n\t/* eslint-enable */\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase()  !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t//   .css('filter') (IE 9 only, #12537)\n\t//   .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t// This happens for inline elements with no explicit setting (gh-3571)\n\t// Support: Android <=4.1 - 4.3 only\n\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t// Support: IE 9-11 only\n\t// Also use offsetWidth/offsetHeight for when box sizing is unreliable\n\t// We use getClientRects() to check for hidden/disconnected.\n\t// In those cases, the computed value can be trusted to be border-box\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\t\tval === \"auto\" ||\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"gridArea\": true,\n\t\t\"gridColumn\": true,\n\t\t\"gridColumnEnd\": true,\n\t\t\"gridColumnStart\": true,\n\t\t\"gridRow\": true,\n\t\t\"gridRowEnd\": true,\n\t\t\"gridRowStart\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = classesToArray( value );\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = Date.now();\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url, options ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\"  ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( \"load error\", callback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( ( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t}\n} );\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n"
  },
  {
    "path": "js/jquery.bgiframe.js",
    "content": "/*! Copyright (c) 2013 Brandon Aaron (http://brandon.aaron.sh)\n * Licensed under the MIT License (LICENSE.txt).\n *\n * Version 3.0.1\n *\n * Requires jQuery >= 1.2.6\n */\n\n(function (factory) {\n    if ( typeof define === 'function' && define.amd ) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if ( typeof exports === 'object' ) {\n        // Node/CommonJS style for Browserify\n        module.exports = factory;\n    } else {\n        // Browser globals\n        factory(jQuery);\n    }\n}(function ($) {\n    $.fn.bgiframe = function(s) {\n        s = $.extend({\n            top         : 'auto', // auto == borderTopWidth\n            left        : 'auto', // auto == borderLeftWidth\n            width       : 'auto', // auto == offsetWidth\n            height      : 'auto', // auto == offsetHeight\n            opacity     : true,\n            src         : 'javascript:false;',\n            conditional : /MSIE 6\\.0/.test(navigator.userAgent) // expression or function. return false to prevent iframe insertion\n        }, s);\n\n        // wrap conditional in a function if it isn't already\n        if ( !$.isFunction(s.conditional) ) {\n            var condition = s.conditional;\n            s.conditional = function() { return condition; };\n        }\n\n        var $iframe = $('<iframe class=\"bgiframe\" frameborder=\"0\" tabindex=\"-1\" src=\"'+s.src+'\"'+\n                           'style=\"display:block;position:absolute;z-index:-1;\"/>');\n\n        return this.each(function() {\n            var $this = $(this);\n            if ( s.conditional(this) === false ) { return; }\n            var existing = $this.children('iframe.bgiframe');\n            var $el = existing.length === 0 ? $iframe.clone() : existing;\n            $el.css({\n                'top': s.top == 'auto' ?\n                    ((parseInt($this.css('borderTopWidth'),10)||0)*-1)+'px' : prop(s.top),\n                'left': s.left == 'auto' ?\n                    ((parseInt($this.css('borderLeftWidth'),10)||0)*-1)+'px' : prop(s.left),\n                'width': s.width == 'auto' ? (this.offsetWidth + 'px') : prop(s.width),\n                'height': s.height == 'auto' ? (this.offsetHeight + 'px') : prop(s.height),\n                'opacity': s.opacity === true ? 0 : undefined\n            });\n\n            if ( existing.length === 0 ) {\n                $this.prepend($el);\n            }\n        });\n    };\n\n    // old alias\n    $.fn.bgIframe = $.fn.bgiframe;\n\n    function prop(n) {\n        return n && n.constructor === Number ? n + 'px' : n;\n    }\n\n}));"
  },
  {
    "path": "js/jquery.cookie.js",
    "content": "/**\n * Cookie plugin\n *\n * Copyright (c) 2006 Klaus Hartl (stilbuero.de)\n * Dual licensed under the MIT and GPL licenses:\n * http://www.opensource.org/licenses/mit-license.php\n * http://www.gnu.org/licenses/gpl.html\n *\n */\n\n/**\n * Create a cookie with the given name and value and other optional parameters.\n *\n * @example $.cookie('the_cookie', 'the_value');\n * @desc Set the value of a cookie.\n * @example $.cookie('the_cookie', 'the_value', {expires: 7, path: '/', domain: 'jquery.com', secure: true});\n * @desc Create a cookie with all available options.\n * @example $.cookie('the_cookie', 'the_value');\n * @desc Create a session cookie.\n * @example $.cookie('the_cookie', null);\n * @desc Delete a cookie by passing null as value.\n *\n * @param String name The name of the cookie.\n * @param String value The value of the cookie.\n * @param Object options An object literal containing key/value pairs to provide optional cookie attributes.\n * @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object.\n *                             If a negative value is specified (e.g. a date in the past), the cookie will be deleted.\n *                             If set to null or omitted, the cookie will be a session cookie and will not be retained\n *                             when the the browser exits.\n * @option String path The value of the path atribute of the cookie (default: path of page that created the cookie).\n * @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie).\n * @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will\n *                        require a secure protocol (like HTTPS).\n * @type undefined\n *\n * @name $.cookie\n * @cat Plugins/Cookie\n * @author Klaus Hartl/klaus.hartl@stilbuero.de\n */\n\n/**\n * Get the value of a cookie with the given name.\n *\n * @example $.cookie('the_cookie');\n * @desc Get the value of a cookie.\n *\n * @param String name The name of the cookie.\n * @return The value of the cookie.\n * @type String\n *\n * @name $.cookie\n * @cat Plugins/Cookie\n * @author Klaus Hartl/klaus.hartl@stilbuero.de\n */\njQuery.cookie = function(name, value, options) {\n    if (typeof value != 'undefined') { // name and value given, set cookie\n        options = options || {};\n        if (value === null) {\n            value = '';\n            options.expires = -1;\n        }\n        var expires = '';\n        if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {\n            var date;\n            if (typeof options.expires == 'number') {\n                date = new Date();\n                date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));\n            } else {\n                date = options.expires;\n            }\n            expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE\n        }\n        var path = options.path ? '; path=' + options.path : '';\n        var domain = options.domain ? '; domain=' + options.domain : '';\n        var secure = options.secure ? '; secure' : '';\n        document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');\n    } else { // only name given, get cookie\n        var cookieValue = null;\n        if (document.cookie && document.cookie != '') {\n            var cookies = document.cookie.split(';');\n            for (var i = 0; i < cookies.length; i++) {\n                var cookie = jQuery.trim(cookies[i]);\n                // Does this cookie string begin with the name we want?\n                if (cookie.substring(0, name.length + 1) == (name + '=')) {\n                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));\n                    break;\n                }\n            }\n        }\n        return cookieValue;\n    }\n};"
  },
  {
    "path": "js/jquery.easing.1.3.js",
    "content": "/*\n * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/\n *\n * Uses the built in easing capabilities added In jQuery 1.1\n * to offer multiple easing options\n *\n * TERMS OF USE - jQuery Easing\n * \n * Open source under the BSD License. \n * \n * Copyright © 2008 George McGinley Smith\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without modification, \n * are permitted provided that the following conditions are met:\n * \n * Redistributions of source code must retain the above copyright notice, this list of \n * conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice, this list \n * of conditions and the following disclaimer in the documentation and/or other materials \n * provided with the distribution.\n * \n * Neither the name of the author nor the names of contributors may be used to endorse \n * or promote products derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY \n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\n *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED \n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED \n * OF THE POSSIBILITY OF SUCH DAMAGE. \n *\n*/\n\n// t: current time, b: begInnIng value, c: change In value, d: duration\njQuery.easing['jswing'] = jQuery.easing['swing'];\n\njQuery.extend( jQuery.easing,\n{\n\tdef: 'easeOutQuad',\n\tswing: function (x, t, b, c, d) {\n\t\t//alert(jQuery.easing.default);\n\t\treturn jQuery.easing[jQuery.easing.def](x, t, b, c, d);\n\t},\n\teaseInQuad: function (x, t, b, c, d) {\n\t\treturn c*(t/=d)*t + b;\n\t},\n\teaseOutQuad: function (x, t, b, c, d) {\n\t\treturn -c *(t/=d)*(t-2) + b;\n\t},\n\teaseInOutQuad: function (x, t, b, c, d) {\n\t\tif ((t/=d/2) < 1) return c/2*t*t + b;\n\t\treturn -c/2 * ((--t)*(t-2) - 1) + b;\n\t},\n\teaseInCubic: function (x, t, b, c, d) {\n\t\treturn c*(t/=d)*t*t + b;\n\t},\n\teaseOutCubic: function (x, t, b, c, d) {\n\t\treturn c*((t=t/d-1)*t*t + 1) + b;\n\t},\n\teaseInOutCubic: function (x, t, b, c, d) {\n\t\tif ((t/=d/2) < 1) return c/2*t*t*t + b;\n\t\treturn c/2*((t-=2)*t*t + 2) + b;\n\t},\n\teaseInQuart: function (x, t, b, c, d) {\n\t\treturn c*(t/=d)*t*t*t + b;\n\t},\n\teaseOutQuart: function (x, t, b, c, d) {\n\t\treturn -c * ((t=t/d-1)*t*t*t - 1) + b;\n\t},\n\teaseInOutQuart: function (x, t, b, c, d) {\n\t\tif ((t/=d/2) < 1) return c/2*t*t*t*t + b;\n\t\treturn -c/2 * ((t-=2)*t*t*t - 2) + b;\n\t},\n\teaseInQuint: function (x, t, b, c, d) {\n\t\treturn c*(t/=d)*t*t*t*t + b;\n\t},\n\teaseOutQuint: function (x, t, b, c, d) {\n\t\treturn c*((t=t/d-1)*t*t*t*t + 1) + b;\n\t},\n\teaseInOutQuint: function (x, t, b, c, d) {\n\t\tif ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;\n\t\treturn c/2*((t-=2)*t*t*t*t + 2) + b;\n\t},\n\teaseInSine: function (x, t, b, c, d) {\n\t\treturn -c * Math.cos(t/d * (Math.PI/2)) + c + b;\n\t},\n\teaseOutSine: function (x, t, b, c, d) {\n\t\treturn c * Math.sin(t/d * (Math.PI/2)) + b;\n\t},\n\teaseInOutSine: function (x, t, b, c, d) {\n\t\treturn -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;\n\t},\n\teaseInExpo: function (x, t, b, c, d) {\n\t\treturn (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;\n\t},\n\teaseOutExpo: function (x, t, b, c, d) {\n\t\treturn (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;\n\t},\n\teaseInOutExpo: function (x, t, b, c, d) {\n\t\tif (t==0) return b;\n\t\tif (t==d) return b+c;\n\t\tif ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;\n\t\treturn c/2 * (-Math.pow(2, -10 * --t) + 2) + b;\n\t},\n\teaseInCirc: function (x, t, b, c, d) {\n\t\treturn -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;\n\t},\n\teaseOutCirc: function (x, t, b, c, d) {\n\t\treturn c * Math.sqrt(1 - (t=t/d-1)*t) + b;\n\t},\n\teaseInOutCirc: function (x, t, b, c, d) {\n\t\tif ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;\n\t\treturn c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;\n\t},\n\teaseInElastic: function (x, t, b, c, d) {\n\t\tvar s=1.70158;var p=0;var a=c;\n\t\tif (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;\n\t\tif (a < Math.abs(c)) { a=c; var s=p/4; }\n\t\telse var s = p/(2*Math.PI) * Math.asin (c/a);\n\t\treturn -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;\n\t},\n\teaseOutElastic: function (x, t, b, c, d) {\n\t\tvar s=1.70158;var p=0;var a=c;\n\t\tif (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;\n\t\tif (a < Math.abs(c)) { a=c; var s=p/4; }\n\t\telse var s = p/(2*Math.PI) * Math.asin (c/a);\n\t\treturn a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;\n\t},\n\teaseInOutElastic: function (x, t, b, c, d) {\n\t\tvar s=1.70158;var p=0;var a=c;\n\t\tif (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) p=d*(.3*1.5);\n\t\tif (a < Math.abs(c)) { a=c; var s=p/4; }\n\t\telse var s = p/(2*Math.PI) * Math.asin (c/a);\n\t\tif (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;\n\t\treturn a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;\n\t},\n\teaseInBack: function (x, t, b, c, d, s) {\n\t\tif (s == undefined) s = 1.70158;\n\t\treturn c*(t/=d)*t*((s+1)*t - s) + b;\n\t},\n\teaseOutBack: function (x, t, b, c, d, s) {\n\t\tif (s == undefined) s = 1.70158;\n\t\treturn c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;\n\t},\n\teaseInOutBack: function (x, t, b, c, d, s) {\n\t\tif (s == undefined) s = 1.70158; \n\t\tif ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;\n\t\treturn c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;\n\t},\n\teaseInBounce: function (x, t, b, c, d) {\n\t\treturn c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;\n\t},\n\teaseOutBounce: function (x, t, b, c, d) {\n\t\tif ((t/=d) < (1/2.75)) {\n\t\t\treturn c*(7.5625*t*t) + b;\n\t\t} else if (t < (2/2.75)) {\n\t\t\treturn c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;\n\t\t} else if (t < (2.5/2.75)) {\n\t\t\treturn c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;\n\t\t} else {\n\t\t\treturn c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;\n\t\t}\n\t},\n\teaseInOutBounce: function (x, t, b, c, d) {\n\t\tif (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;\n\t\treturn jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;\n\t}\n});\n\n/*\n *\n * TERMS OF USE - EASING EQUATIONS\n * \n * Open source under the BSD License. \n * \n * Copyright © 2001 Robert Penner\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without modification, \n * are permitted provided that the following conditions are met:\n * \n * Redistributions of source code must retain the above copyright notice, this list of \n * conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice, this list \n * of conditions and the following disclaimer in the documentation and/or other materials \n * provided with the distribution.\n * \n * Neither the name of the author nor the names of contributors may be used to endorse \n * or promote products derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY \n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\n *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED \n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED \n * OF THE POSSIBILITY OF SUCH DAMAGE. \n *\n */"
  },
  {
    "path": "js/jquery.validate.js",
    "content": "/*!\n * jQuery Validation Plugin 1.11.1\n *\n * http://bassistance.de/jquery-plugins/jquery-plugin-validation/\n * http://docs.jquery.com/Plugins/Validation\n *\n * Copyright 2013 Jörn Zaefferer\n * Released under the MIT license:\n *   http://www.opensource.org/licenses/mit-license.php\n */\n\n(function($) {\n\n$.extend($.fn, {\n\t// http://docs.jquery.com/Plugins/Validation/validate\n\tvalidate: function( options ) {\n\n\t\t// if nothing is selected, return nothing; can't chain anyway\n\t\tif ( !this.length ) {\n\t\t\tif ( options && options.debug && window.console ) {\n\t\t\t\tconsole.warn( \"Nothing selected, can't validate, returning nothing.\" );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// check if a validator for this form was already created\n\t\tvar validator = $.data( this[0], \"validator\" );\n\t\tif ( validator ) {\n\t\t\treturn validator;\n\t\t}\n\n\t\t// Add novalidate tag if HTML5.\n\t\tthis.attr( \"novalidate\", \"novalidate\" );\n\n\t\tvalidator = new $.validator( options, this[0] );\n\t\t$.data( this[0], \"validator\", validator );\n\n\t\tif ( validator.settings.onsubmit ) {\n\n\t\t\tthis.validateDelegate( \":submit\", \"click\", function( event ) {\n\t\t\t\tif ( validator.settings.submitHandler ) {\n\t\t\t\t\tvalidator.submitButton = event.target;\n\t\t\t\t}\n\t\t\t\t// allow suppressing validation by adding a cancel class to the submit button\n\t\t\t\tif ( $(event.target).hasClass(\"cancel\") ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\n\t\t\t\t// allow suppressing validation by adding the html5 formnovalidate attribute to the submit button\n\t\t\t\tif ( $(event.target).attr(\"formnovalidate\") !== undefined ) {\n\t\t\t\t\tvalidator.cancelSubmit = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// validate the form on submit\n\t\t\tthis.submit( function( event ) {\n\t\t\t\tif ( validator.settings.debug ) {\n\t\t\t\t\t// prevent form submit to be able to see console output\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t\tfunction handle() {\n\t\t\t\t\tvar hidden;\n\t\t\t\t\tif ( validator.settings.submitHandler ) {\n\t\t\t\t\t\tif ( validator.submitButton ) {\n\t\t\t\t\t\t\t// insert a hidden input as a replacement for the missing submit button\n\t\t\t\t\t\t\thidden = $(\"<input type='hidden'/>\").attr(\"name\", validator.submitButton.name).val( $(validator.submitButton).val() ).appendTo(validator.currentForm);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvalidator.settings.submitHandler.call( validator, validator.currentForm, event );\n\t\t\t\t\t\tif ( validator.submitButton ) {\n\t\t\t\t\t\t\t// and clean up afterwards; thanks to no-block-scope, hidden can be referenced\n\t\t\t\t\t\t\thidden.remove();\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\t// prevent submit for invalid forms or custom submit handlers\n\t\t\t\tif ( validator.cancelSubmit ) {\n\t\t\t\t\tvalidator.cancelSubmit = false;\n\t\t\t\t\treturn handle();\n\t\t\t\t}\n\t\t\t\tif ( validator.form() ) {\n\t\t\t\t\tif ( validator.pendingRequest ) {\n\t\t\t\t\t\tvalidator.formSubmitted = true;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn handle();\n\t\t\t\t} else {\n\t\t\t\t\tvalidator.focusInvalid();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn validator;\n\t},\n\t// http://docs.jquery.com/Plugins/Validation/valid\n\tvalid: function() {\n\t\tif ( $(this[0]).is(\"form\")) {\n\t\t\treturn this.validate().form();\n\t\t} else {\n\t\t\tvar valid = true;\n\t\t\tvar validator = $(this[0].form).validate();\n\t\t\tthis.each(function() {\n\t\t\t\tvalid = valid && validator.element(this);\n\t\t\t});\n\t\t\treturn valid;\n\t\t}\n\t},\n\t// attributes: space seperated list of attributes to retrieve and remove\n\tremoveAttrs: function( attributes ) {\n\t\tvar result = {},\n\t\t\t$element = this;\n\t\t$.each(attributes.split(/\\s/), function( index, value ) {\n\t\t\tresult[value] = $element.attr(value);\n\t\t\t$element.removeAttr(value);\n\t\t});\n\t\treturn result;\n\t},\n\t// http://docs.jquery.com/Plugins/Validation/rules\n\trules: function( command, argument ) {\n\t\tvar element = this[0];\n\n\t\tif ( command ) {\n\t\t\tvar settings = $.data(element.form, \"validator\").settings;\n\t\t\tvar staticRules = settings.rules;\n\t\t\tvar existingRules = $.validator.staticRules(element);\n\t\t\tswitch(command) {\n\t\t\tcase \"add\":\n\t\t\t\t$.extend(existingRules, $.validator.normalizeRule(argument));\n\t\t\t\t// remove messages from rules, but allow them to be set separetely\n\t\t\t\tdelete existingRules.messages;\n\t\t\t\tstaticRules[element.name] = existingRules;\n\t\t\t\tif ( argument.messages ) {\n\t\t\t\t\tsettings.messages[element.name] = $.extend( settings.messages[element.name], argument.messages );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"remove\":\n\t\t\t\tif ( !argument ) {\n\t\t\t\t\tdelete staticRules[element.name];\n\t\t\t\t\treturn existingRules;\n\t\t\t\t}\n\t\t\t\tvar filtered = {};\n\t\t\t\t$.each(argument.split(/\\s/), function( index, method ) {\n\t\t\t\t\tfiltered[method] = existingRules[method];\n\t\t\t\t\tdelete existingRules[method];\n\t\t\t\t});\n\t\t\t\treturn filtered;\n\t\t\t}\n\t\t}\n\n\t\tvar data = $.validator.normalizeRules(\n\t\t$.extend(\n\t\t\t{},\n\t\t\t$.validator.classRules(element),\n\t\t\t$.validator.attributeRules(element),\n\t\t\t$.validator.dataRules(element),\n\t\t\t$.validator.staticRules(element)\n\t\t), element);\n\n\t\t// make sure required is at front\n\t\tif ( data.required ) {\n\t\t\tvar param = data.required;\n\t\t\tdelete data.required;\n\t\t\tdata = $.extend({required: param}, data);\n\t\t}\n\n\t\treturn data;\n\t}\n});\n\n// Custom selectors\n$.extend($.expr[\":\"], {\n\t// http://docs.jquery.com/Plugins/Validation/blank\n\tblank: function( a ) { return !$.trim(\"\" + $(a).val()); },\n\t// http://docs.jquery.com/Plugins/Validation/filled\n\tfilled: function( a ) { return !!$.trim(\"\" + $(a).val()); },\n\t// http://docs.jquery.com/Plugins/Validation/unchecked\n\tunchecked: function( a ) { return !$(a).prop(\"checked\"); }\n});\n\n// constructor for validator\n$.validator = function( options, form ) {\n\tthis.settings = $.extend( true, {}, $.validator.defaults, options );\n\tthis.currentForm = form;\n\tthis.init();\n};\n\n$.validator.format = function( source, params ) {\n\tif ( arguments.length === 1 ) {\n\t\treturn function() {\n\t\t\tvar args = $.makeArray(arguments);\n\t\t\targs.unshift(source);\n\t\t\treturn $.validator.format.apply( this, args );\n\t\t};\n\t}\n\tif ( arguments.length > 2 && params.constructor !== Array  ) {\n\t\tparams = $.makeArray(arguments).slice(1);\n\t}\n\tif ( params.constructor !== Array ) {\n\t\tparams = [ params ];\n\t}\n\t$.each(params, function( i, n ) {\n\t\tsource = source.replace( new RegExp(\"\\\\{\" + i + \"\\\\}\", \"g\"), function() {\n\t\t\treturn n;\n\t\t});\n\t});\n\treturn source;\n};\n\n$.extend($.validator, {\n\n\tdefaults: {\n\t\tmessages: {},\n\t\tgroups: {},\n\t\trules: {},\n\t\terrorClass: \"error\",\n\t\tvalidClass: \"valid\",\n\t\terrorElement: \"label\",\n\t\tfocusInvalid: true,\n\t\terrorContainer: $([]),\n\t\terrorLabelContainer: $([]),\n\t\tonsubmit: true,\n\t\tignore: \":hidden\",\n\t\tignoreTitle: false,\n\t\tonfocusin: function( element, event ) {\n\t\t\tthis.lastActive = element;\n\n\t\t\t// hide error label and remove error class on focus if enabled\n\t\t\tif ( this.settings.focusCleanup && !this.blockFocusCleanup ) {\n\t\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.addWrapper(this.errorsFor(element)).hide();\n\t\t\t}\n\t\t},\n\t\tonfocusout: function( element, event ) {\n\t\t\tif ( !this.checkable(element) && (element.name in this.submitted || !this.optional(element)) ) {\n\t\t\t\tthis.element(element);\n\t\t\t}\n\t\t},\n\t\tonkeyup: function( element, event ) {\n\t\t\tif ( event.which === 9 && this.elementValue(element) === \"\" ) {\n\t\t\t\treturn;\n\t\t\t} else if ( element.name in this.submitted || element === this.lastElement ) {\n\t\t\t\tthis.element(element);\n\t\t\t}\n\t\t},\n\t\tonclick: function( element, event ) {\n\t\t\t// click on selects, radiobuttons and checkboxes\n\t\t\tif ( element.name in this.submitted ) {\n\t\t\t\tthis.element(element);\n\t\t\t}\n\t\t\t// or option elements, check parent select in that case\n\t\t\telse if ( element.parentNode.name in this.submitted ) {\n\t\t\t\tthis.element(element.parentNode);\n\t\t\t}\n\t\t},\n\t\thighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName(element.name).addClass(errorClass).removeClass(validClass);\n\t\t\t} else {\n\t\t\t\t$(element).addClass(errorClass).removeClass(validClass);\n\t\t\t}\n\t\t},\n\t\tunhighlight: function( element, errorClass, validClass ) {\n\t\t\tif ( element.type === \"radio\" ) {\n\t\t\t\tthis.findByName(element.name).removeClass(errorClass).addClass(validClass);\n\t\t\t} else {\n\t\t\t\t$(element).removeClass(errorClass).addClass(validClass);\n\t\t\t}\n\t\t}\n\t},\n\n\t// http://docs.jquery.com/Plugins/Validation/Validator/setDefaults\n\tsetDefaults: function( settings ) {\n\t\t$.extend( $.validator.defaults, settings );\n\t},\n\n\tmessages: {\n\t\trequired: \"This field is required.\",\n\t\tremote: \"Please fix this field.\",\n\t\temail: \"Please enter a valid email address.\",\n\t\turl: \"Please enter a valid URL.\",\n\t\tdate: \"Please enter a valid date.\",\n\t\tdateISO: \"Please enter a valid date (ISO).\",\n\t\tnumber: \"Please enter a valid number.\",\n\t\tdigits: \"Please enter only digits.\",\n\t\tcreditcard: \"Please enter a valid credit card number.\",\n\t\tequalTo: \"Please enter the same value again.\",\n\t\tmaxlength: $.validator.format(\"Please enter no more than {0} characters.\"),\n\t\tminlength: $.validator.format(\"Please enter at least {0} characters.\"),\n\t\trangelength: $.validator.format(\"Please enter a value between {0} and {1} characters long.\"),\n\t\trange: $.validator.format(\"Please enter a value between {0} and {1}.\"),\n\t\tmax: $.validator.format(\"Please enter a value less than or equal to {0}.\"),\n\t\tmin: $.validator.format(\"Please enter a value greater than or equal to {0}.\")\n\t},\n\n\tautoCreateRanges: false,\n\n\tprototype: {\n\n\t\tinit: function() {\n\t\t\tthis.labelContainer = $(this.settings.errorLabelContainer);\n\t\t\tthis.errorContext = this.labelContainer.length && this.labelContainer || $(this.currentForm);\n\t\t\tthis.containers = $(this.settings.errorContainer).add( this.settings.errorLabelContainer );\n\t\t\tthis.submitted = {};\n\t\t\tthis.valueCache = {};\n\t\t\tthis.pendingRequest = 0;\n\t\t\tthis.pending = {};\n\t\t\tthis.invalid = {};\n\t\t\tthis.reset();\n\n\t\t\tvar groups = (this.groups = {});\n\t\t\t$.each(this.settings.groups, function( key, value ) {\n\t\t\t\tif ( typeof value === \"string\" ) {\n\t\t\t\t\tvalue = value.split(/\\s/);\n\t\t\t\t}\n\t\t\t\t$.each(value, function( index, name ) {\n\t\t\t\t\tgroups[name] = key;\n\t\t\t\t});\n\t\t\t});\n\t\t\tvar rules = this.settings.rules;\n\t\t\t$.each(rules, function( key, value ) {\n\t\t\t\trules[key] = $.validator.normalizeRule(value);\n\t\t\t});\n\n\t\t\tfunction delegate(event) {\n\t\t\t\tvar validator = $.data(this[0].form, \"validator\"),\n\t\t\t\t\teventType = \"on\" + event.type.replace(/^validate/, \"\");\n\t\t\t\tif ( validator.settings[eventType] ) {\n\t\t\t\t\tvalidator.settings[eventType].call(validator, this[0], event);\n\t\t\t\t}\n\t\t\t}\n\t\t\t$(this.currentForm)\n\t\t\t\t.validateDelegate(\":text, [type='password'], [type='file'], select, textarea, \" +\n\t\t\t\t\t\"[type='number'], [type='search'] ,[type='tel'], [type='url'], \" +\n\t\t\t\t\t\"[type='email'], [type='datetime'], [type='date'], [type='month'], \" +\n\t\t\t\t\t\"[type='week'], [type='time'], [type='datetime-local'], \" +\n\t\t\t\t\t\"[type='range'], [type='color'] \",\n\t\t\t\t\t\"focusin focusout keyup\", delegate)\n\t\t\t\t.validateDelegate(\"[type='radio'], [type='checkbox'], select, option\", \"click\", delegate);\n\n\t\t\tif ( this.settings.invalidHandler ) {\n\t\t\t\t$(this.currentForm).bind(\"invalid-form.validate\", this.settings.invalidHandler);\n\t\t\t}\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Validator/form\n\t\tform: function() {\n\t\t\tthis.checkForm();\n\t\t\t$.extend(this.submitted, this.errorMap);\n\t\t\tthis.invalid = $.extend({}, this.errorMap);\n\t\t\tif ( !this.valid() ) {\n\t\t\t\t$(this.currentForm).triggerHandler(\"invalid-form\", [this]);\n\t\t\t}\n\t\t\tthis.showErrors();\n\t\t\treturn this.valid();\n\t\t},\n\n\t\tcheckForm: function() {\n\t\t\tthis.prepareForm();\n\t\t\tfor ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) {\n\t\t\t\tthis.check( elements[i] );\n\t\t\t}\n\t\t\treturn this.valid();\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Validator/element\n\t\telement: function( element ) {\n\t\t\telement = this.validationTargetFor( this.clean( element ) );\n\t\t\tthis.lastElement = element;\n\t\t\tthis.prepareElement( element );\n\t\t\tthis.currentElements = $(element);\n\t\t\tvar result = this.check( element ) !== false;\n\t\t\tif ( result ) {\n\t\t\t\tdelete this.invalid[element.name];\n\t\t\t} else {\n\t\t\t\tthis.invalid[element.name] = true;\n\t\t\t}\n\t\t\tif ( !this.numberOfInvalids() ) {\n\t\t\t\t// Hide error containers on last error\n\t\t\t\tthis.toHide = this.toHide.add( this.containers );\n\t\t\t}\n\t\t\tthis.showErrors();\n\t\t\treturn result;\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Validator/showErrors\n\t\tshowErrors: function( errors ) {\n\t\t\tif ( errors ) {\n\t\t\t\t// add items to error list and map\n\t\t\t\t$.extend( this.errorMap, errors );\n\t\t\t\tthis.errorList = [];\n\t\t\t\tfor ( var name in errors ) {\n\t\t\t\t\tthis.errorList.push({\n\t\t\t\t\t\tmessage: errors[name],\n\t\t\t\t\t\telement: this.findByName(name)[0]\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// remove items from success list\n\t\t\t\tthis.successList = $.grep( this.successList, function( element ) {\n\t\t\t\t\treturn !(element.name in errors);\n\t\t\t\t});\n\t\t\t}\n\t\t\tif ( this.settings.showErrors ) {\n\t\t\t\tthis.settings.showErrors.call( this, this.errorMap, this.errorList );\n\t\t\t} else {\n\t\t\t\tthis.defaultShowErrors();\n\t\t\t}\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Validator/resetForm\n\t\tresetForm: function() {\n\t\t\tif ( $.fn.resetForm ) {\n\t\t\t\t$(this.currentForm).resetForm();\n\t\t\t}\n\t\t\tthis.submitted = {};\n\t\t\tthis.lastElement = null;\n\t\t\tthis.prepareForm();\n\t\t\tthis.hideErrors();\n\t\t\tthis.elements().removeClass( this.settings.errorClass ).removeData( \"previousValue\" );\n\t\t},\n\n\t\tnumberOfInvalids: function() {\n\t\t\treturn this.objectLength(this.invalid);\n\t\t},\n\n\t\tobjectLength: function( obj ) {\n\t\t\tvar count = 0;\n\t\t\tfor ( var i in obj ) {\n\t\t\t\tcount++;\n\t\t\t}\n\t\t\treturn count;\n\t\t},\n\n\t\thideErrors: function() {\n\t\t\tthis.addWrapper( this.toHide ).hide();\n\t\t},\n\n\t\tvalid: function() {\n\t\t\treturn this.size() === 0;\n\t\t},\n\n\t\tsize: function() {\n\t\t\treturn this.errorList.length;\n\t\t},\n\n\t\tfocusInvalid: function() {\n\t\t\tif ( this.settings.focusInvalid ) {\n\t\t\t\ttry {\n\t\t\t\t\t$(this.findLastActive() || this.errorList.length && this.errorList[0].element || [])\n\t\t\t\t\t.filter(\":visible\")\n\t\t\t\t\t.focus()\n\t\t\t\t\t// manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find\n\t\t\t\t\t.trigger(\"focusin\");\n\t\t\t\t} catch(e) {\n\t\t\t\t\t// ignore IE throwing errors when focusing hidden elements\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tfindLastActive: function() {\n\t\t\tvar lastActive = this.lastActive;\n\t\t\treturn lastActive && $.grep(this.errorList, function( n ) {\n\t\t\t\treturn n.element.name === lastActive.name;\n\t\t\t}).length === 1 && lastActive;\n\t\t},\n\n\t\telements: function() {\n\t\t\tvar validator = this,\n\t\t\t\trulesCache = {};\n\n\t\t\t// select all valid inputs inside the form (no submit or reset buttons)\n\t\t\treturn $(this.currentForm)\n\t\t\t.find(\"input, select, textarea\")\n\t\t\t.not(\":submit, :reset, :image, [disabled]\")\n\t\t\t.not( this.settings.ignore )\n\t\t\t.filter(function() {\n\t\t\t\tif ( !this.name && validator.settings.debug && window.console ) {\n\t\t\t\t\tconsole.error( \"%o has no name assigned\", this);\n\t\t\t\t}\n\n\t\t\t\t// select only the first element for each name, and only those with rules specified\n\t\t\t\tif ( this.name in rulesCache || !validator.objectLength($(this).rules()) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\trulesCache[this.name] = true;\n\t\t\t\treturn true;\n\t\t\t});\n\t\t},\n\n\t\tclean: function( selector ) {\n\t\t\treturn $(selector)[0];\n\t\t},\n\n\t\terrors: function() {\n\t\t\tvar errorClass = this.settings.errorClass.replace(\" \", \".\");\n\t\t\treturn $(this.settings.errorElement + \".\" + errorClass, this.errorContext);\n\t\t},\n\n\t\treset: function() {\n\t\t\tthis.successList = [];\n\t\t\tthis.errorList = [];\n\t\t\tthis.errorMap = {};\n\t\t\tthis.toShow = $([]);\n\t\t\tthis.toHide = $([]);\n\t\t\tthis.currentElements = $([]);\n\t\t},\n\n\t\tprepareForm: function() {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errors().add( this.containers );\n\t\t},\n\n\t\tprepareElement: function( element ) {\n\t\t\tthis.reset();\n\t\t\tthis.toHide = this.errorsFor(element);\n\t\t},\n\n\t\telementValue: function( element ) {\n\t\t\tvar type = $(element).attr(\"type\"),\n\t\t\t\tval = $(element).val();\n\n\t\t\tif ( type === \"radio\" || type === \"checkbox\" ) {\n\t\t\t\treturn $(\"input[name='\" + $(element).attr(\"name\") + \"']:checked\").val();\n\t\t\t}\n\n\t\t\tif ( typeof val === \"string\" ) {\n\t\t\t\treturn val.replace(/\\r/g, \"\");\n\t\t\t}\n\t\t\treturn val;\n\t\t},\n\n\t\tcheck: function( element ) {\n\t\t\telement = this.validationTargetFor( this.clean( element ) );\n\n\t\t\tvar rules = $(element).rules();\n\t\t\tvar dependencyMismatch = false;\n\t\t\tvar val = this.elementValue(element);\n\t\t\tvar result;\n\n\t\t\tfor (var method in rules ) {\n\t\t\t\tvar rule = { method: method, parameters: rules[method] };\n\t\t\t\ttry {\n\n\t\t\t\t\tresult = $.validator.methods[method].call( this, val, element, rule.parameters );\n\n\t\t\t\t\t// if a method indicates that the field is optional and therefore valid,\n\t\t\t\t\t// don't mark it as valid when there are no other rules\n\t\t\t\t\tif ( result === \"dependency-mismatch\" ) {\n\t\t\t\t\t\tdependencyMismatch = true;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tdependencyMismatch = false;\n\n\t\t\t\t\tif ( result === \"pending\" ) {\n\t\t\t\t\t\tthis.toHide = this.toHide.not( this.errorsFor(element) );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !result ) {\n\t\t\t\t\t\tthis.formatAndAdd( element, rule );\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} catch(e) {\n\t\t\t\t\tif ( this.settings.debug && window.console ) {\n\t\t\t\t\t\tconsole.log( \"Exception occurred when checking element \" + element.id + \", check the '\" + rule.method + \"' method.\", e );\n\t\t\t\t\t}\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( dependencyMismatch ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( this.objectLength(rules) ) {\n\t\t\t\tthis.successList.push(element);\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// return the custom message for the given element and validation method\n\t\t// specified in the element's HTML5 data attribute\n\t\tcustomDataMessage: function( element, method ) {\n\t\t\treturn $(element).data(\"msg-\" + method.toLowerCase()) || (element.attributes && $(element).attr(\"data-msg-\" + method.toLowerCase()));\n\t\t},\n\n\t\t// return the custom message for the given element name and validation method\n\t\tcustomMessage: function( name, method ) {\n\t\t\tvar m = this.settings.messages[name];\n\t\t\treturn m && (m.constructor === String ? m : m[method]);\n\t\t},\n\n\t\t// return the first defined argument, allowing empty strings\n\t\tfindDefined: function() {\n\t\t\tfor(var i = 0; i < arguments.length; i++) {\n\t\t\t\tif ( arguments[i] !== undefined ) {\n\t\t\t\t\treturn arguments[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\n\t\tdefaultMessage: function( element, method ) {\n\t\t\treturn this.findDefined(\n\t\t\t\tthis.customMessage( element.name, method ),\n\t\t\t\tthis.customDataMessage( element, method ),\n\t\t\t\t// title is never undefined, so handle empty string as undefined\n\t\t\t\t!this.settings.ignoreTitle && element.title || undefined,\n\t\t\t\t$.validator.messages[method],\n\t\t\t\t\"<strong>Warning: No message defined for \" + element.name + \"</strong>\"\n\t\t\t);\n\t\t},\n\n\t\tformatAndAdd: function( element, rule ) {\n\t\t\tvar message = this.defaultMessage( element, rule.method ),\n\t\t\t\ttheregex = /\\$?\\{(\\d+)\\}/g;\n\t\t\tif ( typeof message === \"function\" ) {\n\t\t\t\tmessage = message.call(this, rule.parameters, element);\n\t\t\t} else if (theregex.test(message)) {\n\t\t\t\tmessage = $.validator.format(message.replace(theregex, \"{$1}\"), rule.parameters);\n\t\t\t}\n\t\t\tthis.errorList.push({\n\t\t\t\tmessage: message,\n\t\t\t\telement: element\n\t\t\t});\n\n\t\t\tthis.errorMap[element.name] = message;\n\t\t\tthis.submitted[element.name] = message;\n\t\t},\n\n\t\taddWrapper: function( toToggle ) {\n\t\t\tif ( this.settings.wrapper ) {\n\t\t\t\ttoToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );\n\t\t\t}\n\t\t\treturn toToggle;\n\t\t},\n\n\t\tdefaultShowErrors: function() {\n\t\t\tvar i, elements;\n\t\t\tfor ( i = 0; this.errorList[i]; i++ ) {\n\t\t\t\tvar error = this.errorList[i];\n\t\t\t\tif ( this.settings.highlight ) {\n\t\t\t\t\tthis.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t\tthis.showLabel( error.element, error.message );\n\t\t\t}\n\t\t\tif ( this.errorList.length ) {\n\t\t\t\tthis.toShow = this.toShow.add( this.containers );\n\t\t\t}\n\t\t\tif ( this.settings.success ) {\n\t\t\t\tfor ( i = 0; this.successList[i]; i++ ) {\n\t\t\t\t\tthis.showLabel( this.successList[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( this.settings.unhighlight ) {\n\t\t\t\tfor ( i = 0, elements = this.validElements(); elements[i]; i++ ) {\n\t\t\t\t\tthis.settings.unhighlight.call( this, elements[i], this.settings.errorClass, this.settings.validClass );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toHide = this.toHide.not( this.toShow );\n\t\t\tthis.hideErrors();\n\t\t\tthis.addWrapper( this.toShow ).show();\n\t\t},\n\n\t\tvalidElements: function() {\n\t\t\treturn this.currentElements.not(this.invalidElements());\n\t\t},\n\n\t\tinvalidElements: function() {\n\t\t\treturn $(this.errorList).map(function() {\n\t\t\t\treturn this.element;\n\t\t\t});\n\t\t},\n\n\t\tshowLabel: function( element, message ) {\n\t\t\tvar label = this.errorsFor( element );\n\t\t\tif ( label.length ) {\n\t\t\t\t// refresh error/success class\n\t\t\t\tlabel.removeClass( this.settings.validClass ).addClass( this.settings.errorClass );\n\t\t\t\t// replace message on existing label\n\t\t\t\tlabel.html(message);\n\t\t\t} else {\n\t\t\t\t// create label\n\t\t\t\tlabel = $(\"<\" + this.settings.errorElement + \">\")\n\t\t\t\t\t.attr(\"for\", this.idOrName(element))\n\t\t\t\t\t.addClass(this.settings.errorClass)\n\t\t\t\t\t.html(message || \"\");\n\t\t\t\tif ( this.settings.wrapper ) {\n\t\t\t\t\t// make sure the element is visible, even in IE\n\t\t\t\t\t// actually showing the wrapped element is handled elsewhere\n\t\t\t\t\tlabel = label.hide().show().wrap(\"<\" + this.settings.wrapper + \"/>\").parent();\n\t\t\t\t}\n\t\t\t\tif ( !this.labelContainer.append(label).length ) {\n\t\t\t\t\tif ( this.settings.errorPlacement ) {\n\t\t\t\t\t\tthis.settings.errorPlacement(label, $(element) );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlabel.insertAfter(element);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( !message && this.settings.success ) {\n\t\t\t\tlabel.text(\"\");\n\t\t\t\tif ( typeof this.settings.success === \"string\" ) {\n\t\t\t\t\tlabel.addClass( this.settings.success );\n\t\t\t\t} else {\n\t\t\t\t\tthis.settings.success( label, element );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.toShow = this.toShow.add(label);\n\t\t},\n\n\t\terrorsFor: function( element ) {\n\t\t\tvar name = this.idOrName(element);\n\t\t\treturn this.errors().filter(function() {\n\t\t\t\treturn $(this).attr(\"for\") === name;\n\t\t\t});\n\t\t},\n\n\t\tidOrName: function( element ) {\n\t\t\treturn this.groups[element.name] || (this.checkable(element) ? element.name : element.id || element.name);\n\t\t},\n\n\t\tvalidationTargetFor: function( element ) {\n\t\t\t// if radio/checkbox, validate first element in group instead\n\t\t\tif ( this.checkable(element) ) {\n\t\t\t\telement = this.findByName( element.name ).not(this.settings.ignore)[0];\n\t\t\t}\n\t\t\treturn element;\n\t\t},\n\n\t\tcheckable: function( element ) {\n\t\t\treturn (/radio|checkbox/i).test(element.type);\n\t\t},\n\n\t\tfindByName: function( name ) {\n\t\t\treturn $(this.currentForm).find(\"[name='\" + name + \"']\");\n\t\t},\n\n\t\tgetLength: function( value, element ) {\n\t\t\tswitch( element.nodeName.toLowerCase() ) {\n\t\t\tcase \"select\":\n\t\t\t\treturn $(\"option:selected\", element).length;\n\t\t\tcase \"input\":\n\t\t\t\tif ( this.checkable( element) ) {\n\t\t\t\t\treturn this.findByName(element.name).filter(\":checked\").length;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn value.length;\n\t\t},\n\n\t\tdepend: function( param, element ) {\n\t\t\treturn this.dependTypes[typeof param] ? this.dependTypes[typeof param](param, element) : true;\n\t\t},\n\n\t\tdependTypes: {\n\t\t\t\"boolean\": function( param, element ) {\n\t\t\t\treturn param;\n\t\t\t},\n\t\t\t\"string\": function( param, element ) {\n\t\t\t\treturn !!$(param, element.form).length;\n\t\t\t},\n\t\t\t\"function\": function( param, element ) {\n\t\t\t\treturn param(element);\n\t\t\t}\n\t\t},\n\n\t\toptional: function( element ) {\n\t\t\tvar val = this.elementValue(element);\n\t\t\treturn !$.validator.methods.required.call(this, val, element) && \"dependency-mismatch\";\n\t\t},\n\n\t\tstartRequest: function( element ) {\n\t\t\tif ( !this.pending[element.name] ) {\n\t\t\t\tthis.pendingRequest++;\n\t\t\t\tthis.pending[element.name] = true;\n\t\t\t}\n\t\t},\n\n\t\tstopRequest: function( element, valid ) {\n\t\t\tthis.pendingRequest--;\n\t\t\t// sometimes synchronization fails, make sure pendingRequest is never < 0\n\t\t\tif ( this.pendingRequest < 0 ) {\n\t\t\t\tthis.pendingRequest = 0;\n\t\t\t}\n\t\t\tdelete this.pending[element.name];\n\t\t\tif ( valid && this.pendingRequest === 0 && this.formSubmitted && this.form() ) {\n\t\t\t\t$(this.currentForm).submit();\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t} else if (!valid && this.pendingRequest === 0 && this.formSubmitted) {\n\t\t\t\t$(this.currentForm).triggerHandler(\"invalid-form\", [this]);\n\t\t\t\tthis.formSubmitted = false;\n\t\t\t}\n\t\t},\n\n\t\tpreviousValue: function( element ) {\n\t\t\treturn $.data(element, \"previousValue\") || $.data(element, \"previousValue\", {\n\t\t\t\told: null,\n\t\t\t\tvalid: true,\n\t\t\t\tmessage: this.defaultMessage( element, \"remote\" )\n\t\t\t});\n\t\t}\n\n\t},\n\n\tclassRuleSettings: {\n\t\trequired: {required: true},\n\t\temail: {email: true},\n\t\turl: {url: true},\n\t\tdate: {date: true},\n\t\tdateISO: {dateISO: true},\n\t\tnumber: {number: true},\n\t\tdigits: {digits: true},\n\t\tcreditcard: {creditcard: true}\n\t},\n\n\taddClassRules: function( className, rules ) {\n\t\tif ( className.constructor === String ) {\n\t\t\tthis.classRuleSettings[className] = rules;\n\t\t} else {\n\t\t\t$.extend(this.classRuleSettings, className);\n\t\t}\n\t},\n\n\tclassRules: function( element ) {\n\t\tvar rules = {};\n\t\tvar classes = $(element).attr(\"class\");\n\t\tif ( classes ) {\n\t\t\t$.each(classes.split(\" \"), function() {\n\t\t\t\tif ( this in $.validator.classRuleSettings ) {\n\t\t\t\t\t$.extend(rules, $.validator.classRuleSettings[this]);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn rules;\n\t},\n\n\tattributeRules: function( element ) {\n\t\tvar rules = {};\n\t\tvar $element = $(element);\n\t\tvar type = $element[0].getAttribute(\"type\");\n\n\t\tfor (var method in $.validator.methods) {\n\t\t\tvar value;\n\n\t\t\t// support for <input required> in both html5 and older browsers\n\t\t\tif ( method === \"required\" ) {\n\t\t\t\tvalue = $element.get(0).getAttribute(method);\n\t\t\t\t// Some browsers return an empty string for the required attribute\n\t\t\t\t// and non-HTML5 browsers might have required=\"\" markup\n\t\t\t\tif ( value === \"\" ) {\n\t\t\t\t\tvalue = true;\n\t\t\t\t}\n\t\t\t\t// force non-HTML5 browsers to return bool\n\t\t\t\tvalue = !!value;\n\t\t\t} else {\n\t\t\t\tvalue = $element.attr(method);\n\t\t\t}\n\n\t\t\t// convert the value to a number for number inputs, and for text for backwards compability\n\t\t\t// allows type=\"date\" and others to be compared as strings\n\t\t\tif ( /min|max/.test( method ) && ( type === null || /number|range|text/.test( type ) ) ) {\n\t\t\t\tvalue = Number(value);\n\t\t\t}\n\n\t\t\tif ( value ) {\n\t\t\t\trules[method] = value;\n\t\t\t} else if ( type === method && type !== 'range' ) {\n\t\t\t\t// exception: the jquery validate 'range' method\n\t\t\t\t// does not test for the html5 'range' type\n\t\t\t\trules[method] = true;\n\t\t\t}\n\t\t}\n\n\t\t// maxlength may be returned as -1, 2147483647 (IE) and 524288 (safari) for text inputs\n\t\tif ( rules.maxlength && /-1|2147483647|524288/.test(rules.maxlength) ) {\n\t\t\tdelete rules.maxlength;\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\tdataRules: function( element ) {\n\t\tvar method, value,\n\t\t\trules = {}, $element = $(element);\n\t\tfor (method in $.validator.methods) {\n\t\t\tvalue = $element.data(\"rule-\" + method.toLowerCase());\n\t\t\tif ( value !== undefined ) {\n\t\t\t\trules[method] = value;\n\t\t\t}\n\t\t}\n\t\treturn rules;\n\t},\n\n\tstaticRules: function( element ) {\n\t\tvar rules = {};\n\t\tvar validator = $.data(element.form, \"validator\");\n\t\tif ( validator.settings.rules ) {\n\t\t\trules = $.validator.normalizeRule(validator.settings.rules[element.name]) || {};\n\t\t}\n\t\treturn rules;\n\t},\n\n\tnormalizeRules: function( rules, element ) {\n\t\t// handle dependency check\n\t\t$.each(rules, function( prop, val ) {\n\t\t\t// ignore rule when param is explicitly false, eg. required:false\n\t\t\tif ( val === false ) {\n\t\t\t\tdelete rules[prop];\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( val.param || val.depends ) {\n\t\t\t\tvar keepRule = true;\n\t\t\t\tswitch (typeof val.depends) {\n\t\t\t\tcase \"string\":\n\t\t\t\t\tkeepRule = !!$(val.depends, element.form).length;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"function\":\n\t\t\t\t\tkeepRule = val.depends.call(element, element);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif ( keepRule ) {\n\t\t\t\t\trules[prop] = val.param !== undefined ? val.param : true;\n\t\t\t\t} else {\n\t\t\t\t\tdelete rules[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// evaluate parameters\n\t\t$.each(rules, function( rule, parameter ) {\n\t\t\trules[rule] = $.isFunction(parameter) ? parameter(element) : parameter;\n\t\t});\n\n\t\t// clean number parameters\n\t\t$.each(['minlength', 'maxlength'], function() {\n\t\t\tif ( rules[this] ) {\n\t\t\t\trules[this] = Number(rules[this]);\n\t\t\t}\n\t\t});\n\t\t$.each(['rangelength', 'range'], function() {\n\t\t\tvar parts;\n\t\t\tif ( rules[this] ) {\n\t\t\t\tif ( $.isArray(rules[this]) ) {\n\t\t\t\t\trules[this] = [Number(rules[this][0]), Number(rules[this][1])];\n\t\t\t\t} else if ( typeof rules[this] === \"string\" ) {\n\t\t\t\t\tparts = rules[this].split(/[\\s,]+/);\n\t\t\t\t\trules[this] = [Number(parts[0]), Number(parts[1])];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif ( $.validator.autoCreateRanges ) {\n\t\t\t// auto-create ranges\n\t\t\tif ( rules.min && rules.max ) {\n\t\t\t\trules.range = [rules.min, rules.max];\n\t\t\t\tdelete rules.min;\n\t\t\t\tdelete rules.max;\n\t\t\t}\n\t\t\tif ( rules.minlength && rules.maxlength ) {\n\t\t\t\trules.rangelength = [rules.minlength, rules.maxlength];\n\t\t\t\tdelete rules.minlength;\n\t\t\t\tdelete rules.maxlength;\n\t\t\t}\n\t\t}\n\n\t\treturn rules;\n\t},\n\n\t// Converts a simple string to a {string: true} rule, e.g., \"required\" to {required:true}\n\tnormalizeRule: function( data ) {\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tvar transformed = {};\n\t\t\t$.each(data.split(/\\s/), function() {\n\t\t\t\ttransformed[this] = true;\n\t\t\t});\n\t\t\tdata = transformed;\n\t\t}\n\t\treturn data;\n\t},\n\n\t// http://docs.jquery.com/Plugins/Validation/Validator/addMethod\n\taddMethod: function( name, method, message ) {\n\t\t$.validator.methods[name] = method;\n\t\t$.validator.messages[name] = message !== undefined ? message : $.validator.messages[name];\n\t\tif ( method.length < 3 ) {\n\t\t\t$.validator.addClassRules(name, $.validator.normalizeRule(name));\n\t\t}\n\t},\n\n\tmethods: {\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/required\n\t\trequired: function( value, element, param ) {\n\t\t\t// check if dependency is met\n\t\t\tif ( !this.depend(param, element) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\t\t\tif ( element.nodeName.toLowerCase() === \"select\" ) {\n\t\t\t\t// could be an array for select-multiple or a string, both are fine this way\n\t\t\t\tvar val = $(element).val();\n\t\t\t\treturn val && val.length > 0;\n\t\t\t}\n\t\t\tif ( this.checkable(element) ) {\n\t\t\t\treturn this.getLength(value, element) > 0;\n\t\t\t}\n\t\t\treturn $.trim(value).length > 0;\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/email\n\t\temail: function( value, element ) {\n\t\t\t// contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/\n\t\t\treturn this.optional(element) || /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i.test(value);\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/url\n\t\turl: function( value, element ) {\n\t\t\t// contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/\n\t\t\treturn this.optional(element) || /^(https?|s?ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i.test(value);\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/date\n\t\tdate: function( value, element ) {\n\t\t\treturn this.optional(element) || !/Invalid|NaN/.test(new Date(value).toString());\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/dateISO\n\t\tdateISO: function( value, element ) {\n\t\t\treturn this.optional(element) || /^\\d{4}[\\/\\-]\\d{1,2}[\\/\\-]\\d{1,2}$/.test(value);\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/number\n\t\tnumber: function( value, element ) {\n\t\t\treturn this.optional(element) || /^-?(?:\\d+|\\d{1,3}(?:,\\d{3})+)?(?:\\.\\d+)?$/.test(value);\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/digits\n\t\tdigits: function( value, element ) {\n\t\t\treturn this.optional(element) || /^\\d+$/.test(value);\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/creditcard\n\t\t// based on http://en.wikipedia.org/wiki/Luhn\n\t\tcreditcard: function( value, element ) {\n\t\t\tif ( this.optional(element) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\t\t\t// accept only spaces, digits and dashes\n\t\t\tif ( /[^0-9 \\-]+/.test(value) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar nCheck = 0,\n\t\t\t\tnDigit = 0,\n\t\t\t\tbEven = false;\n\n\t\t\tvalue = value.replace(/\\D/g, \"\");\n\n\t\t\tfor (var n = value.length - 1; n >= 0; n--) {\n\t\t\t\tvar cDigit = value.charAt(n);\n\t\t\t\tnDigit = parseInt(cDigit, 10);\n\t\t\t\tif ( bEven ) {\n\t\t\t\t\tif ( (nDigit *= 2) > 9 ) {\n\t\t\t\t\t\tnDigit -= 9;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tnCheck += nDigit;\n\t\t\t\tbEven = !bEven;\n\t\t\t}\n\n\t\t\treturn (nCheck % 10) === 0;\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/minlength\n\t\tminlength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength($.trim(value), element);\n\t\t\treturn this.optional(element) || length >= param;\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/maxlength\n\t\tmaxlength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength($.trim(value), element);\n\t\t\treturn this.optional(element) || length <= param;\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/rangelength\n\t\trangelength: function( value, element, param ) {\n\t\t\tvar length = $.isArray( value ) ? value.length : this.getLength($.trim(value), element);\n\t\t\treturn this.optional(element) || ( length >= param[0] && length <= param[1] );\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/min\n\t\tmin: function( value, element, param ) {\n\t\t\treturn this.optional(element) || value >= param;\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/max\n\t\tmax: function( value, element, param ) {\n\t\t\treturn this.optional(element) || value <= param;\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/range\n\t\trange: function( value, element, param ) {\n\t\t\treturn this.optional(element) || ( value >= param[0] && value <= param[1] );\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/equalTo\n\t\tequalTo: function( value, element, param ) {\n\t\t\t// bind to the blur event of the target in order to revalidate whenever the target field is updated\n\t\t\t// TODO find a way to bind the event just once, avoiding the unbind-rebind overhead\n\t\t\tvar target = $(param);\n\t\t\tif ( this.settings.onfocusout ) {\n\t\t\t\ttarget.unbind(\".validate-equalTo\").bind(\"blur.validate-equalTo\", function() {\n\t\t\t\t\t$(element).valid();\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn value === target.val();\n\t\t},\n\n\t\t// http://docs.jquery.com/Plugins/Validation/Methods/remote\n\t\tremote: function( value, element, param ) {\n\t\t\tif ( this.optional(element) ) {\n\t\t\t\treturn \"dependency-mismatch\";\n\t\t\t}\n\n\t\t\tvar previous = this.previousValue(element);\n\t\t\tif (!this.settings.messages[element.name] ) {\n\t\t\t\tthis.settings.messages[element.name] = {};\n\t\t\t}\n\t\t\tprevious.originalMessage = this.settings.messages[element.name].remote;\n\t\t\tthis.settings.messages[element.name].remote = previous.message;\n\n\t\t\tparam = typeof param === \"string\" && {url:param} || param;\n\n\t\t\tif ( previous.old === value ) {\n\t\t\t\treturn previous.valid;\n\t\t\t}\n\n\t\t\tprevious.old = value;\n\t\t\tvar validator = this;\n\t\t\tthis.startRequest(element);\n\t\t\tvar data = {};\n\t\t\tdata[element.name] = value;\n\t\t\t$.ajax($.extend(true, {\n\t\t\t\turl: param,\n\t\t\t\tmode: \"abort\",\n\t\t\t\tport: \"validate\" + element.name,\n\t\t\t\tdataType: \"json\",\n\t\t\t\tdata: data,\n\t\t\t\tsuccess: function( response ) {\n\t\t\t\t\tvalidator.settings.messages[element.name].remote = previous.originalMessage;\n\t\t\t\t\tvar valid = response === true || response === \"true\";\n\t\t\t\t\tif ( valid ) {\n\t\t\t\t\t\tvar submitted = validator.formSubmitted;\n\t\t\t\t\t\tvalidator.prepareElement(element);\n\t\t\t\t\t\tvalidator.formSubmitted = submitted;\n\t\t\t\t\t\tvalidator.successList.push(element);\n\t\t\t\t\t\tdelete validator.invalid[element.name];\n\t\t\t\t\t\tvalidator.showErrors();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar errors = {};\n\t\t\t\t\t\tvar message = response || validator.defaultMessage( element, \"remote\" );\n\t\t\t\t\t\terrors[element.name] = previous.message = $.isFunction(message) ? message(value) : message;\n\t\t\t\t\t\tvalidator.invalid[element.name] = true;\n\t\t\t\t\t\tvalidator.showErrors(errors);\n\t\t\t\t\t}\n\t\t\t\t\tprevious.valid = valid;\n\t\t\t\t\tvalidator.stopRequest(element, valid);\n\t\t\t\t}\n\t\t\t}, param));\n\t\t\treturn \"pending\";\n\t\t}\n\n\t}\n\n});\n\n// deprecated, use $.validator.format instead\n$.format = $.validator.format;\n\n}(jQuery));\n\n// ajax mode: abort\n// usage: $.ajax({ mode: \"abort\"[, port: \"uniqueport\"]});\n// if mode:\"abort\" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()\n(function($) {\n\tvar pendingRequests = {};\n\t// Use a prefilter if available (1.5+)\n\tif ( $.ajaxPrefilter ) {\n\t\t$.ajaxPrefilter(function( settings, _, xhr ) {\n\t\t\tvar port = settings.port;\n\t\t\tif ( settings.mode === \"abort\" ) {\n\t\t\t\tif ( pendingRequests[port] ) {\n\t\t\t\t\tpendingRequests[port].abort();\n\t\t\t\t}\n\t\t\t\tpendingRequests[port] = xhr;\n\t\t\t}\n\t\t});\n\t} else {\n\t\t// Proxy ajax\n\t\tvar ajax = $.ajax;\n\t\t$.ajax = function( settings ) {\n\t\t\tvar mode = ( \"mode\" in settings ? settings : $.ajaxSettings ).mode,\n\t\t\t\tport = ( \"port\" in settings ? settings : $.ajaxSettings ).port;\n\t\t\tif ( mode === \"abort\" ) {\n\t\t\t\tif ( pendingRequests[port] ) {\n\t\t\t\t\tpendingRequests[port].abort();\n\t\t\t\t}\n\t\t\t\tpendingRequests[port] = ajax.apply(this, arguments);\n\t\t\t\treturn pendingRequests[port];\n\t\t\t}\n\t\t\treturn ajax.apply(this, arguments);\n\t\t};\n\t}\n}(jQuery));\n\n// provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation\n// handler is only called when $(event.target).is(delegate), in the scope of the jquery-object for event.target\n(function($) {\n\t$.extend($.fn, {\n\t\tvalidateDelegate: function( delegate, type, handler ) {\n\t\t\treturn this.bind(type, function( event ) {\n\t\t\t\tvar target = $(event.target);\n\t\t\t\tif ( target.is(delegate) ) {\n\t\t\t\t\treturn handler.apply(target, arguments);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n}(jQuery));\n"
  },
  {
    "path": "js/speedup.js",
    "content": "/**\n * @author Roger Wu\n */\n/*@cc_on _d=document;eval('var document=_d')@*/\n/*@cc_on eval((function(props) {var code = [];for (var i = 0,l = props.length;i<l;i++){var prop = props[i];window['_'+prop]=window[prop];code.push(prop+'=_'+prop);}return 'var '+code.join(',');})('document self top parent alert setInterval clearInterval setTimeout clearTimeout'.split(' ')))@*/"
  },
  {
    "path": "login.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n<title>风险管理平台</title>\n<link href=\"themes/css/login.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n\n<body>\n\t<div id=\"login\">\n\t\t<div id=\"login_header\">\n\t\t\t<h1 class=\"login_logo\">\n\t\t\t\t<a href=\"http://demo.dwzjs.com\"><img src=\"themes/default/images/login_logo.gif\" /></a>\n\t\t\t</h1>\n\t\t\t<div class=\"login_headerContent\">\n\t\t\t\t<div class=\"navList\">\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"#\">设为首页</a></li>\n\t\t\t\t\t\t<li><a href=\"http://bbs.dwzjs.com\">反馈</a></li>\n\t\t\t\t\t\t<li><a href=\"doc/dwz-user-guide.pdf\" target=\"_blank\">帮助</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\t\t\t\t<h2 class=\"login_title\"><img src=\"themes/default/images/login_title.png\" /></h2>\n\t\t\t</div>\n\t\t</div>\n\t\t<div id=\"login_content\">\n\t\t\t<div class=\"loginForm\">\n\t\t\t\t<form action=\"index.html\">\n\t\t\t\t\t<p>\n\t\t\t\t\t\t<label>用户名：</label>\n\t\t\t\t\t\t<input type=\"text\" name=\"username\" size=\"20\" class=\"login_input\" />\n\t\t\t\t\t</p>\n\t\t\t\t\t<p>\n\t\t\t\t\t\t<label>密码：</label>\n\t\t\t\t\t\t<input type=\"password\" name=\"password\" size=\"20\" class=\"login_input\" />\n\t\t\t\t\t</p>\n\t\t\t\t\t<p>\n\t\t\t\t\t\t<label>验证码：</label>\n\t\t\t\t\t\t<input class=\"code\" type=\"text\" size=\"5\" />\n\t\t\t\t\t\t<span><img src=\"themes/default/images/header_bg.png\" alt=\"\" width=\"75\" height=\"24\" /></span>\n\t\t\t\t\t</p>\n\t\t\t\t\t<div class=\"login_bar\">\n\t\t\t\t\t\t<input class=\"sub\" type=\"submit\" value=\" \" />\n\t\t\t\t\t</div>\n\t\t\t\t</form>\n\t\t\t</div>\n\t\t\t<div class=\"login_banner\"><img src=\"themes/default/images/login_banner.jpg\" /></div>\n\t\t\t<div class=\"login_main\">\n\t\t\t\t<ul class=\"helpList\">\n\t\t\t\t\t<li><a href=\"#\">下载驱动程序</a></li>\n\t\t\t\t\t<li><a href=\"#\">如何安装密钥驱动程序？</a></li>\n\t\t\t\t\t<li><a href=\"#\">忘记密码怎么办？</a></li>\n\t\t\t\t\t<li><a href=\"#\">为什么登录失败？</a></li>\n\t\t\t\t</ul>\n\t\t\t\t<div class=\"login_inner\">\n\t\t\t\t\t<p>您可以使用 网易网盘 ，随时存，随地取</p>\n\t\t\t\t\t<p>您还可以使用 闪电邮 在桌面随时提醒邮件到达，快速收发邮件。</p>\n\t\t\t\t\t<p>在 百宝箱 里您可以查星座，订机票，看小说，学做菜…</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div id=\"login_footer\">\n\t\t\tCopyright &copy; 2009 www.dwzjs.com Inc. All Rights Reserved.\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "login_dialog.html",
    "content": "\n<div class=\"pageContent\">\n\t\n\t<form method=\"post\" action=\"demo/common/ajaxDone.html\" class=\"pageForm\" onsubmit=\"return validateCallback(this, dialogAjaxDone)\">\n\t\t<div class=\"pageFormContent\" layoutH=\"58\">\n\t\t\t<div class=\"unit\">\n\t\t\t\t<label>用户名：</label>\n\t\t\t\t<input type=\"text\" name=\"username\" size=\"30\" class=\"required\"/>\n\t\t\t</div>\n\t\t\t<div class=\"unit\">\n\t\t\t\t<label>密码：</label>\n\t\t\t\t<input type=\"password\" name=\"password\" size=\"30\" class=\"required\"/>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"formBar\">\n\t\t\t<ul>\n\t\t\t\t<li><div class=\"buttonActive\"><div class=\"buttonContent\"><button type=\"submit\">提交</button></div></div></li>\n\t\t\t\t<li><div class=\"button\"><div class=\"buttonContent\"><button type=\"button\" class=\"close\">取消</button></div></div></li>\n\t\t\t</ul>\n\t\t</div>\n\t</form>\n\t\n</div>\n\n"
  },
  {
    "path": "main.html",
    "content": "<div class=\"accountInfo\">\n\t<div class=\"alertInfo\">\n\t\t<!--\n\t\t<h2>最新消息：</h2>\n\t\t<a href=\"\">深交所：中小散户是股票上市首日买入主体 占比56%</a>\n\t\t-->\n\t\t<h2><a href=\"doc/dwz-user-guide.pdf\" target=\"_blank\">DWZ框架使用手册下载</a></h2>\n\t</div>\n\t<div class=\"right\">\n\t\t<p>待办工作32项，消息212条</p>\n\t\t<p>07月12日，星期二</p>\n\t</div>\n\t<p><span>DWZ富客户端框架 </span></p>\n\t<p><a href=\"demo_page2.html\" target=\"dialog\">DWZ小组</a></p>\n</div>\n\n<div class=\"pageCentent\">\n<textarea layoutH=\"80\" style=\"width:98%\">\nDWZ富客户端框架设计目标是简单实用、扩展方便、快速开发、RIA思路、轻量级\nDWZ支持用html扩展的方式来代替javascript代码, 基本可以保证程序员不董javascript, 也能使用各种页面组件和ajax技术. 如果有特定需求也可以扩展DWZ做定制化开化.\nDWZ基于jQuery可以非常方便的定制特定需求的UI组件, 并以jQuery插件的形式发布.\nDWZ富客户端框架完全开源，可以免费获取全部源码。团队中的每个人都是开源的拥护者，都希望为中国软件开源事业尽自己的一份力量。 \n\n\n学习DWZ的建议:\n\t通读DWZ文档，很多新手提的问题文档中都写了\n\t看demo每个组件演示效果和代码（留意组件html结构）\n\t建议安装firebug，用firebug看html结构、CSS和调试JS都非常方便。见附录一 firebug介绍\n\t对于初学者不建议看DWZ全部源码，但还是非常有必要看看dwz.ui.js和dwz.ajax.js\n\t可以从google code下载dwz_thinkphp版本，结合php后台去理解DWZ和服务器端的交互方式\n\nDWZ区别于其它JS框架，最大的优点:\n\t完全开源，源码没有做任何混淆处理，方便扩展\n\tCSS和js代码彻底分离，修改样式方便\n\t简单实用，扩展方便，轻量级框架，快速开发\n\t仍然保留了html的页面布局方式\n\t支持HTML扩展方式调用UI组件，开发人员不需写js\n\t只要懂html语法不需精通js，就可以使用ajax开发后台\n\t基于jQuery，UI组件以jQuery插件的形式发布，扩展方便\n\n\nDWZ研发组联系方式:\nDWZ创始人：\n\t[北京]杜权(UI设计/制作)\td@jui.org\n\t[杭州]吴平(Ajax开发)\tw@jui.org\n\t[杭州]张慧华(Ajax开发)\tz@jui.org\n\n新加入成员：\n\t[杭州]贾蕊霞\tQQ:67852549\n\t[北京]张涛\tQQ:122794105\n\t[北京]冀刚\tQQ:63502308\n\t[北京]郑应海\tQQ:55691650\n\t[北京]王华聪\tQQ:329725368\n\t[成都]COCO\tQQ:80095667\n\t\n\t官方微博(欢迎加入)\thttp://weibo.com/dwzui \n\n\tjQuery.DWZ-jUI-1群 107983317\n\tjQuery.DWZ-jUI-2群 69611933\n\tjQuery.DWZ-jUI-3群 20866231\n\tjQuery.DWZ-jUI-4群 369203\n\tjQuery.DWZ-jUI-5群 85031937\n\tjQuery.DWZ-jUI-6群 172602882\n\tjQuery.DWZ-jUI-7群 210322217\n\tjQuery.DWZ-jUI-8群 139067378\n\tjQuery.DWZ-jUI-9群 59680552\n\tjQuery.DWZ-jUI-10群 329597326\n\n</textarea>\n</div>"
  },
  {
    "path": "miscDrag.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n<title>简单实用国产jQuery UI框架 - DWZ富客户端框架(J-UI.com)</title>\n\n<link href=\"themes/default/style.css\" rel=\"stylesheet\" type=\"text/css\" media=\"all\"/>\n<link href=\"themes/css/core.css\" rel=\"stylesheet\" type=\"text/css\" media=\"all\"/><link href=\"themes/css/print.css\" rel=\"stylesheet\" type=\"text/css\" media=\"print\"/>\n<link href=\"uploadify/css/uploadify.css\" rel=\"stylesheet\" type=\"text/css\" media=\"screen\"/>\n<!--[if IE]>\n<link href=\"themes/css/ieHack.css\" rel=\"stylesheet\" type=\"text/css\" media=\"screen\"/>\n<![endif]-->\n\n\t<!--[if lt IE 9]><script src=\"js/speedup.js\" type=\"text/javascript\"></script><script src=\"js/jquery-1.12.4.js\" type=\"text/javascript\"></script><![endif]-->\n\t<!--[if gte IE 9]><!--><script src=\"js/jquery-3.4.1.js\" type=\"text/javascript\"></script><!--<![endif]-->\n\n<script src=\"js/jquery.cookie.js\" type=\"text/javascript\"></script>\n<script src=\"js/jquery.validate.js\" type=\"text/javascript\"></script>\n<script src=\"js/jquery.bgiframe.js\" type=\"text/javascript\"></script>\n<script src=\"xheditor/xheditor-1.2.2.min.js\" type=\"text/javascript\"></script>\n<script src=\"xheditor/xheditor_lang/zh-cn.js\" type=\"text/javascript\"></script>\n<script src=\"uploadify/scripts/jquery.uploadify.js\" type=\"text/javascript\"></script>\n\n<!-- svg图表  supports Firefox 3.0+, Safari 3.0+, Chrome 5.0+, Opera 9.5+ and Internet Explorer 6.0+ -->\n<script type=\"text/javascript\" src=\"chart/raphael.js\"></script>\n<script type=\"text/javascript\" src=\"chart/g.raphael.js\"></script>\n<script type=\"text/javascript\" src=\"chart/g.bar.js\"></script>\n<script type=\"text/javascript\" src=\"chart/g.line.js\"></script>\n<script type=\"text/javascript\" src=\"chart/g.pie.js\"></script>\n<script type=\"text/javascript\" src=\"chart/g.dot.js\"></script>\n\n<script src=\"js/dwz.core.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.util.date.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.validate.method.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.barDrag.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.drag.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.tree.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.accordion.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.ui.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.theme.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.switchEnv.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.alertMsg.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.contextmenu.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.navTab.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.tab.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.resize.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.dialog.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.dialogDrag.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.sortDrag.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.miscDrag.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.cssTable.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.stable.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.taskBar.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.ajax.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.pagination.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.database.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.datepicker.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.effects.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.panel.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.checkbox.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.history.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.combox.js\" type=\"text/javascript\"></script>\n<script src=\"js/dwz.print.js\" type=\"text/javascript\"></script>\n\n<!-- 可以用dwz.min.js替换前面全部dwz.*.js (注意：替换时下面dwz.regional.zh.js还需要引入)\n<script src=\"bin/dwz.min.js\" type=\"text/javascript\"></script>\n-->\n<script src=\"js/dwz.regional.zh.js\" type=\"text/javascript\"></script>\n\n<script type=\"text/javascript\">\n$(function(){\n\tDWZ.init(\"dwz.frag.xml\", {\n\t\tloginUrl:\"login_dialog.html\", loginTitle:\"登录\",\t// 弹出登录对话框\n//\t\tloginUrl:\"login.html\",\t// 跳到登录页面\n\t\tstatusCode:{ok:200, error:300, timeout:301}, //【可选】\n\t\tpageInfo:{pageNum:\"pageNum\", numPerPage:\"numPerPage\", orderField:\"orderField\", orderDirection:\"orderDirection\"}, //【可选】\n\t\tkeys: {statusCode:\"statusCode\", message:\"message\"}, //【可选】\n\t\tui:{hideMode:'offsets'}, //【可选】hideMode:navTab组件切换的隐藏方式，支持的值有’display’，’offsets’负数偏移位置的值，默认值为’display’\n\t\tdebug:false,\t// 调试模式 【true|false】\n\t\tcallback:function(){\n\t\t\tinitEnv();\n\t\t\t$(\"#themeList\").theme({themeBase:\"themes\"}); // themeBase 相对于index页面的主题base路径\n\t\t}\n\t});\n\n\tDWZ.regPlugins.push(function($p){\n\n\t\t$(\"dl.miscDrag\", $p).miscDrag();\n\n\t\t$(\"dl.miscSortDrag\", $p).miscSortDrag();\n\n\t});\n});\n\n</script>\n\n<link href=\"themes/miscDrag/styles.css\" rel=\"stylesheet\" type=\"text/css\" media=\"all\"/>\n</head>\n\n<body>\n\t<div id=\"layout\">\n\t\t<div id=\"header\">\n\t\t\t<div class=\"headerNav\">\n\t\t\t\t<a class=\"logo\" href=\"http://j-ui.com\">标志</a>\n\t\t\t\t<ul class=\"nav\">\n\t\t\t\t\t<li id=\"switchEnvBox\"><a href=\"javascript:\">（<span>北京</span>）切换城市</a>\n\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t<li><a href=\"sidebar_1.html\">北京</a></li>\n\t\t\t\t\t\t\t<li><a href=\"sidebar_2.html\">上海</a></li>\n\t\t\t\t\t\t\t<li><a href=\"sidebar_2.html\">南京</a></li>\n\t\t\t\t\t\t\t<li><a href=\"sidebar_2.html\">深圳</a></li>\n\t\t\t\t\t\t\t<li><a href=\"sidebar_2.html\">广州</a></li>\n\t\t\t\t\t\t\t<li><a href=\"sidebar_2.html\">天津</a></li>\n\t\t\t\t\t\t\t<li><a href=\"sidebar_2.html\">杭州</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li><a href=\"https://me.alipay.com/dwzteam\" target=\"_blank\">捐赠</a></li>\n\t\t\t\t\t<li><a href=\"changepwd.html\" target=\"dialog\" width=\"600\">设置</a></li>\n\t\t\t\t\t<li><a href=\"http://www.cnblogs.com/dwzjs\" target=\"_blank\">博客</a></li>\n\t\t\t\t\t<li><a href=\"http://weibo.com/dwzui\" target=\"_blank\">微博</a></li>\n\t\t\t\t\t<li><a href=\"login.html\">退出</a></li>\n\t\t\t\t</ul>\n\t\t\t\t<ul class=\"themeList\" id=\"themeList\">\n\t\t\t\t\t<li theme=\"default\"><div class=\"selected\">蓝色</div></li>\n\t\t\t\t\t<li theme=\"green\"><div>绿色</div></li>\n\t\t\t\t\t<!--<li theme=\"red\"><div>红色</div></li>-->\n\t\t\t\t\t<li theme=\"purple\"><div>紫色</div></li>\n\t\t\t\t\t<li theme=\"silver\"><div>银色</div></li>\n\t\t\t\t\t<li theme=\"azure\"><div>天蓝</div></li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\n\t\t\t<!-- navMenu -->\n\n\t\t</div>\n\n\t\t<div id=\"leftside\">\n\t\t\t<div id=\"sidebar_s\">\n\t\t\t\t<div class=\"collapse\">\n\t\t\t\t\t<div class=\"toggleCollapse\"><div></div></div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div id=\"sidebar\">\n\t\t\t\t<div class=\"toggleCollapse\"><h2>主菜单</h2><div>收缩</div></div>\n\n\t\t\t\t<div class=\"accordion\" fillSpace=\"sidebar\">\n\t\t\t\t\t<div class=\"accordionHeader\">\n\t\t\t\t\t\t<h2><span>Folder</span>界面组件</h2>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"accordionContent\">\n\t\t\t\t\t\t<ul class=\"tree treeFolder\">\n\t\t\t\t\t\t\t<li><a href=\"tabsPage.html\" target=\"navTab\">主框架面板</a>\n\t\t\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t\t\t<li><a href=\"demo/sortDrag/1.html\" target=\"navTab\" rel=\"sortDrag\">单个sortDrag示例</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"demo/sortDrag/2.html\" target=\"navTab\" rel=\"sortDrag\">多个sortDrag示例</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"demo/sortDrag/form.html\" target=\"navTab\" rel=\"sortDrag\">可拖动表单示例</a></li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"miscDrag2.html\" target=\"_blank\">炉门 Furnace door</a></li>\n\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t</li>\n\n\t\t\t\t\t\t\t<li><a href=\"dwz.frag.xml\" target=\"navTab\" external=\"true\">dwz.frag.xml</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div id=\"container\">\n\t\t\t<div id=\"navTab\" class=\"tabsPage\">\n\t\t\t\t<div class=\"tabsPageHeader\">\n\t\t\t\t\t<div class=\"tabsPageHeaderContent\"><!-- 显示左右控制时添加 class=\"tabsPageHeaderMargin\" -->\n\t\t\t\t\t\t<ul class=\"navTab-tab\">\n\t\t\t\t\t\t\t<li tabid=\"main\" class=\"main\"><a href=\"javascript:;\"><span><span class=\"home_icon\">我的主页</span></span></a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"tabsLeft\">left</div><!-- 禁用只需要添加一个样式 class=\"tabsLeft tabsLeftDisabled\" -->\n\t\t\t\t\t<div class=\"tabsRight\">right</div><!-- 禁用只需要添加一个样式 class=\"tabsRight tabsRightDisabled\" -->\n\t\t\t\t\t<div class=\"tabsMore\">more</div>\n\t\t\t\t</div>\n\t\t\t\t<ul class=\"tabsMoreList\">\n\t\t\t\t\t<li><a href=\"javascript:;\">我的主页</a></li>\n\t\t\t\t</ul>\n\t\t\t\t<div class=\"navTab-panel tabsPageContent layoutBox\">\n\t\t\t\t\t<div class=\"page unitBox\" layoutH=\"5\">\n\n\t\t\t\t\t\t<!-- start自定义拖拽示例 -->\n\t\t\t\t\t\t<div class=\"pageContent\">\n\n\t\t\t\t\t\t\t<dl id=\"myMiscDrag\" class=\"miscDrag\" drag-rel=\"dd .door\" rel=\"#myMiscSortDrag dd\">\n\t\t\t\t\t\t\t\t<dt>\n\t\t\t\t\t\t\t\t\t<div class=\"dragBox\" data-sn=\"box1\">容器1</div>\n\t\t\t\t\t\t\t\t\t<div class=\"dragBox\" data-sn=\"box2\">容器2</div>\n\t\t\t\t\t\t\t\t\t<div class=\"dragBox\" data-sn=\"box3\">容器3</div>\n\t\t\t\t\t\t\t\t\t<div class=\"dragBox\" data-sn=\"box4\">容器4</div>\n\t\t\t\t\t\t\t\t\t<div class=\"dragBox\" data-sn=\"box5\">容器5</div>\n\t\t\t\t\t\t\t\t</dt>\n\t\t\t\t\t\t\t\t<dd>\n\t\t\t\t\t\t\t\t\t<h2 style=\"text-align: center; font-size: 20px\">炉门 Furnace door</h2>\n\t\t\t\t\t\t\t\t\t<div class=\"door\"></div>\n\t\t\t\t\t\t\t\t</dd>\n\t\t\t\t\t\t\t</dl>\n\n\t\t\t\t\t\t\t<div class=\"divider\"></div>\n\n\t\t\t\t\t\t\t<dl id=\"myMiscSortDrag\" class=\"miscSortDrag\" drag-rel=\"dd .sortDrag\">\n\t\t\t\t\t\t\t\t<dt>\n\t\t\t\t\t\t\t\t\t<div class=\"dragItem\" data-sn=\"A1\">A1</div>\n\t\t\t\t\t\t\t\t\t<div class=\"dragItem\" data-sn=\"A2\">A2</div>\n\t\t\t\t\t\t\t\t\t<div class=\"dragItem\" data-sn=\"A3\">A3</div>\n\t\t\t\t\t\t\t\t\t<div class=\"dragItem\" data-sn=\"A4\">A4</div>\n\t\t\t\t\t\t\t\t\t<div class=\"dragItem\" data-sn=\"A5\">A5</div>\n\t\t\t\t\t\t\t\t\t<div class=\"dragItem\" data-sn=\"A6\">A6</div>\n\t\t\t\t\t\t\t\t\t<div class=\"dragItem\" data-sn=\"A7\">A7</div>\n\t\t\t\t\t\t\t\t\t<div class=\"dragItem\" data-sn=\"A8\">A8</div>\n\t\t\t\t\t\t\t\t\t<div class=\"dragItem\" data-sn=\"A9\">A9</div>\n\t\t\t\t\t\t\t\t\t<div class=\"dragItem\" data-sn=\"A10\">A10</div>\n\t\t\t\t\t\t\t\t</dt>\n\t\t\t\t\t\t\t\t<dd>\n\t\t\t\t\t\t\t\t\t<div class=\"arrow\">\n\t\t\t\t\t\t\t\t\t\t<p style=\"margin-bottom: 20px\"><button type=\"button\" onclick=\"$('#myMiscDrag dt, #myMiscSortDrag dt').add(this).hide()\">隐藏</button></p>\n\t\t\t\t\t\t\t\t\t\t<p>上 Up</p>\n\t\t\t\t\t\t\t\t\t\t<img src=\"themes/miscDrag/images/arrow-up.png\" height=\"200\"/>\n\t\t\t\t\t\t\t\t\t\t<p>下 Down</p>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<!--<div class=\"sortDrag\">-->\n\t\t\t\t\t\t\t\t\t\t<!--<p>容器1</p>-->\n\t\t\t\t\t\t\t\t\t\t<!--<div class=\"dragItem\">A1<span class=\"close\">×</span></div>-->\n\t\t\t\t\t\t\t\t\t\t<!--<div class=\"dragItem\">A2<span class=\"close\">×</span></div>-->\n\t\t\t\t\t\t\t\t\t\t<!--<div class=\"dragItem\">A3<span class=\"close\">×</span></div>-->\n\t\t\t\t\t\t\t\t\t\t<!--<div class=\"dragItem\">A4<span class=\"close\">×</span></div>-->\n\t\t\t\t\t\t\t\t\t\t<!--<div class=\"dragItem\">A5<span class=\"close\">×</span></div>-->\n\t\t\t\t\t\t\t\t\t<!--</div>-->\n\n\t\t\t\t\t\t\t\t\t<!--<div class=\"sortDrag\">-->\n\t\t\t\t\t\t\t\t\t\t<!--<p>容器2</p>-->\n\t\t\t\t\t\t\t\t\t\t<!--<div class=\"dragItem\">B1<span class=\"close\">×</span></div>-->\n\t\t\t\t\t\t\t\t\t\t<!--<div class=\"dragItem\">B2<span class=\"close\">×</span></div>-->\n\t\t\t\t\t\t\t\t\t\t<!--<div class=\"dragItem\">B3<span class=\"close\">×</span></div>-->\n\t\t\t\t\t\t\t\t\t\t<!--<div class=\"dragItem\">B4<span class=\"close\">×</span></div>-->\n\t\t\t\t\t\t\t\t\t\t<!--<div class=\"dragItem\">B5<span class=\"close\">×</span></div>-->\n\t\t\t\t\t\t\t\t\t<!--</div>-->\n\t\t\t\t\t\t\t\t</dd>\n\n\t\t\t\t\t\t\t</dl>\n\n\n\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<!-- end自定义拖拽示例 -->\n\n\n\t\t\t\t\t</div>\n\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t</div>\n\n\t<div id=\"footer\">Copyright &copy; 2010 <a href=\"demo_page2.html\" target=\"dialog\">DWZ团队</a> 京ICP备15053290号-2</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "miscDrag2.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n\t<title>简单实用国产jQuery UI框架 - DWZ富客户端框架(J-UI.com)</title>\n\n\t<link href=\"themes/default/style.css\" rel=\"stylesheet\" type=\"text/css\" media=\"all\"/>\n\t<link href=\"themes/css/core.css\" rel=\"stylesheet\" type=\"text/css\" media=\"all\"/><link href=\"themes/css/print.css\" rel=\"stylesheet\" type=\"text/css\" media=\"print\"/>\n\n\t<!--[if IE]>\n\t<link href=\"themes/css/ieHack.css\" rel=\"stylesheet\" type=\"text/css\" media=\"screen\"/>\n\t<![endif]-->\n\n\t<!--[if lt IE 9]><script src=\"js/speedup.js\" type=\"text/javascript\"></script><script src=\"js/jquery-1.12.4.js\" type=\"text/javascript\"></script><![endif]-->\n\t<!--[if gte IE 9]><!--><script src=\"js/jquery-3.4.1.js\" type=\"text/javascript\"></script><!--<![endif]-->\n\n\n\t<script src=\"js/dwz.core.js\" type=\"text/javascript\"></script>\n\t<script src=\"js/dwz.drag.js\" type=\"text/javascript\"></script>\n\t<script src=\"js/dwz.ui.js\" type=\"text/javascript\"></script>\n\t<script src=\"js/dwz.sortDrag.js\" type=\"text/javascript\"></script>\n\t<script src=\"js/dwz.miscDrag.js\" type=\"text/javascript\"></script>\n\t<script src=\"js/dwz.print.js\" type=\"text/javascript\"></script>\n\n\t<!-- 可以用dwz.min.js替换前面全部dwz.*.js (注意：替换时下面dwz.regional.zh.js还需要引入)\n\t<script src=\"bin/dwz.min.js\" type=\"text/javascript\"></script>\n\t-->\n\t<script src=\"js/dwz.regional.zh.js\" type=\"text/javascript\"></script>\n\n\t<script type=\"text/javascript\">\n\t\t$(function(){\n\t\t\tDWZ.init(\"dwz.frag.xml\", {\n\t\t\t\tloginUrl:\"login_dialog.html\", loginTitle:\"登录\",\t// 弹出登录对话框\n//\t\tloginUrl:\"login.html\",\t// 跳到登录页面\n\t\t\t\tstatusCode:{ok:200, error:300, timeout:301}, //【可选】\n\t\t\t\tpageInfo:{pageNum:\"pageNum\", numPerPage:\"numPerPage\", orderField:\"orderField\", orderDirection:\"orderDirection\"}, //【可选】\n\t\t\t\tkeys: {statusCode:\"statusCode\", message:\"message\"}, //【可选】\n\t\t\t\tui:{hideMode:'offsets'}, //【可选】hideMode:navTab组件切换的隐藏方式，支持的值有’display’，’offsets’负数偏移位置的值，默认值为’display’\n\t\t\t\tdebug:false,\t// 调试模式 【true|false】\n\t\t\t\tcallback:function(){\n\n\t\t\t\t\t$(\"dl.miscDrag\").miscDrag();\n\n\t\t\t\t\t$(\"dl.miscSortDrag\").miscSortDrag();\n\t\t\t\t}\n\t\t\t});\n\n\t\t});\n\n\t</script>\n\n\t<link href=\"themes/miscDrag/styles.css\" rel=\"stylesheet\" type=\"text/css\" media=\"all\"/>\n\t<style type=\"text/css\">\n\t\thtml,body { height:auto; overflow-y: auto; background: none}\n\t</style>\n</head>\n\n<body>\n\n<div class=\"page unitBox\">\n\t<!--<h2 class=\"contentTitle\">炉门 Furnace door</h2>-->\n\t<!-- start自定义拖拽示例 -->\n\t<div class=\"pageContent\">\n\n\t\t<dl id=\"myMiscDrag\" class=\"miscDrag\" drag-rel=\"dd .door\" rel=\"#myMiscSortDrag dd\">\n\t\t\t<dt>\n\t\t\t<div class=\"dragBox\" data-sn=\"box1\" data-icon=\"themes/miscDrag/images/arrow-up.png\">容器1</div>\n\t\t\t<div class=\"dragBox\" data-sn=\"box2\">容器2</div>\n\t\t\t<div class=\"dragBox\" data-sn=\"box3\">容器3</div>\n\t\t\t<div class=\"dragBox\" data-sn=\"box4\">容器4</div>\n\t\t\t<div class=\"dragBox\" data-sn=\"box5\">容器5</div>\n\t\t\t</dt>\n\t\t\t<dd>\n\t\t\t\t<h2 style=\"text-align: center; font-size: 20px\">炉门 Furnace door</h2>\n\t\t\t\t<div class=\"door\"></div>\n\t\t\t</dd>\n\t\t</dl>\n\n\t\t<div class=\"divider\"></div>\n\n\t\t<dl id=\"myMiscSortDrag\" class=\"miscSortDrag\" drag-rel=\"dd .sortDrag\">\n\t\t\t<dt>\n\t\t\t<div class=\"dragItem\" data-sn=\"A1\">A1</div>\n\t\t\t<div class=\"dragItem\" data-sn=\"A2\">A2</div>\n\t\t\t<div class=\"dragItem\" data-sn=\"A3\">A3</div>\n\t\t\t<div class=\"dragItem\" data-sn=\"A4\">A4</div>\n\t\t\t<div class=\"dragItem\" data-sn=\"A5\">A5</div>\n\t\t\t<div class=\"dragItem\" data-sn=\"A6\">A6</div>\n\t\t\t<div class=\"dragItem\" data-sn=\"A7\">A7</div>\n\t\t\t<div class=\"dragItem\" data-sn=\"A8\">A8</div>\n\t\t\t<div class=\"dragItem\" data-sn=\"A9\">A9</div>\n\t\t\t<div class=\"dragItem\" data-sn=\"A10\">A10</div>\n\t\t\t<div class=\"dragItem\" data-sn=\"B1\">B1</div>\n\t\t\t<div class=\"dragItem\" data-sn=\"B2\">B2</div>\n\t\t\t<div class=\"dragItem\" data-sn=\"B3\">B3</div>\n\t\t\t<div class=\"dragItem\" data-sn=\"B4\">B4</div>\n\t\t\t<div class=\"dragItem\" data-sn=\"B5\">B5</div>\n\t\t\t</dt>\n\t\t\t<dd>\n\t\t\t\t<div class=\"arrow\">\n\t\t\t\t\t<p style=\"margin-bottom: 20px\"><button type=\"button\" onclick=\"$('#myMiscDrag dt, #myMiscSortDrag dt').add(this).hide()\">隐藏</button></p>\n\t\t\t\t\t<p>上 Up</p>\n\t\t\t\t\t<img src=\"themes/miscDrag/images/arrow-up.png\" height=\"200\"/>\n\t\t\t\t\t<p>下 Down</p>\n\t\t\t\t</div>\n\t\t\t\t<!--<div class=\"sortDrag\">-->\n\t\t\t\t<!--<p>容器1</p>-->\n\t\t\t\t<!--<div class=\"dragItem\">A1<span class=\"close\">×</span></div>-->\n\t\t\t\t<!--<div class=\"dragItem\">A2<span class=\"close\">×</span></div>-->\n\t\t\t\t<!--<div class=\"dragItem\">A3<span class=\"close\">×</span></div>-->\n\t\t\t\t<!--<div class=\"dragItem\">A4<span class=\"close\">×</span></div>-->\n\t\t\t\t<!--<div class=\"dragItem\">A5<span class=\"close\">×</span></div>-->\n\t\t\t\t<!--</div>-->\n\n\t\t\t\t<!--<div class=\"sortDrag\">-->\n\t\t\t\t<!--<p>容器2</p>-->\n\t\t\t\t<!--<div class=\"dragItem\">B1<span class=\"close\">×</span></div>-->\n\t\t\t\t<!--<div class=\"dragItem\">B2<span class=\"close\">×</span></div>-->\n\t\t\t\t<!--<div class=\"dragItem\">B3<span class=\"close\">×</span></div>-->\n\t\t\t\t<!--<div class=\"dragItem\">B4<span class=\"close\">×</span></div>-->\n\t\t\t\t<!--<div class=\"dragItem\">B5<span class=\"close\">×</span></div>-->\n\t\t\t\t<!--</div>-->\n\t\t\t</dd>\n\n\t\t</dl>\n\n\n\t\t<div class=\"divider\"></div>\n\n\t\t<button type=\"button\" onclick=\"alert( JSON.stringify($('#myMiscDrag').miscDragData()) )\">获取数据</button>\n\n\n\t</div>\n\t<!-- end自定义拖拽示例 -->\n\n</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "miscDragScreen1.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n\t<title>简单实用国产jQuery UI框架 - DWZ富客户端框架(J-UI.com)</title>\n\n\t<link href=\"themes/default/style.css\" rel=\"stylesheet\" type=\"text/css\" media=\"all\"/>\n\t<link href=\"themes/css/core.css\" rel=\"stylesheet\" type=\"text/css\" media=\"all\"/><link href=\"themes/css/print.css\" rel=\"stylesheet\" type=\"text/css\" media=\"print\"/>\n\n\t<!--[if IE]>\n\t<link href=\"themes/css/ieHack.css\" rel=\"stylesheet\" type=\"text/css\" media=\"screen\"/>\n\t<![endif]-->\n\n\t<!--[if lt IE 9]><script src=\"js/speedup.js\" type=\"text/javascript\"></script><script src=\"js/jquery-1.12.4.js\" type=\"text/javascript\"></script><![endif]-->\n\t<!--[if gte IE 9]><!--><script src=\"js/jquery-3.4.1.js\" type=\"text/javascript\"></script><!--<![endif]-->\n\n\t<script src=\"js/dwz.core.js\" type=\"text/javascript\"></script>\n\t<script src=\"js/dwz.drag.js\" type=\"text/javascript\"></script>\n\t<script src=\"js/dwz.sortDrag.js\" type=\"text/javascript\"></script>\n\t<script src=\"js/dwz.miscDrag.js\" type=\"text/javascript\"></script>\n\n\t<!-- 可以用dwz.min.js替换前面全部dwz.*.js (注意：替换时下面dwz.regional.zh.js还需要引入)\n\t<script src=\"bin/dwz.min.js\" type=\"text/javascript\"></script>\n\t-->\n\t<script src=\"js/dwz.regional.zh.js\" type=\"text/javascript\"></script>\n\n\t<script type=\"text/javascript\">\n\t\t$(function(){\n\t\t\tDWZ.init(\"dwz.frag.xml\", {\n\t\t\t\tloginUrl:\"login_dialog.html\", loginTitle:\"登录\",\t// 弹出登录对话框\n//\t\tloginUrl:\"login.html\",\t// 跳到登录页面\n\t\t\t\tstatusCode:{ok:200, error:300, timeout:301}, //【可选】\n\t\t\t\tpageInfo:{pageNum:\"pageNum\", numPerPage:\"numPerPage\", orderField:\"orderField\", orderDirection:\"orderDirection\"}, //【可选】\n\t\t\t\tkeys: {statusCode:\"statusCode\", message:\"message\"}, //【可选】\n\t\t\t\tui:{hideMode:'offsets'}, //【可选】hideMode:navTab组件切换的隐藏方式，支持的值有’display’，’offsets’负数偏移位置的值，默认值为’display’\n\t\t\t\tdebug:false,\t// 调试模式 【true|false】\n\t\t\t\tcallback:function(){\n\t\t\t\t\t$(\"dl.miscSortDrag\").miscSortDrag();\n\t\t\t\t\t$(\"div.sortDrag\").sortDrag();\n\t\t\t\t}\n\t\t\t});\n\n\t\t});\n\n\t</script>\n\n\t<link href=\"themes/miscDrag/screen.css\" rel=\"stylesheet\" type=\"text/css\" media=\"all\"/>\n\t<style type=\"text/css\">\n\t\thtml,body { height:auto; overflow-y: auto; background: none}\n\t</style>\n</head>\n\n<body>\n\n<div class=\"page unitBox\">\n\t<!--<h2 class=\"contentTitle\">炉门 Furnace door</h2>-->\n\t<!-- start自定义拖拽示例 -->\n\t<div class=\"pageContent\" style=\"padding: 10px;\">\n\n\n\t\t<dl id=\"myMiscSortDrag\" class=\"miscSortDrag\" drag-rel=\"dd .sortDrag\" data-duplicate=\"1\">\n\t\t\t<dt>\n\t\t\t\t<fieldset>\n\t\t\t\t\t<legend>显示单元(Element)</legend>\n\t\t\t\t\t<div class=\"itemBox\">\n\t\t\t\t\t\t<div class=\"dragItem\" data-sn=\"element-11\" data-name=\"室外 PM2.5\">室外 PM2.5<label class=\"ctl-label\"><input type=\"checkbox\" name=\"fullSize\">撑满</label><span class=\"close\">X</span></div>\n\t\t\t\t\t\t<div class=\"dragItem\" data-sn=\"element-12\" data-name=\"样板间1 PM2.5\">样板间1 PM2.5<label class=\"ctl-label\"><input type=\"checkbox\" name=\"fullSize\">撑满</label><span class=\"close\">X</span></div>\n\t\t\t\t\t\t<div class=\"dragItem\" data-sn=\"element-13\" data-name=\"样板间2 PM2.5\">样板间2 PM2.5<label class=\"ctl-label\"><input type=\"checkbox\" name=\"fullSize\">撑满</label><span class=\"close\">X</span></div>\n\t\t\t\t\t\t<div class=\"dragItem\" data-sn=\"element-21\" data-name=\"过滤前水质\">过滤前水质<label class=\"ctl-label\"><input type=\"checkbox\" name=\"fullSize\">撑满</label><span class=\"close\">X</span></div>\n\t\t\t\t\t\t<div class=\"dragItem\" data-sn=\"element-22\" data-name=\"过滤后水质\">过滤后水质<label class=\"ctl-label\"><input type=\"checkbox\" name=\"fullSize\">撑满</label><span class=\"close\">X</span></div>\n\t\t\t\t\t\t<div class=\"dragItem\" data-sn=\"element-32\" data-name=\"样板间1噪音\">样板间1噪音<label class=\"ctl-label\"><input type=\"checkbox\" name=\"fullSize\">撑满</label><span class=\"close\">X</span></div>\n\t\t\t\t\t\t<div class=\"dragItem\" data-sn=\"element-33\" data-name=\"样板间2噪音\">样板间2噪音<label class=\"ctl-label\"><input type=\"checkbox\" name=\"fullSize\">撑满</label><span class=\"close\">X</span></div>\n\n\t\t\t\t\t\t<div class=\"dragItem\" data-sn=\"element-41\" data-name=\"样板间1温度\">样板间1温度<label class=\"ctl-label\"><input type=\"checkbox\" name=\"fullSize\">撑满</label><span class=\"close\">X</span></div>\n\t\t\t\t\t\t<div class=\"dragItem\" data-sn=\"element-42\" data-name=\"样板间1湿度\">样板间1湿度<label class=\"ctl-label\"><input type=\"checkbox\" name=\"fullSize\">撑满</label><span class=\"close\">X</span></div>\n\t\t\t\t\t\t<div class=\"dragItem\" data-sn=\"element-51\" data-name=\"样板间1照度\">样板间1照度<label class=\"ctl-label\"><input type=\"checkbox\" name=\"fullSize\">撑满</label><span class=\"close\">X</span></div>\n\t\t\t\t\t\t<div class=\"dragItem\" data-sn=\"element-61\" data-name=\"样板间1风速\">样板间1风速<label class=\"ctl-label\"><input type=\"checkbox\" name=\"fullSize\">撑满</label><span class=\"close\">X</span></div>\n\t\t\t\t\t</div>\n\t\t\t\t</fieldset>\n\n\t\t\t</dt>\n\t\t\t<dd>\n\t\t\t\t<fieldset>\n\t\t\t\t\t<legend>屏幕布局配置(Screen)</legend>\n\t\t\t\t\t<div class=\"row\" style=\"padding: 0 10px;\">\n\t\t\t\t\t\t<div class=\"col-lg-4 col-md-12 col-sm-12\">\n\t\t\t\t\t\t\t<p class=\"title\">空气质量(Panel)</p>\n\t\t\t\t\t\t\t<div class=\"sortDrag\" data-sn=\"panel-1\" data-name=\"空气质量\" data-over-sort=\"false\">\n\t\t\t\t\t\t\t\t<div class=\"dragItem\" data-sn=\"element-11\" data-name=\"室外 PM2.5\">室外 PM2.5<label class=\"ctl-label\"><input type=\"checkbox\" name=\"fullSize\">撑满</label><span class=\"close\">X</span></div>\n\t\t\t\t\t\t\t\t<div class=\"dragItem\" data-sn=\"element-12\" data-name=\"样板间1 PM2.5\">样板间1 PM2.5<label class=\"ctl-label\"><input type=\"checkbox\" name=\"fullSize\">撑满</label><span class=\"close\">X</span></div>\n\t\t\t\t\t\t\t\t<div class=\"dragItem\" data-sn=\"element-13\" data-name=\"样板间2 PM2.5\">样板间2 PM2.5<label class=\"ctl-label\"><input type=\"checkbox\" name=\"fullSize\">撑满</label><span class=\"close\">X</span></div>\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t<p class=\"title\">热舒适度(Panel)</p>\n\t\t\t\t\t\t\t<div class=\"sortDrag\" data-sn=\"panel-6\" data-name=\"热舒适度\">\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"col-lg-4 col-md-6 col-sm-12\">\n\t\t\t\t\t\t\t<p class=\"title\">水质(Panel)</p>\n\t\t\t\t\t\t\t<div class=\"sortDrag\" data-sn=\"panel-2\" data-name=\"水质\" data-over-sort=\"false\">\n\t\t\t\t\t\t\t\t<div class=\"dragItem\" data-sn=\"element-21\" data-name=\"过滤前水质\">过滤前水质<label class=\"ctl-label\"><input type=\"checkbox\" name=\"fullSize\">撑满</label><span class=\"close\">X</span></div>\n\t\t\t\t\t\t\t\t<div class=\"dragItem\" data-sn=\"element-22\" data-name=\"过滤后水质\">过滤后水质<label class=\"ctl-label\"><input type=\"checkbox\" name=\"fullSize\">撑满</label><span class=\"close\">X</span></div>\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t<p class=\"title\">风速(Panel)</p>\n\t\t\t\t\t\t\t<div class=\"sortDrag\" data-sn=\"panel-4\" data-name=\"风速\" data-over-sort=\"false\">\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"col-lg-4 col-md-6 col-sm-12\">\n\t\t\t\t\t\t\t<p class=\"title\">噪音(Panel)</p>\n\t\t\t\t\t\t\t<div class=\"sortDrag\" data-sn=\"panel-3\" data-name=\"噪音\">\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t<p class=\"title\">照度(Panel)</p>\n\t\t\t\t\t\t\t<div class=\"sortDrag\" data-sn=\"panel-5\" data-name=\"照度\" data-over-sort=\"false\">\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t</div>\n\t\t\t\t</fieldset>\n\t\t\t</dd>\n\n\t\t</dl>\n\n\n\t\t<button type=\"button\" onclick=\"alert( JSON.stringify($('#myMiscSortDrag').miscSortDragData()) )\">获取数据</button>\n\n\n\t</div>\n\t<!-- end自定义拖拽示例 -->\n\n</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "newPage1.html",
    "content": "新建窗口1"
  },
  {
    "path": "newPage2.html",
    "content": "新建窗口2"
  },
  {
    "path": "newPage3.html",
    "content": "新建窗口3"
  },
  {
    "path": "sidebar_1.html",
    "content": "<div class=\"accordion\" fillSpace=\"sideBar\">\n\t<div class=\"accordionHeader\">\n\t\t<h2><span>Folder</span>界面组件</h2>\n\t</div>\n\t<div class=\"accordionContent\">\n\t\t<ul class=\"tree treeFolder\">\n\t\t\t<li><a href=\"tabsPage.html\" target=\"navTab\">框架面板</a></li>\n\t\t</ul>\n\t</div>\n\t<div class=\"accordionHeader\">\n\t\t<h2><span>Folder</span>典型页面</h2>\n\t</div>\n\t<div class=\"accordionContent\">\n\t\t<ul class=\"tree treeFolder treeCheck\">\n\t\t\t<li><a href=\"demo_upload.html\" target=\"navTab\" rel=\"demo_upload\">文件上传表单提交示例</a></li>\n\t\t\t<li><a href=\"demo_page1.html\" target=\"navTab\" rel=\"demo_page1\">查询我的客户</a></li>\n\t\t\t<li><a href=\"demo_page1.html\" target=\"navTab\" rel=\"demo_page2\">表单查询页面</a></li>\n\t\t\t<li><a href=\"demo_page4.html\" target=\"navTab\" rel=\"demo_page4\">表单录入页面</a></li>\n\t\t\t<li><a href=\"demo_page5.html\" target=\"navTab\" rel=\"demo_page5\">有文本输入的表单</a></li>\n\t\t</ul>\n\t</div>\n\t<div class=\"accordionHeader\">\n\t\t<h2><span>Folder</span>流程演示</h2>\n\t</div>\n\t<div class=\"accordionContent\">\n\t\t<ul class=\"tree\">\n\t\t\t<li><a href=\"newPage1.html\" target=\"dialog\" rel=\"dlg_page\">列表</a></li>\n\t\t</ul>\n\t</div>\n</div>\n\n"
  },
  {
    "path": "sidebar_2.html",
    "content": "<div class=\"accordion\" fillSpace=\"sideBar\">\n\t<div class=\"accordionHeader\">\n\t\t<h2><span>Folder</span>典型页面</h2>\n\t</div>\n\t<div class=\"accordionContent\">\n\t\t<ul class=\"tree treeFolder treeCheck\">\n\t\t\t<li><a href=\"demo_upload.html\" target=\"navTab\" rel=\"demo_upload\">文件上传表单提交示例</a></li>\n\t\t\t<li><a href=\"demo_page1.html\" target=\"navTab\" rel=\"demo_page1\">查询我的客户</a></li>\n\t\t\t<li><a href=\"demo_page1.html\" target=\"navTab\" rel=\"demo_page2\">表单查询页面</a></li>\n\t\t\t<li><a href=\"demo_page4.html\" target=\"navTab\" rel=\"demo_page4\">表单录入页面</a></li>\n\t\t\t<li><a href=\"demo_page5.html\" target=\"navTab\" rel=\"demo_page5\">有文本输入的表单</a></li>\n\t\t</ul>\n\t</div>\n\t<div class=\"accordionHeader\">\n\t\t<h2><span>Folder</span>流程演示</h2>\n\t</div>\n\t<div class=\"accordionContent\">\n\t\t<ul class=\"tree\">\n\t\t\t<li><a href=\"newPage1.html\" target=\"dialog\" rel=\"dlg_page\">列表</a></li>\n\t\t</ul>\n\t</div>\n</div>\n"
  },
  {
    "path": "tabsPage.html",
    "content": "<h2 class=\"contentTitle\">主框架面板</h2>\n<div style=\"padding:0 10px; line-height:21px;\">\n\t<b>打开方式：</b><br />\n\t1. 新建Tab窗口：target=\"navTab\" <br />\n\t2. 选择Tab窗口：每个Tab都有一个唯一的Id，通过打开方式中的 rel=\"\" 对Tab定义<br />\n\t3. 自己定义Tab标签的名称：title=\"\"<br />\n\t<a class=\"button\" href=\"newPage1.html\" target=\"navTab\" rel=\"newPage\"><span>新建一个Tab窗口</span></a>\n</div>\n"
  },
  {
    "path": "test_print.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n<title>简单实用国产jQuery UI框架 - DWZ富客户端框架(J-UI.com)</title>\n\n<link href=\"themes/css/print.css\" rel=\"stylesheet\" type=\"text/css\" />\n\n</head>\n\n<body>\n<div id=\"printBox\" style=\"font-size: 0.5em;\">\n\t<table class=\"list\">\n\t\t<thead>\n\t\t<tr>\n\t\t\t<th width=\"22\"><input type=\"checkbox\" group=\"ids\" class=\"checkboxCtrl\"></th>\n\t\t\t<th>客户号</th>\n\t\t\t<th>客户名称</th>\n\t\t\t<th>客户类型</th>\n\t\t\t<th>证件号码</th>\n\t\t\t<th align=\"center\">信用等级</th>\n\t\t\t<th>所属行业</th>\n\t\t\t<th>建档日期</th>\n\t\t\t<th>操作</th>\n\t\t</tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t<tr target=\"sid_user\" rel=\"1\">\n\t\t\t<td><input name=\"ids\" value=\"xxx\" type=\"checkbox\"></td>\n\t\t\t<td>A120113196309052434</td>\n\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t<td>联社营业部</td>\n\t\t\t<td>29385739203816293</td>\n\t\t\t<td>5级</td>\n\t\t\t<td>政府机构</td>\n\t\t\t<td>2009-05-21</td>\n\t\t\t<td>\n\t\t\t\t<a title=\"删除\" target=\"ajaxTodo\" href=\"demo/common/ajaxDone.json?id=xxx\" class=\"btnDel\">删除</a>\n\t\t\t\t<a title=\"编辑\" target=\"navTab\" href=\"demo_page4.html?id=xxx\" class=\"btnEdit\">编辑</a>\n\t\t\t</td>\n\t\t</tr>\n\t\t<tr target=\"sid_user\" rel=\"2\">\n\t\t\t<td><input name=\"ids\" value=\"xxx\" type=\"checkbox\"></td>\n\t\t\t<td>A120113196309052434</td>\n\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t<td>联社营业部</td>\n\t\t\t<td>29385739203816293</td>\n\t\t\t<td>5级</td>\n\t\t\t<td>政府机构</td>\n\t\t\t<td>2009-05-21</td>\n\t\t\t<td>\n\t\t\t\t<a title=\"删除\" target=\"ajaxTodo\" href=\"demo/common/ajaxDone.json?id=xxx\" class=\"btnDel\">删除</a>\n\t\t\t\t<a title=\"编辑\" target=\"navTab\" href=\"demo_page4.html?id=xxx\" class=\"btnEdit\">编辑</a>\n\t\t\t</td>\n\t\t</tr>\n\t\t<tr target=\"sid_user\" rel=\"3\">\n\t\t\t<td><input name=\"ids\" value=\"xxx\" type=\"checkbox\"></td>\n\t\t\t<td>A120113196309052434</td>\n\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t<td>联社营业部</td>\n\t\t\t<td>29385739203816293</td>\n\t\t\t<td>5级</td>\n\t\t\t<td>政府机构</td>\n\t\t\t<td>2009-05-21</td>\n\t\t\t<td>\n\t\t\t\t<a title=\"删除\" target=\"ajaxTodo\" href=\"demo/common/ajaxDone.json?id=xxx\" class=\"btnDel\">删除</a>\n\t\t\t\t<a title=\"编辑\" target=\"navTab\" href=\"demo_page4.html?id=xxx\" class=\"btnEdit\">编辑</a>\n\t\t\t</td>\n\t\t</tr>\n\t\t<tr target=\"sid_user\" rel=\"4\">\n\t\t\t<td><input name=\"ids\" value=\"xxx\" type=\"checkbox\"></td>\n\t\t\t<td>A120113196309052434</td>\n\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t<td>联社营业部</td>\n\t\t\t<td>29385739203816293</td>\n\t\t\t<td>5级</td>\n\t\t\t<td>政府机构</td>\n\t\t\t<td>2009-05-21</td>\n\t\t\t<td>\n\t\t\t\t<a title=\"删除\" target=\"ajaxTodo\" href=\"demo/common/ajaxDone.html?id=xxx\" class=\"btnDel\">删除</a>\n\t\t\t\t<a title=\"编辑\" target=\"navTab\" href=\"demo_page4.html?id=xxx\" class=\"btnEdit\">编辑</a>\n\t\t\t</td>\n\t\t</tr>\n\t\t<tr target=\"sid_user\" rel=\"5\">\n\t\t\t<td><input name=\"ids\" value=\"xxx\" type=\"checkbox\"></td>\n\t\t\t<td>A120113196309052434</td>\n\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t<td>联社营业部</td>\n\t\t\t<td>29385739203816293</td>\n\t\t\t<td>5级</td>\n\t\t\t<td>政府机构</td>\n\t\t\t<td>2009-05-21</td>\n\t\t\t<td>\n\t\t\t\t<a title=\"删除\" target=\"ajaxTodo\" href=\"demo/common/ajaxDone.html?id=xxx\" class=\"btnDel\">删除</a>\n\t\t\t\t<a title=\"编辑\" target=\"navTab\" href=\"demo_page4.html?id=xxx\" class=\"btnEdit\">编辑</a>\n\t\t\t</td>\n\t\t</tr>\n\t\t<tr target=\"sid_user\" rel=\"6\">\n\t\t\t<td><input name=\"ids\" value=\"xxx\" type=\"checkbox\"></td>\n\t\t\t<td>A120113196309052434</td>\n\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t<td>联社营业部</td>\n\t\t\t<td>29385739203816293</td>\n\t\t\t<td>5级</td>\n\t\t\t<td>政府机构</td>\n\t\t\t<td>2009-05-21</td>\n\t\t\t<td>\n\t\t\t\t<a title=\"删除\" target=\"ajaxTodo\" href=\"demo/common/ajaxDone.html?id=xxx\" class=\"btnDel\">删除</a>\n\t\t\t\t<a title=\"编辑\" target=\"navTab\" href=\"demo_page4.html?id=xxx\" class=\"btnEdit\">编辑</a>\n\t\t\t</td>\n\t\t</tr>\n\t\t<tr target=\"sid_user\" rel=\"7\">\n\t\t\t<td><input name=\"ids\" value=\"xxx\" type=\"checkbox\"></td>\n\t\t\t<td>A120113196309052434</td>\n\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t<td>联社营业部</td>\n\t\t\t<td>29385739203816293</td>\n\t\t\t<td>5级</td>\n\t\t\t<td>政府机构</td>\n\t\t\t<td>2009-05-21</td>\n\t\t\t<td>\n\t\t\t\t<a title=\"删除\" target=\"ajaxTodo\" href=\"demo/common/ajaxDone.html?id=xxx\" class=\"btnDel\">删除</a>\n\t\t\t\t<a title=\"编辑\" target=\"navTab\" href=\"demo_page4.html?id=xxx\" class=\"btnEdit\">编辑</a>\n\t\t\t</td>\n\t\t</tr>\n\t\t<tr target=\"sid_user\" rel=\"8\">\n\t\t\t<td><input name=\"ids\" value=\"xxx\" type=\"checkbox\"></td>\n\t\t\t<td>A120113196309052434</td>\n\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t<td>联社营业部</td>\n\t\t\t<td>29385739203816293</td>\n\t\t\t<td>5级</td>\n\t\t\t<td>政府机构</td>\n\t\t\t<td>2009-05-21</td>\n\t\t\t<td>\n\t\t\t\t<a title=\"删除\" target=\"ajaxTodo\" href=\"demo/common/ajaxDone.html?id=xxx\" class=\"btnDel\">删除</a>\n\t\t\t\t<a title=\"编辑\" target=\"navTab\" href=\"demo_page4.html?id=xxx\" class=\"btnEdit\">编辑</a>\n\t\t\t</td>\n\t\t</tr>\n\t\t<tr target=\"sid_user\" rel=\"9\">\n\t\t\t<td><input name=\"ids\" value=\"xxx\" type=\"checkbox\"></td>\n\t\t\t<td>A120113196309052434</td>\n\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t<td>联社营业部</td>\n\t\t\t<td>29385739203816293</td>\n\t\t\t<td>5级</td>\n\t\t\t<td>政府机构</td>\n\t\t\t<td>2009-05-21</td>\n\t\t\t<td>\n\t\t\t\t<a title=\"删除\" target=\"ajaxTodo\" href=\"demo/common/ajaxDone.html?id=xxx\" class=\"btnDel\">删除</a>\n\t\t\t\t<a title=\"编辑\" target=\"navTab\" href=\"demo_page4.html?id=xxx\" class=\"btnEdit\">编辑</a>\n\t\t\t</td>\n\t\t</tr>\n\t\t<tr target=\"sid_user\" rel=\"10\">\n\t\t\t<td><input name=\"ids\" value=\"xxx\" type=\"checkbox\"></td>\n\t\t\t<td>A120113196309052434</td>\n\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t<td>联社营业部</td>\n\t\t\t<td>29385739203816293</td>\n\t\t\t<td>5级</td>\n\t\t\t<td>政府机构</td>\n\t\t\t<td>2009-05-21</td>\n\t\t\t<td>\n\t\t\t\t<a title=\"删除\" target=\"ajaxTodo\" href=\"demo/common/ajaxDone.html?id=xxx\" class=\"btnDel\">删除</a>\n\t\t\t\t<a title=\"编辑\" target=\"navTab\" href=\"demo_page4.html?id=xxx\" class=\"btnEdit\">编辑</a>\n\t\t\t</td>\n\t\t</tr>\n\t\t<tr target=\"sid_user\" rel=\"11\">\n\t\t\t<td><input name=\"ids\" value=\"xxx\" type=\"checkbox\"></td>\n\t\t\t<td>A120113196309052434</td>\n\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t<td>联社营业部</td>\n\t\t\t<td>29385739203816293</td>\n\t\t\t<td>5级</td>\n\t\t\t<td>政府机构</td>\n\t\t\t<td>2009-05-21</td>\n\t\t\t<td>\n\t\t\t\t<a title=\"删除\" target=\"ajaxTodo\" href=\"demo/common/ajaxDone.html?id=xxx\" class=\"btnDel\">删除</a>\n\t\t\t\t<a title=\"编辑\" target=\"navTab\" href=\"demo_page4.html?id=xxx\" class=\"btnEdit\">编辑</a>\n\t\t\t</td>\n\t\t</tr>\n\t\t<tr target=\"sid_user\" rel=\"12\">\n\t\t\t<td><input name=\"ids\" value=\"xxx\" type=\"checkbox\"></td>\n\t\t\t<td>A120113196309052434</td>\n\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t<td>联社营业部</td>\n\t\t\t<td>29385739203816293</td>\n\t\t\t<td>5级</td>\n\t\t\t<td>政府机构</td>\n\t\t\t<td>2009-05-21</td>\n\t\t\t<td>\n\t\t\t\t<a title=\"删除\" target=\"ajaxTodo\" href=\"demo/common/ajaxDone.html?id=xxx\" class=\"btnDel\">删除</a>\n\t\t\t\t<a title=\"编辑\" target=\"navTab\" href=\"demo_page4.html?id=xxx\" class=\"btnEdit\">编辑</a>\n\t\t\t</td>\n\t\t</tr>\n\t\t<tr target=\"sid_user\" rel=\"13\">\n\t\t\t<td><input name=\"ids\" value=\"xxx\" type=\"checkbox\"></td>\n\t\t\t<td>A120113196309052434</td>\n\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t<td>联社营业部</td>\n\t\t\t<td>29385739203816293</td>\n\t\t\t<td>5级</td>\n\t\t\t<td>政府机构</td>\n\t\t\t<td>2009-05-21</td>\n\t\t\t<td>\n\t\t\t\t<a title=\"删除\" target=\"ajaxTodo\" href=\"demo/common/ajaxDone.html?id=xxx\" class=\"btnDel\">删除</a>\n\t\t\t\t<a title=\"编辑\" target=\"navTab\" href=\"demo_page4.html?id=xxx\" class=\"btnEdit\">编辑</a>\n\t\t\t</td>\n\t\t</tr>\n\t\t<tr target=\"sid_user\" rel=\"14\">\n\t\t\t<td><input name=\"ids\" value=\"xxx\" type=\"checkbox\"></td>\n\t\t\t<td>A120113196309052434</td>\n\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t<td>联社营业部</td>\n\t\t\t<td>29385739203816293</td>\n\t\t\t<td>5级</td>\n\t\t\t<td>政府机构</td>\n\t\t\t<td>2009-05-21</td>\n\t\t\t<td>\n\t\t\t\t<a title=\"删除\" target=\"ajaxTodo\" href=\"demo/common/ajaxDone.html?id=xxx\" class=\"btnDel\">删除</a>\n\t\t\t\t<a title=\"编辑\" target=\"navTab\" href=\"demo_page4.html?id=xxx\" class=\"btnEdit\">编辑</a>\n\t\t\t</td>\n\t\t</tr>\n\t\t<tr target=\"sid_user\" rel=\"15\">\n\t\t\t<td><input name=\"ids\" value=\"xxx\" type=\"checkbox\"></td>\n\t\t\t<td>A120113196309052434</td>\n\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t<td>联社营业部</td>\n\t\t\t<td>29385739203816293</td>\n\t\t\t<td>5级</td>\n\t\t\t<td>政府机构</td>\n\t\t\t<td>2009-05-21</td>\n\t\t\t<td>\n\t\t\t\t<a title=\"删除\" target=\"ajaxTodo\" href=\"demo/common/ajaxDone.html?id=xxx\" class=\"btnDel\">删除</a>\n\t\t\t\t<a title=\"编辑\" target=\"navTab\" href=\"demo_page4.html?id=xxx\" class=\"btnEdit\">编辑</a>\n\t\t\t</td>\n\t\t</tr>\n\t\t<tr target=\"sid_user\" rel=\"16\">\n\t\t\t<td><input name=\"ids\" value=\"xxx\" type=\"checkbox\"></td>\n\t\t\t<td>A120113196309052434</td>\n\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t<td>联社营业部</td>\n\t\t\t<td>29385739203816293</td>\n\t\t\t<td>5级</td>\n\t\t\t<td>政府机构</td>\n\t\t\t<td>2009-05-21</td>\n\t\t\t<td>\n\t\t\t\t<a title=\"删除\" target=\"ajaxTodo\" href=\"demo/common/ajaxDone.html?id=xxx\" class=\"btnDel\">删除</a>\n\t\t\t\t<a title=\"编辑\" target=\"navTab\" href=\"demo_page4.html?id=xxx\" class=\"btnEdit\">编辑</a>\n\t\t\t</td>\n\t\t</tr>\n\t\t<tr target=\"sid_user\" rel=\"17\">\n\t\t\t<td><input name=\"ids\" value=\"xxx\" type=\"checkbox\"></td>\n\t\t\t<td>A120113196309052434</td>\n\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t<td>联社营业部</td>\n\t\t\t<td>29385739203816293</td>\n\t\t\t<td>5级</td>\n\t\t\t<td>政府机构</td>\n\t\t\t<td>2009-05-21</td>\n\t\t\t<td>\n\t\t\t\t<a title=\"删除\" target=\"ajaxTodo\" href=\"demo/common/ajaxDone.html?id=xxx\" class=\"btnDel\">删除</a>\n\t\t\t\t<a title=\"编辑\" target=\"navTab\" href=\"demo_page4.html?id=xxx\" class=\"btnEdit\">编辑</a>\n\t\t\t</td>\n\t\t</tr>\n\t\t<tr target=\"sid_user\" rel=\"18\">\n\t\t\t<td><input name=\"ids\" value=\"xxx\" type=\"checkbox\"></td>\n\t\t\t<td>A120113196309052434</td>\n\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t<td>联社营业部</td>\n\t\t\t<td>29385739203816293</td>\n\t\t\t<td>5级</td>\n\t\t\t<td>政府机构</td>\n\t\t\t<td>2009-05-21</td>\n\t\t\t<td>\n\t\t\t\t<a title=\"删除\" target=\"ajaxTodo\" href=\"demo/common/ajaxDone.html?id=xxx\" class=\"btnDel\">删除</a>\n\t\t\t\t<a title=\"编辑\" target=\"navTab\" href=\"demo_page4.html?id=xxx\" class=\"btnEdit\">编辑</a>\n\t\t\t</td>\n\t\t</tr>\n\t\t<tr target=\"sid_user\" rel=\"19\">\n\t\t\t<td><input name=\"ids\" value=\"xxx\" type=\"checkbox\"></td>\n\t\t\t<td>A120113196309052434</td>\n\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t<td>联社营业部</td>\n\t\t\t<td>29385739203816293</td>\n\t\t\t<td>5级</td>\n\t\t\t<td>政府机构</td>\n\t\t\t<td>2009-05-21</td>\n\t\t\t<td>\n\t\t\t\t<a title=\"删除\" target=\"ajaxTodo\" href=\"demo/common/ajaxDone.html?id=xxx\" class=\"btnDel\">删除</a>\n\t\t\t\t<a title=\"编辑\" target=\"navTab\" href=\"demo_page4.html?id=xxx\" class=\"btnEdit\">编辑</a>\n\t\t\t</td>\n\t\t</tr>\n\t\t<tr target=\"sid_user\" rel=\"20\">\n\t\t\t<td><input name=\"ids\" value=\"xxx\" type=\"checkbox\"></td>\n\t\t\t<td>A120113196309052434</td>\n\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t<td>联社营业部</td>\n\t\t\t<td>29385739203816293</td>\n\t\t\t<td>5级</td>\n\t\t\t<td>政府机构</td>\n\t\t\t<td>2009-05-21</td>\n\t\t\t<td>\n\t\t\t\t<a title=\"删除\" target=\"ajaxTodo\" href=\"demo/common/ajaxDone.html?id=xxx\" class=\"btnDel\">删除</a>\n\t\t\t\t<a title=\"编辑\" target=\"navTab\" href=\"demo_page4.html?id=xxx\" class=\"btnEdit\">编辑</a>\n\t\t\t</td>\n\t\t</tr>\n\t\t</tbody>\n\t</table>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "themes/azure/style.css",
    "content": "@charset \"utf-8\";\n\n/* Icon */\n.tabsHeader li.main a span span, #taskbar li .taskbutton span { background:url(./images/icon.png) no-repeat;}\n\n/* Panel */\n.panel,\n.panel .panelHeader, .panel .panelHeaderContent, .panel .panelHeaderContent h1,\n.panel .panelFooter, .panel .panelFooterContent { background:url(./images/panel/panel.png) no-repeat;}\n.panel .expandable, .panel .collapsable { background:url(./images/panel/panel_icon.png) no-repeat;}\n.panel .panelHeaderContent h1 { color:#15428B; }\n.panel .panelContent { border-color:#99bbe8; background:#e4ebf6;}\n\n.panel .grid { border-color:#99bbe8;}\n\n/* Tabs */\n.tabs, .tabsHeader, .tabsHeaderContent,\n.tabs .tabsHeader ul, .tabs .tabsHeader li, .tabs .tabsHeader li a, .tabs .tabsHeader li span,\n.tabs .tabsFooter, .tabs .tabsFooterContent { background:url(./images/tabs/tabspanel.png) no-repeat;}\n\n.tabs .tabsHeader li a { color:#03408b;}\n.tabs .tabsHeader li span { color:#15428B;}\n.tabs .tabsContent { border-color:#99bbe8; background:#e4ebf6;}\n.tabs .icon-collapse { background: url(./images/panel/panel_icon.png) no-repeat; }\n\n/* TabsPage */\n.tabsPage .tabsPageHeader, .tabsPage .tabsPageHeader li, .tabsPage .tabsPageHeader li a, .tabsPage .tabsPageHeader li span { background:url(./images/tabs/tabspage.png) no-repeat;}\n.tabsPage .tabsPageHeader { background-color:#e9f0f2;}\n.tabsPage .tabsPageHeader { border-color:#99bbe8;}\n.tabsPage .tabsPageHeader li a { color:#15428B;}\n.tabsPage .tabsPageHeader li .close,\n.tabsPage .tabsPageHeader li.hover .close,\n.tabsPage .tabsPageHeader li.selected .close { background:url(./images/tabs/tabspage_icon.png) no-repeat;}\n.tabsPage .tabsLeft, .tabsPage .tabsRight, .tabsPage .tabsMore { background:url(./images/tabs/tabscontrol.png) no-repeat;}\n.tabsPage .tabsMoreList { border-color:#88a0be; background:#FFF;}\n.tabsPage .tabsPageHeader .home_icon { background:url(./images/icon.png) no-repeat;}\n.tabsPage .tabsPageContent { border-color:#88a0be; background:#FFF;}\n\n/* Alert */\n.alert .alertFooter, .alert .alertFooter_r, .alert .alertFooter_c { background:url(./images/alert/alertpanel.png) no-repeat;}\n.alert .alertContent { border-color:#88a0be; background:#ced9e7;}\n.alert .warn .alertInner { border-color:#e83e09; background:#fefacf;}\n.alert .error .alertInner { border-color:#e50000; background:#fefacf;}\n.alert .correct .alertInner, .alert .info .alertInner { border-color:#99bbe8; background:#fefacf;}\n.alert .confirm .alertInner { border-color:#99bbe8; background:#fefacf;}\n.alert h1 { border-color:#CCC; background:url(./images/alert/alertpanel_icon.png) no-repeat;}\n\n/* Dialog */\n.dialog .dialogHeader, .dialog .dialogHeader_r, .dialog .dialogHeader_c,\n.dialog .dialogFooter, .dialog .dialogFooter_r, .dialog .dialogFooter_c { background:url(./images/dialog/dialogpanel.png) no-repeat;}\n.dialog .dialogHeader h1, .dialog .dialogHeader .close, .dialog .dialogHeader .maximize, .dialog .dialogHeader .restore, .dialog .dialogHeader .minimize, .resizable_f_r { background:url(./images/dialog/dialogpanel_icon.png) no-repeat;}\n.dialog .dialogHeader h1 { color:#15428B;}\n.dialog .dialogContent { border-color:#99bbe8; background:#e4ebf6;}\n\n.resizable { border-color:#081629; background:#c3d7dc;}\n\n/* Shadow */\n.shadow .shadow_h_l { background:url(./images/shadow/shadow_h_l.png) no-repeat;}\n.shadow .shadow_h_r { background:url(./images/shadow/shadow_h_r.png) no-repeat;}\n.shadow .shadow_h_c { background:url(./images/shadow/shadow_h_c.png) repeat-x;}\n.shadow .shadow_c_l { background:url(./images/shadow/shadow_c_l.png) repeat-y;}\n.shadow .shadow_c_r { background:url(./images/shadow/shadow_c_r.png) repeat-y;}\n.shadow .shadow_c_c { background:url(./images/shadow/shadow_c_c.png) repeat;}\n.shadow .shadow_f_l { background:url(./images/shadow/shadow_f_l.png) no-repeat;}\n.shadow .shadow_f_r { background:url(./images/shadow/shadow_f_r.png) no-repeat;}\n.shadow .shadow_f_c { background:url(./images/shadow/shadow_f_c.png) repeat-x;}\n\n/* Tree */\n.tree div div { background:url(./images/tree/tree.png) no-repeat;}\n.tree .folder_collapsable, .tree .folder_expandable, .tree .file { background:url(./images/tree/folder.png) no-repeat;}\n.tree .checked, .tree .unchecked, .tree .indeterminate { background:url(./images/tree/check.png) no-repeat;}\n.tree ul { background:#FFF;}\n.tree li a, .tree li span { color:#15428B;}\n.tree .hover { background:#f5f5f5;}\n.tree .selected { background-color:#e8edf3;}\n\n/* Accordion */\n.accordion .accordionHeader, .accordion .accordionHeader h2, .accordion .accordionHeader h2 span { color:#15428B; background:url(./images/accordion/accordion.png);}\n.accordion { border-color:#99bbe8; background:#FFF;}\n.accordion .accordionHeader { background-color:#eaf4ff;}\n.accordion .accordionContent { border-color:#99bbe8;}\n\n/* Grid */\n.panelBar, .toolBar li.hover .buttonDisabled, .toolBar li.hover .buttonDisabled span, .toolBar .buttonDisabled, .toolBar .buttonDisabled span,\n.toolBar li.hover, .toolBar li.hover a, .toolBar li.hover span, .toolBar span,\n.pagination, .pagination li.hover, .pagination li.hover a, .pagination li span,\n.pagination li.disabled span span,\n.panelBar .line, .pagination li.jumpto, .pagination li.jumpto .goto { background:url(./images/grid/grid.png) no-repeat;}\n\n.panelBar { border-color:#99bbe8; background-color:#efefef;}\n\n.grid .gridHeader { background:#EEE;}\n.grid { background:#FFF;}\n.grid table { border-color:#d0d0d0;}\n.grid .gridHeader, .grid .gridHeader th { border-color:#d0d0d0; background:#f0eff0 url(./images/grid/tableth.png) repeat-x;}\n.grid table th div { border-left-color:#EEE; border-right-color:#d0d0d0;}\n.grid table td { border-color:#ededed;}\n\n.grid .resizeMarker, .grid .resizeProxy { background:url(./images/grid/resizeCol.png) repeat-y;}\n\n.grid .gridHeader th.hover, .grid .gridHeader th.thSelected { border-color:#aaccf6; }\n.grid .gridTbody .gridRowBg { background:#f7f7f7;}\n.grid .gridTbody .gridRow { border-color:#ededed;}\n.grid .gridTbody .gridRow td.tdLast { border-color:#ededed;}\n.grid .gridTbody .hover { border-color:#dddddd; background:#f5f5f5;}\n.grid .gridTbody .hover .tdSelected { background:#f5f5f5;}\n.grid .gridTbody .selected { border-color:#99bbe8; background:#dfe8f6;}\n.grid .gridTbody .selected .tdSelected { background:#e8edf3;}\n.grid .gridTbody .tdSelected { background:#f8f8f8;}\n.grid .error{background:#fb7e81;}\n\n/* ProgressBar */\n.progressBar { border:solid 2px #86a5ad; background:#FFF url(./images/progressBar/progressBar_m.gif) no-repeat 10px 10px;}\n\n/* ----------------------------------------------------------------- Form */\n/* TextInput */\n.textInput, input.focus, input.required, input.error, input.readonly, input.disabled,\ntextarea.focus, textarea.required, textarea.error, textarea.readonly, textarea.disabled { background:url(./images/form/input_bg.png) no-repeat scroll;}\n\n.textInput, .textArea { border-color:#a2bac0 #99bbe8 #99bbe8 #a2bac0; background-color:#FFF;}\ninput.required, textarea.required { border-color:#a2bac0 #99bbe8 #99bbe8 #a2bac0; background-color:#FFF;}\ninput.error, textarea.error { border-color:#F80C11 #FB7E81 #FB7E81 #F80C11;}\ninput.focus, textarea.focus { border-color:#8db2e3 #99bbe8 #99bbe8 #8db2e3; background-color:#f8fafc;}\ninput.readonly, textarea.readonly { border-color:#9eabb3 #d5dbdf #d5dbdf #9eabb3; background-color:#F6F6F6;}\ninput.disabled, textarea.disabled { border-color:#9eabb3 #d5dbdf #d5dbdf #9eabb3; background-color:#F6F6F6;}\n\n.inputButton, .inputDateButton { background:url(./images/form/input_bt.png) no-repeat;}\n\n/* Button */\n.button, .button span,\n.buttonDisabled, .buttonDisabled span,\n.buttonActive, .buttonActive span,\n.button .buttonContent, .buttonHover, .buttonHover .buttonContent,\n.buttonActive .buttonContent, .buttonActiveHover, .buttonActiveHover .buttonContent,\n.buttonDisabled .buttonContent { background:url(./images/button/button_s.png) no-repeat;}\n\n.button span, .buttonDisabled span, .buttonActive span,\n.button .buttonContent, .buttonHover, .buttonHover .buttonContent,\n.buttonActive .buttonContent, .buttonDisabled .buttonContent,\n.button button, .buttonHover button,\n.buttonActive button, .buttonDisabled button { color:#15428B;}\n\n.buttonDisabled span, .buttonDisabled:hover span,\n.buttonDisabled button { color:#999;}\n\n/* ----------------------------------------------------------------- Pages */\n/* Layout */\nbody, #splitBar { background:#dfe8f6;}\n#splitBarProxy { border-color:#c0c0c0; background:#CCC;}\n\n#header, #header .headerNav { background:url(./images/header_bg.png) repeat-x;}\n#header { background-color:#102c4a;}\n#header .logo { background:url(../default/images/logo.png) no-repeat;}\n#header .nav li { float:left; margin-left:-1px; padding:0 8px; line-height:11px; background:url(./images/listLine.png) no-repeat;}\n#header .nav li a { color:#15428b;}\n#header .themeList li div { background:url(../default/images/themeButton.png) no-repeat;}\n.toggleCollapse, .toggleCollapse div { background:url(./images/layout/toggleSidebar.png) no-repeat;}\n.toggleCollapse { border-style:solid; border-width:1px 1px 0 1px; border-color:#99BBE8; background-color:#dfe8f6;}\n.toggleCollapse h2 { color:#15428B;}\n#sidebar_s .collapse { border:solid 1px #99bbe8; background:#eff5f6;}\n#sidebar_s .collapse:hover { background:#f5f9fa;}\n\n#taskbar, #taskbar li, #taskbar li .taskbutton { background:url(./images/layout/taskbar.png) no-repeat;}\n#taskbar .close, #taskbar .restore, #taskbar .minimize { background:url(./images/layout/taskbar_icon.png) no-repeat;}\n#taskbar li .taskbutton span { color:#FFF;}\n#taskbar .taskbarLeft, #taskbar .taskbarRight { background:url(./images/layout/taskbar_control.png) no-repeat;}\n\n/* Menu */\n#navMenu, #navMenu li, #navMenu li.selected a, #navMenu li.selected span { background:url(../default/images/menu/menu.png) no-repeat;}\n#navMenu { background-color:#1871dd; }\n#navMenu li a, #navMenu li span { color:#FFF; }\n#navMenu li.selected span { color:#000; }\n\n/* Homepage */\n.sidebarContent { display:block; overflow:auto; height:500px; border:solid 1px #86B4EC; background:#FFF;}\n.accountInfo { display:block; overflow:hidden; height:60px; padding:0 10px; background:url(./images/account_info_bg.png) repeat-x}\n.accountInfo p { padding:8px 0 0 0; line-height:19px;}\n.accountInfo p span { font-size:14px; font-weight:bold;}\n.accountInfo .right { float:right; padding-right:10px; text-align:right;}\n.accountInfo .alertInfo { float:right; width:300px; height:60px; padding-left:10px; border-left:solid 1px #accdf4;}\n.accountInfo .alertInfo h2 { padding:8px 0; line-height:17px;}\n.accountInfo .alertInfo a { padding:6px 0 0 0; line-height:21px;}\n\n/* Pages */\n.pageForm .inputInfo { color:#999;}\n\n/* Pages dialog */\n.dialog .pageHeader, .dialog .pageContent { border-color:#99bbe8;}\n.dialog .pageContent .pageFormContent { border-color:#99bbe8; background:#FFF;}\n\n/* Pages default */\n.page .pageHeader, .formBar { border-color:#99bbe8; background:#ebf0f5 url(../default/images/pageHeader_bg.png) repeat-x;}\n.page .searchBar label { color:#15428B;}\n\n/* Pages Form */\n.formBar { border-color:#99bbe8;}\n.divider { border-color:#99bbe8;}\n\n/* combox */\n.combox .select a  { color:#15428B; }\n.comboxop { border-color:#99bbe8; }\n.combox, .combox div, .combox div a { background:url(../default/images/search-bg.gif) no-repeat; }\n"
  },
  {
    "path": "themes/css/core.css",
    "content": "@charset \"utf-8\";\n\n/* Core Code */\nhtml, body, div, span, applet, object, iframe,\nh1, h2, h3, h4, h5, h6, p, blockquote, pre,\na, abbr, acronym, address, big, cite, code,\ndel, dfn, em, font, img, ins, kbd, q, s, samp,\nsmall, strike, strong, sub, sup, tt, var,\ndl, dt, dd, ol, ul, li,\nfieldset, form, label, legend,\ntable, caption, tbody, tfoot, thead, tr, th, td { padding:0; margin:0; font-size:12px; line-height:100%; font-family:Arial, sans-serif;}\n\n/* Remember to define focus styles! */\n:focus { outline: 0;}\nhtml,body { overflow:hidden; width:100%; height:100%; text-align:center; color:black; }\nul, ol { list-style:none;}\n\n/* Tables still need 'cellspacing=\"0\"' in the markup. */\ntable { border-collapse:separate; border-spacing:0;}\ncaption, th, td { font-weight:normal;}\n\n/* Remove possible quote marks (\") from <q>, <blockquote>. */\nblockquote:before, blockquote:after,\nq:before, q:after { content: \"\";}\nblockquote, q { quotes: \"\" \"\";}\n\nimg { border:none;}\na { color:#000; text-decoration:none;}\na:hover {text-decoration:underline;}\n\n/* Panel */\n.panel { display:block; background-position:0 100%; background-repeat:repeat-x;}\n.panel .panelHeader { display:block; height:28px; padding-left:5px; background-position:0 0;}\n.panel .panelHeaderContent { display:block; height:28px; padding-right:5px; background-position:100% -50px; position:relative;}\n.panel .panelHeaderContent h1 { display:block; overflow:hidden; height:28px; padding:0 5px;line-height:28px; background-position:0 -100px; background-repeat:repeat-x;}\n.panel .panelContent { display:block; overflow:auto; padding:5px 5px 1px 5px; border-style:solid; border-width:0 1px;}\n.panel .panelFooter { display:block; overflow:hidden; height:5px; padding-left:5px; background-position:0 -150px;}\n.panel .panelFooterContent { display:block; overflow:hidden; height:5px; padding-right:5px; background-position:100% -200px;}\n\n.panel .collapsable, .panel .expandable { display:block; overflow:hidden; width:20px; height:21px; text-indent:-1000px; position:absolute; top:4px; right:4px;}\n.panel .collapsable:hover { background-position:0 -50px;}\n.panel .expandable { background-position:0 -100px;}\n.panel .expandable:hover { background-position:0 -150px;}\n\n/* Tabs */\n.tabs { background-position:0 100%; background-repeat:repeat-x;}\n.tabs .tabsHeader { display:block; overflow:hidden; height:28px; padding-left:5px; background-position:0 0;}\n.tabs .tabsHeaderContent { display:block; overflow:hidden; height:28px; padding-right:5px; background-position:100% -50px;}\n.tabs .tabsHeader ul { display:block; height:28px; background-position:0 -100px; background-repeat:repeat-x;}\n.tabs .tabsHeader li { float:left; display:block; height:28px; margin-right:2px; background-position:0 -250px; background-repeat:repeat-x; cursor:pointer;}\n.tabs .tabsHeader li a { float:left; display:block; height:28px; padding-left:5px; background-position:0 -150px;}\n.tabs .tabsHeader li a:hover { text-decoration:none;}\n.tabs .tabsHeader li span { float:left; display:block; overflow:hidden; height:28px; padding:2px 10px 0 5px; line-height:25px; background-position:100% -200px; cursor:pointer;}\n.tabs .tabsHeader li.hover { background-position:0 -400px; background-repeat:repeat-x;}\n.tabs .tabsHeader li.hover a { background-position:0 -300px;}\n.tabs .tabsHeader li.hover span { background-position:100% -350px;}\n.tabs .tabsHeader li.selected { background-position:0 -550px;}\n.tabs .tabsHeader li.selected a { background-position:0 -450px;}\n.tabs .tabsHeader li.selected span { font-weight:bold; background-position:100% -500px;}\n.tabs .tabsContent { display:block; overflow:auto; padding:5px 5px 1px 5px; border-style:solid; border-width:0 1px;}\n.tabs .tabsFooter { display:block; overflow:hidden; height:5px; background-position:0 -600px;}\n.tabs .tabsFooterContent { display:block; overflow:hidden; height:5px; background-position:100% -650px;}\n.tabs .icon-collapse {display: block; overflow: hidden; width: 20px; height: 21px; text-indent: -1000px; position: absolute; top: 4px; right: 4px;}\n.tabs .icon-collapse:hover { background-position:0 -50px;}\n.tabs.close .icon-collapse { background-position:0 -100px;}\n.tabs.close .icon-collapse:hover { background-position:0 -150px;}\n.tabs.close .tabsContent {display: none;}\n\n.tabsPage .tabsPageHeader { display:block; height:27px; border-style:solid; border-width:1px 1px 0 1px; background-position:0 -450px; background-repeat:repeat-x; position:relative;}\n.tabsPage .tabsPageHeaderContent { display:block; overflow:hidden; height:27px; margin-right:19px; position:relative;}\n.tabsPage .tabsPageHeaderMargin { margin:0 34px 0 17px;}\n.tabsPage .tabsPageHeader ul { display:block; width:10000px; height:26px; z-index:1; position:absolute;}\n.tabsPage .tabsPageHeader li { float:left; display:block; height:26px; margin-left:2px; background-position:0 -100px; background-repeat:repeat-x; position:relative; cursor:pointer;}\n.tabsPage .tabsPageHeader li a { float:left; display:block; overflow:hidden; height:26px; padding-left:5px; line-height:25px; background-position:0 0; }\n.tabsPage .tabsPageHeader li a:hover { text-decoration:none;}\n.tabsPage .tabsPageHeader li span { float:left; display:block; overflow:hidden; width:92px; height:24px; padding:2px 20px 0 3px; line-height:21px; background-position:100% -50px; cursor:pointer;}\n\n.tabsPage .tabsPageHeader li.hover { background-position:0 -250px; background-repeat:repeat-x;}\n.tabsPage .tabsPageHeader li.hover a { background-position:0 -150px;}\n.tabsPage .tabsPageHeader li.hover span { background-position:100% -200px;}\n\n.tabsPage .tabsPageHeader li.selected { background-position:0 -400px; background-repeat:repeat-x;}\n.tabsPage .tabsPageHeader li.selected a { font-weight:bold; background-position:0 -300px;}\n.tabsPage .tabsPageHeader li.selected span { background-position:100% -350px;}\n\n.tabsPage .tabsPageHeader li .close { display:block; overflow:hidden; width:11px; height:11px; padding:0; text-indent:-1000px; position:absolute; top:3px; right:2px;}\n.tabsPage .tabsPageHeader li .close:hover { background-position:0 -50px;}\n\n.tabsPage .tabsPageHeader li.main span { padding:2px 8px 0 3px;}\n.tabsPage .tabsPageHeader li .home_icon,\n.tabsPage .tabsPageHeader li.main .home_icon { width:auto; padding:0 0 0 15px; background-position:0 3px;}\n\n.tabsPage .tabsMove { height:25px; position:absolute; top:0; right:0; z-index:2;}\n.tabsPage .tabsLeft, .tabsPage .tabsRight, .tabsPage .tabsMore { display:block; overflow:hidden; width:17px; height:23px; text-indent:-1000px; position:absolute; z-index:2;}\n.tabsPage .tabsLeft { background-position:0 0; top:1px; left:0; cursor:pointer;}\n.tabsPage .tabsLeftHover { background-position:0 -50px;}\n.tabsPage .tabsLeftDisabled { background-position:0 -100px; top:1px; left:0; cursor:default;}\n.tabsPage .tabsRight { background-position:0 -150px; top:1px; right:17px; cursor:pointer;}\n.tabsPage .tabsRightHover { background-position:0 -200px;}\n.tabsPage .tabsRightDisabled { background-position:0 -250px; top:1px; right:17px; cursor:default;}\n.tabsPage .tabsMore { background-position:0 -300px; top:1px; right:0; cursor:pointer;}\n.tabsPage .tabsMoreHover { background-position:0 -350px;}\n.tabsPage .tabsMoreList { display:none; overflow-x:hidden; overflow-y:auto; width:170px; max-height:380px; padding:2px; border-style:solid; border-width:1px; position:absolute; top:24px; right:0; z-index:3;}\n.tabsPage .tabsMoreList li { display:block; overflow:hidden; height:23px; line-height:21px;}\n.tabsPage .tabsMoreList li a { display:block; width:148px; height:21px; padding:0 10px; border:solid 1px #FFF; white-space:nowrap; line-height:21px;}\n.tabsPage .tabsMoreList li a:hover { border-color:#ececec; text-decoration:none; background:#f5f5f5;}\n.tabsPage .tabsMoreList li.selected a { font-weight:bold; border-color:#dfe5ed; background:#e8edf3;}\n.tabsPage .tabsPageContent { display:block; overflow:hidden; border-style:solid; border-width:0 1px 1px 1px; position:relative;}\n\n/* Alert */\n/*.alert { overflow:hidden; position:absolute; z-index:101; width:300px; top:0}*/\n.alert { overflow:hidden; z-index:1011; display:block; width:300px; margin-left:-150px; position:absolute; top:0; left:50%;}\n.alert .alertContent { display:block; overflow:hidden; padding:5px 5px 1px 5px; border-style:solid; border-width:0 1px;}\n.alert .alertInner { display:block; padding:0 9px 9px 9px; text-align:left; border-style:solid; border-width:1px;}\n.alert .alertInner .msg { margin:10px; max-height: 200px; overflow: auto; line-height: 1.3em}\n.alert h1 { display:block; overflow:hidden; height:30px; margin-bottom:10px; padding:0 0 0 25px; line-height:30px; border-style:solid; border-width:0 0 1px 0; line-height:30px;}\n.alert .error h1 { background-position:2px -42px;}\n.alert .info h1,\n.alert .warn h1 { background-position:2px 8px;}\n.alert .correct h1 { background-position:2px -92px;}\n.alert .confirm h1 { background-position:2px 8px;}\n.alert p { margin:10px;}\n\n.alert .toolBar { display:block; overflow:hidden; height:25px; padding-top:5px; text-align:right;}\n.alert .toolBar ul { float:right;}\n.alert .toolBar li { float:left;}\n.alert .toolBar .button, .alert .toolBar .buttonActive { margin-left:5px;}\n\n.alert .alertFooter_c { display:block; overflow:hidden; height:5px;}\n.alert .alertFooter { padding-left:5px; background-position:0 0;}\n.alert .alertFooter_r { padding-right:5px; background-position:100% -50px;}\n.alert .alertFooter_c { padding:0; background-position:0 -100px; background-repeat:repeat-x;}\n\n/* Dialog */\n.dialog { display:block; text-align:left; position:absolute; z-index:42;}\n.dialog .dialogHeader, .dialog .dialogHeader_r, .dialog .dialogHeader_c { display:block; overflow:hidden; height:28px;}\n.dialog .dialogHeader .close, .dialog .dialogHeader .maximize, .dialog .dialogHeader .restore, .dialog .dialogHeader .minimize { display:block; overflow:hidden; text-indent:-1000px; width:19px; height:19px; position:absolute; top:5px;}\n.dialog .dialogHeader h1 { display:block; overflow:hidden; height:28px; padding:0 5px 0 20px; line-height:28px; background-position:0 -450px;}\n\n.dialog .dialogHeader { padding-left:5px; background-position:0 0; position:relative; cursor:move;}\n.dialog .dialogHeader_r { padding-right:5px; background-position:100% -50px;}\n.dialog .dialogHeader_c { padding:0; background-position:0 -100px; background-repeat:repeat-x;}\n\n.dialog .dialogHeader .close { background-position:0 0; right:4px;}\n.dialog .dialogHeader .close:hover { background-position:0 -50px;}\n.dialog .dialogHeader .maximize { background-position:0 -100px; right:23px;}\n.dialog .dialogHeader .maximize:hover { background-position:0 -150px;}\n.dialog .dialogHeader .restore { display:none; background-position:0 -200px; right:23px;}\n.dialog .dialogHeader .restore:hover { background-position:0 -250px;}\n.dialog .dialogHeader .minimize { background-position:0 -300px; right:42px;}\n.dialog .dialogHeader .minimize:hover { background-position:0 -350px;}\n.dialog .dialogContent { display:block; overflow:hidden; padding:5px 5px 1px 5px; border-style:solid; border-width:0 1px;}\n.dialog .panelFooter_r, .dialog .dialogFooter_c { display:block; overflow:hidden; height:5px;}\n.dialog .dialogFooter { padding-left:5px; background-position:0 -150px;}\n.dialog .dialogFooter_r { padding-right:5px; background-position:100% -200px;}\n.dialog .dialogFooter_c { padding:0; background-position:0 -250px; background-repeat:repeat-x;}\n\n.dialogProxy { opacity:0.8; filter:alpha(opacity=80);}\n\n.dialog .resizable_f_r { width:11px; height:11px; background-position:0 -400px;}\n\n/* Dialog Resizable */\n.resizable { display:none; overflow:hidden; border-style:dashed; border-width:1px; opacity:0.5; filter:alpha(opacity=50); position:absolute; top:0; left:0; z-index:100;}\n.resizable_h_l, .resizable_h_r, .resizable_h_c,\n.resizable_c_l, .resizable_c_r,\n.resizable_f_l, .resizable_f_r, .resizable_f_c { display:block; overflow:hidden; width:6px; height:6px; position:absolute;}\n.resizable_h_l { cursor:nw-resize; top:0; left:0; z-index:2;}\n.resizable_h_r { cursor:ne-resize; top:0; right:0; z-index:2;}\n.resizable_h_c { width:100%; cursor:n-resize; top:0; left:0; z-index:1;}\n.resizable_c_l { cursor:w-resize; top:0; left:0; z-index:1;}\n.resizable_c_r { cursor:e-resize; top:0; right:0; z-index:1;}\n.resizable_f_l { cursor:sw-resize; bottom:0; left:0; z-index:2;}\n.resizable_f_r { cursor:se-resize; bottom:0; right:0; z-index:2;}\n.resizable_f_c { width:100%; cursor:s-resize; bottom:0; left:0; z-index:1;}\n\n/* Shadow */\n.shadow { display:none; overflow:hidden; position:absolute; z-index:41;}\n.shadow .shadow_h, .shadow .shadow_h_l, .shadow .shadow_h_r, .shadow .shadow_h_c,\n.shadow .shadow_f, .shadow .shadow_f_l, .shadow .shadow_f_r, .shadow .shadow_f_c { display:block; overflow:hidden; height:6px;}\n\n.shadow .shadow_h, .shadow .shadow_c, .shadow .shadow_f { position:relative;}\n.shadow .shadow_h_l, .shadow .shadow_c_l, .shadow .shadow_f_l { width:6px; position:absolute; top:0; left:0;}\n.shadow .shadow_h_r, .shadow .shadow_c_r, .shadow .shadow_f_r { width:6px; position:absolute; top:0; right:0;}\n.shadow .shadow_h_c, .shadow .shadow_c_c, .shadow .shadow_f_c { margin:0 6px;}\n\n.shadow .shadow_c, .shadow .shadow_c_l, .shadow .shadow_c_r, .shadow .shadow_c_c { display:block; overflow:hidden; height:100%;}\n\n/* Tree */\n.tree li { clear:both; display:block; line-height:22px; cursor:pointer;}\n.tree div, .tree a, .tree span { display:inherit; height:22px; line-height:22px;}\n.tree div { display:block; overflow:hidden;}\n.tree div div { float:left; display:block; overflow:hidden; width:22px; height:22px; border:none; background-position:0 -100px;}\n.tree a, .tree a:hover { text-decoration:none;}\n\n.tree .collapsable { background-position:0 -300px;}\n.tree .first_collapsable { background-position:0 -250px;}\n.tree .last_collapsable { background-position:0 -350px;}\n\n.tree .expandable { background-position:0 -100px;}\n\n.tree .first_expandable { background-position:0 -50px;}\n.tree .last_expandable { background-position:0 -150px;}\n.tree .end_expandable { background-position:0 0;}\n.tree .end_collapsable { background-position:0 -200px;}\n\n.tree .indent { background:none;}\n.tree .line { background-position:0 -400px;}\n.tree .node { background-position:0 -450px;}\n.tree .last .node { background-position:0 -500px;}\n\n.tree .folder_expandable { background-position:0 0;}\n.tree .folder_collapsable { background-position:0 -50px;}\n.tree .file { background-position:0 -100px;}\n\n.tree .unchecked { background-position:0 0;}\n.tree .hover .unchecked { background-position:0 -50px;}\n.tree .checked { background-position:0 -100px;}\n.tree .hover .checked { background-position:0 -150px;}\n.tree .indeterminate { background-position:0 -200px;}\n.tree .hover .indeterminate { background-position:0 -250px;}\n\n/* Accordion */\n.accordion { display:block; border-style:solid; border-width:1px 1px 0 1px;}\n.accordion .accordionHeader { display:block; overflow:hidden; background-repeat:repeat-x; cursor:pointer;}\n.accordion .accordionHeader h2 { display:block; overflow:hidden; padding:0 25px 0 5px; height:25px; line-height:24px;}\n.accordion .accordionHeader h2 span { float:left; display:block; overflow:hidden; text-indent:-1000px; width:20px; height:25px;}\n.accordion .accordionContent { display:block; overflow:auto; border-style:solid; border-width:0 0 1px 0;}\n\n.accordion .accordionHeader.hover { background-position:0 -25px;}\n.accordion .accordionHeader h2 { background-repeat:no-repeat; background-position:100% -50px;}\n.accordion .accordionHeader.hover h2 { background-position:100% -75px;}\n.accordion .accordionHeader .collapsable { background-position:100% -100px;}\n.accordion .accordionHeader.hover .collapsable { background-position:100% -125px;}\n.accordion .accordionHeader h2 span { background-position:0 -150px;}\n\n/* Grid */\n.panel .grid { border-style:solid; border-width:0 1px;}\n.panel .panelBar { border-width:1px;}\n\n.panelBar { display:block; overflow:hidden; height:25px; border-style:solid; border-width:1px 0; background-repeat:repeat-x; }\n\n.panelBar ul { padding:1px;}\n.panelBar li { float:left; display:block; overflow:hidden; height:23px; padding:0 0 0 5px;}\n.panelBar li.hover { background-position:0 -100px;}\n.panelBar li.hover a { background-position:100% -150px;}\n\n.panelBar .toolBar li, .panelBar .toolBar li.hover { padding:0 0 0 5px; background-position:0 -100px;}\n.panelBar .toolBar a, .panelBar .toolBar li.hover a { float:left; display:block; overflow:hidden; padding:0 5px 0 0; text-decoration:none; background-position:100% -150px;}\n.panelBar .toolBar span, .panelBar .toolBar li.hover span { float:left; display:block; overflow:hidden; height:23px; padding:0 0 0 20px; line-height:23px; cursor:pointer;}\n\n.panelBar .toolBar a.add span { background-position:0 -696px;}\n.panelBar .toolBar a.delete span { background-position:0 -746px;}\n.panelBar .toolBar a.edit span { background-position:0 -796px;}\n.panelBar .toolBar a.icon span { background-position:0 -846px;}\n\n.panelBar .toolBar li.line { display:block; overflow:hidden; width:12px; padding:0; text-indent:-1000px; background-position:5px -200px;}\n\n.panelBar .pages { float:left; overflow:hidden; height:21px; padding:2px 5px;}\n.panelBar .pages span { float:left; line-height:21px;}\n.panelBar .pages select { float:left; margin:0 3px; font-size:12px;}\n\n.pagination { float:right; padding-left:7px; background-position:0 -199px;}\n.pagination li, .pagination li.hover { padding:0 0 0 5px; background-position:0 -100px;}\n.pagination a, .pagination li.hover a, .pagination li span { float:left; display:block; padding:0 5px 0 0; text-decoration:none; line-height:23px; background-position:100% -150px;}\n.pagination li.selected a{color:red; font-weight:bold;}\n.pagination span, .pagination li.hover span { float:left; display:block; height:23px; line-height:23px; cursor:pointer;}\n\n.pagination li .first span, .panelBar li .previous span { padding:0 0 0 10px;}\n.pagination li .next span, .panelBar li .last span { padding:0 10px 0 0;}\n.pagination li .first span { background-position:0 -244px;}\n.pagination li .previous span { background-position:0 -294px;}\n.pagination li .next span { background-position:100% -344px;}\n.pagination li .last span { background-position:100% -394px;}\n.pagination li .last { margin-right:5px;}\n\n.pagination li.disabled { background:none;}\n.pagination li.disabled span, .grid .pagination li.disabled a { background-position:0 100px; cursor:default;}\n.pagination li.disabled span span { color:#666;}\n.pagination li.disabled .first span { background-position:0 -444px;}\n.pagination li.disabled .previous span { background-position:0 -494px;}\n.pagination li.disabled .next span { background-position:100% -544px;}\n.pagination li.disabled .last span { background-position:100% -594px;}\n.pagination li.disabled .last { margin-right:5px;}\n\n.pagination li.jumpto { padding:2px 2px 0 7px; background-position:0 -200px;}\n.pagination li.jumpto .textInput { float:left; width:30px; padding:1px; border-color:#acaeaf;}\n.pagination li.jumpto .goto { float:left; display:block; overflow:hidden; width:16px; height:19px; border:0; text-indent:-1000px; background-position:0 -650px; cursor:pointer;}\n\n.grid { display:block; overflow:hidden; width:100%; border-width:0 1px; position:relative;}\n.grid .gridHeader { display:block; overflow:hidden; width:auto;}\n.grid .gridThead { }\n\n.grid .gridScroller { display:block; overflow:auto; position:relative;}\n.grid .gridTbody { }\n\n.grid table { border:0; border-collapse:collapse;table-layout:fixed;}\n.grid .gridHeader th { padding:0 3px; border-style:solid; border-width:0 1px 1px 0; vertical-align:top; white-space:nowrap; line-height:21px; cursor:default;}\n.grid .gridHeader th.hover, .grid .gridHeader th.thSelected { background-position:0 -50px;}\n.grid .gridTbody td { border-right:solid 1px #ededed; overflow:hidden; padding:0 3px; border-bottom:solid 1px #ededed; vertical-align:middle; line-height:21px;}\n.grid .gridTbody td div { display:block; overflow:hidden; height:21px; white-space:nowrap; line-height:21px;}\n.grid .gridTbody td div a{line-height:21px;}\n\n.grid .gridRow { border-style:solid; border-width:0 0 1px 0; cursor:default;}\n.grid .gridRow td.tdLast { padding:0 4px 0 5px; border-right:solid 1px;}\n.grid .gridCol { width:100%; display:block; overflow:hidden; height:21px; line-height:21px; white-space:nowrap;}\n\n\n.grid .gridTbody .selected td { border-bottom-style:dotted; border-bottom-width:1px;}\n.grid .gridTbody .selected .tdSelected {}\n.grid .gridTbody .tdSelected { }\n\n.grid .resizeMarker, .grid .resizeProxy { display:block; overflow:hidden; width:1px; position:absolute;}\n\n.grid .left { text-align:left;}\n.grid .right { text-align:right;}\n.grid .center { text-align:center;}\n\n/* CSS Table */\ntable.list {border-collapse:collapse; border:solid 1px #ededed;}\ntable.list thead tr {background:url(\"../default/images/grid/tableth.png\") repeat-x scroll 0 0 #F0EFF0;}\ntable.list th {padding:1px 2px; line-height:21px; border-right: solid 1px #D0D0D0; border-bottom:solid 1px #D0D0D0; font-weight:bolder; }\ntable.list td {padding:1px 2px; line-height:21px; border-right:solid 1px #ededed;}\ntable.list th.asc, .grid .gridHeader th.asc{background-position: 100% 0; background:url(../default/images/order_up.gif) no-repeat right; cursor:pointer;}\ntable.list th.desc, .grid .gridHeader th.desc{background-position: 100% 0; background:url(../default/images/order_down.gif) no-repeat right; cursor:pointer;}\ntable.list tbody {background-color:#fff;}\ntable.list .right {text-align:right;}\ntable.list .trbg {background-color:#F8F8F8;}\ntable.list .hot {background-color:#fff5c0;}\ntable.list .hover {background-color:#e4f5ff;}\ntable.list .selected {background-color:#7cc5e5;border-color:#b8d0d6; }\ntable.list a {color:#3C7FB1; font-size:11px; line-height:20px;}\ntable.list a:hover {text-decoration:underline; line-height:20px;}\ntable.list td span.error {z-index:-1}\ntable.nowrap tbody tr {border-bottom:solid 1px #ededed;}\n\n/* Taskbar */\n#taskbar { overflow:hidden; height:29px; border-style:solid; border-width: 0; border-color:#0f3255; background-color:#112746; background-repeat:repeat-x; position:absolute; z-index:30;}\n#taskbar .taskbarContent { display:block; overflow:hidden; height:29px; position:relative;}\n#taskbar .taskbarMargin { margin:0 20px;}\n#taskbar ul { position:absolute; width:10000px;}\n#taskbar li { float:left; height:27px; margin-left:2px; padding-left:5px; background-position:0 -50px; position:relative; cursor:pointer;}\n#taskbar li .taskbutton { float:left; display:block; overflow:hidden; height:27px; background-position:100% -100px;}\n#taskbar li .taskbutton span { display:block; overflow:hidden; width:70px; height:27px; line-height:29px; padding:0 25px 0 20px; background-position:3px -42px;}\n\n#taskbar .selected { background-position:0 -250px;}\n#taskbar .selected .taskbutton { background-position:100% -300px;}\n#taskbar .hover { background-position:0 -150px;}\n#taskbar .hover .taskbutton { background-position:100% -200px;}\n\n#taskbar .close, #taskbar .restore, #taskbar .minimize { display:block; overflow:hidden; width:11px; height:11px; padding:0; text-indent:-1000px; position:absolute; top:5px;}\n#taskbar .close { right:3px;}\n#taskbar .closeHover { background-position:0 -50px;}\n#taskbar .restore { right:14px; background-position:0 -100px;}\n#taskbar .restoreHover { background-position:0 -150px;}\n#taskbar .minimize { right:14px; background-position:0 -200px;}\n#taskbar .minimizeHover { background-position:0 -250px;}\n\n#taskbar .taskbarLeft, #taskbar .taskbarRight { display:block; overflow:hidden; width:18px; height:29px; text-indent:-1000px; position:absolute; top:0;}\n#taskbar .taskbarLeft { background-position:0 0; left:2px; cursor:pointer;}\n#taskbar .taskbarLeftHover { background-position:0 -50px;}\n#taskbar .taskbarLeftDisabled { background-position:0 -100px; cursor:default;}\n#taskbar .taskbarRight { background-position:0 -150px; right:2px; cursor:pointer;}\n#taskbar .taskbarRightHover { background-position:0 -200px;}\n#taskbar .taskbarRightDisabled { background-position:0 -250px; cursor:default;}\n\n/* ProgressBar */\n.progressBar { display:block; width:148px; height:28px; position:fixed; top:50%; left:50%; margin-left:-74px; margin-top:-14px; padding:10px 10px 10px 50px; text-align:left; line-height:27px; font-weight:bold; position:absolute; z-index:2001;}\n.background { display:block; width:100%; height:100%; opacity:0.4; filter:alpha(opacity=40); background:#FFF; position:absolute; top:0; left:0; z-index:2000;}\n.alertBackground { display:none; width:100%; height:100%; opacity:0.4; filter:alpha(opacity=40); background:#FFF; position:absolute; top:0; left:0; z-index:1010;}\n.dialogBackground { display:none; width:100%; height:100%; opacity:0.4; filter:alpha(opacity=40); background:#FFF; position:absolute; top:0; left:0; z-index:900;}\n\n/* ----------------------------------------------------------------- Form */\n/* TextInput */\n.textInput, input.focus, input.required, input.error, input.readonly, input.disabled,\ntextarea.focus, textarea.required, textarea.error, textarea.readonly, textarea.disabled { padding:2px; margin:0; line-height:15px; font-size:12px; border-style:solid; border-width:1px;}\ninput.required, textarea.required { background-position:100% 0;}\ninput.gray, textarea.gray{color:gray;}\nselect { border:1px solid; border-color: #A2BAC0 #B8D0D6 #B8D0D6 #A2BAC0}\n\n.inputButton { float:left; display:block; overflow:hidden; text-indent:-1000px; width:16px; height:21px;}\n.inputButton:hover { background-position:0 -50px;}\n.inputDateButton { float:left; display:block; overflow:hidden; text-indent:-1000px; width:16px; height:21px; background-position:0 -100px;}\n.inputDateButton:hover { background-position:0 -150px;}\n\nspan.error { display:block; overflow:hidden; width:165px; height:21px; padding:0 3px; line-height:21px; background:#F00; color:#FFF; position:absolute; top:5px; left:318px;}\nlabel.alt {display:block; overflow:hidden; position:absolute;line-height:20px}\n.nowrap span.error{position: static;}\n\n/* Button */\n.button, .buttonActive, .buttonDisabled { float:left; display:block; overflow:hidden; height:25px; padding-left:5px;}\n\n.button span, .buttonDisabled span, .buttonActive span,\n.button .buttonContent, .buttonHover, .buttonHover .buttonContent,\n.buttonActive .buttonContent, .buttonDisabled .buttonContent { float:left; display:block; overflow:hidden; height:25px; line-height:25px; font-weight:bold;}\n\n.button { background-position:0 0;}\n.button .buttonContent { padding:0 5px 0 0; background-position:100% -50px;}\n.button span { padding:0 10px 0 5px; background-position:100% -50px; cursor:pointer;}\n.button:hover { text-decoration:none; background-position:0 -100px;}\n.button:hover span { background-position:100% -150px;}\n.buttonHover { padding-left:5px; background-position:0 -100px;}\n.buttonHover .buttonContent { padding:0 5px 0 0; background-position:100% -150px;}\n\n.buttonActive { background-position:0 -200px;}\n.buttonActive .buttonContent { padding:0 5px 0 0; background-position:100% -250px;}\n.buttonActive span { padding:0 10px 0 5px; background-position:100% -250px; cursor:pointer;}\n.buttonActive:hover { text-decoration:none; background-position:0 -300px;}\n.buttonActive:hover span { background-position:100% -350px;}\n.buttonActiveHover { background-position:0 -300px;}\n.buttonActiveHover .buttonContent { padding:0 5px 0 0; background-position:100% -350px;}\n\n.buttonDisabled, .buttonDisabled:hover { text-decoration:none; background-position:0 -400px;}\n.buttonDisabled span, .buttonDisabled:hover span { padding:0 10px 0 5px; background-position:100% -450px; cursor:default;}\n.buttonDisabled .buttonContent { padding:0 5px 0 0; background-position:100% -450px;}\n\n.button button, .buttonHover button,\n.buttonActive button, .buttonDisabled button { width:auto; height:25px; margin:0; padding:0 0 5px 0; border:0; font-size:12px; font-weight:bold; background:none; cursor:pointer;}\n.buttonDisabled button { cursor:default;}\n\n/* ----------------------------------------------------------------- Pages */\n/* Layout */\n#layout { text-align:left;}\nbody { overflow:hidden;}\n#layout { display:block; height:100%; position:relative;}\n#header { display:block; overflow:hidden; height:50px; z-index:30}\n#leftside { position:absolute; top:55px; left:0; z-index:20;}\n#sidebar { width:200px; position:absolute; top:0; left:5px; z-index:20; overflow:hidden;}\n#sidebar_s { display:none; width:24px; position:absolute; top:0; left:0; z-index:21;}\n#container { position:absolute; top:55px; left:210px;}\n#splitBar { display:block; overflow:hidden; width:5px; cursor:col-resize; position:absolute; top:55px; left:205px; z-index:20;}\n#splitBarProxy { display:none; overflow:hidden; width:3px; border-style:solid; border-width:1px; cursor:col-resize; position:absolute; top:55px; left:205px; z-index:20;}\n#footer {position:absolute; bottom:0; left:0; text-align:center; width:100%; height:21px; padding:0 5px;z-index:-1}\n\n#header .headerNav { height:50px; background-repeat:no-repeat; background-position:100% -50px;}\n#header .logo { float:left; width:250px; height:50px; text-indent:-1000px;}\n\n#header .nav { display:block; height:21px; position:absolute; top:8px; right:0; z-index:31;}\n#header .nav li { float:left; margin-left:-1px; padding:0 10px; line-height:11px; position:relative;}\n#header .nav li a { line-height:11px;}\n#header .nav ul { display:none; width:230px; border:solid 1px #06223e; overflow:hidden; background:#FFF; position:absolute; top:20px; right:0;}\n#header .nav ul li { margin-top:10px; height:21px;}\n#header .nav ul li a { color:#000;}\n#header .nav .selected ul {display:block;}\n\n#header .themeList { position:absolute; top:30px; right:10px;}\n#header .themeList li { float:left; padding:0 3px;}\n#header .themeList li div { display:block; overflow:hidden; width:13px; height:11px; text-indent:-100px; cursor:pointer;}\n#header .themeList li.default div { background-position:0 0;}\n#header .themeList li.default .selected { background-position:0 -20px;}\n#header .themeList li.green div { background-position:-20px 0;}\n#header .themeList li.green .selected { background-position:-20px -20px;}\n#header .themeList li.red div { background-position:-40px 0;}\n#header .themeList li.red .selected { background-position:-40px -20px;}\n#header .themeList li.purple div { background-position:-60px 0;}\n#header .themeList li.purple .selected { background-position:-60px -20px;}\n#header .themeList li.silver div { background-position:-80px 0;}\n#header .themeList li.silver .selected { background-position:-80px -20px;}\n#header .themeList li.azure div { background-position:-100px 0;}\n#header .themeList li.azure .selected { background-position:-100px -20px;}\n\n.toggleCollapse { display:block; overflow:hidden; height:26px; border-style:solid; border-width:1px 1px 0 1px; background-repeat:repeat-x;}\n.toggleCollapse h2 { float:left; padding-left:8px; line-height:26px;}\n.toggleCollapse div { float:right; display:block; overflow:hidden; width:25px; height:25px; text-indent:-100px; background-position:100% -47px; cursor:pointer;}\n.toggleCollapse div:hover { background-position:100% -97px;}\n\n#sidebar_s .collapse { height:430px; cursor:pointer;}\n#sidebar_s .toggleCollapse { border:0; background:none;}\n#sidebar_s .toggleCollapse div { width:21px; border:0; background-position:-2px -147px;}\n#sidebar_s .toggleCollapse div:hover { background-position:-2px -197px;}\n\n/* Menu */\n#navMenu { display:block; overflow:hidden; height:35px; padding:0 5px; background-repeat:repeat-x;}\n#navMenu ul { float:left; display:block; overflow:hidden; position:relative;}\n#navMenu li { float:left; margin-left:-1px; background-position:0 -50px; position:relative;}\n#navMenu li a { float:left;}\n#navMenu li span { float:left; font-weight:bold; cursor:pointer; padding:0 15px;}\n#navMenu li a, #navMenu li span { line-height:35px; font-size:14px;}\n#navMenu li.selected { z-index:1;}\n#navMenu li.selected a, #navMenu li.selected a:hover { text-decoration:none; background-position:100% -150px;}\n#navMenu li.selected span { padding:0 8px; background-position:0 -100px;}\n\n/* Pages default */\n.page { display:block; overflow:hidden;float:left; width:100%;}\n.pageHeader { display:block; overflow:auto; margin-bottom:1px; padding:5px; border-style:solid; border-width:0 0 1px 0; position:relative;}\n.searchBar {}\n.searchBar ul.searchContent { display:block; overflow:hidden; height:25px;}\n.searchBar ul.searchContent li { float:left; display:block; overflow:hidden; width:300px; height:21px; padding:2px 0;}\n.searchBar label { float:left; width:80px; padding:0 5px; line-height:23px;}\n.searchBar .searchContent td{padding-right:20px; white-space:nowrap; height:25px}\n.searchBar .subBar { height:25px;}\n.searchBar .subBar ul { float:right;}\n.searchBar .subBar li { float:left; margin-left:5px;}\n.pageContent { display:block;overflow:auto;position:relative;}\n\n.dateRange input{width:72px;}\n.dateRange .limit {text-align: center; width: 15px; line-height:21px; }\n\n/* Pages Form */\n.pageForm { display:block; overflow:auto;}\n.pageFormContent { display:block; overflow:auto; padding:10px 5px; position:relative;}\n.pageFormContent div.unit {display:block; margin:0; padding:5px 0; position:relative;clear:both;}\n.pageFormContent p { float:left; display:block; width:380px; height:21px; margin:0; padding:5px 0; position:relative;}\n.pageFormContent p.nowrap { height:auto; width: 100%}\n.pageFormContent .radioGroup { float:left; display:block; overflow:hidden;}\n.pageFormContent label { float:left; width:120px; padding:0 5px; line-height:21px;}\n.pageFormContent label.radioButton { float:left; width:auto; padding:0 10px 0 0; line-height:21px;}\n.pageFormContent .textInput { float:left;}\n.pageFormContent select { float:left;}\n.pageFormContent .inputInfo { padding:0 5px; line-height:21px;}\n.pageFormContent span.unit, .pageFormContent a.unit { padding:0 5px; line-height:21px;}\n.pageFormContent span.info{color:#7F7F7F;display:block;line-height:21px;float:left;}\n\n.pageFormContent dl { float:left; display:block; width:380px; height:21px; margin:0; padding:5px 0; position:relative;}\n.pageFormContent dt { float:left; width:120px; padding:0 5px; line-height:21px;}\n.pageFormContent dd {display:block;line-height:21px;width:220px;float:left;}\n.pageFormContent dl.nowrap, .nowrap dl{width:100%; height:auto; clear: both;}\n.pageFormContent dl.nowrap dd, .nowrap dd {width: 560px;}\n\nfieldset {padding:3px; margin:0 0 5px 0; border:1px dotted #B8D0D6;}\nfieldset legend {padding:2px; border:1px dotted #B8D0D6; font-weight: bold;}\nfieldset legend:hover {background-color: #dddddd;}\n\n.formBar { clear:both; padding:0 5px; height:30px; padding-top:5px; border-style:solid; border-width:1px 0 0 0;}\n.formBar ul { float:right;}\n.formBar li { float:left; margin-left:5px;}\n.divider { clear:both; display:block; overflow:hidden; text-indent:-1000px; width:auto; height:1px; padding:4px 0 0 0; margin-bottom:5px; border-style:dotted; border-width:0 0 1px 0;}\n\n/* Pages dialog */\n.dialog .pageHeader { border-style:solid; border-width:1px;margin:0}\n.dialog .pageContent { border-style:solid; border-width:0 1px; background-color:#fff}\n.dialog .pageFormContent, .dialog .viewInfo { border-style:solid; border-width:1px 0 0 0;}\n.dialog .formBar { border-style:solid; border-width:1px 0;}\n.dialog .tabsContent .pageFormContent{border-width: 1px 1px 0 1px;}\n.dialog .tabsContent .formBar { border-width: 1px 0 0 0; }\n\n.combox { float:left; margin-right:3px; background-position:100% -25px;}\n.combox select { display:none}\n.combox .select { float:left;}\n.combox .select a { float:left; display:block; overflow:hidden; height:23px; padding:0 22px 0 6px; line-height:21px; text-decoration:none; font-size:12px; background-position:100% -50px;}\n.combox .select.disabled a{color:#999}\n.comboxop { position: absolute; z-index: 1001; display:none; padding:4px; border-style:solid; border-width:1px 2px 2px 1px; background:#fff; position:absolute; top:22px; left:1px;}\n.comboxop a { width:50px; height:21px; padding:0 5px; line-height:21px; text-align:left; color:#000; background:none;}\n.comboxop a:hover { background:#e0e0e0;}\n.comboxop .selected { background:#e0e0e0; }\n.comboxop li { text-align:left; }\n\n/* contentTitle */\nh2.contentTitle{margin-bottom:10px; padding:0 10px; line-height:30px; font-size:14px; border-bottom:solid 1px #CCC;}\nh3.contentTitle{margin-bottom:5px; line-height:25px; font-size:13px; border-bottom:solid 1px #CCC;clear:both;}\n.dialog h2.contentTitle {border:none}\nh2.subTitle { margin: 5px 10px; padding: 0; line-height: 30px; font-size: 14px; border-bottom: solid 1px #CCC; }\n\n/* rightMenu */\n#contextmenu, #actionsheet{display:none; position:absolute; z-index:500; left:0; top:0;}\n#contextmenu ul, #actionsheet ul{list-style:none; padding:1px; margin:0; background-color:#fff; border:1px solid #999; width:150px;}\n#contextmenu li, #actionsheet li{display:block; color:#000; padding:3px; margin:0; border:1px solid #fff; background-color:transparent; text-align:left; cursor:default;}\n#contextmenu li.hover, #actionsheet li.hover{border:1px solid #0a246a; background-color:#b6bdd2}\n#contextmenu li.disabled, #actionsheet li.disabled{color:#666;}\n#contextmenuShadow, #actionsheetShadow{display:none; position:absolute; opacity:0.2; filter:alpha(opacity=20); background-color:#000; z-index:499; }\n\n/* calendar */\n#calendar{margin:0; width:208px; z-index:1001; position:absolute; display:block; border:1px solid #B3E4EB; display:none;}\n#calendar *{margin:0; padding:0; font-size:12px; line-height:18px}\n#calendar .main{margin:auto; padding:2px; text-align:center; background:#ffffff; zoom:1; position:relative;}\n#calendar .head{background:#EDF8FF; border:1px solid #BEE9F0}\n#calendar .head select{width:60px;}\n#calendar .body{margin:2px 0; padding:2px; clear:both; overflow:hidden; border:1px solid #BEE9F0;position:relative;}\n#calendar .foot{background:#EDF8FF; border:1px solid #BEE9F0; text-align:right;padding:1px}\n#calendar .nodate .head, #calendar .nodate .body{display:none;}\n#calendar dl{clear:both; margin:auto; overflow:hidden;}\n#calendar dt, #calendar dd, #calendar span{width:26px; height:18px; display:block; float:left; overflow:hidden;zoom:1; border:1px solid #fff;}\n#calendar dt{margin-top:4px;font-weight:bold;color:#666666;}\n#calendar .days dd{cursor:pointer;}\n#calendar .days dd.other{color:#6A6AFF}\n#calendar .days dd.slt{ background:#B3E4EB; border:1px solid #66CCCC;}\n#calendar .days dd:hover{ border:1px solid #66CCCC;}\n#calendar .days dd.disabled {background:#ccc;}\n#calendar .days dd.fill {background: none; cursor:default;}\n#calendar .days dd.fill:hover{border: none;}\n#calendar .close{width:16px;height:16px; font-size:16px; display:block;cursor:pointer;border:1px solid #CCC;text-align:center; }\n#calendar .clearBut, #calendar .okBut { background-color: #CFEBEE; border: 1px solid #38B1B9; color: #08575B; width: 40px; }\n#calendar .time{border-collapse:collapse;float:left;background-color:#fff;display:none;}\n#calendar .time td{border:1px solid #61CAD0; line-height:16px; vertical-align:center;}\n#calendar .time .hh, #calendar .time .mm, #calendar .time .ss{width:18px; height:16px; border: none}\n#calendar .time ul {list-style:none}\n#calendar .time .up, #calendar .time .down {font-size:8px;height:8px;line-height:100%;border:1px solid #BEE9F0;cursor:pointer;}\n#calendar .tm {text-align:center;}\n#calendar .tm .hh, #calendar .tm .mm, #calendar .tm .ss{border:1px solid #A3C6C8;position:absolute;left:4px;bottom:34px;background-color:#ffffc0;width:120px;display:none;}\n#calendar .hh .hh, #calendar .mm .mm, #calendar .ss .ss{display:block;}\n#calendar .tm .hh li, #calendar .tm .mm li, #calendar .tm .ss li{display:block;float:left;cursor:pointer;width:20px;line-height:21px}\n#calendar .tm .hh li:hover, #calendar .tm .mm li:hover, #calendar .tm .ss li:hover{ background:#B3E4EB;}\n\n/* suggest */\n#suggest{position:absolute; z-index:2000; left:0; top:0;}\n#suggest ul{list-style:none; padding:1px; margin:0; background-color:#fff; border:1px solid #999; width:150px;}\n#suggest li{display:block; color:#000; padding:3px; margin:0; border:1px solid #fff; background-color:transparent; text-align:left; cursor:default;}\n#suggest li.selected{border:1px solid #0a246a; background-color:#b6bdd2}\n\n/* button */\na.btnAdd, a.btnDel, a.btnView, a.btnEdit, a.btnSelect, a.btnInfo, a.btnAssign, a.btnLook, a.btnAttach{background:url(../default/images/button/imgX.gif) no-repeat; display:block; width:22px; height:20px; text-indent:-1000px; overflow:hidden; float:left; margin-right: 3px}\na.btnAdd{background-position:0 0}\na.btnDel{background-position: -23px 0}\na.btnInfo{background-position: -46px 0}\na.btnAssign{background-position: -69px 0}\na.btnView{background-position: -115px 0}\na.btnEdit{background-position: -138px 0}\na.btnSelect{background-position: -92px 0}\na.btnLook{background-position: -161px 0}\na.btnAttach{background-position: -183px 0}\n.center {text-align: center;}\n.center a.btnAdd, .center a.btnDel, .center a.btnView, .center a.btnEdit, .center a.btnSelect, .center a.btnInfo, \n.center a.btnAssign, .center a.btnLook, .center a.btnAttach {display:inline-block;float:none}\n.right a.btnAdd, .right a.btnDel, .right a.btnView, .right a.btnEdit, .right a.btnSelect, .right a.btnInfo, \n.right a.btnAssign, .right a.btnLook, .right a.btnAttach {display:inline-block;float:none;text-indent:1000px}\n\n.viewInfo {padding: 10px 5px}\n.viewInfo dl { float:left; display:block; width:380px; height:21px; margin:0; padding:5px 0; position:relative;}\n.viewInfo dt { float:left; width:120px; padding:0 5px; line-height:21px; text-align:right;}\n.viewInfo dd {display:block;line-height:21px;width:220px;float:left;border-bottom: 1px dotted #999; min-height:21px}\n.viewInfo dl.nowrap {width:100%; height:auto; clear: both;}\n.viewInfo dl.nowrap dt {}\n.viewInfo dl.nowrap dd {width: auto;}\n.dialogContent .viewInfo {background-color:#fff}\n.pageContent .panel {clear:both; margin: 5px}\n\n.sortDragPlaceholder {border:1px dashed #ccc;}\n#printBox {display:none}\n\n\n/* Bootstrap 栅格系统 */\n.btn-group-vertical>.btn-group:after, .btn-group-vertical>.btn-group:before, .btn-toolbar:after, .btn-toolbar:before, .clearfix:after, .clearfix:before, .container-fluid:after, .container-fluid:before, .container:after, .container:before, .dl-horizontal dd:after, .dl-horizontal dd:before, .form-horizontal .form-group:after, .form-horizontal .form-group:before, .modal-footer:after, .modal-footer:before, .nav:after, .nav:before, .navbar-collapse:after, .navbar-collapse:before, .navbar-header:after, .navbar-header:before, .navbar:after, .navbar:before, .pager:after, .pager:before, .panel-body:after, .panel-body:before, .row:after, .row:before {\n\tdisplay: table;\n\tcontent: \" \";\n}\n.btn-group-vertical>.btn-group:after, .btn-toolbar:after, .clearfix:after, .container-fluid:after, .container:after, .dl-horizontal dd:after, .form-horizontal .form-group:after, .modal-footer:after, .nav:after, .navbar-collapse:after, .navbar-header:after, .navbar:after, .pager:after, .panel-body:after, .row:after {\n\tclear: both;\n}\n:after, :before {\n\t-webkit-box-sizing: border-box;\n\t-moz-box-sizing: border-box;\n\tbox-sizing: border-box;\n}\n.row * {\n\t-webkit-box-sizing: border-box;\n\t-moz-box-sizing: border-box;\n\tbox-sizing: border-box;\n}\n.row {\n\tmargin: 0;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n\tposition: relative;\n\tmin-height: 1px;\n\tpadding:10px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n\tfloat: left;\n}\n.col-xs-12 {\n\twidth: 100%;\n}\n.col-xs-11 {\n\twidth: 91.66666667%;\n}\n.col-xs-10 {\n\twidth: 83.33333333%;\n}\n.col-xs-9 {\n\twidth: 75%;\n}\n.col-xs-8 {\n\twidth: 66.66666667%;\n}\n.col-xs-7 {\n\twidth: 58.33333333%;\n}\n.col-xs-6 {\n\twidth: 50%;\n}\n.col-xs-5 {\n\twidth: 41.66666667%;\n}\n.col-xs-4 {\n\twidth: 33.33333333%;\n}\n.col-xs-3 {\n\twidth: 25%;\n}\n.col-xs-2 {\n\twidth: 16.66666667%;\n}\n.col-xs-1 {\n\twidth: 8.33333333%;\n}\n.col-xs-pull-12 {\n\tright: 100%;\n}\n.col-xs-pull-11 {\n\tright: 91.66666667%;\n}\n.col-xs-pull-10 {\n\tright: 83.33333333%;\n}\n.col-xs-pull-9 {\n\tright: 75%;\n}\n.col-xs-pull-8 {\n\tright: 66.66666667%;\n}\n.col-xs-pull-7 {\n\tright: 58.33333333%;\n}\n.col-xs-pull-6 {\n\tright: 50%;\n}\n.col-xs-pull-5 {\n\tright: 41.66666667%;\n}\n.col-xs-pull-4 {\n\tright: 33.33333333%;\n}\n.col-xs-pull-3 {\n\tright: 25%;\n}\n.col-xs-pull-2 {\n\tright: 16.66666667%;\n}\n.col-xs-pull-1 {\n\tright: 8.33333333%;\n}\n.col-xs-pull-0 {\n\tright: auto;\n}\n.col-xs-push-12 {\n\tleft: 100%;\n}\n.col-xs-push-11 {\n\tleft: 91.66666667%;\n}\n.col-xs-push-10 {\n\tleft: 83.33333333%;\n}\n.col-xs-push-9 {\n\tleft: 75%;\n}\n.col-xs-push-8 {\n\tleft: 66.66666667%;\n}\n.col-xs-push-7 {\n\tleft: 58.33333333%;\n}\n.col-xs-push-6 {\n\tleft: 50%;\n}\n.col-xs-push-5 {\n\tleft: 41.66666667%;\n}\n.col-xs-push-4 {\n\tleft: 33.33333333%;\n}\n.col-xs-push-3 {\n\tleft: 25%;\n}\n.col-xs-push-2 {\n\tleft: 16.66666667%;\n}\n.col-xs-push-1 {\n\tleft: 8.33333333%;\n}\n.col-xs-push-0 {\n\tleft: auto;\n}\n.col-xs-offset-12 {\n\tmargin-left: 100%;\n}\n.col-xs-offset-11 {\n\tmargin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n\tmargin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n\tmargin-left: 75%;\n}\n.col-xs-offset-8 {\n\tmargin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n\tmargin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n\tmargin-left: 50%;\n}\n.col-xs-offset-5 {\n\tmargin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n\tmargin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n\tmargin-left: 25%;\n}\n.col-xs-offset-2 {\n\tmargin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n\tmargin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n\tmargin-left: 0;\n}\n@media (min-width: 768px) {\n\t.col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n\t\tfloat: left;\n\t}\n\t.col-sm-12 {\n\t\twidth: 100%;\n\t}\n\t.col-sm-11 {\n\t\twidth: 91.66666667%;\n\t}\n\t.col-sm-10 {\n\t\twidth: 83.33333333%;\n\t}\n\t.col-sm-9 {\n\t\twidth: 75%;\n\t}\n\t.col-sm-8 {\n\t\twidth: 66.66666667%;\n\t}\n\t.col-sm-7 {\n\t\twidth: 58.33333333%;\n\t}\n\t.col-sm-6 {\n\t\twidth: 50%;\n\t}\n\t.col-sm-5 {\n\t\twidth: 41.66666667%;\n\t}\n\t.col-sm-4 {\n\t\twidth: 33.33333333%;\n\t}\n\t.col-sm-3 {\n\t\twidth: 25%;\n\t}\n\t.col-sm-2 {\n\t\twidth: 16.66666667%;\n\t}\n\t.col-sm-1 {\n\t\twidth: 8.33333333%;\n\t}\n\t.col-sm-pull-12 {\n\t\tright: 100%;\n\t}\n\t.col-sm-pull-11 {\n\t\tright: 91.66666667%;\n\t}\n\t.col-sm-pull-10 {\n\t\tright: 83.33333333%;\n\t}\n\t.col-sm-pull-9 {\n\t\tright: 75%;\n\t}\n\t.col-sm-pull-8 {\n\t\tright: 66.66666667%;\n\t}\n\t.col-sm-pull-7 {\n\t\tright: 58.33333333%;\n\t}\n\t.col-sm-pull-6 {\n\t\tright: 50%;\n\t}\n\t.col-sm-pull-5 {\n\t\tright: 41.66666667%;\n\t}\n\t.col-sm-pull-4 {\n\t\tright: 33.33333333%;\n\t}\n\t.col-sm-pull-3 {\n\t\tright: 25%;\n\t}\n\t.col-sm-pull-2 {\n\t\tright: 16.66666667%;\n\t}\n\t.col-sm-pull-1 {\n\t\tright: 8.33333333%;\n\t}\n\t.col-sm-pull-0 {\n\t\tright: auto;\n\t}\n\t.col-sm-push-12 {\n\t\tleft: 100%;\n\t}\n\t.col-sm-push-11 {\n\t\tleft: 91.66666667%;\n\t}\n\t.col-sm-push-10 {\n\t\tleft: 83.33333333%;\n\t}\n\t.col-sm-push-9 {\n\t\tleft: 75%;\n\t}\n\t.col-sm-push-8 {\n\t\tleft: 66.66666667%;\n\t}\n\t.col-sm-push-7 {\n\t\tleft: 58.33333333%;\n\t}\n\t.col-sm-push-6 {\n\t\tleft: 50%;\n\t}\n\t.col-sm-push-5 {\n\t\tleft: 41.66666667%;\n\t}\n\t.col-sm-push-4 {\n\t\tleft: 33.33333333%;\n\t}\n\t.col-sm-push-3 {\n\t\tleft: 25%;\n\t}\n\t.col-sm-push-2 {\n\t\tleft: 16.66666667%;\n\t}\n\t.col-sm-push-1 {\n\t\tleft: 8.33333333%;\n\t}\n\t.col-sm-push-0 {\n\t\tleft: auto;\n\t}\n\t.col-sm-offset-12 {\n\t\tmargin-left: 100%;\n\t}\n\t.col-sm-offset-11 {\n\t\tmargin-left: 91.66666667%;\n\t}\n\t.col-sm-offset-10 {\n\t\tmargin-left: 83.33333333%;\n\t}\n\t.col-sm-offset-9 {\n\t\tmargin-left: 75%;\n\t}\n\t.col-sm-offset-8 {\n\t\tmargin-left: 66.66666667%;\n\t}\n\t.col-sm-offset-7 {\n\t\tmargin-left: 58.33333333%;\n\t}\n\t.col-sm-offset-6 {\n\t\tmargin-left: 50%;\n\t}\n\t.col-sm-offset-5 {\n\t\tmargin-left: 41.66666667%;\n\t}\n\t.col-sm-offset-4 {\n\t\tmargin-left: 33.33333333%;\n\t}\n\t.col-sm-offset-3 {\n\t\tmargin-left: 25%;\n\t}\n\t.col-sm-offset-2 {\n\t\tmargin-left: 16.66666667%;\n\t}\n\t.col-sm-offset-1 {\n\t\tmargin-left: 8.33333333%;\n\t}\n\t.col-sm-offset-0 {\n\t\tmargin-left: 0;\n\t}\n}\n@media (min-width: 992px) {\n\t.col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n\t\tfloat: left;\n\t}\n\t.col-md-12 {\n\t\twidth: 100%;\n\t}\n\t.col-md-11 {\n\t\twidth: 91.66666667%;\n\t}\n\t.col-md-10 {\n\t\twidth: 83.33333333%;\n\t}\n\t.col-md-9 {\n\t\twidth: 75%;\n\t}\n\t.col-md-8 {\n\t\twidth: 66.66666667%;\n\t}\n\t.col-md-7 {\n\t\twidth: 58.33333333%;\n\t}\n\t.col-md-6 {\n\t\twidth: 50%;\n\t}\n\t.col-md-5 {\n\t\twidth: 41.66666667%;\n\t}\n\t.col-md-4 {\n\t\twidth: 33.33333333%;\n\t}\n\t.col-md-3 {\n\t\twidth: 25%;\n\t}\n\t.col-md-2 {\n\t\twidth: 16.66666667%;\n\t}\n\t.col-md-1 {\n\t\twidth: 8.33333333%;\n\t}\n\t.col-md-pull-12 {\n\t\tright: 100%;\n\t}\n\t.col-md-pull-11 {\n\t\tright: 91.66666667%;\n\t}\n\t.col-md-pull-10 {\n\t\tright: 83.33333333%;\n\t}\n\t.col-md-pull-9 {\n\t\tright: 75%;\n\t}\n\t.col-md-pull-8 {\n\t\tright: 66.66666667%;\n\t}\n\t.col-md-pull-7 {\n\t\tright: 58.33333333%;\n\t}\n\t.col-md-pull-6 {\n\t\tright: 50%;\n\t}\n\t.col-md-pull-5 {\n\t\tright: 41.66666667%;\n\t}\n\t.col-md-pull-4 {\n\t\tright: 33.33333333%;\n\t}\n\t.col-md-pull-3 {\n\t\tright: 25%;\n\t}\n\t.col-md-pull-2 {\n\t\tright: 16.66666667%;\n\t}\n\t.col-md-pull-1 {\n\t\tright: 8.33333333%;\n\t}\n\t.col-md-pull-0 {\n\t\tright: auto;\n\t}\n\t.col-md-push-12 {\n\t\tleft: 100%;\n\t}\n\t.col-md-push-11 {\n\t\tleft: 91.66666667%;\n\t}\n\t.col-md-push-10 {\n\t\tleft: 83.33333333%;\n\t}\n\t.col-md-push-9 {\n\t\tleft: 75%;\n\t}\n\t.col-md-push-8 {\n\t\tleft: 66.66666667%;\n\t}\n\t.col-md-push-7 {\n\t\tleft: 58.33333333%;\n\t}\n\t.col-md-push-6 {\n\t\tleft: 50%;\n\t}\n\t.col-md-push-5 {\n\t\tleft: 41.66666667%;\n\t}\n\t.col-md-push-4 {\n\t\tleft: 33.33333333%;\n\t}\n\t.col-md-push-3 {\n\t\tleft: 25%;\n\t}\n\t.col-md-push-2 {\n\t\tleft: 16.66666667%;\n\t}\n\t.col-md-push-1 {\n\t\tleft: 8.33333333%;\n\t}\n\t.col-md-push-0 {\n\t\tleft: auto;\n\t}\n\t.col-md-offset-12 {\n\t\tmargin-left: 100%;\n\t}\n\t.col-md-offset-11 {\n\t\tmargin-left: 91.66666667%;\n\t}\n\t.col-md-offset-10 {\n\t\tmargin-left: 83.33333333%;\n\t}\n\t.col-md-offset-9 {\n\t\tmargin-left: 75%;\n\t}\n\t.col-md-offset-8 {\n\t\tmargin-left: 66.66666667%;\n\t}\n\t.col-md-offset-7 {\n\t\tmargin-left: 58.33333333%;\n\t}\n\t.col-md-offset-6 {\n\t\tmargin-left: 50%;\n\t}\n\t.col-md-offset-5 {\n\t\tmargin-left: 41.66666667%;\n\t}\n\t.col-md-offset-4 {\n\t\tmargin-left: 33.33333333%;\n\t}\n\t.col-md-offset-3 {\n\t\tmargin-left: 25%;\n\t}\n\t.col-md-offset-2 {\n\t\tmargin-left: 16.66666667%;\n\t}\n\t.col-md-offset-1 {\n\t\tmargin-left: 8.33333333%;\n\t}\n\t.col-md-offset-0 {\n\t\tmargin-left: 0;\n\t}\n}\n@media (min-width: 1200px) {\n\t.col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n\t\tfloat: left;\n\t}\n\t.col-lg-12 {\n\t\twidth: 100%;\n\t}\n\t.col-lg-11 {\n\t\twidth: 91.66666667%;\n\t}\n\t.col-lg-10 {\n\t\twidth: 83.33333333%;\n\t}\n\t.col-lg-9 {\n\t\twidth: 75%;\n\t}\n\t.col-lg-8 {\n\t\twidth: 66.66666667%;\n\t}\n\t.col-lg-7 {\n\t\twidth: 58.33333333%;\n\t}\n\t.col-lg-6 {\n\t\twidth: 50%;\n\t}\n\t.col-lg-5 {\n\t\twidth: 41.66666667%;\n\t}\n\t.col-lg-4 {\n\t\twidth: 33.33333333%;\n\t}\n\t.col-lg-3 {\n\t\twidth: 25%;\n\t}\n\t.col-lg-2 {\n\t\twidth: 16.66666667%;\n\t}\n\t.col-lg-1 {\n\t\twidth: 8.33333333%;\n\t}\n\t.col-lg-pull-12 {\n\t\tright: 100%;\n\t}\n\t.col-lg-pull-11 {\n\t\tright: 91.66666667%;\n\t}\n\t.col-lg-pull-10 {\n\t\tright: 83.33333333%;\n\t}\n\t.col-lg-pull-9 {\n\t\tright: 75%;\n\t}\n\t.col-lg-pull-8 {\n\t\tright: 66.66666667%;\n\t}\n\t.col-lg-pull-7 {\n\t\tright: 58.33333333%;\n\t}\n\t.col-lg-pull-6 {\n\t\tright: 50%;\n\t}\n\t.col-lg-pull-5 {\n\t\tright: 41.66666667%;\n\t}\n\t.col-lg-pull-4 {\n\t\tright: 33.33333333%;\n\t}\n\t.col-lg-pull-3 {\n\t\tright: 25%;\n\t}\n\t.col-lg-pull-2 {\n\t\tright: 16.66666667%;\n\t}\n\t.col-lg-pull-1 {\n\t\tright: 8.33333333%;\n\t}\n\t.col-lg-pull-0 {\n\t\tright: auto;\n\t}\n\t.col-lg-push-12 {\n\t\tleft: 100%;\n\t}\n\t.col-lg-push-11 {\n\t\tleft: 91.66666667%;\n\t}\n\t.col-lg-push-10 {\n\t\tleft: 83.33333333%;\n\t}\n\t.col-lg-push-9 {\n\t\tleft: 75%;\n\t}\n\t.col-lg-push-8 {\n\t\tleft: 66.66666667%;\n\t}\n\t.col-lg-push-7 {\n\t\tleft: 58.33333333%;\n\t}\n\t.col-lg-push-6 {\n\t\tleft: 50%;\n\t}\n\t.col-lg-push-5 {\n\t\tleft: 41.66666667%;\n\t}\n\t.col-lg-push-4 {\n\t\tleft: 33.33333333%;\n\t}\n\t.col-lg-push-3 {\n\t\tleft: 25%;\n\t}\n\t.col-lg-push-2 {\n\t\tleft: 16.66666667%;\n\t}\n\t.col-lg-push-1 {\n\t\tleft: 8.33333333%;\n\t}\n\t.col-lg-push-0 {\n\t\tleft: auto;\n\t}\n\t.col-lg-offset-12 {\n\t\tmargin-left: 100%;\n    }\n\t.col-lg-offset-11 {\n\t\tmargin-left: 91.66666667%;\n\t}\n\t.col-lg-offset-10 {\n\t\tmargin-left: 83.33333333%;\n\t}\n\t.col-lg-offset-9 {\n\t\tmargin-left: 75%;\n\t}\n\t.col-lg-offset-8 {\n\t\tmargin-left: 66.66666667%;\n\t}\n\t.col-lg-offset-7 {\n\t\tmargin-left: 58.33333333%;\n\t}\n\t.col-lg-offset-6 {\n\t\tmargin-left: 50%;\n\t}\n\t.col-lg-offset-5 {\n\t\tmargin-left: 41.66666667%;\n\t}\n\t.col-lg-offset-4 {\n\t\tmargin-left: 33.33333333%;\n\t}\n\t.col-lg-offset-3 {\n\t\tmargin-left: 25%;\n\t}\n\t.col-lg-offset-2 {\n\t\tmargin-left: 16.66666667%;\n\t}\n\t.col-lg-offset-1 {\n\t\tmargin-left: 8.33333333%;\n\t}\n\t.col-lg-offset-0 {\n\t\tmargin-left: 0;\n\t}\n}\n\n\n.upload-wrap {\n\tposition: relative; width: 80px; height: 80px; line-height: 80px; overflow: hidden; margin-right: 5px; border: 1px dashed #cacbcc; display: inline-block; text-align: center;\n\tbackground:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMCIgaGVpZ2h0PSIzMCIgdmlld0JveD0iMCAwIDUwIDUwIj4KICAgIDxwYXRoIGZpbGw9IiM5OTkiIGQ9Ik0gMTcgNSBDIDE2LjE4MTI0NiA1IDE1LjYwMjYzNiA1LjQ5ODg1MDggMTUuMTg3NSA1Ljk2ODc1IEMgMTQuNzcyMzY0IDYuNDM4NjQ5MiAxNC40MzkxODQgNi45Njc1NTg4IDE0LjEyNSA3LjQ2ODc1IEMgMTMuODEwODE2IDcuOTY5OTQxMiAxMy41MjU2MzIgOC40MzcxMzYgMTMuMjgxMjUgOC43MTg3NSBDIDEzLjA5Nzk2NCA4LjkyOTk2MDUgMTIuOTc4NCA4Ljk4NjkwMTcgMTIuOTY4NzUgOSBMIDMgOSBDIDEuMzU0OTM3MiA5IDAgMTAuMzU0OTM3IDAgMTIgTCAwIDM5IEMgMCA0MC42NDUwNjMgMS4zNTQ5MzcyIDQyIDMgNDIgTCA0NyA0MiBDIDQ4LjY0NTA2MyA0MiA1MCA0MC42NDUwNjMgNTAgMzkgTCA1MCAxMiBDIDUwIDEwLjM1NDkzNyA0OC42NDUwNjMgOSA0NyA5IEwgMzcuMDMxMjUgOSBDIDM3LjAzNDQ2NyA5LjAwNDM2NjEgMzcuMDIxNjQyIDkgMzcgOSBDIDM2Ljk2NzgwOCA4Ljk3NzY4NDEgMzYuODc3NTk3IDguOTAxNzk5MSAzNi43MTg3NSA4LjcxODc1IEMgMzYuNDc0MzY4IDguNDM3MTM2IDM2LjE4OTE4NCA3Ljk2OTk0MTIgMzUuODc1IDcuNDY4NzUgQyAzNS41NjA4MTYgNi45Njc1NTg4IDM1LjIyNzYzNiA2LjQzODY0OTIgMzQuODEyNSA1Ljk2ODc1IEMgMzQuMzk3MzY0IDUuNDk4ODUwOCAzMy44MTg3NTQgNSAzMyA1IEwgMTcgNSB6IE0gMTcgNyBMIDMzIDcgQyAzMi45MzkyNSA3IDMzLjA2NTA0IDcuMDAxMTUgMzMuMzEyNSA3LjI4MTI1IEMgMzMuNTU5OTU3IDcuNTYxMzUwOCAzMy44NDM1NTkgOC4wMzI0NDEyIDM0LjE1NjI1IDguNTMxMjUgQyAzNC40Njg5NDEgOS4wMzAwNTg4IDM0LjgxMjI4OSA5LjU2Mjg2NCAzNS4yMTg3NSAxMC4wMzEyNSBDIDM1LjYyNTIxMSAxMC40OTk2MzYgMzYuMTc4OTI3IDExIDM3IDExIEwgNDcgMTEgQyA0Ny41NjI5MzcgMTEgNDggMTEuNDM3MDYzIDQ4IDEyIEwgNDggMzkgQyA0OCAzOS41NjI5MzcgNDcuNTYyOTM3IDQwIDQ3IDQwIEwgMyA0MCBDIDIuNDM3MDYyOCA0MCAyIDM5LjU2MjkzNyAyIDM5IEwgMiAxMiBDIDIgMTEuNDM3MDYzIDIuNDM3MDYyOCAxMSAzIDExIEwgMTMgMTEgQyAxMy44MjEwNzMgMTEgMTQuMzc0Nzg5IDEwLjQ5OTYzNiAxNC43ODEyNSAxMC4wMzEyNSBDIDE1LjE4NzcxMSA5LjU2Mjg2NCAxNS41MzEwNTkgOS4wMzAwNTg4IDE1Ljg0Mzc1IDguNTMxMjUgQyAxNi4xNTY0NDEgOC4wMzI0NDEyIDE2LjQ0MDA0MyA3LjU2MTM1MDggMTYuNjg3NSA3LjI4MTI1IEMgMTYuOTM0OTU3IDcuMDAxMTQ5MiAxNy4wNjA3NTQgNyAxNyA3IHogTSAyNSAxMSBDIDE3LjgzMjE0MyAxMSAxMiAxNi44MzIxNDMgMTIgMjQgQyAxMiAzMS4xNjc4NTcgMTcuODMyMTQzIDM3IDI1IDM3IEMgMzIuMTY3ODU3IDM3IDM4IDMxLjE2Nzg1NyAzOCAyNCBDIDM4IDE2LjgzMjE0MyAzMi4xNjc4NTcgMTEgMjUgMTEgeiBNIDI1IDEzIEMgMzEuMDg2OTc3IDEzIDM2IDE3LjkxMzAyMyAzNiAyNCBDIDM2IDMwLjA4Njk3NyAzMS4wODY5NzcgMzUgMjUgMzUgQyAxOC45MTMwMjMgMzUgMTQgMzAuMDg2OTc3IDE0IDI0IEMgMTQgMTcuOTEzMDIzIDE4LjkxMzAyMyAxMyAyNSAxMyB6IE0gOCAxNCBDIDYuODk2IDE0IDYgMTQuODk2IDYgMTYgQyA2IDE3LjEwNCA2Ljg5NiAxOCA4IDE4IEwgOSAxOCBDIDEwLjEwNCAxOCAxMSAxNy4xMDQgMTEgMTYgQyAxMSAxNC44OTYgMTAuMTA0IDE0IDkgMTQgTCA4IDE0IHogTSAyNSAxNSBDIDIwLjA0MTI4MiAxNSAxNiAxOS4wNDEyODIgMTYgMjQgQyAxNiAyOC45NTg3MTggMjAuMDQxMjgyIDMzIDI1IDMzIEMgMjkuOTU4NzE4IDMzIDM0IDI4Ljk1ODcxOCAzNCAyNCBDIDM0IDE5LjA0MTI4MiAyOS45NTg3MTggMTUgMjUgMTUgeiBNIDI1IDE3IEMgMjguODc3ODM4IDE3IDMyIDIwLjEyMjE2MiAzMiAyNCBDIDMyIDI3Ljg3NzgzOCAyOC44Nzc4MzggMzEgMjUgMzEgQyAyMS4xMjIxNjIgMzEgMTggMjcuODc3ODM4IDE4IDI0IEMgMTggMjAuMTIyMTYyIDIxLjEyMjE2MiAxNyAyNSAxNyB6IiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIGVuYWJsZS1iYWNrZ3JvdW5kPSJhY2N1bXVsYXRlIiBmb250LWZhbWlseT0iQml0c3RyZWFtIFZlcmEgU2FucyI+PC9wYXRoPgo8L3N2Zz4=') center center no-repeat;\n}\n.upload-wrap .thumbnail, .upload-preview .thumbnail {display:table-cell; vertical-align: middle; width: 80px; height: 80px; text-align: center; overflow: hidden; z-index: 100;}\n.upload-wrap .thumbnail .edit-icon { content:' '; display: block; position:absolute; top: 5px; right:5px; width:20px; height:20px; border-radius: 3px; opacity: 0.5; filter:alpha(opacity=50); background:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMiAzMiI+CiAgICA8cGF0aCBzdHlsZT0idGV4dC1pbmRlbnQ6MDt0ZXh0LWFsaWduOnN0YXJ0O2xpbmUtaGVpZ2h0Om5vcm1hbDt0ZXh0LXRyYW5zZm9ybTpub25lO2Jsb2NrLXByb2dyZXNzaW9uOnRiOy1pbmtzY2FwZS1mb250LXNwZWNpZmljYXRpb246Qml0c3RyZWFtIFZlcmEgU2FucyIgZD0iTSAyMy45MDYyNSAzLjk2ODc1IEMgMjIuODU5Mjg2IDMuOTY4NzUgMjEuODEzMTc4IDQuMzc0MzIxNSAyMSA1LjE4NzUgTCA1LjQwNjI1IDIwLjc4MTI1IEwgNS4xODc1IDIxIEwgNS4xMjUgMjEuMzEyNSBMIDQuMDMxMjUgMjYuODEyNSBMIDMuNzE4NzUgMjguMjgxMjUgTCA1LjE4NzUgMjcuOTY4NzUgTCAxMC42ODc1IDI2Ljg3NSBMIDExIDI2LjgxMjUgTCAxMS4yMTg3NSAyNi41OTM3NSBMIDI2LjgxMjUgMTEgQyAyOC40Mzg4NTcgOS4zNzM2NDMgMjguNDM4ODU3IDYuODEzODU3IDI2LjgxMjUgNS4xODc1IEMgMjUuOTk5MzIyIDQuMzc0MzIxNSAyNC45NTMyMTQgMy45Njg3NSAyMy45MDYyNSAzLjk2ODc1IHogTSAyMy45MDYyNSA1Ljg3NSBDIDI0LjQwOTI4NiA1Ljg3NSAyNC45MTk0MjggNi4xMDY5Mjg1IDI1LjQwNjI1IDYuNTkzNzUgQyAyNi4zNzk4OTMgNy41NjczOTMgMjYuMzc5ODkzIDguNjIwMTA3IDI1LjQwNjI1IDkuNTkzNzUgTCAyNC42ODc1IDEwLjI4MTI1IEwgMjEuNzE4NzUgNy4zMTI1IEwgMjIuNDA2MjUgNi41OTM3NSBDIDIyLjg5MzA3MiA2LjEwNjkyODUgMjMuNDAzMjE0IDUuODc1IDIzLjkwNjI1IDUuODc1IHogTSAyMC4zMTI1IDguNzE4NzUgTCAyMy4yODEyNSAxMS42ODc1IEwgMTEuMTg3NSAyMy43ODEyNSBDIDEwLjUzMzE0MiAyMi41MDA2NTkgOS40OTkzNDE1IDIxLjQ2Njg1OCA4LjIxODc1IDIwLjgxMjUgTCAyMC4zMTI1IDguNzE4NzUgeiBNIDYuOTM3NSAyMi40Mzc1IEMgOC4xMzY1ODQyIDIyLjkyMzM5MyA5LjA3NjYwNjcgMjMuODYzNDE2IDkuNTYyNSAyNS4wNjI1IEwgNi4yODEyNSAyNS43MTg3NSBMIDYuOTM3NSAyMi40Mzc1IHoiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgZm9udC1mYW1pbHk9IkJpdHN0cmVhbSBWZXJhIFNhbnMiPjwvcGF0aD4KPC9zdmc+') center center no-repeat #fff;}\n.upload-wrap input[type=file], .upload-wrap button {position: absolute; top:0; left:0; font-size: 0; width: 100%; height: 100%; outline: 0; opacity: 0; filter: alpha(opacity=0); cursor: pointer;}\n\n.upload-preview {display: inline-block;}\n.upload-preview .thumbnail {margin: 0 3px;}\n.upload-preview .thumbnail .del-icon, .upload-wrap .del-icon { content:' '; display: block; position:absolute; top: 5px; right:5px; width:20px; height:20px; border-radius: 3px; opacity: 0.4; filter:alpha(opacity=40); background:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMiAzMiI+CiAgICA8cGF0aCBzdHlsZT0idGV4dC1pbmRlbnQ6MDt0ZXh0LWFsaWduOnN0YXJ0O2xpbmUtaGVpZ2h0Om5vcm1hbDt0ZXh0LXRyYW5zZm9ybTpub25lO2Jsb2NrLXByb2dyZXNzaW9uOnRiOy1pbmtzY2FwZS1mb250LXNwZWNpZmljYXRpb246Qml0c3RyZWFtIFZlcmEgU2FucyIgZD0iTSA3LjIxODc1IDUuNzgxMjUgTCA1Ljc4MTI1IDcuMjE4NzUgTCAxNC41NjI1IDE2IEwgNS43ODEyNSAyNC43ODEyNSBMIDcuMjE4NzUgMjYuMjE4NzUgTCAxNiAxNy40Mzc1IEwgMjQuNzgxMjUgMjYuMjE4NzUgTCAyNi4yMTg3NSAyNC43ODEyNSBMIDE3LjQzNzUgMTYgTCAyNi4yMTg3NSA3LjIxODc1IEwgMjQuNzgxMjUgNS43ODEyNSBMIDE2IDE0LjU2MjUgTCA3LjIxODc1IDUuNzgxMjUgeiIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBmb250LWZhbWlseT0iQml0c3RyZWFtIFZlcmEgU2FucyI+PC9wYXRoPgo8L3N2Zz4=') center center no-repeat #fff;}\n.upload-preview .thumbnail .del-icon:hover, .upload-wrap .del-icon:hover {opacity: 0.7; filter:alpha(opacity=70);}\n"
  },
  {
    "path": "themes/css/ieHack.css",
    "content": "@charset \"utf-8\";\n\nhtml, body { *overflow:hidden;}\n\n#header .nav li a { line-height:14px;}\n#header .menu li a, #header .menu li span { line-height:37px;}\n#taskbar li .taskbutton span { line-height:31px;}\n\n.toggleCollapse h2 { line-height:27px;}\n/* Panel */\n.panel .panelHeaderContent h1 { line-height:32px;}\n\n/* Accordion */\n.accordion .accordionHeader h2 { line-height:27px;}\n\n/* Tabs */\n.tabsHeader li span { line-height:32px;}\n.tabsPanel .panelHeader li span { line-height:30px;}\n.tabsPanel .panelHeader li.selected span { line-height:32px;}\n.tabsPage .tabsPageHeader { width:auto;}\n.tabsPage .tabsPageHeader li span { _line-height:24px; font-family:\"宋体\"}\n.tabsPage .tabsRight { _right:16px;}\n.tabsPage .tabsMore { _right:-1px;}\n.tabsPage .tabsMoreList { _right:-1px;}\n.tabsPage .tabsMoreList li a { line-height:23px;}\n\n/* Alert */\n.alert h1, .alert h1 { line-height:34px;}\n\n/* Dialog */\n.dialog .dialogHeader h1 { line-height:32px;}\n\n/* Shadow */\n.shadow .shadow_h_l { _background:none; _filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=scale, src=\"themes/default/images/shadow/shadow_h_l.png\");}\n.shadow .shadow_h_r { _background:none; _filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=scale, src=\"themes/default/images/shadow/shadow_h_r.png\");}\n.shadow .shadow_h_c { _background:none; _filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=scale, src=\"themes/default/images/shadow/shadow_h_c.png\");}\n.shadow .shadow_c_l { _background:none; _filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=scale, src=\"themes/default/images/shadow/shadow_c_l.png\");}\n.shadow .shadow_c_r { _background:none; _filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=scale, src=\"themes/default/images/shadow/shadow_c_r.png\");}\n.shadow .shadow_c_c { _background:none; _filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=scale, src=\"themes/default/images/shadow/shadow_c_c.png\");}\n.shadow .shadow_f_l { _background:none; _filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=scale, src=\"themes/default/images/shadow/shadow_f_l.png\");}\n.shadow .shadow_f_r { _background:none; _filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=scale, src=\"themes/default/images/shadow/shadow_f_r.png\");}\n.shadow .shadow_f_c { _background:none; _filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=scale, src=\"themes/default/images/shadow/shadow_f_c.png\");}\n\n/* Tree */\n.tree a, .tree span { line-height:24px;}\n.tree a { _margin-left:-3px;}\n\n/* Grid */\n.panelBar .toolBar span, .panelBar .toolBar li.hover span,\n.panelBar .pagination span, .panelBar .pagination li.hover span { line-height:25px;}\n.grid .gridCol { line-height:23px;}\n\n/* ----------------------------------------------------------------- Form */\n/* TextInput */\n.textInput, .textInputHover, .textInputRequired, .textInputInvalid, .textInputReadonly, .textInputDisabled,\n.textArea, .textAreaHover, .textAreaRequired, .textAreaInvalid, .textAreaReadonly, .textAreaDisabled { padding:3px 2px 1px 2px;}\n\n/* Button */\n.button span, .buttonDisabled span, .buttonActive span,\n.button button, .buttonActive button, .buttonDisabled button { line-height:27px;}\n\n/* calendar */\n#calendar .time .hh, #calendar .time .mm, #calendar .time .ss {border:0}\n#calendar .time .up, #calendar .time .down {font-size:7px;}\n\ntextarea.required { background-position:104% 0;}\n\n\n\n"
  },
  {
    "path": "themes/css/login.css",
    "content": "@charset \"utf-8\";\n\nhtml, body, div, span, applet, object, iframe,\nh1, h2, h3, h4, h5, h6, p, blockquote, pre,\na, abbr, acronym, address, big, cite, code,\ndel, dfn, em, font, img, ins, kbd, q, s, samp,\nsmall, strike, strong, sub, sup, tt, var,\ndl, dt, dd, ol, ul, li,\nfieldset, form, label, legend,\ntable, caption, tbody, tfoot, thead, tr, th, td { padding:0; margin:0; font-size:12px; line-height:100%; font-family:Arial, sans-serif;}\n\nul, ol { list-style:none;}\nimg { border:0;}\n\nbody { margin:0; text-align:center; background:#FFF url(../default/images/login_bg.png) repeat-x top;}\n\n#login { display:block; width:950px; margin:0 auto; text-align:left;}\n#login_header { display:block; padding-top:40px; height:80px;}\n.login_logo { float:left; margin-top:10px;}\n.login_info { float:left; margin-left:10px; line-height:80px; font-size:18px; color:#0088cc; font-weight: bold;}\n.login_headerContent { float:right; display:block; width:280px; height:80px; padding:0 40px; background:url(../default/images/login_header_bg.png) no-repeat top right;}\n.navList { display:block; overflow:hidden; height:20px; padding-left:28px;}\n.navList ul { float:left; display:block; overflow:hidden;}\n.navList li { float:left; display:block; margin-left:-1px; padding:0 10px; background:url(../default/images/login_list.png) no-repeat 0 5px;}\n.navList a { display:block; white-space:nowrap; line-height:21px; color:#000; text-decoration:none;}\n.navList a:hover { text-decoration:underline;}\n\n#login_content { display:block; position:relative;}\n.login_title { display:block; padding:25px 0 0 38px;}\n.loginForm { display:block; width:240px; padding:40px 20px 0 20px; position:absolute; right:40px;}\n.loginForm p { margin:10px 0;}\n.loginForm label { float:left; width:70px; padding:0 0 0 10px; line-height:25px; color:#4c4c4c; font-size:14px;}\n.loginForm input { padding:3px 2px; border-style:solid; border-width:1px; border-color:#80a5c4;}\n.loginForm .login_input {}\n.loginForm .code { float:left; margin-right:5px;}\n.login_bar { padding-left:70px;}\n.login_bar .sub { display:block; width:75px; height:30px; border:none; background:url(../default/images/login_sub.png) no-repeat; cursor:pointer;}\n\n.login_banner { display:block; height:270px;}\n.login_main { display:block; height:200px; padding-right:40px; background:url(../default/images/login_content_bg.png) no-repeat top;}\n\n.helpList { float:right; width:200px;}\n.helpList li { display:block; padding-left:10px; background:url(../default/images/login_list.png) no-repeat 0 -40px;}\n.helpList a { line-height:21px; color:#333; text-decoration:none; }\n.helpList a:hover { text-decoration:underline;}\n\n.login_inner { display:block; width:560px; padding:30px 20px 0 20px;}\n.login_inner p { margin:10px 0; line-height:150%; font-size:14px; color:#666;}\n\n#login_footer { clear:both; display:block; margin-bottom:20px; padding:10px; border-top:solid 1px #e2e5e8; color:#666; text-align:center;}\n"
  },
  {
    "path": "themes/css/print.css",
    "content": "#layout, #footer, #splitBar, #splitBarProxy, #alertBackground, #dialogBackground, #background, \n.comboxop, .shadow, .panelBar{ display:none;}\n#printBox{display:block; font-family: Arial, sans-serif; }\n/*body.transform5{-webkit-transform: scale(0.5); -webkit-transform-origin: 0 0;}*/\n\n/* CSS Table */\ntable.list {border-collapse:collapse;width:100%}\ntable.list thead tr {background-color: #F0EFF0;}\ntable.list th {border: solid 1px #D0D0D0; font-weight:bold; }\ntable.list td {border:solid 1px #D0D0D0;white-space:nowrap;}\n\n\n/* Grid */\n.grid table {border-collapse:collapse; width:100%}\n.grid table th { border: solid 1px #D0D0D0; font-weight:bold; }\n.grid table td { border: solid 1px #D0D0D0; white-space:nowrap;}\n.grid .gridTbody td div { display: block; }\n.grid .left { text-align:left;}\n.grid .right { text-align:right;}\n.grid .center { text-align:center;}"
  },
  {
    "path": "themes/default/style.css",
    "content": "@charset \"utf-8\";\n\n/* Icon */\n.tabsHeader li.main a span span, #taskbar li .taskbutton span { background:url(./images/icon.png) no-repeat;}\n\n/* Panel */\n.panel,\n.panel .panelHeader, .panel .panelHeaderContent, .panel .panelHeaderContent h1,\n.panel .panelFooter, .panel .panelFooterContent { background:url(./images/panel/panel.png) no-repeat;}\n.panel .expandable, .panel .collapsable { background:url(./images/panel/panel_icon.png) no-repeat;}\n.panel .panelHeaderContent h1 { color:#183152; }\n.panel .panelContent { border-color:#b8d0d6; background:#eef4f5;}\n\n.panel .grid { border-color:#b8d0d6;}\n\n/* Tabs */\n.tabs, .tabsHeader, .tabsHeaderContent,\n.tabs .tabsHeader ul, .tabs .tabsHeader li, .tabs .tabsHeader li a, .tabs .tabsHeader li span,\n.tabs .tabsFooter, .tabs .tabsFooterContent { background:url(./images/tabs/tabspanel.png) no-repeat;}\n\n.tabs .tabsHeader li a { color:#03408b;}\n.tabs .tabsHeader li span { color:#183152;}\n.tabs .tabsContent { border-color:#b8d0d6; background:#eef4f5;}\n.tabs .icon-collapse { background: url(./images/panel/panel_icon.png) no-repeat; }\n\n/* TabsPage */\n.tabsPage .tabsPageHeader, .tabsPage .tabsPageHeader li, .tabsPage .tabsPageHeader li a, .tabsPage .tabsPageHeader li span { background:url(./images/tabs/tabspage.png) no-repeat;}\n.tabsPage .tabsPageHeader { background-color:#e9f0f2;}\n.tabsPage .tabsPageHeader { border-color:#b8d0d6;}\n.tabsPage .tabsPageHeader li a { color:#183152;}\n.tabsPage .tabsPageHeader li .close,\n.tabsPage .tabsPageHeader li.hover .close,\n.tabsPage .tabsPageHeader li.selected .close { background:url(./images/tabs/tabspage_icon.png) no-repeat;}\n.tabsPage .tabsLeft, .tabsPage .tabsRight, .tabsPage .tabsMore { background:url(./images/tabs/tabscontrol.png) no-repeat;}\n.tabsPage .tabsMoreList { border-color:#b8d0d6; background:#FFF;}\n.tabsPage .tabsPageHeader .home_icon { background:url(./images/icon.png) no-repeat;}\n.tabsPage .tabsPageContent { border-color:#b8d0d6; background:#FFF;}\n\n/* Alert */\n.alert .alertFooter, .alert .alertFooter_r, .alert .alertFooter_c { background:url(./images/alert/alertpanel.png) no-repeat;}\n.alert .alertContent { border-color:#b8d0d6; background:#eef4f5;}\n.alert .warn .alertInner { border-color:#e83e09; background:#fefacf;}\n.alert .error .alertInner { border-color:#e50000; background:#fefacf;}\n.alert .correct .alertInner, .alert .info .alertInner { border-color:#b8d0d6; background:#fefacf;}\n.alert .confirm .alertInner { border-color:#b8d0d6; background:#fefacf;}\n.alert h1 { border-color:#CCC; background:url(./images/alert/alertpanel_icon.png) no-repeat;}\n\n/* Dialog */\n.dialog .dialogHeader, .dialog .dialogHeader_r, .dialog .dialogHeader_c,\n.dialog .dialogFooter, .dialog .dialogFooter_r, .dialog .dialogFooter_c { background:url(./images/dialog/dialogpanel.png) no-repeat;}\n.dialog .dialogHeader h1, .dialog .dialogHeader .close, .dialog .dialogHeader .maximize, .dialog .dialogHeader .restore, .dialog .dialogHeader .minimize, .resizable_f_r { background:url(./images/dialog/dialogpanel_icon.png) no-repeat;}\n.dialog .dialogHeader h1 { color:#183152;}\n.dialog .dialogContent { border-color:#b8d0d6; background:#eef4f5;}\n\n.resizable { border-color:#081629; background:#c3d7dc;}\n\n/* Shadow */\n.shadow .shadow_h_l { background:url(./images/shadow/shadow_h_l.png) no-repeat;}\n.shadow .shadow_h_r { background:url(./images/shadow/shadow_h_r.png) no-repeat;}\n.shadow .shadow_h_c { background:url(./images/shadow/shadow_h_c.png) repeat-x;}\n.shadow .shadow_c_l { background:url(./images/shadow/shadow_c_l.png) repeat-y;}\n.shadow .shadow_c_r { background:url(./images/shadow/shadow_c_r.png) repeat-y;}\n.shadow .shadow_c_c { background:url(./images/shadow/shadow_c_c.png) repeat;}\n.shadow .shadow_f_l { background:url(./images/shadow/shadow_f_l.png) no-repeat;}\n.shadow .shadow_f_r { background:url(./images/shadow/shadow_f_r.png) no-repeat;}\n.shadow .shadow_f_c { background:url(./images/shadow/shadow_f_c.png) repeat-x;}\n\n/* Tree */\n.tree div div { background:url(./images/tree/tree.png) no-repeat;}\n.tree .folder_collapsable, .tree .folder_expandable, .tree .file { background:url(./images/tree/folder.png) no-repeat;}\n.tree .checked, .tree .unchecked, .tree .indeterminate { background:url(./images/tree/check.png) no-repeat;}\n.tree ul { background:#FFF;}\n.tree li a, .tree li span { color:#183152;}\n.tree .hover { background:#f5f5f5;}\n.tree .selected { background-color:#e8edf3;}\n\n/* Accordion */\n.accordion .accordionHeader, .accordion .accordionHeader h2, .accordion .accordionHeader h2 span { color:#183152; background:url(./images/accordion/accordion.png);}\n.accordion { border-color:#b8d0d6; background:#FFF;}\n.accordion .accordionHeader { background-color:#eaf4ff;}\n.accordion .accordionContent { border-color:#b8d0d6;}\n\n/* Grid */\n.panelBar, .toolBar li.hover .buttonDisabled, .toolBar li.hover .buttonDisabled span, .toolBar .buttonDisabled, .toolBar .buttonDisabled span,\n.toolBar li.hover, .toolBar li.hover a, .toolBar li.hover span, .toolBar span,\n.pagination, .pagination li.hover, .pagination li.hover a, .pagination li span,\n.pagination li.disabled span span,\n.panelBar .line, .pagination li.jumpto, .pagination li.jumpto .goto { background:url(./images/grid/grid.png) no-repeat;}\n\n.panelBar { border-color:#b8d0d6; background-color:#efefef;}\n\n.grid .gridHeader { background:#EEE;}\n.grid { background:#FFF;}\n.grid table { border-color:#d0d0d0;}\n.grid .gridHeader, .grid .gridHeader th { border-color:#d0d0d0; background:#f0eff0 url(./images/grid/tableth.png) repeat-x;}\n.grid table th div { border-left-color:#EEE; border-right-color:#d0d0d0;}\n.grid table td { border-color:#ededed;}\n\n.grid .resizeMarker, .grid .resizeProxy { background:url(./images/grid/resizeCol.png) repeat-y;}\n\n.grid .gridHeader th.hover, .grid .gridHeader th.thSelected { border-color:#aaccf6; }\n.grid .gridTbody .gridRowBg { background:#f7f7f7;}\n.grid .gridTbody .gridRow { border-color:#ededed;}\n.grid .gridTbody .gridRow td.tdLast { border-color:#ededed;}\n.grid .gridTbody .hover { border-color:#dddddd; background:#f5f5f5;}\n.grid .gridTbody .hover .tdSelected { background:#f5f5f5;}\n.grid .gridTbody .selected { border-color:#b8d0d6; background:#7cc5e5;}\n.grid .gridTbody .selected .tdSelected { background:#e8edf3;}\n.grid .gridTbody .tdSelected { background:#f8f8f8;}\n.grid .error{background:#fb7e81;}\n\n/* ProgressBar */\n.progressBar { border:solid 2px #86a5ad; background:#FFF url(./images/progressBar/progressBar_m.gif) no-repeat 10px 10px;}\n\n/* ----------------------------------------------------------------- Form */\n/* TextInput */\n.textInput, input.focus, input.required, input.error, input.readonly, input.disabled,\ntextarea.focus, textarea.required, textarea.error, textarea.readonly, textarea.disabled { background:url(./images/form/input_bg.png) no-repeat scroll;}\n\n.textInput, .textArea { border-color:#a2bac0 #b8d0d6 #b8d0d6 #a2bac0; background-color:#FFF;}\ninput.required, textarea.required { border-color:#a2bac0 #b8d0d6 #b8d0d6 #a2bac0; background-color:#FFF;}\ninput.error, textarea.error { border-color:#F80C11 #FB7E81 #FB7E81 #F80C11;}\ninput.focus, textarea.focus { border-color:#64aabc #a9d7e3 #a9d7e3 #64aabc; background-color:#f8fafc;}\ninput.readonly, textarea.readonly { border-color:#9eabb3 #d5dbdf #d5dbdf #9eabb3; background-color:#F6F6F6;}\ninput.disabled, textarea.disabled { border-color:#9eabb3 #d5dbdf #d5dbdf #9eabb3; background-color:#F6F6F6;}\n\n.inputButton, .inputDateButton { background:url(./images/form/input_bt.png) no-repeat;}\n\n/* Button */\n.button, .button span,\n.buttonDisabled, .buttonDisabled span,\n.buttonActive, .buttonActive span,\n.button .buttonContent, .buttonHover, .buttonHover .buttonContent,\n.buttonActive .buttonContent, .buttonActiveHover, .buttonActiveHover .buttonContent,\n.buttonDisabled .buttonContent { background:url(./images/button/button_s.png) no-repeat;}\n\n.button span, .buttonDisabled span, .buttonActive span,\n.button .buttonContent, .buttonHover, .buttonHover .buttonContent,\n.buttonActive .buttonContent, .buttonDisabled .buttonContent,\n.button button, .buttonHover button,\n.buttonActive button, .buttonDisabled button { color:#183152;}\n\n.buttonDisabled span, .buttonDisabled:hover span,\n.buttonDisabled button { color:#999;}\n\n/* ----------------------------------------------------------------- Pages */\n/* Layout */\nbody, #splitBar { background:#e5edef;}\n#splitBarProxy { border-color:#c0c0c0; background:#CCC;}\n\n#header, #header .headerNav { background:url(./images/header_bg.png) repeat-x;}\n#header { background-color:#102c4a;}\n#header .logo { background:url(./images/logo.png) no-repeat;}\n#header .nav li { float:left; margin-left:-1px; padding:0 8px; line-height:11px; background:url(./images/listLine.png) no-repeat;}\n#header .nav li a { color:#b9ccda;}\n#header .themeList li div { background:url(./images/themeButton.png) no-repeat;}\n.toggleCollapse, .toggleCollapse div { background:url(./images/layout/toggleSidebar.png) no-repeat;}\n.toggleCollapse { border-style:solid; border-width:1px 1px 0 1px; border-color:#b8d0d6; background-color:#e7eff0;}\n.toggleCollapse h2 { color:#183152;}\n#sidebar_s .collapse { border:solid 1px #b8d0d6; background:#eff5f6;}\n#sidebar_s .collapse:hover { background:#f5f9fa;}\n\n#taskbar, #taskbar li, #taskbar li .taskbutton { background:url(./images/layout/taskbar.png) no-repeat;}\n#taskbar .close, #taskbar .restore, #taskbar .minimize { background:url(./images/layout/taskbar_icon.png) no-repeat;}\n#taskbar li .taskbutton span { color:#FFF;}\n#taskbar .taskbarLeft, #taskbar .taskbarRight { background:url(./images/layout/taskbar_control.png) no-repeat;}\n\n/* Menu */\n#navMenu, #navMenu li, #navMenu li.selected a, #navMenu li.selected span { background:url(../default/images/menu/menu.png) no-repeat;}\n#navMenu { background-color:#1871dd; }\n#navMenu li a, #navMenu li span { color:#FFF; }\n#navMenu li.selected span { color:#000; }\n\n/* Homepage */\n.sidebarContent { display:block; overflow:auto; height:500px; border:solid 1px #86B4EC; background:#FFF;}\n.accountInfo { display:block; overflow:hidden; height:60px; padding:0 10px; background:url(./images/account_info_bg.png) repeat-x}\n.accountInfo p { padding:8px 0 0 0; line-height:19px;}\n.accountInfo p span { font-size:14px; font-weight:bold;}\n.accountInfo .right { float:right; padding-right:10px; text-align:right;}\n.accountInfo .alertInfo { float:right; width:300px; height:60px; padding-left:10px; border-left:solid 1px #accdf4;}\n.accountInfo .alertInfo h2 { padding:8px 0; line-height:17px;}\n.accountInfo .alertInfo a { padding:6px 0 0 0; line-height:21px;}\n\n/* Pages */\n.pageForm .inputInfo { color:#999;}\n\n/* Pages dialog */\n.dialog .pageHeader, .dialog .pageContent { border-color:#b8d0d6;}\n.dialog .pageContent .pageFormContent { border-color:#b8d0d6; background:#FFF;}\n\n/* Pages default */\n.page .pageHeader, .formBar { border-color:#b8d0d6; background:#ebf0f5 url(../default/images/pageHeader_bg.png) repeat-x;}\n.page .searchBar label { color:#183152;}\n\n/* Pages Form */\n.formBar { border-color:#b8d0d6;}\n.divider { border-color:#b8d0d6;}\n\n/* combox */\n.combox .select a  { color:#183152; }\n.comboxop { border-color:#B8D0D6; }\n.combox, .combox div, .combox div a { background:url(../default/images/search-bg.gif) no-repeat; }\n\n\n\n\n"
  },
  {
    "path": "themes/green/style.css",
    "content": "@charset \"utf-8\";\n\n/* Icon */\n.tabsHeader li.main a span span, #taskbar li .taskbutton span { background:url(../default/images/icon.png) no-repeat;}\n\n/* Panel */\n.panel,\n.panel .panelHeader, .panel .panelHeaderContent, .panel .panelHeaderContent h1,\n.panel .panelFooter, .panel .panelFooterContent { background:url(../green/images/panel/panel.png) no-repeat;}\n.panel .expandable, .panel .collapsable { background:url(../green/images/panel/panel_icon.png) no-repeat;}\n.panel .panelHeaderContent h1 { color:#2d3f00; }\n.panel .panelContent { border-color:#8abb12; background:#e3fda7;}\n\n.panel .grid { border-color:#8ABB12;}\n\n/* Tabs */\n.tabs, .tabsHeader, .tabsHeaderContent,\n.tabs .tabsHeader ul, .tabs .tabsHeader li, .tabs .tabsHeader li a, .tabs .tabsHeader li span,\n.tabs .tabsFooter, .tabs .tabsFooterContent { background:url(../green/images/tabs/tabspanel.png) no-repeat;}\n\n.tabs .tabsHeader li a { color:#2d3f00;}\n.tabs .tabsHeader li span { color:#2d3f00;}\n.tabs .tabsContent { border-color:#8abb12; background:#e3fda7;}\n.tabs .icon-collapse { background: url(./images/panel/panel_icon.png) no-repeat; }\n\n/* TabsPage */\n.tabsPage .tabsPageHeader, .tabsPage .tabsPageHeader li, .tabsPage .tabsPageHeader li a, .tabsPage .tabsPageHeader li span { background:url(../green/images/tabs/tabspage.png) no-repeat;}\n.tabsPage .tabsPageHeader { background-color:#e9f0f2;}\n.tabsPage .tabsPageHeader { border-color:#8abb12;}\n.tabsPage .tabsPageHeader li a { color:#2d3f00;}\n.tabsPage .tabsPageHeader li .close,\n.tabsPage .tabsPageHeader li.hover .close,\n.tabsPage .tabsPageHeader li.selected .close { background:url(../green/images/tabs/tabspage_icon.png) no-repeat;}\n.tabsPage .tabsLeft, .tabsPage .tabsRight, .tabsPage .tabsMore { background:url(../green/images/tabs/tabscontrol.png) no-repeat;}\n.tabsPage .tabsMoreList { border-color:#8ABB12; background:#FFF;}\n.tabsPage .tabsPageHeader .home_icon { background:url(../default/images/icon.png) no-repeat;}\n.tabsPage .tabsPageContent { border-color:#8abb12; background:#FFF;}\n\n/* Alert */\n.alert .alertFooter, .alert .alertFooter_r, .alert .alertFooter_c { background:url(../green/images/alert/alertpanel.png) no-repeat;}\n.alert .alertContent { border-color:#b8d0d6; background:#eef4f5;}\n.alert .warn .alertInner { border-color:#e83e09; background:#fefacf;}\n.alert .error .alertInner { border-color:#e50000; background:#fefacf;}\n.alert .correct .alertInner, .alert .info .alertInner { border-color:#b8d0d6; background:#fefacf;}\n.alert .confirm .alertInner { border-color:#b8d0d6; background:#fefacf;}\n.alert h1 { background:url(../default/images/alert/alertpanel_icon.png) no-repeat;}\n\n/* Dialog */\n.dialog .dialogHeader, .dialog .dialogHeader_r, .dialog .dialogHeader_c,\n.dialog .dialogFooter, .dialog .dialogFooter_r, .dialog .dialogFooter_c { background:url(../green/images/dialog/dialogpanel.png) no-repeat;}\n.dialog .dialogHeader h1, .dialog .dialogHeader .close, .dialog .dialogHeader .maximize, .dialog .dialogHeader .restore, .dialog .dialogHeader .minimize, .resizable_f_r { background:url(../green/images/dialog/dialogpanel_icon.png) no-repeat;}\n.dialog .dialogHeader h1 { color:#2d3f00;}\n.dialog .dialogContent { border-color:#8abb12; background:#e3fda7;}\n\n.resizable { border-color:#3b6200; background:#aae31d;}\n\n/* Shadow */\n.shadow .shadow_h_l { background:url(../default/images/shadow/shadow_h_l.png) no-repeat;}\n.shadow .shadow_h_r { background:url(../default/images/shadow/shadow_h_r.png) no-repeat;}\n.shadow .shadow_h_c { background:url(../default/images/shadow/shadow_h_c.png) repeat-x;}\n.shadow .shadow_c_l { background:url(../default/images/shadow/shadow_c_l.png) repeat-y;}\n.shadow .shadow_c_r { background:url(../default/images/shadow/shadow_c_r.png) repeat-y;}\n.shadow .shadow_c_c { background:url(../default/images/shadow/shadow_c_c.png) repeat;}\n.shadow .shadow_f_l { background:url(../default/images/shadow/shadow_f_l.png) no-repeat;}\n.shadow .shadow_f_r { background:url(../default/images/shadow/shadow_f_r.png) no-repeat;}\n.shadow .shadow_f_c { background:url(../default/images/shadow/shadow_f_c.png) repeat-x;}\n\n/* Tree */\n.tree div div { background:url(../default/images/tree/tree.png) no-repeat;}\n.tree .folder_collapsable, .tree .folder_expandable, .tree .file {background:transparent url(../default/images/tree/folder.png) no-repeat scroll 0 0;}\n.tree .checked, .tree .unchecked, .tree .indeterminate { background:url(../default/images/tree/check.png) no-repeat;}\n.tree ul { background:#FFF;}\n.tree li a, .tree li span { color:#2d3f00;}\n.tree .hover { background:#f6f6f6;}\n.tree .selected { background:#d0fc68;}\n/* Accordion */\n.accordion .accordionHeader, .accordion .accordionHeader h2, .accordion .accordionHeader h2 span { color:#2d3f00; background:url(../green/images/accordion/accordion.png);}\n.accordion { border-color:#8abb12; background:#FFF;}\n.accordion .accordionHeader { background-color:#eaf4ff;}\n.accordion .accordionContent { border-color:#8abb12;}\n\n/* Grid */\n.panelBar, .toolBar li.hover .buttonDisabled, .toolBar li.hover .buttonDisabled span, .toolBar .buttonDisabled, .toolBar .buttonDisabled span,\n.toolBar li.hover, .toolBar li.hover a, .toolBar li.hover span, .toolBar span,\n.pagination, .pagination li.hover, .pagination li.hover a, .pagination li span,\n.pagination li.disabled span span,\n.panelBar .line, .pagination li.jumpto, .pagination li.jumpto .goto { background:url(../green/images/grid/grid.png) no-repeat;}\n\n.panelBar { border-color:#8abb12; background-color:#efefef;}\n\n.grid .gridHeader { background:#EEE;}\n.grid { background:#FFF;}\n.grid table { border-color:#d0d0d0;}\n.grid .gridHeader, .grid .gridHeader th { border-color:#d0d0d0; background:#f0eff0 url(../default/images/grid/tableth.png) repeat-x;}\n.grid table th div { border-left-color:#EEE; border-right-color:#d0d0d0;}\n.grid table td { border-color:#ededed;}\n\n.grid .resizeMarker, .grid .resizeProxy { background:url(../default/images/grid/resizeCol.png) repeat-y;}\n\n.grid .gridRowBg { background:#f7f7f7;}\n.grid .hover { background:#f6f6f6;}\n.grid .selected { border-color:#C00; background:#7cc5e5;}\n.grid .error{background:#fb7e81;}\n\n/* ProgressBar */\n.progressBar { border:solid 2px #86a5ad; background:#FFF url(../default/images/progressBar/progressBar_m.gif) no-repeat 10px 10px;}\n\n/* ----------------------------------------------------------------- Form */\n/* TextInput */\n.textInput, input.focus, input.required, input.error, input.readonly, input.disabled,\ntextarea.focus, textarea.required, textarea.error, textarea.readonly, textarea.disabled { background:url(../default/images/form/input_bg.png) no-repeat scroll;}\n\n.textInput, .textArea { border-color:#a2bac0 #b8d0d6 #b8d0d6 #a2bac0; background-color:#FFF;}\ninput.required, textarea.required { border-color:#a2bac0 #b8d0d6 #b8d0d6 #a2bac0; background-color:#FFF;}\ninput.error, textarea.error { border-color:#F80C11 #FB7E81 #FB7E81 #F80C11;}\ninput.focus, textarea.focus { border-color:#64aabc #a9d7e3 #a9d7e3 #64aabc; background-color:#f8fafc;}\ninput.readonly, textarea.readonly { border-color:#9eabb3 #d5dbdf #d5dbdf #9eabb3; background-color:#F6F6F6;}\ninput.disabled, textarea.disabled { border-color:#9eabb3 #d5dbdf #d5dbdf #9eabb3; background-color:#F6F6F6;}\n\n.inputButton, .inputDateButton { background:url(../default/images/form/input_bt.png) no-repeat;}\n\n/* Button */\n.button, .button span,\n.buttonDisabled, .buttonDisabled span,\n.buttonActive, .buttonActive span,\n.button .buttonContent, .buttonHover, .buttonHover .buttonContent,\n.buttonActive .buttonContent, .buttonActiveHover, .buttonActiveHover .buttonContent,\n.buttonDisabled .buttonContent { background:url(../green/images/button/button_s.png) no-repeat;}\n\n.button span, .buttonDisabled span, .buttonActive span,\n.button .buttonContent, .buttonHover, .buttonHover .buttonContent,\n.buttonActive .buttonContent, .buttonDisabled .buttonContent,\n.button button, .buttonHover button,\n.buttonActive button, .buttonDisabled button { color:#2d3f00;}\n\n.buttonDisabled span, .buttonDisabled:hover span,\n.buttonDisabled button { color:#999;}\n\n/* ----------------------------------------------------------------- Pages */\n/* Layout */\nbody, #splitBar { background:#cdef7d;}\n#splitBarProxy { border-color:#c0c0c0; background:#CCC;}\n\n#header, #header .headerNav { background:url(../green/images/header_bg.png) repeat-x;}\n#header { background-color:#5b9700;}\n#header .logo { background:url(../default/images/logo.png) no-repeat;}\n#header .nav li { float:left; margin-left:-1px; padding:0 8px; line-height:11px; background:url(../green/images/listLine.png) no-repeat;}\n#header .nav li a { color:#FFF;}\n#header .themeList li div { background:url(../default/images/themeButton.png) no-repeat;}\n\n.toggleCollapse, .toggleCollapse div { background:url(../green/images/layout/toggleSidebar.png) no-repeat;}\n.toggleCollapse { border-style:solid; border-width:1px 1px 0 1px; border-color:#8abb12; background-color:#e7eff0;}\n.toggleCollapse h2 { color:#2d3f00;}\n#sidebar_s .collapse { border:solid 1px #8abb12; background:#b8e844;}\n#sidebar_s .collapse:hover { background:#cdef7d;}\n\n#taskbar, #taskbar li, #taskbar li .taskbutton { background:url(../default/images/layout/taskbar.png) no-repeat;}\n#taskbar .close, #taskbar .restore, #taskbar .minimize { background:url(../default/images/layout/taskbar_icon.png) no-repeat;}\n#taskbar li .taskbutton span { color:#FFF;}\n#taskbar .taskbarLeft, #taskbar .taskbarRight { background:url(../default/images/layout/taskbar_control.png) no-repeat;}\n\n/* Menu */\n#navMenu, #navMenu li, #navMenu li.selected a, #navMenu li.selected span { background:url(../default/images/menu/menu.png) no-repeat;}\n#navMenu { background-color:#1871dd;}\n#navMenu li a, #navMenu li span { color:#FFF;}\n#navMenu li.selected span { color:#000;}\n\n/* Homepage */\n.sidebarContent { display:block; overflow:auto; height:500px; border:solid 1px #86B4EC; background:#FFF;}\n.accountInfo { display:block; overflow:hidden; height:60px; padding:0 10px; background:url(../default/images/account_info_bg.png) repeat-x}\n.accountInfo p { padding:8px 0 0 0; line-height:19px;}\n.accountInfo p span { font-size:14px; font-weight:bold;}\n.accountInfo .right { float:right; padding-right:10px; text-align:right;}\n.accountInfo .alertInfo { float:right; width:300px; height:60px; padding-left:10px; border-left:solid 1px #accdf4;}\n.accountInfo .alertInfo h2 { padding:8px 0; line-height:17px;}\n.accountInfo .alertInfo a { padding:6px 0 0 0; line-height:21px;}\n\n/* Pages */\n.pageForm .inputInfo { color:#999;}\n\n/* Pages dialog */\n.dialog .pageHeader, .dialog .pageContent { border-color:#8ABB12;}\n.dialog .pageContent .pageFormContent { border-color:#8ABB12; background:#FFF;}\n\n/* Pages default */\n.page .pageHeader, .formBar { border-color:#8ABB12; background:#8abb12 url(../green/images/pageHeader_bg.png) repeat-x;}\n.page .searchBar label { color:#183152;}\n\n/* Pages Form */\n.formBar { border-color:#8ABB12;}\n.divider { border-color:#8ABB12;}\n\n/* combox */\n.combox .select a  { color:#183152; }\n.comboxop { border-color:#B8D0D6; }\n.combox, .combox div, .combox div a { background:url(../default/images/search-bg.gif) no-repeat; }\n"
  },
  {
    "path": "themes/miscDrag/screen.css",
    "content": ".miscSortDrag dt {position: fixed; top: 10px; left:10px; width: 160px; margin-right: 10px;}\n.miscSortDrag dt fieldset, .miscSortDrag dt fieldset legend {border: 1px dashed blue;}\n.miscSortDrag fieldset legend {font-size: 14px; padding: 3px 8px;}\n.miscSortDrag dt fieldset .itemBox{height: 400px; overflow-y: auto;}\n.miscSortDrag dt .sortDragPlaceholder, .miscSortDrag dt .dragItem .close, .miscSortDrag dt .dragItem .ctl-label {display: none}\n.miscSortDrag dt .dragItem {border:1px solid #B8D0D6;padding:5px;margin:3px;display: block; cursor: move; }\n.miscSortDrag dt:after{content:\" \"; display: block; clear: both;}\n\n.miscSortDrag dd {margin-left: 170px;}\n.miscSortDrag dd fieldset, .miscSortDrag dd fieldset legend {border: 4px dashed red; background: #00050e; color:#fff; padding: 8px 20px;}\n.miscSortDrag dd .title{text-align: center;color:#fff; margin: 10px 0; padding: 5px; border-bottom: solid 1px #eee}\n.miscSortDrag dd .sortDrag{width: 100%;height:280px;border:1px solid #e66;overflow-y: auto}\n.miscSortDrag dd .sortDrag .dragItem {border:1px solid #B8D0D6;padding: 0 5px;margin:3px; line-height:20px; display: block; position: relative; text-align: left; cursor: move;}\n.miscSortDrag dd .sortDrag .dragItem .close{width:16px;height:16px; font-size:16px; display:block;cursor:pointer;border:1px solid #CCC;text-align:center; position: absolute; top:2px; right:2px}\n.miscSortDrag dd .sortDrag .ctl-label{position: absolute; top:0px; right:22px; line-height: 20px;}\n"
  },
  {
    "path": "themes/purple/style.css",
    "content": "@charset \"utf-8\";\n/*\n1.改模板的颜色.panel .panelContent { border-color:#}全部为目标颜色\n2.改body的background\n3.改图片的路径\n4.改 #sidebar_s .collapse和#sidebar_s .collapse:hover颜色\n5.改.tree .selected { background:#d0fc68;}颜色\n*/\n/* Icon */\n.tabsHeader li.main a span span, #taskbar li .taskbutton span { background:url(../default/images/icon.png) no-repeat;}\n\n/* Panel */\n.panel,\n.panel .panelHeader, .panel .panelHeaderContent, .panel .panelHeaderContent h1,\n.panel .panelFooter, .panel .panelFooterContent { background:url(../purple/images/panel/panel.png) no-repeat;}\n.panel .expandable, .panel .collapsable { background:url(../purple/images/panel/panel_icon.png) no-repeat;}\n.panel .panelHeaderContent h1 { color:#2d3f00; }\n.panel .panelContent { border-color:#e29de2; background:#F9E8F9;}\n\n.panel .grid { border-color:#E29DE2;}\n\n/* Tabs */\n.tabs, .tabsHeader, .tabsHeaderContent,\n.tabs .tabsHeader ul, .tabs .tabsHeader li, .tabs .tabsHeader li a, .tabs .tabsHeader li span,\n.tabs .tabsFooter, .tabs .tabsFooterContent { background:url(../purple/images/tabs/tabspanel.png) no-repeat;}\n\n.tabs .tabsHeader li a { color:#2d3f00;}\n.tabs .tabsHeader li span { color:#2d3f00;}\n.tabs .tabsContent { border-color:#e29de2; background:#F9E8F9;}\n.tabs .icon-collapse { background: url(./images/panel/panel_icon.png) no-repeat; }\n\n/* TabsPage */\n.tabsPage .tabsPageHeader, .tabsPage .tabsPageHeader li, .tabsPage .tabsPageHeader li a, .tabsPage .tabsPageHeader li span { background:url(../purple/images/tabs/tabspage.png) no-repeat;}\n.tabsPage .tabsPageHeader { background-color:#e9f0f2;}\n.tabsPage .tabsPageHeader { border-color:#e29de2;}\n.tabsPage .tabsPageHeader li a { color:#2d3f00;}\n.tabsPage .tabsPageHeader li .close,\n.tabsPage .tabsPageHeader li.hover .close,\n.tabsPage .tabsPageHeader li.selected .close { background:url(../purple/images/tabs/tabspage_icon.png) no-repeat;}\n.tabsPage .tabsLeft, .tabsPage .tabsRight, .tabsPage .tabsMore { background:url(../purple/images/tabs/tabscontrol.png) no-repeat;}\n.tabsPage .tabsMoreList { border-color:#E29DE2; background:#FFF;}\n.tabsPage .tabsPageHeader .home_icon { background:url(../default/images/icon.png) no-repeat;}\n.tabsPage .tabsPageContent { border-color:#e29de2; background:#FFF;}\n\n/* Alert */\n.alert .alertFooter, .alert .alertFooter_r, .alert .alertFooter_c { background:url(../purple/images/alert/alertpanel.png) no-repeat;}\n.alert .alertContent { border-color:#b8d0d6; background:#eef4f5;}\n.alert .warn .alertInner { border-color:#e83e09; background:#fefacf;}\n.alert .error .alertInner { border-color:#e50000; background:#fefacf;}\n.alert .correct .alertInner, .alert .info .alertInner { border-color:#b8d0d6; background:#fefacf;}\n.alert .confirm .alertInner { border-color:#b8d0d6; background:#fefacf;}\n.alert h1 { background:url(../default/images/alert/alertpanel_icon.png) no-repeat;}\n\n/* Dialog */\n.dialog .dialogHeader, .dialog .dialogHeader_r, .dialog .dialogHeader_c,\n.dialog .dialogFooter, .dialog .dialogFooter_r, .dialog .dialogFooter_c { background:url(../purple/images/dialog/dialogpanel.png) no-repeat;}\n.dialog .dialogHeader h1, .dialog .dialogHeader .close, .dialog .dialogHeader .maximize, .dialog .dialogHeader .restore, .dialog .dialogHeader .minimize, .resizable_f_r { background:url(../purple/images/dialog/dialogpanel_icon.png) no-repeat;}\n.dialog .dialogHeader h1 { color:#2d3f00;}\n.dialog .dialogContent { border-color:#e29de2; background:#F9E8F9;}\n\n.resizable { border-color:#3b6200; background:#aae31d;}\n\n/* Shadow */\n.shadow .shadow_h_l { background:url(../default/images/shadow/shadow_h_l.png) no-repeat;}\n.shadow .shadow_h_r { background:url(../default/images/shadow/shadow_h_r.png) no-repeat;}\n.shadow .shadow_h_c { background:url(../default/images/shadow/shadow_h_c.png) repeat-x;}\n.shadow .shadow_c_l { background:url(../default/images/shadow/shadow_c_l.png) repeat-y;}\n.shadow .shadow_c_r { background:url(../default/images/shadow/shadow_c_r.png) repeat-y;}\n.shadow .shadow_c_c { background:url(../default/images/shadow/shadow_c_c.png) repeat;}\n.shadow .shadow_f_l { background:url(../default/images/shadow/shadow_f_l.png) no-repeat;}\n.shadow .shadow_f_r { background:url(../default/images/shadow/shadow_f_r.png) no-repeat;}\n.shadow .shadow_f_c { background:url(../default/images/shadow/shadow_f_c.png) repeat-x;}\n\n/* Tree */\n.tree div div { background:url(../default/images/tree/tree.png) no-repeat;}\n.tree .folder_collapsable, .tree .folder_expandable, .tree .file {background:transparent url(../default/images/tree/folder.png) no-repeat scroll 0 0;}\n.tree .checked, .tree .unchecked, .tree .indeterminate { background:url(../default/images/tree/check.png) no-repeat;}\n.tree ul { background:#FFF;}\n.tree li a, .tree li span { color:#2d3f00;}\n.tree .hover { background:#f6f6f6;}\n.tree .selected { background:#F9E8F9;}\n/* Accordion */\n.accordion .accordionHeader, .accordion .accordionHeader h2, .accordion .accordionHeader h2 span { color:#2d3f00; background:url(../purple/images/accordion/accordion.png);}\n.accordion { border-color:#e29de2; background:#FFF;}\n.accordion .accordionHeader { background-color:#eaf4ff;}\n.accordion .accordionContent { border-color:#e29de2;}\n\n/* Grid */\n.panelBar, .toolBar li.hover .buttonDisabled, .toolBar li.hover .buttonDisabled span, .toolBar .buttonDisabled, .toolBar .buttonDisabled span,\n.toolBar li.hover, .toolBar li.hover a, .toolBar li.hover span, .toolBar span,\n.panelBar .pagination, .panelBar .pagination li.hover, .panelBar .pagination li.hover a, .panelBar .pagination li span,\n.panelBar .pagination li.disabled span span,\n.panelBar .line, .panelBar .pagination li.jumpto, .panelBar .pagination li.jumpto .goto { background:url(../purple/images/grid/grid.png) no-repeat;}\n\n.panelBar { border-color:#e29de2; background-color:#efefef;}\n\n.grid .gridHeader { background:#EEE;}\n.grid { background:#FFF;}\n.grid table { border-color:#d0d0d0;}\n.grid .gridHeader, .grid .gridHeader th { border-color:#d0d0d0; background:#f0eff0 url(../default/images/grid/tableth.png) repeat-x;}\n.grid table th div { border-left-color:#EEE; border-right-color:#d0d0d0;}\n.grid table td { border-color:#ededed;}\n\n.grid .resizeMarker, .grid .resizeProxy { background:url(../default/images/grid/resizeCol.png) repeat-y;}\n\n.grid .gridRowBg { background:#f7f7f7;}\n.grid .hover { background:#f6f6f6;}\n.grid .selected { border-color:#C00; background:#e29de2;}\n.grid .error{background:#fb7e81;}\n\n/* ProgressBar */\n.progressBar { border:solid 2px #86a5ad; background:#FFF url(../default/images/progressBar/progressBar_m.gif) no-repeat 10px 10px;}\n\n/* ----------------------------------------------------------------- Form */\n/* TextInput */\n.textInput, input.focus, input.required, input.error, input.readonly, input.disabled,\ntextarea.focus, textarea.required, textarea.error, textarea.readonly, textarea.disabled { background:url(../default/images/form/input_bg.png) no-repeat scroll;}\n\n.textInput, .textArea { border-color:#a2bac0 #b8d0d6 #b8d0d6 #a2bac0; background-color:#FFF;}\ninput.required, textarea.required { border-color:#a2bac0 #b8d0d6 #b8d0d6 #a2bac0; background-color:#FFF;}\ninput.error, textarea.error { border-color:#F80C11 #FB7E81 #FB7E81 #F80C11;}\ninput.focus, textarea.focus { border-color:#64aabc #a9d7e3 #a9d7e3 #64aabc; background-color:#f8fafc;}\ninput.readonly, textarea.readonly { border-color:#9eabb3 #d5dbdf #d5dbdf #9eabb3; background-color:#F6F6F6;}\ninput.disabled, textarea.disabled { border-color:#9eabb3 #d5dbdf #d5dbdf #9eabb3; background-color:#F6F6F6;}\n\n.inputButton, .inputDateButton { background:url(../default/images/form/input_bt.png) no-repeat;}\n\n/* Button */\n.button, .button span,\n.buttonDisabled, .buttonDisabled span,\n.buttonActive, .buttonActive span,\n.button .buttonContent, .buttonHover, .buttonHover .buttonContent,\n.buttonActive .buttonContent, .buttonActiveHover, .buttonActiveHover .buttonContent,\n.buttonDisabled .buttonContent { background:url(../purple/images/button/button_s.png) no-repeat;}\n\n.button span, .buttonDisabled span, .buttonActive span,\n.button .buttonContent, .buttonHover, .buttonHover .buttonContent,\n.buttonActive .buttonContent, .buttonDisabled .buttonContent,\n.button button, .buttonHover button,\n.buttonActive button, .buttonDisabled button { color:#2d3f00;}\n\n.buttonDisabled span, .buttonDisabled:hover span,\n.buttonDisabled button { color:#999;}\n\n/* ----------------------------------------------------------------- Pages */\n/* Layout */\nbody, #splitBar { background:#F9E8F9;}\n#splitBarProxy { border-color:#c0c0c0; background:#CCC;}\n\n#header, #header .headerNav { background:url(../purple/images/header_bg.png) repeat-x;}\n#header { background-color:#5b9700;}\n#header .logo { background:url(../default/images/logo.png) no-repeat;}\n#header .nav li { float:left; margin-left:-1px; padding:0 8px; line-height:11px; background:url(../purple/images/listLine.png) no-repeat;}\n#header .nav li a { color:#FFF;}\n#header .themeList li div { background:url(../default/images/themeButton.png) no-repeat;}\n\n.toggleCollapse, .toggleCollapse div { background:url(../purple/images/layout/toggleSidebar.png) no-repeat;}\n.toggleCollapse { border-style:solid; border-width:1px 1px 0 1px; border-color:#e29de2; background-color:#e7eff0;}\n.toggleCollapse h2 { color:#2d3f00;}\n#sidebar_s .collapse { border:solid 1px #e29de2; background:#F9E8F9;}\n#sidebar_s .collapse:hover { background:#F9E8F9;}\n\n#taskbar, #taskbar li, #taskbar li .taskbutton { background:url(../default/images/layout/taskbar.png) no-repeat;}\n#taskbar .close, #taskbar .restore, #taskbar .minimize { background:url(../default/images/layout/taskbar_icon.png) no-repeat;}\n#taskbar li .taskbutton span { color:#FFF;}\n#taskbar .taskbarLeft, #taskbar .taskbarRight { background:url(../default/images/layout/taskbar_control.png) no-repeat;}\n\n/* Menu */\n#navMenu, #navMenu li, #navMenu li.selected a, #navMenu li.selected span { background:url(../default/images/menu/menu.png) no-repeat;}\n#navMenu { background-color:#1871dd; }\n#navMenu li a, #navMenu li span { color:#FFF; }\n#navMenu li.selected span { color:#000; }\n\n/* Homepage */\n.sidebarContent { display:block; overflow:auto; height:500px; border:solid 1px #86B4EC; background:#FFF;}\n.accountInfo { display:block; overflow:hidden; height:60px; padding:0 10px; background:url(../default/images/account_info_bg.png) repeat-x}\n.accountInfo p { padding:8px 0 0 0; line-height:19px;}\n.accountInfo p span { font-size:14px; font-weight:bold;}\n.accountInfo .right { float:right; padding-right:10px; text-align:right;}\n.accountInfo .alertInfo { float:right; width:300px; height:60px; padding-left:10px; border-left:solid 1px #accdf4;}\n.accountInfo .alertInfo h2 { padding:8px 0; line-height:17px;}\n.accountInfo .alertInfo a { padding:6px 0 0 0; line-height:21px;}\n\n/* Pages */\n.pageForm .inputInfo { color:#999;}\n\n/* Pages dialog */\n.dialog .pageHeader, .dialog .pageContent { border-color:#E29DE2;}\n.dialog .pageContent .pageFormContent { border-color:#E29DE2; background:#FFF;}\n\n/* Pages default */\n.page .pageHeader, .formBar { border-color:#E29DE2; background:#ebf0f5 url(../default/images/pageHeader_bg.png) repeat-x;}\n.page .searchBar label { color:#183152;}\n\n/* Pages Form */\n.formBar { border-color:#E29DE2;}\n.divider { border-color:#E29DE2;}\n\n/* combox */\n.combox .select a  { color:#183152; }\n.comboxop { border-color:#B8D0D6; }\n.combox, .combox div, .combox div a { background:url(../default/images/search-bg.gif) no-repeat; }\n"
  },
  {
    "path": "themes/silver/style.css",
    "content": "@charset \"utf-8\";\n\n/* Icon */\n.tabsHeader li.main a span span, #taskbar li .taskbutton span { background:url(../default/images/icon.png) no-repeat;}\n\n/* Panel */\n.panel,\n.panel .panelHeader, .panel .panelHeaderContent, .panel .panelHeaderContent h1,\n.panel .panelFooter, .panel .panelFooterContent { background:url(./images/panel/panel.png) no-repeat;}\n.panel .expandable, .panel .collapsable { background:url(./images/panel/panel_icon.png) no-repeat;}\n.panel .panelHeaderContent h1 { color:#183152; }\n.panel .panelContent { border-color:#C1C1C1; background:#eef4f5;}\n\n.panel .grid { border-color:#C1C1C1;}\n\n/* Tabs */\n.tabs, .tabsHeader, .tabsHeaderContent,\n.tabs .tabsHeader ul, .tabs .tabsHeader li, .tabs .tabsHeader li a, .tabs .tabsHeader li span,\n.tabs .tabsFooter, .tabs .tabsFooterContent { background:url(./images/tabs/tabspanel.png) no-repeat;}\n\n.tabs .tabsHeader li a { color:#03408b;}\n.tabs .tabsHeader li span { color:#183152;}\n.tabs .tabsContent { border-color:#C1C1C1; background:#eef4f5;}\n.tabs .icon-collapse { background: url(./images/panel/panel_icon.png) no-repeat; }\n\n/* TabsPage */\n.tabsPage .tabsPageHeader, .tabsPage .tabsPageHeader li, .tabsPage .tabsPageHeader li a, .tabsPage .tabsPageHeader li span { background:url(./images/tabs/tabspage.png) no-repeat;}\n.tabsPage .tabsPageHeader { background-color:#e9f0f2;}\n.tabsPage .tabsPageHeader { border-color:#C1C1C1;}\n.tabsPage .tabsPageHeader li a { color:#183152;}\n.tabsPage .tabsPageHeader li .close,\n.tabsPage .tabsPageHeader li.hover .close,\n.tabsPage .tabsPageHeader li.selected .close { background:url(./images/tabs/tabspage_icon.png) no-repeat;}\n.tabsPage .tabsLeft, .tabsPage .tabsRight, .tabsPage .tabsMore { background:url(./images/tabs/tabscontrol.png) no-repeat;}\n.tabsPage .tabsMoreList { border-color:#C1C1C1; background:#FFF;}\n.tabsPage .tabsPageHeader .home_icon { background:url(../default/images/icon.png) no-repeat;}\n.tabsPage .tabsPageContent { border-color:#C1C1C1; background:#FFF;}\n\n/* Alert */\n.alert .alertFooter, .alert .alertFooter_r, .alert .alertFooter_c { background:url(./images/alert/alertpanel.png) no-repeat;}\n.alert .alertContent { border-color:#C1C1C1; background:#eef4f5;}\n.alert .warn .alertInner { border-color:#e83e09; background:#fefacf;}\n.alert .error .alertInner { border-color:#e50000; background:#fefacf;}\n.alert .correct .alertInner, .alert .info .alertInner { border-color:#C1C1C1; background:#fefacf;}\n.alert .confirm .alertInner { border-color:#C1C1C1; background:#fefacf;}\n.alert h1 { border-color:#CCC; background:url(./images/alert/alertpanel_icon.png) no-repeat;}\n\n/* Dialog */\n.dialog .dialogHeader, .dialog .dialogHeader_r, .dialog .dialogHeader_c,\n.dialog .dialogFooter, .dialog .dialogFooter_r, .dialog .dialogFooter_c { background:url(./images/dialog/dialogpanel.png) no-repeat;}\n.dialog .dialogHeader h1, .dialog .dialogHeader .close, .dialog .dialogHeader .maximize, .dialog .dialogHeader .restore, .dialog .dialogHeader .minimize, .resizable_f_r { background:url(./images/dialog/dialogpanel_icon.png) no-repeat;}\n.dialog .dialogHeader h1 { color:#183152;}\n.dialog .dialogContent { border-color:#C1C1C1; background:#eef4f5;}\n\n.resizable { border-color:#081629; background:#c3d7dc;}\n\n/* Shadow */\n.shadow .shadow_h_l { background:url(./images/shadow/shadow_h_l.png) no-repeat;}\n.shadow .shadow_h_r { background:url(./images/shadow/shadow_h_r.png) no-repeat;}\n.shadow .shadow_h_c { background:url(./images/shadow/shadow_h_c.png) repeat-x;}\n.shadow .shadow_c_l { background:url(./images/shadow/shadow_c_l.png) repeat-y;}\n.shadow .shadow_c_r { background:url(./images/shadow/shadow_c_r.png) repeat-y;}\n.shadow .shadow_c_c { background:url(./images/shadow/shadow_c_c.png) repeat;}\n.shadow .shadow_f_l { background:url(./images/shadow/shadow_f_l.png) no-repeat;}\n.shadow .shadow_f_r { background:url(./images/shadow/shadow_f_r.png) no-repeat;}\n.shadow .shadow_f_c { background:url(./images/shadow/shadow_f_c.png) repeat-x;}\n\n/* Tree */\n.tree div div { background:url(./images/tree/tree.png) no-repeat;}\n.tree .folder_collapsable, .tree .folder_expandable, .tree .file { background:url(./images/tree/folder.png) no-repeat;}\n.tree .checked, .tree .unchecked, .tree .indeterminate { background:url(./images/tree/check.png) no-repeat;}\n.tree ul { background:#FFF;}\n.tree li a, .tree li span { color:#183152;}\n.tree .hover { background:#f5f5f5;}\n.tree .selected { background-color:#e8edf3;}\n\n/* Accordion */\n.accordion .accordionHeader, .accordion .accordionHeader h2, .accordion .accordionHeader h2 span { color:#183152; background:url(./images/accordion/accordion.png);}\n.accordion { border-color:#C1C1C1; background:#FFF;}\n.accordion .accordionHeader { background-color:#eaf4ff;}\n.accordion .accordionContent { border-color:#C1C1C1;}\n\n/* Grid */\n.panelBar, .toolBar li.hover .buttonDisabled, .toolBar li.hover .buttonDisabled span, .toolBar .buttonDisabled, .toolBar .buttonDisabled span,\n.toolBar li.hover, .toolBar li.hover a, .toolBar li.hover span, .toolBar span,\n.pagination, .pagination li.hover, .pagination li.hover a, .pagination li span,\n.pagination li.disabled span span,\n.panelBar .line, .pagination li.jumpto, .pagination li.jumpto .goto { background:url(./images/grid/grid.png) no-repeat;}\n\n.panelBar { border-color:#C1C1C1; background-color:#efefef;}\n\n.grid .gridHeader { background:#EEE;}\n.grid { background:#FFF;}\n.grid table { border-color:#d0d0d0;}\n.grid .gridHeader, .grid .gridHeader th { border-color:#d0d0d0; background:#f0eff0 url(./images/grid/tableth.png) repeat-x;}\n.grid table th div { border-left-color:#EEE; border-right-color:#d0d0d0;}\n.grid table td { border-color:#ededed;}\n\n.grid .resizeMarker, .grid .resizeProxy { background:url(./images/grid/resizeCol.png) repeat-y;}\n\n.grid .gridHeader th.hover, .grid .gridHeader th.thSelected { border-color:#aaccf6; }\n.grid .gridTbody .gridRowBg { background:#f7f7f7;}\n.grid .gridTbody .gridRow { border-color:#ededed;}\n.grid .gridTbody .gridRow td.tdLast { border-color:#ededed;}\n.grid .gridTbody .hover { border-color:#dddddd; background:#f5f5f5;}\n.grid .gridTbody .hover .tdSelected { background:#f5f5f5;}\n.grid .gridTbody .selected { border-color:#C1C1C1; background:#7cc5e5;}\n.grid .gridTbody .selected .tdSelected { background:#e8edf3;}\n.grid .error{background:#fb7e81;}\n\n/* ProgressBar */\n.progressBar { border:solid 2px #86a5ad; background:#FFF url(./images/progressBar/progressBar_m.gif) no-repeat 10px 10px;}\n\n/* ----------------------------------------------------------------- Form */\n/* TextInput */\n.textInput, input.focus, input.required, input.error, input.readonly, input.disabled,\ntextarea.focus, textarea.required, textarea.error, textarea.readonly, textarea.disabled { background:url(./images/form/input_bg.png) no-repeat scroll;}\n\n.textInput, .textArea { border-color:#a2bac0 #C1C1C1 #C1C1C1 #a2bac0; background-color:#FFF;}\ninput.required, textarea.required { border-color:#a2bac0 #C1C1C1 #C1C1C1 #a2bac0; background-color:#FFF;}\ninput.error, textarea.error { border-color:#F80C11 #FB7E81 #FB7E81 #F80C11;}\ninput.focus, textarea.focus { border-color:#64aabc #a9d7e3 #a9d7e3 #64aabc; background-color:#f8fafc;}\ninput.readonly, textarea.readonly { border-color:#9eabb3 #d5dbdf #d5dbdf #9eabb3; background-color:#F6F6F6;}\ninput.disabled, textarea.disabled { border-color:#9eabb3 #d5dbdf #d5dbdf #9eabb3; background-color:#F6F6F6;}\n\n.inputButton, .inputDateButton { background:url(./images/form/input_bt.png) no-repeat;}\n\n/* Button */\n.button, .button span,\n.buttonDisabled, .buttonDisabled span,\n.buttonActive, .buttonActive span,\n.button .buttonContent, .buttonHover, .buttonHover .buttonContent,\n.buttonActive .buttonContent, .buttonActiveHover, .buttonActiveHover .buttonContent,\n.buttonDisabled .buttonContent { background:url(./images/button/button_s.png) no-repeat;}\n\n.button span, .buttonDisabled span, .buttonActive span,\n.button .buttonContent, .buttonHover, .buttonHover .buttonContent,\n.buttonActive .buttonContent, .buttonDisabled .buttonContent,\n.button button, .buttonHover button,\n.buttonActive button, .buttonDisabled button { color:#183152;}\n\n.buttonDisabled span, .buttonDisabled:hover span,\n.buttonDisabled button { color:#999;}\n\n/* ----------------------------------------------------------------- Pages */\n/* Layout */\nbody, #splitBar { background:#EDEDED;}\n#splitBarProxy { border-color:#c0c0c0; background:#CCC;}\n\n#header, #header .headerNav { background:url(./images/header_bg.png) repeat-x;}\n#header { background-color:#102c4a;}\n#header .logo { background:url(../default/images/logo.png) no-repeat;}\n#header .nav li { float:left; margin-left:-1px; padding:0 8px; line-height:11px; background:url(./images/listLine.png) no-repeat;}\n#header .nav li a { color:#fff;}\n#header .themeList li div { background:url(../default/images/themeButton.png) no-repeat;}\n.toggleCollapse, .toggleCollapse div { background:url(./images/layout/toggleSidebar.png) no-repeat;}\n.toggleCollapse { border-style:solid; border-width:1px 1px 0 1px; border-color:#C1C1C1; background-color:#e7eff0;}\n.toggleCollapse h2 { color:#183152;}\n#sidebar_s .collapse { border:solid 1px #C1C1C1; background:#eff5f6;}\n#sidebar_s .collapse:hover { background:#f5f9fa;}\n\n#taskbar, #taskbar li, #taskbar li .taskbutton { background:url(./images/layout/taskbar.png) no-repeat;}\n#taskbar .close, #taskbar .restore, #taskbar .minimize { background:url(./images/layout/taskbar_icon.png) no-repeat;}\n#taskbar li .taskbutton span { color:#FFF;}\n#taskbar .taskbarLeft, #taskbar .taskbarRight { background:url(./images/layout/taskbar_control.png) no-repeat;}\n\n/* Menu */\n#navMenu, #navMenu li, #navMenu li.selected a, #navMenu li.selected span { background:url(../default/images/menu/menu.png) no-repeat;}\n#navMenu { background-color:#1871dd; }\n#navMenu li a, #navMenu li span { color:#FFF; }\n#navMenu li.selected span { color:#000; }\n\n/* Homepage */\n.sidebarContent { display:block; overflow:auto; height:500px; border:solid 1px #86B4EC; background:#FFF;}\n.accountInfo { display:block; overflow:hidden; height:60px; padding:0 10px; background:url(./images/account_info_bg.png) repeat-x}\n.accountInfo p { padding:8px 0 0 0; line-height:19px;}\n.accountInfo p span { font-size:14px; font-weight:bold;}\n.accountInfo .right { float:right; padding-right:10px; text-align:right;}\n.accountInfo .alertInfo { float:right; width:300px; height:60px; padding-left:10px; border-left:solid 1px #accdf4;}\n.accountInfo .alertInfo h2 { padding:8px 0; line-height:17px;}\n.accountInfo .alertInfo a { padding:6px 0 0 0; line-height:21px;}\n\n/* Pages */\n.pageForm .inputInfo { color:#999;}\n\n/* Pages dialog */\n.dialog .pageHeader, .dialog .pageContent { border-color:#C1C1C1;}\n.dialog .pageContent .pageFormContent { border-color:#C1C1C1; background:#FFF;}\n\n/* Pages default */\n.page .pageHeader, .pageForm .formBar { border-color:#C1C1C1; background:#ebf0f5 url(../default/images/pageHeader_bg.png) repeat-x;}\n.page .searchBar label { color:#183152;}\n\n/* Pages Form */\n.pageForm .formBar { border-color:#C1C1C1;}\n.divider { border-color:#C1C1C1;}\n\n/* combox */\n.combox .select a  { color:#183152; }\n.comboxop { border-color:#B8D0D6; }\n.combox, .combox div, .combox div a { background:url(../default/images/search-bg.gif) no-repeat; }\n"
  },
  {
    "path": "uploadify/Change Log.txt",
    "content": "Uploadify Change Log\nCopyright (c) 2012 by Reactive Apps, Ronnie Garcia\n\nv3.2\n- Added a new option for itemTemplate where you can create an HTML template for the items that are added to the queue\n\nv3.1.1\n- Fixed issue with incorrect queueLength\n\nv3.1.0\n- Switched to the preferred jQuery plugin pattern\n- Added references to all elements\n- Removed flash based image\n- Added fallback method\n- Fixed onInit event\n- Added onDisable and onEnable events\n- Added SWFObject for flash detection\n- Added indication of cancelled files"
  },
  {
    "path": "uploadify/css/uploadify.css",
    "content": "/*\nUploadify\nCopyright (c) 2012 Reactive Apps, Ronnie Garcia\nReleased under the MIT License <http://www.opensource.org/licenses/mit-license.php> \n*/\n\n.uploadify {\n\tposition: relative;\n\tmargin-bottom: 1em;\n}\n.uploadify-button {\n\tbackground-color: #505050;\n\tbackground-image: linear-gradient(bottom, #505050 0%, #707070 100%);\n\tbackground-image: -o-linear-gradient(bottom, #505050 0%, #707070 100%);\n\tbackground-image: -moz-linear-gradient(bottom, #505050 0%, #707070 100%);\n\tbackground-image: -webkit-linear-gradient(bottom, #505050 0%, #707070 100%);\n\tbackground-image: -ms-linear-gradient(bottom, #505050 0%, #707070 100%);\n\tbackground-image: -webkit-gradient(\n\t\tlinear,\n\t\tleft bottom,\n\t\tleft top,\n\t\tcolor-stop(0, #505050),\n\t\tcolor-stop(1, #707070)\n\t);\n\tbackground-position: center top;\n\tbackground-repeat: no-repeat;\n\t-webkit-border-radius: 30px;\n\t-moz-border-radius: 30px;\n\tborder-radius: 30px;\n\tborder: 2px solid #808080;\n\tcolor: #FFF;\n\tfont: bold 12px Arial, Helvetica, sans-serif;\n\ttext-align: center;\n\ttext-shadow: 0 -1px 0 rgba(0,0,0,0.25);\n\twidth: 100%;\n}\n.uploadify-button span{line-height: inherit}\n.uploadify:hover .uploadify-button {\n\tbackground-color: #606060;\n\tbackground-image: linear-gradient(top, #606060 0%, #808080 100%);\n\tbackground-image: -o-linear-gradient(top, #606060 0%, #808080 100%);\n\tbackground-image: -moz-linear-gradient(top, #606060 0%, #808080 100%);\n\tbackground-image: -webkit-linear-gradient(top, #606060 0%, #808080 100%);\n\tbackground-image: -ms-linear-gradient(top, #606060 0%, #808080 100%);\n\tbackground-image: -webkit-gradient(\n\t\tlinear,\n\t\tleft bottom,\n\t\tleft top,\n\t\tcolor-stop(0, #606060),\n\t\tcolor-stop(1, #808080)\n\t);\n\tbackground-position: center bottom;\n}\n.uploadify-button.disabled {\n\tbackground-color: #D0D0D0;\n\tcolor: #808080;\n}\n.uploadify-queue {\n\tmargin-bottom: 1em;\n}\n.uploadify-queue-item {\n\tbackground-color: #F5F5F5;\n\t-webkit-border-radius: 3px;\n\t-moz-border-radius: 3px;\n\tborder-radius: 3px;\n\tfont: 11px Verdana, Geneva, sans-serif;\n\tmargin-top: 5px;\n\tmax-width: 350px;\n\tpadding: 10px;\n}\n.uploadify-error {\n\tbackground-color: #FDE5DD !important;\n}\n.uploadify-queue-item .cancel a {\n\tbackground: url('../img/uploadify-cancel.png') 0 0 no-repeat;\n\tfloat: right;\n\theight:\t16px;\n\ttext-indent: -9999px;\n\twidth: 16px;\n}\n.uploadify-queue-item.completed {\n\tbackground-color: #E5E5E5;\n}\n.uploadify-progress {\n\tbackground-color: #E5E5E5;\n\tmargin-top: 10px;\n\twidth: 100%;\n}\n.uploadify-progress-bar {\n\tbackground-color: #0099FF;\n\theight: 3px;\n\twidth: 1px;\n}"
  },
  {
    "path": "uploadify/scripts/jquery.uploadify.js",
    "content": "/*\nSWFObject v2.2 <http://code.google.com/p/swfobject/> \nis released under the MIT License <http://www.opensource.org/licenses/mit-license.php> \n*/\n;var swfobject=function(){var D=\"undefined\",r=\"object\",S=\"Shockwave Flash\",W=\"ShockwaveFlash.ShockwaveFlash\",q=\"application/x-shockwave-flash\",R=\"SWFObjectExprInst\",x=\"onreadystatechange\",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\\/(\\d+(\\.\\d+)?).*$/,\"$1\")):false,X=!+\"\\v1\",ag=[0,0,0],ab=null;\nif(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;\nX=false;ab=ab.replace(/^.*\\s+(\\S+\\s+\\S+$)/,\"$1\");ag[0]=parseInt(ab.replace(/^(.*)\\..*$/,\"$1\"),10);ag[1]=parseInt(ab.replace(/^.*\\.(.*)\\s.*$/,\"$1\"),10);\nag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,\"$1\"),10):0;}}else{if(typeof O.ActiveXObject!=D){try{var ad=new ActiveXObject(W);if(ad){ab=ad.GetVariable(\"$version\");\nif(ab){X=true;ab=ab.split(\" \")[1].split(\",\");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)];}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac};\n}(),k=function(){if(!M.w3){return;}if((typeof j.readyState!=D&&j.readyState==\"complete\")||(typeof j.readyState==D&&(j.getElementsByTagName(\"body\")[0]||j.body))){f();\n}if(!J){if(typeof j.addEventListener!=D){j.addEventListener(\"DOMContentLoaded\",f,false);}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState==\"complete\"){j.detachEvent(x,arguments.callee);\nf();}});if(O==top){(function(){if(J){return;}try{j.documentElement.doScroll(\"left\");}catch(X){setTimeout(arguments.callee,0);return;}f();})();}}if(M.wk){(function(){if(J){return;\n}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return;}f();})();}s(f);}}();function f(){if(J){return;}try{var Z=j.getElementsByTagName(\"body\")[0].appendChild(C(\"span\"));\nZ.parentNode.removeChild(Z);}catch(aa){return;}J=true;var X=U.length;for(var Y=0;Y<X;Y++){U[Y]();}}function K(X){if(J){X();}else{U[U.length]=X;}}function s(Y){if(typeof O.addEventListener!=D){O.addEventListener(\"load\",Y,false);\n}else{if(typeof j.addEventListener!=D){j.addEventListener(\"load\",Y,false);}else{if(typeof O.attachEvent!=D){i(O,\"onload\",Y);}else{if(typeof O.onload==\"function\"){var X=O.onload;\nO.onload=function(){X();Y();};}else{O.onload=Y;}}}}}function h(){if(T){V();}else{H();}}function V(){var X=j.getElementsByTagName(\"body\")[0];var aa=C(r);\naa.setAttribute(\"type\",q);var Z=X.appendChild(aa);if(Z){var Y=0;(function(){if(typeof Z.GetVariable!=D){var ab=Z.GetVariable(\"$version\");if(ab){ab=ab.split(\" \")[1].split(\",\");\nM.pv=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)];}}else{if(Y<10){Y++;setTimeout(arguments.callee,10);return;}}X.removeChild(aa);Z=null;H();\n})();}else{H();}}function H(){var ag=o.length;if(ag>0){for(var af=0;af<ag;af++){var Y=o[af].id;var ab=o[af].callbackFn;var aa={success:false,id:Y};if(M.pv[0]>0){var ae=c(Y);\nif(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa);}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;\nai.width=ae.getAttribute(\"width\")||\"0\";ai.height=ae.getAttribute(\"height\")||\"0\";if(ae.getAttribute(\"class\")){ai.styleclass=ae.getAttribute(\"class\");}if(ae.getAttribute(\"align\")){ai.align=ae.getAttribute(\"align\");\n}var ah={};var X=ae.getElementsByTagName(\"param\");var ac=X.length;for(var ad=0;ad<ac;ad++){if(X[ad].getAttribute(\"name\").toLowerCase()!=\"movie\"){ah[X[ad].getAttribute(\"name\")]=X[ad].getAttribute(\"value\");\n}}P(ai,ah,Y,ab);}else{p(ae);if(ab){ab(aa);}}}}}else{w(Y,true);if(ab){var Z=z(Y);if(Z&&typeof Z.SetVariable!=D){aa.success=true;aa.ref=Z;}ab(aa);}}}}}function z(aa){var X=null;\nvar Y=c(aa);if(Y&&Y.nodeName==\"OBJECT\"){if(typeof Y.SetVariable!=D){X=Y;}else{var Z=Y.getElementsByTagName(r)[0];if(Z){X=Z;}}}return X;}function A(){return !a&&F(\"6.0.65\")&&(M.win||M.mac)&&!(M.wk&&M.wk<312);\n}function P(aa,ab,X,Z){a=true;E=Z||null;B={success:false,id:X};var ae=c(X);if(ae){if(ae.nodeName==\"OBJECT\"){l=g(ae);Q=null;}else{l=ae;Q=X;}aa.id=R;if(typeof aa.width==D||(!/%$/.test(aa.width)&&parseInt(aa.width,10)<310)){aa.width=\"310\";\n}if(typeof aa.height==D||(!/%$/.test(aa.height)&&parseInt(aa.height,10)<137)){aa.height=\"137\";}j.title=j.title.slice(0,47)+\" - Flash Player Installation\";\nvar ad=M.ie&&M.win?\"ActiveX\":\"PlugIn\",ac=\"MMredirectURL=\"+O.location.toString().replace(/&/g,\"%26\")+\"&MMplayerType=\"+ad+\"&MMdoctitle=\"+j.title;if(typeof ab.flashvars!=D){ab.flashvars+=\"&\"+ac;\n}else{ab.flashvars=ac;}if(M.ie&&M.win&&ae.readyState!=4){var Y=C(\"div\");X+=\"SWFObjectNew\";Y.setAttribute(\"id\",X);ae.parentNode.insertBefore(Y,ae);ae.style.display=\"none\";\n(function(){if(ae.readyState==4){ae.parentNode.removeChild(ae);}else{setTimeout(arguments.callee,10);}})();}u(aa,ab,X);}}function p(Y){if(M.ie&&M.win&&Y.readyState!=4){var X=C(\"div\");\nY.parentNode.insertBefore(X,Y);X.parentNode.replaceChild(g(Y),X);Y.style.display=\"none\";(function(){if(Y.readyState==4){Y.parentNode.removeChild(Y);}else{setTimeout(arguments.callee,10);\n}})();}else{Y.parentNode.replaceChild(g(Y),Y);}}function g(ab){var aa=C(\"div\");if(M.win&&M.ie){aa.innerHTML=ab.innerHTML;}else{var Y=ab.getElementsByTagName(r)[0];\nif(Y){var ad=Y.childNodes;if(ad){var X=ad.length;for(var Z=0;Z<X;Z++){if(!(ad[Z].nodeType==1&&ad[Z].nodeName==\"PARAM\")&&!(ad[Z].nodeType==8)){aa.appendChild(ad[Z].cloneNode(true));\n}}}}}return aa;}function u(ai,ag,Y){var X,aa=c(Y);if(M.wk&&M.wk<312){return X;}if(aa){if(typeof ai.id==D){ai.id=Y;}if(M.ie&&M.win){var ah=\"\";for(var ae in ai){if(ai[ae]!=Object.prototype[ae]){if(ae.toLowerCase()==\"data\"){ag.movie=ai[ae];\n}else{if(ae.toLowerCase()==\"styleclass\"){ah+=' class=\"'+ai[ae]+'\"';}else{if(ae.toLowerCase()!=\"classid\"){ah+=\" \"+ae+'=\"'+ai[ae]+'\"';}}}}}var af=\"\";for(var ad in ag){if(ag[ad]!=Object.prototype[ad]){af+='<param name=\"'+ad+'\" value=\"'+ag[ad]+'\" />';\n}}aa.outerHTML='<object classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"'+ah+\">\"+af+\"</object>\";N[N.length]=ai.id;X=c(ai.id);}else{var Z=C(r);Z.setAttribute(\"type\",q);\nfor(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()==\"styleclass\"){Z.setAttribute(\"class\",ai[ac]);}else{if(ac.toLowerCase()!=\"classid\"){Z.setAttribute(ac,ai[ac]);\n}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!=\"movie\"){e(Z,ab,ag[ab]);}}aa.parentNode.replaceChild(Z,aa);X=Z;}}return X;}function e(Z,X,Y){var aa=C(\"param\");\naa.setAttribute(\"name\",X);aa.setAttribute(\"value\",Y);Z.appendChild(aa);}function y(Y){var X=c(Y);if(X&&X.nodeName==\"OBJECT\"){if(M.ie&&M.win){X.style.display=\"none\";\n(function(){if(X.readyState==4){b(Y);}else{setTimeout(arguments.callee,10);}})();}else{X.parentNode.removeChild(X);}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]==\"function\"){Y[X]=null;\n}}Y.parentNode.removeChild(Y);}}function c(Z){var X=null;try{X=j.getElementById(Z);}catch(Y){}return X;}function C(X){return j.createElement(X);}function i(Z,X,Y){Z.attachEvent(X,Y);\nI[I.length]=[Z,X,Y];}function F(Z){var Y=M.pv,X=Z.split(\".\");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false;\n}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return;}var aa=j.getElementsByTagName(\"head\")[0];if(!aa){return;}var X=(ad&&typeof ad==\"string\")?ad:\"screen\";if(ab){n=null;\nG=null;}if(!n||G!=X){var Z=C(\"style\");Z.setAttribute(\"type\",\"text/css\");Z.setAttribute(\"media\",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1];\n}G=X;}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y);}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+\" {\"+Y+\"}\"));\n}}}function w(Z,X){if(!m){return;}var Y=X?\"visible\":\"hidden\";if(J&&c(Z)){c(Z).style.visibility=Y;}else{v(\"#\"+Z,\"visibility:\"+Y);}}function L(Y){var Z=/[\\\\\\\"<>\\.;]/;\nvar X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y;}var d=function(){if(M.ie&&M.win){window.attachEvent(\"onunload\",function(){var ac=I.length;\nfor(var ab=0;ab<ac;ab++){I[ab][0].detachEvent(I[ab][1],I[ab][2]);}var Z=N.length;for(var aa=0;aa<Z;aa++){y(N[aa]);}for(var Y in M){M[Y]=null;}M=null;for(var X in swfobject){swfobject[X]=null;\n}swfobject=null;});}}();return{registerObject:function(ab,X,aa,Z){if(M.w3&&ab&&X){var Y={};Y.id=ab;Y.swfVersion=X;Y.expressInstall=aa;Y.callbackFn=Z;o[o.length]=Y;\nw(ab,false);}else{if(Z){Z({success:false,id:ab});}}},getObjectById:function(X){if(M.w3){return z(X);}},embedSWF:function(ab,ah,ae,ag,Y,aa,Z,ad,af,ac){var X={success:false,id:ah};\nif(M.w3&&!(M.wk&&M.wk<312)&&ab&&ah&&ae&&ag&&Y){w(ah,false);K(function(){ae+=\"\";ag+=\"\";var aj={};if(af&&typeof af===r){for(var al in af){aj[al]=af[al];}}aj.data=ab;\naj.width=ae;aj.height=ag;var am={};if(ad&&typeof ad===r){for(var ak in ad){am[ak]=ad[ak];}}if(Z&&typeof Z===r){for(var ai in Z){if(typeof am.flashvars!=D){am.flashvars+=\"&\"+ai+\"=\"+Z[ai];\n}else{am.flashvars=ai+\"=\"+Z[ai];}}}if(F(Y)){var an=u(aj,am,ah);if(aj.id==ah){w(ah,true);}X.success=true;X.ref=an;}else{if(aa&&A()){aj.data=aa;P(aj,am,ah,ac);\nreturn;}else{w(ah,true);}}if(ac){ac(X);}});}else{if(ac){ac(X);}}},switchOffAutoHideShow:function(){m=false;},ua:M,getFlashPlayerVersion:function(){return{major:M.pv[0],minor:M.pv[1],release:M.pv[2]};\n},hasFlashPlayerVersion:F,createSWF:function(Z,Y,X){if(M.w3){return u(Z,Y,X);}else{return undefined;}},showExpressInstall:function(Z,aa,X,Y){if(M.w3&&A()){P(Z,aa,X,Y);\n}},removeSWF:function(X){if(M.w3){y(X);}},createCSS:function(aa,Z,Y,X){if(M.w3){v(aa,Z,Y,X);}},addDomLoadEvent:K,addLoadEvent:s,getQueryParamValue:function(aa){var Z=j.location.search||j.location.hash;\nif(Z){if(/\\?/.test(Z)){Z=Z.split(\"?\")[1];}if(aa==null){return L(Z);}var Y=Z.split(\"&\");for(var X=0;X<Y.length;X++){if(Y[X].substring(0,Y[X].indexOf(\"=\"))==aa){return L(Y[X].substring((Y[X].indexOf(\"=\")+1)));\n}}}return\"\";},expressInstallCallback:function(){if(a){var X=c(R);if(X&&l){X.parentNode.replaceChild(l,X);if(Q){w(Q,true);if(M.ie&&M.win){l.style.display=\"block\";\n}}if(E){E(B);}}a=false;}}};}();\n\n/*\nSWFUpload: http://www.swfupload.org, http://swfupload.googlecode.com\n\nmmSWFUpload 1.0: Flash upload dialog - http://profandesign.se/swfupload/,  http://www.vinterwebb.se/\n\nSWFUpload is (c) 2006-2007 Lars Huring, Olov Nilzén and Mammon Media and is released under the MIT License:\nhttp://www.opensource.org/licenses/mit-license.php\n \nSWFUpload 2 is (c) 2007-2008 Jake Roberts and is released under the MIT License:\nhttp://www.opensource.org/licenses/mit-license.php\n*/\n\nvar SWFUpload;if(SWFUpload==undefined){SWFUpload=function(a){this.initSWFUpload(a)}}SWFUpload.prototype.initSWFUpload=function(b){try{this.customSettings={};this.settings=b;this.eventQueue=[];this.movieName=\"SWFUpload_\"+SWFUpload.movieCount++;this.movieElement=null;SWFUpload.instances[this.movieName]=this;this.initSettings();this.loadFlash();this.displayDebugInfo()}catch(a){delete SWFUpload.instances[this.movieName];throw a}};SWFUpload.instances={};SWFUpload.movieCount=0;SWFUpload.version=\"2.2.0 2009-03-25\";SWFUpload.QUEUE_ERROR={QUEUE_LIMIT_EXCEEDED:-100,FILE_EXCEEDS_SIZE_LIMIT:-110,ZERO_BYTE_FILE:-120,INVALID_FILETYPE:-130};SWFUpload.UPLOAD_ERROR={HTTP_ERROR:-200,MISSING_UPLOAD_URL:-210,IO_ERROR:-220,SECURITY_ERROR:-230,UPLOAD_LIMIT_EXCEEDED:-240,UPLOAD_FAILED:-250,SPECIFIED_FILE_ID_NOT_FOUND:-260,FILE_VALIDATION_FAILED:-270,FILE_CANCELLED:-280,UPLOAD_STOPPED:-290};SWFUpload.FILE_STATUS={QUEUED:-1,IN_PROGRESS:-2,ERROR:-3,COMPLETE:-4,CANCELLED:-5};SWFUpload.BUTTON_ACTION={SELECT_FILE:-100,SELECT_FILES:-110,START_UPLOAD:-120};SWFUpload.CURSOR={ARROW:-1,HAND:-2};SWFUpload.WINDOW_MODE={WINDOW:\"window\",TRANSPARENT:\"transparent\",OPAQUE:\"opaque\"};SWFUpload.completeURL=function(a){if(typeof(a)!==\"string\"||a.match(/^https?:\\/\\//i)||a.match(/^\\//)){return a}var c=window.location.protocol+\"//\"+window.location.hostname+(window.location.port?\":\"+window.location.port:\"\");var b=window.location.pathname.lastIndexOf(\"/\");if(b<=0){path=\"/\"}else{path=window.location.pathname.substr(0,b)+\"/\"}return path+a};SWFUpload.prototype.initSettings=function(){this.ensureDefault=function(b,a){this.settings[b]=(this.settings[b]==undefined)?a:this.settings[b]};this.ensureDefault(\"upload_url\",\"\");this.ensureDefault(\"preserve_relative_urls\",false);this.ensureDefault(\"file_post_name\",\"Filedata\");this.ensureDefault(\"post_params\",{});this.ensureDefault(\"use_query_string\",false);this.ensureDefault(\"requeue_on_error\",false);this.ensureDefault(\"http_success\",[]);this.ensureDefault(\"assume_success_timeout\",0);this.ensureDefault(\"file_types\",\"*.*\");this.ensureDefault(\"file_types_description\",\"All Files\");this.ensureDefault(\"file_size_limit\",0);this.ensureDefault(\"file_upload_limit\",0);this.ensureDefault(\"file_queue_limit\",0);this.ensureDefault(\"flash_url\",\"swfupload.swf\");this.ensureDefault(\"prevent_swf_caching\",true);this.ensureDefault(\"button_image_url\",\"\");this.ensureDefault(\"button_width\",1);this.ensureDefault(\"button_height\",1);this.ensureDefault(\"button_text\",\"\");this.ensureDefault(\"button_text_style\",\"color: #000000; font-size: 16pt;\");this.ensureDefault(\"button_text_top_padding\",0);this.ensureDefault(\"button_text_left_padding\",0);this.ensureDefault(\"button_action\",SWFUpload.BUTTON_ACTION.SELECT_FILES);this.ensureDefault(\"button_disabled\",false);this.ensureDefault(\"button_placeholder_id\",\"\");this.ensureDefault(\"button_placeholder\",null);this.ensureDefault(\"button_cursor\",SWFUpload.CURSOR.ARROW);this.ensureDefault(\"button_window_mode\",SWFUpload.WINDOW_MODE.WINDOW);this.ensureDefault(\"debug\",false);this.settings.debug_enabled=this.settings.debug;this.settings.return_upload_start_handler=this.returnUploadStart;this.ensureDefault(\"swfupload_loaded_handler\",null);this.ensureDefault(\"file_dialog_start_handler\",null);this.ensureDefault(\"file_queued_handler\",null);this.ensureDefault(\"file_queue_error_handler\",null);this.ensureDefault(\"file_dialog_complete_handler\",null);this.ensureDefault(\"upload_start_handler\",null);this.ensureDefault(\"upload_progress_handler\",null);this.ensureDefault(\"upload_error_handler\",null);this.ensureDefault(\"upload_success_handler\",null);this.ensureDefault(\"upload_complete_handler\",null);this.ensureDefault(\"debug_handler\",this.debugMessage);this.ensureDefault(\"custom_settings\",{});this.customSettings=this.settings.custom_settings;if(!!this.settings.prevent_swf_caching){this.settings.flash_url=this.settings.flash_url+(this.settings.flash_url.indexOf(\"?\")<0?\"?\":\"&\")+\"preventswfcaching=\"+new Date().getTime()}if(!this.settings.preserve_relative_urls){this.settings.upload_url=SWFUpload.completeURL(this.settings.upload_url);this.settings.button_image_url=SWFUpload.completeURL(this.settings.button_image_url)}delete this.ensureDefault};SWFUpload.prototype.loadFlash=function(){var a,b;if(document.getElementById(this.movieName)!==null){throw\"ID \"+this.movieName+\" is already in use. The Flash Object could not be added\"}a=document.getElementById(this.settings.button_placeholder_id)||this.settings.button_placeholder;if(a==undefined){throw\"Could not find the placeholder element: \"+this.settings.button_placeholder_id}b=document.createElement(\"div\");b.innerHTML=this.getFlashHTML();a.parentNode.replaceChild(b.firstChild,a);if(window[this.movieName]==undefined){window[this.movieName]=this.getMovieElement()}};SWFUpload.prototype.getFlashHTML=function(){return['<object id=\"',this.movieName,'\" type=\"application/x-shockwave-flash\" data=\"',this.settings.flash_url,'\" width=\"',this.settings.button_width,'\" height=\"',this.settings.button_height,'\" class=\"swfupload\">','<param name=\"wmode\" value=\"',this.settings.button_window_mode,'\" />','<param name=\"movie\" value=\"',this.settings.flash_url,'\" />','<param name=\"quality\" value=\"high\" />','<param name=\"menu\" value=\"false\" />','<param name=\"allowScriptAccess\" value=\"always\" />','<param name=\"flashvars\" value=\"'+this.getFlashVars()+'\" />',\"</object>\"].join(\"\")};SWFUpload.prototype.getFlashVars=function(){var b=this.buildParamString();var a=this.settings.http_success.join(\",\");return[\"movieName=\",encodeURIComponent(this.movieName),\"&amp;uploadURL=\",encodeURIComponent(this.settings.upload_url),\"&amp;useQueryString=\",encodeURIComponent(this.settings.use_query_string),\"&amp;requeueOnError=\",encodeURIComponent(this.settings.requeue_on_error),\"&amp;httpSuccess=\",encodeURIComponent(a),\"&amp;assumeSuccessTimeout=\",encodeURIComponent(this.settings.assume_success_timeout),\"&amp;params=\",encodeURIComponent(b),\"&amp;filePostName=\",encodeURIComponent(this.settings.file_post_name),\"&amp;fileTypes=\",encodeURIComponent(this.settings.file_types),\"&amp;fileTypesDescription=\",encodeURIComponent(this.settings.file_types_description),\"&amp;fileSizeLimit=\",encodeURIComponent(this.settings.file_size_limit),\"&amp;fileUploadLimit=\",encodeURIComponent(this.settings.file_upload_limit),\"&amp;fileQueueLimit=\",encodeURIComponent(this.settings.file_queue_limit),\"&amp;debugEnabled=\",encodeURIComponent(this.settings.debug_enabled),\"&amp;buttonImageURL=\",encodeURIComponent(this.settings.button_image_url),\"&amp;buttonWidth=\",encodeURIComponent(this.settings.button_width),\"&amp;buttonHeight=\",encodeURIComponent(this.settings.button_height),\"&amp;buttonText=\",encodeURIComponent(this.settings.button_text),\"&amp;buttonTextTopPadding=\",encodeURIComponent(this.settings.button_text_top_padding),\"&amp;buttonTextLeftPadding=\",encodeURIComponent(this.settings.button_text_left_padding),\"&amp;buttonTextStyle=\",encodeURIComponent(this.settings.button_text_style),\"&amp;buttonAction=\",encodeURIComponent(this.settings.button_action),\"&amp;buttonDisabled=\",encodeURIComponent(this.settings.button_disabled),\"&amp;buttonCursor=\",encodeURIComponent(this.settings.button_cursor)].join(\"\")};SWFUpload.prototype.getMovieElement=function(){if(this.movieElement==undefined){this.movieElement=document.getElementById(this.movieName)}if(this.movieElement===null){throw\"Could not find Flash element\"}return this.movieElement};SWFUpload.prototype.buildParamString=function(){var c=this.settings.post_params;var b=[];if(typeof(c)===\"object\"){for(var a in c){if(c.hasOwnProperty(a)){b.push(encodeURIComponent(a.toString())+\"=\"+encodeURIComponent(c[a].toString()))}}}return b.join(\"&amp;\")};SWFUpload.prototype.destroy=function(){try{this.cancelUpload(null,false);var a=null;a=this.getMovieElement();if(a&&typeof(a.CallFunction)===\"unknown\"){for(var c in a){try{if(typeof(a[c])===\"function\"){a[c]=null}}catch(e){}}try{a.parentNode.removeChild(a)}catch(b){}}window[this.movieName]=null;SWFUpload.instances[this.movieName]=null;delete SWFUpload.instances[this.movieName];this.movieElement=null;this.settings=null;this.customSettings=null;this.eventQueue=null;this.movieName=null;return true}catch(d){return false}};SWFUpload.prototype.displayDebugInfo=function(){this.debug([\"---SWFUpload Instance Info---\\n\",\"Version: \",SWFUpload.version,\"\\n\",\"Movie Name: \",this.movieName,\"\\n\",\"Settings:\\n\",\"\\t\",\"upload_url:               \",this.settings.upload_url,\"\\n\",\"\\t\",\"flash_url:                \",this.settings.flash_url,\"\\n\",\"\\t\",\"use_query_string:         \",this.settings.use_query_string.toString(),\"\\n\",\"\\t\",\"requeue_on_error:         \",this.settings.requeue_on_error.toString(),\"\\n\",\"\\t\",\"http_success:             \",this.settings.http_success.join(\", \"),\"\\n\",\"\\t\",\"assume_success_timeout:   \",this.settings.assume_success_timeout,\"\\n\",\"\\t\",\"file_post_name:           \",this.settings.file_post_name,\"\\n\",\"\\t\",\"post_params:              \",this.settings.post_params.toString(),\"\\n\",\"\\t\",\"file_types:               \",this.settings.file_types,\"\\n\",\"\\t\",\"file_types_description:   \",this.settings.file_types_description,\"\\n\",\"\\t\",\"file_size_limit:          \",this.settings.file_size_limit,\"\\n\",\"\\t\",\"file_upload_limit:        \",this.settings.file_upload_limit,\"\\n\",\"\\t\",\"file_queue_limit:         \",this.settings.file_queue_limit,\"\\n\",\"\\t\",\"debug:                    \",this.settings.debug.toString(),\"\\n\",\"\\t\",\"prevent_swf_caching:      \",this.settings.prevent_swf_caching.toString(),\"\\n\",\"\\t\",\"button_placeholder_id:    \",this.settings.button_placeholder_id.toString(),\"\\n\",\"\\t\",\"button_placeholder:       \",(this.settings.button_placeholder?\"Set\":\"Not Set\"),\"\\n\",\"\\t\",\"button_image_url:         \",this.settings.button_image_url.toString(),\"\\n\",\"\\t\",\"button_width:             \",this.settings.button_width.toString(),\"\\n\",\"\\t\",\"button_height:            \",this.settings.button_height.toString(),\"\\n\",\"\\t\",\"button_text:              \",this.settings.button_text.toString(),\"\\n\",\"\\t\",\"button_text_style:        \",this.settings.button_text_style.toString(),\"\\n\",\"\\t\",\"button_text_top_padding:  \",this.settings.button_text_top_padding.toString(),\"\\n\",\"\\t\",\"button_text_left_padding: \",this.settings.button_text_left_padding.toString(),\"\\n\",\"\\t\",\"button_action:            \",this.settings.button_action.toString(),\"\\n\",\"\\t\",\"button_disabled:          \",this.settings.button_disabled.toString(),\"\\n\",\"\\t\",\"custom_settings:          \",this.settings.custom_settings.toString(),\"\\n\",\"Event Handlers:\\n\",\"\\t\",\"swfupload_loaded_handler assigned:  \",(typeof this.settings.swfupload_loaded_handler===\"function\").toString(),\"\\n\",\"\\t\",\"file_dialog_start_handler assigned: \",(typeof this.settings.file_dialog_start_handler===\"function\").toString(),\"\\n\",\"\\t\",\"file_queued_handler assigned:       \",(typeof this.settings.file_queued_handler===\"function\").toString(),\"\\n\",\"\\t\",\"file_queue_error_handler assigned:  \",(typeof this.settings.file_queue_error_handler===\"function\").toString(),\"\\n\",\"\\t\",\"upload_start_handler assigned:      \",(typeof this.settings.upload_start_handler===\"function\").toString(),\"\\n\",\"\\t\",\"upload_progress_handler assigned:   \",(typeof this.settings.upload_progress_handler===\"function\").toString(),\"\\n\",\"\\t\",\"upload_error_handler assigned:      \",(typeof this.settings.upload_error_handler===\"function\").toString(),\"\\n\",\"\\t\",\"upload_success_handler assigned:    \",(typeof this.settings.upload_success_handler===\"function\").toString(),\"\\n\",\"\\t\",\"upload_complete_handler assigned:   \",(typeof this.settings.upload_complete_handler===\"function\").toString(),\"\\n\",\"\\t\",\"debug_handler assigned:             \",(typeof this.settings.debug_handler===\"function\").toString(),\"\\n\"].join(\"\"))};SWFUpload.prototype.addSetting=function(b,c,a){if(c==undefined){return(this.settings[b]=a)}else{return(this.settings[b]=c)}};SWFUpload.prototype.getSetting=function(a){if(this.settings[a]!=undefined){return this.settings[a]}return\"\"};SWFUpload.prototype.callFlash=function(functionName,argumentArray){argumentArray=argumentArray||[];var movieElement=this.getMovieElement();var returnValue,returnString;try{returnString=movieElement.CallFunction('<invoke name=\"'+functionName+'\" returntype=\"javascript\">'+__flash__argumentsToXML(argumentArray,0)+\"</invoke>\");returnValue=eval(returnString)}catch(ex){throw\"Call to \"+functionName+\" failed\"}if(returnValue!=undefined&&typeof returnValue.post===\"object\"){returnValue=this.unescapeFilePostParams(returnValue)}return returnValue};SWFUpload.prototype.selectFile=function(){this.callFlash(\"SelectFile\")};SWFUpload.prototype.selectFiles=function(){this.callFlash(\"SelectFiles\")};SWFUpload.prototype.startUpload=function(a){this.callFlash(\"StartUpload\",[a])};SWFUpload.prototype.cancelUpload=function(a,b){if(b!==false){b=true}this.callFlash(\"CancelUpload\",[a,b])};SWFUpload.prototype.stopUpload=function(){this.callFlash(\"StopUpload\")};SWFUpload.prototype.getStats=function(){return this.callFlash(\"GetStats\")};SWFUpload.prototype.setStats=function(a){this.callFlash(\"SetStats\",[a])};SWFUpload.prototype.getFile=function(a){if(typeof(a)===\"number\"){return this.callFlash(\"GetFileByIndex\",[a])}else{return this.callFlash(\"GetFile\",[a])}};SWFUpload.prototype.addFileParam=function(a,b,c){return this.callFlash(\"AddFileParam\",[a,b,c])};SWFUpload.prototype.removeFileParam=function(a,b){this.callFlash(\"RemoveFileParam\",[a,b])};SWFUpload.prototype.setUploadURL=function(a){this.settings.upload_url=a.toString();this.callFlash(\"SetUploadURL\",[a])};SWFUpload.prototype.setPostParams=function(a){this.settings.post_params=a;this.callFlash(\"SetPostParams\",[a])};SWFUpload.prototype.addPostParam=function(a,b){this.settings.post_params[a]=b;this.callFlash(\"SetPostParams\",[this.settings.post_params])};SWFUpload.prototype.removePostParam=function(a){delete this.settings.post_params[a];this.callFlash(\"SetPostParams\",[this.settings.post_params])};SWFUpload.prototype.setFileTypes=function(a,b){this.settings.file_types=a;this.settings.file_types_description=b;this.callFlash(\"SetFileTypes\",[a,b])};SWFUpload.prototype.setFileSizeLimit=function(a){this.settings.file_size_limit=a;this.callFlash(\"SetFileSizeLimit\",[a])};SWFUpload.prototype.setFileUploadLimit=function(a){this.settings.file_upload_limit=a;this.callFlash(\"SetFileUploadLimit\",[a])};SWFUpload.prototype.setFileQueueLimit=function(a){this.settings.file_queue_limit=a;this.callFlash(\"SetFileQueueLimit\",[a])};SWFUpload.prototype.setFilePostName=function(a){this.settings.file_post_name=a;this.callFlash(\"SetFilePostName\",[a])};SWFUpload.prototype.setUseQueryString=function(a){this.settings.use_query_string=a;this.callFlash(\"SetUseQueryString\",[a])};SWFUpload.prototype.setRequeueOnError=function(a){this.settings.requeue_on_error=a;this.callFlash(\"SetRequeueOnError\",[a])};SWFUpload.prototype.setHTTPSuccess=function(a){if(typeof a===\"string\"){a=a.replace(\" \",\"\").split(\",\")}this.settings.http_success=a;this.callFlash(\"SetHTTPSuccess\",[a])};SWFUpload.prototype.setAssumeSuccessTimeout=function(a){this.settings.assume_success_timeout=a;this.callFlash(\"SetAssumeSuccessTimeout\",[a])};SWFUpload.prototype.setDebugEnabled=function(a){this.settings.debug_enabled=a;this.callFlash(\"SetDebugEnabled\",[a])};SWFUpload.prototype.setButtonImageURL=function(a){if(a==undefined){a=\"\"}this.settings.button_image_url=a;this.callFlash(\"SetButtonImageURL\",[a])};SWFUpload.prototype.setButtonDimensions=function(c,a){this.settings.button_width=c;this.settings.button_height=a;var b=this.getMovieElement();if(b!=undefined){b.style.width=c+\"px\";b.style.height=a+\"px\"}this.callFlash(\"SetButtonDimensions\",[c,a])};SWFUpload.prototype.setButtonText=function(a){this.settings.button_text=a;this.callFlash(\"SetButtonText\",[a])};SWFUpload.prototype.setButtonTextPadding=function(b,a){this.settings.button_text_top_padding=a;this.settings.button_text_left_padding=b;this.callFlash(\"SetButtonTextPadding\",[b,a])};SWFUpload.prototype.setButtonTextStyle=function(a){this.settings.button_text_style=a;this.callFlash(\"SetButtonTextStyle\",[a])};SWFUpload.prototype.setButtonDisabled=function(a){this.settings.button_disabled=a;this.callFlash(\"SetButtonDisabled\",[a])};SWFUpload.prototype.setButtonAction=function(a){this.settings.button_action=a;this.callFlash(\"SetButtonAction\",[a])};SWFUpload.prototype.setButtonCursor=function(a){this.settings.button_cursor=a;this.callFlash(\"SetButtonCursor\",[a])};SWFUpload.prototype.queueEvent=function(b,c){if(c==undefined){c=[]}else{if(!(c instanceof Array)){c=[c]}}var a=this;if(typeof this.settings[b]===\"function\"){this.eventQueue.push(function(){this.settings[b].apply(this,c)});setTimeout(function(){a.executeNextEvent()},0)}else{if(this.settings[b]!==null){throw\"Event handler \"+b+\" is unknown or is not a function\"}}};SWFUpload.prototype.executeNextEvent=function(){var a=this.eventQueue?this.eventQueue.shift():null;if(typeof(a)===\"function\"){a.apply(this)}};SWFUpload.prototype.unescapeFilePostParams=function(c){var e=/[$]([0-9a-f]{4})/i;var f={};var d;if(c!=undefined){for(var a in c.post){if(c.post.hasOwnProperty(a)){d=a;var b;while((b=e.exec(d))!==null){d=d.replace(b[0],String.fromCharCode(parseInt(\"0x\"+b[1],16)))}f[d]=c.post[a]}}c.post=f}return c};SWFUpload.prototype.testExternalInterface=function(){try{return this.callFlash(\"TestExternalInterface\")}catch(a){return false}};SWFUpload.prototype.flashReady=function(){var a=this.getMovieElement();if(!a){this.debug(\"Flash called back ready but the flash movie can't be found.\");return}this.cleanUp(a);this.queueEvent(\"swfupload_loaded_handler\")};SWFUpload.prototype.cleanUp=function(a){try{if(this.movieElement&&typeof(a.CallFunction)===\"unknown\"){this.debug(\"Removing Flash functions hooks (this should only run in IE and should prevent memory leaks)\");for(var c in a){try{if(typeof(a[c])===\"function\"){a[c]=null}}catch(b){}}}}catch(d){}window.__flash__removeCallback=function(e,f){try{if(e){e[f]=null}}catch(g){}}};SWFUpload.prototype.fileDialogStart=function(){this.queueEvent(\"file_dialog_start_handler\")};SWFUpload.prototype.fileQueued=function(a){a=this.unescapeFilePostParams(a);this.queueEvent(\"file_queued_handler\",a)};SWFUpload.prototype.fileQueueError=function(a,c,b){a=this.unescapeFilePostParams(a);this.queueEvent(\"file_queue_error_handler\",[a,c,b])};SWFUpload.prototype.fileDialogComplete=function(b,c,a){this.queueEvent(\"file_dialog_complete_handler\",[b,c,a])};SWFUpload.prototype.uploadStart=function(a){a=this.unescapeFilePostParams(a);this.queueEvent(\"return_upload_start_handler\",a)};SWFUpload.prototype.returnUploadStart=function(a){var b;if(typeof this.settings.upload_start_handler===\"function\"){a=this.unescapeFilePostParams(a);b=this.settings.upload_start_handler.call(this,a)}else{if(this.settings.upload_start_handler!=undefined){throw\"upload_start_handler must be a function\"}}if(b===undefined){b=true}b=!!b;this.callFlash(\"ReturnUploadStart\",[b])};SWFUpload.prototype.uploadProgress=function(a,c,b){a=this.unescapeFilePostParams(a);this.queueEvent(\"upload_progress_handler\",[a,c,b])};SWFUpload.prototype.uploadError=function(a,c,b){a=this.unescapeFilePostParams(a);this.queueEvent(\"upload_error_handler\",[a,c,b])};SWFUpload.prototype.uploadSuccess=function(b,a,c){b=this.unescapeFilePostParams(b);this.queueEvent(\"upload_success_handler\",[b,a,c])};SWFUpload.prototype.uploadComplete=function(a){a=this.unescapeFilePostParams(a);this.queueEvent(\"upload_complete_handler\",a)};SWFUpload.prototype.debug=function(a){this.queueEvent(\"debug_handler\",a)};SWFUpload.prototype.debugMessage=function(c){if(this.settings.debug){var a,d=[];if(typeof c===\"object\"&&typeof c.name===\"string\"&&typeof c.message===\"string\"){for(var b in c){if(c.hasOwnProperty(b)){d.push(b+\": \"+c[b])}}a=d.join(\"\\n\")||\"\";d=a.split(\"\\n\");a=\"EXCEPTION: \"+d.join(\"\\nEXCEPTION: \");SWFUpload.Console.writeLine(a)}else{SWFUpload.Console.writeLine(c)}}};SWFUpload.Console={};SWFUpload.Console.writeLine=function(d){var b,a;try{b=document.getElementById(\"SWFUpload_Console\");if(!b){a=document.createElement(\"form\");document.getElementsByTagName(\"body\")[0].appendChild(a);b=document.createElement(\"textarea\");b.id=\"SWFUpload_Console\";b.style.fontFamily=\"monospace\";b.setAttribute(\"wrap\",\"off\");b.wrap=\"off\";b.style.overflow=\"auto\";b.style.width=\"700px\";b.style.height=\"350px\";b.style.margin=\"5px\";a.appendChild(b)}b.value+=d+\"\\n\";b.scrollTop=b.scrollHeight-b.clientHeight}catch(c){alert(\"Exception: \"+c.name+\" Message: \"+c.message)}};\n\n/*\nUploadify v3.2\nCopyright (c) 2012 Reactive Apps, Ronnie Garcia\nReleased under the MIT License <http://www.opensource.org/licenses/mit-license.php> \n*/\n\n(function($) {\n\n\t// These methods can be called by adding them as the first argument in the uploadify plugin call\n\tvar methods = {\n\n\t\tinit : function(options, swfUploadOptions) {\n\t\t\t\n\t\t\treturn this.each(function() {\n\n\t\t\t\t// Create a reference to the jQuery DOM object\n\t\t\t\tvar $this = $(this);\n\n\t\t\t\t// Clone the original DOM object\n\t\t\t\tvar $clone = $this.clone();\n\n\t\t\t\t// Setup the default options\n\t\t\t\tvar settings = $.extend({\n\t\t\t\t\t// Required Settings\n\t\t\t\t\tid       : $this.attr('id'), // The ID of the DOM object\n\t\t\t\t\tswf      : 'uploadify.swf',  // The path to the uploadify SWF file\n\t\t\t\t\tuploader : 'uploadify.php',  // The path to the server-side upload script\n\t\t\t\t\t\n\t\t\t\t\t// Options\n\t\t\t\t\tauto            : true,               // Automatically upload files when added to the queue\n\t\t\t\t\tbuttonClass     : '',                 // A class name to add to the browse button DOM object\n\t\t\t\t\tbuttonCursor    : 'hand',             // The cursor to use with the browse button\n\t\t\t\t\tbuttonImage     : null,               // (String or null) The path to an image to use for the Flash browse button if not using CSS to style the button\n\t\t\t\t\tbuttonText      : 'SELECT FILES',     // The text to use for the browse button\n\t\t\t\t\tcheckExisting   : false,              // The path to a server-side script that checks for existing files on the server\n\t\t\t\t\tdebug           : false,              // Turn on swfUpload debugging mode\n\t\t\t\t\tfileObjName     : 'Filedata',         // The name of the file object to use in your server-side script\n\t\t\t\t\tfileSizeLimit   : 0,                  // The maximum size of an uploadable file in KB (Accepts units B KB MB GB if string, 0 for no limit)\n\t\t\t\t\tfileTypeDesc    : 'All Files',        // The description for file types in the browse dialog\n\t\t\t\t\tfileTypeExts    : '*.*',              // Allowed extensions in the browse dialog (server-side validation should also be used)\n\t\t\t\t\theight          : 30,                 // The height of the browse button\n\t\t\t\t\titemTemplate    : false,              // The template for the file item in the queue\n\t\t\t\t\tmethod          : 'post',             // The method to use when sending files to the server-side upload script\n\t\t\t\t\tmulti           : true,               // Allow multiple file selection in the browse dialog\n\t\t\t\t\tformData        : {},                 // An object with additional data to send to the server-side upload script with every file upload\n\t\t\t\t\tpreventCaching  : true,               // Adds a random value to the Flash URL to prevent caching of it (conflicts with existing parameters)\n\t\t\t\t\tprogressData    : 'percentage',       // ('percentage' or 'speed') Data to show in the queue item during a file upload\n\t\t\t\t\tqueueID         : false,              // The ID of the DOM object to use as a file queue (without the #)\n\t\t\t\t\tqueueSizeLimit  : 999,                // The maximum number of files that can be in the queue at one time\n\t\t\t\t\tremoveCompleted : true,               // Remove queue items from the queue when they are done uploading\n\t\t\t\t\tremoveTimeout   : 3,                  // The delay in seconds before removing a queue item if removeCompleted is set to true\n\t\t\t\t\trequeueErrors   : false,              // Keep errored files in the queue and keep trying to upload them\n\t\t\t\t\tsuccessTimeout  : 30,                 // The number of seconds to wait for Flash to detect the server's response after the file has finished uploading\n\t\t\t\t\tuploadLimit     : 0,                  // The maximum number of files you can upload\n\t\t\t\t\twidth           : 120,                // The width of the browse button\n\t\t\t\t\t\n\t\t\t\t\t// Events\n\t\t\t\t\toverrideEvents  : []             // (Array) A list of default event handlers to skip\n\t\t\t\t\t/*\n\t\t\t\t\tonCancel         // Triggered when a file is cancelled from the queue\n\t\t\t\t\tonClearQueue     // Triggered during the 'clear queue' method\n\t\t\t\t\tonDestroy        // Triggered when the uploadify object is destroyed\n\t\t\t\t\tonDialogClose    // Triggered when the browse dialog is closed\n\t\t\t\t\tonDialogOpen     // Triggered when the browse dialog is opened\n\t\t\t\t\tonDisable        // Triggered when the browse button gets disabled\n\t\t\t\t\tonEnable         // Triggered when the browse button gets enabled\n\t\t\t\t\tonFallback       // Triggered is Flash is not detected    \n\t\t\t\t\tonInit           // Triggered when Uploadify is initialized\n\t\t\t\t\tonQueueComplete  // Triggered when all files in the queue have been uploaded\n\t\t\t\t\tonSelectError    // Triggered when an error occurs while selecting a file (file size, queue size limit, etc.)\n\t\t\t\t\tonSelect         // Triggered for each file that is selected\n\t\t\t\t\tonSWFReady       // Triggered when the SWF button is loaded\n\t\t\t\t\tonUploadComplete // Triggered when a file upload completes (success or error)\n\t\t\t\t\tonUploadError    // Triggered when a file upload returns an error\n\t\t\t\t\tonUploadSuccess  // Triggered when a file is uploaded successfully\n\t\t\t\t\tonUploadProgress // Triggered every time a file progress is updated\n\t\t\t\t\tonUploadStart    // Triggered immediately before a file upload starts\n\t\t\t\t\t*/\n\t\t\t\t}, options);\n\n\t\t\t\t// Prepare settings for SWFUpload\n\t\t\t\tvar swfUploadSettings = {\n\t\t\t\t\tassume_success_timeout   : settings.successTimeout,\n\t\t\t\t\tbutton_placeholder_id    : settings.id,\n\t\t\t\t\tbutton_width             : settings.width,\n\t\t\t\t\tbutton_height            : settings.height,\n\t\t\t\t\tbutton_text              : null,\n\t\t\t\t\tbutton_text_style        : null,\n\t\t\t\t\tbutton_text_top_padding  : 0,\n\t\t\t\t\tbutton_text_left_padding : 0,\n\t\t\t\t\tbutton_action            : (settings.multi ? SWFUpload.BUTTON_ACTION.SELECT_FILES : SWFUpload.BUTTON_ACTION.SELECT_FILE),\n\t\t\t\t\tbutton_disabled          : false,\n\t\t\t\t\tbutton_cursor            : (settings.buttonCursor == 'arrow' ? SWFUpload.CURSOR.ARROW : SWFUpload.CURSOR.HAND),\n\t\t\t\t\tbutton_window_mode       : SWFUpload.WINDOW_MODE.TRANSPARENT,\n\t\t\t\t\tdebug                    : settings.debug,\t\t\t\t\t\t\n\t\t\t\t\trequeue_on_error         : settings.requeueErrors,\n\t\t\t\t\tfile_post_name           : settings.fileObjName,\n\t\t\t\t\tfile_size_limit          : settings.fileSizeLimit,\n\t\t\t\t\tfile_types               : settings.fileTypeExts,\n\t\t\t\t\tfile_types_description   : settings.fileTypeDesc,\n\t\t\t\t\tfile_queue_limit         : settings.queueSizeLimit,\n\t\t\t\t\tfile_upload_limit        : settings.uploadLimit,\n\t\t\t\t\tflash_url                : settings.swf,\t\t\t\t\t\n\t\t\t\t\tprevent_swf_caching      : settings.preventCaching,\n\t\t\t\t\tpost_params              : settings.formData,\n\t\t\t\t\tupload_url               : settings.uploader,\n\t\t\t\t\tuse_query_string         : (settings.method == 'get'),\n\t\t\t\t\t\n\t\t\t\t\t// Event Handlers \n\t\t\t\t\tfile_dialog_complete_handler : handlers.onDialogClose,\n\t\t\t\t\tfile_dialog_start_handler    : handlers.onDialogOpen,\n\t\t\t\t\tfile_queued_handler          : handlers.onSelect,\n\t\t\t\t\tfile_queue_error_handler     : handlers.onSelectError,\n\t\t\t\t\tswfupload_loaded_handler     : settings.onSWFReady,\n\t\t\t\t\tupload_complete_handler      : handlers.onUploadComplete,\n\t\t\t\t\tupload_error_handler         : handlers.onUploadError,\n\t\t\t\t\tupload_progress_handler      : handlers.onUploadProgress,\n\t\t\t\t\tupload_start_handler         : handlers.onUploadStart,\n\t\t\t\t\tupload_success_handler       : handlers.onUploadSuccess\n\t\t\t\t}\n\n\t\t\t\t// Merge the user-defined options with the defaults\n\t\t\t\tif (swfUploadOptions) {\n\t\t\t\t\tswfUploadSettings = $.extend(swfUploadSettings, swfUploadOptions);\n\t\t\t\t}\n\t\t\t\t// Add the user-defined settings to the swfupload object\n\t\t\t\tswfUploadSettings = $.extend(swfUploadSettings, settings);\n\t\t\t\t\n\t\t\t\t// Detect if Flash is available\n\t\t\t\tvar playerVersion  = swfobject.getFlashPlayerVersion();\n\t\t\t\tvar flashInstalled = (playerVersion.major >= 9);\n\n\t\t\t\tif (flashInstalled) {\n\t\t\t\t\t// Create the swfUpload instance\n\t\t\t\t\twindow['uploadify_' + settings.id] = new SWFUpload(swfUploadSettings);\n\t\t\t\t\tvar swfuploadify = window['uploadify_' + settings.id];\n\n\t\t\t\t\t// Add the SWFUpload object to the elements data object\n\t\t\t\t\t$this.data('uploadify', swfuploadify);\n\t\t\t\t\t\n\t\t\t\t\t// Wrap the instance\n\t\t\t\t\tvar $wrapper = $('<div />', {\n\t\t\t\t\t\t'id'    : settings.id,\n\t\t\t\t\t\t'class' : 'uploadify',\n\t\t\t\t\t\t'css'   : {\n\t\t\t\t\t\t\t\t\t'height'   : settings.height + 'px',\n\t\t\t\t\t\t\t\t\t'width'    : settings.width + 'px'\n\t\t\t\t\t\t\t\t  }\n\t\t\t\t\t});\n\t\t\t\t\t$('#' + swfuploadify.movieName).wrap($wrapper);\n\t\t\t\t\t// Recreate the reference to wrapper\n\t\t\t\t\t$wrapper = $('#' + settings.id);\n\t\t\t\t\t// Add the data object to the wrapper \n\t\t\t\t\t$wrapper.data('uploadify', swfuploadify);\n\n\t\t\t\t\t// Create the button\n\t\t\t\t\tvar $button = $('<div />', {\n\t\t\t\t\t\t'id'    : settings.id + '-button',\n\t\t\t\t\t\t'class' : 'uploadify-button ' + settings.buttonClass\n\t\t\t\t\t});\n\t\t\t\t\tif (settings.buttonImage) {\n\t\t\t\t\t\t$button.css({\n\t\t\t\t\t\t\t'background-image' : \"url('\" + settings.buttonImage + \"')\",\n\t\t\t\t\t\t\t'text-indent'      : '-9999px'\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t$button.html('<span class=\"uploadify-button-text\">' + settings.buttonText + '</span>')\n\t\t\t\t\t.css({\n\t\t\t\t\t\t'height'      : settings.height + 'px',\n\t\t\t\t\t\t'line-height' : settings.height + 'px',\n\t\t\t\t\t\t'width'       : settings.width + 'px'\n\t\t\t\t\t});\n\t\t\t\t\t// Append the button to the wrapper\n\t\t\t\t\t$wrapper.append($button);\n\n\t\t\t\t\t// Adjust the styles of the movie\n\t\t\t\t\t$('#' + swfuploadify.movieName).css({\n\t\t\t\t\t\t'position' : 'absolute',\n\t\t\t\t\t\t'z-index'  : 1\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\t// Create the file queue\n\t\t\t\t\tif (!settings.queueID) {\n\t\t\t\t\t\tvar $queue = $('<div />', {\n\t\t\t\t\t\t\t'id'    : settings.id + '-queue',\n\t\t\t\t\t\t\t'class' : 'uploadify-queue'\n\t\t\t\t\t\t});\n\t\t\t\t\t\t$wrapper.after($queue);\n\t\t\t\t\t\tswfuploadify.settings.queueID      = settings.id + '-queue';\n\t\t\t\t\t\tswfuploadify.settings.defaultQueue = true;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// Create some queue related objects and variables\n\t\t\t\t\tswfuploadify.queueData = {\n\t\t\t\t\t\tfiles              : {}, // The files in the queue\n\t\t\t\t\t\tfilesSelected      : 0, // The number of files selected in the last select operation\n\t\t\t\t\t\tfilesQueued        : 0, // The number of files added to the queue in the last select operation\n\t\t\t\t\t\tfilesReplaced      : 0, // The number of files replaced in the last select operation\n\t\t\t\t\t\tfilesCancelled     : 0, // The number of files that were cancelled instead of replaced\n\t\t\t\t\t\tfilesErrored       : 0, // The number of files that caused error in the last select operation\n\t\t\t\t\t\tuploadsSuccessful  : 0, // The number of files that were successfully uploaded\n\t\t\t\t\t\tuploadsErrored     : 0, // The number of files that returned errors during upload\n\t\t\t\t\t\taverageSpeed       : 0, // The average speed of the uploads in KB\n\t\t\t\t\t\tqueueLength        : 0, // The number of files in the queue\n\t\t\t\t\t\tqueueSize          : 0, // The size in bytes of the entire queue\n\t\t\t\t\t\tuploadSize         : 0, // The size in bytes of the upload queue\n\t\t\t\t\t\tqueueBytesUploaded : 0, // The size in bytes that have been uploaded for the current upload queue\n\t\t\t\t\t\tuploadQueue        : [], // The files currently to be uploaded\n\t\t\t\t\t\terrorMsg           : 'Some files were not added to the queue:'\n\t\t\t\t\t};\n\n\t\t\t\t\t// Save references to all the objects\n\t\t\t\t\tswfuploadify.original = $clone;\n\t\t\t\t\tswfuploadify.wrapper  = $wrapper;\n\t\t\t\t\tswfuploadify.button   = $button;\n\t\t\t\t\tswfuploadify.queue    = $queue;\n\n\t\t\t\t\t// Call the user-defined init event handler\n\t\t\t\t\tif (settings.onInit) settings.onInit.call($this, swfuploadify);\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Call the fallback function\n\t\t\t\t\tif (settings.onFallback) settings.onFallback.call($this);\n\n\t\t\t\t}\n\t\t\t});\n\n\t\t},\n\n\t\t// Stop a file upload and remove it from the queue \n\t\tcancel : function(fileID, supressEvent) {\n\n\t\t\tvar args = arguments;\n\n\t\t\tthis.each(function() {\n\t\t\t\t// Create a reference to the jQuery DOM object\n\t\t\t\tvar $this        = $(this),\n\t\t\t\t\tswfuploadify = $this.data('uploadify'),\n\t\t\t\t\tsettings     = swfuploadify.settings,\n\t\t\t\t\tdelay        = -1;\n\n\t\t\t\tif (args[0]) {\n\t\t\t\t\t// Clear the queue\n\t\t\t\t\tif (args[0] == '*') {\n\t\t\t\t\t\tvar queueItemCount = swfuploadify.queueData.queueLength;\n\t\t\t\t\t\t$('#' + settings.queueID).find('.uploadify-queue-item').each(function() {\n\t\t\t\t\t\t\tdelay++;\n\t\t\t\t\t\t\tif (args[1] === true) {\n\t\t\t\t\t\t\t\tswfuploadify.cancelUpload($(this).attr('id'), false);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tswfuploadify.cancelUpload($(this).attr('id'));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t$(this).find('.data').removeClass('data').html(' - Cancelled');\n\t\t\t\t\t\t\t$(this).find('.uploadify-progress-bar').remove();\n\t\t\t\t\t\t\t$(this).delay(1000 + 100 * delay).fadeOut(500, function() {\n\t\t\t\t\t\t\t\t$(this).remove();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t\tswfuploadify.queueData.queueSize   = 0;\n\t\t\t\t\t\tswfuploadify.queueData.queueLength = 0;\n\t\t\t\t\t\t// Trigger the onClearQueue event\n\t\t\t\t\t\tif (settings.onClearQueue) settings.onClearQueue.call($this, queueItemCount);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor (var n = 0; n < args.length; n++) {\n\t\t\t\t\t\t\tswfuploadify.cancelUpload(args[n]);\n\t\t\t\t\t\t\t$('#' + args[n]).find('.data').removeClass('data').html(' - Cancelled');\n\t\t\t\t\t\t\t$('#' + args[n]).find('.uploadify-progress-bar').remove();\n\t\t\t\t\t\t\t$('#' + args[n]).delay(1000 + 100 * n).fadeOut(500, function() {\n\t\t\t\t\t\t\t\t$(this).remove();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvar item = $('#' + settings.queueID).find('.uploadify-queue-item').get(0);\n\t\t\t\t\t$item = $(item);\n\t\t\t\t\tswfuploadify.cancelUpload($item.attr('id'));\n\t\t\t\t\t$item.find('.data').removeClass('data').html(' - Cancelled');\n\t\t\t\t\t$item.find('.uploadify-progress-bar').remove();\n\t\t\t\t\t$item.delay(1000).fadeOut(500, function() {\n\t\t\t\t\t\t$(this).remove();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t},\n\n\t\t// Revert the DOM object back to its original state\n\t\tdestroy : function() {\n\n\t\t\tthis.each(function() {\n\t\t\t\t// Create a reference to the jQuery DOM object\n\t\t\t\tvar $this        = $(this),\n\t\t\t\t\tswfuploadify = $this.data('uploadify'),\n\t\t\t\t\tsettings     = swfuploadify.settings;\n\n\t\t\t\t// Destroy the SWF object and \n\t\t\t\tswfuploadify.destroy();\n\t\t\t\t\n\t\t\t\t// Destroy the queue\n\t\t\t\tif (settings.defaultQueue) {\n\t\t\t\t\t$('#' + settings.queueID).remove();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// Reload the original DOM element\n\t\t\t\t$('#' + settings.id).replaceWith(swfuploadify.original);\n\n\t\t\t\t// Call the user-defined event handler\n\t\t\t\tif (settings.onDestroy) settings.onDestroy.call(this);\n\n\t\t\t\tdelete swfuploadify;\n\t\t\t});\n\n\t\t},\n\n\t\t// Disable the select button\n\t\tdisable : function(isDisabled) {\n\t\t\t\n\t\t\tthis.each(function() {\n\t\t\t\t// Create a reference to the jQuery DOM object\n\t\t\t\tvar $this        = $(this),\n\t\t\t\t\tswfuploadify = $this.data('uploadify'),\n\t\t\t\t\tsettings     = swfuploadify.settings;\n\n\t\t\t\t// Call the user-defined event handlers\n\t\t\t\tif (isDisabled) {\n\t\t\t\t\tswfuploadify.button.addClass('disabled');\n\t\t\t\t\tif (settings.onDisable) settings.onDisable.call(this);\n\t\t\t\t} else {\n\t\t\t\t\tswfuploadify.button.removeClass('disabled');\n\t\t\t\t\tif (settings.onEnable) settings.onEnable.call(this);\n\t\t\t\t}\n\n\t\t\t\t// Enable/disable the browse button\n\t\t\t\tswfuploadify.setButtonDisabled(isDisabled);\n\t\t\t});\n\n\t\t},\n\n\t\t// Get or set the settings data\n\t\tsettings : function(name, value, resetObjects) {\n\n\t\t\tvar args        = arguments;\n\t\t\tvar returnValue = value;\n\n\t\t\tthis.each(function() {\n\t\t\t\t// Create a reference to the jQuery DOM object\n\t\t\t\tvar $this        = $(this),\n\t\t\t\t\tswfuploadify = $this.data('uploadify'),\n\t\t\t\t\tsettings     = swfuploadify.settings;\n\n\t\t\t\tif (typeof(args[0]) == 'object') {\n\t\t\t\t\tfor (var n in value) {\n\t\t\t\t\t\tsetData(n,value[n]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (args.length === 1) {\n\t\t\t\t\treturnValue =  settings[name];\n\t\t\t\t} else {\n\t\t\t\t\tswitch (name) {\n\t\t\t\t\t\tcase 'uploader':\n\t\t\t\t\t\t\tswfuploadify.setUploadURL(value);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'formData':\n\t\t\t\t\t\t\tif (!resetObjects) {\n\t\t\t\t\t\t\t\tvalue = $.extend(settings.formData, value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tswfuploadify.setPostParams(settings.formData);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'method':\n\t\t\t\t\t\t\tif (value == 'get') {\n\t\t\t\t\t\t\t\tswfuploadify.setUseQueryString(true);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tswfuploadify.setUseQueryString(false);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'fileObjName':\n\t\t\t\t\t\t\tswfuploadify.setFilePostName(value);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'fileTypeExts':\n\t\t\t\t\t\t\tswfuploadify.setFileTypes(value, settings.fileTypeDesc);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'fileTypeDesc':\n\t\t\t\t\t\t\tswfuploadify.setFileTypes(settings.fileTypeExts, value);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'fileSizeLimit':\n\t\t\t\t\t\t\tswfuploadify.setFileSizeLimit(value);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'uploadLimit':\n\t\t\t\t\t\t\tswfuploadify.setFileUploadLimit(value);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'queueSizeLimit':\n\t\t\t\t\t\t\tswfuploadify.setFileQueueLimit(value);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'buttonImage':\n\t\t\t\t\t\t\tswfuploadify.button.css('background-image', settingValue);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'buttonCursor':\n\t\t\t\t\t\t\tif (value == 'arrow') {\n\t\t\t\t\t\t\t\tswfuploadify.setButtonCursor(SWFUpload.CURSOR.ARROW);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tswfuploadify.setButtonCursor(SWFUpload.CURSOR.HAND);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'buttonText':\n\t\t\t\t\t\t\t$('#' + settings.id + '-button').find('.uploadify-button-text').html(value);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'width':\n\t\t\t\t\t\t\tswfuploadify.setButtonDimensions(value, settings.height);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'height':\n\t\t\t\t\t\t\tswfuploadify.setButtonDimensions(settings.width, value);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'multi':\n\t\t\t\t\t\t\tif (value) {\n\t\t\t\t\t\t\t\tswfuploadify.setButtonAction(SWFUpload.BUTTON_ACTION.SELECT_FILES);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tswfuploadify.setButtonAction(SWFUpload.BUTTON_ACTION.SELECT_FILE);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tsettings[name] = value;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tif (args.length === 1) {\n\t\t\t\treturn returnValue;\n\t\t\t}\n\n\t\t},\n\n\t\t// Stop the current uploads and requeue what is in progress\n\t\tstop : function() {\n\n\t\t\tthis.each(function() {\n\t\t\t\t// Create a reference to the jQuery DOM object\n\t\t\t\tvar $this        = $(this),\n\t\t\t\t\tswfuploadify = $this.data('uploadify');\n\n\t\t\t\t// Reset the queue information\n\t\t\t\tswfuploadify.queueData.averageSpeed  = 0;\n\t\t\t\tswfuploadify.queueData.uploadSize    = 0;\n\t\t\t\tswfuploadify.queueData.bytesUploaded = 0;\n\t\t\t\tswfuploadify.queueData.uploadQueue   = [];\n\n\t\t\t\tswfuploadify.stopUpload();\n\t\t\t});\n\n\t\t},\n\n\t\t// Start uploading files in the queue\n\t\tupload : function() {\n\n\t\t\tvar args = arguments;\n\n\t\t\tthis.each(function() {\n\t\t\t\t// Create a reference to the jQuery DOM object\n\t\t\t\tvar $this        = $(this),\n\t\t\t\t\tswfuploadify = $this.data('uploadify');\n\n\t\t\t\t// Reset the queue information\n\t\t\t\tswfuploadify.queueData.averageSpeed  = 0;\n\t\t\t\tswfuploadify.queueData.uploadSize    = 0;\n\t\t\t\tswfuploadify.queueData.bytesUploaded = 0;\n\t\t\t\tswfuploadify.queueData.uploadQueue   = [];\n\t\t\t\t\n\t\t\t\t// Upload the files\n\t\t\t\tif (args[0]) {\n\t\t\t\t\tif (args[0] == '*') {\n\t\t\t\t\t\tswfuploadify.queueData.uploadSize = swfuploadify.queueData.queueSize;\n\t\t\t\t\t\tswfuploadify.queueData.uploadQueue.push('*');\n\t\t\t\t\t\tswfuploadify.startUpload();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor (var n = 0; n < args.length; n++) {\n\t\t\t\t\t\t\tswfuploadify.queueData.uploadSize += swfuploadify.queueData.files[args[n]].size;\n\t\t\t\t\t\t\tswfuploadify.queueData.uploadQueue.push(args[n]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tswfuploadify.startUpload(swfuploadify.queueData.uploadQueue.shift());\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tswfuploadify.startUpload();\n\t\t\t\t}\n\n\t\t\t});\n\n\t\t}\n\n\t}\n\n\t// These functions handle all the events that occur with the file uploader\n\tvar handlers = {\n\n\t\t// Triggered when the file dialog is opened\n\t\tonDialogOpen : function() {\n\t\t\t// Load the swfupload settings\n\t\t\tvar settings = this.settings;\n\n\t\t\t// Reset some queue info\n\t\t\tthis.queueData.errorMsg       = 'Some files were not added to the queue:';\n\t\t\tthis.queueData.filesReplaced  = 0;\n\t\t\tthis.queueData.filesCancelled = 0;\n\n\t\t\t// Call the user-defined event handler\n\t\t\tif (settings.onDialogOpen) settings.onDialogOpen.call(this);\n\t\t},\n\n\t\t// Triggered when the browse dialog is closed\n\t\tonDialogClose :  function(filesSelected, filesQueued, queueLength) {\n\t\t\t// Load the swfupload settings\n\t\t\tvar settings = this.settings;\n\n\t\t\t// Update the queue information\n\t\t\tthis.queueData.filesErrored  = filesSelected - filesQueued;\n\t\t\tthis.queueData.filesSelected = filesSelected;\n\t\t\tthis.queueData.filesQueued   = filesQueued - this.queueData.filesCancelled;\n\t\t\tthis.queueData.queueLength   = queueLength;\n\n\t\t\t// Run the default event handler\n\t\t\tif ($.inArray('onDialogClose', settings.overrideEvents) < 0) {\n\t\t\t\tif (this.queueData.filesErrored > 0) {\n\t\t\t\t\talert(this.queueData.errorMsg);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Call the user-defined event handler\n\t\t\tif (settings.onDialogClose) settings.onDialogClose.call(this, this.queueData);\n\n\t\t\t// Upload the files if auto is true\n\t\t\tif (settings.auto) $('#' + settings.id).uploadify('upload', '*');\n\t\t},\n\n\t\t// Triggered once for each file added to the queue\n\t\tonSelect : function(file) {\n\t\t\t// Load the swfupload settings\n\t\t\tvar settings = this.settings;\n\n\t\t\t// Check if a file with the same name exists in the queue\n\t\t\tvar queuedFile = {};\n\t\t\tfor (var n in this.queueData.files) {\n\t\t\t\tqueuedFile = this.queueData.files[n];\n\t\t\t\tif (queuedFile.uploaded != true && queuedFile.name == file.name) {\n\t\t\t\t\tvar replaceQueueItem = confirm('The file named \"' + file.name + '\" is already in the queue.\\nDo you want to replace the existing item in the queue?');\n\t\t\t\t\tif (!replaceQueueItem) {\n\t\t\t\t\t\tthis.cancelUpload(file.id);\n\t\t\t\t\t\tthis.queueData.filesCancelled++;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$('#' + queuedFile.id).remove();\n\t\t\t\t\t\tthis.cancelUpload(queuedFile.id);\n\t\t\t\t\t\tthis.queueData.filesReplaced++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Get the size of the file\n\t\t\tvar fileSize = Math.round(file.size / 1024);\n\t\t\tvar suffix   = 'KB';\n\t\t\tif (fileSize > 1000) {\n\t\t\t\tfileSize = Math.round(fileSize / 1000);\n\t\t\t\tsuffix   = 'MB';\n\t\t\t}\n\t\t\tvar fileSizeParts = fileSize.toString().split('.');\n\t\t\tfileSize = fileSizeParts[0];\n\t\t\tif (fileSizeParts.length > 1) {\n\t\t\t\tfileSize += '.' + fileSizeParts[1].substr(0,2);\n\t\t\t}\n\t\t\tfileSize += suffix;\n\t\t\t\n\t\t\t// Truncate the filename if it's too long\n\t\t\tvar fileName = file.name;\n\t\t\tif (fileName.length > 25) {\n\t\t\t\tfileName = fileName.substr(0,25) + '...';\n\t\t\t}\n\n\t\t\t// Create the file data object\n\t\t\titemData = {\n\t\t\t\t'fileID'     : file.id,\n\t\t\t\t'instanceID' : settings.id,\n\t\t\t\t'fileName'   : fileName,\n\t\t\t\t'fileSize'   : fileSize\n\t\t\t}\n\n\t\t\t// Create the file item template\n\t\t\tif (settings.itemTemplate == false) {\n\t\t\t\tsettings.itemTemplate = '<div id=\"${fileID}\" class=\"uploadify-queue-item\">\\\n\t\t\t\t\t<div class=\"cancel\">\\\n\t\t\t\t\t\t<a href=\"javascript:$(\\'#${instanceID}\\').uploadify(\\'cancel\\', \\'${fileID}\\')\">X</a>\\\n\t\t\t\t\t</div>\\\n\t\t\t\t\t<span class=\"fileName\">${fileName} (${fileSize})</span><span class=\"data\"></span>\\\n\t\t\t\t\t<div class=\"uploadify-progress\">\\\n\t\t\t\t\t\t<div class=\"uploadify-progress-bar\"><!--Progress Bar--></div>\\\n\t\t\t\t\t</div>\\\n\t\t\t\t</div>';\n\t\t\t}\n\n\t\t\t// Run the default event handler\n\t\t\tif ($.inArray('onSelect', settings.overrideEvents) < 0) {\n\t\t\t\t\n\t\t\t\t// Replace the item data in the template\n\t\t\t\titemHTML = settings.itemTemplate;\n\t\t\t\tfor (var d in itemData) {\n\t\t\t\t\titemHTML = itemHTML.replace(new RegExp('\\\\$\\\\{' + d + '\\\\}', 'g'), itemData[d]);\n\t\t\t\t}\n\n\t\t\t\t// Add the file item to the queue\n\t\t\t\t$('#' + settings.queueID).append(itemHTML);\n\t\t\t}\n\n\t\t\tthis.queueData.queueSize += file.size;\n\t\t\tthis.queueData.files[file.id] = file;\n\n\t\t\t// Call the user-defined event handler\n\t\t\tif (settings.onSelect) settings.onSelect.apply(this, arguments);\n\t\t},\n\n\t\t// Triggered when a file is not added to the queue\n\t\tonSelectError : function(file, errorCode, errorMsg) {\n\t\t\t// Load the swfupload settings\n\t\t\tvar settings = this.settings;\n\n\t\t\t// Run the default event handler\n\t\t\tif ($.inArray('onSelectError', settings.overrideEvents) < 0) {\n\t\t\t\tswitch(errorCode) {\n\t\t\t\t\tcase SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED:\n\t\t\t\t\t\tif (settings.queueSizeLimit > errorMsg) {\n\t\t\t\t\t\t\tthis.queueData.errorMsg += '\\nThe number of files selected exceeds the remaining upload limit (' + errorMsg + ').';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.queueData.errorMsg += '\\nThe number of files selected exceeds the queue size limit (' + settings.queueSizeLimit + ').';\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:\n\t\t\t\t\t\tthis.queueData.errorMsg += '\\nThe file \"' + file.name + '\" exceeds the size limit (' + settings.fileSizeLimit + ').';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:\n\t\t\t\t\t\tthis.queueData.errorMsg += '\\nThe file \"' + file.name + '\" is empty.';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:\n\t\t\t\t\t\tthis.queueData.errorMsg += '\\nThe file \"' + file.name + '\" is not an accepted file type (' + settings.fileTypeDesc + ').';\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (errorCode != SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED) {\n\t\t\t\tdelete this.queueData.files[file.id];\n\t\t\t}\n\n\t\t\t// Call the user-defined event handler\n\t\t\tif (settings.onSelectError) settings.onSelectError.apply(this, arguments);\n\t\t},\n\n\t\t// Triggered when all the files in the queue have been processed\n\t\tonQueueComplete : function() {\n\t\t\tif (this.settings.onQueueComplete) this.settings.onQueueComplete.call(this, this.settings.queueData);\n\t\t},\n\n\t\t// Triggered when a file upload successfully completes\n\t\tonUploadComplete : function(file) {\n\t\t\t// Load the swfupload settings\n\t\t\tvar settings     = this.settings,\n\t\t\t\tswfuploadify = this;\n\n\t\t\t// Check if all the files have completed uploading\n\t\t\tvar stats = this.getStats();\n\t\t\tthis.queueData.queueLength = stats.files_queued;\n\t\t\tif (this.queueData.uploadQueue[0] == '*') {\n\t\t\t\tif (this.queueData.queueLength > 0) {\n\t\t\t\t\tthis.startUpload();\n\t\t\t\t} else {\n\t\t\t\t\tthis.queueData.uploadQueue = [];\n\n\t\t\t\t\t// Call the user-defined event handler for queue complete\n\t\t\t\t\tif (settings.onQueueComplete) settings.onQueueComplete.call(this, this.queueData);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (this.queueData.uploadQueue.length > 0) {\n\t\t\t\t\tthis.startUpload(this.queueData.uploadQueue.shift());\n\t\t\t\t} else {\n\t\t\t\t\tthis.queueData.uploadQueue = [];\n\n\t\t\t\t\t// Call the user-defined event handler for queue complete\n\t\t\t\t\tif (settings.onQueueComplete) settings.onQueueComplete.call(this, this.queueData);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Call the default event handler\n\t\t\tif ($.inArray('onUploadComplete', settings.overrideEvents) < 0) {\n\t\t\t\tif (settings.removeCompleted) {\n\t\t\t\t\tswitch (file.filestatus) {\n\t\t\t\t\t\tcase SWFUpload.FILE_STATUS.COMPLETE:\n\t\t\t\t\t\t\tsetTimeout(function() { \n\t\t\t\t\t\t\t\tif ($('#' + file.id)) {\n\t\t\t\t\t\t\t\t\tswfuploadify.queueData.queueSize   -= file.size;\n\t\t\t\t\t\t\t\t\tswfuploadify.queueData.queueLength -= 1;\n\t\t\t\t\t\t\t\t\tdelete swfuploadify.queueData.files[file.id]\n\t\t\t\t\t\t\t\t\t$('#' + file.id).fadeOut(500, function() {\n\t\t\t\t\t\t\t\t\t\t$(this).remove();\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}, settings.removeTimeout * 1000);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase SWFUpload.FILE_STATUS.ERROR:\n\t\t\t\t\t\t\tif (!settings.requeueErrors) {\n\t\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t\tif ($('#' + file.id)) {\n\t\t\t\t\t\t\t\t\t\tswfuploadify.queueData.queueSize   -= file.size;\n\t\t\t\t\t\t\t\t\t\tswfuploadify.queueData.queueLength -= 1;\n\t\t\t\t\t\t\t\t\t\tdelete swfuploadify.queueData.files[file.id];\n\t\t\t\t\t\t\t\t\t\t$('#' + file.id).fadeOut(500, function() {\n\t\t\t\t\t\t\t\t\t\t\t$(this).remove();\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}, settings.removeTimeout * 1000);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfile.uploaded = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Call the user-defined event handler\n\t\t\tif (settings.onUploadComplete) settings.onUploadComplete.call(this, file);\n\t\t},\n\n\t\t// Triggered when a file upload returns an error\n\t\tonUploadError : function(file, errorCode, errorMsg) {\n\t\t\t// Load the swfupload settings\n\t\t\tvar settings = this.settings;\n\n\t\t\t// Set the error string\n\t\t\tvar errorString = 'Error';\n\t\t\tswitch(errorCode) {\n\t\t\t\tcase SWFUpload.UPLOAD_ERROR.HTTP_ERROR:\n\t\t\t\t\terrorString = 'HTTP Error (' + errorMsg + ')';\n\t\t\t\t\tbreak;\n\t\t\t\tcase SWFUpload.UPLOAD_ERROR.MISSING_UPLOAD_URL:\n\t\t\t\t\terrorString = 'Missing Upload URL';\n\t\t\t\t\tbreak;\n\t\t\t\tcase SWFUpload.UPLOAD_ERROR.IO_ERROR:\n\t\t\t\t\terrorString = 'IO Error';\n\t\t\t\t\tbreak;\n\t\t\t\tcase SWFUpload.UPLOAD_ERROR.SECURITY_ERROR:\n\t\t\t\t\terrorString = 'Security Error';\n\t\t\t\t\tbreak;\n\t\t\t\tcase SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED:\n\t\t\t\t\talert('The upload limit has been reached (' + errorMsg + ').');\n\t\t\t\t\terrorString = 'Exceeds Upload Limit';\n\t\t\t\t\tbreak;\n\t\t\t\tcase SWFUpload.UPLOAD_ERROR.UPLOAD_FAILED:\n\t\t\t\t\terrorString = 'Failed';\n\t\t\t\t\tbreak;\n\t\t\t\tcase SWFUpload.UPLOAD_ERROR.SPECIFIED_FILE_ID_NOT_FOUND:\n\t\t\t\t\tbreak;\n\t\t\t\tcase SWFUpload.UPLOAD_ERROR.FILE_VALIDATION_FAILED:\n\t\t\t\t\terrorString = 'Validation Error';\n\t\t\t\t\tbreak;\n\t\t\t\tcase SWFUpload.UPLOAD_ERROR.FILE_CANCELLED:\n\t\t\t\t\terrorString = 'Cancelled';\n\t\t\t\t\tthis.queueData.queueSize   -= file.size;\n\t\t\t\t\tthis.queueData.queueLength -= 1;\n\t\t\t\t\tif (file.status == SWFUpload.FILE_STATUS.IN_PROGRESS || $.inArray(file.id, this.queueData.uploadQueue) >= 0) {\n\t\t\t\t\t\tthis.queueData.uploadSize -= file.size;\n\t\t\t\t\t}\n\t\t\t\t\t// Trigger the onCancel event\n\t\t\t\t\tif (settings.onCancel) settings.onCancel.call(this, file);\n\t\t\t\t\tdelete this.queueData.files[file.id];\n\t\t\t\t\tbreak;\n\t\t\t\tcase SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED:\n\t\t\t\t\terrorString = 'Stopped';\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Call the default event handler\n\t\t\tif ($.inArray('onUploadError', settings.overrideEvents) < 0) {\n\n\t\t\t\tif (errorCode != SWFUpload.UPLOAD_ERROR.FILE_CANCELLED && errorCode != SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED) {\n\t\t\t\t\t$('#' + file.id).addClass('uploadify-error');\n\t\t\t\t}\n\n\t\t\t\t// Reset the progress bar\n\t\t\t\t$('#' + file.id).find('.uploadify-progress-bar').css('width','1px');\n\n\t\t\t\t// Add the error message to the queue item\n\t\t\t\tif (errorCode != SWFUpload.UPLOAD_ERROR.SPECIFIED_FILE_ID_NOT_FOUND && file.status != SWFUpload.FILE_STATUS.COMPLETE) {\n\t\t\t\t\t$('#' + file.id).find('.data').html(' - ' + errorString);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar stats = this.getStats();\n\t\t\tthis.queueData.uploadsErrored = stats.upload_errors;\n\n\t\t\t// Call the user-defined event handler\n\t\t\tif (settings.onUploadError) settings.onUploadError.call(this, file, errorCode, errorMsg, errorString);\n\t\t},\n\n\t\t// Triggered periodically during a file upload\n\t\tonUploadProgress : function(file, fileBytesLoaded, fileTotalBytes) {\n\t\t\t// Load the swfupload settings\n\t\t\tvar settings = this.settings;\n\n\t\t\t// Setup all the variables\n\t\t\tvar timer            = new Date();\n\t\t\tvar newTime          = timer.getTime();\n\t\t\tvar lapsedTime       = newTime - this.timer;\n\t\t\tif (lapsedTime > 500) {\n\t\t\t\tthis.timer = newTime;\n\t\t\t}\n\t\t\tvar lapsedBytes      = fileBytesLoaded - this.bytesLoaded;\n\t\t\tthis.bytesLoaded     = fileBytesLoaded;\n\t\t\tvar queueBytesLoaded = this.queueData.queueBytesUploaded + fileBytesLoaded;\n\t\t\tvar percentage       = Math.round(fileBytesLoaded / fileTotalBytes * 100);\n\t\t\t\n\t\t\t// Calculate the average speed\n\t\t\tvar suffix = 'KB/s';\n\t\t\tvar mbs = 0;\n\t\t\tvar kbs = (lapsedBytes / 1024) / (lapsedTime / 1000);\n\t\t\t    kbs = Math.floor(kbs * 10) / 10;\n\t\t\tif (this.queueData.averageSpeed > 0) {\n\t\t\t\tthis.queueData.averageSpeed = Math.floor((this.queueData.averageSpeed + kbs) / 2);\n\t\t\t} else {\n\t\t\t\tthis.queueData.averageSpeed = Math.floor(kbs);\n\t\t\t}\n\t\t\tif (kbs > 1000) {\n\t\t\t\tmbs = (kbs * .001);\n\t\t\t\tthis.queueData.averageSpeed = Math.floor(mbs);\n\t\t\t\tsuffix = 'MB/s';\n\t\t\t}\n\t\t\t\n\t\t\t// Call the default event handler\n\t\t\tif ($.inArray('onUploadProgress', settings.overrideEvents) < 0) {\n\t\t\t\tif (settings.progressData == 'percentage') {\n\t\t\t\t\t$('#' + file.id).find('.data').html(' - ' + percentage + '%');\n\t\t\t\t} else if (settings.progressData == 'speed' && lapsedTime > 500) {\n\t\t\t\t\t$('#' + file.id).find('.data').html(' - ' + this.queueData.averageSpeed + suffix);\n\t\t\t\t}\n\t\t\t\t$('#' + file.id).find('.uploadify-progress-bar').css('width', percentage + '%');\n\t\t\t}\n\n\t\t\t// Call the user-defined event handler\n\t\t\tif (settings.onUploadProgress) settings.onUploadProgress.call(this, file, fileBytesLoaded, fileTotalBytes, queueBytesLoaded, this.queueData.uploadSize);\n\t\t},\n\n\t\t// Triggered right before a file is uploaded\n\t\tonUploadStart : function(file) {\n\t\t\t// Load the swfupload settings\n\t\t\tvar settings = this.settings;\n\n\t\t\tvar timer        = new Date();\n\t\t\tthis.timer       = timer.getTime();\n\t\t\tthis.bytesLoaded = 0;\n\t\t\tif (this.queueData.uploadQueue.length == 0) {\n\t\t\t\tthis.queueData.uploadSize = file.size;\n\t\t\t}\n\t\t\tif (settings.checkExisting) {\n\t\t\t\t$.ajax({\n\t\t\t\t\ttype    : 'POST',\n\t\t\t\t\tasync   : false,\n\t\t\t\t\turl     : settings.checkExisting,\n\t\t\t\t\tdata    : {filename: file.name},\n\t\t\t\t\tsuccess : function(data) {\n\t\t\t\t\t\tif (data == 1) {\n\t\t\t\t\t\t\tvar overwrite = confirm('A file with the name \"' + file.name + '\" already exists on the server.\\nWould you like to replace the existing file?');\n\t\t\t\t\t\t\tif (!overwrite) {\n\t\t\t\t\t\t\t\tthis.cancelUpload(file.id);\n\t\t\t\t\t\t\t\t$('#' + file.id).remove();\n\t\t\t\t\t\t\t\tif (this.queueData.uploadQueue.length > 0 && this.queueData.queueLength > 0) {\n\t\t\t\t\t\t\t\t\tif (this.queueData.uploadQueue[0] == '*') {\n\t\t\t\t\t\t\t\t\t\tthis.startUpload();\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tthis.startUpload(this.queueData.uploadQueue.shift());\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Call the user-defined event handler\n\t\t\tif (settings.onUploadStart) settings.onUploadStart.call(this, file); \n\t\t},\n\n\t\t// Triggered when a file upload returns a successful code\n\t\tonUploadSuccess : function(file, data, response) {\n\t\t\t// Load the swfupload settings\n\t\t\tvar settings = this.settings;\n\t\t\tvar stats    = this.getStats();\n\t\t\tthis.queueData.uploadsSuccessful = stats.successful_uploads;\n\t\t\tthis.queueData.queueBytesUploaded += file.size;\n\n\t\t\t// Call the default event handler\n\t\t\tif ($.inArray('onUploadSuccess', settings.overrideEvents) < 0) {\n\t\t\t\t$('#' + file.id).find('.data').html(' - Complete');\n\t\t\t}\n\n\t\t\t// Call the user-defined event handler\n\t\t\tif (settings.onUploadSuccess) settings.onUploadSuccess.call(this, file, data, response); \n\t\t}\n\n\t}\n\n\t$.fn.uploadify = function(method) {\n\n\t\tif (methods[method]) {\n\t\t\treturn methods[method].apply(this, Array.prototype.slice.call(arguments, 1));\n\t\t} else if (typeof method === 'object' || !method) {\n\t\t\treturn methods.init.apply(this, arguments);\n\t\t} else {\n\t\t\t$.error('The method ' + method + ' does not exist in $.uploadify');\n\t\t}\n\n\t}\n\n})($);"
  },
  {
    "path": "validate_remote.html",
    "content": "false"
  },
  {
    "path": "w_accordion.html",
    "content": "\n<div class=\"pageContent\" layoutH=\"0\">\n\t\n\t<div class=\"accordion\" style=\"width:300px;float:left;margin:5px;\">\n\t\t<div class=\"accordionHeader\">\n\t\t\t<h2><span>Folder</span>界面组件</h2>\n\t\t</div>\n\t\t<div class=\"accordionContent\">\n\t\t\t<ul class=\"tree treeFolder\">\n\t\t\t\t<li><a href=\"tabsPage.html\" target=\"navTab\">框架面板</a>\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"main.html\" target=\"navTab\" rel=\"main\">我的主页</a></li>\n\t\t\t\t\t\t<li><a href=\"demo_page1.html\" target=\"navTab\" rel=\"page1\">页面一</a></li>\n\t\t\t\t\t\t<li><a href=\"demo_page1.html\" target=\"navTab\" rel=\"page1\">替换页面一</a></li>\n\t\t\t\t\t\t<li><a href=\"demo_page2.html\" target=\"navTab\" rel=\"page2\">页面二</a></li>\n\t\t\t\t\t\t<li><a href=\"demo_page4.html\" target=\"navTab\" rel=\"page3\" title=\"页面三（自定义标签名）\">页面三</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</li>\n\t\n\t\t\t\t<li><a href=\"w_panel.html\" target=\"navTab\" rel=\"w_panel\">面板</a></li>\n\t\t\t\t<li><a href=\"w_tabs.html\" target=\"navTab\" rel=\"w_tabs\">选项卡面板</a></li>\n\t\t\t\t<li><a href=\"w_dialog.html\" target=\"navTab\" rel=\"w_dialog\">弹出窗口</a></li>\n\t\t\t\t<li><a href=\"w_alert.html\" target=\"navTab\" rel=\"w_alert\">提示窗口</a></li>\n\t\t\t\t<li><a href=\"w_list.html\" target=\"navTab\" rel=\"w_list\">CSS表格容器</a></li>\n\t\t\t\t<li><a href=\"demo_page1.html\" target=\"navTab\" rel=\"w_table\">表格容器</a></li>\n\t\t\t\t<li><a href=\"w_tree.html\" target=\"navTab\" rel=\"w_tree\">树形菜单</a></li>\n\t\t\t\t<li><a href=\"w_editor.html\" target=\"navTab\" rel=\"w_editor\">编辑器</a></li>\n\t\t\t\t<li><a href=\"w_validation.html\" target=\"navTab\" rel=\"w_validation\">表单组件</a>\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"w_validation.html\" target=\"navTab\" rel=\"w_validation\">表单验证</a></li>\n\t\t\t\t\t\t<li><a href=\"w_datepicker.html\" target=\"navTab\" rel=\"w_datepicker\">日期控件</a></li>\n\t\t\t\t\t\t<li><a href=\"w_button.html\" target=\"navTab\" rel=\"w_button\">按钮</a></li>\n\t\t\t\t\t\t<li><a href=\"w_textInput.html\" target=\"navTab\" rel=\"w_textInput\">文本框/文本域</a></li>\n\t\t\t\t\t\t<li><a href=\"w_combox.html\" target=\"navTab\" rel=\"w_combox\">下拉菜单</a></li>\n\t\t\t\t\t\t<li><a href=\"w_checkbox.html\" target=\"navTab\" rel=\"w_checkbox\">多选框/单选框</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t</div>\n\t\t<div class=\"accordionHeader\">\n\t\t\t<h2><span>Folder</span>典型页面</h2>\n\t\t</div>\n\t\t<div class=\"accordionContent\">\n\t\t\t<ul class=\"tree treeFolder treeCheck\">\n\t\t\t\t<li><a href=\"demo_upload.html\" tname=\"name\" tvalue=\"roger\" target=\"navTab\" rel=\"demo_upload\">文件上传表单提交示例</a></li>\n\t\t\t\t<li><a href=\"demo_page1.html\" tname=\"name\" tvalue=\"roger\" target=\"navTab\" rel=\"demo_page1\">查询我的客户</a></li>\n\t\t\t\t<li><a href=\"demo_page1.html\" tname=\"name\" tvalue=\"roger\" target=\"navTab\" rel=\"demo_page2\">表单查询页面</a></li>\n\t\t\t\t<li><a href=\"demo_page4.html\" tname=\"name\" tvalue=\"roger\" target=\"navTab\" rel=\"demo_page4\">表单录入页面</a></li>\n\t\t\t\t<li><a href=\"demo_page5.html\" tname=\"name\" tvalue=\"roger\" target=\"navTab\" rel=\"demo_page5\">有文本输入的表单</a></li>\n\t\t\t\t<li><a href=\"#\" tname=\"name\" tvalue=\"roger\">有提示的表单输入页面</a>\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"#\" tname=\"name\" tvalue=\"roger\" >页面一</a></li>\n\t\t\t\t\t\t<li><a href=\"#\" tname=\"name\" tvalue=\"roger\" >页面二</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</li>\n\t\t\t\t<li><a href=\"#\" tname=\"name\" tvalue=\"roger\" >选项卡和图形的页面</a>\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li><a href=\"#\" tname=\"name\" tvalue=\"roger\" >页面一</a></li>\n\t\t\t\t\t\t<li><a href=\"#\" tname=\"name\" tvalue=\"roger\" >页面二</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</li>\n\t\t\t\t<li><a href=\"#\" tname=\"name\" tvalue=\"roger\" >选项卡和图形切换的页面</a></li>\n\t\t\t\t<li><a href=\"#\" tname=\"name\" tvalue=\"roger\" >左右两个互动的页面</a></li>\n\t\t\t\t<li><a href=\"#\" tname=\"name\" tvalue=\"roger\" >列表输入的页面</a></li>\n\t\t\t\t<li><a href=\"#\" tname=\"name\" tvalue=\"roger\" >双层栏目列表的页面</a></li>\n\t\t\t</ul>\n\t\t</div>\n\t\t<div class=\"accordionHeader\">\n\t\t\t<h2><span>Folder</span>流程演示</h2>\n\t\t</div>\n\t\t<div class=\"accordionContent\">\n\t\t\t<ul class=\"tree\">\n\t\t\t\t<li><a href=\"newPage1.html\" target=\"dialog\" rel=\"dlg_page\">列表</a></li>\n\t\t\t\t<li><a href=\"newPage1.html\" target=\"dialog\" rel=\"dlg_page\">列表</a></li>\n\t\t\t\t<li><a href=\"newPage1.html\" target=\"dialog\" rel=\"dlg_page2\">列表</a></li>\n\t\t\t\t<li><a href=\"newPage1.html\" target=\"dialog\" rel=\"dlg_page2\">列表</a></li>\n\t\t\t</ul>\n\t\t</div>\n\t</div>\n\t\n\t\n\t<div class=\"accordion\" style=\"width:300px;float:left;margin:5px;\">\n\t\t<div class=\"accordionHeader\">\n\t\t\t<h2><span>icon</span>面板1</h2>\n\t\t</div>\n\t\t<div class=\"accordionContent\" style=\"height:200px\">\n\t\t\t内容1\n\t\t</div>\n\t\t<div class=\"accordionHeader\">\n\t\t\t<h2><span>icon</span>面板2</h2>\n\t\t</div>\n\t\t<div class=\"accordionContent\">\n\t\t\t内容2\n\t\t</div>\n\t\t<div class=\"accordionHeader\">\n\t\t\t<h2><span>icon</span>面板3</h2>\n\t\t</div>\n\t\t<div class=\"accordionContent\">\n\t\t\t内容3\n\t\t</div>\n\t</div>\n\t\n\t\n</div>\n\n\t"
  },
  {
    "path": "w_alert.html",
    "content": "<script type=\"text/javascript\">\nfunction testConfirmMsg(url, data){\n\talertMsg.confirm(\"您修改的资料未保存，请选择保存或取消！\", {\n\t\tokCall: function(){\n\t\t\t$.post(url, data, DWZ.ajaxDone, \"json\");\n\t\t}\n\t});\n}\n\nfunction testAlertError(){\n\talertMsg.error(\"点击确定关闭当前窗口！\", {\n\t\tokCall: function(){\n\t\t\tnavTab.closeCurrentTab();\n\t\t}\n\t});\n}\n\nfunction testAlertMisc() {\n\tvar buttons = [\n\t\t{\n\t\t\tname:'是',\n\t\t\tcall: function(){\n\t\t\t\tconsole.log('testAlertMisc(): 是');\n\t\t\t},\n\t\t\tkeyCode:DWZ.keyCode.ENTER\n\t\t},\n\t\t{\n\t\t\tname:'否',\n\t\t\tcall: function(){\n\t\t\t\tconsole.log('testAlertMisc(): 否');\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tname:'取消',\n\t\t\tcall: function(){\n\t\t\t\tconsole.log('testAlertMisc(): 取消');\n\t\t\t},\n\t\t\tkeyCode:DWZ.keyCode.ESC\n\t\t}\n\t];\n\talertMsg.open(alertMsg.types.confirm, '自定义提示框', buttons);\n}\n</script>\n\n<h2 class=\"contentTitle\">提示对话框演示</h2>\n\n<div style=\"padding:0 10px;\">\n\t\n\t<div class=\"tabs\">\n\t\t<div class=\"tabsHeader\">\n\t\t\t<div class=\"tabsHeaderContent\">\n\t\t\t\t<ul>\n\t\t\t\t\t<li class=\"selected\"><a href=\"javascript:;\"><span>示例</span></a></li>\n\t\t\t\t\t<li><a href=\"javascript:;\"><span>代码</span></a></li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"tabsContent\" layoutH=\"100\">\n\t\t\t<div>\n\t\t\t\t<a class=\"button\" href=\"javascript:;\" onclick=\"testConfirmMsg('demo/common/ajaxDone.html')\"><span>确认（是/否）</span></a><br /><br /><br />\n\t\t\t\t<a class=\"button\" href=\"javascript:;\" onclick=\"alertMsg.error('您提交的数据有误，请检查后重新提交！')\"><span>错误提示</span></a><br /><br /><br />\n\t\t\t\t<a class=\"button\" href=\"javascript:;\" onclick=\"alertMsg.info('您提交的数据有误，请检查后重新提交！')\"><span>信息提示</span></a><br /><br /><br />\n\t\t\t\t<a class=\"button\" href=\"javascript:;\" onclick=\"alertMsg.warn('您提交的数据有误，请检查后重新提交！')\"><span>警告提示</span></a><br /><br /><br />\n\t\t\t\t<a class=\"button\" href=\"javascript:;\" onclick=\"alertMsg.correct('您的数据提交成功！')\"><span>成功提示</span></a><br /><br /><br />\n\t\t\t\t<a class=\"button\" href=\"javascript:;\" onclick=\"testAlertError()\"><span>错误提示,点击确定关闭窗口</span></a><br /><br /><br />\n\t\t\t\t<a class=\"button\" href=\"javascript:;\" onclick=\"testAlertMisc()\"><span>自定义提示框</span></a><br /><br /><br />\n\t\t\t</div>\n\t\t\t\n\t\t\t<div>\n\t\t\t\t<textarea name=\"textarea\" cols=\"100\" rows=\"15\">\n<script type=\"text/javascript\">\nfunction testConfirmMsg(url, data){\n\talertMsg.confirm(\"您修改的资料未保存，请选择保存或取消！\", {\n\t\tokCall: function(){\n\t\t\t$.post(url, data, DWZ.ajaxDone, \"json\");\n\t\t}\n\t});\n}\n</script>\n\n<a class=\"button\" href=\"javascript:;\" onclick=\"testConfirmMsg('demo/common/ajaxDone.html')\"><span>确认（是/否）</span></a><br /><br />\n<a class=\"button\" href=\"javascript:;\" onclick=\"alertMsg.error('您提交的数据有误，请检查后重新提交！')\"><span>错误提示</span></a><br /><br />\n<a class=\"button\" href=\"javascript:;\" onclick=\"alertMsg.info('您提交的数据有误，请检查后重新提交！')\"><span>信息提示</span></a><br /><br />\n<a class=\"button\" href=\"javascript:;\" onclick=\"alertMsg.warn('您提交的数据有误，请检查后重新提交！')\"><span>警告提示</span></a><br /><br />\n<a class=\"button\" href=\"javascript:;\" onclick=\"alertMsg.correct('您的数据提交成功！')\"><span>成功提示</span></a><br /><br />\n\t\t\t\t</textarea>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"tabsFooter\">\n\t\t\t<div class=\"tabsFooterContent\"></div>\n\t\t</div>\n\t</div>\n\n</div>"
  },
  {
    "path": "w_button.html",
    "content": "<h2 class=\"contentTitle\">按钮</h2>\n\n<div class=\"pageFormContent\" layoutH=\"60\">\n\t<fieldset>\n\t\t<legend>正常按钮</legend>\n\t\t<dl class=\"nowrap\">\n\t\t\t<dt>button：</dt>\n\t\t\t<dd><div class=\"button\"><div class=\"buttonContent\"><button>按钮</button></div></div></dd>\n\t\t</dl>\n\t\t<dl class=\"nowrap\">\n\t\t\t<dt>buttonActive：</dt>\n\t\t\t<dd><div class=\"buttonActive\"><div class=\"buttonContent\"><button>按钮</button></div></div></dd>\n\t\t</dl>\n\t\t<dl class=\"nowrap\">\n\t\t\t<dt>buttonDisabled：</dt>\n\t\t\t<dd><div class=\"buttonDisabled\"><div class=\"buttonContent\"><button>按钮</button></div></div></dd>\n\t\t</dl>\n\t</fieldset>\n\t\n\t<fieldset>\n\t\t<legend>A链接按钮</legend>\n\t\t<dl class=\"nowrap\">\n\t\t\t<dt>button：</dt>\n\t\t\t<dd><a class=\"button\" href=\"javascript:;\"><span>按钮</span></a></dd>\n\t\t</dl>\n\t\t<dl class=\"nowrap\">\n\t\t\t<dt>buttonActive：</dt>\n\t\t\t<dd><a class=\"buttonActive\" href=\"javascript:;\"><span>按钮</span></a></dd>\n\t\t</dl>\n\t\t<dl class=\"nowrap\">\n\t\t\t<dt>buttonDisabled：</dt>\n\t\t\t<dd><a class=\"buttonDisabled\" href=\"javascript:;\"><span>按钮</span></a></dd>\n\t\t</dl>\n\t</fieldset>\n</div>"
  },
  {
    "path": "w_checkbox.html",
    "content": "<h2 class=\"contentTitle\">多选框/单选框</h2>\n<form method=\"post\" action=\"demo/common/ajaxDone.json\" class=\"pageForm required-validate\" onsubmit=\"return validateCallback(this, dialogAjaxDone)\">\n\t<div class=\"pageFormContent\" layoutH=\"98\">\n\t\t<label><input type=\"radio\" name=\"r1\" value=\"1\"/>选择1</label>\n\t\t<label><input type=\"radio\" name=\"r1\" value=\"2\"/>选择2</label>\n\t\t<label><input type=\"radio\" name=\"r1\" value=\"3\"/>选择3</label>\n\t\t<label><input type=\"radio\" name=\"r1\" value=\"4\"/>选择4</label>\n\t\t<label><input type=\"radio\" name=\"r1\" value=\"5\"/>选择5</label>\n\t\t<div class=\"divider\"></div>\n\n\t\t<label><input type=\"checkbox\" name=\"c1\" value=\"1\" />选择1</label>\n\t\t<label><input type=\"checkbox\" name=\"c1\" value=\"2\" />选择2</label>\n\t\t<label><input type=\"checkbox\" name=\"c1\" value=\"3\" />选择3</label>\n\t\t<label><input type=\"checkbox\" name=\"c1\" value=\"4\" />选择4</label>\n\t\t<label><input type=\"checkbox\" name=\"c1\" value=\"5\" />选择5</label>\n\t\t<label><input type=\"checkbox\" name=\"c1\" value=\"6\" />选择6</label>\n\t\t<label><input type=\"checkbox\" name=\"c1\" value=\"7\" />选择7</label>\n\t\t<label><input type=\"checkbox\" name=\"c1\" value=\"8\" />选择8</label>\n\t\t<label><input type=\"checkbox\" name=\"c1\" value=\"9\" />选择9</label>\n\t\t<label><input type=\"checkbox\" name=\"c1\" value=\"10\" />选择10</label>\n\t</div>\n\t<div class=\"formBar\">\n\t\t<label style=\"float:left\"><input type=\"checkbox\" class=\"checkboxCtrl\" group=\"c1\" />全选</label>\n\t\t<ul>\n\t\t\t<li><div class=\"button\"><div class=\"buttonContent\"><button type=\"button\" class=\"checkboxCtrl\" group=\"c1\" selectType=\"invert\">反选</button></div></div></li>\n\t\t\t<li><div class=\"buttonActive\"><div class=\"buttonContent\"><button type=\"submit\">提交</button></div></div></li>\n\t\t</ul>\n\t</div>\n</form>\n"
  },
  {
    "path": "w_combox.html",
    "content": "<h2 class=\"contentTitle\">下拉菜单</h2>\n\n<div class=\"pageContent\" layoutH=\"56\">\n\t<select class=\"combox\" name=\"province\" ref=\"w_combox_city\" refUrl=\"demo/combox/city_{value}.html\">\n\t\t<option value=\"all\">所有省市</option>\n\t\t<option value=\"bj\">北京</option>\n\t\t<option value=\"sh\">上海</option>\n\t\t<option value=\"zj\">浙江省</option>\n\t</select>\n\t<select class=\"combox\" name=\"city\" id=\"w_combox_city\" ref=\"w_combox_region\" refUrl=\"demo/combox/region_{value}.html\">\n\t\t<option value=\"all\">所有城市</option>\n\t</select>\n\t<select class=\"combox\" name=\"region\" id=\"w_combox_region\">\n\t\t<option value=\"all\">所有区县</option>\n\t</select>\n\n\t<div class=\"divider\"></div>\n\n\t<select class=\"combox\" name=\"test\" id=\"combox_test_demo\">\n\t\t<option value=\"1\">test1</option>\n\t\t<option value=\"2\">test2</option>\n\t</select>\n\n\t<button onclick=\"comboxRefreshTest();\">comboxRefresh</button>\n\t<button onclick=\"comboxDisableTest();\">comboxDisable</button>\n\t<button onclick=\"comboxEnableTest();\">comboxEnable</button>\n\t<button onclick=\"$('#combox_test_demo').comboxVal(2);\">comboxVal</button>\n</div>\n\n<script type=\"text/javascript\">\n\tfunction comboxRefreshTest(){\n\n\t\tvar count = Math.round(Math.random()*10);\n\t\tvar testJson = [];\n\n\t\tfor (var index=1;index<count; index++) {\n\t\t\ttestJson.push([''+index, 'test'+index]);\n\t\t}\n\n\t\t$('#combox_test_demo').comboxRefresh(testJson);\n\t}\n\n\tfunction comboxDisableTest(){\n\t\t$('#combox_test_demo').comboxDisable();\n\t}\n\n\tfunction comboxEnableTest(){\n\t\t$('#combox_test_demo').comboxEnable();\n\t}\n</script>\n\n"
  },
  {
    "path": "w_datepicker.html",
    "content": "<h2 class=\"contentTitle\">日历控件</h2>\n\n<div class=\"pageContent\">\n\t<form method=\"post\" action=\"demo/common/ajaxDone.json\" class=\"pageForm required-validate\" onsubmit=\"return validateCallback(this, navTabAjaxDone);\">\n\t\t<div class=\"pageFormContent\" layoutH=\"98\">\n\t\t\t<p>\n\t\t\t\t<label>默认格式：</label>\n\t\t\t\t<input type=\"text\" name=\"date1\" class=\"date\" readonly=\"true\"/>\n\t\t\t\t<a class=\"inputDateButton\" href=\"javascript:;\">选择</a>\n\t\t\t\t<span class=\"info\">yyyy-MM-dd</span>\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<label>定义日期范围：</label>\n\t\t\t\t<input type=\"text\" name=\"date2\" value=\"2000-01-15\" class=\"date\" minDate=\"2000-01-15\" maxDate=\"2012-12-15\" readonly=\"true\"/>\n\t\t\t\t<a class=\"inputDateButton\" href=\"javascript:;\">选择</a>\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<label>自定义日期格式：</label>\n\t\t\t\t<input type=\"text\" name=\"date3\" class=\"date\" dateFmt=\"yyyy/MM/dd\" minDate=\"2000-01\" maxDate=\"2012-06\" readonly=\"true\" />\n\t\t\t\t<a class=\"inputDateButton\" href=\"javascript:;\">选择</a>\n\t\t\t\t<span class=\"info\">yyyy/MM/dd</span>\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<label>自定义日期格式：</label>\n\t\t\t\t<input type=\"text\" name=\"date4\" class=\"date\" dateFmt=\"dd/MM/yyyy\" minDate=\"2000\" maxDate=\"2012\" readonly=\"true\"/>\n\t\t\t\t<a class=\"inputDateButton\" href=\"javascript:;\">选择</a>\n\t\t\t\t<span class=\"info\">dd/MM/yyyy</span>\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<label>动态参数minDate：</label>\n\t\t\t\t<input type=\"text\" name=\"date5\" class=\"date\" dateFmt=\"dd/MM/yy\" minDate=\"{%y-10}-%M-%d\" maxDate=\"{%y}-%M-{%d+1}\"/>\n\t\t\t\t<a class=\"inputDateButton\" href=\"javascript:;\">选择</a>\n\t\t\t\t<span class=\"info\">dd/MM/yy</span>\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<label>自定义日期格式：</label>\n\t\t\t\t<input type=\"text\" name=\"date6\" class=\"date\" dateFmt=\"MMdd\" minDate=\"2000-01-01\" maxDate=\"2020-12-31\"/>\n\t\t\t\t<a class=\"inputDateButton\" href=\"javascript:;\">选择</a>\n\t\t\t\t<span class=\"info\">MMdd</span>\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<label>自定义日期格式：</label>\n\t\t\t\t<input type=\"text\" name=\"date7\" class=\"date\" dateFmt=\"yyyy年MM月dd日\" minDate=\"2000-01-01\" maxDate=\"2020-12-31\"/>\n\t\t\t\t<a class=\"inputDateButton\" href=\"javascript:;\">选择</a>\n\t\t\t\t<span class=\"info\">yyyy年MM月dd日</span>\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<label>自定义日期格式：</label>\n\t\t\t\t<input type=\"text\" name=\"date8\" class=\"date\" dateFmt=\"y年M月d日\" minDate=\"2000-01-01\" maxDate=\"2020-12-31\"/>\n\t\t\t\t<a class=\"inputDateButton\" href=\"javascript:;\">选择</a>\n\t\t\t\t<span class=\"info\">y年M月d日</span>\n\t\t\t</p>\n\n\t\t\t<div class=\"divider\"></div>\n\t\t\t<h3>日期 + 时间</h3>\n\t\t\t<div class=\"unit\">\n\t\t\t\t<label>自定义日期格式：</label>\n\t\t\t\t<input type=\"text\" name=\"date10\" class=\"date\" dateFmt=\"yyyy-MM-dd HH:mm:ss\" defaultTime=\"23:59:59\" readonly=\"true\"/>\n\t\t\t\t<a class=\"inputDateButton\" href=\"javascript:;\">选择</a>\n\t\t\t\t<span class=\"info\">yyyy-MM-dd HH:mm:ss</span>\n\t\t\t</div>\n\t\t\t<div class=\"unit\">\n\t\t\t\t<label>自定义日期格式：</label>\n\t\t\t\t<input type=\"text\" name=\"date11\" class=\"date\" dateFmt=\"yyyy-MM-dd HH:mm\" readonly=\"true\"/>\n\t\t\t\t<a class=\"inputDateButton\" href=\"javascript:;\">选择</a>\n\t\t\t\t<span class=\"info\">yyyy-MM-dd HH:mm</span>\n\t\t\t</div>\n\t\t\t<div class=\"unit\">\n\t\t\t\t<label>自定义日期格式：</label>\n\t\t\t\t<input type=\"text\" name=\"date12\" class=\"date\" dateFmt=\"yyyy-MM-dd HH:ss\" readonly=\"true\"/>\n\t\t\t\t<a class=\"inputDateButton\" href=\"javascript:;\">选择</a>\n\t\t\t\t<span class=\"info\">yyyy-MM-dd HH:ss</span>\n\t\t\t</div>\n\n\t\t\t<div class=\"unit\">\n\t\t\t\t<label>自定义日期格式：</label>\n\t\t\t\t<input type=\"text\" name=\"date13\" class=\"date\" dateFmt=\"y年M月d日 H点\" readonly=\"true\"/>\n\t\t\t\t<a class=\"inputDateButton\" href=\"javascript:;\">选择</a>\n\t\t\t\t<span class=\"info\">y年M月d日 H点</span>\n\t\t\t</div>\n\t\t\t<div class=\"unit\">\n\t\t\t\t<label>自定义日期格式：</label>\n\t\t\t\t<input type=\"text\" name=\"date14\" class=\"date\" dateFmt=\"EEE HH:mm:ss\" readonly=\"true\"/>\n\t\t\t\t<a class=\"inputDateButton\" href=\"javascript:;\">选择</a>\n\t\t\t\t<span class=\"info\">EEE HH:mm:ss</span>\n\t\t\t</div>\n\t\t\t<div class=\"unit\">\n\t\t\t\t<label>自定义只有时间：</label>\n\t\t\t\t<input type=\"text\" name=\"date15\" class=\"date\" dateFmt=\"HH:mm:ss\" readonly=\"true\"/>\n\t\t\t\t<a class=\"inputDateButton\" href=\"javascript:;\">选择</a>\n\t\t\t\t<span class=\"info\">HH:mm:ss</span>\n\t\t\t</div>\n\t\t\t<div class=\"unit\">\n\t\t\t\t<label>自定义时间：</label>\n\t\t\t\t<input type=\"text\" name=\"date16\" class=\"date\" dateFmt=\"HH:mm\" mmStep=\"15\" readonly=\"true\"/>\n\t\t\t\t<a class=\"inputDateButton\" href=\"javascript:;\">选择</a>\n\t\t\t\t<span class=\"info\">HH:mm</span>\n\t\t\t</div>\n\n\t\t\t<div class=\"divider\"></div>\n\t\t\t<div class=\"nowrap\">\n<p>\n\t定义日期范围属性minDate,maxDate静态格式y-M-d或y-M或y，支持以下几种写法:<br/>\n\tminDate=\"2000-01-15\" maxDate=\"2012-12-15\"<br/>\n\tminDate=\"2000-01\" maxDate=\"2012-12\"<br/>\n\tminDate=\"2000\" maxDate=\"2012\"<br/>\n</p>\n<p>\n\t定义日期范围属性minDate,maxDate动态态格式%y-%M-%d或%y-%M或%y，支持以下几种写法:<br/>\n\tminDate=\"{%y-10}-%M-%d\" maxDate=\"{%y}-%M-{%d+1}\"<br/>\n\tminDate=\"{%y-10}-%M\" maxDate=\"{%y+10}-%M\"<br/>\n\tminDate=\"{%y-10}\" maxDate=\"{%y+10}\"<br/>\n</p>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div class=\"formBar\">\n\t\t\t<ul>\n\t\t\t\t<li><div class=\"buttonActive\"><div class=\"buttonContent\"><button type=\"submit\">提交</button></div></div></li>\n\t\t\t\t<li>\n\t\t\t\t\t<div class=\"button\"><div class=\"buttonContent\"><button type=\"button\" class=\"close\">取消</button></div></div>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t</div>\n\t</form>\n</div>\n\n\n"
  },
  {
    "path": "w_dialog.html",
    "content": "<script type=\"text/javascript\">\nfunction closedialog(param) {\n\talert(param.msg);\n\treturn true;\n}\n</script>\n\n<h2 class=\"contentTitle\">弹出窗口</h2>\n<div class=\"pageContent\" layoutH=\"42\">\n\n\t<div style=\"float:left; display:block; overflow:hidden; width:400px; padding:0 10px; line-height:21px;\">\n\t\t<a class=\"button\" href=\"demo_page1.html\" target=\"dialog\" rel=\"dlg_page1\" max=\"true\" title=\"打开窗口1 [自定义标题]\" width=\"800\" height=\"480\"><span>打开窗口1</span></a><br /><br />\n\t\t<a class=\"button\" href=\"demo_page1.html\" target=\"dialog\" rel=\"dlg_page2\"><span>打开窗口2</span></a><br /><br />\n\t\t<a class=\"button\" href=\"demo_page2.html\" target=\"dialog\" rel=\"dlg_page2\" width=\"645\" height=\"370\" fresh=\"false\"><span>打开窗口3</span></a><br /><br />\n\t\t<div class=\"divider\"></div>\n\t\t<a class=\"button\" href=\"demo_page1.html\" target=\"dialog\" rel=\"dlg_page4\" title=\"打开窗口4 [自定义标题]\"><span>打开窗口4</span></a><br /><br />\n\t\t<a class=\"button\" href=\"demo_page2.html\" target=\"dialog\" rel=\"dlg_page5\" close=\"closedialog\" param=\"{msg:'gogo'}\"><span>打开窗口5</span></a><br /><br />\n\t\t<a class=\"button\" href=\"demo_page2.html\" target=\"dialog\" rel=\"dlg_page5\"><span>打开窗口6</span></a>\n\t</div>\n\t<div style=\"float:left; display:block; overflow:hidden; width:400px; padding:0 10px; line-height:21px;\">\n\t\t<a class=\"button\" href=\"demo_page1.html\" target=\"dialog\" rel=\"dlg_page7\"><span>打开窗口7</span></a><br /><br />\n\t\t<a class=\"button\" href=\"demo_page4.html\" target=\"dialog\" rel=\"dlg_page8\"><span>打开窗口8</span></a><br /><br />\n\t\t<a class=\"button\" href=\"demo_page4.html\" target=\"dialog\" rel=\"dlg_page9\" minable=\"false\"><span>打开窗口9</span></a><br /><br />\n\t\t<div class=\"divider\"></div>\n\t\t<a class=\"button\" href=\"demo_page1.html\" target=\"dialog\" rel=\"dlg_page10\" mask=\"true\" title=\"模态窗口1 [自定义标题]\"><span>模态窗口1</span></a><br /><br />\n\t\t<a class=\"button\" href=\"demo_page2.html\" target=\"dialog\" rel=\"dlg_page11\" mask=\"true\"><span>模态窗口2</span></a><br /><br />\n\t\t<a class=\"button\" href=\"demo_page2.html\" target=\"dialog\" rel=\"dlg_page12\" mask=\"true\"><span>模态窗口3</span></a><br /><br />\n\t</div>\n</div>\n"
  },
  {
    "path": "w_editor.html",
    "content": "<h2 class=\"contentTitle\">编辑器</h2>\n<div style=\"display:block; overflow:hidden; padding:0 10px; line-height:21px;\">\n\n\t<div class=\"tabs\">\n\t\t<div class=\"tabsHeader\">\n\t\t\t<div class=\"tabsHeaderContent\">\n\t\t\t\t<ul>\n\t\t\t\t\t<li class=\"selected\"><a href=\"javascript:;\"><span>示例</span></a></li>\n\t\t\t\t\t<li><a href=\"javascript:;\"><span>代码</span></a></li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"tabsContent\" layoutH=\"100\">\n\t\t\t<div>\n\t\t\t\t<form method=\"get\" action=\"demo/common/ajaxTimeout.json\" class=\"pageForm required-validate\" onsubmit=\"return iframeCallback(this)\">\n\t\t\t\t\t<div class=\"pageFormContent\" layoutH=\"158\">\n\t\t\t\t\t\t<div class=\"unit\">\n\t\t\t\t\t\t\t<textarea class=\"editor\" name=\"description\" rows=\"8\" cols=\"100\"\n\t\t\t\t\t\t\t\tupLinkUrl=\"upload.php\" upLinkExt=\"zip,rar,txt\"\n\t\t\t\t\t\t\t\tupImgUrl=\"upload.php\" upImgExt=\"jpg,jpeg,gif,png\"\n\t\t\t\t\t\t\t\tupFlashUrl=\"upload.php\" upFlashExt=\"swf\"\n\t\t\t\t\t\t\t\tupMediaUrl=\"upload.php\" upMediaExt=\"avi\">\n<strong>xheditor + 文件上传</strong><br/>\nupLinkUrl:超链接上传接口地址<br/>\nupLinkExt:超链接本地上传扩展限制 【可选】【默认值： zip,rar,txt】<br/>\nupImgUrl:图片上传接口地址<br/>\nupImgExt:图片本地上传扩展限制 【可选】【默认值：jpg,jpeg,gif,png】<br/>\nupFlashUrl:动画上传接口地址<br/>\nupFlashExt:动画本地上传扩展限制 【可选】【默认值： swf】<br/>\nupMediaUrl:视频上传接口地址<br/>\nupMediaExt:视频本地上传扩展限制 【可选】【默认值： avi】\n\n\t\t\t\t\t\t\t</textarea>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"unit\">\n\t\t\t\t\t\t\t<textarea class=\"editor\" name=\"description\" rows=\"6\" cols=\"100\">full(完全) 默认方式</textarea>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"unit\">\n\t\t\t\t\t\t\t<textarea class=\"editor\" name=\"description\" rows=\"6\" cols=\"100\" tools=\"mfull\">mfull(多行完全)</textarea>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"unit\">\n\t\t\t\t\t\t\t<textarea class=\"editor\" name=\"description\" rows=\"6\" cols=\"100\" tools=\"simple\">simple(简单)</textarea>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"unit\">\n\t\t\t\t\t\t\t<textarea class=\"editor\" name=\"description\" rows=\"6\" cols=\"100\" tools=\"mini\">mini(迷你)</textarea>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"unit\">\n\t\t\t\t\t\t\t<textarea class=\"editor\" name=\"description\" rows=\"6\" cols=\"100\" tools=\"Cut,Copy,Paste,Pastetext,|,Source,Fullscreen,About\">custom(自定义)</textarea>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"unit\">\n\t\t\t\t\t\t\t<textarea class=\"editor\" name=\"description\" rows=\"6\" cols=\"100\" tools=\"Cut,Copy,Paste,Pastetext,/,Source,Fullscreen,About\">自定义多行模式</textarea>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"formBar\">\n\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t<li><div class=\"buttonActive\"><div class=\"buttonContent\"><button type=\"submit\">提交</button></div></div></li>\n\t\t\t\t\t\t\t<li><div class=\"button\"><div class=\"buttonContent\"><button type=\"button\" class=\"close\">取消</button></div></div></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</div>\n\t\t\t\t</form>\n\t\t\t</div>\n\n\t\t\t<div>\n<textarea rows=\"15\" cols=\"90\">\n说明:\n\ttextarea class=\"editor\" 自动加载在线编辑器.\n\t注意textarea name 属性不能为空\n</textarea>\n\t\t\t</div>\n\n\t\t</div>\n\t\t<div class=\"tabsFooter\">\n\t\t\t<div class=\"tabsFooterContent\"></div>\n\t\t</div>\n\t</div>\n\n</div>\n"
  },
  {
    "path": "w_html5_upload.html",
    "content": "\n<div class=\"pageContent\">\n\t<form method=\"post\" action=\"demo/common/ajaxDone.html\" enctype=\"multipart/form-data\" class=\"pageForm required-validate\" onsubmit=\"return iframeCallback(this);\">\n\t\t<div class=\"pageFormContent\" layoutH=\"56\">\n\t\t\t<div class=\"unit\">\n\t\t\t\t<label>上传单个文件：</label>\n\n\t\t\t\t<div class=\"upload-wrap\">\n\t\t\t\t\t<input type=\"file\" name=\"pic[]\" accept=\"image/*\" class=\"valid\" style=\"left: 0px;\">\n\t\t\t\t\t<div class=\"thumbnail\">\n\t\t\t\t\t\t<img src=\"themes/default/images/wx.png\" style=\"max-width: 80px; max-height: 80px\">\n\t\t\t\t\t\t<a class=\"del-icon\" href=\"demo/common/ajaxDone.html\"></a>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"upload-wrap\">\n\t\t\t\t\t<input type=\"file\" name=\"file1\" accept=\"image/*\">\n\t\t\t\t</div>\n\t\t\t\t<div class=\"upload-wrap\">\n\t\t\t\t\t<input type=\"file\" name=\"file1\" accept=\"image/*\">\n\t\t\t\t</div>\n\t\t\t\t<div class=\"upload-wrap\">\n\t\t\t\t\t<input type=\"file\" name=\"file1\" accept=\"image/*\">\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"unit\">\n\t\t\t\t<label>上传多个文件：</label>\n\t\t\t\t<ul id=\"upload-preview\" class=\"upload-preview\"></ul>\n\t\t\t\t<div class=\"upload-wrap\" rel=\"#upload-preview\">\n\t\t\t\t\t<input type=\"file\" name=\"file2\" accept=\"image/*\" multiple=\"multiple\">\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t</div>\n\t\t<div class=\"formBar\">\n\t\t\t<ul>\n\t\t\t\t<li><div class=\"buttonActive\"><div class=\"buttonContent\"><button type=\"submit\">提交</button></div></div></li>\n\t\t\t\t<li><div class=\"button\"><div class=\"buttonContent\"><button type=\"button\" class=\"close\">取消</button></div></div></li>\n\t\t\t</ul>\n\t\t</div>\n\t</form>\n</div>\n"
  },
  {
    "path": "w_list.html",
    "content": "<form id=\"pagerForm\" method=\"post\" action=\"w_list.html\">\n\t<input type=\"hidden\" name=\"pageNum\" value=\"1\" />\n\t<input type=\"hidden\" name=\"numPerPage\" value=\"${model.numPerPage}\" />\n\t<input type=\"hidden\" name=\"orderField\" value=\"${param.orderField}\" />\n\t<input type=\"hidden\" name=\"orderDirection\" value=\"${param.orderDirection}\" />\n</form>\n<div class=\"pageHeader\">\n\t<form rel=\"pagerForm\" onsubmit=\"return navTabSearch(this);\" action=\"demo_page1.html\" method=\"post\">\n\t<div class=\"searchBar\">\n\t\t<ul class=\"searchContent\">\n\t\t\t<li>\n\t\t\t\t<label>我的客户：</label>\n\t\t\t\t<input type=\"text\" name=\"keywords\" value=\"test\"/>\n\t\t\t</li>\n\t\t\t<li>\n\t\t\t<select class=\"combox\" name=\"province\">\n\t\t\t\t<option value=\"\">所有省市</option>\n\t\t\t\t<option value=\"北京\">北京</option>\n\t\t\t\t<option value=\"上海\">上海</option>\n\t\t\t\t<option value=\"天津\">天津</option>\n\t\t\t\t<option value=\"重庆\">重庆</option>\n\t\t\t\t<option value=\"广东\">广东</option>\n\t\t\t</select>\n\t\t\t</li>\n\t\t</ul>\n\t\t<!--\n\t\t<table class=\"searchContent\">\n\t\t\t<tr>\n\t\t\t\t<td>\n\t\t\t\t\t我的客户：<input type=\"text\"/>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<select class=\"combox\" name=\"province\">\n\t\t\t\t\t\t<option value=\"\">所有省市</option>\n\t\t\t\t\t\t<option value=\"北京\">北京</option>\n\t\t\t\t\t\t<option value=\"上海\">上海</option>\n\t\t\t\t\t\t<option value=\"天津\">天津</option>\n\t\t\t\t\t\t<option value=\"重庆\">重庆</option>\n\t\t\t\t\t\t<option value=\"广东\">广东</option>\n\t\t\t\t\t</select>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t</table>\n\t\t-->\n\t\t<div class=\"subBar\">\n\t\t\t<ul>\n\t\t\t\t<li><div class=\"buttonActive\"><div class=\"buttonContent\"><button type=\"submit\">检索</button></div></div></li>\n\t\t\t\t<li><a class=\"button\" href=\"demo_page6.html\" target=\"dialog\" mask=\"true\" title=\"查询框\"><span>高级检索</span></a></li>\n\t\t\t</ul>\n\t\t</div>\n\t</div>\n\t</form>\n</div>\n\n<div class=\"pageContent\">\n\t<div class=\"panelBar\">\n\t\t<ul class=\"toolBar\">\n\t\t\t<li><a class=\"add\" href=\"demo_page4.html\" target=\"navTab\"><span>添加</span></a></li>\n\t\t\t<li><a class=\"delete\" href=\"demo/common/ajaxDone.html?uid={sid_user}\" target=\"ajaxTodo\" title=\"确定要删除吗？\" warn=\"请选择一个用户\"><span>删除</span></a></li>\n\t\t\t<li><a class=\"edit\" href=\"demo_page4.html?uid={sid_user}\" target=\"navTab\" warn=\"请选择一个用户\"><span>修改</span></a></li>\n\t\t\t<li class=\"line\">line</li>\n\t\t\t<li><a class=\"icon\" href=\"demo/common/dwz-team.xls\" target=\"dwzExport\" targetType=\"navTab\" title=\"实要导出这些记录吗?\"><span>导出EXCEL</span></a></li>\n\t\t\t<li><a class=\"icon\" href=\"javascript:$.printBox('w_list_print')\"><span>打印</span></a></li>\n\t\t</ul>\n\t</div>\n\n\t<div id=\"w_list_print\">\n\t<table class=\"list\" width=\"98%\" targetType=\"navTab\" asc=\"asc\" desc=\"desc\" layoutH=\"116\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th colspan=\"2\">客户信息</th>\n\t\t\t\t<th colspan=\"2\">基本信息</th>\n\t\t\t\t<th colspan=\"3\">资料信息</th>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<th width=\"80\" orderField=\"name\" class=\"asc\">客户号</th>\n\t\t\t\t<th width=\"100\" orderField=\"num\" class=\"desc\">客户名称</th>\n\t\t\t\t<th width=\"100\">客户划分</th>\n\t\t\t\t<th>证件号码</th>\n\t\t\t\t<th align=\"right\" width=\"100\">信用等级</th>\n\t\t\t\t<th width=\"100\">企业性质</th>\n\t\t\t\t<th width=\"100\">建档日期</th>\n\t\t\t</tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr target=\"sid_user\" rel=\"1\">\n\t\t\t\t<td>iso127309</td>\n\t\t\t\t<td>北京市政府咿呀哟</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>0-0001027766351528</td>\n\t\t\t\t<td>四等级</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"2\">\n\t\t\t\t<td>iso127309</td>\n\t\t\t\t<td>北京市政府咿呀哟</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>0-0001027766351528</td>\n\t\t\t\t<td>四等级</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"3\">\n\t\t\t\t<td>iso127309</td>\n\t\t\t\t<td>北京市政府咿呀哟</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>0-0001027766351528</td>\n\t\t\t\t<td>四等级</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"4\">\n\t\t\t\t<td>iso127309</td>\n\t\t\t\t<td>北京市政府咿呀哟</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>0-0001027766351528</td>\n\t\t\t\t<td>四等级</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"5\">\n\t\t\t\t<td>iso127309</td>\n\t\t\t\t<td>北京市政府咿呀哟</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>0-0001027766351528</td>\n\t\t\t\t<td>四等级</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"6\">\n\t\t\t\t<td>iso127309</td>\n\t\t\t\t<td>北京市政府咿呀哟</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>0-0001027766351528</td>\n\t\t\t\t<td>四等级</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"7\">\n\t\t\t\t<td>iso127309</td>\n\t\t\t\t<td>北京市政府咿呀哟</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>0-0001027766351528</td>\n\t\t\t\t<td>四等级</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"8\">\n\t\t\t\t<td>iso127309</td>\n\t\t\t\t<td>北京市政府咿呀哟</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>0-0001027766351528</td>\n\t\t\t\t<td>四等级</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"9\">\n\t\t\t\t<td>iso127309</td>\n\t\t\t\t<td>北京市政府咿呀哟</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>0-0001027766351528</td>\n\t\t\t\t<td>四等级</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"10\">\n\t\t\t\t<td>iso127309</td>\n\t\t\t\t<td>北京市政府咿呀哟</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>0-0001027766351528</td>\n\t\t\t\t<td>四等级</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"11\">\n\t\t\t\t<td>iso127309</td>\n\t\t\t\t<td>北京市政府咿呀哟</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>0-0001027766351528</td>\n\t\t\t\t<td>四等级</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"12\">\n\t\t\t\t<td>iso127309</td>\n\t\t\t\t<td>北京市政府咿呀哟</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>0-0001027766351528</td>\n\t\t\t\t<td>四等级</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"13\">\n\t\t\t\t<td>iso127309</td>\n\t\t\t\t<td>北京市政府咿呀哟</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>0-0001027766351528</td>\n\t\t\t\t<td>四等级</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"14\">\n\t\t\t\t<td>iso127309</td>\n\t\t\t\t<td>北京市政府咿呀哟</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>0-0001027766351528</td>\n\t\t\t\t<td>四等级</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"15\">\n\t\t\t\t<td>iso127309</td>\n\t\t\t\t<td>北京市政府咿呀哟</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>0-0001027766351528</td>\n\t\t\t\t<td>四等级</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"16\">\n\t\t\t\t<td>iso127309</td>\n\t\t\t\t<td>北京市政府咿呀哟</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>0-0001027766351528</td>\n\t\t\t\t<td>四等级</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"17\">\n\t\t\t\t<td>iso127309</td>\n\t\t\t\t<td>北京市政府咿呀哟</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>0-0001027766351528</td>\n\t\t\t\t<td>四等级</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"18\">\n\t\t\t\t<td>iso127309</td>\n\t\t\t\t<td>北京市政府咿呀哟</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>0-0001027766351528</td>\n\t\t\t\t<td>四等级</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"19\">\n\t\t\t\t<td>iso127309</td>\n\t\t\t\t<td>北京市政府咿呀哟</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>0-0001027766351528</td>\n\t\t\t\t<td>四等级</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"20\">\n\t\t\t\t<td>iso127309</td>\n\t\t\t\t<td>北京市政府咿呀哟</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>0-0001027766351528</td>\n\t\t\t\t<td>四等级</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"21\">\n\t\t\t\t<td>iso127309</td>\n\t\t\t\t<td>北京市政府咿呀哟</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>0-0001027766351528</td>\n\t\t\t\t<td>四等级</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"22\">\n\t\t\t\t<td>iso127309</td>\n\t\t\t\t<td>北京市政府咿呀哟</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>0-0001027766351528</td>\n\t\t\t\t<td>四等级</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"23\">\n\t\t\t\t<td>iso127309</td>\n\t\t\t\t<td>北京市政府咿呀哟</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>0-0001027766351528</td>\n\t\t\t\t<td>四等级</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"24\">\n\t\t\t\t<td>iso127309</td>\n\t\t\t\t<td>北京市政府咿呀哟</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>0-0001027766351528</td>\n\t\t\t\t<td>四等级</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"25\">\n\t\t\t\t<td>iso127309</td>\n\t\t\t\t<td>北京市政府咿呀哟</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>0-0001027766351528</td>\n\t\t\t\t<td>四等级</td>\n\t\t\t\t<td>政府单位</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t</tr>\n\t\t</tbody>\n\t</table>\n\t</div>\n\n\t<div class=\"panelBar\" >\n\t\t<div class=\"pages\">\n\t\t\t<span>显示</span>\n\t\t\t<select name=\"numPerPage\" onchange=\"navTabPageBreak({numPerPage:this.value})\">\n\t\t\t\t<option value=\"20\">20</option>\n\t\t\t\t<option value=\"50\">50</option>\n\t\t\t\t<option value=\"100\">100</option>\n\t\t\t\t<option value=\"200\">200</option>\n\t\t\t</select>\n\t\t\t<span>条，共23条</span>\n\t\t</div>\n\n\t\t<div class=\"pagination\" targetType=\"navTab\" totalCount=\"200\" numPerPage=\"20\" pageNumShown=\"10\" currentPage=\"2\"></div>\n\n\t</div>\n\n</div>\n"
  },
  {
    "path": "w_panel.html",
    "content": "<h2 class=\"contentTitle\">面板</h2>\n\n\n<div class=\"pageContent sortDrag\" selector=\"h1\" layoutH=\"42\">\n\n\t<div class=\"panel\" defH=\"150\">\n\t\t<h1>不可折叠面板1</h1>\n\t\t<div>\n\t\t\t<table class=\"list\" width=\"98%\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th width=\"80\">序号</th>\n\t\t\t\t\t\t<th>姓名</th>\n\t\t\t\t\t\t<th>性别</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>1</td>\n\t\t\t\t\t\t<td>张三</td>\n\t\t\t\t\t\t<td>男</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>2</td>\n\t\t\t\t\t\t<td>李四</td>\n\t\t\t\t\t\t<td>女</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>1</td>\n\t\t\t\t\t\t<td>张三</td>\n\t\t\t\t\t\t<td>男</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>2</td>\n\t\t\t\t\t\t<td>李四</td>\n\t\t\t\t\t\t<td>女</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>1</td>\n\t\t\t\t\t\t<td>张三</td>\n\t\t\t\t\t\t<td>男</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>2</td>\n\t\t\t\t\t\t<td>李四</td>\n\t\t\t\t\t\t<td>女</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t</div>\n\t</div>\n\t\n\t<div class=\"panel close collapse\" defH=\"150\">\n\t\t<h1>可折叠默认关闭面板</h1>\n\t\t<div>\n\t\t\t<table class=\"table\" width=\"98%\">\n\t\t\t\t<thead>\n\t\t\t\t<tr>\n\t\t\t\t\t<th width=\"80\">序号</th>\n\t\t\t\t\t<th>姓名</th>\n\t\t\t\t\t<th>性别</th>\n\t\t\t\t</tr>\n\t\t\t\t</thead>\n\t\t\t\t<tbody>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>1</td>\n\t\t\t\t\t<td>张三</td>\n\t\t\t\t\t<td>男</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>2</td>\n\t\t\t\t\t<td>李四</td>\n\t\t\t\t\t<td>女</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>1</td>\n\t\t\t\t\t<td>张三</td>\n\t\t\t\t\t<td>男</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>2</td>\n\t\t\t\t\t<td>李四</td>\n\t\t\t\t\t<td>女</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>1</td>\n\t\t\t\t\t<td>张三</td>\n\t\t\t\t\t<td>男</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td>2</td>\n\t\t\t\t\t<td>李四</td>\n\t\t\t\t\t<td>女</td>\n\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t</div>\n\t</div>\n\n\t<div class=\"panel collapse\" minH=\"100\" defH=\"150\">\n\t\t<h1>可折叠默认打开面板</h1>\n\t\t<div>\n\t\t\t<p>内容</p>\n\t\t\t<p>内容</p>\n\t\t\t<p>内容</p>\n\t\t</div>\n\t</div>\n\n\t<div id=\"testDrag\" style=\"border:1px solid red;\">test</div>\n</div>\n\n<script>\n\n\t$.fn.extend({\n\t\tdivDrag: function (options) {\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar $box = $(this);\n\t\t\t\t$box.mousedown(function(event){\n\t\t\t\t\tvar position = $box.position();\n\t\t\t\t\t$box.css({\n\t\t\t\t\t\tposition:'absolute',\n\t\t\t\t\t\ttop:position.top,\n\t\t\t\t\t\tleft:position.left,\n\t\t\t\t\t\twidth:$box.width()+'px',\n\t\t\t\t\t\theight:$box.height()+'px'\n\t\t\t\t\t}).jDrag({\n\t\t\t\t\t\tevent:event\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t});\n\t\t}\n\t});\n\n\t$('#testDrag').divDrag();\n</script>"
  },
  {
    "path": "w_removeSelected.html",
    "content": "<script type=\"text/javascript\">\n\tfunction myExport(url){\n\t\tvar $form = $(\"#mySearchForm\", navTab.getCurrentPanel());\n\n\t\tif (!$form[0].province.value) {\n\t\t\talertMsg.error('请选择省份');\n\t\t\treturn false;\n\t\t}\n\n\t\tDWZ.pargerFormExport(url, $form);\n\t}\n</script>\n\n<form id=\"pagerForm\" method=\"post\" action=\"#rel#\">\n\t<input type=\"hidden\" name=\"pageNum\" value=\"1\" />\n\t<input type=\"hidden\" name=\"numPerPage\" value=\"${model.numPerPage}\" />\n\t<input type=\"hidden\" name=\"orderField\" value=\"${param.orderField}\" />\n\t<input type=\"hidden\" name=\"orderDirection\" value=\"${param.orderDirection}\" />\n</form>\n\n<div class=\"pageHeader\">\n\t<form id=\"mySearchForm\" rel=\"pagerForm\" onsubmit=\"return navTabSearch(this);\" action=\"w_removeSelected.html\" method=\"post\">\n\t<div class=\"searchBar\">\n\t\t<ul class=\"searchContent\">\n\t\t\t<li>\n\t\t\t\t<label>我的客户：</label>\n\t\t\t\t<input type=\"text\" name=\"keywords\" value=\"\"/>\n\t\t\t</li>\n\t\t\t<li>\n\t\t\t<select class=\"combox\" name=\"province\">\n\t\t\t\t<option value=\"\">所有省市</option>\n\t\t\t\t<option value=\"北京\">北京</option>\n\t\t\t\t<option value=\"上海\">上海</option>\n\t\t\t\t<option value=\"天津\">天津</option>\n\t\t\t\t<option value=\"重庆\">重庆</option>\n\t\t\t\t<option value=\"广东\">广东</option>\n\t\t\t</select>\n\t\t\t</li>\n\t\t</ul>\n\t\t<!--\n\t\t<table class=\"searchContent\">\n\t\t\t<tr>\n\t\t\t\t<td>\n\t\t\t\t\t我的客户：<input type=\"text\"/>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<select class=\"combox\" name=\"province\">\n\t\t\t\t\t\t<option value=\"\">所有省市</option>\n\t\t\t\t\t\t<option value=\"北京\">北京</option>\n\t\t\t\t\t\t<option value=\"上海\">上海</option>\n\t\t\t\t\t\t<option value=\"天津\">天津</option>\n\t\t\t\t\t\t<option value=\"重庆\">重庆</option>\n\t\t\t\t\t\t<option value=\"广东\">广东</option>\n\t\t\t\t\t</select>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t</table>\n\t\t-->\n\t\t<div class=\"subBar\">\n\t\t\t<ul>\n\t\t\t\t<li><div class=\"buttonActive\"><div class=\"buttonContent\"><button type=\"submit\">检索</button></div></div></li>\n\t\t\t\t<li><a class=\"button\" href=\"demo_page6.html\" target=\"dialog\" mask=\"true\" title=\"查询框\"><span>高级检索</span></a></li>\n\t\t\t</ul>\n\t\t</div>\n\t</div>\n\t</form>\n</div>\n<div class=\"pageContent\">\n\t<div class=\"panelBar\">\n\t\t<ul class=\"toolBar\">\n\t\t\t<li><a class=\"add\" href=\"demo_page4.html\" target=\"navTab\"><span>添加</span></a></li>\n\t\t\t<li><a title=\"确实要删除这些记录吗?\" target=\"selectedTodo\" rel=\"ids\" href=\"demo/common/ajaxDone.html\" class=\"delete\"><span>批量删除默认方式</span></a></li>\n\t\t\t<li><a title=\"确实要删除这些记录吗?\" target=\"selectedTodo\" rel=\"ids\" postType=\"string\" href=\"demo/common/ajaxDone.html\" class=\"delete\"><span>批量删除逗号分隔</span></a></li>\n\t\t\t<li><a class=\"edit\" href=\"demo_page4.html?uid={sid_user}\" target=\"navTab\" warn=\"请选择一个用户\"><span>修改</span></a></li>\n\t\t\t<li class=\"line\">line</li>\n\t\t\t<li><a class=\"icon\" href=\"demo/common/dwz-team.xls\" target=\"dwzExport\" targetType=\"navTab\" title=\"实要导出这些记录吗?\"><span>导出EXCEL</span></a></li>\n\t\t\t<li><a class=\"icon\" href=\"javascript:myExport('demo/common/dwz-team.xls')\"><span>自定义导出</span></a></li>\n\t\t\t<li><a title=\"选中id跳出DWZ页面打印?\" target=\"selectedBlank\" rel=\"ids\" postType=\"string\" href=\"demo/common/ajaxDone.html\" class=\"icon\"><span>选中跳出DWZ</span></a></li>\n\t\t\t<!--<li><a target=\"selectedLoad\" targetType=\"dialog\" rel=\"ids\" postType=\"string\" href=\"demo_page1.html\" class=\"icon\"><span>批量dialog加载逗号分隔</span></a></li>-->\n\t\t\t<li><a target=\"selectedLoad\" targetType=\"navTab\" rel=\"ids\" postType=\"string\" href=\"demo_page1.html\" class=\"icon\"><span>批量navTab加载逗号分隔</span></a></li>\n\t\t</ul>\n\t</div>\n\t<table class=\"table\" width=\"1200\" layoutH=\"138\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<th width=\"22\"><input type=\"checkbox\" group=\"ids\" class=\"checkboxCtrl\"></th>\n\t\t\t\t<th width=\"120\" orderField=\"accountNo\" class=\"asc\">客户号</th>\n\t\t\t\t<th orderField=\"accountName\">客户名称</th>\n\t\t\t\t<th width=\"80\" orderField=\"accountType\">客户类型</th>\n\t\t\t\t<th width=\"130\" orderField=\"accountCert\">证件号码</th>\n\t\t\t\t<th width=\"60\" align=\"center\" orderField=\"accountLevel\">信用等级</th>\n\t\t\t\t<th width=\"70\">所属行业</th>\n\t\t\t\t<th width=\"70\">建档日期</th>\n\t\t\t\t<th width=\"70\">操作</th>\n\t\t\t</tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr target=\"sid_user\" rel=\"1\">\n\t\t\t\t<td><input name=\"ids\" value=\"xxx\" type=\"checkbox\"></td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t\t<td>\n\t\t\t\t\t<a title=\"删除\" target=\"ajaxTodo\" href=\"demo/common/ajaxDone.html?id=xxx\" class=\"btnDel\">删除</a>\n\t\t\t\t\t<a title=\"编辑\" target=\"navTab\" href=\"demo_page4.html?id=xxx\" class=\"btnEdit\">编辑</a>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"2\">\n\t\t\t\t<td><input name=\"ids\" value=\"xxx\" type=\"checkbox\"></td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t\t<td>\n\t\t\t\t\t<a title=\"删除\" target=\"ajaxTodo\" href=\"demo/common/ajaxDone.html?id=xxx\" class=\"btnDel\">删除</a>\n\t\t\t\t\t<a title=\"编辑\" target=\"navTab\" href=\"demo_page4.html?id=xxx\" class=\"btnEdit\">编辑</a>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"3\">\n\t\t\t\t<td><input name=\"ids\" value=\"xxx\" type=\"checkbox\"></td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t\t<td>\n\t\t\t\t\t<a title=\"删除\" target=\"ajaxTodo\" href=\"demo/common/ajaxDone.html?id=xxx\" class=\"btnDel\">删除</a>\n\t\t\t\t\t<a title=\"编辑\" target=\"navTab\" href=\"demo_page4.html?id=xxx\" class=\"btnEdit\">编辑</a>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"4\">\n\t\t\t\t<td><input name=\"ids\" value=\"xxx\" type=\"checkbox\"></td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t\t<td>\n\t\t\t\t\t<a title=\"删除\" target=\"ajaxTodo\" href=\"demo/common/ajaxDone.html?id=xxx\" class=\"btnDel\">删除</a>\n\t\t\t\t\t<a title=\"编辑\" target=\"navTab\" href=\"demo_page4.html?id=xxx\" class=\"btnEdit\">编辑</a>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"5\">\n\t\t\t\t<td><input name=\"ids\" value=\"xxx\" type=\"checkbox\"></td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t\t<td>\n\t\t\t\t\t<a title=\"删除\" target=\"ajaxTodo\" href=\"demo/common/ajaxDone.html?id=xxx\" class=\"btnDel\">删除</a>\n\t\t\t\t\t<a title=\"编辑\" target=\"navTab\" href=\"demo_page4.html?id=xxx\" class=\"btnEdit\">编辑</a>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"6\">\n\t\t\t\t<td><input name=\"ids\" value=\"xxx\" type=\"checkbox\"></td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t\t<td>\n\t\t\t\t\t<a title=\"删除\" target=\"ajaxTodo\" href=\"demo/common/ajaxDone.html?id=xxx\" class=\"btnDel\">删除</a>\n\t\t\t\t\t<a title=\"编辑\" target=\"navTab\" href=\"demo_page4.html?id=xxx\" class=\"btnEdit\">编辑</a>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"7\">\n\t\t\t\t<td><input name=\"ids\" value=\"xxx\" type=\"checkbox\"></td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t\t<td>\n\t\t\t\t\t<a title=\"删除\" target=\"ajaxTodo\" href=\"demo/common/ajaxDone.html?id=xxx\" class=\"btnDel\">删除</a>\n\t\t\t\t\t<a title=\"编辑\" target=\"navTab\" href=\"demo_page4.html?id=xxx\" class=\"btnEdit\">编辑</a>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"8\">\n\t\t\t\t<td><input name=\"ids\" value=\"xxx\" type=\"checkbox\"></td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t\t<td>\n\t\t\t\t\t<a title=\"删除\" target=\"ajaxTodo\" href=\"demo/common/ajaxDone.html?id=xxx\" class=\"btnDel\">删除</a>\n\t\t\t\t\t<a title=\"编辑\" target=\"navTab\" href=\"demo_page4.html?id=xxx\" class=\"btnEdit\">编辑</a>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"9\">\n\t\t\t\t<td><input name=\"ids\" value=\"xxx\" type=\"checkbox\"></td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t\t<td>\n\t\t\t\t\t<a title=\"删除\" target=\"ajaxTodo\" href=\"demo/common/ajaxDone.html?id=xxx\" class=\"btnDel\">删除</a>\n\t\t\t\t\t<a title=\"编辑\" target=\"navTab\" href=\"demo_page4.html?id=xxx\" class=\"btnEdit\">编辑</a>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"10\">\n\t\t\t\t<td><input name=\"ids\" value=\"xxx\" type=\"checkbox\"></td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t\t<td>\n\t\t\t\t\t<a title=\"删除\" target=\"ajaxTodo\" href=\"demo/common/ajaxDone.html?id=xxx\" class=\"btnDel\">删除</a>\n\t\t\t\t\t<a title=\"编辑\" target=\"navTab\" href=\"demo_page4.html?id=xxx\" class=\"btnEdit\">编辑</a>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"11\">\n\t\t\t\t<td><input name=\"ids\" value=\"xxx\" type=\"checkbox\"></td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t\t<td>\n\t\t\t\t\t<a title=\"删除\" target=\"ajaxTodo\" href=\"demo/common/ajaxDone.html?id=xxx\" class=\"btnDel\">删除</a>\n\t\t\t\t\t<a title=\"编辑\" target=\"navTab\" href=\"demo_page4.html?id=xxx\" class=\"btnEdit\">编辑</a>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"12\">\n\t\t\t\t<td><input name=\"ids\" value=\"xxx\" type=\"checkbox\"></td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t\t<td>\n\t\t\t\t\t<a title=\"删除\" target=\"ajaxTodo\" href=\"demo/common/ajaxDone.html?id=xxx\" class=\"btnDel\">删除</a>\n\t\t\t\t\t<a title=\"编辑\" target=\"navTab\" href=\"demo_page4.html?id=xxx\" class=\"btnEdit\">编辑</a>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"13\">\n\t\t\t\t<td><input name=\"ids\" value=\"xxx\" type=\"checkbox\"></td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t\t<td>\n\t\t\t\t\t<a title=\"删除\" target=\"ajaxTodo\" href=\"demo/common/ajaxDone.html?id=xxx\" class=\"btnDel\">删除</a>\n\t\t\t\t\t<a title=\"编辑\" target=\"navTab\" href=\"demo_page4.html?id=xxx\" class=\"btnEdit\">编辑</a>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"14\">\n\t\t\t\t<td><input name=\"ids\" value=\"xxx\" type=\"checkbox\"></td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t\t<td>\n\t\t\t\t\t<a title=\"删除\" target=\"ajaxTodo\" href=\"demo/common/ajaxDone.html?id=xxx\" class=\"btnDel\">删除</a>\n\t\t\t\t\t<a title=\"编辑\" target=\"navTab\" href=\"demo_page4.html?id=xxx\" class=\"btnEdit\">编辑</a>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"15\">\n\t\t\t\t<td><input name=\"ids\" value=\"xxx\" type=\"checkbox\"></td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t\t<td>\n\t\t\t\t\t<a title=\"删除\" target=\"ajaxTodo\" href=\"demo/common/ajaxDone.html?id=xxx\" class=\"btnDel\">删除</a>\n\t\t\t\t\t<a title=\"编辑\" target=\"navTab\" href=\"demo_page4.html?id=xxx\" class=\"btnEdit\">编辑</a>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"16\">\n\t\t\t\t<td><input name=\"ids\" value=\"xxx\" type=\"checkbox\"></td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t\t<td>\n\t\t\t\t\t<a title=\"删除\" target=\"ajaxTodo\" href=\"demo/common/ajaxDone.html?id=xxx\" class=\"btnDel\">删除</a>\n\t\t\t\t\t<a title=\"编辑\" target=\"navTab\" href=\"demo_page4.html?id=xxx\" class=\"btnEdit\">编辑</a>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"17\">\n\t\t\t\t<td><input name=\"ids\" value=\"xxx\" type=\"checkbox\"></td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t\t<td>\n\t\t\t\t\t<a title=\"删除\" target=\"ajaxTodo\" href=\"demo/common/ajaxDone.html?id=xxx\" class=\"btnDel\">删除</a>\n\t\t\t\t\t<a title=\"编辑\" target=\"navTab\" href=\"demo_page4.html?id=xxx\" class=\"btnEdit\">编辑</a>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"18\">\n\t\t\t\t<td><input name=\"ids\" value=\"xxx\" type=\"checkbox\"></td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t\t<td>\n\t\t\t\t\t<a title=\"删除\" target=\"ajaxTodo\" href=\"demo/common/ajaxDone.html?id=xxx\" class=\"btnDel\">删除</a>\n\t\t\t\t\t<a title=\"编辑\" target=\"navTab\" href=\"demo_page4.html?id=xxx\" class=\"btnEdit\">编辑</a>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"19\">\n\t\t\t\t<td><input name=\"ids\" value=\"xxx\" type=\"checkbox\"></td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t\t<td>\n\t\t\t\t\t<a title=\"删除\" target=\"ajaxTodo\" href=\"demo/common/ajaxDone.html?id=xxx\" class=\"btnDel\">删除</a>\n\t\t\t\t\t<a title=\"编辑\" target=\"navTab\" href=\"demo_page4.html?id=xxx\" class=\"btnEdit\">编辑</a>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t\t<tr target=\"sid_user\" rel=\"20\">\n\t\t\t\t<td><input name=\"ids\" value=\"xxx\" type=\"checkbox\"></td>\n\t\t\t\t<td>A120113196309052434</td>\n\t\t\t\t<td>天津市华建装饰工程有限公司</td>\n\t\t\t\t<td>联社营业部</td>\n\t\t\t\t<td>29385739203816293</td>\n\t\t\t\t<td>5级</td>\n\t\t\t\t<td>政府机构</td>\n\t\t\t\t<td>2009-05-21</td>\n\t\t\t\t<td>\n\t\t\t\t\t<a title=\"删除\" target=\"ajaxTodo\" href=\"demo/common/ajaxDone.html?id=xxx\" class=\"btnDel\">删除</a>\n\t\t\t\t\t<a title=\"编辑\" target=\"navTab\" href=\"demo_page4.html?id=xxx\" class=\"btnEdit\">编辑</a>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t</tbody>\n\t</table>\n\t<div class=\"panelBar\">\n\t\t<div class=\"pages\">\n\t\t\t<span>显示</span>\n\t\t\t<select class=\"combox\" name=\"numPerPage\" onchange=\"navTabPageBreak({numPerPage:this.value})\">\n\t\t\t\t<option value=\"20\">20</option>\n\t\t\t\t<option value=\"50\">50</option>\n\t\t\t\t<option value=\"100\">100</option>\n\t\t\t\t<option value=\"200\">200</option>\n\t\t\t</select>\n\t\t\t<span>条，共${totalCount}条</span>\n\t\t</div>\n\t\t\n\t\t<div class=\"pagination\" targetType=\"navTab\" totalCount=\"200\" numPerPage=\"20\" pageNumShown=\"10\" currentPage=\"1\"></div>\n\n\t</div>\n</div>\n"
  },
  {
    "path": "w_tabs.html",
    "content": "<h2 class=\"contentTitle\">选项卡面板演示</h2>\n\n<div class=\"pageContent\">\n\t<div class=\"tabs close collapse\" currentIndex=\"1\" eventType=\"click\">\n\t\t<div class=\"tabsHeader\">\n\t\t\t<div class=\"tabsHeaderContent\">\n\t\t\t\t<ul>\n\t\t\t\t\t<li><a href=\"javascript:;\"><span>标题1</span></a></li>\n\t\t\t\t\t<li><a href=\"demo_page2.html\" class=\"j-ajax\" data-cache=\"false\"><span>标题2</span></a></li>\n\t\t\t\t\t<li><a href=\"demo_page2.html\" class=\"j-ajax\"><span>标题3</span></a></li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"tabsContent\" style=\"height:150px;\">\n\t\t\t<div>\n<pre>\ncurrentIndex: 0-n\tdefault:0\neventType: click|hover\tdefault:click\n</pre>\n\t\t\t</div>\n\t\t\t<div>内容2</div>\n\t\t\t<div>内容3</div>\n\t\t</div>\n\t\t<div class=\"tabsFooter\">\n\t\t\t<div class=\"tabsFooterContent\"></div>\n\t\t</div>\n\t</div>\n\t\n\t<p>&nbsp;</p>\n\t\n\t<div class=\"tabs\" currentIndex=\"0\" eventType=\"click\">\n\t\t<div class=\"tabsHeader\">\n\t\t\t<div class=\"tabsHeaderContent\">\n\t\t\t\t<ul>\n\t\t\t\t\t<li><a href=\"javascript:;\"><span>标题1</span></a></li>\n\t\t\t\t\t<li><a href=\"javascript:;\"><span>标题2</span></a></li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"tabsContent\" style=\"height:250px;\">\n\t\t\t<div>内容1\n\t\t\t\t<p>\n\t\t\t\t\t<label>客户名称：</label>\n\t\t\t\t\t<input name=\"name\" class=\"required\" type=\"hover\" size=\"30\" value=\"\" alt=\"请输入客户名称\"/>\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t\n\t\t\t\t<div class=\"tabs\" currentIndex=\"0\" eventType=\"click\" style=\"width:300px\">\n\t\t\t\t\t<div class=\"tabsHeader\">\n\t\t\t\t\t\t<div class=\"tabsHeaderContent\">\n\t\t\t\t\t\t\t<ul>\n\t\t\t\t\t\t\t\t<li><a href=\"javascript:;\"><span>标题1</span></a></li>\n\t\t\t\t\t\t\t\t<li><a href=\"javascript:;\"><span>标题2</span></a></li>\n\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"tabsContent\" style=\"height:150px;\">\n\t\t\t\t\t\t<div>内容1</div>\n\t\t\t\t\t\t<div>内容2</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"tabsFooter\">\n\t\t\t\t\t\t<div class=\"tabsFooterContent\"></div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"tabsFooter\">\n\t\t\t<div class=\"tabsFooterContent\"></div>\n\t\t</div>\n\t</div>\n</div>"
  },
  {
    "path": "w_textInput.html",
    "content": "<h2 class=\"contentTitle\">文本框/文本域</h2>\n\n\t\n<div class=\"pageFormContent\" layoutH=\"60\">\n\t<fieldset>\n\t\t<legend>单行文本框</legend>\n\t\t<dl>\n\t\t\t<dt>普通输入框：</dt>\n\t\t\t<dd><input name=\"field1\" type=\"text\" /></dd>\n\t\t</dl>\n\t\t<dl>\n\t\t\t<dt>提示信息：</dt>\n\t\t\t<dd><input name=\"field2\" type=\"text\" alt=\"提示信息\"/></dd>\n\t\t</dl>\n\t\t<dl>\n\t\t\t<dt>必填：</dt>\n\t\t\t<dd><input class=\"required\" name=\"field3\" type=\"text\" /></dd>\n\t\t</dl>\n\t\t<dl>\n\t\t\t<dt>错误：</dt>\n\t\t\t<dd><input class=\"error\" name=\"field4\" type=\"text\" /></dd>\n\t\t</dl>\n\t\t<dl>\n\t\t\t<dt>只读：</dt>\n\t\t\t<dd><input readonly=\"true\" name=\"field5\" type=\"text\" /></dd>\n\t\t</dl>\n\t\t<dl>\n\t\t\t<dt>禁用：</dt>\n\t\t\t<dd><input disabled=\"true\" name=\"field6\" type=\"text\" /></dd>\n\t\t</dl>\n\t\t<dl>\n\t\t\t<dt>密码：</dt>\n\t\t\t<dd><input name=\"password\" type=\"text\" /></dd>\n\t\t</dl>\n\t</fieldset>\n\t\n\t<fieldset>\n\t\t<legend>多行文本框(文本域)</legend>\n\t\t<dl class=\"nowrap\">\n\t\t\t<dt>普通文本框：</dt>\n\t\t\t<dd><textarea name=\"textarea1\" cols=\"80\" rows=\"2\"></textarea></dd>\n\t\t</dl>\n\t\t<dl class=\"nowrap\">\n\t\t\t<dt>必填：</dt>\n\t\t\t<dd><textarea name=\"textarea2\" class=\"required\" cols=\"80\" rows=\"2\"></textarea></dd>\n\t\t</dl>\n\t\t<dl class=\"nowrap\">\n\t\t\t<dt>错误：</dt>\n\t\t\t<dd><textarea name=\"textarea3\" class=\"error\" cols=\"80\" rows=\"2\"></textarea></dd>\n\t\t</dl>\n\t\t<dl class=\"nowrap\">\n\t\t\t<dt>只读：</dt>\n\t\t\t<dd><textarea name=\"textarea4\" readonly=\"true\" cols=\"80\" rows=\"2\"></textarea></dd>\n\t\t</dl>\n\t\t<dl class=\"nowrap\">\n\t\t\t<dt>禁用：</dt>\n\t\t\t<dd><textarea name=\"textarea5\" disabled=\"true\" cols=\"80\" rows=\"2\"></textarea></dd>\n\t\t</dl>\n\t</fieldset>\n</div>\n"
  },
  {
    "path": "w_tree.html",
    "content": "<h2 class=\"contentTitle\">树形菜单</h2>\n\n<div id=\"resultBox\"></div>\n\n<div style=\" float:left; display:block; margin:10px; overflow:auto; width:200px; height:200px; overflow:auto; border:solid 1px #CCC; line-height:21px; background:#FFF;\">\n<p>treeFolder treeCheck expand</p>\n<form method=\"post\" action=\"demo/common/ajaxDone.json\" class=\"pageForm required-validate\" onsubmit=\"return validateCallback(this)\">\n<ul class=\"tree treeFolder treeCheck expand\" oncheck=\"test_check_tree\">\n\t<li><a tname=\"name\" tvalue=\"框架面板\" >框架面板</a>\n\t\t<ul>\n\t\t\t<li><a tname=\"name\" tvalue=\"value1\" checked=\"true\">我的主页</a></li>\n\t\t\t<li><a tname=\"name\" tvalue=\"value2\">页面一</a></li>\n\t\t\t<li><a tname=\"name\" tvalue=\"value3\">替换页面一</a></li>\n\t\t\t<li><a tname=\"name\" tvalue=\"value4\">页面二</a></li>\n\t\t\t<li><a tname=\"name\" tvalue=\"value5\">页面三</a></li>\n\t\t</ul>\n\t</li>\n\n\t<li><a tname=\"name\" tvalue=\"test1\">Test 1</a>\n\t\t<ul>\n\t\t\t<li><a tname=\"name\" tvalue=\"test1.1\">Test 1.1</a>\n\t\t\t\t<ul>\n\t\t\t\t\t<li><a tname=\"name\" tvalue=\"test1.1.1\" checked=\"true\">Test 1.1.1</a></li>\n\t\t\t\t\t<li><a tname=\"name\" tvalue=\"test1.1.2\" checked=\"false\">Test 1.1.2</a></li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t\t<li><a tname=\"name\" tvalue=\"test1.2\" checked=\"true\">Test 1.2</a></li>\n\t\t</ul>\n\t</li>\n\t<li><a tname=\"name\" tvalue=\"test2\" checked=\"true\">Test 2</a></li>\n</ul>\n\n<input type=\"submit\" value=\"Submit\"/>\n</form>\n</div>\n\n<div style=\"float:left; display:block; margin:10px; overflow:auto; width:200px; height:200px; border:solid 1px #CCC; line-height:21px; background:#FFF;\">\n<p>treeFolder collapse</p>\n<ul class=\"tree treeFolder collapse\">\n\t<li><a href=\"tabsPage.html\" target=\"navTab\">框架面板</a>\n\t\t<ul>\n\t\t\t<li target=\"selectedObjId\" rel=\"1\"><a href=\"main.html\" target=\"navTab\" rel=\"main\">我的主页</a></li>\n\t\t\t<li target=\"selectedObjId\" rel=\"2\"><a href=\"newPage1.html\" target=\"navTab\" rel=\"page1\">页面一</a></li>\n\t\t\t<li><a href=\"newPage2.html\" target=\"navTab\" rel=\"page1\">替换页面一</a></li>\n\t\t\t<li><a href=\"newPage2.html\" target=\"navTab\" rel=\"page2\">页面二</a></li>\n\t\t\t<li><a href=\"newPage3.html\" target=\"navTab\" rel=\"page3\" title=\"页面三（自定义标签名）\">页面三</a></li>\n\t\t</ul>\n\t</li>\n\t<li><a href=\"w_panel.html\" target=\"navTab\" rel=\"w_panel\">面板</a></li>\n\t<li><a href=\"w_tabs.html\" target=\"navTab\" rel=\"w_tabs\">选项卡面板</a></li>\n\t<li><a href=\"w_dialog.html\" target=\"navTab\" rel=\"w_dialog\">弹出窗口</a></li>\n\t<li><a href=\"w_alert.html\" target=\"navTab\" rel=\"w_alert\">提示窗口</a></li>\n\t<li><a href=\"w_table.html\" target=\"navTab\" rel=\"w_table\">表格容器</a></li>\n\t<li><a href=\"w_tree.html\" target=\"navTab\" rel=\"w_tree\">树形菜单</a></li>\n\t<li><a href=\"w_editor.html\" target=\"navTab\" rel=\"w_editor\">编辑器</a></li>\n</ul>\n</div>\n<div style=\" float:left; display:block; margin:10px; overflow:auto; width:200px; height:200px; border:solid 1px #CCC; line-height:21px; background:#FFF;\">\n<ul class=\"tree\">\n\t<li><a href=\"tabsPage.html\" target=\"navTab\">框架面板</a>\n\t\t<ul>\n\t\t\t<li><a href=\"main.html\" target=\"navTab\" rel=\"main\">我的主页</a></li>\n\t\t\t<li><a href=\"newPage1.html\" target=\"navTab\" rel=\"page1\">页面一</a></li>\n\t\t\t<li><a href=\"newPage2.html\" target=\"navTab\" rel=\"page1\">替换页面一</a></li>\n\t\t\t<li><a href=\"newPage2.html\" target=\"navTab\" rel=\"page2\">页面二</a></li>\n\t\t\t<li><a href=\"newPage3.html\" target=\"navTab\" rel=\"page3\" title=\"页面三（自定义标签名）\">页面三</a></li>\n\t\t</ul>\n\t</li>\n\t<li><a href=\"w_panel.html\" target=\"navTab\" rel=\"w_panel\">面板</a></li>\n\t<li><a href=\"w_tabs.html\" target=\"navTab\" rel=\"w_tabs\">选项卡面板</a></li>\n\t<li><a href=\"w_dialog.html\" target=\"navTab\" rel=\"w_dialog\">弹出窗口</a></li>\n\t<li><a href=\"w_alert.html\" target=\"navTab\" rel=\"w_alert\">提示窗口</a></li>\n\t<li><a href=\"w_table.html\" target=\"navTab\" rel=\"w_table\">表格容器</a></li>\n\t<li><a href=\"w_tree.html\" target=\"navTab\" rel=\"w_tree\">树形菜单</a></li>\n\t<li><a href=\"w_editor.html\" target=\"navTab\" rel=\"w_editor\">编辑器</a></li>\n\n</ul>\n</div>\n\n<script type=\"text/javascript\">\nfunction test_check_tree(json){\n\tconsole.log(json);\n\n\tvar result = json.checked ? \"选择\" : \"取消\";\n//\talert(json.checked);\n\n\t$(json.items).each(function(i){\n\t\tresult += \"<p>name:\"+this.name + \" value:\"+this.value+\" text: \"+this.text+\"</p>\";\n\t});\n\t$(\"#resultBox\").html(result);\n\n}\n</script>\n"
  },
  {
    "path": "w_uploadify.html",
    "content": "<h2 class=\"contentTitle\">uploadify多文件上传</h2>\n\n<style type=\"text/css\" media=\"screen\">\n.my-uploadify-button {\n\tbackground:none;\n\tborder: none;\n\ttext-shadow: none;\n\tborder-radius:0;\n}\n\n.uploadify:hover .my-uploadify-button {\n\tbackground:none;\n\tborder: none;\n}\n\n.fileQueue {\n\twidth: 400px;\n\theight: 150px;\n\toverflow: auto;\n\tborder: 1px solid #E5E5E5;\n\tmargin-bottom: 10px;\n}\n</style>\n\n<div class=\"pageContent\" style=\"margin: 0 10px\" layoutH=\"50\">\n\n\t<input id=\"testFileInput\" type=\"file\" name=\"image\"\n\t\tuploaderOption=\"{\n\t\t\tswf:'uploadify/scripts/uploadify.swf',\n\t\t\tuploader:'demo/common/ajaxDone.json',\n\t\t\tformData:{PHPSESSID:'xxx', ajax:1},\n\t\t\tbuttonText:'请选择文件',\n\t\t\tfileSizeLimit:'200KB',\n\t\t\tfileTypeDesc:'*.jpg;*.jpeg;*.gif;*.png;',\n\t\t\tfileTypeExts:'*.jpg;*.jpeg;*.gif;*.png;',\n\t\t\tauto:true,\n\t\t\tmulti:true,\n\t\t\tonUploadSuccess:uploadifySuccess,\n\t\t\tonQueueComplete:uploadifyQueueComplete\n\t\t}\"\n\t/>\n\n\t<div class=\"divider\"></div>\n\n\t<input id=\"testFileInput2\" type=\"file\" name=\"image2\"\n\t\tuploaderOption=\"{\n\t\t\tswf:'uploadify/scripts/uploadify.swf',\n\t\t\tuploader:'demo/common/ajaxDone.json',\n\t\t\tformData:{PHPSESSID:'xxx', ajax:1},\n\t\t\tqueueID:'fileQueue',\n\t\t\tbuttonImage:'uploadify/img/add.jpg',\n\t\t\tbuttonClass:'my-uploadify-button',\n\t\t\twidth:102,\n\t\t\tauto:false\n\t\t}\"\n\t/>\n\n\t<div id=\"fileQueue\" class=\"fileQueue\"></div>\n\n\t<input type=\"image\" src=\"uploadify/img/upload.jpg\" onclick=\"$('#testFileInput2').uploadify('upload', '*');\"/>\n\t<input type=\"image\" src=\"uploadify/img/cancel.jpg\" onclick=\"$('#testFileInput2').uploadify('cancel', '*');\"/>\n\n\n\t<div class=\"divider\"></div>\n\t<p style=\"margin:10px\"><a href=\"http://www.uploadify.com/documentation/\" target=\"_blank\">Uploadify 在线文档</a></p>\n\n<textarea cols=\"160\" rows=\"10\">\nuploaderOption: http://www.uploadify.com/documentation/\n\tauto            : true,               // Automatically upload files when added to the queue\n\tbuttonClass     : '',                 // A class name to add to the browse button DOM object\n\tbuttonCursor    : 'hand',             // The cursor to use with the browse button\n\tbuttonImage     : null,               // (String or null) The path to an image to use for the Flash browse button if not using CSS to style the button\n\tbuttonText      : 'SELECT FILES',     // The text to use for the browse button\n\tcheckExisting   : false,              // The path to a server-side script that checks for existing files on the server\n\tdebug           : false,              // Turn on swfUpload debugging mode\n\tfileObjName     : 'Filedata',         // The name of the file object to use in your server-side script\n\tfileSizeLimit   : 0,                  // The maximum size of an uploadable file in KB (Accepts units B KB MB GB if string, 0 for no limit)\n\tfileTypeDesc    : 'All Files',        // The description for file types in the browse dialog\n\tfileTypeExts    : '*.*',              // Allowed extensions in the browse dialog (server-side validation should also be used)\n\theight          : 30,                 // The height of the browse button\n\titemTemplate    : false,              // The template for the file item in the queue\n\tmethod          : 'post',             // The method to use when sending files to the server-side upload script\n\tmulti           : true,               // Allow multiple file selection in the browse dialog\n\tformData        : {},                 // An object with additional data to send to the server-side upload script with every file upload\n\tpreventCaching  : true,               // Adds a random value to the Flash URL to prevent caching of it (conflicts with existing parameters)\n\tprogressData    : 'percentage',       // ('percentage' or 'speed') Data to show in the queue item during a file upload\n\tqueueID         : false,              // The ID of the DOM object to use as a file queue (without the #)\n\tqueueSizeLimit  : 999,                // The maximum number of files that can be in the queue at one time\n\tremoveCompleted : true,               // Remove queue items from the queue when they are done uploading\n\tremoveTimeout   : 3,                  // The delay in seconds before removing a queue item if removeCompleted is set to true\n\trequeueErrors   : false,              // Keep errored files in the queue and keep trying to upload them\n\tsuccessTimeout  : 30,                 // The number of seconds to wait for Flash to detect the server's response after the file has finished uploading\n\tuploadLimit     : 0,                  // The maximum number of files you can upload\n\twidth           : 120,                // The width of the browse button\n</textarea>\n\n</div>\n"
  },
  {
    "path": "w_validation.html",
    "content": "<h2 class=\"contentTitle\">表单验证</h2>\n\n\n<div class=\"pageContent\">\n\t\n\t<form method=\"post\" action=\"demo/common/ajaxDone.html\" class=\"pageForm required-validate\" onsubmit=\"return validateCallback(this)\">\n\t\t<div class=\"pageFormContent nowrap\" layoutH=\"97\">\n\n\t\t\t<dl>\n\t\t\t\t<dt>必填：</dt>\n\t\t\t\t<dd>\n\t\t\t\t\t<input type=\"text\" name=\"name\" maxlength=\"20\" class=\"required\" />\n\t\t\t\t\t<span class=\"info\">class=\"required\"</span>\n\t\t\t\t</dd>\n\t\t\t</dl>\n\t\t\t<dl>\n\t\t\t\t<dt>必填+邮箱：</dt>\n\t\t\t\t<dd>\n\t\t\t\t\t<input type=\"text\" name=\"email\" class=\"required email\" alt=\"请输入您的电子邮件\"/>\n\t\t\t\t\t<span class=\"info\">class=\"required email\"</span>\n\t\t\t\t</dd>\n\t\t\t</dl>\n\t\t\t<dl>\n\t\t\t\t<dt>电话：</dt>\n\t\t\t\t<dd>\n\t\t\t\t\t<input type=\"text\" name=\"phone\" class=\"phone\" alt=\"请输入您的电话\"/>\n\t\t\t\t\t<span class=\"info\">class=\"phone\"</span>\n\t\t\t\t</dd>\n\t\t\t</dl>\n\t\t\t<dl>\n\t\t\t\t<dt>密码：</dt>\n\t\t\t\t<dd>\n\t\t\t\t\t<input id=\"w_validation_pwd\" type=\"password\" name=\"password\" class=\"required alphanumeric\" minlength=\"6\" maxlength=\"20\" alt=\"字母、数字、下划线 6-20位\"/>\n\t\t\t\t\t<span class=\"info\">class=\"required alphanumeric\" minlength=\"6\" maxlength=\"20\"</span>\n\t\t\t\t</dd>\n\t\t\t</dl>\n\t\t\t<dl>\n\t\t\t\t<dt>确认密码：</dt>\n\t\t\t\t<dd>\n\t\t\t\t\t<input type=\"password\" name=\"repassword\" class=\"required\" equalto=\"#w_validation_pwd\"/>\n\t\t\t\t\t<span class=\"info\">class=\"required\" equalto=\"#xxxId\"</span>\n\t\t\t\t</dd>\n\t\t\t</dl>\n\t\t\t\n\t\t\t<dl>\n\t\t\t\t<dt>整数：</dt>\n\t\t\t\t<dd>\n\t\t\t\t\t<input type=\"text\" name=\"digits\" class=\"digits\" />\n\t\t\t\t\t<span class=\"info\">class=\"digits\"</span>\n\t\t\t\t</dd>\n\t\t\t</dl>\n\t\t\t<dl>\n\t\t\t\t<dt>浮点数：</dt>\n\t\t\t\t<dd>\n\t\t\t\t\t<input type=\"text\" name=\"number\" class=\"number\" />\n\t\t\t\t\t<span class=\"info\">class=\"number\"</span>\n\t\t\t\t</dd>\n\t\t\t</dl>\n\t\t\t<dl>\n\t\t\t\t<dt>最小值：</dt>\n\t\t\t\t<dd>\n\t\t\t\t\t<input type=\"text\" name=\"min\" min=\"1\"/>\n\t\t\t\t\t<span class=\"info\">min=\"1\"</span>\n\t\t\t\t</dd>\n\t\t\t</dl>\n\t\t\t<dl>\n\t\t\t\t<dt>最大值：</dt>\n\t\t\t\t<dd>\n\t\t\t\t\t<input type=\"text\" name=\"max\" max=\"10\"/>\n\t\t\t\t\t<span class=\"info\">max=\"10\"</span>\n\t\t\t\t</dd>\n\t\t\t</dl>\n\t\t\t<dl>\n\t\t\t\t<dt>最小值-最大值：</dt>\n\t\t\t\t<dd>\n\t\t\t\t\t<input type=\"text\" name=\"min_max\" min=\"1\" max=\"10\"/>\n\t\t\t\t\t<span class=\"info\">min=\"1\" max=\"10\"</span>\n\t\t\t\t</dd>\n\t\t\t</dl>\n\t\t\t<dl>\n\t\t\t\t<dt>最小长度：</dt>\n\t\t\t\t<dd>\n\t\t\t\t\t<input type=\"text\" name=\"minlength_maxlength6\" minlength=\"6\" />\n\t\t\t\t\t<span class=\"info\">minlength=\"6\"</span>\n\t\t\t\t</dd>\n\t\t\t</dl>\n\t\t\t<dl>\n\t\t\t\t<dt>最大长度：</dt>\n\t\t\t\t<dd>\n\t\t\t\t\t<input type=\"text\" name=\"minlength_maxlength10\" maxlength=\"10\"/>\n\t\t\t\t\t<span class=\"info\">maxlength=\"10\"</span>\n\t\t\t\t</dd>\n\t\t\t</dl>\n\t\t\t<dl>\n\t\t\t\t<dt>最小长度-最大长度：</dt>\n\t\t\t\t<dd>\n\t\t\t\t\t<input type=\"text\" name=\"minlength_maxlength\" minlength=\"6\" maxlength=\"20\"/>\n\t\t\t\t\t<span class=\"info\">minlength=\"6\" maxlength=\"20\"</span>\n\t\t\t\t</dd>\n\t\t\t</dl>\n\t\t\t<dl>\n\t\t\t\t<dt>信用卡：</dt>\n\t\t\t\t<dd>\n\t\t\t\t\t<input type=\"text\" name=\"creditcard\" class=\"creditcard\" />\n\t\t\t\t\t<span class=\"info\">class=\"creditcard\"</span>\n\t\t\t\t</dd>\n\t\t\t</dl>\n\t\t\t<dl>\n\t\t\t\t<dt>字母、数字、下划线：</dt>\n\t\t\t\t<dd>\n\t\t\t\t\t<input type=\"text\" name=\"alphanumeric\" class=\"alphanumeric\" />\n\t\t\t\t\t<span class=\"info\">class=\"alphanumeric\"</span>\n\t\t\t\t</dd>\n\t\t\t</dl>\n\t\t\t<dl>\n\t\t\t\t<dt>字母：</dt>\n\t\t\t\t<dd>\n\t\t\t\t\t<input type=\"text\" name=\"lettersonly\" class=\"lettersonly\" />\n\t\t\t\t\t<span class=\"info\">class=\"lettersonly\"</span>\n\t\t\t\t</dd>\n\t\t\t</dl>\n\t\t\t<dl>\n\t\t\t\t<dt>网址：</dt>\n\t\t\t\t<dd>\n\t\t\t\t\t<input type=\"text\" name=\"url\" class=\"url\" />\n\t\t\t\t\t<span class=\"info\">class=\"url\"</span>\n\t\t\t\t</dd>\n\t\t\t</dl>\n\t\t\t<dl>\n\t\t\t\t<dt>remote：</dt>\n\t\t\t\t<dd>\n\t\t\t\t\t<input type=\"text\" name=\"remote\" remote=\"validate_remote.html\"/>\n\t\t\t\t\t<span class=\"info\">唯一性验证input添加属性：remote=\"xxxUrl\"</span>\n\t\t\t\t</dd>\n\t\t\t</dl>\n\t\t\t<dl>\n\t\t\t\t<dt>customvalid+remote：</dt>\n\t\t\t\t<dd>\n\t\t\t\t\t<input type=\"text\" name=\"remote2\" remote=\"validate_remote.html\" customvalid=\"customvalidXxx(element)\"/>\n\t\t\t\t\t<span class=\"info\">customvalid=\"customvalidXxx(element)\" | remote=\"xxxUrl\"</span>\n\t\t\t\t</dd>\n\t\t\t</dl>\n\t\t\t\n\t\t\t<div class=\"divider\"></div>\n\t\t\t<p>自定义扩展请参照：dwz.validate.method.js</p>\n\t\t\t<p>错误提示信息国际化请参照：dwz.regional.zh.js</p>\n\t\t</div>\n\t\t<div class=\"formBar\">\n\t\t\t<ul>\n\t\t\t\t<li><div class=\"buttonActive\"><div class=\"buttonContent\"><button type=\"submit\">提交</button></div></div></li>\n\t\t\t\t<li><div class=\"button\"><div class=\"buttonContent\"><button type=\"button\" class=\"close\">取消</button></div></div></li>\n\t\t\t</ul>\n\t\t</div>\n\t</form>\n\t\n</div>\n\n\n<script type=\"text/javascript\">\nfunction customvalidXxx(element){\n\tif ($(element).val() == \"xxx\") return false;\n\treturn true;\n}\n</script>\n"
  },
  {
    "path": "window_open.html",
    "content": "<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n<title>简单实用国产jQuery UI框架 - DWZ富客户端框架(J-UI.com)</title>\n\n<script type=\"text/javascript\">\nvar width = screen.width -10, height = screen.height -10;\nwindow.open('index.html','_blank','width='+width+',height='+height+',top=0,left=0,toolbar=no,menubar=no,scrollbars=no,resizable=no,location=no,status=no');\n</script>\n</head>\n\n<body>\n\t\n</body>\n</html>"
  },
  {
    "path": "xheditor/xheditor_emot/default/config.txt",
    "content": "'default':{name:'Ĭ��',width:24,height:24,line:7,list:{'smile':'΢Ц','tongue':'����ͷ','titter':'͵Ц','laugh':'��Ц','sad':'�ѹ�','wronged':'ί��','fastcry':'������','cry':'��','wail':'����','mad':'����','knock':'�ô�','curse':'����','crazy':'ץ��','angry':'����','ohmy':'����','awkward':'����','panic':'����','shy':'����','cute':'����','envy':'��Ľ','proud':'����','struggle':'�ܶ�','quiet':'����','shutup':'����','doubt':'����','despise':'����','sleep':'˯��','bye':'�ټ�'}}"
  },
  {
    "path": "xheditor/xheditor_emot/ipb/config.txt",
    "content": "ipb:{name:'IPB',width:20,height:25,line:8,list:{smile:'΢Ц',joyful:'����',laugh:'Ц',biglaugh:'��Ц',w00t:'����',wub:'��ϲ',depres:'��ɥ',sad:'����',cry:'����',angry:'����',devil:'ħ��',blush:'����',kiss:'��',surprised:'����',wondering:'�ɻ�',unsure:'��ȷ��',tongue:'����ͷ',cool:'ˣ��',blink:'գ��',whistling:'������',glare:'����',pinch:'��',sideways:'����',sleep:'˯��',sick:'����',ninja:'����',bandit:'ǿ��',police:'����',angel:'��ʹ',magician:'ħ��ʦ',alien:'������',heart:'�Ķ�'}}"
  },
  {
    "path": "xheditor/xheditor_emot/pidgin/config.txt",
    "content": "pidgin:{name:'Pidgin',width:22,height:25,line:8,list:{smile:'΢Ц',cute:'�ɰ�',wink:'գ��',laugh:'��Ц',victory:'ʤ��',sad:'����',cry:'����',angry:'����',shout:'����',curse:'����',devil:'ħ��',blush:'����',tongue:'����ͷ',envy:'��Ľ',cool:'ˣ��',kiss:'��',shocked:'����',sweat:'��',sick:'����',bye:'�ټ�',tired:'��',sleepy:'˯��',question:'����',rose:'õ��',gift:'����',coffee:'����',music:'����',soccer:'����',good:'��ͬ',bad:'����',love:'��',brokenheart:'����'}}"
  },
  {
    "path": "xheditor/xheditor_lang/en.js",
    "content": "/**\n * @license Copyright (c) 2009-2013, xhEditor.com. All rights reserved.\n * For licensing, see LGPL-LICENSE.txt or http://xheditor.com/license/lgpl.txt\n */\nXHEDITOR.setLang({\n    'default': 'Default',\n    'none': 'None',\n    'defaultReadTip': 'WYSIWYG Editor,press alt+1-9,toogle to tool area,press tab,select button,press esc,return editor',\n\n    'Cut': 'Cut (Ctrl+X)',\n    'Copy': 'Copy (Ctrl+C)',\n    'Paste': 'Paste (Ctrl+V)',\n    'Pastetext': 'Paste as plain text',\n    'PastetextTip': 'Use Ctrl+V on your keyboard to paste the text.',\n    'Blocktag': 'Block tag',\n    'Fontface': 'Font family',\n    'FontSize': 'Font size',\n    'Bold': 'Bold (Ctrl+B)',\n    'Italic': 'Italic (Ctrl+I)',\n    'Underline': 'Underline (Ctrl+U)',\n    'Strikethrough': 'Strikethrough',\n    'FontColor': 'Select text color',\n    'BackColor': 'Select background color',\n    'SelectAll': 'SelectAll (Ctrl+A)',\n    'Removeformat': 'Remove formatting',\n    'Align': 'Align',\n    'List': 'List',\n    'Outdent': 'Outdent',\n    'Indent': 'Indent',\n    'Link': 'Insert/edit link (Ctrl+L)',\n    'Unlink': 'Unlink',\n    'Anchor': 'Anchor',\n    'Img': 'Insert/edit image',\n    'Flash': 'Insert/edit flash',\n    'Media': 'Insert/edit media',\n    'Hr': 'Horizontal rule',\n    'Emot': 'Emotions',\n    'Table': 'Insert a new table',\n    'Source': 'Edit source code',\n    'WYSIWYG': 'WYSIWYG mode',\n    'Preview': 'Preview',\n    'Print': 'Print (Ctrl+P)',\n    'Fullscreen': 'Toggle fullscreen (Esc)',\n    'About': 'About xhEditor',\n\n    'dialogOk': 'Ok',\n    'dialogCancel': 'Cancel',\n    'cutDisabledTip': 'Currently not supported by your browser, use keyboard shortcuts(Ctrl+X) instead.',\n    'copyDisabledTip': 'Currently not supported by your browser, use keyboard shortcuts(Ctrl+C) instead.',\n    'pasteDisabledTip': 'Currently not supported by your browser, use keyboard shortcuts(Ctrl+V) instead.',\n    'close': 'Close',\n\n    'listFontname': [{n:'Arial'},{n:'Arial Black'},{n:'Comic Sans MS'},{n:'Courier New'},{n:'System'},{n:'Times New Roman'},{n:'Tahoma'},{n:'Verdana'}],\n    \n    'listBlocktag': {\n        'p': 'Paragraph',\n        'h1': 'Heading 1',\n        'h2': 'Heading 2',\n        'h3': 'Heading 3',\n        'h4': 'Heading 4',\n        'h5': 'Heading 5',\n        'h6': 'Heading 6',\n        'pre': 'Preformatted',\n        'address': 'Address'\n    },\n\n    'fontsize': {\n        'x-small': '1',\n        'small': '2',\n        'medium': '3',\n        'large': '4',\n        'x-large': '5',\n        'xx-large': '6',\n        '-webkit-xxx-large': '7'\n    },\n\n    'align': {\n        'justifyleft': 'Align left',\n        'justifycenter': 'Align center',\n        'justifyright': 'Align right',\n        'justifyfull': 'Align full'\n    },\n\n    'list': {\n        'insertOrderedList': 'Ordered list',\n        'insertUnorderedList': 'Unordered list'\n    },\n\n    'link': {\n        'url': 'Link URL: ',\n        'target': 'Target:&nbsp;&nbsp; ',\n        'targetBlank': 'New window',\n        'targetSelf': 'Same window',\n        'targetParent': 'Parent window',\n        'linkText': 'Link Text:',\n        'defText': 'Click here',\n        'anchor': 'Anchor: &nbsp;&nbsp;',\n        'anchorNone': 'None selected'\n    },\n\n    'anchor': {\n        'name': 'Anchor name: '\n    },\n\n    'img': {\n        'url': 'Img URL:&nbsp; ',\n        'alt': 'Alt text: ',\n        'align': 'Alignment:',\n        'alignLeft': 'Left',\n        'alignRight': 'Right',\n        'alignTop': 'Top',\n        'alignMiddle': 'Middle',\n        'alignBaseline': 'Baseline',\n        'alignBottom': 'Bottom',\n        'width': 'Width:&nbsp; &nbsp; ',\n        'height': 'Height:&nbsp; &nbsp;',\n        'border': 'Border:&nbsp; &nbsp;',\n        'hspace': 'Hspace:&nbsp;&nbsp;&nbsp;',\n        'vspace': 'Vspace:&nbsp; &nbsp;'\n    },\n\n    'flash': {\n        'url': 'Flash URL:',\n        'width': 'Width:&nbsp; &nbsp; ',\n        'height': 'Height:&nbsp; &nbsp;'\n    },\n\n    'media': {\n        'url': 'Media URL:',\n        'width': 'Width:&nbsp; &nbsp; ',\n        'height': 'Height:&nbsp; &nbsp;'\n    },\n\n    'emot.default': {\n        'smile': 'Smile',\n        'tongue': 'Tongue',\n        'titter': 'Titter',\n        'laugh': 'Laugh',\n        'sad': 'Sad',\n        'wronged': 'Wronged',\n        'fastcry': 'Fast cry',\n        'cry': 'Cry',\n        'wail': 'Wail',\n        'mad': 'Mad',\n        'knock': 'Knock',\n        'curse': 'Curse',\n        'crazy': 'Crazy',\n        'angry': 'Angry',\n        'ohmy': 'Oh my',\n        'awkward': 'Awkward',\n        'panic': 'Panic',\n        'shy': 'Shy',\n        'cute': 'Cute',\n        'envy': 'Envy',\n        'proud': 'Proud',\n        'struggle': 'Struggle',\n        'quiet': 'Quiet',\n        'shutup': 'Shut up',\n        'doubt': 'Doubt',\n        'despise': 'Despise',\n        'sleep': 'Sleep',\n        'bye': 'Bye'\n    },\n\n    'table': {\n        'rows': 'Rows:&nbsp; &nbsp; &nbsp; &nbsp;',\n        'columns': 'Cols:&nbsp; &nbsp; &nbsp; &nbsp;',\n        'headers': 'Headers:&nbsp; &nbsp;&nbsp;',\n        'headersRow': 'First row',\n        'headersCol': 'First column',\n        'headersBoth': 'Both',\n        'width': 'Width: &nbsp; &nbsp; &nbsp;',\n        'height': 'Height:&nbsp; &nbsp; &nbsp;',\n        'border': 'Border:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;',\n        'cellSpacing': 'CellSpacing:',\n        'cellPadding': 'CellPadding:',\n        'align': 'Align:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;',\n        'alignLeft': 'Left',\n        'alignCenter': 'Center',\n        'alignRight': 'Right',\n        'caption': 'Caption:&nbsp;&nbsp;&nbsp;&nbsp;'\n    },\n\n    'upload': {\n        'btnText' : 'Upload',\n        'browserTitle': 'Browser file',\n        'progressTitle': 'File uploading(Esc cancel)',\n        'progressTip': 'File uploading,please wait...',\n        'countLimit': 'Please do not upload more then {$0} files.',\n        'extLimit': 'Upload file extension required for this: {$0}',\n        'typeLimit': 'You can only drag and drop the same type of files.',\n        'apiError': '{$0} upload interface error!\\r\\n\\r\\nreturn error:\\r\\n\\r\\n{$1}'\n    },\n\n    'aboutXheditor': 'xhEditor is a platform independent WYSWYG XHTML editor based by jQuery,released as Open Source under <a href=\"http://www.gnu.org/licenses/lgpl.html\" target=\"_blank\">LGPL</a>.'\n});"
  },
  {
    "path": "xheditor/xheditor_lang/zh-cn.js",
    "content": "/**\n * @license Copyright (c) 2009-2013, xhEditor.com. All rights reserved.\n * For licensing, see LGPL-LICENSE.txt or http://xheditor.com/license/lgpl.txt\n */\nXHEDITOR.setLang({\n    'default': '默认',\n    'none': '无',\n    'defaultReadTip': '可视化编辑器,alt+1到9键,切换到工具区,tab键,选择按钮,esc键,返回编辑',\n\n    'Cut': '剪切 (Ctrl+X)',\n    'Copy': '复制 (Ctrl+C)',\n    'Paste': '粘贴 (Ctrl+V)',\n    'Pastetext': '粘贴文本',\n    'PastetextTip': '使用键盘快捷键(Ctrl+V)把内容粘贴到方框里，按 确定',\n    'Blocktag': '段落标签',\n    'Fontface': '字体',\n    'FontSize': '字体大小',\n    'Bold': '加粗 (Ctrl+B)',\n    'Italic': '斜体 (Ctrl+I)',\n    'Underline': '下划线 (Ctrl+U)',\n    'Strikethrough': '删除线',\n    'FontColor': '字体颜色',\n    'BackColor': '背景颜色',\n    'SelectAll': '全选 (Ctrl+A)',\n    'Removeformat': '删除文字格式',\n    'Align': '对齐',\n    'List': '列表',\n    'Outdent': '减少缩进',\n    'Indent': '增加缩进',\n    'Link': '超链接 (Ctrl+L)',\n    'Unlink': '取消超链接',\n    'Anchor': '锚点',\n    'Img': '图片',\n    'Flash': 'Flash动画',\n    'Media': '多媒体文件',\n    'Hr': '插入水平线',\n    'Emot': '表情',\n    'Table': '表格',\n    'Source': '源代码',\n    'WYSIWYG': '可视化编辑',\n    'Preview': '预览',\n    'Print': '打印 (Ctrl+P)',\n    'Fullscreen': '全屏编辑 (Esc)',\n    'About': '关于 xhEditor',\n\n    'dialogOk': '确定',\n    'dialogCancel': '取消',\n    'cutDisabledTip': '您的浏览器安全设置不允许使用剪切操作，请使用键盘快捷键(Ctrl + X)来完成',\n    'copyDisabledTip': '您的浏览器安全设置不允许使用复制操作，请使用键盘快捷键(Ctrl + C)来完成',\n    'pasteDisabledTip': '您的浏览器安全设置不允许使用粘贴操作，请使用键盘快捷键(Ctrl + V)来完成',\n    'close': '关闭',\n\n    'listFontname': [{n:'宋体',c:'SimSun'},{n:'仿宋体',c:'FangSong_GB2312'},{n:'黑体',c:'SimHei'},{n:'楷体',c:'KaiTi_GB2312'},{n:'微软雅黑',c:'Microsoft YaHei'},{n:'Arial'},{n:'Arial Black'},{n:'Comic Sans MS'},{n:'Courier New'},{n:'System'},{n:'Times New Roman'},{n:'Tahoma'},{n:'Verdana'}],\n    \n    'listBlocktag': {\n        'p': '普通段落',\n        'h1': '标题1',\n        'h2': '标题2',\n        'h3': '标题3',\n        'h4': '标题4',\n        'h5': '标题5',\n        'h6': '标题6',\n        'pre': '已编排格式',\n        'address': '地址'\n    },\n\n    'fontsize': {\n        'x-small': '极小',\n        'small': '特小',\n        'medium': '小',\n        'large': '中',\n        'x-large': '大',\n        'xx-large': '特大',\n        '-webkit-xxx-large': '极大'\n    },\n\n    'align': {\n        'justifyleft': '左对齐',\n        'justifycenter': '居中',\n        'justifyright': '右对齐',\n        'justifyfull': '两端对齐'\n    },\n\n    'list': {\n        'insertOrderedList': '数字列表',\n        'insertUnorderedList': '符号列表'\n    },\n\n    'link': {\n        'url': '链接地址: ',\n        'target': '打开方式: ',\n        'targetBlank': '新窗口',\n        'targetSelf': '当前窗口',\n        'targetParent': '父窗口',\n        'linkText': '链接文字: ',\n        'defText': '点击打开链接',\n        'anchor': '页内锚点: ',\n        'anchorNone': '未选择'\n    },\n\n    'anchor': {\n        'name': '锚点名称: '\n    },\n\n    'img': {\n        'url': '图片文件: ',\n        'alt': '替换文本: ',\n        'align': '对齐方式: ',\n        'alignLeft': '左对齐',\n        'alignRight': '右对齐',\n        'alignTop': '顶端',\n        'alignMiddle': '居中',\n        'alignBaseline': '基线',\n        'alignBottom': '底边',\n        'width': '宽　　度: ',\n        'height': '高　　度: ',\n        'border': '边框大小: ',\n        'hspace': '水平间距: ',\n        'vspace': '垂直间距: '\n    },\n\n    'flash': {\n        'url': '动画文件: ',\n        'width': '宽　　度: ',\n        'height': '高　　度: '\n    },\n\n    'media': {\n        'url': '媒体文件: ',\n        'width': '宽　　度: ',\n        'height': '高　　度: '\n    },\n\n    'emot.default': {\n        'smile': '微笑',\n        'tongue': '吐舌头',\n        'titter': '偷笑',\n        'laugh': '大笑',\n        'sad': '难过',\n        'wronged': '委屈',\n        'fastcry': '快哭了',\n        'cry': '哭',\n        'wail': '大哭',\n        'mad': '生气',\n        'knock': '敲打',\n        'curse': '骂人',\n        'crazy': '抓狂',\n        'angry': '发火',\n        'ohmy': '惊讶',\n        'awkward': '尴尬',\n        'panic': '惊恐',\n        'shy': '害羞',\n        'cute': '可怜',\n        'envy': '羡慕',\n        'proud': '得意',\n        'struggle': '奋斗',\n        'quiet': '安静',\n        'shutup': '闭嘴',\n        'doubt': '疑问',\n        'despise': '鄙视',\n        'sleep': '睡觉',\n        'bye': '再见'\n    },\n\n    'table': {\n        'rows': '行　　数: ',\n        'columns': '列　　数: ',\n        'headers': '标题单元: ',\n        'headersRow': '第一行',\n        'headersCol': '第一列',\n        'headersBoth': '第一行和第一列',\n        'width': '宽　　度: ',\n        'height': '高　　度: ',\n        'border': '边框大小: ',\n        'cellSpacing': '表格间距: ',\n        'cellPadding': '表格填充: ',\n        'align': '对齐方式: ',\n        'alignLeft': '左对齐',\n        'alignCenter': '居中',\n        'alignRight': '右对齐',\n        'caption': '表格标题: '\n    },\n\n    'upload': {\n        'btnText' : '上传',\n        'browserTitle': '浏览文件',\n        'progressTitle': '文件上传中(Esc取消上传)',\n        'progressTip': '文件上传中，请稍候……',\n        'countLimit': '请不要一次上传超过{$0}个文件',\n        'extLimit': '文件的扩展名必需为：{$0}',\n        'typeLimit': '每次只能拖放上传同一类型文件',\n        'apiError': '{$0} 上传接口发生错误！\\r\\n\\r\\n返回的错误内容为: \\r\\n\\r\\n{$1}'\n    },\n\n    'aboutXheditor': 'xhEditor是基于jQuery开发的跨平台轻量可视化XHTML编辑器，基于<a href=\"http://www.gnu.org/licenses/lgpl.html\" target=\"_blank\">LGPL</a>开源协议发布。'\n});"
  },
  {
    "path": "xheditor/xheditor_lang/zh-tw.js",
    "content": "/**\n * @license Copyright (c) 2009-2013, xhEditor.com. All rights reserved.\n * For licensing, see LGPL-LICENSE.txt or http://xheditor.com/license/lgpl.txt\n */\nXHEDITOR.setLang({\n    'default': '預設',\n    'none': '無',\n    'defaultReadTip': '可視化編輯器,alt+1到9鍵,切換到工具區,tab鍵,選擇按鈕,esc鍵,返回編輯',\n\n    'Cut': '剪下 (Ctrl+X)',\n    'Copy': '複製 (Ctrl+C)',\n    'Paste': '貼上 (Ctrl+V)',\n    'Pastetext': '貼上文本',\n    'PastetextTip': '使用鍵盤快捷鍵(Ctrl+V)把內容貼上到方框裡，按 確定',\n    'Blocktag': '段落標籤',\n    'Fontface': '字型',\n    'FontSize': '字型大小',\n    'Bold': '粗體 (Ctrl+B)',\n    'Italic': '斜體 (Ctrl+I)',\n    'Underline': '底線 (Ctrl+U)',\n    'Strikethrough': '刪除線',\n    'FontColor': '字型顏色',\n    'BackColor': '背景顏色',\n    'SelectAll': '全選 (Ctrl+A)',\n    'Removeformat': '刪除文字格式',\n    'Align': '對齊',\n    'List': '列表',\n    'Outdent': '減少縮排',\n    'Indent': '增加縮排',\n    'Link': '超連結 (Ctrl+L)',\n    'Unlink': '取消超連結',\n    'Anchor': '錨點',\n    'Img': '圖片',\n    'Flash': 'Flash動畫',\n    'Media': '多媒體文件',\n    'Hr': '插入水平線',\n    'Emot': '表情',\n    'Table': '表格',\n    'Source': '原始碼',\n    'WYSIWYG': '可視化編輯',\n    'Preview': '預覽',\n    'Print': '打印 (Ctrl+P)',\n    'Fullscreen': '全螢幕編輯 (Esc)',\n    'About': '關於 xhEditor',\n\n    'dialogOk': '確定',\n    'dialogCancel': '取消',\n    'cutDisabledTip': '您的瀏覽器安全設置不允許使用剪下操作，請使用鍵盤快捷鍵(Ctrl + X)來完成',\n    'copyDisabledTip': '您的瀏覽器安全設置不允許使用複製操作，請使用鍵盤快捷鍵(Ctrl + C)來完成',\n    'pasteDisabledTip': '您的瀏覽器安全設置不允許使用貼上操作，請使用鍵盤快捷鍵(Ctrl + V)來完成',\n    'close': '關閉',\n\n    'listFontname': [{n:'新細明體',c:'PMingLiu'},{n:'細明體',c:'mingliu'},{n:'標楷體',c:'DFKai-SB'},{n:'微軟正黑體',c:'Microsoft JhengHei'},{n:'Arial'},{n:'Arial Black'},{n:'Comic Sans MS'},{n:'Courier New'},{n:'System'},{n:'Times New Roman'},{n:'Tahoma'},{n:'Verdana'}],\n    \n    'listBlocktag': {\n        'p': '普通段落',\n        'h1': '標題1',\n        'h2': '標題2',\n        'h3': '標題3',\n        'h4': '標題4',\n        'h5': '標題5',\n        'h6': '標題6',\n        'pre': '已編排格式',\n        'address': '地址'\n    },\n\n    'fontsize': {\n        'x-small': '極小',\n        'small': '特小',\n        'medium': '小',\n        'large': '中',\n        'x-large': '大',\n        'xx-large': '特大',\n        '-webkit-xxx-large': '極大'\n    },\n\n    'align': {\n        'justifyleft': '靠左對齊',\n        'justifycenter': '置中',\n        'justifyright': '靠右對齊',\n        'justifyfull': '左右對齊'\n    },\n\n    'list': {\n        'insertOrderedList': '數字列表',\n        'insertUnorderedList': '符號列表'\n    },\n\n    'link': {\n        'url': '鏈接地址: ',\n        'target': '打開方式: ',\n        'targetBlank': '新窗口',\n        'targetSelf': '當前窗口',\n        'targetParent': '父窗口',\n        'linkText': '鏈接文字: ',\n        'defText': '點擊打開鏈接',\n        'anchor': '頁內錨點: ',\n        'anchorNone': '未選擇'\n    },\n\n    'anchor': {\n        'name': '錨點名稱: '\n    },\n\n    'img': {\n        'url': '圖片文件: ',\n        'alt': '替換文本: ',\n        'align': '對齊方式: ',\n        'alignLeft': '靠左對齊',\n        'alignRight': '靠右對齊',\n        'alignTop': '頂端',\n        'alignMiddle': '置中',\n        'alignBaseline': '基線',\n        'alignBottom': '底邊',\n        'width': '寬　　度: ',\n        'height': '高　　度: ',\n        'border': '邊框大小: ',\n        'hspace': '水平間距: ',\n        'vspace': '垂直間距: '\n    },\n\n    'flash': {\n        'url': '動畫文件: ',\n        'width': '寬　　度: ',\n        'height': '高　　度: '\n    },\n\n    'media': {\n        'url': '媒體文件: ',\n        'width': '寬　　度: ',\n        'height': '高　　度: '\n    },\n\n    'emot.default': {\n        'smile': '微笑',\n        'tongue': '吐舌頭',\n        'titter': '偷笑',\n        'laugh': '大笑',\n        'sad': '難過',\n        'wronged': '委屈',\n        'fastcry': '快哭了',\n        'cry': '哭',\n        'wail': '大哭',\n        'mad': '生氣',\n        'knock': '敲打',\n        'curse': '罵人',\n        'crazy': '抓狂',\n        'angry': '發火',\n        'ohmy': '驚訝',\n        'awkward': '尷尬',\n        'panic': '驚恐',\n        'shy': '害羞',\n        'cute': '可憐',\n        'envy': '羨慕',\n        'proud': '得意',\n        'struggle': '奮鬥',\n        'quiet': '安靜',\n        'shutup': '閉嘴',\n        'doubt': '疑問',\n        'despise': '鄙視',\n        'sleep': '睡覺',\n        'bye': '再見'\n    },\n\n    'table': {\n        'rows': '行　　數: ',\n        'columns': '列　　數: ',\n        'headers': '標題單元: ',\n        'headersRow': '第一行',\n        'headersCol': '第一列',\n        'headersBoth': '第一行和第一列',\n        'width': '寬　　度: ',\n        'height': '高　　度: ',\n        'border': '邊框大小: ',\n        'cellSpacing': '表格間距: ',\n        'cellPadding': '表格填充: ',\n        'align': '對齊方式: ',\n        'alignLeft': '靠左對齊',\n        'alignCenter': '置中',\n        'alignRight': '靠右對齊',\n        'caption': '表格標題: '\n    },\n\n    'upload': {\n        'btnText' : '上傳',\n        'browserTitle': '瀏覽文件',\n        'progressTitle': '文件上傳中(Esc取消上傳)',\n        'progressTip': '文件上傳中，請稍候……',\n        'countLimit': '請不要一次上傳超過{$0}個文件',\n        'extLimit': '文件的擴展名必需為：{$0}',\n        'typeLimit': '每次只能拖放上傳同一類型文件',\n        'apiError': '{$0} 上傳接口發生錯誤！\\r\\n\\r\\n返回的錯誤內容為: \\r\\n\\r\\n{$1}'\n    },\n\n    'aboutXheditor': 'xhEditor是基於jQuery開發的跨平台輕量可視化XHTML編輯器，基於<a href=\"http://www.gnu.org/licenses/lgpl.html\" target=\"_blank\">LGPL</a>開源協議發佈。'\n});"
  },
  {
    "path": "xheditor/xheditor_plugins/html2markdown.js",
    "content": "/**\n * HTML2Markdown - An HTML to Markdown converter.\n * \n * This implementation uses HTML DOM parsing for conversion. Parsing code was\n * abstracted out in a parsing function which should be easy to remove in favor\n * of other parsing libraries.\n * \n * Converted MarkDown was tested with ShowDown library for HTML rendering. And\n * it tries to create MarkDown that does not confuse ShowDown when certain\n * combination of HTML tags come together.\n * \n * @author Himanshu Gilani\n * @author Kates Gasis (original author)\n * \n */\n\nif (typeof require != \"undefined\") {\n\tvar htmlparser = require(\"./htmldomparser\");\n\tvar HTMLParser = htmlparser.HTMLParser;\n}\n\n/**\n * HTML2Markdown\n * @param html - html string to convert\n * @return converted markdown text\n */\nfunction HTML2Markdown(html, opts) {\n\tvar logging = false;\n\tvar nodeList = [];\n\tvar listTagStack = [];\n\tvar linkAttrStack = [];\n\tvar blockquoteStack = [];\n\tvar preStack = [];\n\t\n\tvar links = [];\n\t\n\topts = opts || {};\n\tvar inlineStyle = opts['inlineStyle'] || false;\n\n\tvar markdownTags = {\n\t\t\"hr\": \"- - -\\n\\n\",\n\t\t\"br\": \"  \\n\",\n\t\t\"title\": \"# \",\n\t\t\"h1\": \"# \",\n\t\t\"h2\": \"## \",\n\t\t\"h3\": \"### \",\n\t\t\"h4\": \"#### \",\n\t\t\"h5\": \"##### \",\n\t\t\"h6\": \"###### \",\n\t\t\"b\": \"**\",\n\t\t\"strong\": \"**\",\n\t\t\"i\": \"_\",\n\t\t\"em\": \"_\",\n\t\t\"dfn\": \"_\",\n\t\t\"var\": \"_\",\t\n\t\t\"cite\": \"_\",\n\t\t\"span\": \" \",\n\t\t\"ul\": \"* \",\n\t\t\"ol\": \"1. \",\n\t\t\"dl\": \"- \",\n\t\t\"blockquote\": \"> \"\n\t};\n\n\tfunction getListMarkdownTag() {\n\t\tvar listItem = \"\";\t\t\n\t\tif(listTagStack) {\n\t\t\tfor ( var i = 0; i < listTagStack.length - 1; i++) {\n\t\t\t\tlistItem += \"  \";\n\t\t\t}\t\t\t\n\t\t}\n\t\tlistItem += peek(listTagStack);\t\t\n\t\treturn listItem;\n\t}\n\t\n\tfunction convertAttrs(attrs) {\n\t\tvar attributes = {};\n\t\tfor(var k in attrs) {\n\t\t\tvar attr = attrs[k];\n\t\t\tattributes[attr.name] = attr;\n\t\t}\n\t\treturn attributes;\n\t}\n\n\tfunction peek(list) {\n\t\tif(list && list.length > 0) {\n\t\t\treturn list.slice(-1)[0];\t\n\t\t} \n\t\treturn \"\";\t\t\n\t}\n\n\tfunction peekTillNotEmpty(list) {\n\t\tif(!list) {\n\t\t\treturn \"\";\n\t\t}\n\t\t\t\t\n\t\tfor(var i = list.length - 1; i>=0; i-- ){\n\t\t\tif(list[i] != \"\") {\n\t\t\t\treturn list[i];\n\t\t\t} \t\t\n\t\t}\t\t\n\t\treturn \"\";\n\t}\n\t\n\tfunction removeIfEmptyTag(start) {\n\t\tvar cleaned = false;\n\t\tif(start == peekTillNotEmpty(nodeList)) {\n\t\t\twhile(peek(nodeList) != start) {\n\t\t\t\tnodeList.pop();\n\t\t\t}\n\t\t\tnodeList.pop();\n\t\t\tcleaned = true;\n\t\t} \n\t\treturn cleaned;\n\t}\n\t\n\tfunction sliceText(start) {\n\t\tvar text = [];\n\t\twhile(nodeList.length > 0 && peek(nodeList) != start) {\n\t\t\tvar t = nodeList.pop();\n\t\t\ttext.unshift(t);\n\t\t}\n\t\treturn text.join(\"\");\n\t}\n\t\n\tfunction block(isEndBlock) {\n\t\tvar lastItem = nodeList.pop();\n\t\tif (!lastItem) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tif(!isEndBlock) {\n\t\t\tvar block;\n\t\t\tif(/\\s*\\n\\n\\s*$/.test(lastItem)) {\n\t\t\t\tlastItem = lastItem.replace(/\\s*\\n\\n\\s*$/, \"\\n\\n\");\n\t\t\t\tblock = \"\";\n\t\t\t} else if(/\\s*\\n\\s*$/.test(lastItem)) {\n\t\t\t\tlastItem = lastItem.replace(/\\s*\\n\\s*$/, \"\\n\");\n\t\t\t\tblock = \"\\n\";\n\t\t\t} else if(/\\s+$/.test(lastItem)) {\t\t\t\t\n\t\t\t\tblock = \"\\n\\n\";\n\t\t\t} else {\n\t\t\t\tblock = \"\\n\\n\";\n\t\t\t} \n\t\t\t\n\t\t\tnodeList.push(lastItem);\n\t\t\tnodeList.push(block);\t\n\t\t} else {\n\t\t\tnodeList.push(lastItem);\n\t\t\tif(!lastItem.endsWith(\"\\n\")) {\n\t\t\t\tnodeList.push(\"\\n\\n\");\n\t\t\t}\n\t\t}\n \t}\n\t\n\tfunction listBlock() {\n\t\tif(nodeList.length > 0) {\n\t\t\tvar li = peek(nodeList);\n\n\t\t\tif(!li.endsWith(\"\\n\")) {\n\t\t\t\tnodeList.push(\"\\n\");\n\t\t\t} \n\t\t} else {\n\t\t\tnodeList.push(\"\\n\");\n\t\t}\n\t}\n\t\n\ttry {\n\t\tvar dom;\n\t\tif(html) {\n\t\tvar e = document.createElement('div');\n\t\t\te.innerHTML = html;\n\t\t\tdom = e;\n\t\t} else {\n\t\t\tdom = window.document.body;\n\t\t}\n\n\t\tHTMLParser(dom,{\n\t\t\tstart: function(tag, attrs, unary) {\n\t\t\t\ttag = tag.toLowerCase();\n\t\t\t\tif(logging) {\n\t\t\t\t\tconsole.log(\"start: \"+ tag);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(unary && (tag != \"br\" && tag != \"hr\" && tag != \"img\")) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tswitch (tag) {\n\t\t\t\tcase \"br\":\n\t\t\t\t\tnodeList.push(markdownTags[tag]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"hr\":\n\t\t\t\t\tblock();\n\t\t\t\t\tnodeList.push(markdownTags[tag]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"title\":\t\n\t\t\t\tcase \"h1\":\n\t\t\t\tcase \"h2\":\n\t\t\t\tcase \"h3\":\n\t\t\t\tcase \"h4\":\n\t\t\t\tcase \"h5\":\n\t\t\t\tcase \"h6\":\n\t\t\t\t\tblock();\n\t\t\t\t\tnodeList.push(markdownTags[tag]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"b\":\n\t\t\t\tcase \"strong\":\n\t\t\t\tcase \"i\":\n\t\t\t\tcase \"em\":\n\t\t\t\tcase \"dfn\": \n\t\t\t\tcase \"var\": \t\n\t\t\t\tcase \"cite\":\n\t\t\t\t\tnodeList.push(markdownTags[tag]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"span\":\n\t\t\t\t\tif(! /\\s+$/.test(peek(nodeList))) {\n\t\t\t\t\t\tnodeList.push(markdownTags[tag]);\t\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"p\":\n\t\t\t\tcase \"div\":\t\t\t\t\n\t\t\t\tcase \"td\":\n\t\t\t\t\tblock();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"ul\":\n\t\t\t\tcase \"ol\":\n\t\t\t\tcase \"dl\":\t\n\t\t\t\t\tlistTagStack.push(markdownTags[tag]);\n\t\t\t\t\t// lists are block elements\n\t\t\t\t\tif(listTagStack.length > 1) {\n\t\t\t\t\t\tlistBlock();\n\t\t\t\t\t} else {\t\t\t\t\t\t\n\t\t\t\t\t\tblock();\n\t\t\t\t\t}\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"li\":\n\t\t\t\tcase \"dt\":\n\t\t\t\t\tvar li = getListMarkdownTag();\n\t\t\t\t\tnodeList.push(li);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"a\":\t\t\t\t\t\n\t\t\t\t\tvar attribs = convertAttrs(attrs);\n\t\t\t\t\tlinkAttrStack.push(attribs);\n\t\t\t\t\tnodeList.push(\"[\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"img\":\n\t\t\t\t\tvar attribs = convertAttrs(attrs);\n\t\t\t\t\tvar alt, title, url; \n\t\t\t\t\t\n\t\t\t\t\tattribs[\"src\"] ? url = getNormalizedUrl(attribs[\"src\"].value) : url = \"\";\n\t\t\t\t\tif(!url) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tattribs['alt'] ? alt = attribs['alt'].value.trim() : alt = \"\";\n\t\t\t\t\tattribs['title'] ? title = attribs['title'].value.trim() : title = \"\";\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t// if parent of image tag is nested in anchor tag use inline style\n\t\t\t\t\tif(!inlineStyle && !peekTillNotEmpty(nodeList).startsWith(\"[\")) {\t\t\t\t\t\t\n\t\t\t\t\t\tvar l = links.indexOf(url);\n\t\t\t\t\t\tif(l == -1) {\n\t\t\t\t\t\t\tlinks.push(url);\n\t\t\t\t\t\t\tl=links.length-1;\t\t\t\t\t\t\t \n\t\t\t\t\t\t}\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tblock();\n\t\t\t\t\t\tnodeList.push(\"![\");\n\t\t\t\t\t\tif(alt!= \"\") {\n\t\t\t\t\t\t\tnodeList.push(alt);\n\t\t\t\t\t\t} else if (title != null) {\n\t\t\t\t\t\t\tnodeList.push(title);\n\t\t\t\t\t\t} \n\t\t\t\t\t\t\n\t\t\t\t\t\tnodeList.push(\"][\" + l + \"]\");\n\t\t\t\t\t\tblock();\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//if image is not a link image then treat images as block elements\n\t\t\t\t\t\tif(!peekTillNotEmpty(nodeList).startsWith(\"[\")) {\n\t\t\t\t\t\t\tblock();\t\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tnodeList.push(\"![\" + alt + \"](\" + url + (title ? \" \\\"\" + title + \"\\\"\" : \"\") + \")\");\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(!peekTillNotEmpty(nodeList).startsWith(\"[\")) {\n\t\t\t\t\t\t\tblock(true);\t\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\t\n\t\t\t\tcase \"blockquote\":\n\t\t\t\t\tblock();\n\t\t\t\t\tblockquoteStack.push(markdownTags[tag]);\n\t\t\t\t\tnodeList.push(blockquoteStack.join(\"\"));\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"pre\":\n\t\t\t\tcase \"code\":\n\t\t\t\t\tblock();\n\t\t\t\t\tpreStack.push(true);\n\t\t\t\t\tbreak;\n\t\t\t\t}\t\t\t\t\n\t\t\t},\n\t\t\tchars: function(text) {\t\t\t\n\t\t\t\tif(preStack.length > 0) {\n\t\t\t\t\ttext = \"    \" + text.replace(/\\n/g,\"\\n    \");\n\t\t\t\t} else if(text.trim() != \"\") {\n\t\t\t\t\ttext = text.replace(/\\s+/g, \" \");\n\t\t\t\t\t\n\t\t\t\t\tvar prevText = peekTillNotEmpty(nodeList);\n\t\t\t\t\tif(/\\s+$/.test(prevText)) {\n\t\t\t\t\t\ttext = text.replace(/^\\s+/g, \"\");\n\t\t\t\t\t}\t\n\t\t\t\t} else {\n\t\t\t\t\tnodeList.push(\"\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif(logging) {\n\t\t\t\t\tconsole.log(\"text: \"+ text);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tnodeList.push(text);\n\t\t\t},\n\t\t\tend: function(tag) {\n\t\t\t\ttag = tag.toLowerCase();\n\t\t\t\tif(logging) {\n\t\t\t\t\tconsole.log(\"end: \"+ tag);\n\t\t\t\t}\n\t\t\t\tswitch (tag) {\t\t\t\t\n\t\t\t\tcase \"title\":\t\n\t\t\t\tcase \"h1\":\n\t\t\t\tcase \"h2\":\n\t\t\t\tcase \"h3\":\n\t\t\t\tcase \"h4\":\n\t\t\t\tcase \"h5\":\n\t\t\t\tcase \"h6\":\n\t\t\t\t\tif(!removeIfEmptyTag(markdownTags[tag])) {\n\t\t\t\t\t\tblock(true);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"p\":\n\t\t\t\tcase \"div\":\n\t\t\t\tcase \"td\":\n\t\t\t\t\twhile(nodeList.length > 0 && peek(nodeList).trim() == \"\") {\n\t\t\t\t\t\tnodeList.pop();\n\t\t\t\t\t}\n\t\t\t\t\tblock(true);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"b\":\n\t\t\t\tcase \"strong\":\n\t\t\t\tcase \"i\":\n\t\t\t\tcase \"em\":\n\t\t\t\tcase \"dfn\": \n\t\t\t\tcase \"var\": \t\n\t\t\t\tcase \"cite\":\n\t\t\t\t\tif(!removeIfEmptyTag(markdownTags[tag])) {\t\t\t\t\t\t\n\t\t\t\t\t\tnodeList.push(sliceText(markdownTags[tag]).trim());\n\t\t\t\t\t\tnodeList.push(markdownTags[tag]);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"a\":\n\t\t\t\t\tvar text = sliceText(\"[\");\n\t\t\t\t\ttext = text.replace(/\\s+/g, \" \");\t\t\t\t\t\n\t\t\t\t\ttext = text.trim();\n\t\t\t\t\t\n\t\t\t\t\tif(text == \"\") {\n\t\t\t\t\t\tnodeList.pop();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar attrs = linkAttrStack.pop();\n\t\t\t\t\tvar url;\n\t\t\t\t\tattrs[\"href\"] &&  attrs[\"href\"].value != \"\" ? url = getNormalizedUrl(attrs[\"href\"].value) : url = \"\";\n\t\t\t\t\t\n\t\t\t\t\tif(url == \"\") {\n\t\t\t\t\t\tnodeList.pop();\n\t\t\t\t\t\tnodeList.push(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tnodeList.push(text);\n\t\t\t\t\t\n\t\t\t\t\tif(!inlineStyle && !peek(nodeList).startsWith(\"!\")){\n\t\t\t\t\t\tvar l = links.indexOf(url);\n\t\t\t\t\t\tif(l == -1) {\n\t\t\t\t\t\t\tlinks.push(url);\n\t\t\t\t\t\t\tl=links.length-1;\n\t\t\t\t\t\t}\t\t\t\t\t\t\t\n\t\t\t\t\t\tnodeList.push(\"][\" + l + \"]\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif(peek(nodeList).startsWith(\"!\")){\n\t\t\t\t\t\t\tvar text = nodeList.pop();\n\t\t\t\t\t\t\ttext = nodeList.pop() + text;\n\t\t\t\t\t\t\tblock();\n\t\t\t\t\t\t\tnodeList.push(text);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar title = attrs[\"title\"];\t\t\t\t\t\t\n\t\t\t\t\t\tnodeList.push(\"](\" + url + (title ? \" \\\"\" + title.value.trim().replace(/\\s+/g, \" \") + \"\\\"\" : \"\") + \")\");\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(peek(nodeList).startsWith(\"!\")){\n\t\t\t\t\t\t\tblock(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\t\t\t\t\t\n\t\t\t\tcase \"ul\":\n\t\t\t\tcase \"ol\":\n\t\t\t\tcase \"dl\":\t\n\t\t\t\t\tlistBlock();\n\t\t\t\t\tlistTagStack.pop();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"li\":\n\t\t\t\tcase \"dt\":\n\t\t\t\t\tvar li = getListMarkdownTag();\n\t\t\t\t\tif(!removeIfEmptyTag(li)) {\n\t\t\t\t\t\tvar text = sliceText(li).trim();\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(text.startsWith(\"[![\")) {\n\t\t\t\t\t\t\tnodeList.pop();\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tblock();\n\t\t\t\t\t\t\tnodeList.push(text);\n\t\t\t\t\t\t\tblock(true);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnodeList.push(text);\n\t\t\t\t\t\t\tlistBlock();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\t\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"blockquote\":\n\t\t\t\t\tblockquoteStack.pop();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"pre\":\n\t\t\t\tcase \"code\":\n\t\t\t\t\tblock(true);\n\t\t\t\t\tpreStack.pop();\t\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"span\":\n\t\t\t\t\tif(peek(nodeList).trim() == \"\") {\n\t\t\t\t\t\tnodeList.pop();\n\t\t\t\t\t\tif(peek(nodeList) == \" \") {\n\t\t\t\t\t\t\tnodeList.pop();\t\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnodeList.push(markdownTags[tag]);\n\t\t\t\t\t\t}\t\t\t\t\t\t\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar text = nodeList.pop();\n\t\t\t\t\t\tnodeList.push(text.trim());\n\t\t\t\t\t\tnodeList.push(markdownTags[tag]);\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\t\t\t\t\t\n\t\t\t\tcase \"br\":\n\t\t\t\tcase \"hr\":\n\t\t\t\tcase \"img\":\n\t\t\t\tcase \"table\":\t\n\t\t\t\tcase \"tr\":\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t}, {\"nodesToIgnore\": [\"script\", \"noscript\", \"object\", \"iframe\", \"frame\", \"head\", \"style\", \"label\"]});\n\t\t\n\t\tif(!inlineStyle) {\t\t\t\t\t\t\t\n\t\t\tfor ( var i = 0; i < links.length; i++) {\n\t\t\t\tif(i == 0) {\n\t\t\t\t\tvar lastItem = nodeList.pop();\n\t\t\t\t\tnodeList.push(lastItem.replace(/\\s+$/g, \"\"));\n\t\t\t\t\tnodeList.push(\"\\n\\n[\" + i + \"]: \" + links[i]);\n\t\t\t\t} else {\n\t\t\t\t\tnodeList.push(\"\\n[\" + i + \"]: \" + links[i]);\t\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} catch(e) {\n\t\tconsole.log(e.stack);\n\t\tconsole.trace();\n\t}\n\t\n\treturn nodeList.join(\"\");\n\t\n}\n\nfunction getNormalizedUrl(s) {\n\tvar urlBase = location.href;\n\tvar urlDir  = urlBase.replace(/\\/[^\\/]*$/, '/');\n\tvar urlPage = urlBase.replace(/#[^\\/#]*$/, '');\n\n\tvar url;\n\tif(/^[a-zA-Z]([a-zA-Z0-9 -.])*:/.test(s)) {\n\t\t// already absolute url\n\t\turl = s;\n\t} else if(/^\\x2f/.test(s)) {// %2f --> /\n\t\t// url is relative to site\n\t\tlocation.protocol != \"\" ? url = location.protocol + \"//\" : url =\"\";\t\t\n\t\turl+= location.hostname;\t\t\n\t\tif(location.port != \"80\") {\n\t\t\turl+=\":\"+location.port;\n\t\t}\t\t\t\t\n\t\turl += s;\n\t} else if(/^#/.test(s)) {\n\t\t// url is relative to page\n\t\turl = urlPage + s;\n\t} else {\n\t\turl = urlDir + s;\n\t}\n\treturn encodeURI(url);\n}\n\nif (typeof exports != \"undefined\") {\n\texports.HTML2Markdown = HTML2Markdown;\n}\n\t\t\nif (typeof exports != \"undefined\") {\n\texports.HTML2MarkDown = HTML2MarkDown;\n}\n\n/* add the useful functions to String object*/\nif (typeof String.prototype.trim != 'function') {\n\tString.prototype.trim = function() {\n\t\treturn replace(/^\\s+|\\s+$/g,\"\");\n\t};\t\n}\n\nif (typeof String.prototype.isNotEmpty != 'function') {\n\tString.prototype.isNotEmpty = function() {\n\t\tif (/\\S/.test(this)) {\n\t\t    return true;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\t\t\n\t};\t\n}\n\nif (typeof String.prototype.replaceAll != 'function') {\n\tString.prototype.replaceAll = function(stringToFind,stringToReplace){\n\t    var temp = this;\n\t    var index = temp.indexOf(stringToFind);\n\t        while(index != -1){\n\t            temp = temp.replace(stringToFind,stringToReplace);\n\t            index = temp.indexOf(stringToFind);\n\t        }\n\t        return temp;\n\t};\t\n}\n\nif (typeof String.prototype.startsWith != 'function') {\n\tString.prototype.startsWith = function(str) {\n\t\treturn this.indexOf(str) == 0;\n\t};\n}\n\nif (typeof String.prototype.endsWith != 'function') {\n\tString.prototype.endsWith = function(suffix) {\n\t    return this.match(suffix+\"$\") == suffix;\n\t};\t\n}\n\nif (typeof Array.prototype.indexOf != 'function') {\n\tArray.prototype.indexOf = function(obj, fromIndex) {\n\t\tif (fromIndex == null) {\n\t\t\tfromIndex = 0;\n\t\t} else if (fromIndex < 0) {\n\t\t\tfromIndex = Math.max(0, this.length + fromIndex);\n\t\t}\n\t\tfor ( var i = fromIndex, j = this.length; i < j; i++) {\n\t\t\tif (this[i] === obj)\n\t\t\t\treturn i;\n\t\t}\n\t\treturn -1;\n\t};\n}"
  },
  {
    "path": "xheditor/xheditor_plugins/htmldomparser.js",
    "content": "/*\n * HTMLParser - This implementation of parser assumes we are parsing HTML in browser\n * and user DOM methods available in browser for parsing HTML.\n * \n * @author Himanshu Gilani\n * \n */\n\nvar HTMLParser = function(node, handler, opts) {\n\topts = opts || {};\n\tvar nodesToIgnore = opts['nodesToIgnore'] || [];\n\tvar parseHiddenNodes = opts['parseHiddenNodes'] || 'false';\n\t\n\tvar c = node.childNodes;\n\tfor ( var i = 0; i < c.length; i++) {\n\t\ttry {\n\t\t\tvar ignore = false;\n\t\t\tfor(var k=0; k< nodesToIgnore.length; k++) {\n\t\t\t\tif(c[i].nodeName.toLowerCase() == nodesToIgnore[k]) {\n\t\t\t\t\tignore= true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t//NOTE hidden node testing is expensive in FF.\n\t\t\tif (ignore || (!parseHiddenNodes && isHiddenNode(c[i]))  ){\n\t\t\t\tcontinue;\n\t\t\t} \n\t\t\t\n\t\t\tif (c[i].nodeName.toLowerCase() != \"#text\" && c[i].nodeName.toLowerCase() != \"#comment\") {\n\t\t\t\tvar attrs = [];\n\n\t\t\t\tif (c[i].hasAttributes()) {\n\t\t\t\t\tvar attributes = c[i].attributes;\n\t\t\t\t\tfor ( var a = 0; a < attributes.length; a++) {\n\t\t\t\t\t\tvar attribute = attributes.item(a);\n\n\t\t\t\t\t\tattrs.push({\n\t\t\t\t\t\t\tname : attribute.nodeName,\n\t\t\t\t\t\t\tvalue : attribute.nodeValue,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (handler.start) {\n\t\t\t\t\tif (c[i].hasChildNodes()) {\n\t\t\t\t\t\thandler.start(c[i].nodeName, attrs, false);\n\n\t\t\t\t\t\tif (c[i].nodeName.toLowerCase() == \"pre\" || c[i].nodeName.toLowerCase() == \"code\") {\n\t\t\t\t\t\t\thandler.chars(c[i].innerHTML);\n\t\t\t\t\t\t} else if (c[i].nodeName.toLowerCase() == \"iframe\" || c[i].nodeName.toLowerCase() == \"frame\") {\n\t\t\t\t\t\t\tif (c[i].contentDocument && c[i].contentDocument.documentElement) {\n\t\t\t\t\t\t\t\treturn HTMLParser(c[i].contentDocument.documentElement, handler, opts);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (c[i].hasChildNodes()) {\n\t\t\t\t\t\t\tHTMLParser(c[i], handler, opts);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (handler.end) {\n\t\t\t\t\t\t\thandler.end(c[i].nodeName);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\thandler.start(c[i].nodeName, attrs, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (c[i].nodeName.toLowerCase() == \"#text\") {\n\t\t\t\tif (handler.chars) {\n\t\t\t\t\thandler.chars(c[i].nodeValue);\n\t\t\t\t}\n\t\t\t} else if (c[i].nodeName.toLowerCase() == \"#comment\") {\n\t\t\t\tif (handler.comment) {\n\t\t\t\t\thandler.comment(c[i].nodeValue);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t//properly log error\t\n\t\t\tconsole.log(\"error while parsing node: \" + c[i].nodeName.toLowerCase());\n\t\t}\n\t}\n};\n\nfunction isHiddenNode(node) {\n\tif(node.nodeName.toLowerCase() == \"title\"){\n\t\treturn false;\n\t}\n\t\n\tif (window.getComputedStyle) {\n\t\ttry {\n\t\t\tvar style = window.getComputedStyle(node, null);\n\t\t\tif (style.getPropertyValue && style.getPropertyValue('display') == 'none') {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t// consume and ignore. node styles are not accessible\n\t\t}\n\t\treturn false;\n\t}\n} "
  },
  {
    "path": "xheditor/xheditor_plugins/multiupload/multiupload.css",
    "content": "html,body{\n\tfont-size:12px;\n\tpadding:0px;margin:0;\n\toverflow:hidden;\n\twidth:100%;height:100%;\n}\n#buttonArea{\n\tbackground:url(img/bg1.gif);\n\tborder-top:1px solid #F0F5FA;\n\tborder-bottom:1px solid #99BBE8;\n\tpadding:3px;\n}\n#controlBtns{\n\tfloat:right;\n}\n.btn{\n\tdisplay:inline-block;\n\tcolor:#000;\n\ttext-decoration:none;\n\tpadding-right:3px;\n\tcursor:pointer;\n}\n.btn span{\n\tdisplay:inline-block;\n\theight:17px;\n\tline-height:17px;\n\tpadding:2px;\n}\n.btn img{border:0;vertical-align:text-bottom;}\n.btn:hover{background:url(img/btnbgr.gif) top right;}\n.btn:hover span{background:url(img/btnbg.gif);}\n#listArea{\n\toverflow-x:hidden;\n\toverflow-y:auto;\n}\n#listTitle tr{background:url(img/bg2.gif);}\n#listTitle td{padding:5px;border-top:1px solid #F0F5FA;border-left:1px solid #fff;border-right:1px solid #ccc;border-bottom:1px solid #D0D0D0;}\n#listBody tr{cursor:pointer;}\n#listBody .hover{background:#F0F0F0;}\n#listBody .select{background:#DFE8F6;}\n#listBody td{padding:5px;border-bottom:1px solid #EDEDED;}\n#progressArea{\n\tbackground:#D4E1F2;\n\tborder-top:1px solid #99BBE8;\n\tpadding:3px;\n}\n#progressBar{\n\tposition: relative;\n\tborder:1px solid #6593CF;\n\tpadding:1px;\n}\n#progress{\n\theight:16px;\n\tbackground:#8FB5E8 url(img/progressbg.gif);\n}\n#progressBar span{\n\tposition: absolute;\n\ttext-align: center;\n\twidth:100%;line-height:16px;\n\tcolor:#396095;\n}"
  },
  {
    "path": "xheditor/xheditor_plugins/multiupload/multiupload.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" >\n<head>\n<meta name=\"robots\" content=\"noindex, nofollow\" />\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n<title>MultiUpload Demo</title>\n<link href=\"multiupload.css\" rel=\"stylesheet\" type=\"text/css\" />\n<script type=\"text/javascript\" src=\"../../jquery/jquery-1.4.4.min.js\"></script>\n<script type=\"text/javascript\" src=\"swfupload/swfupload.js\"></script>\n<script type=\"text/javascript\" src=\"multiupload.js\"></script>\n<script type=\"text/javascript\">\n$(window).load(pageInit);\nfunction pageInit()\n{\n\tvar uploadurl='../upload.php',ext='所有文件 (*.*)',size='2 MB',count=5,useget=0,params={}//默认值 \n\n\tuploadurl=getQuery('uploadurl')||uploadurl;ext=getQuery('ext')||ext;size=getQuery('size')||size;count=getQuery('count')||count;useget=getQuery('useget')||useget;\n\tvar tmpParams=getQuery('params');\n\tif(tmpParams)\n\t{\n\t\ttry{eval(\"tmpParams=\" + tmpParams);}catch(ex){};\n\t\tparams=$.extend({},params,tmpParams);\n\t}\n\text=ext.match(/([^\\(]+?)\\s*\\(\\s*([^\\)]+?)\\s*\\)/i);\n\tsetTimeout(fixHeight,10);\n\tswfu = new SWFUpload({\n\t\t// Flash组件\n\t\tflash_url : \"swfupload/swfupload.swf\",\n\t\tprevent_swf_caching : false,//是否缓存SWF文件\n\t\t\n\t\t// 服务器端\n\t\tupload_url: uploadurl,\n\t\tfile_post_name : \"filedata\",\n\t\tpost_params: params,//随文件上传一同向上传接收程序提交的Post数据\n\t\tuse_query_string : useget=='1'?true:false,//是否用GET方式发送参数\n\n\t\t// 文件设置\n\t\tfile_types : ext[2],//文件格式限制\n\t\tfile_types_description : ext[1],//文件格式描述\n\t\tfile_size_limit : size,\t// 文件大小限制\n\t\tfile_upload_limit : count,//上传文件总数\n\t\tfile_queue_limit:0,//上传队列总数\n\t\tcustom_settings : {\n\t\t\ttest : \"aaa\"\n\t\t},\n\t\t\t\n\t\t// 事件处理\n\t\tfile_queued_handler : fileQueued,//添加成功\n\t\tfile_queue_error_handler : fileQueueError,//添加失败\n\t\tupload_start_handler : uploadStart,//上传开始\n\t\tupload_progress_handler : uploadProgress,//上传进度\n\t\tupload_error_handler : uploadError,//上传失败\n\t\tupload_success_handler : uploadSuccess,//上传成功\n\t\tupload_complete_handler : uploadComplete,//上传结束\n\n\t\t// 按钮设置\n\t\tbutton_placeholder_id : \"divAddFiles\",\n\t\tbutton_width: 69,\n\t\tbutton_height: 17,\n\t\tbutton_window_mode: SWFUpload.WINDOW_MODE.TRANSPARENT,\n\t\tbutton_cursor: SWFUpload.CURSOR.HAND,\n\t\tbutton_image_url : \"img/add.gif\",\n\t\tbutton_text: '<span class=\"theFont\">添加文件</span>',\n\t\tbutton_text_style: \".theFont { font-size: 12px; }\",\n\t\tbutton_text_left_padding: 20,\n\t\tbutton_text_top_padding: 0,\n\t\t\n\t\t// 调试设置\n\t\tdebug: false\n\t});\n}\nfunction fixHeight(){$('#listArea').css('height',(document.body.clientHeight-56)+'px');}\nfunction getQuery(item){var svalue = location.search.match(new RegExp('[\\?\\&]' + item + '=([^\\&]*)(\\&?)','i'));return svalue?decodeURIComponent(svalue[1]):'';} \n\n//----------------跨域支持代码开始(非跨域环境请删除这段代码)----------------\nvar JSON = JSON || {};\nJSON.stringify = JSON.stringify || function (obj) {\n\tvar t = typeof (obj);\n\tif (t != \"object\" || obj === null) {\n\t\tif (t == \"string\")obj = '\"'+obj+'\"';\n\t\treturn String(obj);\n\t}\n\telse {\n\t\tvar n, v, json = [], arr = (obj && obj.constructor == Array);\n\t\tfor (n in obj) {\n\t\t\tv = obj[n]; t = typeof(v);\n\t\t\tif (t == \"string\") v = '\"'+v+'\"';\n\t\t\telse if (t == \"object\" && v !== null) v = JSON.stringify(v);\n\t\t\tjson.push((arr ? \"\" : '\"' + n + '\":') + String(v));\n\t\t}\n\t\treturn (arr ? \"[\" : \"{\") + String(json) + (arr ? \"]\" : \"}\");\n\t}\n};\nvar callback= callback || function(v){\n\tv=JSON.stringify(v);\n\twindow.name=escape(v);\n\twindow.location='http://'+location.search.match(/[\\?&]parenthost=(.*)(&|$)/i)[1]+'/xheditorproxy.html';//这个文件最好是一个0字节文件，如果无此文件也会正常工作\n}\n//----------------跨域支持代码结束----------------\n</script>\n</head>\n<body>\n\t<div id=\"upload\">\n\t\t<div id=\"buttonArea\">\n\t\t\t<div id=\"controlBtns\" style=\"display:none;\"><a href=\"javascript:void(0);\" id=\"btnClear\" onclick=\"removeFile();\" class=\"btn\" style=\"display:none;\"><span><img src=\"img/clear.gif\" /> 删除文件</span></a> <a href=\"javascript:void(0);\" id=\"btnStart\" onclick=\"startUploadFiles();\" class=\"btn\"><span><img src=\"img/start.gif\" /> 开始上传</span></a></div>\n\t\t\t<a href=\"javascript:void(0);\" id=\"addFiles\" class=\"btn\"><span><div id=\"divAddFiles\">添加文件</div></span></a>\n\t\t</div>\n\t\t<div id=\"listArea\">\n\t\t\t<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n\t\t\t\t<thead id=\"listTitle\"><tr><td width=\"53%\">文件名</td><td width=\"25%\">大小</td><td width=\"22%\">状态</td></tr></thead>\n\t\t\t\t<tbody id=\"listBody\">\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t</div>\n\t\t<div id=\"progressArea\">\n\t\t\t<div id=\"progressBar\"><span>0%</span><div id=\"progress\" style=\"width:1px;\"></div></div>\n\t\t</div>\n\t</div>\n</body>\n</html>"
  },
  {
    "path": "xheditor/xheditor_plugins/multiupload/multiupload.js",
    "content": "/*!\n * MultiUpload for xheditor\n * @requires xhEditor\n * \n * @author Yanis.Wang<yanis.wang@gmail.com>\n * @site http://xheditor.com/\n * @licence LGPL(http://www.opensource.org/licenses/lgpl-license.php)\n * \n * @Version: 0.9.2 (build 100505)\n */\nvar swfu,selQueue=[],selectID,arrMsg=[],allSize=0,uploadSize=0;\nfunction removeFile()\n{\n\tvar file;\n\tif(!selectID)return;\n\tfor(var i in selQueue)\n\t{\n\t\tfile=selQueue[i];\n\t\tif(file.id==selectID)\n\t\t{\n\t\t\tselQueue.splice(i,1);\n\t\t\tallSize-=file.size;\n\t\t\tswfu.cancelUpload(file.id);\n\t\t\t$('#'+file.id).remove();\n\t\t\tselectID=null;\n\t\t\tbreak;\n\t\t}\n\t}\n\t$('#btnClear').hide();\n\tif(selQueue.length==0)$('#controlBtns').hide();\n}\nfunction startUploadFiles()\n{\n\tif(swfu.getStats().files_queued>0)\n\t{\n\t\t$('#controlBtns').hide();\n\t\tswfu.startUpload();\n\t}\n\telse alert('上传前请先添加文件');\n}\nfunction setFileState(fileid,txt)\n{\n\t$('#'+fileid+'_state').text(txt);\n}\nfunction fileQueued(file)//队列添加成功\n{\n\tfor(var i in selQueue)if(selQueue[i].name==file.name){swfu.cancelUpload(file.id);return false;}//防止同名文件重复添加\n\tif(selQueue.length==0)$('#controlBtns').show();\n\tselQueue.push(file);\n\tallSize+=file.size;\n\t$('#listBody').append('<tr id=\"'+file.id+'\"><td>'+file.name+'</td><td>'+formatBytes(file.size)+'</td><td id=\"'+file.id+'_state\">就绪</td></tr>');\n\t$('#'+file.id).hover(function(){$(this).addClass('hover');},function(){$(this).removeClass('hover');})\n\t.click(function(){selectID=file.id;$('#listBody tr').removeClass('select');$(this).removeClass('hover').addClass('select');$('#btnClear').show();})\n}\nfunction fileQueueError(file, errorCode, message)//队列添加失败\n{\n\tvar errorName='';\n\tswitch (errorCode)\n\t{\n\t\tcase SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED:\n\t\t\terrorName = \"只能同时上传 \"+this.settings.file_upload_limit+\" 个文件\";\n\t\t\tbreak;\n\t\tcase SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:\n\t\t\terrorName = \"选择的文件超过了当前大小限制：\"+this.settings.file_size_limit;\n\t\t\tbreak;\n\t\tcase SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:\n\t\t\terrorName = \"零大小文件\";\n\t\t\tbreak;\n\t\tcase SWFUpload.QUEUE_ERROR.INVALID_FILETYPE:\n\t\t\terrorName = \"文件扩展名必需为：\"+this.settings.file_types_description+\" (\"+this.settings.file_types+\")\";\n\t\t\tbreak;\n\t\tdefault:\n\t\t\terrorName = \"未知错误\";\n\t\t\tbreak;\n\t}\n\talert(errorName);\n}\nfunction uploadStart(file)//单文件上传开始\n{\n\tsetFileState(file.id,'上传中…');\n}\nfunction uploadProgress(file, bytesLoaded, bytesTotal)//单文件上传进度\n{\n\tvar percent=Math.ceil((uploadSize+bytesLoaded)/allSize*100);\n\t$('#progressBar span').text(percent+'% ('+formatBytes(uploadSize+bytesLoaded)+' / '+formatBytes(allSize)+')');\n\t$('#progressBar div').css('width',percent+'%');\n}\nfunction uploadSuccess(file, serverData)//单文件上传成功\n{\n\tvar data=Object;\n\ttry{eval(\"data=\" + serverData);}catch(ex){};\n\tif(data.err!=undefined&&data.msg!=undefined)\n\t{\n\t\tif(!data.err)\n\t\t{\n\t\t\tuploadSize+=file.size;\n\t\t\tarrMsg.push(data.msg);\n\t\t\tsetFileState(file.id,'上传成功');\n\t\t}\n\t\telse\n\t\t{\n\t\t\tsetFileState(file.id,'上传失败');\n\t\t\talert(data.err);\n\t\t}\n\t}\n\telse setFileState(file.id,'上传失败！');\n}\nfunction uploadError(file, errorCode, message)//单文件上传错误\n{\n\tsetFileState(file.id,'上传失败！');\n}\nfunction uploadComplete(file)//文件上传周期结束\n{\n\tif(swfu.getStats().files_queued>0)swfu.startUpload();\n\telse uploadAllComplete();\n}\nfunction uploadAllComplete()//全部文件上传成功\n{\n\tcallback(arrMsg);\n}\nfunction formatBytes(bytes) {\n\tvar s = ['Byte', 'KB', 'MB', 'GB', 'TB', 'PB'];\n\tvar e = Math.floor(Math.log(bytes)/Math.log(1024));\n\treturn (bytes/Math.pow(1024, Math.floor(e))).toFixed(2)+\" \"+s[e];\n}"
  },
  {
    "path": "xheditor/xheditor_plugins/multiupload/swfupload/swfupload.js",
    "content": "/**\n * SWFUpload: http://www.swfupload.org, http://swfupload.googlecode.com\n *\n * mmSWFUpload 1.0: Flash upload dialog - http://profandesign.se/swfupload/,  http://www.vinterwebb.se/\n *\n * SWFUpload is (c) 2006-2007 Lars Huring, Olov Nilz�n and Mammon Media and is released under the MIT License:\n * http://www.opensource.org/licenses/mit-license.php\n *\n * SWFUpload 2 is (c) 2007-2008 Jake Roberts and is released under the MIT License:\n * http://www.opensource.org/licenses/mit-license.php\n *\n */\n\n\n/* ******************* */\n/* Constructor & Init  */\n/* ******************* */\nvar SWFUpload;\n\nif (SWFUpload == undefined) {\n\tSWFUpload = function (settings) {\n\t\tthis.initSWFUpload(settings);\n\t};\n}\n\nSWFUpload.prototype.initSWFUpload = function (settings) {\n\ttry {\n\t\tthis.customSettings = {};\t// A container where developers can place their own settings associated with this instance.\n\t\tthis.settings = settings;\n\t\tthis.eventQueue = [];\n\t\tthis.movieName = \"SWFUpload_\" + SWFUpload.movieCount++;\n\t\tthis.movieElement = null;\n\n\n\t\t// Setup global control tracking\n\t\tSWFUpload.instances[this.movieName] = this;\n\n\t\t// Load the settings.  Load the Flash movie.\n\t\tthis.initSettings();\n\t\tthis.loadFlash();\n\t\tthis.displayDebugInfo();\n\t} catch (ex) {\n\t\tdelete SWFUpload.instances[this.movieName];\n\t\tthrow ex;\n\t}\n};\n\n/* *************** */\n/* Static Members  */\n/* *************** */\nSWFUpload.instances = {};\nSWFUpload.movieCount = 0;\nSWFUpload.version = \"2.2.0 2009-03-25\";\nSWFUpload.QUEUE_ERROR = {\n\tQUEUE_LIMIT_EXCEEDED\t  \t\t: -100,\n\tFILE_EXCEEDS_SIZE_LIMIT  \t\t: -110,\n\tZERO_BYTE_FILE\t\t\t  \t\t: -120,\n\tINVALID_FILETYPE\t\t  \t\t: -130\n};\nSWFUpload.UPLOAD_ERROR = {\n\tHTTP_ERROR\t\t\t\t  \t\t: -200,\n\tMISSING_UPLOAD_URL\t      \t\t: -210,\n\tIO_ERROR\t\t\t\t  \t\t: -220,\n\tSECURITY_ERROR\t\t\t  \t\t: -230,\n\tUPLOAD_LIMIT_EXCEEDED\t  \t\t: -240,\n\tUPLOAD_FAILED\t\t\t  \t\t: -250,\n\tSPECIFIED_FILE_ID_NOT_FOUND\t\t: -260,\n\tFILE_VALIDATION_FAILED\t  \t\t: -270,\n\tFILE_CANCELLED\t\t\t  \t\t: -280,\n\tUPLOAD_STOPPED\t\t\t\t\t: -290\n};\nSWFUpload.FILE_STATUS = {\n\tQUEUED\t\t : -1,\n\tIN_PROGRESS\t : -2,\n\tERROR\t\t : -3,\n\tCOMPLETE\t : -4,\n\tCANCELLED\t : -5\n};\nSWFUpload.BUTTON_ACTION = {\n\tSELECT_FILE  : -100,\n\tSELECT_FILES : -110,\n\tSTART_UPLOAD : -120\n};\nSWFUpload.CURSOR = {\n\tARROW : -1,\n\tHAND : -2\n};\nSWFUpload.WINDOW_MODE = {\n\tWINDOW : \"window\",\n\tTRANSPARENT : \"transparent\",\n\tOPAQUE : \"opaque\"\n};\n\n// Private: takes a URL, determines if it is relative and converts to an absolute URL\n// using the current site. Only processes the URL if it can, otherwise returns the URL untouched\nSWFUpload.completeURL = function(url) {\n\tif (typeof(url) !== \"string\" || url.match(/^https?:\\/\\//i) || url.match(/^\\//)) {\n\t\treturn url;\n\t}\n\t\n\tvar currentURL = window.location.protocol + \"//\" + window.location.hostname + (window.location.port ? \":\" + window.location.port : \"\");\n\t\n\tvar indexSlash = window.location.pathname.lastIndexOf(\"/\");\n\tif (indexSlash <= 0) {\n\t\tpath = \"/\";\n\t} else {\n\t\tpath = window.location.pathname.substr(0, indexSlash) + \"/\";\n\t}\n\t\n\treturn /*currentURL +*/ path + url;\n\t\n};\n\n\n/* ******************** */\n/* Instance Members  */\n/* ******************** */\n\n// Private: initSettings ensures that all the\n// settings are set, getting a default value if one was not assigned.\nSWFUpload.prototype.initSettings = function () {\n\tthis.ensureDefault = function (settingName, defaultValue) {\n\t\tthis.settings[settingName] = (this.settings[settingName] == undefined) ? defaultValue : this.settings[settingName];\n\t};\n\t\n\t// Upload backend settings\n\tthis.ensureDefault(\"upload_url\", \"\");\n\tthis.ensureDefault(\"preserve_relative_urls\", false);\n\tthis.ensureDefault(\"file_post_name\", \"Filedata\");\n\tthis.ensureDefault(\"post_params\", {});\n\tthis.ensureDefault(\"use_query_string\", false);\n\tthis.ensureDefault(\"requeue_on_error\", false);\n\tthis.ensureDefault(\"http_success\", []);\n\tthis.ensureDefault(\"assume_success_timeout\", 0);\n\t\n\t// File Settings\n\tthis.ensureDefault(\"file_types\", \"*.*\");\n\tthis.ensureDefault(\"file_types_description\", \"All Files\");\n\tthis.ensureDefault(\"file_size_limit\", 0);\t// Default zero means \"unlimited\"\n\tthis.ensureDefault(\"file_upload_limit\", 0);\n\tthis.ensureDefault(\"file_queue_limit\", 0);\n\n\t// Flash Settings\n\tthis.ensureDefault(\"flash_url\", \"swfupload.swf\");\n\tthis.ensureDefault(\"prevent_swf_caching\", true);\n\t\n\t// Button Settings\n\tthis.ensureDefault(\"button_image_url\", \"\");\n\tthis.ensureDefault(\"button_width\", 1);\n\tthis.ensureDefault(\"button_height\", 1);\n\tthis.ensureDefault(\"button_text\", \"\");\n\tthis.ensureDefault(\"button_text_style\", \"color: #000000; font-size: 16pt;\");\n\tthis.ensureDefault(\"button_text_top_padding\", 0);\n\tthis.ensureDefault(\"button_text_left_padding\", 0);\n\tthis.ensureDefault(\"button_action\", SWFUpload.BUTTON_ACTION.SELECT_FILES);\n\tthis.ensureDefault(\"button_disabled\", false);\n\tthis.ensureDefault(\"button_placeholder_id\", \"\");\n\tthis.ensureDefault(\"button_placeholder\", null);\n\tthis.ensureDefault(\"button_cursor\", SWFUpload.CURSOR.ARROW);\n\tthis.ensureDefault(\"button_window_mode\", SWFUpload.WINDOW_MODE.WINDOW);\n\t\n\t// Debug Settings\n\tthis.ensureDefault(\"debug\", false);\n\tthis.settings.debug_enabled = this.settings.debug;\t// Here to maintain v2 API\n\t\n\t// Event Handlers\n\tthis.settings.return_upload_start_handler = this.returnUploadStart;\n\tthis.ensureDefault(\"swfupload_loaded_handler\", null);\n\tthis.ensureDefault(\"file_dialog_start_handler\", null);\n\tthis.ensureDefault(\"file_queued_handler\", null);\n\tthis.ensureDefault(\"file_queue_error_handler\", null);\n\tthis.ensureDefault(\"file_dialog_complete_handler\", null);\n\t\n\tthis.ensureDefault(\"upload_start_handler\", null);\n\tthis.ensureDefault(\"upload_progress_handler\", null);\n\tthis.ensureDefault(\"upload_error_handler\", null);\n\tthis.ensureDefault(\"upload_success_handler\", null);\n\tthis.ensureDefault(\"upload_complete_handler\", null);\n\t\n\tthis.ensureDefault(\"debug_handler\", this.debugMessage);\n\n\tthis.ensureDefault(\"custom_settings\", {});\n\n\t// Other settings\n\tthis.customSettings = this.settings.custom_settings;\n\t\n\t// Update the flash url if needed\n\tif (!!this.settings.prevent_swf_caching) {\n\t\tthis.settings.flash_url = this.settings.flash_url + (this.settings.flash_url.indexOf(\"?\") < 0 ? \"?\" : \"&\") + \"preventswfcaching=\" + new Date().getTime();\n\t}\n\t\n\tif (!this.settings.preserve_relative_urls) {\n\t\t//this.settings.flash_url = SWFUpload.completeURL(this.settings.flash_url);\t// Don't need to do this one since flash doesn't look at it\n\t\tthis.settings.upload_url = SWFUpload.completeURL(this.settings.upload_url);\n\t\tthis.settings.button_image_url = SWFUpload.completeURL(this.settings.button_image_url);\n\t}\n\t\n\tdelete this.ensureDefault;\n};\n\n// Private: loadFlash replaces the button_placeholder element with the flash movie.\nSWFUpload.prototype.loadFlash = function () {\n\tvar targetElement, tempParent;\n\n\t// Make sure an element with the ID we are going to use doesn't already exist\n\tif (document.getElementById(this.movieName) !== null) {\n\t\tthrow \"ID \" + this.movieName + \" is already in use. The Flash Object could not be added\";\n\t}\n\n\t// Get the element where we will be placing the flash movie\n\ttargetElement = document.getElementById(this.settings.button_placeholder_id) || this.settings.button_placeholder;\n\n\tif (targetElement == undefined) {\n\t\tthrow \"Could not find the placeholder element: \" + this.settings.button_placeholder_id;\n\t}\n\n\t// Append the container and load the flash\n\ttempParent = document.createElement(\"div\");\n\ttempParent.innerHTML = this.getFlashHTML();\t// Using innerHTML is non-standard but the only sensible way to dynamically add Flash in IE (and maybe other browsers)\n\ttargetElement.parentNode.replaceChild(tempParent.firstChild, targetElement);\n\n\t// Fix IE Flash/Form bug\n\tif (window[this.movieName] == undefined) {\n\t\twindow[this.movieName] = this.getMovieElement();\n\t}\n\t\n};\n\n// Private: getFlashHTML generates the object tag needed to embed the flash in to the document\nSWFUpload.prototype.getFlashHTML = function () {\n\t// Flash Satay object syntax: http://www.alistapart.com/articles/flashsatay\n\treturn ['<object id=\"', this.movieName, '\" type=\"application/x-shockwave-flash\" data=\"', this.settings.flash_url, '\" width=\"', this.settings.button_width, '\" height=\"', this.settings.button_height, '\" class=\"swfupload\">',\n\t\t\t\t'<param name=\"wmode\" value=\"', this.settings.button_window_mode, '\" />',\n\t\t\t\t'<param name=\"movie\" value=\"', this.settings.flash_url, '\" />',\n\t\t\t\t'<param name=\"quality\" value=\"high\" />',\n\t\t\t\t'<param name=\"menu\" value=\"false\" />',\n\t\t\t\t'<param name=\"allowScriptAccess\" value=\"always\" />',\n\t\t\t\t'<param name=\"flashvars\" value=\"' + this.getFlashVars() + '\" />',\n\t\t\t\t'</object>'].join(\"\");\n};\n\n// Private: getFlashVars builds the parameter string that will be passed\n// to flash in the flashvars param.\nSWFUpload.prototype.getFlashVars = function () {\n\t// Build a string from the post param object\n\tvar paramString = this.buildParamString();\n\tvar httpSuccessString = this.settings.http_success.join(\",\");\n\t\n\t// Build the parameter string\n\treturn [\"movieName=\", encodeURIComponent(this.movieName),\n\t\t\t\"&amp;uploadURL=\", encodeURIComponent(this.settings.upload_url),\n\t\t\t\"&amp;useQueryString=\", encodeURIComponent(this.settings.use_query_string),\n\t\t\t\"&amp;requeueOnError=\", encodeURIComponent(this.settings.requeue_on_error),\n\t\t\t\"&amp;httpSuccess=\", encodeURIComponent(httpSuccessString),\n\t\t\t\"&amp;assumeSuccessTimeout=\", encodeURIComponent(this.settings.assume_success_timeout),\n\t\t\t\"&amp;params=\", encodeURIComponent(paramString),\n\t\t\t\"&amp;filePostName=\", encodeURIComponent(this.settings.file_post_name),\n\t\t\t\"&amp;fileTypes=\", encodeURIComponent(this.settings.file_types),\n\t\t\t\"&amp;fileTypesDescription=\", encodeURIComponent(this.settings.file_types_description),\n\t\t\t\"&amp;fileSizeLimit=\", encodeURIComponent(this.settings.file_size_limit),\n\t\t\t\"&amp;fileUploadLimit=\", encodeURIComponent(this.settings.file_upload_limit),\n\t\t\t\"&amp;fileQueueLimit=\", encodeURIComponent(this.settings.file_queue_limit),\n\t\t\t\"&amp;debugEnabled=\", encodeURIComponent(this.settings.debug_enabled),\n\t\t\t\"&amp;buttonImageURL=\", encodeURIComponent(this.settings.button_image_url),\n\t\t\t\"&amp;buttonWidth=\", encodeURIComponent(this.settings.button_width),\n\t\t\t\"&amp;buttonHeight=\", encodeURIComponent(this.settings.button_height),\n\t\t\t\"&amp;buttonText=\", encodeURIComponent(this.settings.button_text),\n\t\t\t\"&amp;buttonTextTopPadding=\", encodeURIComponent(this.settings.button_text_top_padding),\n\t\t\t\"&amp;buttonTextLeftPadding=\", encodeURIComponent(this.settings.button_text_left_padding),\n\t\t\t\"&amp;buttonTextStyle=\", encodeURIComponent(this.settings.button_text_style),\n\t\t\t\"&amp;buttonAction=\", encodeURIComponent(this.settings.button_action),\n\t\t\t\"&amp;buttonDisabled=\", encodeURIComponent(this.settings.button_disabled),\n\t\t\t\"&amp;buttonCursor=\", encodeURIComponent(this.settings.button_cursor)\n\t\t].join(\"\");\n};\n\n// Public: getMovieElement retrieves the DOM reference to the Flash element added by SWFUpload\n// The element is cached after the first lookup\nSWFUpload.prototype.getMovieElement = function () {\n\tif (this.movieElement == undefined) {\n\t\tthis.movieElement = document.getElementById(this.movieName);\n\t}\n\n\tif (this.movieElement === null) {\n\t\tthrow \"Could not find Flash element\";\n\t}\n\t\n\treturn this.movieElement;\n};\n\n// Private: buildParamString takes the name/value pairs in the post_params setting object\n// and joins them up in to a string formatted \"name=value&amp;name=value\"\nSWFUpload.prototype.buildParamString = function () {\n\tvar postParams = this.settings.post_params; \n\tvar paramStringPairs = [];\n\n\tif (typeof(postParams) === \"object\") {\n\t\tfor (var name in postParams) {\n\t\t\tif (postParams.hasOwnProperty(name)) {\n\t\t\t\tparamStringPairs.push(encodeURIComponent(name.toString()) + \"=\" + encodeURIComponent(postParams[name].toString()));\n\t\t\t}\n\t\t}\n\t}\n\n\treturn paramStringPairs.join(\"&amp;\");\n};\n\n// Public: Used to remove a SWFUpload instance from the page. This method strives to remove\n// all references to the SWF, and other objects so memory is properly freed.\n// Returns true if everything was destroyed. Returns a false if a failure occurs leaving SWFUpload in an inconsistant state.\n// Credits: Major improvements provided by steffen\nSWFUpload.prototype.destroy = function () {\n\ttry {\n\t\t// Make sure Flash is done before we try to remove it\n\t\tthis.cancelUpload(null, false);\n\t\t\n\n\t\t// Remove the SWFUpload DOM nodes\n\t\tvar movieElement = null;\n\t\tmovieElement = this.getMovieElement();\n\t\t\n\t\tif (movieElement && typeof(movieElement.CallFunction) === \"unknown\") { // We only want to do this in IE\n\t\t\t// Loop through all the movie's properties and remove all function references (DOM/JS IE 6/7 memory leak workaround)\n\t\t\tfor (var i in movieElement) {\n\t\t\t\ttry {\n\t\t\t\t\tif (typeof(movieElement[i]) === \"function\") {\n\t\t\t\t\t\tmovieElement[i] = null;\n\t\t\t\t\t}\n\t\t\t\t} catch (ex1) {}\n\t\t\t}\n\n\t\t\t// Remove the Movie Element from the page\n\t\t\ttry {\n\t\t\t\tmovieElement.parentNode.removeChild(movieElement);\n\t\t\t} catch (ex) {}\n\t\t}\n\t\t\n\t\t// Remove IE form fix reference\n\t\twindow[this.movieName] = null;\n\n\t\t// Destroy other references\n\t\tSWFUpload.instances[this.movieName] = null;\n\t\tdelete SWFUpload.instances[this.movieName];\n\n\t\tthis.movieElement = null;\n\t\tthis.settings = null;\n\t\tthis.customSettings = null;\n\t\tthis.eventQueue = null;\n\t\tthis.movieName = null;\n\t\t\n\t\t\n\t\treturn true;\n\t} catch (ex2) {\n\t\treturn false;\n\t}\n};\n\n\n// Public: displayDebugInfo prints out settings and configuration\n// information about this SWFUpload instance.\n// This function (and any references to it) can be deleted when placing\n// SWFUpload in production.\nSWFUpload.prototype.displayDebugInfo = function () {\n\tthis.debug(\n\t\t[\n\t\t\t\"---SWFUpload Instance Info---\\n\",\n\t\t\t\"Version: \", SWFUpload.version, \"\\n\",\n\t\t\t\"Movie Name: \", this.movieName, \"\\n\",\n\t\t\t\"Settings:\\n\",\n\t\t\t\"\\t\", \"upload_url:               \", this.settings.upload_url, \"\\n\",\n\t\t\t\"\\t\", \"flash_url:                \", this.settings.flash_url, \"\\n\",\n\t\t\t\"\\t\", \"use_query_string:         \", this.settings.use_query_string.toString(), \"\\n\",\n\t\t\t\"\\t\", \"requeue_on_error:         \", this.settings.requeue_on_error.toString(), \"\\n\",\n\t\t\t\"\\t\", \"http_success:             \", this.settings.http_success.join(\", \"), \"\\n\",\n\t\t\t\"\\t\", \"assume_success_timeout:   \", this.settings.assume_success_timeout, \"\\n\",\n\t\t\t\"\\t\", \"file_post_name:           \", this.settings.file_post_name, \"\\n\",\n\t\t\t\"\\t\", \"post_params:              \", this.settings.post_params.toString(), \"\\n\",\n\t\t\t\"\\t\", \"file_types:               \", this.settings.file_types, \"\\n\",\n\t\t\t\"\\t\", \"file_types_description:   \", this.settings.file_types_description, \"\\n\",\n\t\t\t\"\\t\", \"file_size_limit:          \", this.settings.file_size_limit, \"\\n\",\n\t\t\t\"\\t\", \"file_upload_limit:        \", this.settings.file_upload_limit, \"\\n\",\n\t\t\t\"\\t\", \"file_queue_limit:         \", this.settings.file_queue_limit, \"\\n\",\n\t\t\t\"\\t\", \"debug:                    \", this.settings.debug.toString(), \"\\n\",\n\n\t\t\t\"\\t\", \"prevent_swf_caching:      \", this.settings.prevent_swf_caching.toString(), \"\\n\",\n\n\t\t\t\"\\t\", \"button_placeholder_id:    \", this.settings.button_placeholder_id.toString(), \"\\n\",\n\t\t\t\"\\t\", \"button_placeholder:       \", (this.settings.button_placeholder ? \"Set\" : \"Not Set\"), \"\\n\",\n\t\t\t\"\\t\", \"button_image_url:         \", this.settings.button_image_url.toString(), \"\\n\",\n\t\t\t\"\\t\", \"button_width:             \", this.settings.button_width.toString(), \"\\n\",\n\t\t\t\"\\t\", \"button_height:            \", this.settings.button_height.toString(), \"\\n\",\n\t\t\t\"\\t\", \"button_text:              \", this.settings.button_text.toString(), \"\\n\",\n\t\t\t\"\\t\", \"button_text_style:        \", this.settings.button_text_style.toString(), \"\\n\",\n\t\t\t\"\\t\", \"button_text_top_padding:  \", this.settings.button_text_top_padding.toString(), \"\\n\",\n\t\t\t\"\\t\", \"button_text_left_padding: \", this.settings.button_text_left_padding.toString(), \"\\n\",\n\t\t\t\"\\t\", \"button_action:            \", this.settings.button_action.toString(), \"\\n\",\n\t\t\t\"\\t\", \"button_disabled:          \", this.settings.button_disabled.toString(), \"\\n\",\n\n\t\t\t\"\\t\", \"custom_settings:          \", this.settings.custom_settings.toString(), \"\\n\",\n\t\t\t\"Event Handlers:\\n\",\n\t\t\t\"\\t\", \"swfupload_loaded_handler assigned:  \", (typeof this.settings.swfupload_loaded_handler === \"function\").toString(), \"\\n\",\n\t\t\t\"\\t\", \"file_dialog_start_handler assigned: \", (typeof this.settings.file_dialog_start_handler === \"function\").toString(), \"\\n\",\n\t\t\t\"\\t\", \"file_queued_handler assigned:       \", (typeof this.settings.file_queued_handler === \"function\").toString(), \"\\n\",\n\t\t\t\"\\t\", \"file_queue_error_handler assigned:  \", (typeof this.settings.file_queue_error_handler === \"function\").toString(), \"\\n\",\n\t\t\t\"\\t\", \"upload_start_handler assigned:      \", (typeof this.settings.upload_start_handler === \"function\").toString(), \"\\n\",\n\t\t\t\"\\t\", \"upload_progress_handler assigned:   \", (typeof this.settings.upload_progress_handler === \"function\").toString(), \"\\n\",\n\t\t\t\"\\t\", \"upload_error_handler assigned:      \", (typeof this.settings.upload_error_handler === \"function\").toString(), \"\\n\",\n\t\t\t\"\\t\", \"upload_success_handler assigned:    \", (typeof this.settings.upload_success_handler === \"function\").toString(), \"\\n\",\n\t\t\t\"\\t\", \"upload_complete_handler assigned:   \", (typeof this.settings.upload_complete_handler === \"function\").toString(), \"\\n\",\n\t\t\t\"\\t\", \"debug_handler assigned:             \", (typeof this.settings.debug_handler === \"function\").toString(), \"\\n\"\n\t\t].join(\"\")\n\t);\n};\n\n/* Note: addSetting and getSetting are no longer used by SWFUpload but are included\n\tthe maintain v2 API compatibility\n*/\n// Public: (Deprecated) addSetting adds a setting value. If the value given is undefined or null then the default_value is used.\nSWFUpload.prototype.addSetting = function (name, value, default_value) {\n    if (value == undefined) {\n        return (this.settings[name] = default_value);\n    } else {\n        return (this.settings[name] = value);\n\t}\n};\n\n// Public: (Deprecated) getSetting gets a setting. Returns an empty string if the setting was not found.\nSWFUpload.prototype.getSetting = function (name) {\n    if (this.settings[name] != undefined) {\n        return this.settings[name];\n\t}\n\n    return \"\";\n};\n\n\n\n// Private: callFlash handles function calls made to the Flash element.\n// Calls are made with a setTimeout for some functions to work around\n// bugs in the ExternalInterface library.\nSWFUpload.prototype.callFlash = function (functionName, argumentArray) {\n\targumentArray = argumentArray || [];\n\t\n\tvar movieElement = this.getMovieElement();\n\tvar returnValue, returnString;\n\n\t// Flash's method if calling ExternalInterface methods (code adapted from MooTools).\n\ttry {\n\t\treturnString = movieElement.CallFunction('<invoke name=\"' + functionName + '\" returntype=\"javascript\">' + __flash__argumentsToXML(argumentArray, 0) + '</invoke>');\n\t\treturnValue = eval(returnString);\n\t} catch (ex) {\n\t\tthrow \"Call to \" + functionName + \" failed\";\n\t}\n\t\n\t// Unescape file post param values\n\tif (returnValue != undefined && typeof returnValue.post === \"object\") {\n\t\treturnValue = this.unescapeFilePostParams(returnValue);\n\t}\n\n\treturn returnValue;\n};\n\n/* *****************************\n\t-- Flash control methods --\n\tYour UI should use these\n\tto operate SWFUpload\n   ***************************** */\n\n// WARNING: this function does not work in Flash Player 10\n// Public: selectFile causes a File Selection Dialog window to appear.  This\n// dialog only allows 1 file to be selected.\nSWFUpload.prototype.selectFile = function () {\n\tthis.callFlash(\"SelectFile\");\n};\n\n// WARNING: this function does not work in Flash Player 10\n// Public: selectFiles causes a File Selection Dialog window to appear/ This\n// dialog allows the user to select any number of files\n// Flash Bug Warning: Flash limits the number of selectable files based on the combined length of the file names.\n// If the selection name length is too long the dialog will fail in an unpredictable manner.  There is no work-around\n// for this bug.\nSWFUpload.prototype.selectFiles = function () {\n\tthis.callFlash(\"SelectFiles\");\n};\n\n\n// Public: startUpload starts uploading the first file in the queue unless\n// the optional parameter 'fileID' specifies the ID \nSWFUpload.prototype.startUpload = function (fileID) {\n\tthis.callFlash(\"StartUpload\", [fileID]);\n};\n\n// Public: cancelUpload cancels any queued file.  The fileID parameter may be the file ID or index.\n// If you do not specify a fileID the current uploading file or first file in the queue is cancelled.\n// If you do not want the uploadError event to trigger you can specify false for the triggerErrorEvent parameter.\nSWFUpload.prototype.cancelUpload = function (fileID, triggerErrorEvent) {\n\tif (triggerErrorEvent !== false) {\n\t\ttriggerErrorEvent = true;\n\t}\n\tthis.callFlash(\"CancelUpload\", [fileID, triggerErrorEvent]);\n};\n\n// Public: stopUpload stops the current upload and requeues the file at the beginning of the queue.\n// If nothing is currently uploading then nothing happens.\nSWFUpload.prototype.stopUpload = function () {\n\tthis.callFlash(\"StopUpload\");\n};\n\n/* ************************\n * Settings methods\n *   These methods change the SWFUpload settings.\n *   SWFUpload settings should not be changed directly on the settings object\n *   since many of the settings need to be passed to Flash in order to take\n *   effect.\n * *********************** */\n\n// Public: getStats gets the file statistics object.\nSWFUpload.prototype.getStats = function () {\n\treturn this.callFlash(\"GetStats\");\n};\n\n// Public: setStats changes the SWFUpload statistics.  You shouldn't need to \n// change the statistics but you can.  Changing the statistics does not\n// affect SWFUpload accept for the successful_uploads count which is used\n// by the upload_limit setting to determine how many files the user may upload.\nSWFUpload.prototype.setStats = function (statsObject) {\n\tthis.callFlash(\"SetStats\", [statsObject]);\n};\n\n// Public: getFile retrieves a File object by ID or Index.  If the file is\n// not found then 'null' is returned.\nSWFUpload.prototype.getFile = function (fileID) {\n\tif (typeof(fileID) === \"number\") {\n\t\treturn this.callFlash(\"GetFileByIndex\", [fileID]);\n\t} else {\n\t\treturn this.callFlash(\"GetFile\", [fileID]);\n\t}\n};\n\n// Public: addFileParam sets a name/value pair that will be posted with the\n// file specified by the Files ID.  If the name already exists then the\n// exiting value will be overwritten.\nSWFUpload.prototype.addFileParam = function (fileID, name, value) {\n\treturn this.callFlash(\"AddFileParam\", [fileID, name, value]);\n};\n\n// Public: removeFileParam removes a previously set (by addFileParam) name/value\n// pair from the specified file.\nSWFUpload.prototype.removeFileParam = function (fileID, name) {\n\tthis.callFlash(\"RemoveFileParam\", [fileID, name]);\n};\n\n// Public: setUploadUrl changes the upload_url setting.\nSWFUpload.prototype.setUploadURL = function (url) {\n\tthis.settings.upload_url = url.toString();\n\tthis.callFlash(\"SetUploadURL\", [url]);\n};\n\n// Public: setPostParams changes the post_params setting\nSWFUpload.prototype.setPostParams = function (paramsObject) {\n\tthis.settings.post_params = paramsObject;\n\tthis.callFlash(\"SetPostParams\", [paramsObject]);\n};\n\n// Public: addPostParam adds post name/value pair.  Each name can have only one value.\nSWFUpload.prototype.addPostParam = function (name, value) {\n\tthis.settings.post_params[name] = value;\n\tthis.callFlash(\"SetPostParams\", [this.settings.post_params]);\n};\n\n// Public: removePostParam deletes post name/value pair.\nSWFUpload.prototype.removePostParam = function (name) {\n\tdelete this.settings.post_params[name];\n\tthis.callFlash(\"SetPostParams\", [this.settings.post_params]);\n};\n\n// Public: setFileTypes changes the file_types setting and the file_types_description setting\nSWFUpload.prototype.setFileTypes = function (types, description) {\n\tthis.settings.file_types = types;\n\tthis.settings.file_types_description = description;\n\tthis.callFlash(\"SetFileTypes\", [types, description]);\n};\n\n// Public: setFileSizeLimit changes the file_size_limit setting\nSWFUpload.prototype.setFileSizeLimit = function (fileSizeLimit) {\n\tthis.settings.file_size_limit = fileSizeLimit;\n\tthis.callFlash(\"SetFileSizeLimit\", [fileSizeLimit]);\n};\n\n// Public: setFileUploadLimit changes the file_upload_limit setting\nSWFUpload.prototype.setFileUploadLimit = function (fileUploadLimit) {\n\tthis.settings.file_upload_limit = fileUploadLimit;\n\tthis.callFlash(\"SetFileUploadLimit\", [fileUploadLimit]);\n};\n\n// Public: setFileQueueLimit changes the file_queue_limit setting\nSWFUpload.prototype.setFileQueueLimit = function (fileQueueLimit) {\n\tthis.settings.file_queue_limit = fileQueueLimit;\n\tthis.callFlash(\"SetFileQueueLimit\", [fileQueueLimit]);\n};\n\n// Public: setFilePostName changes the file_post_name setting\nSWFUpload.prototype.setFilePostName = function (filePostName) {\n\tthis.settings.file_post_name = filePostName;\n\tthis.callFlash(\"SetFilePostName\", [filePostName]);\n};\n\n// Public: setUseQueryString changes the use_query_string setting\nSWFUpload.prototype.setUseQueryString = function (useQueryString) {\n\tthis.settings.use_query_string = useQueryString;\n\tthis.callFlash(\"SetUseQueryString\", [useQueryString]);\n};\n\n// Public: setRequeueOnError changes the requeue_on_error setting\nSWFUpload.prototype.setRequeueOnError = function (requeueOnError) {\n\tthis.settings.requeue_on_error = requeueOnError;\n\tthis.callFlash(\"SetRequeueOnError\", [requeueOnError]);\n};\n\n// Public: setHTTPSuccess changes the http_success setting\nSWFUpload.prototype.setHTTPSuccess = function (http_status_codes) {\n\tif (typeof http_status_codes === \"string\") {\n\t\thttp_status_codes = http_status_codes.replace(\" \", \"\").split(\",\");\n\t}\n\t\n\tthis.settings.http_success = http_status_codes;\n\tthis.callFlash(\"SetHTTPSuccess\", [http_status_codes]);\n};\n\n// Public: setHTTPSuccess changes the http_success setting\nSWFUpload.prototype.setAssumeSuccessTimeout = function (timeout_seconds) {\n\tthis.settings.assume_success_timeout = timeout_seconds;\n\tthis.callFlash(\"SetAssumeSuccessTimeout\", [timeout_seconds]);\n};\n\n// Public: setDebugEnabled changes the debug_enabled setting\nSWFUpload.prototype.setDebugEnabled = function (debugEnabled) {\n\tthis.settings.debug_enabled = debugEnabled;\n\tthis.callFlash(\"SetDebugEnabled\", [debugEnabled]);\n};\n\n// Public: setButtonImageURL loads a button image sprite\nSWFUpload.prototype.setButtonImageURL = function (buttonImageURL) {\n\tif (buttonImageURL == undefined) {\n\t\tbuttonImageURL = \"\";\n\t}\n\t\n\tthis.settings.button_image_url = buttonImageURL;\n\tthis.callFlash(\"SetButtonImageURL\", [buttonImageURL]);\n};\n\n// Public: setButtonDimensions resizes the Flash Movie and button\nSWFUpload.prototype.setButtonDimensions = function (width, height) {\n\tthis.settings.button_width = width;\n\tthis.settings.button_height = height;\n\t\n\tvar movie = this.getMovieElement();\n\tif (movie != undefined) {\n\t\tmovie.style.width = width + \"px\";\n\t\tmovie.style.height = height + \"px\";\n\t}\n\t\n\tthis.callFlash(\"SetButtonDimensions\", [width, height]);\n};\n// Public: setButtonText Changes the text overlaid on the button\nSWFUpload.prototype.setButtonText = function (html) {\n\tthis.settings.button_text = html;\n\tthis.callFlash(\"SetButtonText\", [html]);\n};\n// Public: setButtonTextPadding changes the top and left padding of the text overlay\nSWFUpload.prototype.setButtonTextPadding = function (left, top) {\n\tthis.settings.button_text_top_padding = top;\n\tthis.settings.button_text_left_padding = left;\n\tthis.callFlash(\"SetButtonTextPadding\", [left, top]);\n};\n\n// Public: setButtonTextStyle changes the CSS used to style the HTML/Text overlaid on the button\nSWFUpload.prototype.setButtonTextStyle = function (css) {\n\tthis.settings.button_text_style = css;\n\tthis.callFlash(\"SetButtonTextStyle\", [css]);\n};\n// Public: setButtonDisabled disables/enables the button\nSWFUpload.prototype.setButtonDisabled = function (isDisabled) {\n\tthis.settings.button_disabled = isDisabled;\n\tthis.callFlash(\"SetButtonDisabled\", [isDisabled]);\n};\n// Public: setButtonAction sets the action that occurs when the button is clicked\nSWFUpload.prototype.setButtonAction = function (buttonAction) {\n\tthis.settings.button_action = buttonAction;\n\tthis.callFlash(\"SetButtonAction\", [buttonAction]);\n};\n\n// Public: setButtonCursor changes the mouse cursor displayed when hovering over the button\nSWFUpload.prototype.setButtonCursor = function (cursor) {\n\tthis.settings.button_cursor = cursor;\n\tthis.callFlash(\"SetButtonCursor\", [cursor]);\n};\n\n/* *******************************\n\tFlash Event Interfaces\n\tThese functions are used by Flash to trigger the various\n\tevents.\n\t\n\tAll these functions a Private.\n\t\n\tBecause the ExternalInterface library is buggy the event calls\n\tare added to a queue and the queue then executed by a setTimeout.\n\tThis ensures that events are executed in a determinate order and that\n\tthe ExternalInterface bugs are avoided.\n******************************* */\n\nSWFUpload.prototype.queueEvent = function (handlerName, argumentArray) {\n\t// Warning: Don't call this.debug inside here or you'll create an infinite loop\n\t\n\tif (argumentArray == undefined) {\n\t\targumentArray = [];\n\t} else if (!(argumentArray instanceof Array)) {\n\t\targumentArray = [argumentArray];\n\t}\n\t\n\tvar self = this;\n\tif (typeof this.settings[handlerName] === \"function\") {\n\t\t// Queue the event\n\t\tthis.eventQueue.push(function () {\n\t\t\tthis.settings[handlerName].apply(this, argumentArray);\n\t\t});\n\t\t\n\t\t// Execute the next queued event\n\t\tsetTimeout(function () {\n\t\t\tself.executeNextEvent();\n\t\t}, 0);\n\t\t\n\t} else if (this.settings[handlerName] !== null) {\n\t\tthrow \"Event handler \" + handlerName + \" is unknown or is not a function\";\n\t}\n};\n\n// Private: Causes the next event in the queue to be executed.  Since events are queued using a setTimeout\n// we must queue them in order to garentee that they are executed in order.\nSWFUpload.prototype.executeNextEvent = function () {\n\t// Warning: Don't call this.debug inside here or you'll create an infinite loop\n\n\tvar  f = this.eventQueue ? this.eventQueue.shift() : null;\n\tif (typeof(f) === \"function\") {\n\t\tf.apply(this);\n\t}\n};\n\n// Private: unescapeFileParams is part of a workaround for a flash bug where objects passed through ExternalInterface cannot have\n// properties that contain characters that are not valid for JavaScript identifiers. To work around this\n// the Flash Component escapes the parameter names and we must unescape again before passing them along.\nSWFUpload.prototype.unescapeFilePostParams = function (file) {\n\tvar reg = /[$]([0-9a-f]{4})/i;\n\tvar unescapedPost = {};\n\tvar uk;\n\n\tif (file != undefined) {\n\t\tfor (var k in file.post) {\n\t\t\tif (file.post.hasOwnProperty(k)) {\n\t\t\t\tuk = k;\n\t\t\t\tvar match;\n\t\t\t\twhile ((match = reg.exec(uk)) !== null) {\n\t\t\t\t\tuk = uk.replace(match[0], String.fromCharCode(parseInt(\"0x\" + match[1], 16)));\n\t\t\t\t}\n\t\t\t\tunescapedPost[uk] = file.post[k];\n\t\t\t}\n\t\t}\n\n\t\tfile.post = unescapedPost;\n\t}\n\n\treturn file;\n};\n\n// Private: Called by Flash to see if JS can call in to Flash (test if External Interface is working)\nSWFUpload.prototype.testExternalInterface = function () {\n\ttry {\n\t\treturn this.callFlash(\"TestExternalInterface\");\n\t} catch (ex) {\n\t\treturn false;\n\t}\n};\n\n// Private: This event is called by Flash when it has finished loading. Don't modify this.\n// Use the swfupload_loaded_handler event setting to execute custom code when SWFUpload has loaded.\nSWFUpload.prototype.flashReady = function () {\n\t// Check that the movie element is loaded correctly with its ExternalInterface methods defined\n\tvar movieElement = this.getMovieElement();\n\n\tif (!movieElement) {\n\t\tthis.debug(\"Flash called back ready but the flash movie can't be found.\");\n\t\treturn;\n\t}\n\n\tthis.cleanUp(movieElement);\n\t\n\tthis.queueEvent(\"swfupload_loaded_handler\");\n};\n\n// Private: removes Flash added fuctions to the DOM node to prevent memory leaks in IE.\n// This function is called by Flash each time the ExternalInterface functions are created.\nSWFUpload.prototype.cleanUp = function (movieElement) {\n\t// Pro-actively unhook all the Flash functions\n\ttry {\n\t\tif (this.movieElement && typeof(movieElement.CallFunction) === \"unknown\") { // We only want to do this in IE\n\t\t\tthis.debug(\"Removing Flash functions hooks (this should only run in IE and should prevent memory leaks)\");\n\t\t\tfor (var key in movieElement) {\n\t\t\t\ttry {\n\t\t\t\t\tif (typeof(movieElement[key]) === \"function\") {\n\t\t\t\t\t\tmovieElement[key] = null;\n\t\t\t\t\t}\n\t\t\t\t} catch (ex) {\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} catch (ex1) {\n\t\n\t}\n\n\t// Fix Flashes own cleanup code so if the SWFMovie was removed from the page\n\t// it doesn't display errors.\n\twindow[\"__flash__removeCallback\"] = function (instance, name) {\n\t\ttry {\n\t\t\tif (instance) {\n\t\t\t\tinstance[name] = null;\n\t\t\t}\n\t\t} catch (flashEx) {\n\t\t\n\t\t}\n\t};\n\n};\n\n\n/* This is a chance to do something before the browse window opens */\nSWFUpload.prototype.fileDialogStart = function () {\n\tthis.queueEvent(\"file_dialog_start_handler\");\n};\n\n\n/* Called when a file is successfully added to the queue. */\nSWFUpload.prototype.fileQueued = function (file) {\n\tfile = this.unescapeFilePostParams(file);\n\tthis.queueEvent(\"file_queued_handler\", file);\n};\n\n\n/* Handle errors that occur when an attempt to queue a file fails. */\nSWFUpload.prototype.fileQueueError = function (file, errorCode, message) {\n\tfile = this.unescapeFilePostParams(file);\n\tthis.queueEvent(\"file_queue_error_handler\", [file, errorCode, message]);\n};\n\n/* Called after the file dialog has closed and the selected files have been queued.\n\tYou could call startUpload here if you want the queued files to begin uploading immediately. */\nSWFUpload.prototype.fileDialogComplete = function (numFilesSelected, numFilesQueued, numFilesInQueue) {\n\tthis.queueEvent(\"file_dialog_complete_handler\", [numFilesSelected, numFilesQueued, numFilesInQueue]);\n};\n\nSWFUpload.prototype.uploadStart = function (file) {\n\tfile = this.unescapeFilePostParams(file);\n\tthis.queueEvent(\"return_upload_start_handler\", file);\n};\n\nSWFUpload.prototype.returnUploadStart = function (file) {\n\tvar returnValue;\n\tif (typeof this.settings.upload_start_handler === \"function\") {\n\t\tfile = this.unescapeFilePostParams(file);\n\t\treturnValue = this.settings.upload_start_handler.call(this, file);\n\t} else if (this.settings.upload_start_handler != undefined) {\n\t\tthrow \"upload_start_handler must be a function\";\n\t}\n\n\t// Convert undefined to true so if nothing is returned from the upload_start_handler it is\n\t// interpretted as 'true'.\n\tif (returnValue === undefined) {\n\t\treturnValue = true;\n\t}\n\t\n\treturnValue = !!returnValue;\n\t\n\tthis.callFlash(\"ReturnUploadStart\", [returnValue]);\n};\n\n\n\nSWFUpload.prototype.uploadProgress = function (file, bytesComplete, bytesTotal) {\n\tfile = this.unescapeFilePostParams(file);\n\tthis.queueEvent(\"upload_progress_handler\", [file, bytesComplete, bytesTotal]);\n};\n\nSWFUpload.prototype.uploadError = function (file, errorCode, message) {\n\tfile = this.unescapeFilePostParams(file);\n\tthis.queueEvent(\"upload_error_handler\", [file, errorCode, message]);\n};\n\nSWFUpload.prototype.uploadSuccess = function (file, serverData, responseReceived) {\n\tfile = this.unescapeFilePostParams(file);\n\tthis.queueEvent(\"upload_success_handler\", [file, serverData, responseReceived]);\n};\n\nSWFUpload.prototype.uploadComplete = function (file) {\n\tfile = this.unescapeFilePostParams(file);\n\tthis.queueEvent(\"upload_complete_handler\", file);\n};\n\n/* Called by SWFUpload JavaScript and Flash functions when debug is enabled. By default it writes messages to the\n   internal debug console.  You can override this event and have messages written where you want. */\nSWFUpload.prototype.debug = function (message) {\n\tthis.queueEvent(\"debug_handler\", message);\n};\n\n\n/* **********************************\n\tDebug Console\n\tThe debug console is a self contained, in page location\n\tfor debug message to be sent.  The Debug Console adds\n\titself to the body if necessary.\n\n\tThe console is automatically scrolled as messages appear.\n\t\n\tIf you are using your own debug handler or when you deploy to production and\n\thave debug disabled you can remove these functions to reduce the file size\n\tand complexity.\n********************************** */\n   \n// Private: debugMessage is the default debug_handler.  If you want to print debug messages\n// call the debug() function.  When overriding the function your own function should\n// check to see if the debug setting is true before outputting debug information.\nSWFUpload.prototype.debugMessage = function (message) {\n\tif (this.settings.debug) {\n\t\tvar exceptionMessage, exceptionValues = [];\n\n\t\t// Check for an exception object and print it nicely\n\t\tif (typeof message === \"object\" && typeof message.name === \"string\" && typeof message.message === \"string\") {\n\t\t\tfor (var key in message) {\n\t\t\t\tif (message.hasOwnProperty(key)) {\n\t\t\t\t\texceptionValues.push(key + \": \" + message[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t\texceptionMessage = exceptionValues.join(\"\\n\") || \"\";\n\t\t\texceptionValues = exceptionMessage.split(\"\\n\");\n\t\t\texceptionMessage = \"EXCEPTION: \" + exceptionValues.join(\"\\nEXCEPTION: \");\n\t\t\tSWFUpload.Console.writeLine(exceptionMessage);\n\t\t} else {\n\t\t\tSWFUpload.Console.writeLine(message);\n\t\t}\n\t}\n};\n\nSWFUpload.Console = {};\nSWFUpload.Console.writeLine = function (message) {\n\tvar console, documentForm;\n\n\ttry {\n\t\tconsole = document.getElementById(\"SWFUpload_Console\");\n\n\t\tif (!console) {\n\t\t\tdocumentForm = document.createElement(\"form\");\n\t\t\tdocument.getElementsByTagName(\"body\")[0].appendChild(documentForm);\n\n\t\t\tconsole = document.createElement(\"textarea\");\n\t\t\tconsole.id = \"SWFUpload_Console\";\n\t\t\tconsole.style.fontFamily = \"monospace\";\n\t\t\tconsole.setAttribute(\"wrap\", \"off\");\n\t\t\tconsole.wrap = \"off\";\n\t\t\tconsole.style.overflow = \"auto\";\n\t\t\tconsole.style.width = \"700px\";\n\t\t\tconsole.style.height = \"350px\";\n\t\t\tconsole.style.margin = \"5px\";\n\t\t\tdocumentForm.appendChild(console);\n\t\t}\n\n\t\tconsole.value += message + \"\\n\";\n\n\t\tconsole.scrollTop = console.scrollHeight - console.clientHeight;\n\t} catch (ex) {\n\t\talert(\"Exception: \" + ex.name + \" Message: \" + ex.message);\n\t}\n};\n"
  },
  {
    "path": "xheditor/xheditor_plugins/showdown.js",
    "content": "//\n// showdown.js -- A javascript port of Markdown.\n//\n// Copyright (c) 2007 John Fraser.\n//\n// Original Markdown Copyright (c) 2004-2005 John Gruber\n//   <http://daringfireball.net/projects/markdown/>\n//\n// Redistributable under a BSD-style open source license.\n// See license.txt for more information.\n//\n// The full source distribution is at:\n//\n//\t\t\t\tA A L\n//\t\t\t\tT C A\n//\t\t\t\tT K B\n//\n//   <http://www.attacklab.net/>\n//\n//\n// Wherever possible, Showdown is a straight, line-by-line port\n// of the Perl version of Markdown.\n//\n// This is not a normal parser design; it's basically just a\n// series of string substitutions.  It's hard to read and\n// maintain this way,  but keeping Showdown close to the original\n// design makes it easier to port new features.\n//\n// More importantly, Showdown behaves like markdown.pl in most\n// edge cases.  So web applications can do client-side preview\n// in Javascript, and then build identical HTML on the server.\n//\n// This port needs the new RegExp functionality of ECMA 262,\n// 3rd Edition (i.e. Javascript 1.5).  Most modern web browsers\n// should do fine.  Even with the new regular expression features,\n// We do a lot of work to emulate Perl's regex functionality.\n// The tricky changes in this file mostly have the \"attacklab:\"\n// label.  Major or self-explanatory changes don't.\n//\n// Smart diff tools like Araxis Merge will be able to match up\n// this file with markdown.pl in a useful way.  A little tweaking\n// helps: in a copy of markdown.pl, replace \"#\" with \"//\" and\n// replace \"$text\" with \"text\".  Be sure to ignore whitespace\n// and line endings.\n//\n//\n// Showdown usage:\n//\n//   var text = \"Markdown *rocks*.\";\n//\n//   var converter = new Showdown.converter();\n//   var html = converter.makeHtml(text);\n//\n//   alert(html);\n//\n// Note: move the sample code to the bottom of this\n// file before uncommenting it.\n//\n//\n// Showdown namespace\n//\nvar Showdown={extensions:{}},forEach=Showdown.forEach=function(a,b){if(typeof a.forEach==\"function\")a.forEach(b);else{var c,d=a.length;for(c=0;c<d;c++)b(a[c],c,a)}},stdExtName=function(a){return a.replace(/[_-]||\\s/g,\"\").toLowerCase()};Showdown.converter=function(a){var b,c,d,e=0,f=[],g=[];if(typeof module!=\"undefind\"&&typeof exports!=\"undefined\"&&typeof require!=\"undefind\"){var h=require(\"fs\");if(h){var i=h.readdirSync((__dirname||\".\")+\"/extensions\").filter(function(a){return~a.indexOf(\".js\")}).map(function(a){return a.replace(/\\.js$/,\"\")});Showdown.forEach(i,function(a){var b=stdExtName(a);Showdown.extensions[b]=require(\"./extensions/\"+a)})}}this.makeHtml=function(a){return b={},c={},d=[],a=a.replace(/~/g,\"~T\"),a=a.replace(/\\$/g,\"~D\"),a=a.replace(/\\r\\n/g,\"\\n\"),a=a.replace(/\\r/g,\"\\n\"),a=\"\\n\\n\"+a+\"\\n\\n\",a=M(a),a=a.replace(/^[ \\t]+$/mg,\"\"),Showdown.forEach(f,function(b){a=k(b,a)}),a=z(a),a=m(a),a=l(a),a=o(a),a=K(a),a=a.replace(/~D/g,\"$$\"),a=a.replace(/~T/g,\"~\"),Showdown.forEach(g,function(b){a=k(b,a)}),a};if(a&&a.extensions){var j=this;Showdown.forEach(a.extensions,function(a){typeof a==\"string\"&&(a=Showdown.extensions[stdExtName(a)]);if(typeof a!=\"function\")throw\"Extension '\"+a+\"' could not be loaded.  It was either not found or is not a valid extension.\";Showdown.forEach(a(j),function(a){a.type?a.type===\"language\"||a.type===\"lang\"?f.push(a):(a.type===\"output\"||a.type===\"html\")&&g.push(a):g.push(a)})})}var k=function(a,b){if(a.regex){var c=new RegExp(a.regex,\"g\");return b.replace(c,a.replace)}if(a.filter)return a.filter(b)},l=function(a){return a+=\"~0\",a=a.replace(/^[ ]{0,3}\\[(.+)\\]:[ \\t]*\\n?[ \\t]*<?(\\S+?)>?[ \\t]*\\n?[ \\t]*(?:(\\n*)[\"(](.+?)[\")][ \\t]*)?(?:\\n+|(?=~0))/gm,function(a,d,e,f,g){return d=d.toLowerCase(),b[d]=G(e),f?f+g:(g&&(c[d]=g.replace(/\"/g,\"&quot;\")),\"\")}),a=a.replace(/~0/,\"\"),a},m=function(a){a=a.replace(/\\n/g,\"\\n\\n\");var b=\"p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del|style|section|header|footer|nav|article|aside\",c=\"p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|style|section|header|footer|nav|article|aside\";return a=a.replace(/^(<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del)\\b[^\\r]*?\\n<\\/\\2>[ \\t]*(?=\\n+))/gm,n),a=a.replace(/^(<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|style|section|header|footer|nav|article|aside)\\b[^\\r]*?<\\/\\2>[ \\t]*(?=\\n+)\\n)/gm,n),a=a.replace(/(\\n[ ]{0,3}(<(hr)\\b([^<>])*?\\/?>)[ \\t]*(?=\\n{2,}))/g,n),a=a.replace(/(\\n\\n[ ]{0,3}<!(--[^\\r]*?--\\s*)+>[ \\t]*(?=\\n{2,}))/g,n),a=a.replace(/(?:\\n\\n)([ ]{0,3}(?:<([?%])[^\\r]*?\\2>)[ \\t]*(?=\\n{2,}))/g,n),a=a.replace(/\\n\\n/g,\"\\n\"),a},n=function(a,b){var c=b;return c=c.replace(/\\n\\n/g,\"\\n\"),c=c.replace(/^\\n/,\"\"),c=c.replace(/\\n+$/g,\"\"),c=\"\\n\\n~K\"+(d.push(c)-1)+\"K\\n\\n\",c},o=function(a){a=v(a);var b=A(\"<hr />\");return a=a.replace(/^[ ]{0,2}([ ]?\\*[ ]?){3,}[ \\t]*$/gm,b),a=a.replace(/^[ ]{0,2}([ ]?\\-[ ]?){3,}[ \\t]*$/gm,b),a=a.replace(/^[ ]{0,2}([ ]?\\_[ ]?){3,}[ \\t]*$/gm,b),a=x(a),a=y(a),a=E(a),a=m(a),a=F(a),a},p=function(a){return a=B(a),a=q(a),a=H(a),a=t(a),a=r(a),a=I(a),a=G(a),a=D(a),a=a.replace(/  +\\n/g,\" <br />\\n\"),a},q=function(a){var b=/(<[a-z\\/!$](\"[^\"]*\"|'[^']*'|[^'\">])*>|<!(--.*?--\\s*)+>)/gi;return a=a.replace(b,function(a){var b=a.replace(/(.)<\\/?code>(?=.)/g,\"$1`\");return b=N(b,\"\\\\`*_\"),b}),a},r=function(a){return a=a.replace(/(\\[((?:\\[[^\\]]*\\]|[^\\[\\]])*)\\][ ]?(?:\\n[ ]*)?\\[(.*?)\\])()()()()/g,s),a=a.replace(/(\\[((?:\\[[^\\]]*\\]|[^\\[\\]])*)\\]\\([ \\t]*()<?(.*?(?:\\(.*?\\).*?)?)>?[ \\t]*((['\"])(.*?)\\6[ \\t]*)?\\))/g,s),a=a.replace(/(\\[([^\\[\\]]+)\\])()()()()()/g,s),a},s=function(a,d,e,f,g,h,i,j){j==undefined&&(j=\"\");var k=d,l=e,m=f.toLowerCase(),n=g,o=j;if(n==\"\"){m==\"\"&&(m=l.toLowerCase().replace(/ ?\\n/g,\" \")),n=\"#\"+m;if(b[m]!=undefined)n=b[m],c[m]!=undefined&&(o=c[m]);else{if(!(k.search(/\\(\\s*\\)$/m)>-1))return k;n=\"\"}}n=N(n,\"*_\");var p='<a href=\"'+n+'\"';return o!=\"\"&&(o=o.replace(/\"/g,\"&quot;\"),o=N(o,\"*_\"),p+=' title=\"'+o+'\"'),p+=\">\"+l+\"</a>\",p},t=function(a){return a=a.replace(/(!\\[(.*?)\\][ ]?(?:\\n[ ]*)?\\[(.*?)\\])()()()()/g,u),a=a.replace(/(!\\[(.*?)\\]\\s?\\([ \\t]*()<?(\\S+?)>?[ \\t]*((['\"])(.*?)\\6[ \\t]*)?\\))/g,u),a},u=function(a,d,e,f,g,h,i,j){var k=d,l=e,m=f.toLowerCase(),n=g,o=j;o||(o=\"\");if(n==\"\"){m==\"\"&&(m=l.toLowerCase().replace(/ ?\\n/g,\" \")),n=\"#\"+m;if(b[m]==undefined)return k;n=b[m],c[m]!=undefined&&(o=c[m])}l=l.replace(/\"/g,\"&quot;\"),n=N(n,\"*_\");var p='<img src=\"'+n+'\" alt=\"'+l+'\"';return o=o.replace(/\"/g,\"&quot;\"),o=N(o,\"*_\"),p+=' title=\"'+o+'\"',p+=\" />\",p},v=function(a){function b(a){return a.replace(/[^\\w]/g,\"\").toLowerCase()}return a=a.replace(/^(.+)[ \\t]*\\n=+[ \\t]*\\n+/gm,function(a,c){return A('<h1 id=\"'+b(c)+'\">'+p(c)+\"</h1>\")}),a=a.replace(/^(.+)[ \\t]*\\n-+[ \\t]*\\n+/gm,function(a,c){return A('<h2 id=\"'+b(c)+'\">'+p(c)+\"</h2>\")}),a=a.replace(/^(\\#{1,6})[ \\t]*(.+?)[ \\t]*\\#*\\n+/gm,function(a,c,d){var e=c.length;return A(\"<h\"+e+' id=\"'+b(d)+'\">'+p(d)+\"</h\"+e+\">\")}),a},w,x=function(a){a+=\"~0\";var b=/^(([ ]{0,3}([*+-]|\\d+[.])[ \\t]+)[^\\r]+?(~0|\\n{2,}(?=\\S)(?![ \\t]*(?:[*+-]|\\d+[.])[ \\t]+)))/gm;return e?a=a.replace(b,function(a,b,c){var d=b,e=c.search(/[*+-]/g)>-1?\"ul\":\"ol\";d=d.replace(/\\n{2,}/g,\"\\n\\n\\n\");var f=w(d);return f=f.replace(/\\s+$/,\"\"),f=\"<\"+e+\">\"+f+\"</\"+e+\">\\n\",f}):(b=/(\\n\\n|^\\n?)(([ ]{0,3}([*+-]|\\d+[.])[ \\t]+)[^\\r]+?(~0|\\n{2,}(?=\\S)(?![ \\t]*(?:[*+-]|\\d+[.])[ \\t]+)))/g,a=a.replace(b,function(a,b,c,d){var e=b,f=c,g=d.search(/[*+-]/g)>-1?\"ul\":\"ol\",f=f.replace(/\\n{2,}/g,\"\\n\\n\\n\"),h=w(f);return h=e+\"<\"+g+\">\\n\"+h+\"</\"+g+\">\\n\",h})),a=a.replace(/~0/,\"\"),a};w=function(a){return e++,a=a.replace(/\\n{2,}$/,\"\\n\"),a+=\"~0\",a=a.replace(/(\\n)?(^[ \\t]*)([*+-]|\\d+[.])[ \\t]+([^\\r]+?(\\n{1,2}))(?=\\n*(~0|\\2([*+-]|\\d+[.])[ \\t]+))/gm,function(a,b,c,d,e){var f=e,g=b,h=c;return g||f.search(/\\n{2,}/)>-1?f=o(L(f)):(f=x(L(f)),f=f.replace(/\\n$/,\"\"),f=p(f)),\"<li>\"+f+\"</li>\\n\"}),a=a.replace(/~0/g,\"\"),e--,a};var y=function(a){return a+=\"~0\",a=a.replace(/(?:\\n\\n|^)((?:(?:[ ]{4}|\\t).*\\n+)+)(\\n*[ ]{0,3}[^ \\t\\n]|(?=~0))/g,function(a,b,c){var d=b,e=c;return d=C(L(d)),d=M(d),d=d.replace(/^\\n+/g,\"\"),d=d.replace(/\\n+$/g,\"\"),d=\"<pre>\"+d+\"\\n</pre>\",A(d)+e}),a=a.replace(/~0/,\"\"),a},z=function(a){return a+=\"~0\",a=a.replace(/(?:^|\\n)```(.*)\\n([\\s\\S]*?)\\n```/g,function(a,b,c){var d=b,e=c;return e=C(e),e=M(e),e=e.replace(/^\\n+/g,\"\"),e=e.replace(/\\n+$/g,\"\"),e=\"<pre>\"+e+\"\\n</pre>\",A(e)}),a=a.replace(/~0/,\"\"),a},A=function(a){return a=a.replace(/(^\\n+|\\n+$)/g,\"\"),\"\\n\\n~K\"+(d.push(a)-1)+\"K\\n\\n\"},B=function(a){return a=a.replace(/(^|[^\\\\])(`+)([^\\r]*?[^`])\\2(?!`)/gm,function(a,b,c,d,e){var f=d;return f=f.replace(/^([ \\t]*)/g,\"\"),f=f.replace(/[ \\t]*$/g,\"\"),f=C(f),b+\"<code>\"+f+\"</code>\"}),a},C=function(a){return a=a.replace(/&/g,\"&amp;\"),a=a.replace(/</g,\"&lt;\"),a=a.replace(/>/g,\"&gt;\"),a=N(a,\"*_{}[]\\\\\",!1),a},D=function(a){return a=a.replace(/(\\*\\*|__)(?=\\S)([^\\r]*?\\S[*_]*)\\1/g,\"<strong>$2</strong>\"),a=a.replace(/(\\*|_)(?=\\S)([^\\r]*?\\S)\\1/g,\"<em>$2</em>\"),a},E=function(a){return a=a.replace(/((^[ \\t]*>[ \\t]?.+\\n(.+\\n)*\\n*)+)/gm,function(a,b){var c=b;return c=c.replace(/^[ \\t]*>[ \\t]?/gm,\"~0\"),c=c.replace(/~0/g,\"\"),c=c.replace(/^[ \\t]+$/gm,\"\"),c=o(c),c=c.replace(/(^|\\n)/g,\"$1  \"),c=c.replace(/(\\s*<pre>[^\\r]+?<\\/pre>)/gm,function(a,b){var c=b;return c=c.replace(/^  /mg,\"~0\"),c=c.replace(/~0/g,\"\"),c}),A(\"<blockquote>\\n\"+c+\"\\n</blockquote>\")}),a},F=function(a){a=a.replace(/^\\n+/g,\"\"),a=a.replace(/\\n+$/g,\"\");var b=a.split(/\\n{2,}/g),c=[],e=b.length;for(var f=0;f<e;f++){var g=b[f];g.search(/~K(\\d+)K/g)>=0?c.push(g):g.search(/\\S/)>=0&&(g=p(g),g=g.replace(/^([ \\t]*)/g,\"<p>\"),g+=\"</p>\",c.push(g))}e=c.length;for(var f=0;f<e;f++)while(c[f].search(/~K(\\d+)K/)>=0){var h=d[RegExp.$1];h=h.replace(/\\$/g,\"$$$$\"),c[f]=c[f].replace(/~K\\d+K/,h)}return c.join(\"\\n\\n\")},G=function(a){return a=a.replace(/&(?!#?[xX]?(?:[0-9a-fA-F]+|\\w+);)/g,\"&amp;\"),a=a.replace(/<(?![a-z\\/?\\$!])/gi,\"&lt;\"),a},H=function(a){return a=a.replace(/\\\\(\\\\)/g,O),a=a.replace(/\\\\([`*_{}\\[\\]()>#+-.!])/g,O),a},I=function(a){return a=a.replace(/<((https?|ftp|dict):[^'\">\\s]+)>/gi,'<a href=\"$1\">$1</a>'),a=a.replace(/<(?:mailto:)?([-.\\w]+\\@[-a-z0-9]+(\\.[-a-z0-9]+)*\\.[a-z]+)>/gi,function(a,b){return J(K(b))}),a},J=function(a){var b=[function(a){return\"&#\"+a.charCodeAt(0)+\";\"},function(a){return\"&#x\"+a.charCodeAt(0).toString(16)+\";\"},function(a){return a}];return a=\"mailto:\"+a,a=a.replace(/./g,function(a){if(a==\"@\")a=b[Math.floor(Math.random()*2)](a);else if(a!=\":\"){var c=Math.random();a=c>.9?b[2](a):c>.45?b[1](a):b[0](a)}return a}),a='<a href=\"'+a+'\">'+a+\"</a>\",a=a.replace(/\">.+:/g,'\">'),a},K=function(a){return a=a.replace(/~E(\\d+)E/g,function(a,b){var c=parseInt(b);return String.fromCharCode(c)}),a},L=function(a){return a=a.replace(/^(\\t|[ ]{1,4})/gm,\"~0\"),a=a.replace(/~0/g,\"\"),a},M=function(a){return a=a.replace(/\\t(?=\\t)/g,\"    \"),a=a.replace(/\\t/g,\"~A~B\"),a=a.replace(/~B(.+?)~A/g,function(a,b,c){var d=b,e=4-d.length%4;for(var f=0;f<e;f++)d+=\" \";return d}),a=a.replace(/~A/g,\"    \"),a=a.replace(/~B/g,\"\"),a},N=function(a,b,c){var d=\"([\"+b.replace(/([\\[\\]\\\\])/g,\"\\\\$1\")+\"])\";c&&(d=\"\\\\\\\\\"+d);var e=new RegExp(d,\"g\");return a=a.replace(e,O),a},O=function(a,b){var c=b.charCodeAt(0);return\"~E\"+c+\"E\"}},typeof module!=\"undefined\"&&(module.exports=Showdown),typeof define==\"function\"&&define.amd&&define(\"showdown\",function(){return Showdown});"
  },
  {
    "path": "xheditor/xheditor_plugins/ubb.js",
    "content": "/*!\n * WYSIWYG UBB Editor support for xhEditor\n * @requires xhEditor\n * \n * @author Yanis.Wang<yanis.wang@gmail.com>\n * @site http://xheditor.com/\n * @licence LGPL(http://www.opensource.org/licenses/lgpl-license.php)\n * \n * @Version: 0.9.12 (build 120228)\n */\nfunction ubb2html(sUBB)\n{\n\tvar i,sHtml=String(sUBB),arrcode=new Array(),cnum=0;\n\tvar arrFontsize=['10px','13px','16px','18px','24px','32px','48px'];\n\n\tsHtml=sHtml.replace(/[<>&\"]/g,function(c){return {'<':'&lt;','>':'&gt;','&':'&amp;','\"':'&quot;'}[c];});\n\tsHtml=sHtml.replace(/\\r?\\n/g,\"<br />\");\n\t\n\tsHtml=sHtml.replace(/\\[code\\s*(?:=\\s*([^\\]]+?))?\\]([\\s\\S]*?)\\[\\/code\\]/ig,function(all,t,c){//code特殊处理\n\t\tcnum++;arrcode[cnum]=all;\n\t\treturn \"[\\tubbcodeplace_\"+cnum+\"\\t]\";\n\t});\n\n\tsHtml=sHtml.replace(/\\[(\\/?)(b|u|i|s|sup|sub)\\]/ig,'<$1$2>');\n\tsHtml=sHtml.replace(/\\[color\\s*=\\s*([^\\]\"]+?)(?:\"[^\\]]*?)?\\s*\\]/ig,'<font color=\"$1\">');\n\tsHtml=sHtml.replace(/\\[font\\s*=\\s*([^\\]\"]+?)(?:\"[^\\]]*?)?\\s*\\]/ig,'<font face=\"$1\">');\n\tsHtml=sHtml.replace(/\\[\\/(color|font)\\]/ig,'</font>');\n\tsHtml=sHtml.replace(/\\[size\\s*=\\s*([^\\]\"]+?)(?:\"[^\\]]*?)?\\s*\\]/ig,function(all,size){\n\t\tif(size.match(/^\\d+$/))size=arrFontsize[size-1];\n\t\treturn '<span style=\"font-size:'+size+';\">';\n\t});\n\tsHtml=sHtml.replace(/\\[back\\s*=\\s*([^\\]\"]+?)(?:\"[^\\]]*?)?\\s*\\]/ig,'<span style=\"background-color:$1;\">');\n\tsHtml=sHtml.replace(/\\[\\/(size|back)\\]/ig,'</span>');\n\tfor(i=0;i<3;i++)sHtml=sHtml.replace(/\\[align\\s*=\\s*([^\\]\"]+?)(?:\"[^\\]]*?)?\\s*\\](((?!\\[align(?:\\s+[^\\]]+)?\\])[\\s\\S])*?)\\[\\/align\\]/ig,'<p align=\"$1\">$2</p>');\n\tsHtml=sHtml.replace(/\\[img\\]\\s*(((?!\")[\\s\\S])+?)(?:\"[\\s\\S]*?)?\\s*\\[\\/img\\]/ig,'<img src=\"$1\" alt=\"\" />');\n\tsHtml=sHtml.replace(/\\[img\\s*=([^,\\]]*)(?:\\s*,\\s*(\\d*%?)\\s*,\\s*(\\d*%?)\\s*)?(?:,?\\s*(\\w+))?\\s*\\]\\s*(((?!\")[\\s\\S])+?)(?:\"[\\s\\S]*)?\\s*\\[\\/img\\]/ig,function(all,alt,p1,p2,p3,src){\n\t\tvar str='<img src=\"'+src+'\" alt=\"'+alt+'\"',a=p3?p3:(!isNum(p1)?p1:'');\n\t\tif(isNum(p1))str+=' width=\"'+p1+'\"';\n\t\tif(isNum(p2))str+=' height=\"'+p2+'\"'\n\t\tif(a)str+=' align=\"'+a+'\"';\n\t\tstr+=' />';\n\t\treturn str;\n\t});\n\tsHtml=sHtml.replace(/\\[emot\\s*=\\s*([^\\]\"]+?)(?:\"[^\\]]*?)?\\s*\\/\\]/ig,'<img emot=\"$1\" />');\n\tsHtml=sHtml.replace(/\\[url\\]\\s*(((?!\")[\\s\\S])*?)(?:\"[\\s\\S]*?)?\\s*\\[\\/url\\]/ig,'<a href=\"$1\">$1</a>');\n\tsHtml=sHtml.replace(/\\[url\\s*=\\s*([^\\]\"]+?)(?:\"[^\\]]*?)?\\s*\\]\\s*([\\s\\S]*?)\\s*\\[\\/url\\]/ig,'<a href=\"$1\">$2</a>');\n\tsHtml=sHtml.replace(/\\[email\\]\\s*(((?!\")[\\s\\S])+?)(?:\"[\\s\\S]*?)?\\s*\\[\\/email\\]/ig,'<a href=\"mailto:$1\">$1</a>');\n\tsHtml=sHtml.replace(/\\[email\\s*=\\s*([^\\]\"]+?)(?:\"[^\\]]*?)?\\s*\\]\\s*([\\s\\S]+?)\\s*\\[\\/email\\]/ig,'<a href=\"mailto:$1\">$2</a>');\n\tsHtml=sHtml.replace(/\\[quote\\]/ig,'<blockquote>');\n\tsHtml=sHtml.replace(/\\[\\/quote\\]/ig,'</blockquote>');\n\tsHtml=sHtml.replace(/\\[flash\\s*(?:=\\s*(\\d+)\\s*,\\s*(\\d+)\\s*)?\\]\\s*(((?!\")[\\s\\S])+?)(?:\"[\\s\\S]*?)?\\s*\\[\\/flash\\]/ig,function(all,w,h,url){\n\t\tif(!w)w=480;if(!h)h=400;\n\t\treturn '<embed type=\"application/x-shockwave-flash\" src=\"'+url+'\" wmode=\"opaque\" quality=\"high\" bgcolor=\"#ffffff\" menu=\"false\" play=\"true\" loop=\"true\" width=\"'+w+'\" height=\"'+h+'\"/>';\n\t});\n\tsHtml=sHtml.replace(/\\[media\\s*(?:=\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d+)\\s*)?)?\\]\\s*(((?!\")[\\s\\S])+?)(?:\"[\\s\\S]*?)?\\s*\\[\\/media\\]/ig,function(all,w,h,play,url){\n\t\tif(!w)w=480;if(!h)h=400;\n\t\treturn '<embed type=\"application/x-mplayer2\" src=\"'+url+'\" enablecontextmenu=\"false\" autostart=\"'+(play=='1'?'true':'false')+'\" width=\"'+w+'\" height=\"'+h+'\"/>';\n\t});\n\tsHtml=sHtml.replace(/\\[table\\s*(?:=\\s*(\\d{1,4}%?)\\s*(?:,\\s*([^\\]\"]+)(?:\"[^\\]]*?)?)?)?\\s*\\]/ig,function(all,w,b){\n\t\tvar str='<table';\n\t\tif(w)str+=' width=\"'+w+'\"';\n\t\tif(b)str+=' bgcolor=\"'+b+'\"';\n\t\treturn str+'>';\n\t});\n\tsHtml=sHtml.replace(/\\[tr\\s*(?:=\\s*([^\\]\"]+?)(?:\"[^\\]]*?)?)?\\s*\\]/ig,function(all,bg){\n\t\treturn '<tr'+(bg?' bgcolor=\"'+bg+'\"':'')+'>';\n\t});\n\tsHtml=sHtml.replace(/\\[td\\s*(?:=\\s*(\\d{1,2})\\s*,\\s*(\\d{1,2})\\s*(?:,\\s*(\\d{1,4}%?))?)?\\s*\\]/ig,function(all,col,row,w){\n\t\treturn '<td'+(col>1?' colspan=\"'+col+'\"':'')+(row>1?' rowspan=\"'+row+'\"':'')+(w?' width=\"'+w+'\"':'')+'>';\n\t});\n\tsHtml=sHtml.replace(/\\[\\/(table|tr|td)\\]/ig,'</$1>');\n\t\n\tsHtml=sHtml.replace(/\\[\\*\\]((?:(?!\\[\\*\\]|\\[\\/list\\]|\\[list\\s*(?:=[^\\]]+)?\\])[\\s\\S])+)/ig,'<li>$1</li>');\n\tsHtml=sHtml.replace(/\\[list\\s*(?:=\\s*([^\\]\"]+?)(?:\"[^\\]]*?)?)?\\s*\\]/ig,function(all,type){\n\t\tvar str='<ul';\n\t\tif(type)str+=' type=\"'+type+'\"';\n\t\treturn str+'>';\n\t});\n\tsHtml=sHtml.replace(/\\[\\/list\\]/ig,'</ul>');\n\tsHtml=sHtml.replace(/\\[hr\\/\\]/ig,'<hr />');\n\t\n\tfor(i=1;i<=cnum;i++)sHtml=sHtml.replace(\"[\\tubbcodeplace_\"+i+\"\\t]\", arrcode[i]);\n\n\tsHtml=sHtml.replace(/(^|<\\/?\\w+(?:\\s+[^>]*?)?>)([^<$]+)/ig, function(all,tag,text){\n\t\treturn tag+text.replace(/[\\t ]/g,function(c){return {'\\t':'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;',' ':'&nbsp;'}[c];});\n\t});\n\tfunction isNum(s){if(s!=null&&s!='')return !isNaN(s);else return false;}\n\t\n\treturn sHtml;\n}\n\nfunction html2ubb(sHtml)\n{\n\n\tvar regSrc=/\\s+src\\s*=\\s*([\"']?)\\s*(.+?)\\s*\\1(\\s|$)/i,regWidth=/\\s+width\\s*=\\s*([\"']?)\\s*(\\d+(?:\\.\\d+)?%?)\\s*\\1(\\s|$)/i,regHeight=/\\s+height\\s*=\\s*([\"']?)\\s*(\\d+(?:\\.\\d+)?%?)\\s*\\1(\\s|$)/i,regBg=/(?:background|background-color|bgcolor)\\s*[:=]\\s*([\"']?)\\s*((rgb\\s*\\(\\s*\\d{1,3}%?,\\s*\\d{1,3}%?\\s*,\\s*\\d{1,3}%?\\s*\\))|(#[0-9a-f]{3,6})|([a-z]{1,20}))\\s*\\1/i\n\tvar i,sUBB=String(sHtml),arrcode=new Array(),cnum=0;\n\n\tsUBB=sUBB.replace(/[ \\t]*\\r?\\n[ \\t]*/g,'');\n\t\n\tsUBB = sUBB.replace(/<(script|style)(\\s+[^>]*?)?>[\\s\\S]*?<\\/\\1>/ig, '');\n\tsUBB = sUBB.replace(/<!--[\\s\\S]*?-->/ig,'');\n\n\tsUBB=sUBB.replace(/<br(\\s+[^>]*)?\\/?>/ig,\"\\r\\n\");\n\t\n\tsUBB=sUBB.replace(/\\[code\\s*(=\\s*([^\\]]+?))?\\]([\\s\\S]*?)\\[\\/code\\]/ig,function(all,t,c){//code特殊处理\n\t\tcnum++;arrcode[cnum]=all;\n\t\treturn \"[\\tubbcodeplace_\"+cnum+\"\\t]\";\n\t});\n\t\n\tsUBB=sUBB.replace(/<(\\/?)(b|u|i|s)(\\s+[^>]*?)?>/ig,'[$1$2]');\n\tsUBB=sUBB.replace(/<(\\/?)strong(\\s+[^>]*?)?>/ig,'[$1b]');\n\tsUBB=sUBB.replace(/<(\\/?)em(\\s+[^>]*?)?>/ig,'[$1i]');\n\tsUBB=sUBB.replace(/<(\\/?)(strike|del)(\\s+[^>]*?)?>/ig,'[$1s]');\n\tsUBB=sUBB.replace(/<(\\/?)(sup|sub)(\\s+[^>]*?)?>/ig,'[$1$2]');\n\n\t//font转ubb\n\tfunction font2ubb(all,tag,attrs,content)\n\t{\n\t\tif(!attrs)return content;\n\t\tvar arrStart=[],arrEnd=[];\n\t\tvar match;\n\t\tmatch=attrs.match(/ face\\s*=\\s*\"\\s*([^\"]+)\\s*\"/i);\n\t\tif(match){\n\t\t\tarrStart.push('[font='+match[1]+']');\n\t\t\tarrEnd.push('[/font]');\n\t\t}\n\t\tmatch=attrs.match(/ size\\s*=\\s*\"\\s*(\\d+)\\s*\"/i);\n\t\tif(match){\n\t\t\tarrStart.push('[size='+match[1]+']');\n\t\t\tarrEnd.push('[/size]');\n\t\t}\n\t\tmatch=attrs.match(/ color\\s*=\\s*\"\\s*([^\"]+)\\s*\"/i);\n\t\tif(match){\n\t\t\tarrStart.push('[color='+formatColor(match[1])+']');\n\t\t\tarrEnd.push('[/color]');\n\t\t}\n\t\treturn arrStart.join('')+content+arrEnd.join('');\n\t}\n\tsUBB = sUBB.replace(/<(font)(\\s+[^>]*?)?>(((?!<\\1(\\s+[^>]*?)?>)[\\s\\S]|<\\1(\\s+[^>]*?)?>((?!<\\1(\\s+[^>]*?)?>)[\\s\\S]|<\\1(\\s+[^>]*?)?>((?!<\\1(\\s+[^>]*?)?>)[\\s\\S])*?<\\/\\1>)*?<\\/\\1>)*?)<\\/\\1>/ig,font2ubb);//第3层\n\tsUBB = sUBB.replace(/<(font)(\\s+[^>]*?)?>(((?!<\\1(\\s+[^>]*?)?>)[\\s\\S]|<\\1(\\s+[^>]*?)?>((?!<\\1(\\s+[^>]*?)?>)[\\s\\S])*?<\\/\\1>)*?)<\\/\\1>/ig,font2ubb);//第2层\n\tsUBB = sUBB.replace(/<(font)(\\s+[^>]*?)?>(((?!<\\1(\\s+[^>]*?)?>)[\\s\\S])*?)<\\/\\1>/ig,font2ubb);//最里层\n\n\tfor(i=0;i<3;i++)sUBB=sUBB.replace(/<(span)(?:\\s+[^>]*?)?\\s+style\\s*=\\s*\"((?:[^\"]*?;)*\\s*(?:font-family|font-size|color|background|background-color)\\s*:[^\"]*)\"(?: [^>]+)?>(((?!<\\1(\\s+[^>]*?)?>)[\\s\\S]|<\\1(\\s+[^>]*?)?>((?!<\\1(\\s+[^>]*?)?>)[\\s\\S]|<\\1(\\s+[^>]*?)?>((?!<\\1(\\s+[^>]*?)?>)[\\s\\S])*?<\\/\\1>)*?<\\/\\1>)*?)<\\/\\1>/ig,function(all,tag,style,content){\n\t\tvar face=style.match(/(?:^|;)\\s*font-family\\s*:\\s*([^;]+)/i),size=style.match(/(?:^|;)\\s*font-size\\s*:\\s*([^;]+)/i),color=style.match(/(?:^|;)\\s*color\\s*:\\s*([^;]+)/i),back=style.match(/(?:^|;)\\s*(?:background|background-color)\\s*:\\s*([^;]+)/i),str=content;\n\t\tvar arrStart=[],arrEnd=[];\n\t\tif(face){\n\t\t\tarrStart.push('[font='+face[1]+']');\n\t\t\tarrEnd.push('[/font]');\n\t\t}\n\t\tif(size){\n\t\t\tarrStart.push('[size='+size[1]+']');\n\t\t\tarrEnd.push('[/size]');\n\t\t}\n\t\tif(color){\n\t\t\tarrStart.push('[color='+formatColor(color[1])+']');\n\t\t\tarrEnd.push('[/color]');\n\t\t}\n\t\tif(back){\n\t\t\tarrStart.push('[back='+formatColor(back[1])+']');\n\t\t\tarrEnd.push('[/back]');\n\t\t}\n\t\treturn arrStart.join('')+str+arrEnd.join('');\n\t});\n\tfunction formatColor(c)\n\t{\n\t\tvar matchs;\n\t\tif(matchs=c.match(/\\s*rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)/i)){c=(matchs[1]*65536+matchs[2]*256+matchs[3]*1).toString(16);while(c.length<6)c='0'+c;c='#'+c;}\n\t\tc=c.replace(/^#([0-9a-f])([0-9a-f])([0-9a-f])$/i,'#$1$1$2$2$3$3');\n\t\treturn c;\n\t}\n\tfor(i=0;i<3;i++)sUBB=sUBB.replace(/<(div|p)(?:\\s+[^>]*?)?[\\s\"';]\\s*(?:text-)?align\\s*[=:]\\s*([\"']?)\\s*(left|center|right)\\s*\\2[^>]*>(((?!<\\1(\\s+[^>]*?)?>)[\\s\\S])+?)<\\/\\1>/ig,'[align=$3]$4[/align]');\n\tfor(i=0;i<3;i++)sUBB=sUBB.replace(/<(center)(?:\\s+[^>]*?)?>(((?!<\\1(\\s+[^>]*?)?>)[\\s\\S])*?)<\\/\\1>/ig,'[align=center]$2[/align]');\n\tfor(i=0;i<3;i++)sUBB=sUBB.replace(/<(p|div)(?:\\s+[^>]*?)?\\s+style\\s*=\\s*\"(?:[^;\"]*;)*\\s*text-align\\s*:([^;\"]*)[^\"]*\"(?: [^>]+)?>(((?!<\\1(\\s+[^>]*?)?>)[\\s\\S]|<\\1(\\s+[^>]*?)?>((?!<\\1(\\s+[^>]*?)?>)[\\s\\S]|<\\1(\\s+[^>]*?)?>((?!<\\1(\\s+[^>]*?)?>)[\\s\\S])*?<\\/\\1>)*?<\\/\\1>)*?)<\\/\\1>/ig,function(all,tag,align,content){\n\t\treturn '[align='+align+']'+content+'[/align]';\n\t});\n\tsUBB=sUBB.replace(/<a(?:\\s+[^>]*?)?\\s+href=([\"'])\\s*(.+?)\\s*\\1[^>]*>\\s*([\\s\\S]*?)\\s*<\\/a>/ig,function(all,q,url,text){\n\t\tif(!(url&&text))return '';\n\t\tvar tag='url',str;\n\t\tif(url.match(/^mailto:/i))\n\t\t{\n\t\t\ttag='email';\n\t\t\turl=url.replace(/mailto:(.+?)/i,'$1');\n\t\t}\n\t\tstr='['+tag;\n\t\tif(url!=text)str+='='+url;\n\t\treturn str+']'+text+'[/'+tag+']';\n\t});\n\tsUBB=sUBB.replace(/<img(\\s+[^>]*?)\\/?>/ig,function(all,attr){\n\t\tvar emot=attr.match(/\\s+emot\\s*=\\s*([\"']?)\\s*(.+?)\\s*\\1(\\s|$)/i);\n\t\tif(emot)return '[emot='+emot[2]+'/]';\n\t\tvar url=attr.match(regSrc),alt=attr.match(/\\s+alt\\s*=\\s*([\"']?)\\s*(.*?)\\s*\\1(\\s|$)/i),w=attr.match(regWidth),h=attr.match(regHeight),align=attr.match(/\\s+align\\s*=\\s*([\"']?)\\s*(\\w+)\\s*\\1(\\s|$)/i),str='[img',p='';\n\t\tif(!url)return '';\n\t\tp+=alt[2];\n\t\tif(w||h)p+=','+(w?w[2]:'')+','+(h?h[2]:'');\n\t\tif(align)p+=','+align[2];\n\t\tif(p)str+='='+p;\n\t\tstr+=']'+url[2]+'[/img]';\n\t\treturn str;\n\t});\n\tsUBB=sUBB.replace(/<blockquote(?:\\s+[^>]*?)?>/ig,'[quote]');\n\tsUBB=sUBB.replace(/<\\/blockquote>/ig,'[/quote]');\n\tsUBB=sUBB.replace(/<embed((?:\\s+[^>]*?)?(?:\\s+type\\s*=\\s*\"\\s*application\\/x-shockwave-flash\\s*\"|\\s+classid\\s*=\\s*\"\\s*clsid:d27cdb6e-ae6d-11cf-96b8-4445535400000\\s*\")[^>]*?)\\/?>/ig,function(all,attr){\n\t\tvar url=attr.match(regSrc),w=attr.match(regWidth),h=attr.match(regHeight),str='[flash';\n\t\tif(!url)return '';\n\t\tif(w&&h)str+='='+w[2]+','+h[2];\n\t\tstr+=']'+url[2];\n\t\treturn str+'[/flash]';\n\t});\n\tsUBB=sUBB.replace(/<embed((?:\\s+[^>]*?)?(?:\\s+type\\s*=\\s*\"\\s*application\\/x-mplayer2\\s*\"|\\s+classid\\s*=\\s*\"\\s*clsid:6bf52a52-394a-11d3-b153-00c04f79faa6\\s*\")[^>]*?)\\/?>/ig,function(all,attr){\n\t\tvar url=attr.match(regSrc),w=attr.match(regWidth),h=attr.match(regHeight),p=attr.match(/\\s+autostart\\s*=\\s*([\"']?)\\s*(.+?)\\s*\\1(\\s|$)/i),str='[media',auto='0';\n\t\tif(!url)return '';\n\t\tif(p)if(p[2]=='true')auto='1';\n\t\tif(w&&h)str+='='+w[2]+','+h[2]+','+auto;\n\t\tstr+=']'+url[2];\n\t\treturn str+'[/media]';\n\t});\n\tsUBB=sUBB.replace(/<table(\\s+[^>]*?)?>/ig,function(all,attr){\n\t\tvar str='[table';\n\t\tif(attr)\n\t\t{\n\t\t\tvar w=attr.match(regWidth),b=attr.match(regBg);\n\t\t\tif(w)\n\t\t\t{\n\t\t\t\tstr+='='+w[2];\n\t\t\t\tif(b)str+=','+b[2];\n\t\t\t}\n\t\t}\n\t\treturn str+']';\n\t});\n\tsUBB=sUBB.replace(/<tr(\\s+[^>]*?)?>/ig,function(all,attr){\n\t\tvar str='[tr';\n\t\tif(attr)\n\t\t{\n\t\t\tvar bg=attr.match(regBg)\n\t\t\tif(bg)str+='='+bg[2];\n\t\t}\n\t\treturn str+']';\n\t});\n\tsUBB=sUBB.replace(/<(?:th|td)(\\s+[^>]*?)?>/ig,function(all,attr){\n\t\tvar str='[td';\n\t\tif(attr)\n\t\t{\n\t\t\tvar col=attr.match(/\\s+colspan\\s*=\\s*([\"']?)\\s*(\\d+)\\s*\\1(\\s|$)/i),row=attr.match(/\\s+rowspan\\s*=\\s*([\"']?)\\s*(\\d+)\\s*\\1(\\s|$)/i),w=attr.match(regWidth);\n\t\t\tcol=col?col[2]:1;\n\t\t\trow=row?row[2]:1;\n\t\t\tif(col>1||row>1||w)str+='='+col+','+row;\n\t\t\tif(w)str+=','+w[2];\n\t\t}\n\t\treturn str+']';\n\t});\n\tsUBB=sUBB.replace(/<\\/(table|tr)>/ig,'[/$1]');\n\tsUBB=sUBB.replace(/<\\/(th|td)>/ig,'[/td]');\n\t\n\tsUBB=sUBB.replace(/<ul(\\s+[^>]*?)?>/ig,function(all,attr){\n\t\tvar t;\n\t\tif(attr)t=attr.match(/\\s+type\\s*=\\s*([\"']?)\\s*(.+?)\\s*\\1(\\s|$)/i);\n\t\treturn '[list'+(t?'='+t[2]:'')+']';\n\t});\n\tsUBB=sUBB.replace(/<ol(\\s+[^>]*?)?>/ig,'[list=1]');\n\tsUBB=sUBB.replace(/<li(\\s+[^>]*?)?>/ig,'[*]');\n\tsUBB=sUBB.replace(/<\\/li>/ig,'');\n\tsUBB=sUBB.replace(/<\\/(ul|ol)>/ig,'[/list]');\n\tsUBB=sUBB.replace(/<h([1-6])(\\s+[^>]*?)?>/ig,function(all,n){return '\\r\\n\\r\\n[size='+(7-n)+'][b]'});\n\tsUBB=sUBB.replace(/<\\/h[1-6]>/ig,'[/b][/size]\\r\\n\\r\\n');\n\tsUBB=sUBB.replace(/<address(\\s+[^>]*?)?>/ig,'\\r\\n[i]');\n\tsUBB=sUBB.replace(/<\\/address>/ig,'[i]\\r\\n');\n\tsUBB=sUBB.replace(/<hr(\\s+[^>]*?)?\\/>/ig,'[hr/]');\n\n\tfor(i=0;i<3;i++)sUBB=sUBB.replace(/<(p)(?:\\s+[^>]*?)?>(((?!<\\1(\\s+[^>]*?)?>)[\\s\\S]|<\\1(\\s+[^>]*?)?>((?!<\\1(\\s+[^>]*?)?>)[\\s\\S]|<\\1(\\s+[^>]*?)?>((?!<\\1(\\s+[^>]*?)?>)[\\s\\S])*?<\\/\\1>)*?<\\/\\1>)*?)<\\/\\1>/ig,\"\\r\\n\\r\\n$2\\r\\n\\r\\n\");\n\tfor(i=0;i<3;i++)sUBB=sUBB.replace(/<(div)(?:\\s+[^>]*?)?>(((?!<\\1(\\s+[^>]*?)?>)[\\s\\S]|<\\1(\\s+[^>]*?)?>((?!<\\1(\\s+[^>]*?)?>)[\\s\\S]|<\\1(\\s+[^>]*?)?>((?!<\\1(\\s+[^>]*?)?>)[\\s\\S])*?<\\/\\1>)*?<\\/\\1>)*?)<\\/\\1>/ig,\"\\r\\n$2\\r\\n\");\n\t\n\tsUBB=sUBB.replace(/((\\s|&nbsp;)*\\r?\\n){3,}/g,\"\\r\\n\\r\\n\");//限制最多2次换行\n\tsUBB=sUBB.replace(/^((\\s|&nbsp;)*\\r?\\n)+/g,'');//清除开头换行\n\tsUBB=sUBB.replace(/((\\s|&nbsp;)*\\r?\\n)+$/g,'');//清除结尾换行\n\t\n\tfor(i=1;i<=cnum;i++)sUBB=sUBB.replace(\"[\\tubbcodeplace_\"+i+\"\\t]\", arrcode[i]);\n\n\tsUBB=sUBB.replace(/<[^<>]+?>/g,'');//删除所有HTML标签\n\tvar arrEntities={'lt':'<','gt':'>','nbsp':' ','amp':'&','quot':'\"'};\n\tsUBB=sUBB.replace(/&(lt|gt|nbsp|amp|quot);/ig,function(all,t){return arrEntities[t];});\n\t\n\t//清除空内容的UBB标签\n\tsUBB=sUBB.replace(/\\[([a-z]+)(?:=[^\\[\\]]+)?\\]\\s*\\[\\/\\1\\]/ig,'');\n\t\n\treturn sUBB;\n}"
  },
  {
    "path": "xheditor/xheditor_skin/default/iframe.css",
    "content": "html{height:100%;background-color:#FFFFFF;}\nbody,td,th{font-family:Arial,Helvetica,sans-serif;font-size:12px;}\nbody{height:100%;*height:90%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;}\n\n.xhe-border{border:1px dotted #d3d3d3;}\n.xhe-border th,.xhe-border td{border:1px dotted #d3d3d3;}\n.wordImage{border:1px dotted #c00;background:url(img/wordimg.gif) #ffc center center no-repeat;}\n\n.editMode{margin:0px;padding:5px;overflow-y:auto;word-break:break-word;word-wrap:break-word;}\n.editMode img:-moz-broken {-moz-force-broken-image-icon:1;height:24px;width:24px;}\n.editMode embed{display:inline-block;border:1px dotted #c00;}\n.editMode embed[type=\"application/x-shockwave-flash\"]{background:url(img/flash.gif) #ffc center center no-repeat;}\n.editMode embed[type=\"application/x-mplayer2\"]{background:url(img/wmp.gif) center center no-repeat;}\n.editMode .xhe-paste{position:absolute;left:-1000px;overflow:hidden;width:1px;height:1px;}\n.editMode .xhe-anchor{display:inline-block;background: url(img/anchor.gif) no-repeat;border: 1px dotted #0000FF;width:16px;height:15px;overflow:hidden;}\n\n.sourceMode{margin:0px;padding:0px;overflow:hidden;height:100%;}\n.sourceMode textarea{*position:absolute;border:0px;margin:0px;padding:0px;width:100%;height:100%;overflow:auto;font-family:'Courier New',Courier,monospace !important;font-size:10pt;resize:none;outline:0;}\n\n.previewMode{margin:5px;padding:0px;}\n\n.showBlocktag p,.showBlocktag h1,.showBlocktag h2,.showBlocktag h3,.showBlocktag h4,.showBlocktag h5,.showBlocktag h6,.showBlocktag pre,.showBlocktag address,.showBlocktag div{background:none no-repeat scroll right top;border:1px dotted gray;}\n.showBlocktag p{background-image:url(img/tag-p.gif);}\n.showBlocktag h1{background-image:url(img/tag-h1.gif);}\n.showBlocktag h2{background-image:url(img/tag-h2.gif);}\n.showBlocktag h3{background-image:url(img/tag-h3.gif);}\n.showBlocktag h4{background-image:url(img/tag-h4.gif);}\n.showBlocktag h5{background-image:url(img/tag-h5.gif);}\n.showBlocktag h6{background-image:url(img/tag-h6.gif);}\n.showBlocktag pre{background-image:url(img/tag-pre.gif);}\n.showBlocktag address{background-image:url(img/tag-address.gif);}\n.showBlocktag div{background-image:url(img/tag-div.gif);}"
  },
  {
    "path": "xheditor/xheditor_skin/default/ui.css",
    "content": ".xhe_default table, .xhe_default tr, .xhe_default td, .xhe_default iframe {border:0; margin:0; padding:0; background:transparent;text-decoration:none; font-weight:normal; color:#000}\n\n.xhe_default table.xheLayout {display:inline-table;background:#F0F0EE; border:1px solid #C5C5C5;width:100%;height:100%;}\n.xhe_default td.xheTool{padding:0px 3px;border-bottom:1px solid #C5C5C5;}\n.xhe_default td.xheTool span{float:left;margin:2px 0px;}\n.xhe_default td.xheTool br{clear:left;}\n\n.xhe_default span.xheGStart{display:none;}\n.xhe_default span.xheGEnd{display:none;}\n.xhe_default span.xheSeparator{display:block;height:22px;width:4px;margin:2px 2px !important;background:url(img/icons.gif) no-repeat -660px 0;}\n\n.xhe_default a.xheButton{display:inline-block;margin:1px;border:0px;cursor:pointer;text-decoration:none;}\n.xhe_default a.xheButton span{opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30);}\n.xhe_default a.xheEnabled span{opacity:1; -ms-filter:'alpha(opacity=100)'; filter:alpha(opacity=100);}\n.xhe_default a.xheEnabled:hover {margin:0px;border:1px solid #999;background:#fff;}\n.xhe_default a.xheActive{margin:0px;border:1px solid #999; background:#fff;}\n\n.xhe_default a.xheButton span{display:block;margin:0px;height:20px;width:20px;overflow:hidden;}\n.xhe_default span.xheIcon{background:url(img/icons.gif) no-repeat 20px 20px}\n\n.xhe_default span.xheBtnCut {background-position:0 0}\n.xhe_default span.xheBtnCopy {background-position:-20px 0}\n.xhe_default span.xheBtnPaste {background-position:-40px 0}\n.xhe_default span.xheBtnPastetext {background-position:-60px 0}\n.xhe_default span.xheBtnBlocktag {background-position:-80px 0}\n.xhe_default span.xheBtnFontface {background-position:-100px 0}\n.xhe_default span.xheBtnFontSize {background-position:-120px 0}\n.xhe_default span.xheBtnBold {background-position:-140px 0}\n.xhe_default span.xheBtnItalic {background-position:-160px 0}\n.xhe_default span.xheBtnUnderline {background-position:-180px 0}\n.xhe_default span.xheBtnStrikethrough {background-position:-200px 0}\n.xhe_default span.xheBtnFontColor {background-position:-220px 0}\n.xhe_default span.xheBtnBackColor {background-position:-240px 0}\n.xhe_default span.xheBtnSelectAll {background-position:-260px 0}\n.xhe_default span.xheBtnRemoveformat {background-position:-280px 0}\n\n.xhe_default span.xheBtnAlign {background-position:-300px 0}\n.xhe_default span.xheBtnList {background-position:-320px 0}\n.xhe_default span.xheBtnOutdent {background-position:-340px 0}\n.xhe_default span.xheBtnIndent {background-position:-360px 0}\n\n.xhe_default span.xheBtnLink {background-position:-380px 0}\n.xhe_default span.xheBtnUnlink {background-position:-400px 0}\n.xhe_default span.xheBtnAnchor {background-position:-420px 0}\n.xhe_default span.xheBtnImg {background-position:-440px 0}\n.xhe_default span.xheBtnFlash {background-position:-460px 0}\n.xhe_default span.xheBtnMedia {background-position:-480px 0}\n.xhe_default span.xheBtnHr {background-position:-500px 0}\n.xhe_default span.xheBtnEmot {background-position:-520px 0}\n.xhe_default span.xheBtnTable {background-position:-540px 0}\n\n.xhe_default span.xheBtnSource {background-position:-560px 0}\n.xhe_default span.xheBtnPreview {background-position:-580px 0}\n.xhe_default span.xheBtnPrint {background-position:-600px 0}\n.xhe_default span.xheBtnFullscreen {background-position:-620px 0}\n\n.xhe_default span.xheBtnAbout {background-position:-640px 0}\n\n.xhe_default .xheIframeArea{height:100%;}\n.xhe_default iframe {display:block;background:#fff;width:100%;height:100%;}\n\n\n#xheCntLine{display:none;position:absolute;z-index:1000001;background:#fff;height:1px;font-size:0;}\n#xhePanel{display:none;position:absolute;z-index:1000000;border:#999 1px solid;background:#fff;text-align:left;}\n#xheShadow{display:none;position:absolute;z-index:999999;background:#000;opacity:0.2; -ms-filter:'alpha(opacity=20)'; filter:alpha(opacity=20);}\n.xheFixCancel{position:absolute;z-index:999998;background-color:#FFF;opacity:0; -ms-filter:'alpha(opacity=0)'; filter:alpha(opacity=0);}\n\n.xheMenu{padding:2px;overflow-x:hidden;overflow-y:auto;max-height:230px;}\n.xheMenu .xheMenuSeparator{margin:3px 0;border-top:1px solid #D8D8D8;}\n.xheMenu a{display:block;padding:3px 20px 3px 3px;line-height:normal;font-size:12px;color:#000;text-decoration:none;white-space:nowrap;}\n.xheMenu a:hover{background:#e5e5e5;text-decoration:none;color:#000;}\n.xheMenu p,.xheMenu h1,.xheMenu h2,.xheMenu h3,.xheMenu h4,.xheMenu h5,.xheMenu h6,.xheMenu pre,.xheMenu address,.xheMenu div{margin:0}\n\n.xheEmot div{padding:5px;overflow-x:hidden;overflow-y:auto;}\n.xheEmot div a{display:inline-block;margin:3px;padding:3px;overflow:hidden;background-repeat:no-repeat;background-position:center;text-decoration:none;}\n.xheEmot div a:hover{border:1px solid #999;padding:2px;}\n.xheEmot ul{border-top:1px solid #999;list-style:none;padding:0 10px;margin:0;font-size:12px;}\n.xheEmot li{float:left;margin:0 2px 5px 0;}\n.xheEmot li a{background:#fff;display:block;padding:0 8px;text-decoration:none;color:#000;line-height:20px;}\n.xheEmot li a:hover{text-decoration:underline;}\n.xheEmot li.cur{border:1px solid #999;border-top:none;position:relative;bottom:1px;}\n.xheEmot li.cur a{cursor:text;padding-top:1px;}\n.xheEmot li.cur a:hover{text-decoration:none;}\n\n.xheColor{padding:5px;}\n.xheColor a{display:inline-block;margin:1px;border:#999 1px solid;width:17px;height:9px;font-size:0;}\n.xheColor a:hover{border:#000 1px solid;}\n.xheColor a img{display:none;}\n\n.xheDialog{padding:10px;font-size:12px;font-family:monospace;}\n.xheDialog a{text-decoration:underline;color:#00f;}\n.xheDialog a:hover{text-decoration:underline;color:#00f}\n.xheDialog div{padding:2px 0;}\n.xheDialog input{\n\tmargin:0;border-width:1px;border-style:solid;font-size:12px;\n\t*border-width:expression((type!=\"checkbox\")?'1px':0);*padding:expression((type==\"text\")?'1px':'auto');*width:expression((type==\"text\")?'160px':'auto');*border-color:expression((type==\"text\")?'#ABADB3':'#fff #888 #888 #fff');*background:expression((type==\"button\")?'#F0F0F0':'#FFFFFF');*cursor:expression((type==\"button\")?'pointer':'');*font-size:expression((type==\"button\")?'13px':'12px');\n}\n.xheDialog textarea{font-size:12px;resize:none;border:1px solid #ccc;}\n.xheDialog input[type=text]{padding:1px;width:160px;border-color:#ABADB3;}\n.xheDialog input[type=button]{margin:0;border-color:#fff #888 #888 #fff;background:#F0F0F0;cursor:pointer;font-size:13px;}\n.xheDialog input[type=file]{font-size:13px;}\n.xheDialog input[type=checkbox]{border:0;}\n.xheDialog select{margin:0;border:1px #ABADB3 solid;padding:1px;}\n.xheDialog input,.xheDialog select,.xheDialog textarea{border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;}\n.xheDialog input:focus,.xheDialog select:focus,.xheDialog textarea:focus{outline: 0;border-color: #EEC068;-webkit-box-shadow: 0 0 1px #EEC068;-moz-box-shadow: 0 0 1px #EEC068;box-shadow: 0 0 1px #EEC068;}\n.xheDialog .xheUpload{position: relative;display:inline-block;width:164px;}\n.xheDialog .xheUpload .xheBtn{position: absolute;top: 0px;left: 114px;width:50px;z-index: 1000001;padding:0;}\n.xheDialog .xheUpload .xheFile{cursor:pointer;position: absolute;top: 0px;left: 0px;width:164px;opacity:0;-ms-filter:'alpha(opacity=0)';filter:alpha(opacity=0);z-index: 1000002;}\n.xheDialog .xheUpload .xheText {position: absolute;width:107px;top: 0px;left: 0px;z-index: 1000003;}\n\n.xheModal{\n\tposition: fixed;z-index: 1000010;text-align:left;top:50%;left:50%;background:#FFF;border:1px solid #BBB;font-size:12px;\n\t_position:absolute;_margin-top:expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px');\t\n}\n.xheModalTitle{padding:5px;background:#F0F0EE;border-bottom:1px solid #BBB;}\n.xheModalClose{float:right;width:16px;height:16px;background:url(img/close.gif);cursor:pointer;}\n.xheModalIfmWait{width:100%;height:100%;background:url(img/waiting.gif) no-repeat 50% 50%;margin:-16 0 0 -16;}\n.xheModalShadow{\n\tposition:fixed;z-index:1000009;top:50%;left:50%;background:#000;opacity:0.2; -ms-filter:'alpha(opacity=20)'; filter:alpha(opacity=20);\n\t_position:absolute;_margin-top:expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 5 + 'px');\n}\n.xheModalOverlay{\n\tposition: fixed;z-index:1000008;top: 0px;left: 0px;height:100%;width:100%;background-color:#000;opacity:0.2; -ms-filter:'alpha(opacity=20)'; filter:alpha(opacity=20);\n\t_position:absolute;_height:expression(Math.max(document.documentElement.clientHeight,document.documentElement.scrollHeight)+'px');_width:expression(Math.max(document.documentElement.clientWidth,document.documentElement.scrollWidth)+'px');\n}\n*html{\n\tbackground-image:url(about:blank);\n\tbackground-attachment:fixed;\n}\n\n.xheProgress{position:relative;width:280px;margin:auto;border:1px solid #C1C1C1;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background:url(img/progressbg.gif) #E9E9E9;}\n.xheProgress span{position:absolute;left:0;top:0;width:100%;text-align:center;line-height:15px;font-size:12px;color:#222;text-shadow: 1px 1px 0 #eee;}\n.xheProgress div{height:15px;width:1px;background:url(img/progress.gif) #31C135;}\n\n.xhe_Fullfix{overflow:hidden;}\n.xhe_Fullfix body{width:100%;height:100%;}\n.xhe_Fullscreen{\n\ttop:0px;left:0px;position:fixed;z-index:100000;width:100%;height:100%;background:#fff;\n\t_position:absolute;_top:expression((document.compatMode?documentElement.scrollTop:document.body.scrollTop)+'px');_width:expression((document.compatMode?documentElement.offsetWidth:document.body.offsetWidth) + 'px');_height:expression((document.compatMode?documentElement.offsetHeight:document.body.offsetHeight) + 'px');\n}\n\n.xheHideArea{position:absolute;top:-1000px;left:-1000px;visibility:hidden;}"
  },
  {
    "path": "xheditor/xheditor_skin/nostyle/iframe.css",
    "content": "html{height:100%;background-color:#FFFFFF;}\nbody,td,th{font-family:Arial,Helvetica,sans-serif;font-size:12px;}\nbody{height:100%;*height:90%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;}\n\n.xhe-border{border:1px dotted #d3d3d3;}\n.xhe-border th,.xhe-border td{border:1px dotted #d3d3d3;}\n\n.editMode{margin:0px;padding:5px;overflow-y:auto;word-break:break-word;word-wrap:break-word;}\n.editMode img:-moz-broken {-moz-force-broken-image-icon:1;height:24px;width:24px;}\n.editMode embed{display:inline-block;border:1px dashed #FF4E4E;}\n.editMode embed[type=\"application/x-shockwave-flash\"]{background:url(img/flash.gif) center center no-repeat;}\n.editMode embed[type=\"application/x-mplayer2\"]{background:url(img/wmp.gif) center center no-repeat;}\n.editMode .xhe-paste{position:absolute;left:-1000px;overflow:hidden;width:1px;height:1px;}\n.editMode .xhe-anchor{display:inline-block;background: url(img/anchor.gif) no-repeat;border: 1px dotted #0000FF;width:16px;height:15px;overflow:hidden;}\n\n.sourceMode{margin:0px;padding:0px;overflow:hidden;height:100%;}\n.sourceMode textarea{*position:absolute;border:0px;margin:0px;padding:0px;width:100%;height:100%;overflow-y:auto;font-family:'Courier New',Courier,monospace !important;font-size:10pt;outline:0;}\n\n.previewMode{margin:5px;padding:0px;}\n\n.showBlocktag p,.showBlocktag h1,.showBlocktag h2,.showBlocktag h3,.showBlocktag h4,.showBlocktag h5,.showBlocktag h6,.showBlocktag pre,.showBlocktag address,.showBlocktag div{background:none no-repeat scroll right top;border:1px dotted gray;}\n.showBlocktag p{background-image:url(img/tag-p.gif);}\n.showBlocktag h1{background-image:url(img/tag-h1.gif);}\n.showBlocktag h2{background-image:url(img/tag-h2.gif);}\n.showBlocktag h3{background-image:url(img/tag-h3.gif);}\n.showBlocktag h4{background-image:url(img/tag-h4.gif);}\n.showBlocktag h5{background-image:url(img/tag-h5.gif);}\n.showBlocktag h6{background-image:url(img/tag-h6.gif);}\n.showBlocktag pre{background-image:url(img/tag-pre.gif);}\n.showBlocktag address{background-image:url(img/tag-address.gif);}\n.showBlocktag div{background-image:url(img/tag-div.gif);}"
  },
  {
    "path": "xheditor/xheditor_skin/nostyle/ui.css",
    "content": ".xhe_nostyle table, .xhe_nostyle tr, .xhe_nostyle td, .xhe_nostyle iframe {border:0; margin:0; padding:0; background:transparent;text-decoration:none; font-weight:normal; color:#000}\n\n.xhe_nostyle table.xheLayout {display:inline-table;background:#FFF; border:1px solid #C5C5C5;width:100%;height:100%;}\n.xhe_nostyle td.xheTool{padding:0px 3px;border-bottom:1px solid #C5C5C5;}\n.xhe_nostyle td.xheTool span{float:left;margin:2px 0px;}\n.xhe_nostyle td.xheTool br{clear:left;}\n\n.xhe_nostyle span.xheGStart{display:none;}\n.xhe_nostyle span.xheGEnd{display:none;}\n.xhe_nostyle span.xheSeparator{display:block;height:22px;width:4px;margin:2px 2px !important;background:url(img/icons.gif) no-repeat -660px 0;}\n\n.xhe_nostyle a.xheButton{display:inline-block;margin:1px;border:0px;cursor:pointer;text-decoration:none;}\n.xhe_nostyle a.xheButton span{opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30);}\n.xhe_nostyle a.xheEnabled span{opacity:1; -ms-filter:'alpha(opacity=100)'; filter:alpha(opacity=100);}\n.xhe_nostyle a.xheEnabled:hover {margin:0px;border:1px solid #999;background:#fff;}\n.xhe_nostyle a.xheActive{margin:0px;border:1px solid #999; background:#fff;}\n\n.xhe_nostyle a.xheButton span{display:block;margin:0px;height:20px;width:20px;overflow:hidden;}\n.xhe_nostyle span.xheIcon{background:url(img/icons.gif) no-repeat 20px 20px}\n\n.xhe_nostyle span.xheBtnCut {background-position:0 0}\n.xhe_nostyle span.xheBtnCopy {background-position:-20px 0}\n.xhe_nostyle span.xheBtnPaste {background-position:-40px 0}\n.xhe_nostyle span.xheBtnPastetext {background-position:-60px 0}\n.xhe_nostyle span.xheBtnBlocktag {background-position:-80px 0}\n.xhe_nostyle span.xheBtnFontface {background-position:-100px 0}\n.xhe_nostyle span.xheBtnFontSize {background-position:-120px 0}\n.xhe_nostyle span.xheBtnBold {background-position:-140px 0}\n.xhe_nostyle span.xheBtnItalic {background-position:-160px 0}\n.xhe_nostyle span.xheBtnUnderline {background-position:-180px 0}\n.xhe_nostyle span.xheBtnStrikethrough {background-position:-200px 0}\n.xhe_nostyle span.xheBtnFontColor {background-position:-220px 0}\n.xhe_nostyle span.xheBtnBackColor {background-position:-240px 0}\n.xhe_nostyle span.xheBtnSelectAll {background-position:-260px 0}\n.xhe_nostyle span.xheBtnRemoveformat {background-position:-280px 0}\n\n.xhe_nostyle span.xheBtnAlign {background-position:-300px 0}\n.xhe_nostyle span.xheBtnList {background-position:-320px 0}\n.xhe_nostyle span.xheBtnOutdent {background-position:-340px 0}\n.xhe_nostyle span.xheBtnIndent {background-position:-360px 0}\n\n.xhe_nostyle span.xheBtnLink {background-position:-380px 0}\n.xhe_nostyle span.xheBtnUnlink {background-position:-400px 0}\n.xhe_nostyle span.xheBtnAnchor {background-position:-420px 0}\n.xhe_nostyle span.xheBtnImg {background-position:-440px 0}\n.xhe_nostyle span.xheBtnFlash {background-position:-460px 0}\n.xhe_nostyle span.xheBtnMedia {background-position:-480px 0}\n.xhe_nostyle span.xheBtnHr {background-position:-500px 0}\n.xhe_nostyle span.xheBtnEmot {background-position:-520px 0}\n.xhe_nostyle span.xheBtnTable {background-position:-540px 0}\n\n.xhe_nostyle span.xheBtnSource {background-position:-560px 0}\n.xhe_nostyle span.xheBtnPreview {background-position:-580px 0}\n.xhe_nostyle span.xheBtnPrint {background-position:-600px 0}\n.xhe_nostyle span.xheBtnFullscreen {background-position:-620px 0}\n\n.xhe_nostyle span.xheBtnAbout {background-position:-640px 0}\n\n.xhe_nostyle .xheIframeArea{height:100%;}\n.xhe_nostyle iframe {display:block;background:#fff;width:100%;height:100%;}\n\n\n#xheCntLine{display:none;position:absolute;z-index:1000001;background:#fff;height:1px;font-size:0;}\n#xhePanel{display:none;position:absolute;z-index:1000000;border:#999 1px solid;background:#fff;text-align:left;}\n#xheShadow{display:none;position:absolute;z-index:999999;background:#000;opacity:0.2; -ms-filter:'alpha(opacity=20)'; filter:alpha(opacity=20);}\n.xheFixCancel{position:absolute;z-index:999998;background-color:#FFF;opacity:0; -ms-filter:'alpha(opacity=0)'; filter:alpha(opacity=0);}\n\n.xheMenu{padding:2px;overflow-x:hidden;overflow-y:auto;max-height:230px;}\n.xheMenu .xheMenuSeparator{margin:3px 0;border-top:1px solid #D8D8D8;}\n.xheMenu a{display:block;padding:3px 20px 3px 3px;line-height:normal;font-size:12px;color:#000;text-decoration:none;white-space:nowrap;}\n.xheMenu a:hover{background:#e5e5e5;text-decoration:none;color:#000;}\n.xheMenu p,.xheMenu h1,.xheMenu h2,.xheMenu h3,.xheMenu h4,.xheMenu h5,.xheMenu h6,.xheMenu pre,.xheMenu address,.xheMenu div{margin:0}\n\n.xheEmot div{padding:5px;overflow-x:hidden;overflow-y:auto;}\n.xheEmot div a{display:inline-block;margin:3px;padding:3px;overflow:hidden;background-repeat:no-repeat;background-position:center;text-decoration:none;}\n.xheEmot div a:hover{border:1px solid #999;padding:2px;}\n.xheEmot ul{border-top:1px solid #999;list-style:none;padding:0 10px;margin:0;font-size:12px;}\n.xheEmot li{float:left;margin:0 2px 5px 0;}\n.xheEmot li a{background:#fff;display:block;padding:0 8px;text-decoration:none;color:#000;line-height:20px;}\n.xheEmot li a:hover{text-decoration:underline;}\n.xheEmot li.cur{border:1px solid #999;border-top:none;position:relative;bottom:1px;}\n.xheEmot li.cur a{cursor:text;padding-top:1px;}\n.xheEmot li.cur a:hover{text-decoration:none;}\n\n.xheColor{padding:5px;}\n.xheColor a{display:inline-block;margin:1px;border:#999 1px solid;width:17px;height:9px;font-size:0;}\n.xheColor a:hover{border:#000 1px solid;}\n.xheColor a img{display:none;}\n\n.xheDialog{padding:10px;font-size:12px;font-family:monospace;}\n.xheDialog a{text-decoration:underline;color:#00f;}\n.xheDialog a:hover{text-decoration:underline;color:#00f}\n.xheDialog div{padding:2px 0;}\n.xheDialog input{\n\tmargin:0;border-width:1px;border-style:solid;font-size:12px;\n\t*border-width:expression((type!=\"checkbox\")?'1px':0);*padding:expression((type==\"text\")?'1px':'auto');*width:expression((type==\"text\")?'160px':'auto');*border-color:expression((type==\"text\")?'#ABADB3':'#fff #888 #888 #fff');*background:expression((type==\"button\")?'#F0F0F0':'#FFFFFF');*cursor:expression((type==\"button\")?'pointer':'');*font-size:expression((type==\"button\")?'13px':'12px');\n}\n.xheDialog textarea{font-size:12px;resize:none;border:1px solid #ccc;}\n.xheDialog input[type=text]{padding:1px;width:160px;border-color:#ABADB3;}\n.xheDialog input[type=button]{margin:0;border-color:#fff #888 #888 #fff;background:#F0F0F0;cursor:pointer;font-size:13px;}\n.xheDialog input[type=file]{font-size:13px;}\n.xheDialog input[type=checkbox]{border:0;}\n.xheDialog select{margin:0;border:1px #ABADB3 solid;}\n.xheDialog input,.xheDialog select,.xheDialog textarea{border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;}\n.xheDialog input:focus,.xheDialog select:focus,.xheDialog textarea:focus{outline: 0;border-color: #EEC068;-webkit-box-shadow: 0 0 1px #EEC068;-moz-box-shadow: 0 0 1px #EEC068;box-shadow: 0 0 1px #EEC068;}\n.xheDialog .xheUpload{position: relative;display:inline-block;width:164px;}\n.xheDialog .xheUpload .xheBtn{position: absolute;top: 0px;left: 114px;width:50px;z-index: 1000001;padding:0;}\n.xheDialog .xheUpload .xheFile{cursor:pointer;position: absolute;top: 0px;left: 0px;width:164px;opacity:0;-ms-filter:'alpha(opacity=0)';filter:alpha(opacity=0);z-index: 1000002;}\n.xheDialog .xheUpload .xheText {position: absolute;width:107px;top: 0px;left: 0px;z-index: 1000003;}\n\n.xheModal{\n\tposition: fixed;z-index: 1000010;text-align:left;top:50%;left:50%;background:#FFF;border:1px solid #BBB;font-size:12px;\n\t_position:absolute;_margin-top:expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px');\n}\n.xheModalTitle{padding:5px;background:#F0F0EE;border-bottom:1px solid #BBB;}\n.xheModalClose{float:right;width:16px;height:16px;background:url(img/close.gif);cursor:pointer;}\n.xheModalIfmWait{width:100%;height:100%;background:url(img/waiting.gif) no-repeat 50% 50%;margin:-16 0 0 -16;}\n.xheModalShadow{\n\tposition:fixed;z-index:1000009;top:50%;left:50%;background:#000;opacity:0.2; -ms-filter:'alpha(opacity=20)'; filter:alpha(opacity=20);\n\t_position:absolute;_margin-top:expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 5 + 'px');\n}\n.xheModalOverlay{\n\tposition: fixed;z-index:1000008;top: 0px;left: 0px;height:100%;width:100%;background-color:#000;opacity:0.2; -ms-filter:'alpha(opacity=20)'; filter:alpha(opacity=20);\n\t_position:absolute;_height:expression(Math.max(document.documentElement.clientHeight,document.documentElement.scrollHeight)+'px');_width:expression(Math.max(document.documentElement.clientWidth,document.documentElement.scrollWidth)+'px');\n}\n*html{\n\tbackground-image:url(about:blank);\n\tbackground-attachment:fixed;\n}\n\n.xheProgress{position:relative;width:280px;margin:auto;border:1px solid #C1C1C1;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background:url(img/progressbg.gif) #E9E9E9;}\n.xheProgress span{position:absolute;left:0;top:0;width:100%;text-align:center;line-height:15px;font-size:12px;color:#222;text-shadow: 1px 1px 0 #eee;}\n.xheProgress div{height:15px;width:1px;background:url(img/progress.gif) #31C135;}\n\n.xhe_Fullfix{overflow:hidden;}\n.xhe_Fullfix body{width:100%;height:100%;}\n.xhe_Fullscreen{\n\ttop:0px;left:0px;position:fixed;z-index:100000;width:100%;height:100%;background:#fff;\n\t_position:absolute;_top:expression((document.compatMode?documentElement.scrollTop:document.body.scrollTop)+'px');_width:expression((document.compatMode?documentElement.offsetWidth:document.body.offsetWidth) + 'px');_height:expression((document.compatMode?documentElement.offsetHeight:document.body.offsetHeight) + 'px');\n}\n\n.xheHideArea{position:absolute;top:-1000px;left:-1000px;visibility:hidden;}"
  },
  {
    "path": "xheditor/xheditor_skin/o2007blue/iframe.css",
    "content": "html{height:100%;background-color:#FFFFFF;}\nbody,td,th{font-family:Arial,Helvetica,sans-serif;font-size:12px;}\nbody{height:100%;*height:90%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;}\n\n.xhe-border{border:1px dotted #d3d3d3;}\n.xhe-border th,.xhe-border td{border:1px dotted #d3d3d3;}\n\n.editMode{margin:0px;padding:5px;overflow-y:auto;word-break:break-word;word-wrap:break-word;}\n.editMode img:-moz-broken {-moz-force-broken-image-icon:1;height:24px;width:24px;}\n.editMode embed{display:inline-block;border:1px dashed #FF4E4E;}\n.editMode embed[type=\"application/x-shockwave-flash\"]{background:url(img/flash.gif) center center no-repeat;}\n.editMode embed[type=\"application/x-mplayer2\"]{background:url(img/wmp.gif) center center no-repeat;}\n.editMode .xhe-paste{position:absolute;left:-1000px;overflow:hidden;width:1px;height:1px;}\n.editMode .xhe-anchor{display:inline-block;background: url(img/anchor.gif) no-repeat;border: 1px dotted #0000FF;width:16px;height:15px;overflow:hidden;}\n\n.sourceMode{margin:0px;padding:0px;overflow:hidden;height:100%;}\n.sourceMode textarea{*position:absolute;border:0px;margin:0px;padding:0px;width:100%;height:100%;overflow-y:auto;font-family:'Courier New',Courier,monospace !important;font-size:10pt;resize:none;outline:0;}\n\n.previewMode{margin:5px;padding:0px;}\n\n.showBlocktag p,.showBlocktag h1,.showBlocktag h2,.showBlocktag h3,.showBlocktag h4,.showBlocktag h5,.showBlocktag h6,.showBlocktag pre,.showBlocktag address,.showBlocktag div{background:none no-repeat scroll right top;border:1px dotted gray;}\n.showBlocktag p{background-image:url(img/tag-p.gif);}\n.showBlocktag h1{background-image:url(img/tag-h1.gif);}\n.showBlocktag h2{background-image:url(img/tag-h2.gif);}\n.showBlocktag h3{background-image:url(img/tag-h3.gif);}\n.showBlocktag h4{background-image:url(img/tag-h4.gif);}\n.showBlocktag h5{background-image:url(img/tag-h5.gif);}\n.showBlocktag h6{background-image:url(img/tag-h6.gif);}\n.showBlocktag pre{background-image:url(img/tag-pre.gif);}\n.showBlocktag address{background-image:url(img/tag-address.gif);}\n.showBlocktag div{background-image:url(img/tag-div.gif);}"
  },
  {
    "path": "xheditor/xheditor_skin/o2007blue/ui.css",
    "content": ".xhe_o2007blue table, .xhe_o2007blue tr, .xhe_o2007blue td, .xhe_o2007blue iframe {border:0; margin:0; padding:0; background:transparent;text-decoration:none; font-weight:normal; color:#000}\n\n.xhe_o2007blue table.xheLayout {display:inline-table;background:#E5EFFD; border:1px solid #ABC6DD;width:100%;height:100%;}\n.xhe_o2007blue td.xheTool {padding:1px 3px;border-bottom:1px solid #ABC6DD;}\n.xhe_o2007blue td.xheTool span{float:left;margin:2px 0px;}\n.xhe_o2007blue td.xheTool br{clear:left;}\n\n.xhe_o2007blue span.xheGStart{display:block;width:1px;height:22px;background:url(img/buttonbg.gif) -22px 0;}\n.xhe_o2007blue span.xheGEnd{display:block;width:1px;height:22px;background:url(img/buttonbg.gif) -22px 0;}\n.xhe_o2007blue span.xheSeparator{display:block;height:22px;width:4px;}\n\n.xhe_o2007blue a.xheButton{display:inline-block;padding:1px;border:0px;background:url(img/buttonbg.gif);cursor:pointer;text-decoration:none;}\n.xhe_o2007blue a.xheButton span{opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30);}\n.xhe_o2007blue a.xheEnabled span{opacity:1; -ms-filter:'alpha(opacity=100)'; filter:alpha(opacity=100)}\n.xhe_o2007blue a.xheEnabled:hover {background-color:#B2BBD0; background-position:0 -22px}\n.xhe_o2007blue a.xheActive{background-color:#B2BBD0; background-position:0 -44px !important;}\n\n.xhe_o2007blue a.xheButton span{display:block;margin:0px;height:20px;width:20px;overflow:hidden;}\n.xhe_o2007blue span.xheIcon{background:url(img/icons.gif) no-repeat 20px 20px}\n\n.xhe_o2007blue span.xheBtnCut {background-position:0 0}\n.xhe_o2007blue span.xheBtnCopy {background-position:-20px 0}\n.xhe_o2007blue span.xheBtnPaste {background-position:-40px 0}\n.xhe_o2007blue span.xheBtnPastetext {background-position:-60px 0}\n.xhe_o2007blue span.xheBtnBlocktag {background-position:-80px 0}\n.xhe_o2007blue span.xheBtnFontface {background-position:-100px 0}\n.xhe_o2007blue span.xheBtnFontSize {background-position:-120px 0}\n.xhe_o2007blue span.xheBtnBold {background-position:-140px 0}\n.xhe_o2007blue span.xheBtnItalic {background-position:-160px 0}\n.xhe_o2007blue span.xheBtnUnderline {background-position:-180px 0}\n.xhe_o2007blue span.xheBtnStrikethrough {background-position:-200px 0}\n.xhe_o2007blue span.xheBtnFontColor {background-position:-220px 0}\n.xhe_o2007blue span.xheBtnBackColor {background-position:-240px 0}\n.xhe_o2007blue span.xheBtnSelectAll {background-position:-260px 0}\n.xhe_o2007blue span.xheBtnRemoveformat {background-position:-280px 0}\n\n.xhe_o2007blue span.xheBtnAlign {background-position:-300px 0}\n.xhe_o2007blue span.xheBtnList {background-position:-320px 0}\n.xhe_o2007blue span.xheBtnOutdent {background-position:-340px 0}\n.xhe_o2007blue span.xheBtnIndent {background-position:-360px 0}\n\n.xhe_o2007blue span.xheBtnLink {background-position:-380px 0}\n.xhe_o2007blue span.xheBtnUnlink {background-position:-400px 0}\n.xhe_o2007blue span.xheBtnAnchor {background-position:-420px 0}\n.xhe_o2007blue span.xheBtnImg {background-position:-440px 0}\n.xhe_o2007blue span.xheBtnFlash {background-position:-460px 0}\n.xhe_o2007blue span.xheBtnMedia {background-position:-480px 0}\n.xhe_o2007blue span.xheBtnHr {background-position:-500px 0}\n.xhe_o2007blue span.xheBtnEmot {background-position:-520px 0}\n.xhe_o2007blue span.xheBtnTable {background-position:-540px 0}\n\n.xhe_o2007blue span.xheBtnSource {background-position:-560px 0}\n.xhe_o2007blue span.xheBtnPreview {background-position:-580px 0}\n.xhe_o2007blue span.xheBtnPrint {background-position:-600px 0}\n.xhe_o2007blue span.xheBtnFullscreen {background-position:-620px 0}\n\n.xhe_o2007blue span.xheBtnAbout {background-position:-640px 0}\n\n.xhe_o2007blue .xheIframeArea{height:100%;}\n.xhe_o2007blue iframe {display:block;background:#fff;width:100%;height:100%;}\n\n#xheCntLine{display:none;position:absolute;z-index:1000001;background:#fff;height:1px;font-size:0;}\n#xhePanel{display:none;position:absolute;z-index:1000000;border:#ABC6DD 1px solid;background:#FDFEFF;text-align:left;}\n#xheShadow{display:none;position:absolute;z-index:999999;background:#000;opacity:0.2; -ms-filter:'alpha(opacity=20)'; filter:alpha(opacity=20);}\n.xheFixCancel{position:absolute;z-index:999998;background-color:#FFF;opacity:0; -ms-filter:'alpha(opacity=0)'; filter:alpha(opacity=0);}\n\n.xheMenu{padding:2px;overflow-x:hidden;overflow-y:auto;max-height:230px;}\n.xheMenu .xheMenuSeparator{margin:3px 0;border-top:1px solid #D8D8D8;}\n.xheMenu a{display:block;padding:3px 20px 3px 3px;line-height:normal;font-size:12px;color:#000;text-decoration:none;white-space:nowrap;}\n.xheMenu a:hover{background:#C6DAE9;text-decoration:none;color:#000;}\n.xheMenu p,.xheMenu h1,.xheMenu h2,.xheMenu h3,.xheMenu h4,.xheMenu h5,.xheMenu h6,.xheMenu pre,.xheMenu address,.xheMenu div{margin:0}\n\n.xheEmot div{padding:5px;overflow-x:hidden;overflow-y:auto;}\n.xheEmot div a{display:inline-block;margin:3px;padding:3px;overflow:hidden;background-repeat:no-repeat;background-position:center;text-decoration:none;}\n.xheEmot div a:hover{border:1px solid #ABC6DD;padding:2px;}\n.xheEmot ul{border-top:1px solid #ABC6DD;list-style:none;padding:0 10px;margin:0;font-size:12px;}\n.xheEmot li{float:left;margin:0 2px 5px 0;}\n.xheEmot li a{background:#fff;display:block;padding:0 8px;text-decoration:none;color:#000;line-height:20px;}\n.xheEmot li a:hover{text-decoration:underline;}\n.xheEmot li.cur{border:1px solid #ABC6DD;border-top:none;position:relative;bottom:1px;}\n.xheEmot li.cur a{cursor:text;padding-top:1px;}\n.xheEmot li.cur a:hover{text-decoration:none;}\n\n.xheColor{padding:5px;}\n.xheColor a{display:inline-block;margin:1px;border:#999 1px solid;width:17px;height:9px;font-size:0;}\n.xheColor a:hover{border:#000 1px solid;}\n.xheColor a img{display:none;}\n\n.xheDialog{padding:10px;font-size:12px;font-family:monospace;}\n.xheDialog a{text-decoration:underline;color:#00f;}\n.xheDialog a:hover{text-decoration:underline;color:#00f}\n.xheDialog div{padding:2px 0px;}\n.xheDialog input{\n\tmargin:0;border-width:1px;border-style:solid;font-size:12px;\n\t*border-width:expression((type!=\"checkbox\")?'1px':0);*padding:expression((type==\"text\")?'1px':'auto');*width:expression((type==\"text\")?'160px':'auto');*border-color:expression((type==\"text\")?'#ABADB3':'#fff #888 #888 #fff');*background:expression((type==\"button\")?'#F0F0F0':'#FFFFFF');*cursor:expression((type==\"button\")?'pointer':'');*font-size:expression((type==\"button\")?'13px':'12px');\n}\n.xheDialog textarea{font-size:12px;resize:none;border:1px solid #ccc;}\n.xheDialog input[type=text]{padding:1px;width:160px;border-color:#ABADB3;}\n.xheDialog input[type=button]{margin:0;border-color:#fff #888 #888 #fff;background:#F0F0F0;cursor:pointer;font-size:13px;}\n.xheDialog input[type=file]{font-size:13px;}\n.xheDialog input[type=checkbox]{border:0;}\n.xheDialog select{margin:0;border:1px #ABADB3 solid;}\n.xheDialog input,.xheDialog select,.xheDialog textarea{border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;}\n.xheDialog input:focus,.xheDialog select:focus,.xheDialog textarea:focus{outline: 0;border-color: #EEC068;-webkit-box-shadow: 0 0 1px #EEC068;-moz-box-shadow: 0 0 1px #EEC068;box-shadow: 0 0 1px #EEC068;}\n.xheDialog .xheUpload{position: relative;display:inline-block;width:164px;}\n.xheDialog .xheUpload .xheBtn{position: absolute;top: 0px;left: 114px;width:50px;z-index: 1000001;padding:0;}\n.xheDialog .xheUpload .xheFile{cursor:pointer;position: absolute;top: 0px;left: 0px;width:164px;opacity:0;-ms-filter:'alpha(opacity=0)';filter:alpha(opacity=0);z-index: 1000002;}\n.xheDialog .xheUpload .xheText {position: absolute;width:107px;top: 0px;left: 0px;z-index: 1000003;}\n\n.xheModal{\n\tposition: fixed;z-index: 1000010;text-align:left;top:50%;left:50%;background:#FFF;border:1px solid #ABC6DD;font-size:12px;\n\t_position:absolute;_margin-top:expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px');\n}\n.xheModalTitle{padding:5px;background:#D1DEEF;border-bottom:1px solid #ABC6DD;}\n.xheModalClose{float:right;width:16px;height:16px;background:url(img/close.gif);cursor:pointer;}\n.xheModalIfmWait{width:100%;height:100%;background:url(img/waiting.gif) no-repeat 50% 50%;margin:-16 0 0 -16;}\n.xheModalShadow{\n\tposition:fixed;z-index:1000009;top:50%;left:50%;background:#000;opacity:0.2; -ms-filter:'alpha(opacity=20)'; filter:alpha(opacity=20);\n\t_position:absolute;_margin-top:expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 5 + 'px');\n}\n.xheModalOverlay{\n\tposition: fixed;z-index:1000008;top: 0px;left: 0px;height:100%;width:100%;background-color:#000;opacity:0.2; -ms-filter:'alpha(opacity=20)'; filter:alpha(opacity=20);\n\t_position:absolute;_height:expression(Math.max(document.documentElement.clientHeight,document.documentElement.scrollHeight)+'px');_width:expression(Math.max(document.documentElement.clientWidth,document.documentElement.scrollWidth)+'px');\n}\n*html{\n\tbackground-image:url(about:blank);\n\tbackground-attachment:fixed;\n}\n\n.xheProgress{position:relative;width:280px;margin:auto;border:1px solid #C1C1C1;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background:url(img/progressbg.gif) #E9E9E9;}\n.xheProgress span{position:absolute;left:0;top:0;width:100%;text-align:center;line-height:15px;font-size:12px;color:#000;text-shadow: 1px 1px 0 #eee;}\n.xheProgress div{height:15px;width:1px;background:url(img/progress.gif) #31C135;}\n\n.xhe_Fullfix{overflow:hidden;}\n.xhe_Fullfix body{width:100%;height:100%;}\n.xhe_Fullscreen{\n\ttop:0px;left:0px;position:fixed;z-index:100000;width:100%;height:100%;background:#fff;\n\t_position:absolute;_top:expression((document.compatMode?documentElement.scrollTop:document.body.scrollTop)+'px');_width:expression((document.compatMode?documentElement.offsetWidth:document.body.offsetWidth) + 'px');_height:expression((document.compatMode?documentElement.offsetHeight:document.body.offsetHeight) + 'px');\n}\n\n.xheHideArea{position:absolute;top:-1000px;left:-1000px;visibility:hidden;}"
  },
  {
    "path": "xheditor/xheditor_skin/o2007silver/iframe.css",
    "content": "html{height:100%;background-color:#FFFFFF;}\nbody,td,th{font-family:Arial,Helvetica,sans-serif;font-size:12px;}\nbody{height:100%;*height:90%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;}\n\n.xhe-border{border:1px dotted #d3d3d3;}\n.xhe-border th,.xhe-border td{border:1px dotted #d3d3d3;}\n\n.editMode{margin:0px;padding:5px;overflow-y:auto;word-break:break-word;word-wrap:break-word;}\n.editMode img:-moz-broken {-moz-force-broken-image-icon:1;height:24px;width:24px;}\n.editMode embed{display:inline-block;border:1px dashed #FF4E4E;}\n.editMode embed[type=\"application/x-shockwave-flash\"]{background:url(img/flash.gif) center center no-repeat;}\n.editMode embed[type=\"application/x-mplayer2\"]{background:url(img/wmp.gif) center center no-repeat;}\n.editMode .xhe-paste{position:absolute;left:-1000px;overflow:hidden;width:1px;height:1px;}\n.editMode .xhe-anchor{display:inline-block;background: url(img/anchor.gif) no-repeat;border: 1px dotted #0000FF;width:16px;height:15px;overflow:hidden;}\n\n.sourceMode{margin:0px;padding:0px;overflow:hidden;height:100%;}\n.sourceMode textarea{*position:absolute;border:0px;margin:0px;padding:0px;width:100%;height:100%;overflow-y:auto;font-family:'Courier New',Courier,monospace !important;font-size:10pt;resize:none;outline:0;}\n\n.previewMode{margin:5px;padding:0px;}\n\n.showBlocktag p,.showBlocktag h1,.showBlocktag h2,.showBlocktag h3,.showBlocktag h4,.showBlocktag h5,.showBlocktag h6,.showBlocktag pre,.showBlocktag address,.showBlocktag div{background:none no-repeat scroll right top;border:1px dotted gray;}\n.showBlocktag p{background-image:url(img/tag-p.gif);}\n.showBlocktag h1{background-image:url(img/tag-h1.gif);}\n.showBlocktag h2{background-image:url(img/tag-h2.gif);}\n.showBlocktag h3{background-image:url(img/tag-h3.gif);}\n.showBlocktag h4{background-image:url(img/tag-h4.gif);}\n.showBlocktag h5{background-image:url(img/tag-h5.gif);}\n.showBlocktag h6{background-image:url(img/tag-h6.gif);}\n.showBlocktag pre{background-image:url(img/tag-pre.gif);}\n.showBlocktag address{background-image:url(img/tag-address.gif);}\n.showBlocktag div{background-image:url(img/tag-div.gif);}"
  },
  {
    "path": "xheditor/xheditor_skin/o2007silver/ui.css",
    "content": ".xhe_o2007silver table, .xhe_o2007silver tr, .xhe_o2007silver td, .xhe_o2007silver iframe {border:0; margin:0; padding:0; background:transparent;text-decoration:none; font-weight:normal; color:#000}\n\n.xhe_o2007silver table.xheLayout {display:inline-table;background:#EEEEEE; border:1px solid #BBBBBB;width:100%;height:100%;}\n.xhe_o2007silver td.xheTool {padding:1px 3px;border-bottom:1px solid #BBBBBB;}\n.xhe_o2007silver td.xheTool span{float:left;margin:2px 0px;}\n.xhe_o2007silver td.xheTool br{clear:left;}\n\n.xhe_o2007silver span.xheGStart{display:block;width:1px;height:22px;background:url(img/buttonbg.gif) -22px 0;}\n.xhe_o2007silver span.xheGEnd{display:block;width:1px;height:22px;background:url(img/buttonbg.gif) -22px 0;}\n.xhe_o2007silver span.xheSeparator{display:block;height:22px;width:4px;}\n\n.xhe_o2007silver a.xheButton{display:inline-block;padding:1px;border:0px;background:url(img/buttonbg.gif);cursor:pointer;text-decoration:none;}\n.xhe_o2007silver a.xheButton span{opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30);}\n.xhe_o2007silver a.xheEnabled span{opacity:1; -ms-filter:'alpha(opacity=100)'; filter:alpha(opacity=100)}\n.xhe_o2007silver a.xheEnabled:hover {background-color:#B2BBD0; background-position:0 -22px}\n.xhe_o2007silver a.xheActive{background-color:#B2BBD0; background-position:0 -44px !important}\n\n.xhe_o2007silver a.xheButton span{display:block;margin:0px;height:20px;width:20px;overflow:hidden;}\n.xhe_o2007silver span.xheIcon{background:url(img/icons.gif) no-repeat 20px 20px}\n\n.xhe_o2007silver span.xheBtnCut {background-position:0 0}\n.xhe_o2007silver span.xheBtnCopy {background-position:-20px 0}\n.xhe_o2007silver span.xheBtnPaste {background-position:-40px 0}\n.xhe_o2007silver span.xheBtnPastetext {background-position:-60px 0}\n.xhe_o2007silver span.xheBtnBlocktag {background-position:-80px 0}\n.xhe_o2007silver span.xheBtnFontface {background-position:-100px 0}\n.xhe_o2007silver span.xheBtnFontSize {background-position:-120px 0}\n.xhe_o2007silver span.xheBtnBold {background-position:-140px 0}\n.xhe_o2007silver span.xheBtnItalic {background-position:-160px 0}\n.xhe_o2007silver span.xheBtnUnderline {background-position:-180px 0}\n.xhe_o2007silver span.xheBtnStrikethrough {background-position:-200px 0}\n.xhe_o2007silver span.xheBtnFontColor {background-position:-220px 0}\n.xhe_o2007silver span.xheBtnBackColor {background-position:-240px 0}\n.xhe_o2007silver span.xheBtnSelectAll {background-position:-260px 0}\n.xhe_o2007silver span.xheBtnRemoveformat {background-position:-280px 0}\n\n.xhe_o2007silver span.xheBtnAlign {background-position:-300px 0}\n.xhe_o2007silver span.xheBtnList {background-position:-320px 0}\n.xhe_o2007silver span.xheBtnOutdent {background-position:-340px 0}\n.xhe_o2007silver span.xheBtnIndent {background-position:-360px 0}\n\n.xhe_o2007silver span.xheBtnLink {background-position:-380px 0}\n.xhe_o2007silver span.xheBtnUnlink {background-position:-400px 0}\n.xhe_o2007silver span.xheBtnAnchor {background-position:-420px 0}\n.xhe_o2007silver span.xheBtnImg {background-position:-440px 0}\n.xhe_o2007silver span.xheBtnFlash {background-position:-460px 0}\n.xhe_o2007silver span.xheBtnMedia {background-position:-480px 0}\n.xhe_o2007silver span.xheBtnHr {background-position:-500px 0}\n.xhe_o2007silver span.xheBtnEmot {background-position:-520px 0}\n.xhe_o2007silver span.xheBtnTable {background-position:-540px 0}\n\n.xhe_o2007silver span.xheBtnSource {background-position:-560px 0}\n.xhe_o2007silver span.xheBtnPreview {background-position:-580px 0}\n.xhe_o2007silver span.xheBtnPrint {background-position:-600px 0}\n.xhe_o2007silver span.xheBtnFullscreen {background-position:-620px 0}\n\n.xhe_o2007silver span.xheBtnAbout {background-position:-640px 0}\n\n.xhe_o2007silver .xheIframeArea{height:100%;}\n.xhe_o2007silver iframe {display:block;background:#fff;width:100%;height:100%;}\n\n#xheCntLine{display:none;position:absolute;z-index:1000001;background:#fff;height:1px;font-size:0;}\n#xhePanel{display:none;position:absolute;z-index:1000000;border:#BBBBBB 1px solid;background:#FDFEFF;text-align:left;}\n#xheShadow{display:none;position:absolute;z-index:999999;background:#000;opacity:0.2; -ms-filter:'alpha(opacity=20)'; filter:alpha(opacity=20);}\n.xheFixCancel{position:absolute;z-index:999998;background-color:#FFF;opacity:0; -ms-filter:'alpha(opacity=0)'; filter:alpha(opacity=0);}\n\n.xheMenu{padding:2px;overflow-x:hidden;overflow-y:auto;max-height:230px;}\n.xheMenu .xheMenuSeparator{margin:3px 0;border-top:1px solid #D8D8D8;}\n.xheMenu a{display:block;padding:3px 20px 3px 3px;line-height:normal;font-size:12px;color:#000;text-decoration:none;white-space:nowrap;}\n.xheMenu a:hover{background:#e5e5e5;text-decoration:none;color:#000;}\n.xheMenu p,.xheMenu h1,.xheMenu h2,.xheMenu h3,.xheMenu h4,.xheMenu h5,.xheMenu h6,.xheMenu pre,.xheMenu address,.xheMenu div{margin:0}\n\n.xheEmot div{padding:5px;overflow-x:hidden;overflow-y:auto;}\n.xheEmot div a{display:inline-block;margin:3px;padding:3px;overflow:hidden;background-repeat:no-repeat;background-position:center;text-decoration:none;}\n.xheEmot div a:hover{border:1px solid #BBBBBB;padding:2px;}\n.xheEmot ul{border-top:1px solid #BBBBBB;list-style:none;padding:0 10px;margin:0;font-size:12px;}\n.xheEmot li{float:left;margin:0 2px 5px 0;}\n.xheEmot li a{background:#fff;display:block;padding:0 8px;text-decoration:none;color:#000;line-height:20px;}\n.xheEmot li a:hover{text-decoration:underline;}\n.xheEmot li.cur{border:1px solid #BBBBBB;border-top:none;position:relative;bottom:1px;}\n.xheEmot li.cur a{cursor:text;padding-top:1px;}\n.xheEmot li.cur a:hover{text-decoration:none;}\n\n.xheColor{padding:5px;}\n.xheColor a{display:inline-block;margin:1px;border:#999 1px solid;width:17px;height:9px;font-size:0;}\n.xheColor a:hover{border:#000 1px solid;}\n.xheColor a img{display:none;}\n\n.xheDialog{padding:10px;font-size:12px;font-family:monospace;}\n.xheDialog a{text-decoration:underline;color:#00f;}\n.xheDialog a:hover{text-decoration:underline;color:#00f}\n.xheDialog div{padding:2px 0px;}\n.xheDialog input{\n\tmargin:0;border-width:1px;border-style:solid;font-size:12px;\n\t*border-width:expression((type!=\"checkbox\")?'1px':0);*padding:expression((type==\"text\")?'1px':'auto');*width:expression((type==\"text\")?'160px':'auto');*border-color:expression((type==\"text\")?'#ABADB3':'#fff #888 #888 #fff');*background:expression((type==\"button\")?'#F0F0F0':'#FFFFFF');*cursor:expression((type==\"button\")?'pointer':'');*font-size:expression((type==\"button\")?'13px':'12px');\n}\n.xheDialog textarea{font-size:12px;resize:none;border:1px solid #ccc;}\n.xheDialog input[type=text]{padding:1px;width:160px;border-color:#ABADB3;}\n.xheDialog input[type=button]{margin:0;border-color:#fff #888 #888 #fff;background:#F0F0F0;cursor:pointer;font-size:13px;}\n.xheDialog input[type=file]{font-size:13px;}\n.xheDialog input[type=checkbox]{border:0;}\n.xheDialog select{margin:0;border:1px #ABADB3 solid;}\n.xheDialog input,.xheDialog select,.xheDialog textarea{border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;}\n.xheDialog input:focus,.xheDialog select:focus,.xheDialog textarea:focus{outline: 0;border-color: #EEC068;-webkit-box-shadow: 0 0 1px #EEC068;-moz-box-shadow: 0 0 1px #EEC068;box-shadow: 0 0 1px #EEC068;}\n.xheDialog .xheUpload{position: relative;display:inline-block;width:164px;}\n.xheDialog .xheUpload .xheBtn{position: absolute;top: 0px;left: 114px;width:50px;z-index: 1000001;padding:0;}\n.xheDialog .xheUpload .xheFile{cursor:pointer;position: absolute;top: 0px;left: 0px;width:164px;opacity:0;-ms-filter:'alpha(opacity=0)';filter:alpha(opacity=0);z-index: 1000002;}\n.xheDialog .xheUpload .xheText {position: absolute;width:107px;top: 0px;left: 0px;z-index: 1000003;}\n\n.xheModal{\n\tposition: fixed;z-index: 1000010;text-align:left;top:50%;left:50%;background:#FFF;border:1px solid #AAA;font-size:12px;\n\t_position:absolute;_margin-top:expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px');\n}\n.xheModalTitle{padding:5px;background:#DDD;border-bottom:1px solid #AAA;}\n.xheModalClose{float:right;width:16px;height:16px;background:url(img/close.gif);cursor:pointer;}\n.xheModalIfmWait{width:100%;height:100%;background:url(img/waiting.gif) no-repeat 50% 50%;margin:-16 0 0 -16;}\n.xheModalShadow{\n\tposition:fixed;z-index:1000009;top:50%;left:50%;background:#000;opacity:0.2; -ms-filter:'alpha(opacity=20)'; filter:alpha(opacity=20);\n\t_position:absolute;_margin-top:expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 5 + 'px');\n}\n.xheModalOverlay{\n\tposition: fixed;z-index:1000008;top: 0px;left: 0px;height:100%;width:100%;background-color:#000;opacity:0.2; -ms-filter:'alpha(opacity=20)'; filter:alpha(opacity=20);\n\t_position:absolute;_height:expression(Math.max(document.documentElement.clientHeight,document.documentElement.scrollHeight)+'px');_width:expression(Math.max(document.documentElement.clientWidth,document.documentElement.scrollWidth)+'px');\n}\n*html{\n\tbackground-image:url(about:blank);\n\tbackground-attachment:fixed;\n}\n\n.xheProgress{position:relative;width:280px;margin:auto;border:1px solid #C1C1C1;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background:url(img/progressbg.gif) #E9E9E9;}\n.xheProgress span{position:absolute;left:0;top:0;width:100%;text-align:center;line-height:15px;font-size:12px;color:#000;text-shadow: 1px 1px 0 #eee;}\n.xheProgress div{height:15px;width:1px;background:url(img/progress.gif) #31C135;}\n\n.xhe_Fullfix{overflow:hidden;}\n.xhe_Fullfix body{width:100%;height:100%;}\n.xhe_Fullscreen{\n\ttop:0px;left:0px;position:fixed;z-index:100000;width:100%;height:100%;background:#fff;\n\t_position:absolute;_top:expression((document.compatMode?documentElement.scrollTop:document.body.scrollTop)+'px');_width:expression((document.compatMode?documentElement.offsetWidth:document.body.offsetWidth) + 'px');_height: expression((document.compatMode?documentElement.offsetHeight:document.body.offsetHeight) + 'px');\n}\n\n.xheHideArea{position:absolute;top:-1000px;left:-1000px;visibility:hidden;}"
  },
  {
    "path": "xheditor/xheditor_skin/vista/iframe.css",
    "content": "html{height:100%;background-color:#FFFFFF;}\nbody,td,th{font-family:Arial,Helvetica,sans-serif;font-size:12px;}\nbody{height:100%;*height:90%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;}\n\n.xhe-border{border:1px dotted #d3d3d3;}\n.xhe-border th,.xhe-border td{border:1px dotted #d3d3d3;}\n\n.editMode{margin:0px;padding:5px;overflow-y:auto;word-break:break-word;word-wrap:break-word;}\n.editMode img:-moz-broken {-moz-force-broken-image-icon:1;height:24px;width:24px;}\n.editMode embed{display:inline-block;border:1px dashed #FF4E4E;}\n.editMode embed[type=\"application/x-shockwave-flash\"]{background:url(img/flash.gif) center center no-repeat;}\n.editMode embed[type=\"application/x-mplayer2\"]{background:url(img/wmp.gif) center center no-repeat;}\n.editMode .xhe-paste{position:absolute;left:-1000px;overflow:hidden;width:1px;height:1px;}\n.editMode .xhe-anchor{display:inline-block;background: url(img/anchor.gif) no-repeat;border: 1px dotted #0000FF;width:16px;height:15px;overflow:hidden;}\n\n.sourceMode{margin:0px;padding:0px;overflow:hidden;height:100%;}\n.sourceMode textarea{*position:absolute;border:0px;margin:0px;padding:0px;width:100%;height:100%;overflow-y:auto;font-family:'Courier New',Courier,monospace !important;font-size:10pt;resize:none;outline:0;}\n\n.previewMode{margin:5px;padding:0px;}\n\n.showBlocktag p,.showBlocktag h1,.showBlocktag h2,.showBlocktag h3,.showBlocktag h4,.showBlocktag h5,.showBlocktag h6,.showBlocktag pre,.showBlocktag address,.showBlocktag div{background:none no-repeat scroll right top;border:1px dotted gray;}\n.showBlocktag p{background-image:url(img/tag-p.gif);}\n.showBlocktag h1{background-image:url(img/tag-h1.gif);}\n.showBlocktag h2{background-image:url(img/tag-h2.gif);}\n.showBlocktag h3{background-image:url(img/tag-h3.gif);}\n.showBlocktag h4{background-image:url(img/tag-h4.gif);}\n.showBlocktag h5{background-image:url(img/tag-h5.gif);}\n.showBlocktag h6{background-image:url(img/tag-h6.gif);}\n.showBlocktag pre{background-image:url(img/tag-pre.gif);}\n.showBlocktag address{background-image:url(img/tag-address.gif);}\n.showBlocktag div{background-image:url(img/tag-div.gif);}"
  },
  {
    "path": "xheditor/xheditor_skin/vista/ui.css",
    "content": ".xhe_vista table, .xhe_vista tr, .xhe_vista td, .xhe_vista iframe {border:0; margin:0; padding:0; background:transparent;text-decoration:none; font-weight:normal; color:#000}\n\n.xhe_vista table.xheLayout {display:inline-table;background:#E0E8F5; border:1px solid #99BBE8;width:100%;height:100%;}\n.xhe_vista td.xheTool {padding:1px 3px;border-bottom:1px solid #99BBE8;}\n.xhe_vista td.xheTool span{float:left;margin:2px 0px;}\n.xhe_vista td.xheTool br{clear:left;}\n\n.xhe_vista span.xheGStart{display:block;width:4px;height:22px;background:url(img/buttonbg.gif) -22px 0;}\n.xhe_vista span.xheGEnd{display:block;width:4px;height:22px;background:url(img/buttonbg.gif) -26px 0;}\n.xhe_vista span.xheSeparator{display:block;height:22px;width:4px;}\n\n.xhe_vista a.xheButton{display:inline-block;padding:1px;border:0px;background:url(img/buttonbg.gif);cursor:pointer;text-decoration:none;}\n.xhe_vista a.xheButton span{opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30);}\n.xhe_vista a.xheEnabled span{opacity:1; -ms-filter:'alpha(opacity=100)'; filter:alpha(opacity=100);}\n.xhe_vista a.xheEnabled:hover {background-color:#B2BBD0; background-position:0 -22px}\n.xhe_vista a.xheActive{background-color:#B2BBD0; background-position:0 -44px !important;}\n\n.xhe_vista a.xheButton span{display:block;margin:0px;height:20px;width:20px;overflow:hidden;}\n.xhe_vista span.xheIcon{background:url(img/icons.gif) no-repeat 20px 20px}\n\n.xhe_vista span.xheBtnCut {background-position:0 0}\n.xhe_vista span.xheBtnCopy {background-position:-20px 0}\n.xhe_vista span.xheBtnPaste {background-position:-40px 0}\n.xhe_vista span.xheBtnPastetext {background-position:-60px 0}\n.xhe_vista span.xheBtnBlocktag {background-position:-80px 0}\n.xhe_vista span.xheBtnFontface {background-position:-100px 0}\n.xhe_vista span.xheBtnFontSize {background-position:-120px 0}\n.xhe_vista span.xheBtnBold {background-position:-140px 0}\n.xhe_vista span.xheBtnItalic {background-position:-160px 0}\n.xhe_vista span.xheBtnUnderline {background-position:-180px 0}\n.xhe_vista span.xheBtnStrikethrough {background-position:-200px 0}\n.xhe_vista span.xheBtnFontColor {background-position:-220px 0}\n.xhe_vista span.xheBtnBackColor {background-position:-240px 0}\n.xhe_vista span.xheBtnSelectAll {background-position:-260px 0}\n.xhe_vista span.xheBtnRemoveformat {background-position:-280px 0}\n\n.xhe_vista span.xheBtnAlign {background-position:-300px 0}\n.xhe_vista span.xheBtnList {background-position:-320px 0}\n.xhe_vista span.xheBtnOutdent {background-position:-340px 0}\n.xhe_vista span.xheBtnIndent {background-position:-360px 0}\n\n.xhe_vista span.xheBtnLink {background-position:-380px 0}\n.xhe_vista span.xheBtnUnlink {background-position:-400px 0}\n.xhe_vista span.xheBtnAnchor {background-position:-420px 0}\n.xhe_vista span.xheBtnImg {background-position:-440px 0}\n.xhe_vista span.xheBtnFlash {background-position:-460px 0}\n.xhe_vista span.xheBtnMedia {background-position:-480px 0}\n.xhe_vista span.xheBtnHr {background-position:-500px 0}\n.xhe_vista span.xheBtnEmot {background-position:-520px 0}\n.xhe_vista span.xheBtnTable {background-position:-540px 0}\n\n.xhe_vista span.xheBtnSource {background-position:-560px 0}\n.xhe_vista span.xheBtnPreview {background-position:-580px 0}\n.xhe_vista span.xheBtnPrint {background-position:-600px 0}\n.xhe_vista span.xheBtnFullscreen {background-position:-620px 0}\n\n.xhe_vista span.xheBtnAbout {background-position:-640px 0}\n\n.xhe_vista .xheIframeArea{height:100%;}\n.xhe_vista iframe {display:block;background:#fff;width:100%;height:100%;}\n\n#xheCntLine{display:none;position:absolute;z-index:1000001;background:#fff;height:1px;font-size:0;}\n#xhePanel{display:none;position:absolute;z-index:1000000;border:#99BBE8 1px solid;background:#FDFEFF;text-align:left;}\n#xheShadow{display:none;position:absolute;z-index:999999;background:#000;opacity:0.2; -ms-filter:'alpha(opacity=20)'; filter:alpha(opacity=20);}\n.xheFixCancel{position:absolute;z-index:999998;background-color:#FFF;opacity:0; -ms-filter:'alpha(opacity=0)'; filter:alpha(opacity=0);}\n\n.xheMenu{padding:2px;overflow-x:hidden;overflow-y:auto;max-height:230px;}\n.xheMenu .xheMenuSeparator{margin:3px 0;border-top:1px solid #D8D8D8;}\n.xheMenu a{display:block;padding:3px 20px 3px 3px;line-height:normal;font-size:12px;color:#000;text-decoration:none;white-space:nowrap;}\n.xheMenu a:hover{background:#B8CFEE;text-decoration:none;color:#000;}\n.xheMenu p,.xheMenu h1,.xheMenu h2,.xheMenu h3,.xheMenu h4,.xheMenu h5,.xheMenu h6,.xheMenu pre,.xheMenu address,.xheMenu div{margin:0}\n\n.xheEmot div{padding:5px;overflow-x:hidden;overflow-y:auto;}\n.xheEmot div a{display:inline-block;margin:3px;padding:3px;overflow:hidden;background-repeat:no-repeat;background-position:center;text-decoration:none;}\n.xheEmot div a:hover{border:1px solid #99BBE8;padding:2px;}\n.xheEmot ul{border-top:1px solid #99BBE8;list-style:none;padding:0 10px;margin:0;font-size:12px;}\n.xheEmot li{float:left;margin:0 2px 5px 0;}\n.xheEmot li a{background:#fff;display:block;padding:0 8px;text-decoration:none;color:#000;line-height:20px;}\n.xheEmot li a:hover{text-decoration:underline;}\n.xheEmot li.cur{border:1px solid #99BBE8;border-top:none;position:relative;bottom:1px;}\n.xheEmot li.cur a{cursor:text;padding-top:1px;}\n.xheEmot li.cur a:hover{text-decoration:none;}\n\n\n.xheColor{padding:5px;}\n.xheColor a{display:inline-block;margin:1px;border:#999 1px solid;width:17px;height:9px;font-size:0;}\n.xheColor a:hover{border:#000 1px solid;}\n.xheColor a img{display:none;}\n\n.xheDialog{padding:10px;font-size:12px;font-family:monospace;}\n.xheDialog a{text-decoration:underline;color:#00f;}\n.xheDialog a:hover{text-decoration:underline;color:#00f}\n.xheDialog div{padding:2px 0px;}\n.xheDialog input{\n\tmargin:0;border-width:1px;border-style:solid;font-size:12px;\n\t*border-width:expression((type!=\"checkbox\")?'1px':0);*padding:expression((type==\"text\")?'1px':'auto');*width:expression((type==\"text\")?'160px':'auto');*border-color:expression((type==\"text\")?'#ABADB3':'#fff #888 #888 #fff');*background:expression((type==\"button\")?'#F0F0F0':'#FFFFFF');*cursor:expression((type==\"button\")?'pointer':'');*font-size:expression((type==\"button\")?'13px':'12px');\n}\n.xheDialog textarea{font-size:12px;resize:none;border:1px solid #ccc;}\n.xheDialog input[type=text]{padding:1px;width:160px;border-color:#ABADB3;}\n.xheDialog input[type=button]{margin:0;border-color:#fff #888 #888 #fff;background:#F0F0F0;cursor:pointer;font-size:13px;}\n.xheDialog input[type=file]{font-size:13px;}\n.xheDialog input[type=checkbox]{border:0;}\n.xheDialog select{margin:0;border:1px #ABADB3 solid;}\n.xheDialog input,.xheDialog select,.xheDialog textarea{border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;}\n.xheDialog input:focus,.xheDialog select:focus,.xheDialog textarea:focus{outline: 0;border-color: #EEC068;-webkit-box-shadow: 0 0 1px #EEC068;-moz-box-shadow: 0 0 1px #EEC068;box-shadow: 0 0 1px #EEC068;}\n.xheDialog .xheUpload{position: relative;display:inline-block;width:164px;}\n.xheDialog .xheUpload .xheBtn{position: absolute;top: 0px;left: 114px;width:50px;z-index: 1000001;padding:0;}\n.xheDialog .xheUpload .xheFile{cursor:pointer;position: absolute;top: 0px;left: 0px;width:164px;opacity:0;-ms-filter:'alpha(opacity=0)';filter:alpha(opacity=0);z-index: 1000002;}\n.xheDialog .xheUpload .xheText {position: absolute;width:107px;top: 0px;left: 0px;z-index: 1000003;}\n\n.xheModal{\n\tposition: fixed;z-index: 1000010;text-align:left;top:50%;left:50%;background:#FFF;border:1px solid #99BBE8;font-size:12px;\n\t_position:absolute;_margin-top:expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px');\n}\n.xheModalTitle{padding:3px;line-height:18px;background:url(img/titlebg.gif) repeat-x;border-bottom:1px solid #99BBE8;}\n.xheModalClose{float:right;width:30px;height:18px;background:url(img/close.gif);cursor:pointer;}\n.xheModalIfmWait{width:100%;height:100%;background:url(img/waiting.gif) no-repeat 50% 50%;margin:-16 0 0 -16;}\n.xheModalShadow{\n\tposition:fixed;z-index:1000009;top:50%;left:50%;background:#000;opacity:0.2; -ms-filter:'alpha(opacity=20)'; filter:alpha(opacity=20);\n\t_position:absolute;_margin-top:expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 5 + 'px');\n}\n.xheModalOverlay{\n\tposition: fixed;z-index:1000008;top: 0px;left: 0px;height:100%;width:100%;background-color:#000;opacity:0.2; -ms-filter:'alpha(opacity=20)'; filter:alpha(opacity=20);\n\t_position:absolute;_height:expression(Math.max(document.documentElement.clientHeight,document.documentElement.scrollHeight)+'px');_width:expression(Math.max(document.documentElement.clientWidth,document.documentElement.scrollWidth)+'px');\n}\n*html{\n\tbackground-image:url(about:blank);\n\tbackground-attachment:fixed;\n}\n\n.xheProgress{position:relative;width:280px;margin:auto;border:1px solid #C1C1C1;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background:url(img/progressbg.gif) #E9E9E9;}\n.xheProgress span{position:absolute;left:0;top:0;width:100%;text-align:center;line-height:15px;font-size:12px;color:#000;text-shadow: 1px 1px 0 #eee;}\n.xheProgress div{height:15px;width:1px;background:url(img/progress.gif) #31C135;}\n\n.xhe_Fullfix{overflow:hidden;}\n.xhe_Fullfix body{width:100%;height:100%;}\n.xhe_Fullscreen{\n\ttop:0px;left:0px;position:fixed;z-index:100000;width:100%;height:100%;background:#fff;\n\t_position:absolute;_top:expression((document.compatMode?documentElement.scrollTop:document.body.scrollTop)+'px');_width:expression((document.compatMode?documentElement.offsetWidth:document.body.offsetWidth) + 'px');_height:expression((document.compatMode?documentElement.offsetHeight:document.body.offsetHeight) + 'px');\n}\n\n.xheHideArea{position:absolute;top:-1000px;left:-1000px;visibility:hidden;}"
  }
]