From: Darren Date: Mon, 8 Oct 2012 20:39:22 +0000 (+0100) Subject: Switching old client with the new X-Git-Url: https://vcs.fsf.org/?a=commitdiff_plain;h=34b8d6bfa3dbf8c9dd89d1cd967173f150ecf6fc;p=KiwiIRC.git Switching old client with the new --- diff --git a/client_backbone/backbone-git.js b/client/backbone-git.js old mode 100755 new mode 100644 similarity index 100% rename from client_backbone/backbone-git.js rename to client/backbone-git.js diff --git a/client/css/border-radius.htc b/client/css/border-radius.htc deleted file mode 100644 index c3ae104..0000000 --- a/client/css/border-radius.htc +++ /dev/null @@ -1,143 +0,0 @@ ---Do not remove this if you are using-- -Original Author: Remiz Rahnas -Original Author URL: http://www.htmlremix.com -Published date: 2008/09/24 - -Changes by Nick Fetchak: -- IE8 standards mode compatibility -- VML elements now positioned behind original box rather than inside of it - should be less prone to breakage -Published date : 2009/11/18 - - - - - diff --git a/client/css/default.css b/client/css/default.css deleted file mode 100644 index 8abd3b3..0000000 --- a/client/css/default.css +++ /dev/null @@ -1,260 +0,0 @@ -body, html { - height: 100%; margin:0px; - font-size:14px; - line-height:1.4em; -} - - - - - -/* Style resets */ -#kiwi * { - padding:0px; margin:0px; -} -#kiwi ul { list-style:none; } - -#kiwi a { - color: #36C; text-decoration:none; - cursor: pointer; -} -#kiwi #login a { - color: #8D9713; - text-decoration:none; -} - - - -/* The main app container */ -#kiwi { - overflow:hidden; position:relative; - height:100%; - font-family:Arial, Helvetica, sans-serif; font-size:1em; - background:#EBEBEB; -} -#kiwi .messages { font-family:monospace; } -#kiwi.small_kiwi .userlist { right:-100px; } -#kiwi.small_kiwi .messages { right:10px; } - - -#kiwi .windowlist, #kiwi .utilityviewlist { - /*height: 65px;*/ - background-color:#1B1B1B; - font-size:0.9em; -} -#kiwi .windowlist ul, #kiwi .utilityviewlist ul { - overflow: hidden; - margin-right: 50px; - white-space: nowrap; - display:block; - /*height: 35px;*/ -} -#kiwi .windowlist ul li, #kiwi .utilityviewlist ul li { - float: left; list-style: inline; - display:inline; position:relative; - padding:5px; margin:3px; - border: 1px solid #333; - background-color: #eee; - - cursor: pointer; - - line-height: 1.4em; - vertical-align: middle; - - border-radius:5px; - -moz-border-radius:5px; - -webkit-border-radius:5px; - -khtml-border-radius:5px; - behavior: url(border-radius.htc); - -background-image: -webkit-gradient( - linear, - left top, - left bottom, - color-stop(0.38, rgb(238,238,238)), - color-stop(0.68, rgb(209,209,209)) -); -background-image: -moz-linear-gradient( - center top, - rgb(238,238,238) 38%, - rgb(209,209,209) 68% -); -} -#kiwi .windowlist .active, #kiwi .utilityviewlist .active { padding-right:23px; } -#kiwi .windowlist .highlight, #kiwi .utilityviewlist .highlight { - background: #990000; - font-weight: bold; -} -#kiwi .windowlist .activity, #kiwi .utilityviewlist .activity { font-weight: bold; background: #009900; } - -#kiwi .windowlist ul li img, #kiwi .utilityviewlist ul li img { width:1em; height:1em; top:7px; right:5px; position:absolute; } -#kiwi .windowlist ul li img.icon, #kiwi .utilityviewlist ul li img.icon { left:5px; top:2px; height:auto; width:auto;} -/*#kiwi .windowlist ul li a { - margin:3px; - border: 1px solid #333; - background-color: #eee; - display: inline; -}*/ - -#kiwi .poweredby { float:right; margin:8px 15px; cursor:pointer; color:#EBEBEB; font-family: arial;} -#kiwi .poweredby img { height:1.5em; float:right; margin-left:7px; } - - -#kiwi .userlist { - position: absolute; - width: 100px; - top:92px; right:0px; - bottom: 55px; - overflow-y:auto; overflow-x:hidden; -} -#kiwi .userlist ul { display: none; margin:5px; } -#kiwi .userlist ul.active { display:block; } -#kiwi .userlist ul li { padding:1px 2px; cursor:pointer; } -#kiwi .userlist ul li:hover { background-color:#FAF7D3; } -#kiwi .userlist ul li a.nick { display:block; color:black; } - -#kiwi .userlist ul li .userbox { margin:0px 5px 5px 5px; font-size:.9em; } -#kiwi .userlist ul li .userbox a { display:block; text-decoration:none; border-bottom: 1px dashed #aaa; } - -#nicklist_resize { - position:absolute; cursor:w-resize; width:5px; - background: url(/img/scroll_handle.png) no-repeat; - background-position: center; -} - -#kiwi .cur_topic { - font-family:Verdana, Geneva, sans-serif; - font-size:.85em; - line-height:18px; vertical-align:middle; - /*height:18px;*/ - text-align:center; - /*white-space: nowrap;*/ overflow: hidden; - padding: 3px 5px; - border-bottom:3px solid #1B1B1B; - -} - - -#kiwi_menu { - display:none; - position:absolute; - right:0px; - background: gray; - border: 1px solid dark-gray; -} -.cur_topic .edit:hover #kiwi_menu { display:inline; } - - - -#kiwi .windows { - position: absolute; - top:92px; left:0px; - right: 110px; bottom:30px; - outline: none; -} -#kiwi .panel { overflow-y:scroll; height:100%; } -#panel1 { float:left; width:100%;} -#panel2 { float:right; width:0%; } -#kiwi .messages { - overflow-x:wrap; - border:none; - display: none; - height: 100%; -} -#kiwi .messages a { - text-decoration:none; -} -#kiwi .messages.active { display:block; } - -#kiwi .messages .msg { border-bottom: 1px solid #CCC; padding:1px; font-size:0.9em; } -#kiwi .messages .msg .time { width:6em; float:left; color:#777; } -#kiwi .messages .msg .nick { width:7em; text-align:right; float:left; font-family:arial; font-size:12px; } -#kiwi .messages .msg .text { margin-left:15em; white-space:pre-wrap; word-wrap:break-word; } - -#kiwi .messages .msg.action .nick { display:none; } -#kiwi .messages .msg.action .text { margin-left:9em; } -#kiwi .messages .msg.status .nick { display:none; } -#kiwi .messages .msg.status .text { color:#990000; margin-left:9em; font-weight:bold; } -#kiwi .messages .msg.topic .nick { display:none; } -#kiwi .messages .msg.topic .text { color:#009900; margin-left:9em; font-style: italic; } -/*#kiwi .messages .msg.motd .nick { display:none; }*/ -#kiwi .messages .msg.motd { border:none; } -#kiwi .messages .msg.motd .text { color:#666; } -#kiwi .messages .msg.whois .nick { font-weight:normal; } -#kiwi .messages .msg.whois .text { margin-left:18em; padding-left:1em; border-left:1px dashed #999; } -#kiwi .messages .msg.error .text { - border:1px solid #A33F3F; background-color:#D28A8A; - padding:0.5em; margin-top:1em; margin-bottom:1em; margin-right:2em; -} - - -/* - * Link tooltips - */ -#kiwi .messages a { position: relative; } -#kiwi .messages a .tt { - position: absolute; display:none; - padding: 1em 1.5em; - /*background-image: -webkit-gradient( - linear, - left bottom, - left top, - color-stop(0.04, rgb(164,200,126)), - color-stop(0.52, rgb(197,240,164)) - ); - background-image: -moz-linear-gradient( - center bottom, - rgb(164,200,126) 4%, - rgb(197,240,164) 52% - ); - border: 1px solid #444; - border-radius:5px; - -moz-border-radius:5px; - -webkit-border-radius:5px;*/ - font-size: 0.9em; -} -#kiwi .messages a:hover .tt { display:inline; cursor:default; } -#kiwi .messages a:hover .tt a { cursor:pointer; color:inherit; } -#kiwi .messages a:active .tt a { color:inherit; } - -#kiwi .messages a.link_img { border: 1px solid gray; } - - - - -#kiwi .control { - position: absolute; - bottom:0px; left: 0px; - /*height:55px;*/ - /*padding: 3px;*/ - width: 100%; - background-color:#1B1B1B; -} -#kiwi .control .msginput { - background-color:#fff; margin:3px; - position:relative; height:1.7em; - - border-radius:5px; - -moz-border-radius:5px; - -webkit-border-radius:5px; - -khtml-border-radius:5px; - behavior: url(border-radius.htc); -} -#kiwi .control .nick { text-align: right; width:11em; position:absolute; padding:2px; } -#kiwi .control .nick a { text-decoration:none; } -#kiwi .control #kiwi_msginput_wrapper { - border:none; - position:absolute; - right:5px; left: 12.2em; - height:1.7em; -} -#kiwi .control input { - width: 100%; height: 100%; - position: relative; - border: medium none; - outline:none; -} -#kiwi .control .plugins { margin:3px; margin-top:7px; } -#kiwi .control .plugins ul li { - display:inline; font-size:0.8em; margin-left:1em; -} \ No newline at end of file diff --git a/client_backbone/css/style.css b/client/css/style.css similarity index 100% rename from client_backbone/css/style.css rename to client/css/style.css diff --git a/client/css/touchscreen_tweaks.css b/client/css/touchscreen_tweaks.css deleted file mode 100644 index 84ffadf..0000000 --- a/client/css/touchscreen_tweaks.css +++ /dev/null @@ -1,13 +0,0 @@ -#kiwi.touchscreen.portrait .userlist { display:none; } - -#kiwi.touchscreen.portrait .messages { right:0px; } - -#kiwi.touchscreen .windowlist ul li { padding:10px; } - -#kiwi .windowlist ul { - /* border: 1px solid blue;*/ - margin-right: 0px; /* i* safari seem to behave differently here :/ */ - height: 50px; -} - -#kiwi.touchscreen .userlist { line-height:1.6em; } \ No newline at end of file diff --git a/client/css/ui.css b/client/css/ui.css deleted file mode 100644 index 51d5ff7..0000000 --- a/client/css/ui.css +++ /dev/null @@ -1,285 +0,0 @@ -/* - #################### - Common - #################### -*/ -#kiwi .link { cursor:pointer; color:blue; } -#kiwi .newnick { - bottom:40px; - left:20px; -} - - -#kiwi .plugins a { cursor:pointer; color:#EBEBEB; font-family:verdana; } -#kiwi .plugin_file { left:20px; } - -#kiwi .plugin_file .list select { width:150px; height:200px; } -#kiwi .plugin_file .list button { float:right; } - - - - - - - -#kiwi .connectwindow { - background:#1b1b1b; color: #D4D4D4; - z-index:50; position:absolute; - top:0px; bottom:0px; - overflow-y:scroll; - width:100%; height:100%; -} -#kiwi h1.logo { - display:block; width:180px; height:48px; - padding-left:58px; margin:70px auto 60px; - background:url(../img/ico.png) no-repeat; - font-size:1.3em; line-height:48px; font-weight:normal; - vertical-align: middle; -} -#kiwi h1 a { color:#D4D4D4; } -#kiwi #login { max-width:665px; margin:0px auto; padding:0px 1em; } -#kiwi #login ul { list-style:none; } -#kiwi #login ul li { overflow:show; margin-bottom:10px; } -#kiwi #login ul li.section { margin-top:25px; } -#kiwi #login ul li label { float:left; text-align:right; padding-right:.5em; } -#kiwi #login input { - border:none; - box-shadow: inset 0 1px 2px rgba(0,0,0,0.5),0 1px 0px rgba(255,255,255,0.3); - -} -#kiwi #login input[type=checkbox] { width:auto !important; } -#kiwi #login .more { border-top: 1px dotted #888888; font-size: 0.9em;} -#kiwi #login .more_link { - font-size:12px; - position:relative; - top:-16px; - background: url(../img/more.png) no-repeat right 5px; - padding-right: 12px; - color:#888; -} - -#kiwi #login .content.top { - width:470px; - margin:30px auto 60px; -} -#kiwi #login .content.top ul { font-size:20px; } -#kiwi #login .content.top label { width:8em; } -#kiwi #login .content.top input { - width:240px; padding:.2em .5em; - font-size:.8em; text-align:center; - background:#D4D4D4; - border-radius:4px; -moz-border-radius:4px; -} -#kiwi #login .content.top a { display:block; text-align:right; font-size:22px; margin-top:30px; } - -#kiwi #login .content.bottom { width:350px; margin:30px auto; display:none; } -#kiwi #login .content.bottom ul { font-size:18px; } -#kiwi #login .content.bottom label { width:25%; } -#kiwi #login .content.bottom input { width:216px; font-size:.8em; no-repeat; padding:.2em .5em; background:#D4D4D4; border-radius:4px; -moz-border-radius:4px; } -#kiwi #login .content.bottom a { display:block; text-align:right; font-size:16px; margin-top:30px; } - - -#kiwi .newnick .caption { display:block; margin-bottom:1em; } - -#kiwi .about { - top: 100px; - left: 200px; - width: 400px; - z-index: 1; - display: none; -} -#kiwi .about button { float:right; } - -#kiwi .box { - color:#eee; - min-width:150px; - background: url(../img/trans_back.png) repeat; - border-radius:5px; - -moz-border-radius:5px; - -webkit-border-radius:5px; - -khtml-border-radius:5px; - padding:7px; - - /*background-color: #819463; - padding: 10px;*/ - position:absolute; - - /* - box-shadow: 0px 0px 20px #555; - -webkit-box-shadow: 0px 0px 20px #555; - -moz-box-shadow: 0px 0px 20px #555; - filter: progid:DXImageTransform.Microsoft.dropShadow(color=#555, offX=0, offY=0, positive=true); - - border-radius: 4px; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - */ -} - -.box .boxarea { - color:black; - padding:15px !important; - background-color:#D4D4D4; - border-radius:3px; - -moz-border-radius:3px; - -webkit-border-radius:3px; - -khtml-border-radius:3px; - overflow:hidden; -} - - - - - - - - - - - - - - - - -#alertbox { - background-image: linear-gradient(bottom, rgb(212,212,45) 43%, rgb(171,171,0) 72%); - background-image: -o-linear-gradient(bottom, rgb(212,212,45) 43%, rgb(171,171,0) 72%); - background-image: -moz-linear-gradient(bottom, rgb(212,212,45) 43%, rgb(171,171,0) 72%); - background-image: -webkit-linear-gradient(bottom, rgb(212,212,45) 43%, rgb(171,171,0) 72%); - background-image: -ms-linear-gradient(bottom, rgb(212,212,45) 43%, rgb(171,171,0) 72%); - - background-image: -webkit-gradient( - linear, - left bottom, - left top, - color-stop(0.43, rgb(212,212,45)), - color-stop(0.72, rgb(171,171,0)) - ); -} - - - - - - - - - - -/* TipTip CSS - Version 1.2 */ - -#tiptip_holder { - display: none; - position: absolute; - top: 0; - left: 0; - z-index: 99999; -} - -#tiptip_holder.tip_top { - padding-bottom: 5px; -} - -#tiptip_holder.tip_bottom { - padding-top: 5px; -} - -#tiptip_holder.tip_right { - padding-left: 5px; -} - -#tiptip_holder.tip_left { - padding-right: 5px; -} - -#tiptip_content { - /*font-size: 11px; - color: #fff; - text-shadow: 0 0 2px #000;*/ - font-size:0.9em; - color:#fff; - - padding: 4px 8px; - border: 1px solid rgba(255,255,255,0.25); - background-color: rgb(25,25,25); - background-color: rgba(25,25,25,0.92); - background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(transparent), to(#000)); - border-radius: 3px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - box-shadow: 0 0 3px #555; - -webkit-box-shadow: 0 0 3px #555; - -moz-box-shadow: 0 0 3px #555; -} - -#tiptip_arrow, #tiptip_arrow_inner { - position: absolute; - border-color: transparent; - border-style: solid; - border-width: 6px; - height: 0; - width: 0; -} - -#tiptip_holder.tip_top #tiptip_arrow { - border-top-color: #fff; - border-top-color: rgba(255,255,255,0.35); -} - -#tiptip_holder.tip_bottom #tiptip_arrow { - border-bottom-color: #fff; - border-bottom-color: rgba(255,255,255,0.35); -} - -#tiptip_holder.tip_right #tiptip_arrow { - border-right-color: #fff; - border-right-color: rgba(255,255,255,0.35); -} - -#tiptip_holder.tip_left #tiptip_arrow { - border-left-color: #fff; - border-left-color: rgba(255,255,255,0.35); -} - -#tiptip_holder.tip_top #tiptip_arrow_inner { - margin-top: -7px; - margin-left: -6px; - border-top-color: rgb(25,25,25); - border-top-color: rgba(25,25,25,0.92); -} - -#tiptip_holder.tip_bottom #tiptip_arrow_inner { - margin-top: -5px; - margin-left: -6px; - border-bottom-color: rgb(25,25,25); - border-bottom-color: rgba(25,25,25,0.92); -} - -#tiptip_holder.tip_right #tiptip_arrow_inner { - margin-top: -6px; - margin-left: -5px; - border-right-color: rgb(25,25,25); - border-right-color: rgba(25,25,25,0.92); -} - -#tiptip_holder.tip_left #tiptip_arrow_inner { - margin-top: -6px; - margin-left: -7px; - border-left-color: rgb(25,25,25); - border-left-color: rgba(25,25,25,0.92); -} - -/* Webkit Hacks */ -@media screen and (-webkit-min-device-pixel-ratio:0) { - #tiptip_content { - padding: 4px 8px 5px 8px; - background-color: rgba(45,45,45,0.88); - } - #tiptip_holder.tip_bottom #tiptip_arrow_inner { - border-bottom-color: rgba(45,45,45,0.88); - } - #tiptip_holder.tip_top #tiptip_arrow_inner { - border-top-color: rgba(20,20,20,0.92); - } -} \ No newline at end of file diff --git a/client_backbone/dev/app.js b/client/dev/app.js old mode 100755 new mode 100644 similarity index 100% rename from client_backbone/dev/app.js rename to client/dev/app.js diff --git a/client_backbone/dev/applet_chanlist.js b/client/dev/applet_chanlist.js similarity index 100% rename from client_backbone/dev/applet_chanlist.js rename to client/dev/applet_chanlist.js diff --git a/client_backbone/dev/applet_nickserv.js b/client/dev/applet_nickserv.js old mode 100755 new mode 100644 similarity index 100% rename from client_backbone/dev/applet_nickserv.js rename to client/dev/applet_nickserv.js diff --git a/client_backbone/dev/applet_settings.js b/client/dev/applet_settings.js old mode 100755 new mode 100644 similarity index 100% rename from client_backbone/dev/applet_settings.js rename to client/dev/applet_settings.js diff --git a/client_backbone/dev/build.js b/client/dev/build.js old mode 100755 new mode 100644 similarity index 100% rename from client_backbone/dev/build.js rename to client/dev/build.js diff --git a/client_backbone/dev/model_applet.js b/client/dev/model_applet.js old mode 100755 new mode 100644 similarity index 100% rename from client_backbone/dev/model_applet.js rename to client/dev/model_applet.js diff --git a/client_backbone/dev/model_application.js b/client/dev/model_application.js old mode 100755 new mode 100644 similarity index 100% rename from client_backbone/dev/model_application.js rename to client/dev/model_application.js diff --git a/client_backbone/dev/model_channel.js b/client/dev/model_channel.js old mode 100755 new mode 100644 similarity index 100% rename from client_backbone/dev/model_channel.js rename to client/dev/model_channel.js diff --git a/client_backbone/dev/model_gateway.js b/client/dev/model_gateway.js old mode 100755 new mode 100644 similarity index 96% rename from client_backbone/dev/model_gateway.js rename to client/dev/model_gateway.js index f0657ad..dba907f --- a/client_backbone/dev/model_gateway.js +++ b/client/dev/model_gateway.js @@ -159,7 +159,7 @@ kiwi.model.Gateway = function () { * Parses the response from the server */ this.parse = function (command, data) { - //console.log('gateway event', command, data); + console.log('gateway event', command, data); if (command !== undefined) { that.trigger('on' + command, data); diff --git a/client_backbone/dev/model_member.js b/client/dev/model_member.js old mode 100755 new mode 100644 similarity index 100% rename from client_backbone/dev/model_member.js rename to client/dev/model_member.js diff --git a/client_backbone/dev/model_memberlist.js b/client/dev/model_memberlist.js old mode 100755 new mode 100644 similarity index 100% rename from client_backbone/dev/model_memberlist.js rename to client/dev/model_memberlist.js diff --git a/client_backbone/dev/model_panel.js b/client/dev/model_panel.js old mode 100755 new mode 100644 similarity index 100% rename from client_backbone/dev/model_panel.js rename to client/dev/model_panel.js diff --git a/client_backbone/dev/model_panellist.js b/client/dev/model_panellist.js old mode 100755 new mode 100644 similarity index 100% rename from client_backbone/dev/model_panellist.js rename to client/dev/model_panellist.js diff --git a/client_backbone/dev/model_server.js b/client/dev/model_server.js old mode 100755 new mode 100644 similarity index 100% rename from client_backbone/dev/model_server.js rename to client/dev/model_server.js diff --git a/client_backbone/dev/utils.js b/client/dev/utils.js old mode 100755 new mode 100644 similarity index 100% rename from client_backbone/dev/utils.js rename to client/dev/utils.js diff --git a/client_backbone/dev/view.js b/client/dev/view.js old mode 100755 new mode 100644 similarity index 100% rename from client_backbone/dev/view.js rename to client/dev/view.js diff --git a/client/img/app_menu.png b/client/img/app_menu.png deleted file mode 100644 index 1cbbc47..0000000 Binary files a/client/img/app_menu.png and /dev/null differ diff --git a/client_backbone/img/background-light.png b/client/img/background-light.png similarity index 100% rename from client_backbone/img/background-light.png rename to client/img/background-light.png diff --git a/client/img/logo.png b/client/img/logo.png deleted file mode 100644 index 21b08d6..0000000 Binary files a/client/img/logo.png and /dev/null differ diff --git a/client_backbone/img/resize_handle.png b/client/img/resize_handle.png similarity index 100% rename from client_backbone/img/resize_handle.png rename to client/img/resize_handle.png diff --git a/client/img/scroll_handle.png b/client/img/scroll_handle.png deleted file mode 100644 index a196e65..0000000 Binary files a/client/img/scroll_handle.png and /dev/null differ diff --git a/client_backbone/img/server_tab.png b/client/img/server_tab.png similarity index 100% rename from client_backbone/img/server_tab.png rename to client/img/server_tab.png diff --git a/client/img/trans_back.png b/client/img/trans_back.png deleted file mode 100644 index f17dc9d..0000000 Binary files a/client/img/trans_back.png and /dev/null differ diff --git a/client_backbone/index.html b/client/index.html old mode 100755 new mode 100644 similarity index 100% rename from client_backbone/index.html rename to client/index.html diff --git a/client/index.html.jade b/client/index.html.jade deleted file mode 100755 index eb96042..0000000 --- a/client/index.html.jade +++ /dev/null @@ -1,218 +0,0 @@ -!!! 5 -html(lang="en-gb") - head - - meta(http-equiv="Content-Type", content="text/html; charset=utf-8") - - if ((agent === 'android') || (agent === 'iphone') || (agent === 'ipad') || (agent === 'ipod')) - meta(name="viewport", content="width=device-width,user-scalable=no") - - title Kiwi IRC - link(rel="shortcut icon", href="/img/ico.png") - link(rel="stylesheet", type="text/css", href="/css/default.css") - link(rel="stylesheet", type="text/css", href="/css/ui.css") - - - if (touchscreen) - link(rel="stylesheet", type="text/css", href="css/touchscreen_tweaks.css") - script(type="text/javascript", src="//ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js") - script(type="text/javascript") - !window.jQuery && document.write(unescape('%3Cscript type="text/javascript" src="js/jquery-1.6.4.min.js"%3E%3C/script%3E')) - script(type="text/javascript", src="//ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.min.js") - script(type="text/javascript") - !window.jQuery.ui && document.write(unescape('%3Cscript type="text/javascript" src="js/jquery-ui.1.8.16.min.js"%3E%3C/script%3E')) - - - body - - div#kiwi - div.connectwindow - h1.logo - a(href="http://www.kiwiirc.com/") Powered by Kiwi IRC - div#login - form.formconnectwindow - div.content.top - ul - li - label(for="nick") Your nickname: - input#nick.nick(type="text", name="nick", placeholder="Your nick..", value=nick) - a.connect(href="") Connect... - - - var display - - if (server_set) - - display = 'display:none' - - else - - display = ''; - div.more(style=display) - a(href="", class="more_link") more - div.content.bottom - ul - li - label(for="channel") Channel: - input#channel.channel(type="text", name="channel", value="#kiwiirc") - li - label(for="network") Server: - input#network.network(type="text", name="network", value=server) - li(class="section") - label(for="port") Port: - input#port.port(type="text", name="port", value=port) - li - label(for="password") Password: - input#password.password(type="text", name="password") - li - label(for="ssl") SSL: - - if (ssl) - input#ssl.ssl(type="checkbox", name="ssl", checked) - - else - input#ssl.ssl(type="checkbox", name="ssl") - - a.connect(href="") Connect... - - - - div.toolbars - div.windowlist - div.poweredby Powered by Kiwi IRC - img(src="/img/ico.png") - ul - - div.utilityviewlist - ul - - div.cur_topic(contenteditable="true", spellcheck="true") - div.topic(style="margin-right:5em; overflow:hidden; white-space: pre-wrap; word-wrap: break-word;") - - div.userlist - ul - - div#windows.windows - div#panel1.panel - div.scroller(style="width:100%;height:100%;") - - div#panel2.panel - - div.control - div.msginput - div.nick - a - | : - div#kiwi_msginput_wrapper - input#kiwi_msginput(type="text", name="kiwi_msginput") - div.plugins - ul - li - a.load_plugin_file Plugins - - if (debug) - li - a.reload_css Reload CSS - - script(type="text/javascript", src="/socket.io/socket.io.js") - script(type="text/javascript", src="/js/jquery.json-2.2.min.js") - - - if (debug) - script(type="text/javascript", src="/js/underscore.min.js") - script(type="text/javascript", src="/js/util.js") - script(type="text/javascript", src="/js/backbone-git.js"); - script(type="text/javascript", src="/js/gateway.js") - script(type="text/javascript", src="/js/model.js") - script(type="text/javascript", src="/js/view.js") - script(type="text/javascript", src="/js/front.js") - script(type="text/javascript", src="/js/front.events.js") - script(type="text/javascript", src="/js/front.ui.js") - script(type="text/javascript", src="/js/iscroll.js") - - if (!debug) - script(type="text/javascript", src="/js/all.js") - - //script(type="text/javascript", src="/js/plugins.js") - - - if (touchscreen) - script(type="text/javascript", src="/js/touchscreen_tweaks.js") - - - var proto - - if (secure) - - proto = 'https' - - else - - proto = 'http' - script(type="text/javascript") - var agent = '#{agent}'; - var touchscreen = #{touchscreen}; - var init_data = {}; - var kiwi_server = '#{proto}://' + document.location.host + '/kiwi'; - var touch_scroll; - - $(document).ready(function(){ - manageDebug(#{debug}); - - //#channel,##channel,&channel - var chans = document.location.hash.match(/[#&]+[^ ,\\007]+/g); - if(chans != null && chans.length > 0) { - init_data.channel = chans.join(','); - } - - kiwi.front.init(); - kiwi.gateway.start(kiwi_server); - - addEvents(); - $('.nick').focus(); - }); - - - function addEvents(){ - $('.more_link').click(function(){ $('.content.bottom').slideDown('fast'); $('.channel').focus(); return false; }); - $('a.connect').click(function(){ $('.formconnectwindow').submit(); return false; }); - - var input_submit = function(e){ - if (e.which === 13) $('.formconnectwindow').submit(); - } - $('.formconnectwindow .nick').keydown(input_submit); - $('.formconnectwindow .channel').keydown(input_submit); - $('.formconnectwindow .network').keydown(input_submit); - $('.formconnectwindow .port').keydown(input_submit); - $('.formconnectwindow .password').keydown(input_submit); - } - - - script#tmpl_about_box(type="text/x-jquery-tmpl") - |

Kiwi IRC

- |

An alternative to downloading an irc client. Kiwi IRC is the best web app you'll use for the next couple years.

- | - |

${about}

- - script#tmpl_change_nick(type="text/x-jquery-tmpl") - |
- | - | Your new nickname:
- |
- |
- | Cancel - |
- |
- - - script#tmpl_plugins(type="text/x-jquery-tmpl") - |
- |

Kiwi plugins

- |

- | - | - |

- |
- |
- | Plugin file URL:
- |
- |
- | Cancel - |
- |
- - script#tmpl_user_box(type="text/x-jquery-tmpl") - |
- | - | Message - | Info - |
- - script#tmpl_network_menu(type="text/x-jquery-tmpl") - | diff --git a/client_backbone/jquery-1.7.1.min.js b/client/jquery-1.7.1.min.js old mode 100755 new mode 100644 similarity index 100% rename from client_backbone/jquery-1.7.1.min.js rename to client/jquery-1.7.1.min.js diff --git a/client/js/backbone-0.5.3-min.js b/client/js/backbone-0.5.3-min.js deleted file mode 100755 index 08623c0..0000000 --- a/client/js/backbone-0.5.3-min.js +++ /dev/null @@ -1,34 +0,0 @@ -// Backbone.js 0.5.3 -// (c) 2010 Jeremy Ashkenas, DocumentCloud Inc. -// Backbone may be freely distributed under the MIT license. -// For all details and documentation: -// http://documentcloud.github.com/backbone -(function(){var h=this,p=h.Backbone,e;e=typeof exports!=="undefined"?exports:h.Backbone={};e.VERSION="0.5.3";var f=h._;if(!f&&typeof require!=="undefined")f=require("underscore")._;var g=h.jQuery||h.Zepto;e.noConflict=function(){h.Backbone=p;return this};e.emulateHTTP=!1;e.emulateJSON=!1;e.Events={bind:function(a,b,c){var d=this._callbacks||(this._callbacks={});(d[a]||(d[a]=[])).push([b,c]);return this},unbind:function(a,b){var c;if(a){if(c=this._callbacks)if(b){c=c[a];if(!c)return this;for(var d= -0,e=c.length;d/g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/")},has:function(a){return this.attributes[a]!=null},set:function(a,b){b||(b={});if(!a)return this;if(a.attributes)a=a.attributes;var c=this.attributes,d=this._escapedAttributes;if(!b.silent&&this.validate&&!this._performValidation(a,b))return!1;if(this.idAttribute in a)this.id=a[this.idAttribute]; -var e=this._changing;this._changing=!0;for(var g in a){var h=a[g];if(!f.isEqual(c[g],h))c[g]=h,delete d[g],this._changed=!0,b.silent||this.trigger("change:"+g,this,h,b)}!e&&!b.silent&&this._changed&&this.change(b);this._changing=!1;return this},unset:function(a,b){if(!(a in this.attributes))return this;b||(b={});var c={};c[a]=void 0;if(!b.silent&&this.validate&&!this._performValidation(c,b))return!1;delete this.attributes[a];delete this._escapedAttributes[a];a==this.idAttribute&&delete this.id;this._changed= -!0;b.silent||(this.trigger("change:"+a,this,void 0,b),this.change(b));return this},clear:function(a){a||(a={});var b,c=this.attributes,d={};for(b in c)d[b]=void 0;if(!a.silent&&this.validate&&!this._performValidation(d,a))return!1;this.attributes={};this._escapedAttributes={};this._changed=!0;if(!a.silent){for(b in c)this.trigger("change:"+b,this,void 0,a);this.change(a)}return this},fetch:function(a){a||(a={});var b=this,c=a.success;a.success=function(d,e,f){if(!b.set(b.parse(d,f),a))return!1;c&& -c(b,d)};a.error=i(a.error,b,a);return(this.sync||e.sync).call(this,"read",this,a)},save:function(a,b){b||(b={});if(a&&!this.set(a,b))return!1;var c=this,d=b.success;b.success=function(a,e,f){if(!c.set(c.parse(a,f),b))return!1;d&&d(c,a,f)};b.error=i(b.error,c,b);var f=this.isNew()?"create":"update";return(this.sync||e.sync).call(this,f,this,b)},destroy:function(a){a||(a={});if(this.isNew())return this.trigger("destroy",this,this.collection,a);var b=this,c=a.success;a.success=function(d){b.trigger("destroy", -b,b.collection,a);c&&c(b,d)};a.error=i(a.error,b,a);return(this.sync||e.sync).call(this,"delete",this,a)},url:function(){var a=k(this.collection)||this.urlRoot||l();if(this.isNew())return a;return a+(a.charAt(a.length-1)=="/"?"":"/")+encodeURIComponent(this.id)},parse:function(a){return a},clone:function(){return new this.constructor(this)},isNew:function(){return this.id==null},change:function(a){this.trigger("change",this,a);this._previousAttributes=f.clone(this.attributes);this._changed=!1},hasChanged:function(a){if(a)return this._previousAttributes[a]!= -this.attributes[a];return this._changed},changedAttributes:function(a){a||(a=this.attributes);var b=this._previousAttributes,c=!1,d;for(d in a)f.isEqual(b[d],a[d])||(c=c||{},c[d]=a[d]);return c},previous:function(a){if(!a||!this._previousAttributes)return null;return this._previousAttributes[a]},previousAttributes:function(){return f.clone(this._previousAttributes)},_performValidation:function(a,b){var c=this.validate(a);if(c)return b.error?b.error(this,c,b):this.trigger("error",this,c,b),!1;return!0}}); -e.Collection=function(a,b){b||(b={});if(b.comparator)this.comparator=b.comparator;f.bindAll(this,"_onModelEvent","_removeReference");this._reset();a&&this.reset(a,{silent:!0});this.initialize.apply(this,arguments)};f.extend(e.Collection.prototype,e.Events,{model:e.Model,initialize:function(){},toJSON:function(){return this.map(function(a){return a.toJSON()})},add:function(a,b){if(f.isArray(a))for(var c=0,d=a.length;c').hide().appendTo("body")[0].contentWindow,this.navigate(a); -this._hasPushState?g(window).bind("popstate",this.checkUrl):"onhashchange"in window&&!b?g(window).bind("hashchange",this.checkUrl):setInterval(this.checkUrl,this.interval);this.fragment=a;m=!0;a=window.location;b=a.pathname==this.options.root;if(this._wantsPushState&&!this._hasPushState&&!b)return this.fragment=this.getFragment(null,!0),window.location.replace(this.options.root+"#"+this.fragment),!0;else if(this._wantsPushState&&this._hasPushState&&b&&a.hash)this.fragment=a.hash.replace(j,""),window.history.replaceState({}, -document.title,a.protocol+"//"+a.host+this.options.root+this.fragment);if(!this.options.silent)return this.loadUrl()},route:function(a,b){this.handlers.unshift({route:a,callback:b})},checkUrl:function(){var a=this.getFragment();a==this.fragment&&this.iframe&&(a=this.getFragment(this.iframe.location.hash));if(a==this.fragment||a==decodeURIComponent(this.fragment))return!1;this.iframe&&this.navigate(a);this.loadUrl()||this.loadUrl(window.location.hash)},loadUrl:function(a){var b=this.fragment=this.getFragment(a); -return f.any(this.handlers,function(a){if(a.route.test(b))return a.callback(b),!0})},navigate:function(a,b){var c=(a||"").replace(j,"");if(!(this.fragment==c||this.fragment==decodeURIComponent(c))){if(this._hasPushState){var d=window.location;c.indexOf(this.options.root)!=0&&(c=this.options.root+c);this.fragment=c;window.history.pushState({},document.title,d.protocol+"//"+d.host+c)}else if(window.location.hash=this.fragment=c,this.iframe&&c!=this.getFragment(this.iframe.location.hash))this.iframe.document.open().close(), -this.iframe.location.hash=c;b&&this.loadUrl(a)}}});e.View=function(a){this.cid=f.uniqueId("view");this._configure(a||{});this._ensureElement();this.delegateEvents();this.initialize.apply(this,arguments)};var u=/^(\S+)\s*(.*)$/,n=["model","collection","el","id","attributes","className","tagName"];f.extend(e.View.prototype,e.Events,{tagName:"div",$:function(a){return g(a,this.el)},initialize:function(){},render:function(){return this},remove:function(){g(this.el).remove();return this},make:function(a, -b,c){a=document.createElement(a);b&&g(a).attr(b);c&&g(a).html(c);return a},delegateEvents:function(a){if(a||(a=this.events))for(var b in f.isFunction(a)&&(a=a.call(this)),g(this.el).unbind(".delegateEvents"+this.cid),a){var c=this[a[b]];if(!c)throw Error('Event "'+a[b]+'" does not exist');var d=b.match(u),e=d[1];d=d[2];c=f.bind(c,this);e+=".delegateEvents"+this.cid;d===""?g(this.el).bind(e,c):g(this.el).delegate(d,e,c)}},_configure:function(a){this.options&&(a=f.extend({},this.options,a));for(var b= -0,c=n.length;b').hide().appendTo('body')[0].contentWindow; - this.navigate(fragment); - } - - // Depending on whether we're using pushState or hashes, and whether - // 'onhashchange' is supported, determine how we check the URL state. - if (this._hasPushState) { - $(window).bind('popstate', this.checkUrl); - } else if (this._wantsHashChange && ('onhashchange' in window) && !oldIE) { - $(window).bind('hashchange', this.checkUrl); - } else if (this._wantsHashChange) { - this._checkUrlInterval = setInterval(this.checkUrl, this.interval); - } - - // Determine if we need to change the base url, for a pushState link - // opened by a non-pushState browser. - this.fragment = fragment; - historyStarted = true; - var loc = window.location; - var atRoot = loc.pathname == this.options.root; - - // If we've started off with a route from a `pushState`-enabled browser, - // but we're currently in a browser that doesn't support it... - if (this._wantsHashChange && this._wantsPushState && !this._hasPushState && !atRoot) { - this.fragment = this.getFragment(null, true); - window.location.replace(this.options.root + '#' + this.fragment); - // Return immediately as browser will do redirect to new url - return true; - - // Or if we've started out with a hash-based route, but we're currently - // in a browser where it could be `pushState`-based instead... - } else if (this._wantsPushState && this._hasPushState && atRoot && loc.hash) { - this.fragment = loc.hash.replace(routeStripper, ''); - window.history.replaceState({}, document.title, loc.protocol + '//' + loc.host + this.options.root + this.fragment); - } - - if (!this.options.silent) { - return this.loadUrl(); - } - }, - - // Disable Backbone.history, perhaps temporarily. Not useful in a real app, - // but possibly useful for unit testing Routers. - stop: function() { - $(window).unbind('popstate', this.checkUrl).unbind('hashchange', this.checkUrl); - clearInterval(this._checkUrlInterval); - historyStarted = false; - }, - - // Add a route to be tested when the fragment changes. Routes added later - // may override previous routes. - route: function(route, callback) { - this.handlers.unshift({route: route, callback: callback}); - }, - - // Checks the current URL to see if it has changed, and if it has, - // calls `loadUrl`, normalizing across the hidden iframe. - checkUrl: function(e) { - var current = this.getFragment(); - if (current == this.fragment && this.iframe) current = this.getFragment(this.iframe.location.hash); - if (current == this.fragment || current == decodeURIComponent(this.fragment)) return false; - if (this.iframe) this.navigate(current); - this.loadUrl() || this.loadUrl(window.location.hash); - }, - - // Attempt to load the current URL fragment. If a route succeeds with a - // match, returns `true`. If no defined routes matches the fragment, - // returns `false`. - loadUrl: function(fragmentOverride) { - var fragment = this.fragment = this.getFragment(fragmentOverride); - var matched = _.any(this.handlers, function(handler) { - if (handler.route.test(fragment)) { - handler.callback(fragment); - return true; - } - }); - return matched; - }, - - // Save a fragment into the hash history, or replace the URL state if the - // 'replace' option is passed. You are responsible for properly URL-encoding - // the fragment in advance. - // - // The options object can contain `trigger: true` if you wish to have the - // route callback be fired (not usually desirable), or `replace: true`, if - // you which to modify the current URL without adding an entry to the history. - navigate: function(fragment, options) { - if (!historyStarted) return false; - if (!options || options === true) options = {trigger: options}; - var frag = (fragment || '').replace(routeStripper, ''); - if (this.fragment == frag || this.fragment == decodeURIComponent(frag)) return; - - // If pushState is available, we use it to set the fragment as a real URL. - if (this._hasPushState) { - if (frag.indexOf(this.options.root) != 0) frag = this.options.root + frag; - this.fragment = frag; - window.history[options.replace ? 'replaceState' : 'pushState']({}, document.title, frag); - - // If hash changes haven't been explicitly disabled, update the hash - // fragment to store history. - } else if (this._wantsHashChange) { - this.fragment = frag; - this._updateHash(window.location, frag, options.replace); - if (this.iframe && (frag != this.getFragment(this.iframe.location.hash))) { - // Opening and closing the iframe tricks IE7 and earlier to push a history entry on hash-tag change. - // When replace is true, we don't want this. - if(!options.replace) this.iframe.document.open().close(); - this._updateHash(this.iframe.location, frag, options.replace); - } - - // If you've told us that you explicitly don't want fallback hashchange- - // based history, then `navigate` becomes a page refresh. - } else { - window.location.assign(this.options.root + fragment); - } - if (options.trigger) this.loadUrl(fragment); - }, - - // Update the hash location, either replacing the current entry, or adding - // a new one to the browser history. - _updateHash: function(location, fragment, replace) { - if (replace) { - location.replace(location.toString().replace(/(javascript:|#).*$/, '') + '#' + fragment); - } else { - location.hash = fragment; - } - } - }); - - // Backbone.View - // ------------- - - // Creating a Backbone.View creates its initial element outside of the DOM, - // if an existing element is not provided... - Backbone.View = function(options) { - this.cid = _.uniqueId('view'); - this._configure(options || {}); - this._ensureElement(); - this.initialize.apply(this, arguments); - this.delegateEvents(); - }; - - // Cached regex to split keys for `delegate`. - var eventSplitter = /^(\S+)\s*(.*)$/; - - // List of view options to be merged as properties. - var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName']; - - // Set up all inheritable **Backbone.View** properties and methods. - _.extend(Backbone.View.prototype, Backbone.Events, { - - // The default `tagName` of a View's element is `"div"`. - tagName: 'div', - - // jQuery delegate for element lookup, scoped to DOM elements within the - // current view. This should be prefered to global lookups where possible. - $: function(selector) { - return $(selector, this.el); - }, - - // Initialize is an empty function by default. Override it with your own - // initialization logic. - initialize: function(){}, - - // **render** is the core function that your view should override, in order - // to populate its element (`this.el`), with the appropriate HTML. The - // convention is for **render** to always return `this`. - render: function() { - return this; - }, - - // Remove this view from the DOM. Note that the view isn't present in the - // DOM by default, so calling this method may be a no-op. - remove: function() { - this.$el.remove(); - return this; - }, - - // For small amounts of DOM Elements, where a full-blown template isn't - // needed, use **make** to manufacture elements, one at a time. - // - // var el = this.make('li', {'class': 'row'}, this.model.escape('title')); - // - make: function(tagName, attributes, content) { - var el = document.createElement(tagName); - if (attributes) $(el).attr(attributes); - if (content) $(el).html(content); - return el; - }, - - // Change the view's element (`this.el` property), including event - // re-delegation. - setElement: function(element, delegate) { - this.$el = $(element); - this.el = this.$el[0]; - if (delegate !== false) this.delegateEvents(); - }, - - // Set callbacks, where `this.events` is a hash of - // - // *{"event selector": "callback"}* - // - // { - // 'mousedown .title': 'edit', - // 'click .button': 'save' - // 'click .open': function(e) { ... } - // } - // - // pairs. Callbacks will be bound to the view, with `this` set properly. - // Uses event delegation for efficiency. - // Omitting the selector binds the event to `this.el`. - // This only works for delegate-able events: not `focus`, `blur`, and - // not `change`, `submit`, and `reset` in Internet Explorer. - delegateEvents: function(events) { - if (!(events || (events = getValue(this, 'events')))) return; - this.undelegateEvents(); - for (var key in events) { - var method = events[key]; - if (!_.isFunction(method)) method = this[events[key]]; - if (!method) throw new Error('Event "' + events[key] + '" does not exist'); - var match = key.match(eventSplitter); - var eventName = match[1], selector = match[2]; - method = _.bind(method, this); - eventName += '.delegateEvents' + this.cid; - if (selector === '') { - this.$el.bind(eventName, method); - } else { - this.$el.delegate(selector, eventName, method); - } - } - }, - - // Clears all callbacks previously bound to the view with `delegateEvents`. - // You usually don't need to use this, but may wish to if you have multiple - // Backbone views attached to the same DOM element. - undelegateEvents: function() { - this.$el.unbind('.delegateEvents' + this.cid); - }, - - // Performs the initial configuration of a View with a set of options. - // Keys with special meaning *(model, collection, id, className)*, are - // attached directly to the view. - _configure: function(options) { - if (this.options) options = _.extend({}, this.options, options); - for (var i = 0, l = viewOptions.length; i < l; i++) { - var attr = viewOptions[i]; - if (options[attr]) this[attr] = options[attr]; - } - this.options = options; - }, - - // Ensure that the View has a DOM element to render into. - // If `this.el` is a string, pass it through `$()`, take the first - // matching element, and re-assign it to `el`. Otherwise, create - // an element from the `id`, `className` and `tagName` properties. - _ensureElement: function() { - if (!this.el) { - var attrs = getValue(this, 'attributes') || {}; - if (this.id) attrs.id = this.id; - if (this.className) attrs['class'] = this.className; - this.setElement(this.make(this.tagName, attrs), false); - } else { - this.setElement(this.el, false); - } - } - - }); - - // The self-propagating extend function that Backbone classes use. - var extend = function (protoProps, classProps) { - var child = inherits(this, protoProps, classProps); - child.extend = this.extend; - return child; - }; - - // Set up inheritance for the model, collection, and view. - Backbone.Model.extend = Backbone.Collection.extend = - Backbone.Router.extend = Backbone.View.extend = extend; - - // Backbone.sync - // ------------- - - // Map from CRUD to HTTP for our default `Backbone.sync` implementation. - var methodMap = { - 'create': 'POST', - 'update': 'PUT', - 'delete': 'DELETE', - 'read': 'GET' - }; - - // Override this function to change the manner in which Backbone persists - // models to the server. You will be passed the type of request, and the - // model in question. By default, makes a RESTful Ajax request - // to the model's `url()`. Some possible customizations could be: - // - // * Use `setTimeout` to batch rapid-fire updates into a single request. - // * Send up the models as XML instead of JSON. - // * Persist models via WebSockets instead of Ajax. - // - // Turn on `Backbone.emulateHTTP` in order to send `PUT` and `DELETE` requests - // as `POST`, with a `_method` parameter containing the true HTTP method, - // as well as all requests with the body as `application/x-www-form-urlencoded` - // instead of `application/json` with the model in a param named `model`. - // Useful when interfacing with server-side languages like **PHP** that make - // it difficult to read the body of `PUT` requests. - Backbone.sync = function(method, model, options) { - var type = methodMap[method]; - - // Default JSON-request options. - var params = {type: type, dataType: 'json'}; - - // Ensure that we have a URL. - if (!options.url) { - params.url = getValue(model, 'url') || urlError(); - } - - // Ensure that we have the appropriate request data. - if (!options.data && model && (method == 'create' || method == 'update')) { - params.contentType = 'application/json'; - params.data = JSON.stringify(model.toJSON()); - } - - // For older servers, emulate JSON by encoding the request into an HTML-form. - if (Backbone.emulateJSON) { - params.contentType = 'application/x-www-form-urlencoded'; - params.data = params.data ? {model: params.data} : {}; - } - - // For older servers, emulate HTTP by mimicking the HTTP method with `_method` - // And an `X-HTTP-Method-Override` header. - if (Backbone.emulateHTTP) { - if (type === 'PUT' || type === 'DELETE') { - if (Backbone.emulateJSON) params.data._method = type; - params.type = 'POST'; - params.beforeSend = function(xhr) { - xhr.setRequestHeader('X-HTTP-Method-Override', type); - }; - } - } - - // Don't process data on a non-GET request. - if (params.type !== 'GET' && !Backbone.emulateJSON) { - params.processData = false; - } - - // Make the request, allowing the user to override any Ajax options. - return $.ajax(_.extend(params, options)); - }; - - // Wrap an optional error callback with a fallback error event. - Backbone.wrapError = function(onError, originalModel, options) { - return function(model, resp) { - var resp = model === originalModel ? resp : model; - if (onError) { - onError(model, resp, options); - } else { - originalModel.trigger('error', model, resp, options); - } - }; - }; - - // Helpers - // ------- - - // Shared empty constructor function to aid in prototype-chain creation. - var ctor = function(){}; - - // Helper function to correctly set up the prototype chain, for subclasses. - // Similar to `goog.inherits`, but uses a hash of prototype properties and - // class properties to be extended. - var inherits = function(parent, protoProps, staticProps) { - var child; - - // The constructor function for the new subclass is either defined by you - // (the "constructor" property in your `extend` definition), or defaulted - // by us to simply call the parent's constructor. - if (protoProps && protoProps.hasOwnProperty('constructor')) { - child = protoProps.constructor; - } else { - child = function(){ parent.apply(this, arguments); }; - } - - // Inherit class (static) properties from parent. - _.extend(child, parent); - - // Set the prototype chain to inherit from `parent`, without calling - // `parent`'s constructor function. - ctor.prototype = parent.prototype; - child.prototype = new ctor(); - - // Add prototype properties (instance properties) to the subclass, - // if supplied. - if (protoProps) _.extend(child.prototype, protoProps); - - // Add static properties to the constructor function, if supplied. - if (staticProps) _.extend(child, staticProps); - - // Correctly set child's `prototype.constructor`. - child.prototype.constructor = child; - - // Set a convenience property in case the parent's prototype is needed later. - child.__super__ = parent.prototype; - - return child; - }; - - // Helper function to get a value from a Backbone object as a property - // or as a function. - var getValue = function(object, prop) { - if (!(object && object[prop])) return null; - return _.isFunction(object[prop]) ? object[prop]() : object[prop]; - }; - - // Throw an error when a URL is needed, and none is supplied. - var urlError = function() { - throw new Error('A "url" property or function must be specified'); - }; - -}).call(this); diff --git a/client/js/front.events.js b/client/js/front.events.js deleted file mode 100755 index cf02cf3..0000000 --- a/client/js/front.events.js +++ /dev/null @@ -1,654 +0,0 @@ -/*jslint browser: true, devel: true, sloppy: true, plusplus: true, nomen: true, forin: true, continue: true */ -/*globals kiwi, $, _, Tabview, Userlist, User, Box, init_data */ -/** -* @namespace -*/ -kiwi.front.events = { - - /** - * Binds all of the event handlers to their events - */ - bindAll: function () { - $(kiwi.gateway).bind('onmsg', this.onMsg) - .bind('onnotice', this.onNotice) - .bind('onaction', this.onAction) - .bind('onmotd', this.onMOTD) - .bind('onoptions', this.onOptions) - .bind('onconnect', this.onConnect) - .bind('onconnect_fail', this.onConnectFail) - .bind('ondisconnect', this.onDisconnect) - .bind('onreconnecting', this.onReconnecting) - .bind('onnick', this.onNick) - .bind('onuserlist', this.onUserList) - .bind('onuserlist_end', this.onUserListEnd) - .bind('onlist_start', this.onChannelListStart) - .bind('onlist_channel', this.onChannelList) - .bind('onlist_end', this.onChannelListEnd) - .bind('onbanlist', this.onBanList) - .bind('onbanlist_end', this.onBanListEnd) - .bind('onjoin', this.onJoin) - .bind('ontopic', this.onTopic) - .bind('ontopicsetby', this.onTopicSetBy) - .bind('onpart', this.onPart) - .bind('onkick', this.onKick) - .bind('onquit', this.onQuit) - .bind('onmode', this.onMode) - .bind('onwhois', this.onWhois) - .bind('onsync', this.onSync) - .bind('onchannel_redirect', this.onChannelRedirect) - .bind('ondebug', this.onDebug) - .bind('onctcp_request', this.onCTCPRequest) - .bind('onctcp_response', this.onCTCPResponse) - .bind('onirc_error', this.onIRCError) - .bind('onkiwi', this.onKiwi); - }, - - /** - * Handles the msg event - * @param {eventObject} e The event object - * @param {Object} data The event data - */ - onMsg: function (e, data) { - var destination, plugin_event, tab; - // Is this message from a user? - if (data.channel === kiwi.gateway.nick) { - destination = data.nick.toLowerCase(); - } else { - destination = data.channel.toLowerCase(); - } - - plugin_event = {nick: data.nick, msg: data.msg, destination: destination}; - plugin_event = kiwi.plugs.run('msg_recieved', plugin_event); - if (!plugin_event) { - return; - } - - var chan = kiwi.channels.getByName(plugin_event.destination); - if (chan) { - chan.addMsg(null, plugin_event.nick, plugin_event.msg); - } - }, - - /** - * Handles the debug event - * @param {eventObject} e The event object - * @param {Object} data The event data - */ - onDebug: function (e, data) { - var tab = Tabview.getTab('kiwi_debug'); - if (!tab) { - tab = new Tabview('kiwi_debug'); - } - tab.addMsg(null, ' ', data.msg); - }, - - /** - * Handles the action event - * @param {eventObject} e The event object - * @param {Object} data The event data - */ - onAction: function (e, data) { - var destination, tab; - // Is this message from a user? - if (data.channel === kiwi.gateway.nick) { - destination = data.nick; - } else { - destination = data.channel; - } - - var chan = kiwi.channels.getByName(destination); - if (chan) { - chan.addMsg(null, ' ', '* ' + data.nick + ' ' + data.msg, 'action', 'color:#555;'); - } else { - kiwi.channels.server.addMsg(null, ' ', '* ' + data.nick + ' ' + data.msg, 'action', 'color:#555;'); - } - }, - - /** - * Handles the topic event - * @param {eventObject} e The event object - * @param {Object} data The event data - */ - onTopic: function (e, data) { - var chan = kiwi.channels.getByName(data.channel); - if (chan) { - chan.set({"topic": data.topic}); - chan.addMsg(null, ' ', '=== Topic for ' + data.channel + ' is: ' + data.topic, 'topic'); - } - }, - - /** - * Handles the topicsetby event - * @param {eventObject} e The event object - * @param {Object} data The event data - */ - onTopicSetBy: function (e, data) { - var when, - chan = kiwi.channels.getByName(data.channel); - if (chan) { - when = new Date(data.when * 1000).toLocaleString(); - chan.addMsg(null, '', 'Topic set by ' + data.nick + ' at ' + when, 'topic'); - } - }, - - /** - * Handles the notice event - * @param {eventObject} e The event object - * @param {Object} data The event data - */ - onNotice: function (e, data) { - var nick = (data.nick === undefined) ? '' : data.nick, - enick = '[' + nick + ']', - chan; - - chan = kiwi.channels.getByName(data.channel); - if (chan) { - chan.addMsg(null, enick, data.msg, 'notice'); - } else { - kiwi.channels.server.addMsg(null, enick, data.msg, 'notice'); - } - }, - - /** - * Handles the CTCP request event - * @param {eventObject} e The event object - * @param {Object} data The event data - */ - onCTCPRequest: function (e, data) { - var msg = data.msg.split(" ", 2); - switch (msg[0]) { - case 'PING': - if (typeof msg[1] === 'undefined') { - msg[1] = ''; - } - kiwi.gateway.ctcp(false, 'PING', data.nick, msg[1]); - break; - case 'TIME': - kiwi.gateway.ctcp(false, 'TIME', data.nick, (new Date()).toLocaleString()); - break; - } - kiwi.channels.server.addMsg(null, 'CTCP Request', '[from ' + data.nick + '] ' + data.msg, 'ctcp'); - - }, - - /** - * Handles the CTCP response event - * @param {eventObject} e The event object - * @param {Object} data The event data - */ - onCTCPResponse: function (e, data) { - kiwi.channels.server.addMsg(null, 'CTCP Reply', '[from ' + data.nick + '] ' + data.msg, 'ctcp'); - }, - - /** - * Handles the kiwi event - * @param {eventObject} e The event object - * @param {Object} data The event data - */ - onKiwi: function (e, data) { - //console.log(data); - }, - - /** - * Handles the connect event - * @param {eventObject} e The event object - * @param {Object} data The event data - */ - onConnect: function (e, data) { - var err_box, channels; - - if (data.connected) { - // Did we disconnect? - err_box = $('.messages .msg.error.disconnect .text'); - if (typeof err_box[0] !== 'undefined') { - err_box.text('Reconnected OK :)'); - err_box.parent().removeClass('disconnect'); - - // Rejoin channels - //channels = ''; - //_.each(Tabview.getAllTabs(), function (tabview) { - // if (tabview.name === 'server') { - // return; - // } - // channels += tabview.name + ','; - //}); - //console.log('Rejoining: ' + channels); - //kiwi.gateway.join(channels); - return; - } - - if (kiwi.gateway.nick !== data.nick) { - kiwi.gateway.nick = data.nick; - kiwi.front.ui.doLayout(); - } - - kiwi.channels.server.addMsg(null, ' ', '=== Connected OK :)', 'status'); - if (typeof init_data.channel === "string") { - kiwi.front.joinChannel(init_data.channel); - } - kiwi.plugs.run('connect', {success: true}); - } else { - kiwi.channels.server.addMsg(null, ' ', '=== Failed to connect :(', 'status'); - kiwi.plugs.run('connect', {success: false}); - } - - // Now that we're connected, warn the user if they really want to quit - kiwi.front.ui.preventRefresh(); - }, - /** - * Handles the connectFail event - * @param {eventObject} e The event object - * @param {Object} data The event data - */ - onConnectFail: function (e, data) { - var reason = (typeof data.reason === 'string') ? data.reason : ''; - kiwi.channels.server.addMsg(null, '', 'There\'s a problem connecting! (' + reason + ')', 'error'); - kiwi.plugs.run('connect', {success: false}); - }, - /** - * Handles the disconnect event - * @param {eventObject} e The event object - * @param {Object} data The event data - */ - onDisconnect: function (e, data) { - var tab, tabs; - //tabs = Tabview.getAllTabs(); - //for (tab in tabs) { - // tabs[tab].addMsg(null, '', 'Disconnected from server!', 'error disconnect'); - //} - kiwi.plugs.run('disconnect', {success: false}); - }, - /** - * Handles the reconnecting event - * @param {eventObject} e The event object - * @param {Object} data The event data - */ - onReconnecting: function (e, data) { - var err_box, f, msg, mins, secs; - - err_box = $('.messages .msg.error.disconnect .text'); - if (!err_box) { - return; - } - - /** - * @inner - */ - f = function (num) { - switch (num) { - case 1: return 'First'; - case 2: return 'Second'; - case 3: return 'Third'; - case 4: return 'Fourth'; - case 5: return 'Fifth'; - case 6: return 'Sixth'; - case 7: return 'Seventh'; - default: return 'Next'; - } - }; - - secs = Math.floor(data.delay / 1000); - mins = Math.floor(secs / 60); - secs = secs % 60; - if (mins > 0) { - msg = f(data.attempts) + ' attempt at reconnecting in ' + mins + ' minute' + ((mins > 1) ? 's' : '') + ', ' + secs + ' second' + (((secs > 1) || (secs === 0)) ? 's' : '') + '...'; - } else { - msg = f(data.attempts) + ' attempt at reconnecting in ' + secs + ' second' + (((secs > 1) || (secs === 0)) ? 's' : '') + '...'; - } - - err_box.text(msg); - }, - /** - * Handles the options event - * @param {eventObject} e The event object - * @param {Object} data The event data - */ - onOptions: function (e, data) { - if (typeof kiwi.gateway.network_name === "string" && kiwi.gateway.network_name !== "") { - kiwi.channels.server.set({"name": kiwi.gateway.network_name}); - } - }, - /** - * Handles the MOTD event - * @param {eventObject} e The event object - * @param {Object} data The event data - */ - onMOTD: function (e, data) { - kiwi.channels.server.addMsg(null, data.server, data.msg, 'motd'); - }, - /** - * Handles the whois event - * @param {eventObject} e The event object - * @param {Object} data The event data - */ - onWhois: function (e, data) { - /*globals secondsToTime */ - var d, tab, idle_time = ''; - - if (data.end) { - return; - } - - if (typeof data.idle !== 'undefined') { - idle_time = secondsToTime(parseInt(data.idle, 10)); - idle_time = idle_time.h.toString().lpad(2, "0") + ':' + idle_time.m.toString().lpad(2, "0") + ':' + idle_time.s.toString().lpad(2, "0"); - } - - tab = kiwi.currentPanel; - if (data.msg) { - tab.addMsg(null, data.nick, data.msg, 'whois'); - } else if (data.logon) { - d = new Date(); - d.setTime(data.logon * 1000); - d = d.toLocaleString(); - - tab.addMsg(null, data.nick, 'idle for ' + idle_time + ', signed on ' + d, 'whois'); - } else { - tab.addMsg(null, data.nick, 'idle for ' + idle_time, 'whois'); - } - }, - /** - * Handles the mode event - * @param {eventObject} e The event object - * @param {Object} data The event data - */ - onMode: function (e, data) { - var tab, mem; - if ((typeof data.channel === 'string') && (typeof data.effected_nick === 'string')) { - chan = kiwi.channels.getByName(data.channel); - if (chan) { - chan.addMsg(null, ' ', '[' + data.mode + '] ' + data.effected_nick + ' by ' + data.nick, 'mode', ''); - mem = _.detect(chan.get("members"), function (m) { - return data.effected_nick === m.get("nick"); - }); - if (mem) { - if (data.mode[0] === '+') { - mem.addMode(data.mode); - } else { - mem.removeMode(data.mode); - } - } - } - } - // TODO: Other mode changes that aren't +/- qaohv. - JA - }, - /** - * Handles the userList event - * @param {eventObject} e The event object - * @param {Object} data The event data - */ - onUserList: function (e, data) { - var tab, chan; - chan = kiwi.channels.getByName(data.channel); - if (chan) { - if ((!kiwi.front.cache.userlist) || (!kiwi.front.cache.userlist.updating)) { - if (!kiwi.front.cache.userlist) { - kiwi.front.cache.userlist = {updating: true}; - } else { - kiwi.front.cache.userlist.updating = true; - } - chan.get("members").reset([],{"silent": true}); - } - _.forEach(data.users, function (u) { - chan.get("members").add(new kiwi.model.Member(u), {"silent": true}); - }); - } - }, - /** - * Handles the userListEnd event - * @param {eventObject} e The event object - * @param {Object} data The event data - */ - onUserListEnd: function (e, data) { - var chan; - if (!kiwi.front.cache.userlist) { - kiwi.front.cache.userlist = {}; - } - kiwi.front.cache.userlist.updating = false; - chan = kiwi.channels.getByName(data.channel); - if (chan) { - chan.get("members").trigger("change"); - } - }, - - /** - * Handles the channelListStart event - * @param {eventObject} e The event object - * @param {Object} data The event data - */ - onChannelListStart: function (e, data) { - /*global ChannelList */ - kiwi.front.cache.list = new ChannelList(); - console.profile('list'); - }, - /** - * Handles the channelList event - * @param {eventObject} e The event object - * @param {Object} data The event data - */ - onChannelList: function (e, data) { - kiwi.front.cache.list.addChannel(data.chans); - }, - /** - * Handles the channelListEnd event - * @param {eventObject} e The event object - * @param {Object} data The event data - */ - onChannelListEnd: function (e, data) { - kiwi.front.cache.list.show(); - console.profileEnd(); - }, - - /** - * Handles the banList event - * @param {eventObject} e The event object - * @param {Object} data The event data - */ - onBanList: function (e, data) { - }, - - /** - * Handles the banListEnd event - * @param {eventObject} e The event object - * @param {Object} data The event data - */ - onBanListEnd: function (e, data) { - }, - - /** - * Handles the join event - * @param {eventObject} e The event object - * @param {Object} data The event data - */ - onJoin: function (e, data) { - var chan = kiwi.channels.getByName(data.channel); - if (!chan) { - chan = new kiwi.model.Channel({"name": data.channel.toLowerCase()}); - kiwi.channels.add(chan); - // No need to add ourselves to the MemberList as RPL_NAMESREPLY will be next - chan.view.show(); - } else { - chan.get("members").add(new kiwi.model.Member({"nick": data.nick, "modes": [], "ident": data.ident, "hostname": data.hostname})); - } - }, - /** - * Handles the part event - * @param {eventObject} e The event object - * @param {Object} data The event data - */ - onPart: function (e, data) { - var chan, members, cid; - chan = kiwi.channels.getByName(data.channel); - if (chan) { - if (data.nick === kiwi.gateway.nick) { - chan.trigger("close"); - } else { - members = chan.get("members"); - members.remove(members.detect(function (m) { - return data.nick === m.get("nick"); - }).cid, {"message": data.message}) - } - } - }, - /** - * Handles the kick event - * @param {eventObject} e The event object - * @param {Object} data The event data - */ - onKick: function (e, data) { - var panel = kiwi.channels.getByName(data.channel); - if (panel) { - // If this is us, close the panel - if (data.kicked === kiwi.gateway.nick) { - kiwi.channels.remove(panel); - kiwi.channels.server.addMsg(null, ' ', '=== You have been kicked from ' + data.channel + '. ' + data.message, 'status kick'); - return; - } - - panel.addMsg(null, ' ', '<-- ' + data.kicked + ' kicked by ' + data.nick + '(' + data.message + ')', 'action kick', 'color:#990000;'); - panel.userlist.removeUser(data.nick); - } - }, - /** - * Handles the nick event - * @param {eventObject} e The event object - * @param {Object} data The event data - */ - onNick: function (e, data) { - if (data.nick === kiwi.gateway.nick) { - kiwi.gateway.nick = data.newnick; - kiwi.front.ui.doLayout(); - } - - kiwi.channels.each(function (panel) { - if (panel.isChannel) { - var member = panel.get("members").getByNick(data.nick); - if (member) { - member.set({"nick": data.newnick}); - panel.addMsg(null, ' ', '=== ' + data.nick + ' is now known as ' + data.newnick, 'action changenick'); - } - } - }); - }, - /** - * Handles the quit event - * @param {eventObject} e The event object - * @param {Object} data The event data - */ - onQuit: function (e, data) { - var chan, members, member; - kiwi.channels.forEach(function (chan) { - members = chan.get("members"); - member = members.detect(function (m) { - return data.nick === m.get("nick"); - }); - if (member) { - members.trigger("quit", {"member": member, "message": data.message}); - members.remove(member.cid); - } - }); - }, - /** - * Handles the channelRedirect event - * @param {eventObject} e The event object - * @param {Object} data The event data - */ - onChannelRedirect: function (e, data) { - //var tab = Tabview.getTab(data.from); - //tab.close(); - //tab = new Tabview(data.to); - //tab.addMsg(null, ' ', '=== Redirected from ' + data.from, 'action'); - }, - - /** - * Handles the IRCError event - * @param {eventObject} e The event object - * @param {Object} data The event data - */ - onIRCError: function (e, data) { - /*var t_view, - tab = Tabview.getTab(data.channel); - if (data.channel !== undefined && tab) { - t_view = data.channel; - } else { - t_view = 'server'; - tab = Tabview.getServerTab(); - } - - switch (data.error) { - case 'banned_from_channel': - tab.addMsg(null, ' ', '=== You are banned from ' + data.channel + '. ' + data.reason, 'status'); - if (t_view !== 'server') { - tab.safe_to_close = true; - } - break; - case 'bad_channel_key': - tab.addMsg(null, ' ', '=== Bad channel key for ' + data.channel, 'status'); - if (t_view !== 'server') { - tab.safe_to_close = true; - } - break; - case 'invite_only_channel': - tab.addMsg(null, ' ', '=== ' + data.channel + ' is invite only.', 'status'); - if (t_view !== 'server') { - tab.safe_to_close = true; - } - break; - case 'channel_is_full': - tab.addMsg(null, ' ', '=== ' + data.channel + ' is full.', 'status'); - if (t_view !== 'server') { - tab.safe_to_close = true; - } - break; - case 'chanop_privs_needed': - tab.addMsg(null, ' ', '=== ' + data.reason, 'status'); - break; - case 'no_such_nick': - Tabview.getServerTab().addMsg(null, ' ', '=== ' + data.nick + ': ' + data.reason, 'status'); - break; - case 'nickname_in_use': - Tabview.getServerTab().addMsg(null, ' ', '=== The nickname ' + data.nick + ' is already in use. Please select a new nickname', 'status'); - kiwi.front.ui.showChangeNick('That nick is already taken'); - break; - default: - // We don't know what data contains, so don't do anything with it. - console.log(e, data); - }*/ - }, - - - - - - - - /** - * Handles the sync event - * @param {eventObject} e The event object - * @param {Object} data The event data - */ - onSync: function (e, data) { - // Set any settings - if (data.nick !== undefined) { - kiwi.gateway.nick = data.nick; - } - - // Add the tabviews - if (data.tabviews !== undefined) { - _.each(data.tabviews, function (tab) { - var newTab; - if (!Tabview.tabExists(tab.name)) { - newTab = new Tabview(kiwi.gateway.channel_prefix + tab.name); - - if (tab.userlist !== undefined) { - kiwi.front.events.onUserList({'channel': kiwi.gateway.channel_prefix + tab.name, 'users': tab.userlist.getUsers(false)}); - } - } - }); - } - - kiwi.front.ui.doLayout(); - } - - -}; \ No newline at end of file diff --git a/client/js/front.js b/client/js/front.js deleted file mode 100755 index 005cffa..0000000 --- a/client/js/front.js +++ /dev/null @@ -1,918 +0,0 @@ -/*jslint white:true, regexp: true, nomen: true, devel: true, undef: true, browser: true, continue: true, sloppy: true, forin: true, newcap: true, plusplus: true, maxerr: 50, indent: 4 */ -/*global kiwi, _, io, $, iScroll, agent, touchscreen, init_data, plugs, plugins, registerTouches, randomString */ -/** -* @namespace -*/ -kiwi.front = { - /** - * The current channel - * @type Object - */ - cur_channel: null, - /** - * A list of windows - * @type Object - */ - windows: {}, - /** - * A list of Tabviews - * @type Object - */ - tabviews: {}, - /** - * A list of Utilityviews - * @type Object - */ - utilityviews: {}, - /** - * A list of Boxes - * @type Object - */ - boxes: {}, - - /** - * The command history - * @type Array - */ - buffer: [], - /** - * The current command history position - * @type Number - */ - buffer_pos: 0, - - /** - * Container for misc data (eg. userlist generation) - * @type Object - */ - cache: {original_topic: '', userlist: {}}, - - /** - * Initialisation function - */ - init: function () { - /*global Box, touch_scroll:true, Tabview */ - var about_info, supportsOrientationChange, orientationEvent, scroll_opts, server_tabview; - kiwi.gateway.nick = 'kiwi_' + Math.ceil(100 * Math.random()) + Math.ceil(100 * Math.random()); - kiwi.gateway.session_id = null; - - // Bind to the gateway events - kiwi.front.events.bindAll(); - - // Build the about box - kiwi.front.boxes.about = new Box("about"); - about_info = 'UI adapted for ' + agent; - if (touchscreen) { - about_info += ' touchscreen '; - } - about_info += 'usage'; - $('#tmpl_about_box').tmpl({ - about: about_info - }).appendTo(kiwi.front.boxes.about.content); - - //$(window).bind("beforeunload", function(){ kiwi.gateway.quit(); }); - - if (touchscreen) { - $('#kiwi').addClass('touchscreen'); - - // Single touch scrolling through scrollback for touchscreens - scroll_opts = {}; - touch_scroll = new iScroll('windows', scroll_opts); - } - - kiwi.front.ui.registerKeys(); - - $('#kiwi .toolbars').resize(kiwi.front.ui.doLayoutSize); - $(window).resize(kiwi.front.ui.doLayoutSize); - - // Add the resizer for the userlist - $('
').appendTo('#kiwi'); - $('#nicklist_resize').draggable({axis: "x", drag: function () { - var t = $(this), - ul = $('#kiwi .userlist'), - new_width = $(document).width() - parseInt(t.css('left'), 10); - - new_width = new_width - parseInt(ul.css('margin-left'), 10); - new_width = new_width - parseInt(ul.css('margin-right'), 10); - - // Make sure we don't remove the userlist alltogether - if (new_width < 20) { - $(this).data('draggable').offset.click.left = 10; - console.log('whoaa'); - } - - var members = kiwi.currentPanel.get("members"); - if (members) { - $(members.view.el).width(new_width); - } - $('#windows').css('right', ul.outerWidth(true)); - }}); - - - $('#kiwi .formconnectwindow').submit(function () { - var netsel = $('#kiwi .formconnectwindow .network'), - netport = $('#kiwi .formconnectwindow .port'), - netssl = $('#kiwi .formconnectwindow .ssl'), - netpass = $('#kiwi .formconnectwindow .password'), - nick = $('#kiwi .formconnectwindow .nick'), - tmp, - forwardKeys; - - if (nick.val() === '') { - nick.val('Nick please!'); - nick.focus(); - return false; - } - - tmp = nick.val().split(' '); - kiwi.gateway.nick = tmp[0]; - - init_data.channel = $('#channel').val(); - - kiwi.front.ui.doLayout(); - try { - kiwi.gateway.connect(netsel.val(), netport.val(), netssl.is(':checked'), netpass.val(), function () { - setTimeout(function () { - kiwi.channels.server.set({"name": netsel.val()}); - kiwi.channels.view.render(); - }, 0); - }); - } catch (e) { - console.log(e); - } - - $('#kiwi .connectwindow').slideUp('', kiwi.front.ui.barsShow); - - /** - * Listen for keyboard activity on any window, and forward it to the - * input box so users can type even if the input box is not in focus - * @inner - * @param {eventObject} event The event to forward - */ - forwardKeys = function (event) { - $('#kiwi_msginput').focus(); - $('#kiwi_msginput').trigger(event); - }; - $('#kiwi_msginput').attr('tabindex', 0); - $('#kiwi_msginput').focus(); - $('#windows').attr('tabindex',100); - $('#windows').keydown(forwardKeys).keypress(forwardKeys).keyup(forwardKeys); - - return false; - }); - - supportsOrientationChange = (typeof window.onorientationchange !== undefined); - orientationEvent = supportsOrientationChange ? "orientationchange" : "resize"; - if (window.addEventListener) { - window.addEventListener(orientationEvent, kiwi.front.ui.doLayoutSize, false); - } else { - // < IE9 - window.attachEvent(orientationEvent, kiwi.front.ui.doLayoutSize, false); - } - //$('#kiwi').bind("resize", kiwi.front.ui.doLayoutSize, false); - - kiwi.front.ui.doLayout(); - kiwi.front.ui.barsHide(); - - kiwi.channels = new kiwi.model.PanelList(); - - - //server_tabview = new Tabview('server'); - //server_tabview.userlist.setWidth(0); // Disable the userlist - //server_tabview.setIcon('/img/app_menu.png'); - //$('.icon', server_tabview.tab).tipTip({ - // delay: 0, - // keepAlive: true, - // content: $('#tmpl_network_menu').tmpl({}).html(), - // activation: 'click' - //}); - - // Any pre-defined nick? - if (typeof window.init_data.nick === "string") { - $('#kiwi .formconnectwindow .nick').val(init_data.nick); - } - - // Any pre-defined channels? - if (typeof window.init_data.channel === 'string') { - $('#channel').val(init_data.channel); - } - - // Fix for Opera inserting a spurious
- $('#kiwi .cur_topic br').remove(); - - $('#kiwi .cur_topic').keydown(function (e) { - if (e.which === 13) { - // enter - e.preventDefault(); - $(this).change(); - $('#kiwi_msginput').focus(); - } else if (e.which === 27) { - // escape - e.preventDefault(); - $(this).text(kiwi.front.cache.original_topic); - $('#kiwi_msginput').focus(); - } - }); - /*$('.cur_topic').live('keypress', function(e) { - if (e.keyCode === 13) { - // enter - e.preventDefault(); - $(this).change(); - $('#kiwi_msginput').focus(); - } else if (e.keyCode === 27) { - // escape - e.preventDefault(); - $(this).text(kiwi.front.cache.original_topic); - } - });*/ - $('.cur_topic').live('change', function () { - var chan, text; - text = $(this).text(); - if (text !== kiwi.front.cache.original_topic) { - if (kiwi.currentPanel.isChannel) { - kiwi.gateway.topic(kiwi.currentPannel.get("name"), text); - } - } - }); - - - $('#windows a.chan').live('click', function () { - kiwi.front.joinChannel($(this).text()); - return false; - }); - - kiwi.data.set('chanList', []); - - // Load any client plugins - (function () { - var i; - for (i in plugins) { - kiwi.plugs.loadPlugin(plugins[i]); - } - }()); - }, - - - - /** - * Joins a channel - * @param {String} chan_name The name of the channel to join - */ - joinChannel: function (chan_name) { - var chans = chan_name.split(','), - i, - chan, - panel; - for (i in chans) { - chan = chans[i]; - panel = kiwi.channels.getByName(chan); - if (!panel) { - kiwi.gateway.join(chan); - } - } - }, - - /** - * Parses and executes text and commands entered into the input msg box - * @param {String} msg The message string to parse - */ - run: function (msg) { - var parts, dest, t, pos, textRange, plugin_event, msg_sliced, tab, nick, panel; - - // Run through any plugins - plugin_event = {command: msg}; - plugin_event = kiwi.plugs.run('command_run', plugin_event); - if (!plugin_event || typeof plugin_event.command === 'undefined') { - return; - } - - // Update msg if it's been changed by any plugins - msg = plugin_event.command.toString(); - - - if (msg.substring(0, 1) === '/') { - console.log("running " + msg); - parts = msg.split(' '); - switch (parts[0].toLowerCase()) { - case '/j': - case '/join': - kiwi.front.joinChannel(parts[1]); - break; - - case '/connect': - case '/server': - if (typeof parts[1] === 'undefined') { - alert('Usage: /connect servername [port] [ssl] [password]'); - break; - } - - if (typeof parts[2] === 'undefined') { - parts[2] = 6667; - } - - if ((typeof parts[3] === 'undefined') || !parts[3] || (parts[3] === 'false') || (parts[3] === 'no')) { - parts[3] = false; - } else { - parts[3] = true; - } - - kiwi.channels.server.addMsg(null, ' ', '=== Connecting to ' + parts[1] + ' on port ' + parts[2] + (parts[3] ? ' using SSL' : '') + '...', 'status'); - console.log('Connecting to ' + parts[1] + ' on port ' + parts[2] + (parts[3] ? ' using SSL' : '') + '...'); - kiwi.gateway.connect(parts[1], parts[2], parts[3], parts[4]); - break; - - case '/nick': - console.log("/nick"); - if (parts[1] === undefined) { - console.log("calling show nick"); - kiwi.front.ui.showChangeNick(); - } else { - console.log("sending nick"); - kiwi.gateway.changeNick(parts[1]); - } - break; - - case '/part': - if (typeof parts[1] === "undefined") { - if (kiwi.currentPanel.isChannel) { - kiwi.gateway.part(kiwi.currentPanel.get("name")); - } - } else { - kiwi.gateway.part(msg.substring(6)); - } - break; - - case '/names': - if (typeof parts[1] !== "undefined") { - kiwi.gateway.raw(msg.substring(1)); - } else { - if (kiwi.currentPanel.isChannel) { - kiwi.gateway.raw("NAMES " + kiwi.currentPanel.get("name")); - } - } - break; - - case '/debug': - kiwi.gateway.debug(); - break; - - case '/q': - case '/query': - if (typeof parts[1] !== "undefined") { - //tab = new Tabview(parts[1]); - } - break; - - - case '/m': - case '/msg': - if (typeof parts[1] !== "undefined") { - msg_sliced = msg.split(' ').slice(2).join(' '); - kiwi.gateway.privmsg(parts[1], msg_sliced); - - // TODO: Queries - panel = kiwi.channels.getByName(parts[1]); - if (panel) { - panel.addMsg(null, kiwi.gateway.nick, msg_sliced); - } - } - break; - - case '/k': - case '/kick': - if (typeof parts[1] === 'undefined') { - return; - } - t = msg.split(' ', 3); - nick = t[1]; - //kiwi.gateway.kick(Tabview.getCurrentTab().name, nick, t[2]); - break; - - case '/quote': - kiwi.gateway.raw(msg.replace(/^\/quote /i, '')); - break; - - case '/me': - if (kiwi.currentPanel.isChannel) { - kiwi.gateway.ctcp(true, 'ACTION', tab.name, msg.substring(4), function () { - kiwi.currentPanel.addMsg(null, ' ', '* ' + kiwi.gateway.nick + ' ' + msg.substring(4), 'action', 'color:#555;'); - }); - } - //TODO: Queries - break; - - case '/notice': - dest = parts[1]; - msg = parts.slice(2).join(' '); - - kiwi.gateway.notice(dest, msg, function () { - kiwi.front.events.onNotice({}, {nick: kiwi.gateway.nick, channel: dest, msg: msg}); - }); - break; - - /*case '/win': - if (parts[1] !== undefined) { - kiwi.front.ui.windowsShow(parseInt(parts[1], 10)); - } - break;*/ - - case '/quit': - kiwi.gateway.quit(parts.slice(1).join(' ')); - break; - - case '/topic': - if (parts[1] === undefined) { - t = $('.cur_topic'); - if (t.createTextRange) { - pos = t.text().length(); - textRange = t.createTextRange(); - textRange.collapse(true); - textRange.moveEnd(pos); - textRange.moveStart(pos); - textRange.select(); - } else if (t.setSelectionRange) { - t.setSelectionRange(pos, pos); - } - } else { - if (kiwi.currentPanel.isChannel) { - kiwi.gateway.topic(kiwi.currentPanel.get("name"), msg.split(' ', 2)[1]); - } - } - break; - - case '/kiwi': - kiwi.gateway.ctcp(true, 'KIWI', kiwi.currentPanel.get("name"), msg.substring(6)); - break; - - case '/ctcp': - parts = parts.slice(1); - dest = parts.shift(); - t = parts.shift(); - msg = parts.join(' '); - console.log(parts); - - kiwi.gateway.ctcp(true, t, dest, msg, function () { - kiwi.channels.server.addMsg(null, 'CTCP Request', '[to ' + dest + '] ' + t + ' ' + msg, 'ctcp'); - }); - break; - default: - kiwi.currentPanel.addMsg(null, ' ', '--> Invalid command: '+parts[0].substring(1)); - kiwi.gateway.raw(msg.substring(1)); - break; - } - - } else { - //alert('Sending message: '+msg); - if (msg.trim() === '') { - return; - } - if (kiwi.currentPanel.isChannel) { - kiwi.gateway.privmsg(kiwi.currentPanel.get("name"), msg, function () { - kiwi.currentPanel.addMsg(null, kiwi.gateway.nick, msg); - }); - } - } - }, - - - - - - /** - * Sort the window list - */ - sortWindowList: function () { - var win_list = $('#kiwi .windowlist ul'), - listitems = win_list.children('li').get(); - - /*listitems.sort(function (a, b) { - if (a === Tabview.getServerTab().tab[0]) { - return -1; - } - if (b === Tabview.getServerTab().tab[0]) { - return 1; - } - var compA = $(a).text().toUpperCase(), - compB = $(b).text().toUpperCase(); - return (compA < compB) ? -1 : (compA > compB) ? 1 : 0; - }); - - $.each(listitems, function(idx, itm) { - win_list.append(itm); - });*/ - }, - - - - - /** - * Syncs with the Kiwi server - * Not implemented - */ - sync: function () { - kiwi.gateway.sync(); - }, - - /** - * Checks if a given name is the name of a channel - * @param {String} name The name to check - * @returns {Boolean} True if name is the name of a channel, false if it is not - */ - isChannel: function (name) { - var prefix, is_chan; - prefix = name.charAt(0); - if (kiwi.gateway.channel_prefix.indexOf(prefix) > -1) { - is_chan = true; - } else { - is_chan = false; - } - - return is_chan; - }, - - /** - * Formats a message. Adds bold, underline and colouring - * @param {String} msg The message to format - * @returns {String} The HTML formatted message - */ - formatIRCMsg: function (msg) { - var re, next; - - if ((!msg) || (typeof msg !== 'string')) { - return ''; - } - - // bold - if (msg.indexOf(String.fromCharCode(2)) !== -1) { - next = ''; - while (msg.indexOf(String.fromCharCode(2)) !== -1) { - msg = msg.replace(String.fromCharCode(2), next); - next = (next === '') ? '' : ''; - } - if (next === '') { - msg = msg + ''; - } - } - - // underline - if (msg.indexOf(String.fromCharCode(31)) !== -1) { - next = ''; - while (msg.indexOf(String.fromCharCode(31)) !== -1) { - msg = msg.replace(String.fromCharCode(31), next); - next = (next === '') ? '' : ''; - } - if (next === '') { - msg = msg + ''; - } - } - - // colour - /** - * @inner - */ - msg = (function (msg) { - var replace, colourMatch, col, i, match, to, endCol, fg, bg, str; - replace = ''; - /** - * @inner - */ - colourMatch = function (str) { - var re = /^\x03([0-9][0-5]?)(,([0-9][0-5]?))?/; - return re.exec(str); - }; - /** - * @inner - */ - col = function (num) { - switch (parseInt(num, 10)) { - case 0: - return '#FFFFFF'; - case 1: - return '#000000'; - case 2: - return '#000080'; - case 3: - return '#008000'; - case 4: - return '#FF0000'; - case 5: - return '#800040'; - case 6: - return '#800080'; - case 7: - return '#FF8040'; - case 8: - return '#FFFF00'; - case 9: - return '#80FF00'; - case 10: - return '#008080'; - case 11: - return '#00FFFF'; - case 12: - return '#0000FF'; - case 13: - return '#FF55FF'; - case 14: - return '#808080'; - case 15: - return '#C0C0C0'; - default: - return null; - } - }; - if (msg.indexOf('\x03') !== -1) { - i = msg.indexOf('\x03'); - replace = msg.substr(0, i); - while (i < msg.length) { - /** - * @inner - */ - match = colourMatch(msg.substr(i, 6)); - if (match) { - //console.log(match); - // Next colour code - to = msg.indexOf('\x03', i + 1); - endCol = msg.indexOf(String.fromCharCode(15), i + 1); - if (endCol !== -1) { - if (to === -1) { - to = endCol; - } else { - to = ((to < endCol) ? to : endCol); - } - } - if (to === -1) { - to = msg.length; - } - //console.log(i, to); - fg = col(match[1]); - bg = col(match[3]); - str = msg.substring(i + 1 + match[1].length + ((bg !== null) ? match[2].length + 1 : 0), to); - //console.log(str); - replace += '' + str + ''; - i = to; - } else { - if ((msg[i] !== '\x03') && (msg[i] !== String.fromCharCode(15))) { - replace += msg[i]; - } - i++; - } - } - return replace; - } - return msg; - }(msg)); - - return msg; - }, - - /** - * Registers Kiwi IRC as a handler for the irc:// protocol in the browser - */ - registerProtocolHandler: function () { - var state, uri; - url = kiwi_server.replace(/\/kiwi$/, '/?ircuri=%s'); - try { - //state = window.navigator.isProtocolHandlerRegistered('irc', url); - //if (state !== 'registered') { - window.navigator.registerProtocolHandler('irc', url, 'Kiwi IRC'); - //} - } catch (e) { - console.log('Unable to register Kiwi IRC as a handler for irc:// links'); - console.error(e); - } - } - -}; - - - - - -/** -* @constructor -*/ -var ChannelList = function () { - /*globals Utilityview */ - var chanList, view, table, obj, renderTable, waiting; - chanList = []; - - view = new Utilityview('Channel List'); - view.div.css('overflow-y', 'scroll'); - - table = $(''); - table = table.appendTo(view.div); - - waiting = false; - /** - * @inner - */ - renderTable = function () { - var tbody; - tbody = table.children('tbody:first').detach(); - /*tbody.children().each(function (child) { - var i, chan; - child = $(child); - chan = child.children('td:first').text(); - for (i = 0; i < chanList.length; i++) { - if (chanList[i].channel === chan) { - chanList[i].html = child.detach(); - break; - } - } - });*/ - _.each(chanList, function (chan) { - chan.html = $(chan.html).appendTo(tbody); - }); - table = table.append(tbody); - waiting = false; - }; - /** - * @lends ChannelList - */ - return { - /** - * Adds a channel or channels to the list - * @param {Object} channels The channel or Array of channels to add - */ - addChannel: function (channels) { - if (!_.isArray(channels)) { - channels = [channels]; - } - _.each(channels, function (chan) { - var html, channel; - html = $(''); - chan.html = html; - chanList.push(chan); - }); - chanList.sort(function (a, b) { - return b.num_users - a.num_users; - }); - if (!waiting) { - waiting = true; - _.defer(renderTable); - } - }, - /** - * Show the {@link UtilityView} that will display this channel list - */ - show: function () { - view.show(); - }, - /** - * @private - */ - prototype: {constructor: this} - }; -}; - -/* - * MISC VIEW - */ -/** -* @constructor -* A tab to show non-channel and non-query windows to the user -* @param {String} name The name of the view -*/ -var Utilityview = function (name) { - var rand_name = randomString(15), - tmp_divname = 'kiwi_window_' + rand_name, - tmp_tabname = 'kiwi_tab_' + rand_name; - - this.name = rand_name; - this.title = name; - this.topic = ' '; - this.panel = $('#panel1'); - - if (typeof $('.scroller', this.panel)[0] === 'undefined') { - this.panel.append('
'); - } else { - $('.scroller', this.panel).append('
'); - } - - this.tab = $('
  • ' + this.title + '
  • '); - this.tab.click(function () { - kiwi.front.utilityviews[rand_name.toLowerCase()].show(); - }); - $('#kiwi .utilityviewlist ul').append(this.tab); - kiwi.front.ui.doLayoutSize(); - - this.div = $('#' + tmp_divname); - this.div.css('overflow', 'hidden'); - - kiwi.front.utilityviews[rand_name.toLowerCase()] = this; -}; - -Utilityview.prototype.name = null; -Utilityview.prototype.title = null; -Utilityview.prototype.div = null; -Utilityview.prototype.tab = null; -Utilityview.prototype.topic = ' '; -Utilityview.prototype.panel = null; -/** -* Brings this view to the foreground -*/ -Utilityview.prototype.show = function () { - $('.messages', this.panel).removeClass("active"); - $('#kiwi .userlist ul').removeClass("active"); - $('#kiwi .toolbars ul li').removeClass("active"); - - this.panel.css('overflow-y', 'hidden'); - $('#windows').css('right', 0); - // Activate this tab! - this.div.addClass('active'); - this.tab.addClass('active'); - - this.addPartImage(); - - kiwi.front.ui.setTopicText(this.topic); - kiwi.front.cur_channel = this; - - // If we're using fancy scrolling, refresh it - if (touch_scroll) { - touch_scroll.refresh(); - } -}; -/** -* Sets a new panel to be this view's parent -* @param {JQuery} new_panel The new parent -*/ -Utilityview.prototype.setPanel = function (new_panel) { - this.div.detach(); - this.panel = new_panel; - this.panel.append(this.div); - this.show(); -}; -/** -* Removes the panel from the UI and destroys its contents -*/ -Utilityview.prototype.close = function () { - this.div.remove(); - this.tab.remove(); - - if (Tabview.getCurrentTab() === this) { - kiwi.front.tabviews.server.show(); - } - delete kiwi.front.utilityviews[this.name.toLowerCase()]; -}; -/** -* Adds the close image to the tab -*/ -Utilityview.prototype.addPartImage = function () { - this.clearPartImage(); - - // We can't close this tab, so don't have the close image - if (this.name === 'server') { - return; - } - - var del_html = ''; - this.tab.append(del_html); - - $('.tab_part', this.tab).click(function () { - if (Tabview.getCurrentTab().name !== 'server') { - Tabview.getCurrentTab().close(); - } - }); -}; -/** -* Removes the close image from the tab -*/ -Utilityview.prototype.clearPartImage = function () { - $('#kiwi .toolbars .tab_part').remove(); -}; - -/** -* @constructor -* Floating message box -* @param {String} classname The CSS classname to apply to the box -*/ -var Box = function (classname) { - this.id = randomString(10); - var tmp = $('
    '); - $('#kiwi').append(tmp); - this.box = $('#' + this.id); - this.content = $('#' + this.id + ' .boxarea'); - - this.box.draggable({ stack: ".box" }); - this.content.click(function () {}); - //this.box.click(function(){ $(this)..css }); -}; -Box.prototype.create = function (name, classname) { - -}; -Box.prototype.id = null; -Box.prototype.box = null; -Box.prototype.content = null; -Box.prototype.destroy = function () { - var name; - this.box.remove(); - for (name in kiwi.front.boxes) { - if (kiwi.front.boxes[name].id === this.id) { - delete kiwi.front.boxes[name]; - } - } -}; -Box.prototype.height = function () { - return this.box.height(); -}; diff --git a/client/js/front.ui.js b/client/js/front.ui.js deleted file mode 100755 index e7d2eb4..0000000 --- a/client/js/front.ui.js +++ /dev/null @@ -1,490 +0,0 @@ -/*jslint browser: true, devel: true, sloppy: true, plusplus: true, nomen: true, forin: true, continue: true */ -/*globals kiwi, $, _, Tabview, Userlist, User, Box */ -/** -* @namespace -*/ -kiwi.front.ui = { - - /** - * - */ - doLayoutSize: function () { - var kiwi, toolbars, ul, n_top, n_bottom, nl; - kiwi = $('#kiwi'); - - if (kiwi.width() < 330 && !kiwi.hasClass('small_kiwi')) { - console.log("switching to small kiwi"); - kiwi.removeClass('large_kiwi'); - kiwi.addClass('small_kiwi'); - } else if (kiwi.width() >= 330 && !kiwi.hasClass('large_kiwi')) { - kiwi.removeClass('small_kiwi'); - kiwi.addClass('large_kiwi'); - } - - toolbars = $('#kiwi .toolbars'); - ul = $('#kiwi .userlist'); - - n_top = parseInt(toolbars.offset().top, 10) + parseInt(toolbars.outerHeight(true), 10); - n_bottom = $(document).height() - parseInt($('#kiwi .control').offset().top, 10); - - $('#kiwi .windows').css({top: n_top + 'px', bottom: n_bottom + 'px'}); - ul.css({top: n_top + 'px', bottom: n_bottom + 'px'}); - - nl = $('#nicklist_resize'); - nl.css({top: n_top + 'px', bottom: n_bottom + 'px', left: $(document).width() - ul.outerWidth(true)}); - }, - - /** - * - */ - doLayout: function () { - $('#kiwi .msginput .nick a').text(kiwi.gateway.nick); - $('#kiwi_msginput').val(' '); - $('#kiwi_msginput').focus(); - }, - - /** - * Binds keyboard and mouse events to handlers - */ - registerKeys: function () { - var tabcomplete = {active: false, data: [], prefix: ''}; - $('#kiwi_msginput').bind('keydown', function (e) { - var windows, meta, num, msg, data, self; - windows = $('#windows'); - - if (navigator.appVersion.indexOf("Mac") !== -1) { - meta = e.ctrlKey; - } else { - meta = e.altKey; - } - - if (e.which !== 9) { - tabcomplete.active = false; - tabcomplete.data = []; - tabcomplete.prefix = ''; - } - - switch (true) { - case (e.which >= 48) && (e.which <= 57): - if (meta) { - num = e.which - 48; - if (num === 0) { - num = 10; - } - num = num - 1; - kiwi.front.ui.windowsShow(num); - return false; - } - break; - case e.which === 27: // escape - return false; - case e.which === 13: // return - msg = $('#kiwi_msginput').val(); - msg = msg.trim(); - - kiwi.front.buffer.push(msg); - kiwi.front.buffer_pos = kiwi.front.buffer.length; - - kiwi.front.run(msg); - $('#kiwi_msginput').val(''); - - break; - case e.which === 33: // page up - console.log("page up"); - windows[0].scrollTop = windows[0].scrollTop - windows.height(); - return false; - case e.which === 34: // page down - windows[0].scrollTop = windows[0].scrollTop + windows.height(); - return false; - case e.which === 37: // left - if (meta) { - kiwi.front.ui.windowsPrevious(); - return false; - } - break; - case e.which === 38: // up - if (kiwi.front.buffer_pos > 0) { - kiwi.front.buffer_pos--; - $('#kiwi_msginput').val(kiwi.front.buffer[kiwi.front.buffer_pos]); - } - break; - case e.which === 39: // right - if (meta) { - kiwi.front.ui.windowsNext(); - return false; - } - break; - case e.which === 40: // down - if (kiwi.front.buffer_pos < kiwi.front.buffer.length) { - kiwi.front.buffer_pos++; - $('#kiwi_msginput').val(kiwi.front.buffer[kiwi.front.buffer_pos]); - } - break; - - case e.which === 9: // tab - tabcomplete.active = true; - if (_.isEqual(tabcomplete.data, [])) { - // Get possible autocompletions - data = []; - $.each(Tabview.getCurrentTab().userlist.listUsers(false), function () { - var nick; - nick = User.stripPrefix(this.nick); - data.push(nick); - }); - data = _.sortBy(data, function (nick) { - return nick; - }); - tabcomplete.data = data; - } - - if (this.value[this.selectionStart - 1] === ' ') { - return false; - } - self = this; - (function () { - var tokens = self.value.substring(0, self.selectionStart).split(" "), - val, - p1, - newnick, - range, - nick = tokens[tokens.length - 1]; - if (tabcomplete.prefix === '') { - tabcomplete.prefix = nick; - } - - tabcomplete.data = _.select(tabcomplete.data, function (n) { - return (n.toLowerCase().indexOf(tabcomplete.prefix.toLowerCase()) === 0); - }); - - if (tabcomplete.data.length > 0) { - p1 = self.selectionStart - (nick.length); - val = self.value.substr(0, p1); - newnick = tabcomplete.data.shift(); - tabcomplete.data.push(newnick); - val += newnick; - val += self.value.substr(self.selectionStart); - self.value = val; - if (self.setSelectionRange) { - self.setSelectionRange(p1 + newnick.length, p1 + newnick.length); - } else if (self.createTextRange) { // not sure if this bit is actually needed.... - range = self.createTextRange(); - range.collapse(true); - range.moveEnd('character', p1 + newnick.length); - range.moveStart('character', p1 + newnick.length); - range.select(); - } - } - }()); - return false; - } - }); - - - $('#kiwi .control .msginput .nick').click(function () { - kiwi.front.ui.showChangeNick(); - }); - - - - - - $('#kiwi .plugins .load_plugin_file').click(function () { - if (typeof kiwi.front.boxes.plugins !== "undefined") { - return; - } - - kiwi.front.boxes.plugins = new Box("plugin_file"); - $('#tmpl_plugins').tmpl({}).appendTo(kiwi.front.boxes.plugins.content); - kiwi.front.boxes.plugins.box.css('top', -(kiwi.front.boxes.plugins.height + 40)); - - // Populate the plugin list.. - function enumPlugins() { - var lst, j, txt; - lst = $('#plugin_list'); - lst.find('option').remove(); - for (j in kiwi.plugs.loaded) { - txt = kiwi.plugs.loaded[j].name; - lst.append(''); - } - } - enumPlugins(); - - // Event bindings - $('#kiwi .plugin_file').submit(function () { - $('
    ').load($('.txtpluginfile').val(), function (e) { - enumPlugins(); - }); - return false; - }); - $('#kiwi .cancelpluginfile').click(function () { - kiwi.front.boxes.plugins.destroy(); - }); - - $('#kiwi #plugins_list_unload').click(function () { - var selected_plugin; - selected_plugin = $('#plugin_list').val(); - kiwi.plugs.unloadPlugin(selected_plugin); - enumPlugins(); - }); - - $('#kiwi .txtpluginfile').focus(); - - }); - - $('#kiwi .plugins .reload_css').click(function () { - var links = document.getElementsByTagName("link"), - i; - for (i = 0; i < links.length; i++) { - if (links[i].rel === "stylesheet") { - if (links[i].href.indexOf("?") === -1) { - links[i].href += "?"; - } - links[i].href += "x"; - } - } - }); - - - $('#kiwi .about .about_close').click(function () { - $('#kiwi .about').css('display', 'none'); - }); - - - $('#kiwi .poweredby').click(function () { - $('#kiwi .about').css('display', 'block'); - }); - - }, - - /** - * Prevents the user from accidentally refreshing the page by pressing F5 or + R - */ - preventRefresh: function () { - $(document).keydown(function (e) { - // meta + r || F5 - if ((e.metaKey && e.which === 82) || e.which === 116) { - e.preventDefault(); - e.stopPropagation(); - - // Reset IE keyCode - event.keyCode = 0; - - return false; - } - }); - }, - - /** - * Prompts user for a new nick - */ - showChangeNick: function (caption) { - caption = (typeof caption !== 'undefined') ? caption : ''; - - $('#kiwi').append($('#tmpl_change_nick').tmpl({})); - - $('#kiwi .newnick .caption').text(caption); - - $('#kiwi .form_newnick').submit(function () { - kiwi.front.run('/NICK ' + $('#kiwi .txtnewnick').val()); - $('#kiwi .newnick').remove(); - return false; - }); - - $('#kiwi .txtnewnick').keypress(function (ev) { - if (!this.first_press) { - this.first_press = true; - return false; - } - }); - - $('#kiwi .txtnewnick').keydown(function (ev) { - if (ev.which === 27) { // ESC - $('#kiwi_msginput').focus(); - $('#kiwi .newnick').remove(); - } - }); - - $('#kiwi .cancelnewnick').click(function () { - $('#kiwi .newnick').remove(); - }); - - $('#kiwi .txtnewnick').focus(); - }, - - - /** - * Displays the current channel's topic in the topic bar - */ - setTopicText: function (new_topic) { - kiwi.front.cache.original_topic = new_topic; - $('#kiwi .cur_topic .topic').text(new_topic); - kiwi.front.ui.doLayoutSize(); - }, - - - - /** - * - */ - tabviewsNext: function () { - var wl = $('#kiwi .windowlist ul'), - next_left = parseInt(wl.css('text-indent').replace('px', ''), 10) + 170; - wl.css('text-indent', next_left); - }, - - /** - * - */ - tabviewsPrevious: function () { - var wl = $('#kiwi .windowlist ul'), - next_left = parseInt(wl.css('text-indent').replace('px', ''), 10) - 170; - wl.css('text-indent', next_left); - }, - - /** - * Displays the next tab - */ - windowsNext: function () { - /*var tab, tabs, curTab, next; - next = false; - tabs = Tabview.getAllTabs(); - curTab = Tabview.getCurrentTab(); - for (tab in tabs) { - if (!next) { - if (tabs[tab] === curTab) { - next = true; - continue; - } - } else { - tabs[tab].show(); - return; - } - }*/ - }, - - /** - * Displays the previous tab - */ - windowsPrevious: function () { - /*var tab, tabs, curTab, prev_tab, next; - next = false; - tabs = Tabview.getAllTabs(); - curTab = Tabview.getCurrentTab(); - for (tab in tabs) { - if (tabs[tab] === curTab) { - if (prev_tab) { - prev_tab.show(); - } - return; - } - prev_tab = tabs[tab]; - }*/ - }, - - /** - * Shows a specific tab - * @param {Number} num The index of the tab to show - */ - windowsShow: function (num) { - /*num = parseInt(num, 10); - console.log('Showing window ' + num.toString()); - var i = 0, tab, tabs; - tabs = Tabview.getAllTabs(); - for (tab in tabs) { - if (i === num) { - tabs[tab].show(); - return; - } - i++; - }*/ - }, - - - /** - * - */ - barsShow: function () { - $('#kiwi .control').slideDown(); - $('#kiwi .toolbars').slideDown(400, function () { - kiwi.front.ui.doLayoutSize(); - }); - }, - - /** - * - */ - barsHide: function () { - $('#kiwi .control').slideUp(); - $('#kiwi .toolbars').slideUp(400, function () { - kiwi.front.ui.doLayoutSize(); - }); - }, - - - - - - - - /** - * Displays the tutorial - */ - tutorial: function () { - var b = $('
    '), - bounds, - s, - current_s, - next_s; - b.css({display: 'block', position: 'absolute', height: '100%', width: '100%'}); - $('#kiwi').append(b); - - /** - * @inner - */ - bounds = function (el) { - var b = 3, ret = {}; - ret.top = el.offset().top; - ret.left = el.offset().left; - ret.width = parseInt(el.outerWidth(true), 10) - (b * 2); - ret.height = parseInt(el.outerHeight(true), 10) - (b * 2); - return ret; - }; - - s = [ - function () { - b.animate(bounds($('#kiwi .msginput')), 2000, '', next_s); - }, - - function () { - b.animate(bounds($('#kiwi .userlist')), 2000, '', next_s); - }, - - function () { - b.animate(bounds($('#panel1')), 2000, '', next_s); - }, - - function () { - b.animate(bounds($('#kiwi .cur_topic')), 2000, '', next_s); - }, - - function () { - b.animate(bounds($('#kiwi .windowlist')), 2000, '', next_s); - } - ]; - - - current_s = -1; - /** - * @inner - */ - next_s = function () { - current_s++; - if (typeof s[current_s] === 'function') { - console.log('Animating ' + current_s.toString()); - s[current_s](); - } - }; - next_s(); - } - -}; \ No newline at end of file diff --git a/client/js/gateway.js b/client/js/gateway.js deleted file mode 100755 index c9dbce7..0000000 --- a/client/js/gateway.js +++ /dev/null @@ -1,396 +0,0 @@ -/*jslint devel: true, browser: true, confusion: true, sloppy: true, maxerr: 50, indent: 4 */ -/*globals io, $, kiwi, kiwi_server */ -/** - @namespace Gateway between the client and server -*/ -kiwi.gateway = { - /** - * The current nickname - * @type String - */ - nick: 'kiwi', - /** - * The session ID - */ - session_id: null, - /** - * Whether we're syncing or not - * @type Boolean - */ - syncing: false, - /** - * The channel prefix for this network - * @type String - */ - channel_prefix: '#', - /** - * The name of the network - * @type String - */ - network_name: '', - /** - * The user prefixes for channel owner/admin/op/voice etc. on this network - * @type Array - */ - user_prefixes: ['~', '&', '@', '+'], - /** - * The Socket.IO socket - * @type Object - */ - socket: null, - /** - * The location of the remote Socket.IO endpoint - * @type String - */ - kiwi_server: null, - - /** - * Configures {@link kiwi.gateway.kiwi_server} - * @param {String} kiwi_server The location of the remote Socket.IO endpoint - */ - start: function (kiwi_server) { - if (typeof kiwi_server !== 'undefined') { - kiwi.gateway.kiwi_server = kiwi_server; - } - }, - - /** - * Connects to the server - * @param {String} host The hostname or IP address of the IRC server to connect to - * @param {Number} port The port of the IRC server to connect to - * @param {Boolean} ssl Whether or not to connect to the IRC server using SSL - * @param {String} password The password to supply to the IRC server during registration - * @param {Function} callback A callback function to be invoked once Kiwi's server has connected to the IRC server - */ - connect: function (host, port, ssl, password, callback) { - if (typeof kiwi.gateway.kiwi_server !== 'undefined') { - kiwi.gateway.socket = io.connect(kiwi.gateway.kiwi_server, { - 'try multiple transports': true, - 'connect timeout': 3000, - 'max reconnection attempts': 7, - 'reconnection delay': 2000 - }); - kiwi.gateway.socket.on('connect_failed', function (reason) { - // TODO: When does this even actually get fired? I can't find a case! ~Darren - console.debug('Unable to connect Socket.IO', reason); - console.log("kiwi.gateway.socket.on('connect_failed')"); - //kiwi.front.tabviews.server.addMsg(null, ' ', 'Unable to connect to Kiwi IRC.\n' + reason, 'error'); - kiwi.gateway.socket.disconnect(); - $(kiwi.gateway).trigger("onconnect_fail", {reason: reason}); - kiwi.gateway.sendData = function () {}; - }).on('error', function (e) { - $(kiwi.gateway).trigger("onconnect_fail", {reason: e}); - console.log("kiwi.gateway.socket.on('error')"); - console.log(e); - }); - - kiwi.gateway.socket.on('connecting', function (transport_type) { - console.log("kiwi.gateway.socket.on('connecting')"); - $(kiwi.gateway).trigger("connecting"); - }); - - kiwi.gateway.socket.on('connect', function () { - // This is also called when reconnected.. - kiwi.gateway.sendData = function (data, callback) { - kiwi.gateway.socket.emit('message', {sid: this.session_id, data: $.toJSON(data)}, callback); - }; - - kiwi.gateway.socket.emit('irc connect', kiwi.gateway.nick, host, port, ssl, password, callback); - console.log("kiwi.gateway.socket.on('connect')"); - }); - kiwi.gateway.socket.on('too_many_connections', function () { - $(kiwi.gateway).trigger("onconnect_fail", {reason: 'too_many_connections'}); - }); - - kiwi.gateway.socket.on('message', kiwi.gateway.parse); - kiwi.gateway.socket.on('disconnect', function () { - // Teardown procedure here - $(kiwi.gateway).trigger("ondisconnect", {}); - console.log("kiwi.gateway.socket.on('disconnect')"); - }); - kiwi.gateway.socket.on('close', function () { - console.log("kiwi.gateway.socket.on('close')"); - }); - - kiwi.gateway.socket.on('reconnecting', function (reconnectionDelay, reconnectionAttempts) { - console.log("kiwi.gateway.socket.on('reconnecting')"); - $(kiwi.gateway).trigger("onreconnecting", {delay: reconnectionDelay, attempts: reconnectionAttempts}); - }); - kiwi.gateway.socket.on('reconnect_failed', function () { - console.log("kiwi.gateway.socket.on('reconnect_failed')"); - }); - kiwi.gateway.socket.on('error', console.log); - } - }, - - /* - Events: - msg - action - server_connect - options - motd - notice - userlist - nick - join - topic - part - kick - quit - whois - syncchannel_redirect - debug - */ - /** - * Parses the response from the server - */ - parse: function (item) { - if (item.event !== undefined) { - switch (item.event) { - case 'options': - $.each(item.options, function (name, value) { - switch (name) { - case 'CHANTYPES': - kiwi.gateway.channel_prefix = value.charAt(0); - break; - case 'NETWORK': - kiwi.gateway.network_name = value; - break; - case 'PREFIX': - kiwi.gateway.user_prefixes = value; - break; - } - }); - break; - - case 'sync': - if (kiwi.gateway.onSync && kiwi.gateway.syncing) { - kiwi.gateway.syncing = false; - kiwi.gateway.onSync(item); - } - break; - - case 'kiwi': - $(kiwi.gateway).trigger('kiwi.' + item.namespace, item.data); - break; - } - - $(kiwi.gateway).trigger('on' + item.event, item); - } - }, - - /** - * Sends data to the server - * @private - * @param {Object} data The data to send - * @param {Function} callback A callback function - */ - sendData: function (data, callback) {}, - - /** - * Sends a PRIVMSG message - * @param {String} target The target of the message (e.g. a channel or nick) - * @param {String} msg The message to send - * @param {Function} callback A callback function - */ - privmsg: function (target, msg, callback) { - var data = { - method: 'privmsg', - args: { - target: target, - msg: msg - } - }; - - kiwi.gateway.sendData(data, callback); - }, - - /** - * Sends a NOTICE message - * @param {String} target The target of the message (e.g. a channel or nick) - * @param {String} msg The message to send - * @param {Function} callback A callback function - */ - notice: function (target, msg, callback) { - var data = { - method: 'notice', - args: { - target: target, - msg: msg - } - }; - - kiwi.gateway.sendData(data, callback); - }, - - /** - * Sends a CTCP message - * @param {Boolean} request Indicates whether this is a CTCP request (true) or reply (false) - * @param {String} type The type of CTCP message, e.g. 'VERSION', 'TIME', 'PING' etc. - * @param {String} target The target of the message, e.g a channel or nick - * @param {String} params Additional paramaters - * @param {Function} callback A callback function - */ - ctcp: function (request, type, target, params, callback) { - var data = { - method: 'ctcp', - args: { - request: request, - type: type, - target: target, - params: params - } - }; - - kiwi.gateway.sendData(data, callback); - }, - - /** - * @param {String} target The target of the message (e.g. a channel or nick) - * @param {String} msg The message to send - * @param {Function} callback A callback function - */ - action: function (target, msg, callback) { - this.ctcp(true, 'ACTION', target, msg, callback); - }, - - /** - * Joins a channel - * @param {String} channel The channel to join - * @param {String} key The key to the channel - * @param {Function} callback A callback function - */ - join: function (channel, key, callback) { - var data = { - method: 'join', - args: { - channel: channel, - key: key - } - }; - - kiwi.gateway.sendData(data, callback); - }, - - /** - * Leaves a channel - * @param {String} channel The channel to part - * @param {Function} callback A callback function - */ - part: function (channel, callback) { - var data = { - method: 'part', - args: { - channel: channel - } - }; - - kiwi.gateway.sendData(data, callback); - }, - - /** - * Queries or modifies a channell topic - * @param {String} channel The channel to query or modify - * @param {String} new_topic The new topic to set - * @param {Function} callback A callback function - */ - topic: function (channel, new_topic, callback) { - var data = { - method: 'topic', - args: { - channel: channel, - topic: new_topic - } - }; - - kiwi.gateway.sendData(data, callback); - }, - - /** - * Kicks a user from a channel - * @param {String} channel The channel to kick the user from - * @param {String} nick The nick of the user to kick - * @param {String} reason The reason for kicking the user - * @param {Function} callback A callback function - */ - kick: function (channel, nick, reason, callback) { - var data = { - method: 'kick', - args: { - channel: channel, - nick: nick, - reason: reason - } - }; - - kiwi.gateway.sendData(data, callback); - }, - - /** - * Disconnects us from the server - * @param {String} msg The quit message to send to the IRC server - * @param {Function} callback A callback function - */ - quit: function (msg, callback) { - msg = msg || ""; - var data = { - method: 'quit', - args: { - message: msg - } - }; - - kiwi.gateway.sendData(data, callback); - }, - - /** - * Sends a string unmodified to the IRC server - * @param {String} data The data to send to the IRC server - * @param {Function} callback A callback function - */ - raw: function (data, callback) { - data = { - method: 'raw', - args: { - data: data - } - }; - - kiwi.gateway.sendData(data, callback); - }, - - /** - * Changes our nickname - * @param {String} new_nick Our new nickname - * @param {Function} callback A callback function - */ - changeNick: function (new_nick, callback) { - var data = { - method: 'nick', - args: { - nick: new_nick - } - }; - - kiwi.gateway.sendData(data, callback); - }, - - /** - * Sends data to a fellow Kiwi IRC user - * @param {String} target The nick of the Kiwi IRC user to send to - * @param {String} data The data to send - * @param {Function} callback A callback function - */ - kiwi: function (target, data, callback) { - data = { - method: 'kiwi', - args: { - target: target, - data: data - } - }; - - kiwi.gateway.sendData(data, callback); - } -}; diff --git a/client/js/iscroll.js b/client/js/iscroll.js deleted file mode 100755 index eca1eed..0000000 --- a/client/js/iscroll.js +++ /dev/null @@ -1,963 +0,0 @@ -/*! - * iScroll v4.1.4 ~ Copyright (c) 2011 Matteo Spinelli, http://cubiq.org - * Released under MIT license, http://cubiq.org/license - */ - -(function(){ -var m = Math, - vendor = (/webkit/i).test(navigator.appVersion) ? 'webkit' : - (/firefox/i).test(navigator.userAgent) ? 'Moz' : - 'opera' in window ? 'O' : '', - - // Browser capabilities - has3d = 'WebKitCSSMatrix' in window && 'm11' in new WebKitCSSMatrix(), - hasTouch = 'ontouchstart' in window, - hasTransform = vendor + 'Transform' in document.documentElement.style, - isAndroid = (/android/gi).test(navigator.appVersion), - isIDevice = (/iphone|ipad/gi).test(navigator.appVersion), - isPlaybook = (/playbook/gi).test(navigator.appVersion), - hasTransitionEnd = (isIDevice || isPlaybook) && 'onwebkittransitionend' in window, - nextFrame = (function() { - return window.requestAnimationFrame - || window.webkitRequestAnimationFrame - || window.mozRequestAnimationFrame - || window.oRequestAnimationFrame - || window.msRequestAnimationFrame - || function(callback) { return setTimeout(callback, 17); } - })(), - cancelFrame = (function () { - return window.cancelRequestAnimationFrame - || window.webkitCancelRequestAnimationFrame - || window.mozCancelRequestAnimationFrame - || window.oCancelRequestAnimationFrame - || window.msCancelRequestAnimationFrame - || clearTimeout - })(), - - // Events - RESIZE_EV = 'onorientationchange' in window ? 'orientationchange' : 'resize', - START_EV = hasTouch ? 'touchstart' : 'mousedown', - MOVE_EV = hasTouch ? 'touchmove' : 'mousemove', - END_EV = hasTouch ? 'touchend' : 'mouseup', - CANCEL_EV = hasTouch ? 'touchcancel' : 'mouseup', - WHEEL_EV = vendor == 'Moz' ? 'DOMMouseScroll' : 'mousewheel', - - // Helpers - trnOpen = 'translate' + (has3d ? '3d(' : '('), - trnClose = has3d ? ',0)' : ')', - - // Constructor - iScroll = function (el, options) { - var that = this, - doc = document, - i; - - that.wrapper = typeof el == 'object' ? el : doc.getElementById(el); - that.wrapper.style.overflow = 'hidden'; - that.scroller = that.wrapper.children[0]; - - // Default options - that.options = { - hScroll: true, - vScroll: true, - bounce: true, - bounceLock: false, - momentum: true, - lockDirection: true, - useTransform: true, - useTransition: false, - - // Scrollbar - hScrollbar: true, - vScrollbar: true, - fixedScrollbar: isAndroid, - hideScrollbar: isIDevice, - fadeScrollbar: isIDevice && has3d, - scrollbarClass: '', - - // Zoom - zoom: false, - zoomMin: 1, - zoomMax: 4, - doubleTapZoom: 2, - - // Snap - snap: false, - snapThreshold: 1, - - // Events - onRefresh: null, - onBeforeScrollStart: function (e) { e.preventDefault(); }, - onScrollStart: null, - onBeforeScrollMove: null, - onScrollMove: null, - onBeforeScrollEnd: null, - onScrollEnd: null, - onTouchEnd: null, - onDestroy: null - }; - - // User defined options - for (i in options) that.options[i] = options[i]; - - // Normalize options - that.options.useTransform = hasTransform ? that.options.useTransform : false; - that.options.hScrollbar = that.options.hScroll && that.options.hScrollbar; - that.options.vScrollbar = that.options.vScroll && that.options.vScrollbar; - that.options.zoom = that.options.useTransform && that.options.zoom; - that.options.useTransition = hasTransitionEnd && that.options.useTransition; - - // Set some default styles - that.scroller.style[vendor + 'TransitionProperty'] = that.options.useTransform ? '-' + vendor.toLowerCase() + '-transform' : 'top left'; - that.scroller.style[vendor + 'TransitionDuration'] = '0'; - that.scroller.style[vendor + 'TransformOrigin'] = '0 0'; - if (that.options.useTransition) that.scroller.style[vendor + 'TransitionTimingFunction'] = 'cubic-bezier(0.33,0.66,0.66,1)'; - - if (that.options.useTransform) that.scroller.style[vendor + 'Transform'] = trnOpen + '0,0' + trnClose; - else that.scroller.style.cssText += ';top:0;left:0'; - - if (that.options.useTransition) that.options.fixedScrollbar = true; - - that.refresh(); - - that._bind(RESIZE_EV, window); - that._bind(START_EV); - if (!hasTouch) { - that._bind('mouseout', that.wrapper); - that._bind(WHEEL_EV); - } - }; - -// Prototype -iScroll.prototype = { - enabled: true, - x: 0, - y: 0, - steps: [], - scale: 1, - currPageX: 0, currPageY: 0, - pagesX: [], pagesY: [], - aniTime: null, - - handleEvent: function (e) { - var that = this; - switch(e.type) { - case START_EV: that._start(e); break; - case MOVE_EV: that._move(e); break; - case END_EV: - case CANCEL_EV: that._end(e); break; - case RESIZE_EV: that._resize(); break; - case WHEEL_EV: that._wheel(e); break; - case 'mouseout': that._mouseout(e); break; - case 'webkitTransitionEnd': that._transitionEnd(e); break; - } - }, - - _scrollbar: function (dir) { - var that = this, - doc = document, - bar; - - if (!that[dir + 'Scrollbar']) { - if (that[dir + 'ScrollbarWrapper']) { - if (hasTransform) that[dir + 'ScrollbarIndicator'].style[vendor + 'Transform'] = ''; - that[dir + 'ScrollbarWrapper'].parentNode.removeChild(that[dir + 'ScrollbarWrapper']); - that[dir + 'ScrollbarWrapper'] = null; - that[dir + 'ScrollbarIndicator'] = null; - } - - return; - } - - if (!that[dir + 'ScrollbarWrapper']) { - // Create the scrollbar wrapper - bar = doc.createElement('div'); - - if (that.options.scrollbarClass) bar.className = that.options.scrollbarClass + dir.toUpperCase(); - else bar.style.cssText = 'position:absolute;z-index:100;' + (dir == 'h' ? 'height:7px;bottom:1px;left:2px;right:' + (that.vScrollbar ? '7' : '2') + 'px' : 'width:7px;bottom:' + (that.hScrollbar ? '7' : '2') + 'px;top:2px;right:1px'); - - bar.style.cssText += ';pointer-events:none;-' + vendor + '-transition-property:opacity;-' + vendor + '-transition-duration:' + (that.options.fadeScrollbar ? '350ms' : '0') + ';overflow:hidden;opacity:' + (that.options.hideScrollbar ? '0' : '1'); - - that.wrapper.appendChild(bar); - that[dir + 'ScrollbarWrapper'] = bar; - - // Create the scrollbar indicator - bar = doc.createElement('div'); - if (!that.options.scrollbarClass) { - bar.style.cssText = 'position:absolute;z-index:100;background:rgba(0,0,0,0.5);border:1px solid rgba(255,255,255,0.9);-' + vendor + '-background-clip:padding-box;-' + vendor + '-box-sizing:border-box;' + (dir == 'h' ? 'height:100%' : 'width:100%') + ';-' + vendor + '-border-radius:3px;border-radius:3px'; - } - bar.style.cssText += ';pointer-events:none;-' + vendor + '-transition-property:-' + vendor + '-transform;-' + vendor + '-transition-timing-function:cubic-bezier(0.33,0.66,0.66,1);-' + vendor + '-transition-duration:0;-' + vendor + '-transform:' + trnOpen + '0,0' + trnClose; - if (that.options.useTransition) bar.style.cssText += ';-' + vendor + '-transition-timing-function:cubic-bezier(0.33,0.66,0.66,1)'; - - that[dir + 'ScrollbarWrapper'].appendChild(bar); - that[dir + 'ScrollbarIndicator'] = bar; - } - - if (dir == 'h') { - that.hScrollbarSize = that.hScrollbarWrapper.clientWidth; - that.hScrollbarIndicatorSize = m.max(m.round(that.hScrollbarSize * that.hScrollbarSize / that.scrollerW), 8); - that.hScrollbarIndicator.style.width = that.hScrollbarIndicatorSize + 'px'; - that.hScrollbarMaxScroll = that.hScrollbarSize - that.hScrollbarIndicatorSize; - that.hScrollbarProp = that.hScrollbarMaxScroll / that.maxScrollX; - } else { - that.vScrollbarSize = that.vScrollbarWrapper.clientHeight; - that.vScrollbarIndicatorSize = m.max(m.round(that.vScrollbarSize * that.vScrollbarSize / that.scrollerH), 8); - that.vScrollbarIndicator.style.height = that.vScrollbarIndicatorSize + 'px'; - that.vScrollbarMaxScroll = that.vScrollbarSize - that.vScrollbarIndicatorSize; - that.vScrollbarProp = that.vScrollbarMaxScroll / that.maxScrollY; - } - - // Reset position - that._scrollbarPos(dir, true); - }, - - _resize: function () { - this.refresh(); - }, - - _pos: function (x, y) { - x = this.hScroll ? x : 0; - y = this.vScroll ? y : 0; - - if (this.options.useTransform) { - this.scroller.style[vendor + 'Transform'] = trnOpen + x + 'px,' + y + 'px' + trnClose + ' scale(' + this.scale + ')'; - } else { - x = m.round(x); - y = m.round(y); - this.scroller.style.left = x + 'px'; - this.scroller.style.top = y + 'px'; - } - - this.x = x; - this.y = y; - - this._scrollbarPos('h'); - this._scrollbarPos('v'); - }, - - _scrollbarPos: function (dir, hidden) { - var that = this, - pos = dir == 'h' ? that.x : that.y, - size; - - if (!that[dir + 'Scrollbar']) return; - - pos = that[dir + 'ScrollbarProp'] * pos; - - if (pos < 0) { - if (!that.options.fixedScrollbar) { - size = that[dir + 'ScrollbarIndicatorSize'] + m.round(pos * 3); - if (size < 8) size = 8; - that[dir + 'ScrollbarIndicator'].style[dir == 'h' ? 'width' : 'height'] = size + 'px'; - } - pos = 0; - } else if (pos > that[dir + 'ScrollbarMaxScroll']) { - if (!that.options.fixedScrollbar) { - size = that[dir + 'ScrollbarIndicatorSize'] - m.round((pos - that[dir + 'ScrollbarMaxScroll']) * 3); - if (size < 8) size = 8; - that[dir + 'ScrollbarIndicator'].style[dir == 'h' ? 'width' : 'height'] = size + 'px'; - pos = that[dir + 'ScrollbarMaxScroll'] + (that[dir + 'ScrollbarIndicatorSize'] - size); - } else { - pos = that[dir + 'ScrollbarMaxScroll']; - } - } - - that[dir + 'ScrollbarWrapper'].style[vendor + 'TransitionDelay'] = '0'; - that[dir + 'ScrollbarWrapper'].style.opacity = hidden && that.options.hideScrollbar ? '0' : '1'; - that[dir + 'ScrollbarIndicator'].style[vendor + 'Transform'] = trnOpen + (dir == 'h' ? pos + 'px,0' : '0,' + pos + 'px') + trnClose; - }, - - _start: function (e) { - var that = this, - point = hasTouch ? e.touches[0] : e, - matrix, x, y, - c1, c2, target; - - if (!that.enabled) return; - - if (that.options.onBeforeScrollStart) that.options.onBeforeScrollStart.call(that, e); - - if (that.options.useTransition) that._transitionTime(0); - - that.moved = false; - that.animating = false; - that.zoomed = false; - that.distX = 0; - that.distY = 0; - that.absDistX = 0; - that.absDistY = 0; - that.dirX = 0; - that.dirY = 0; - - // Gesture start - if (that.options.zoom && hasTouch && e.touches.length > 1) { - c1 = m.abs(e.touches[0].pageX-e.touches[1].pageX); - c2 = m.abs(e.touches[0].pageY-e.touches[1].pageY); - that.touchesDistStart = m.sqrt(c1 * c1 + c2 * c2); - - that.originX = m.abs(e.touches[0].pageX + e.touches[1].pageX - that.wrapperOffsetLeft * 2) / 2 - that.x; - that.originY = m.abs(e.touches[0].pageY + e.touches[1].pageY - that.wrapperOffsetTop * 2) / 2 - that.y; - } - - if (that.options.momentum) { - if (that.options.useTransform) { - // Very lame general purpose alternative to CSSMatrix - matrix = getComputedStyle(that.scroller, null)[vendor + 'Transform'].replace(/[^0-9-.,]/g, '').split(','); - x = matrix[4] * 1; - y = matrix[5] * 1; - } else { - x = getComputedStyle(that.scroller, null).left.replace(/[^0-9-]/g, '') * 1; - y = getComputedStyle(that.scroller, null).top.replace(/[^0-9-]/g, '') * 1; - } - - if (x != that.x || y != that.y) { - if (that.options.useTransition) that._unbind('webkitTransitionEnd'); - else cancelFrame(that.aniTime); - that.steps = []; - that._pos(x, y); - } - } - - that.absStartX = that.x; // Needed by snap threshold - that.absStartY = that.y; - - that.startX = that.x; - that.startY = that.y; - that.pointX = point.pageX; - that.pointY = point.pageY; - - that.startTime = e.timeStamp || (new Date()).getTime(); - - if (that.options.onScrollStart) that.options.onScrollStart.call(that, e); - - that._bind(MOVE_EV); - that._bind(END_EV); - that._bind(CANCEL_EV); - }, - - _move: function (e) { - var that = this, - point = hasTouch ? e.touches[0] : e, - deltaX = point.pageX - that.pointX, - deltaY = point.pageY - that.pointY, - newX = that.x + deltaX, - newY = that.y + deltaY, - c1, c2, scale, - timestamp = e.timeStamp || (new Date()).getTime(); - - if (that.options.onBeforeScrollMove) that.options.onBeforeScrollMove.call(that, e); - - // Zoom - if (that.options.zoom && hasTouch && e.touches.length > 1) { - c1 = m.abs(e.touches[0].pageX - e.touches[1].pageX); - c2 = m.abs(e.touches[0].pageY - e.touches[1].pageY); - that.touchesDist = m.sqrt(c1*c1+c2*c2); - - that.zoomed = true; - - scale = 1 / that.touchesDistStart * that.touchesDist * this.scale; - if (scale < 0.5) scale = 0.5; - else if (scale > that.options.zoomMax) scale = that.options.zoomMax; - that.lastScale = scale / this.scale; - - newX = this.originX - this.originX * that.lastScale + this.x, - newY = this.originY - this.originY * that.lastScale + this.y; - - this.scroller.style[vendor + 'Transform'] = trnOpen + newX + 'px,' + newY + 'px' + trnClose + ' scale(' + scale + ')'; - - return; - } - - that.pointX = point.pageX; - that.pointY = point.pageY; - - // Slow down if outside of the boundaries - if (newX > 0 || newX < that.maxScrollX) { - newX = that.options.bounce ? that.x + (deltaX / 2) : newX >= 0 || that.maxScrollX >= 0 ? 0 : that.maxScrollX; - } - if (newY > 0 || newY < that.maxScrollY) { - newY = that.options.bounce ? that.y + (deltaY / 2) : newY >= 0 || that.maxScrollY >= 0 ? 0 : that.maxScrollY; - } - - if (that.absDistX < 6 && that.absDistY < 6) { - that.distX += deltaX; - that.distY += deltaY; - that.absDistX = m.abs(that.distX); - that.absDistY = m.abs(that.distY); - - return; - } - - // Lock direction - if (that.options.lockDirection) { - if (that.absDistX > that.absDistY + 5) { - newY = that.y; - deltaY = 0; - } else if (that.absDistY > that.absDistX + 5) { - newX = that.x; - deltaX = 0; - } - } - - that.moved = true; - that._pos(newX, newY); - that.dirX = deltaX > 0 ? -1 : deltaX < 0 ? 1 : 0; - that.dirY = deltaY > 0 ? -1 : deltaY < 0 ? 1 : 0; - - if (timestamp - that.startTime > 300) { - that.startTime = timestamp; - that.startX = that.x; - that.startY = that.y; - } - - if (that.options.onScrollMove) that.options.onScrollMove.call(that, e); - }, - - _end: function (e) { - if (hasTouch && e.touches.length != 0) return; - - var that = this, - point = hasTouch ? e.changedTouches[0] : e, - target, ev, - momentumX = { dist:0, time:0 }, - momentumY = { dist:0, time:0 }, - duration = (e.timeStamp || (new Date()).getTime()) - that.startTime, - newPosX = that.x, - newPosY = that.y, - distX, distY, - newDuration; - - that._unbind(MOVE_EV); - that._unbind(END_EV); - that._unbind(CANCEL_EV); - - if (that.options.onBeforeScrollEnd) that.options.onBeforeScrollEnd.call(that, e); - - if (that.zoomed) { - that.scale = that.scale * that.lastScale; - that.x = that.originX - that.originX * that.lastScale + that.x; - that.y = that.originY - that.originY * that.lastScale + that.y; - - that.scroller.style.webkitTransform = trnOpen + that.x + 'px,' + that.y + 'px' + trnClose + ' scale(' + that.scale + ')'; - - that.refresh(); - return; - } - - if (!that.moved) { - if (hasTouch) { - if (that.doubleTapTimer && that.options.zoom) { - // Double tapped - clearTimeout(that.doubleTapTimer); - that.doubleTapTimer = null; - that.zoom(that.pointX, that.pointY, that.scale == 1 ? that.options.doubleTapZoom : 1); - } else { - that.doubleTapTimer = setTimeout(function () { - that.doubleTapTimer = null; - - // Find the last touched element - target = point.target; - while (target.nodeType != 1) target = target.parentNode; - - if (target.tagName != 'SELECT' && target.tagName != 'INPUT' && target.tagName != 'TEXTAREA') { - ev = document.createEvent('MouseEvents'); - ev.initMouseEvent('click', true, true, e.view, 1, - point.screenX, point.screenY, point.clientX, point.clientY, - e.ctrlKey, e.altKey, e.shiftKey, e.metaKey, - 0, null); - ev._fake = true; - target.dispatchEvent(ev); - } - }, that.options.zoom ? 250 : 0); - } - } - - that._resetPos(200); - - if (that.options.onTouchEnd) that.options.onTouchEnd.call(that, e); - return; - } - - if (duration < 300 && that.options.momentum) { - momentumX = newPosX ? that._momentum(newPosX - that.startX, duration, -that.x, that.scrollerW - that.wrapperW + that.x, that.options.bounce ? that.wrapperW : 0) : momentumX; - momentumY = newPosY ? that._momentum(newPosY - that.startY, duration, -that.y, (that.maxScrollY < 0 ? that.scrollerH - that.wrapperH + that.y : 0), that.options.bounce ? that.wrapperH : 0) : momentumY; - - newPosX = that.x + momentumX.dist; - newPosY = that.y + momentumY.dist; - - if ((that.x > 0 && newPosX > 0) || (that.x < that.maxScrollX && newPosX < that.maxScrollX)) momentumX = { dist:0, time:0 }; - if ((that.y > 0 && newPosY > 0) || (that.y < that.maxScrollY && newPosY < that.maxScrollY)) momentumY = { dist:0, time:0 }; - } - - if (momentumX.dist || momentumY.dist) { - newDuration = m.max(m.max(momentumX.time, momentumY.time), 10); - - // Do we need to snap? - if (that.options.snap) { - distX = newPosX - that.absStartX; - distY = newPosY - that.absStartY; - if (m.abs(distX) < that.options.snapThreshold && m.abs(distY) < that.options.snapThreshold) { that.scrollTo(that.absStartX, that.absStartY, 200); } - else { - snap = that._snap(newPosX, newPosY); - newPosX = snap.x; - newPosY = snap.y; - newDuration = m.max(snap.time, newDuration); - } - } - - that.scrollTo(newPosX, newPosY, newDuration); - - if (that.options.onTouchEnd) that.options.onTouchEnd.call(that, e); - return; - } - - // Do we need to snap? - if (that.options.snap) { - distX = newPosX - that.absStartX; - distY = newPosY - that.absStartY; - if (m.abs(distX) < that.options.snapThreshold && m.abs(distY) < that.options.snapThreshold) that.scrollTo(that.absStartX, that.absStartY, 200); - else { - snap = that._snap(that.x, that.y); - if (snap.x != that.x || snap.y != that.y) that.scrollTo(snap.x, snap.y, snap.time); - } - - if (that.options.onTouchEnd) that.options.onTouchEnd.call(that, e); - return; - } - - that._resetPos(200); - if (that.options.onTouchEnd) that.options.onTouchEnd.call(that, e); - }, - - _resetPos: function (time) { - var that = this, - resetX = that.x >= 0 ? 0 : that.x < that.maxScrollX ? that.maxScrollX : that.x, - resetY = that.y >= 0 || that.maxScrollY > 0 ? 0 : that.y < that.maxScrollY ? that.maxScrollY : that.y; - - if (resetX == that.x && resetY == that.y) { - if (that.moved) { - that.moved = false; - if (that.options.onScrollEnd) that.options.onScrollEnd.call(that); // Execute custom code on scroll end - } - - if (that.hScrollbar && that.options.hideScrollbar) { - if (vendor == 'webkit') that.hScrollbarWrapper.style[vendor + 'TransitionDelay'] = '300ms'; - that.hScrollbarWrapper.style.opacity = '0'; - } - if (that.vScrollbar && that.options.hideScrollbar) { - if (vendor == 'webkit') that.vScrollbarWrapper.style[vendor + 'TransitionDelay'] = '300ms'; - that.vScrollbarWrapper.style.opacity = '0'; - } - - return; - } - - that.scrollTo(resetX, resetY, time || 0); - }, - - _wheel: function (e) { - var that = this, - deltaX, deltaY; - - if ('wheelDeltaX' in e) { - deltaX = that.x + e.wheelDeltaX / 12, - deltaY = that.y + e.wheelDeltaY / 12; - } else if ('detail' in e) { - deltaX = that.x - e.detail * 3, - deltaY = that.y - e.detail * 3; - } else { - deltaX = that.x - e.wheelDelta, - deltaY = that.y - e.wheelDelta; - } - - if (deltaX > 0) deltaX = 0; - else if (deltaX < that.maxScrollX) deltaX = that.maxScrollX; - - if (deltaY > 0) deltaY = 0; - else if (deltaY < that.maxScrollY) deltaY = that.maxScrollY; - - that.scrollTo(deltaX, deltaY, 0); - }, - - _mouseout: function (e) { - var t = e.relatedTarget; - - if (!t) { - this._end(e); - return; - } - - while (t = t.parentNode) if (t == this.wrapper) return; - - this._end(e); - }, - - _transitionEnd: function (e) { - var that = this; - - if (e.target != that.scroller) return; - - that._unbind('webkitTransitionEnd'); - - that._startAni(); - }, - - - /** - * - * Utilities - * - */ - _startAni: function () { - var that = this, - startX = that.x, startY = that.y, - startTime = (new Date).getTime(), - step, easeOut; - - if (that.animating) return; - - if (!that.steps.length) { - that._resetPos(400); - return; - } - - step = that.steps.shift(); - - if (step.x == startX && step.y == startY) step.time = 0; - - that.animating = true; - that.moved = true; - - if (that.options.useTransition) { - that._transitionTime(step.time); - that._pos(step.x, step.y); - that.animating = false; - if (step.time) that._bind('webkitTransitionEnd'); - return; - } - - (function animate () { - var now = (new Date).getTime(), - newX, newY; - - if (now >= startTime + step.time) { - that._pos(step.x, step.y); - that.animating = false; - if (that.options.onAnimationEnd) that.options.onAnimationEnd.call(that); // Execute custom code on animation end - that._startAni(); - return; - } - - now = (now - startTime) / step.time - 1; - easeOut = m.sqrt(1 - now * now); - newX = (step.x - startX) * easeOut + startX; - newY = (step.y - startY) * easeOut + startY; - that._pos(newX, newY); - if (that.animating) that.aniTime = nextFrame(animate); - })(); - }, - - _transitionTime: function (time) { - time += 'ms'; - this.scroller.style[vendor + 'TransitionDuration'] = time; - if (this.hScrollbar) this.hScrollbarIndicator.style[vendor + 'TransitionDuration'] = time; - if (this.vScrollbar) this.vScrollbarIndicator.style[vendor + 'TransitionDuration'] = time; - }, - - _momentum: function (dist, time, maxDistUpper, maxDistLower, size) { - var deceleration = 0.0006, - speed = m.abs(dist) / time, - newDist = (speed * speed) / (2 * deceleration), - newTime = 0, outsideDist = 0; - - // Proportinally reduce speed if we are outside of the boundaries - if (dist > 0 && newDist > maxDistUpper) { - outsideDist = size / (6 / (newDist / speed * deceleration)); - maxDistUpper = maxDistUpper + outsideDist; - speed = speed * maxDistUpper / newDist; - newDist = maxDistUpper; - } else if (dist < 0 && newDist > maxDistLower) { - outsideDist = size / (6 / (newDist / speed * deceleration)); - maxDistLower = maxDistLower + outsideDist; - speed = speed * maxDistLower / newDist; - newDist = maxDistLower; - } - - newDist = newDist * (dist < 0 ? -1 : 1); - newTime = speed / deceleration; - - return { dist: newDist, time: m.round(newTime) }; - }, - - _offset: function (el) { - var left = -el.offsetLeft, - top = -el.offsetTop; - - while (el = el.offsetParent) { - left -= el.offsetLeft; - top -= el.offsetTop; - } - - if (el != this.wrapper) { - left *= this.scale; - top *= this.scale; - } - - return { left: left, top: top }; - }, - - _snap: function (x, y) { - var that = this, - i, l, - page, time, - sizeX, sizeY; - - // Check page X - page = that.pagesX.length - 1; - for (i=0, l=that.pagesX.length; i= that.pagesX[i]) { - page = i; - break; - } - } - if (page == that.currPageX && page > 0 && that.dirX < 0) page--; - x = that.pagesX[page]; - sizeX = m.abs(x - that.pagesX[that.currPageX]); - sizeX = sizeX ? m.abs(that.x - x) / sizeX * 500 : 0; - that.currPageX = page; - - // Check page Y - page = that.pagesY.length-1; - for (i=0; i= that.pagesY[i]) { - page = i; - break; - } - } - if (page == that.currPageY && page > 0 && that.dirY < 0) page--; - y = that.pagesY[page]; - sizeY = m.abs(y - that.pagesY[that.currPageY]); - sizeY = sizeY ? m.abs(that.y - y) / sizeY * 500 : 0; - that.currPageY = page; - - // Snap with constant speed (proportional duration) - time = m.round(m.max(sizeX, sizeY)) || 200; - - return { x: x, y: y, time: time }; - }, - - _bind: function (type, el, bubble) { - (el || this.scroller).addEventListener(type, this, !!bubble); - }, - - _unbind: function (type, el, bubble) { - (el || this.scroller).removeEventListener(type, this, !!bubble); - }, - - - /** - * - * Public methods - * - */ - destroy: function () { - var that = this; - - that.scroller.style[vendor + 'Transform'] = ''; - - // Remove the scrollbars - that.hScrollbar = false; - that.vScrollbar = false; - that._scrollbar('h'); - that._scrollbar('v'); - - // Remove the event listeners - that._unbind(RESIZE_EV); - that._unbind(START_EV); - that._unbind(MOVE_EV); - that._unbind(END_EV); - that._unbind(CANCEL_EV); - - if (that.options.hasTouch) { - that._unbind('mouseout', that.wrapper); - that._unbind(WHEEL_EV); - } - - if (that.options.useTransition) that._unbind('webkitTransitionEnd'); - - if (that.options.onDestroy) that.options.onDestroy.call(that); - }, - - refresh: function () { - var that = this, - offset, - pos = 0, - page = 0; - - if (that.scale < that.options.zoomMin) that.scale = that.options.zoomMin; - that.wrapperW = that.wrapper.clientWidth || 1; - that.wrapperH = that.wrapper.clientHeight || 1; - - that.scrollerW = m.round(that.scroller.offsetWidth * that.scale); - that.scrollerH = m.round(that.scroller.offsetHeight * that.scale); - that.maxScrollX = that.wrapperW - that.scrollerW; - that.maxScrollY = that.wrapperH - that.scrollerH; - that.dirX = 0; - that.dirY = 0; - - that.hScroll = that.options.hScroll && that.maxScrollX < 0; - that.vScroll = that.options.vScroll && (!that.options.bounceLock && !that.hScroll || that.scrollerH > that.wrapperH); - - that.hScrollbar = that.hScroll && that.options.hScrollbar; - that.vScrollbar = that.vScroll && that.options.vScrollbar && that.scrollerH > that.wrapperH; - - offset = that._offset(that.wrapper); - that.wrapperOffsetLeft = -offset.left; - that.wrapperOffsetTop = -offset.top; - - // Prepare snap - if (typeof that.options.snap == 'string') { - that.pagesX = []; - that.pagesY = []; - els = that.scroller.querySelectorAll(that.options.snap); - for (i=0, l=els.length; i= that.maxScrollX) { - that.pagesX[page] = pos; - pos = pos - that.wrapperW; - page++; - } - if (that.maxScrollX%that.wrapperW) that.pagesX[that.pagesX.length] = that.maxScrollX - that.pagesX[that.pagesX.length-1] + that.pagesX[that.pagesX.length-1]; - - pos = 0; - page = 0; - that.pagesY = []; - while (pos >= that.maxScrollY) { - that.pagesY[page] = pos; - pos = pos - that.wrapperH; - page++; - } - if (that.maxScrollY%that.wrapperH) that.pagesY[that.pagesY.length] = that.maxScrollY - that.pagesY[that.pagesY.length-1] + that.pagesY[that.pagesY.length-1]; - } - - // Prepare the scrollbars - that._scrollbar('h'); - that._scrollbar('v'); - - that.scroller.style[vendor + 'TransitionDuration'] = '0'; - - that._resetPos(200); - }, - - scrollTo: function (x, y, time, relative) { - var that = this, - step = x, - i, l; - - that.stop(); - - if (!step.length) step = [{ x: x, y: y, time: time, relative: relative }]; - - for (i=0, l=step.length; i 0 ? 0 : pos.left < that.maxScrollX ? that.maxScrollX : pos.left; - pos.top = pos.top > 0 ? 0 : pos.top < that.maxScrollY ? that.maxScrollY : pos.top; - time = time === undefined ? m.max(m.abs(pos.left)*2, m.abs(pos.top)*2) : time; - - that.scrollTo(pos.left, pos.top, time); - }, - - scrollToPage: function (pageX, pageY, time) { - var that = this, x, y; - - if (that.options.snap) { - pageX = pageX == 'next' ? that.currPageX+1 : pageX == 'prev' ? that.currPageX-1 : pageX; - pageY = pageY == 'next' ? that.currPageY+1 : pageY == 'prev' ? that.currPageY-1 : pageY; - - pageX = pageX < 0 ? 0 : pageX > that.pagesX.length-1 ? that.pagesX.length-1 : pageX; - pageY = pageY < 0 ? 0 : pageY > that.pagesY.length-1 ? that.pagesY.length-1 : pageY; - - that.currPageX = pageX; - that.currPageY = pageY; - x = that.pagesX[pageX]; - y = that.pagesY[pageY]; - } else { - x = -that.wrapperW * pageX; - y = -that.wrapperH * pageY; - if (x < that.maxScrollX) x = that.maxScrollX; - if (y < that.maxScrollY) y = that.maxScrollY; - } - - that.scrollTo(x, y, time || 400); - }, - - disable: function () { - this.stop(); - this._resetPos(0); - this.enabled = false; - - // If disabled after touchstart we make sure that there are no left over events - this._unbind(MOVE_EV); - this._unbind(END_EV); - this._unbind(CANCEL_EV); - }, - - enable: function () { - this.enabled = true; - }, - - stop: function () { - if (this.options.useTransition) this._unbind('webkitTransitionEnd'); - else cancelFrame(this.aniTime); - this.steps = []; - this.moved = false; - this.animating = false; - }, - - zoom: function (x, y, scale, time) { - var that = this, - relScale = scale / that.scale; - - if (!that.options.useTransform) return; - - time = (time || 200) + 'ms' - x = x - that.wrapperOffsetLeft - that.x; - y = y - that.wrapperOffsetTop - that.y; - that.x = x - x * relScale + that.x; - that.y = y - y * relScale + that.y; - - that.scale = scale; - - that.scroller.style[vendor + 'TransitionDuration'] = time; - that.scroller.style[vendor + 'Transform'] = trnOpen + that.x + 'px,' + that.y + 'px' + trnClose + ' scale(' + scale + ')'; - - that.refresh(); - } -}; - -if (typeof exports !== 'undefined') exports.iScroll = iScroll; -else window.iScroll = iScroll; - -})(); \ No newline at end of file diff --git a/client/js/jquery-ui.1.8.16.min.js b/client/js/jquery-ui.1.8.16.min.js deleted file mode 100755 index 6b522aa..0000000 --- a/client/js/jquery-ui.1.8.16.min.js +++ /dev/null @@ -1,415 +0,0 @@ -/*! - * jQuery UI 1.8.16 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI - */ -(function(a,d){function c(h,g){var i=h.nodeName.toLowerCase();if("area"===i){g=h.parentNode;i=g.name;if(!h.href||!i||g.nodeName.toLowerCase()!=="map")return false;h=a("img[usemap=#"+i+"]")[0];return!!h&&e(h)}return(/input|select|textarea|button|object/.test(i)?!h.disabled:"a"==i?h.href||g:g)&&e(h)}function e(h){return!a(h).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.ui=a.ui||{};if(!a.ui.version){a.extend(a.ui,{version:"1.8.16", -keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(h,g){return typeof h==="number"?this.each(function(){var i= -this;setTimeout(function(){a(i).focus();g&&g.call(i)},h)}):this._focus.apply(this,arguments)},scrollParent:function(){var h;h=a.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(a.curCSS(this,"position",1))&&/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(a.curCSS(this, -"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!h.length?a(document):h},zIndex:function(h){if(h!==d)return this.css("zIndex",h);if(this.length){h=a(this[0]);for(var g;h.length&&h[0]!==document;){g=h.css("position");if(g==="absolute"||g==="relative"||g==="fixed"){g=parseInt(h.css("zIndex"),10);if(!isNaN(g)&&g!==0)return g}h=h.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart": -"mousedown")+".ui-disableSelection",function(h){h.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(h,g){function i(l,o,n,k){a.each(b,function(){o-=parseFloat(a.curCSS(l,"padding"+this,true))||0;if(n)o-=parseFloat(a.curCSS(l,"border"+this+"Width",true))||0;if(k)o-=parseFloat(a.curCSS(l,"margin"+this,true))||0});return o}var b=g==="Width"?["Left","Right"]:["Top","Bottom"],f=g.toLowerCase(),j={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight, -outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};a.fn["inner"+g]=function(l){if(l===d)return j["inner"+g].call(this);return this.each(function(){a(this).css(f,i(this,l)+"px")})};a.fn["outer"+g]=function(l,o){if(typeof l!=="number")return j["outer"+g].call(this,l);return this.each(function(){a(this).css(f,i(this,l,true,o)+"px")})}});a.extend(a.expr[":"],{data:function(h,g,i){return!!a.data(h,i[3])},focusable:function(h){return c(h,!isNaN(a.attr(h,"tabindex")))},tabbable:function(h){var g=a.attr(h, -"tabindex"),i=isNaN(g);return(i||g>=0)&&c(h,!i)}});a(function(){var h=document.body,g=h.appendChild(g=document.createElement("div"));a.extend(g.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=g.offsetHeight===100;a.support.selectstart="onselectstart"in g;h.removeChild(g).style.display="none"});a.extend(a.ui,{plugin:{add:function(h,g,i){h=a.ui[h].prototype;for(var b in i){h.plugins[b]=h.plugins[b]||[];h.plugins[b].push([g,i[b]])}},call:function(h,g,i){if((g=h.plugins[g])&& -h.element[0].parentNode)for(var b=0;b0)return true;h[g]=1;i=h[g]>0;h[g]=0;return i},isOverAxis:function(h,g,i){return h>g&&h=9)&&!c.button)return this._mouseUp(c);if(this._mouseStarted){this._mouseDrag(c);return c.preventDefault()}if(this._mouseDistanceMet(c)&&this._mouseDelayMet(c))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,c)!==false)?this._mouseDrag(c):this._mouseUp(c);return!this._mouseStarted},_mouseUp:function(c){a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted= -false;c.target==this._mouseDownEvent.target&&a.data(c.target,this.widgetName+".preventClickEvent",true);this._mouseStop(c)}return false},_mouseDistanceMet:function(c){return Math.max(Math.abs(this._mouseDownEvent.pageX-c.pageX),Math.abs(this._mouseDownEvent.pageY-c.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery); -(function(a){a.widget("ui.draggable",a.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper== -"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(d){var c= -this.options;if(this.helper||c.disabled||a(d.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(d);if(!this.handle)return false;if(c.iframeFix)a(c.iframeFix===true?"iframe":c.iframeFix).each(function(){a('
    ').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(a(this).offset()).appendTo("body")});return true},_mouseStart:function(d){var c=this.options; -this.helper=this._createHelper(d);this._cacheHelperProportions();if(a.ui.ddmanager)a.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};a.extend(this.offset,{click:{left:d.pageX-this.offset.left,top:d.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}); -this.originalPosition=this.position=this._generatePosition(d);this.originalPageX=d.pageX;this.originalPageY=d.pageY;c.cursorAt&&this._adjustOffsetFromHelper(c.cursorAt);c.containment&&this._setContainment();if(this._trigger("start",d)===false){this._clear();return false}this._cacheHelperProportions();a.ui.ddmanager&&!c.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,d);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(d,true);a.ui.ddmanager&&a.ui.ddmanager.dragStart(this,d);return true}, -_mouseDrag:function(d,c){this.position=this._generatePosition(d);this.positionAbs=this._convertPositionTo("absolute");if(!c){c=this._uiHash();if(this._trigger("drag",d,c)===false){this._mouseUp({});return false}this.position=c.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";a.ui.ddmanager&&a.ui.ddmanager.drag(this,d);return false},_mouseStop:function(d){var c= -false;if(a.ui.ddmanager&&!this.options.dropBehaviour)c=a.ui.ddmanager.drop(this,d);if(this.dropped){c=this.dropped;this.dropped=false}if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return false;if(this.options.revert=="invalid"&&!c||this.options.revert=="valid"&&c||this.options.revert===true||a.isFunction(this.options.revert)&&this.options.revert.call(this.element,c)){var e=this;a(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration, -10),function(){e._trigger("stop",d)!==false&&e._clear()})}else this._trigger("stop",d)!==false&&this._clear();return false},_mouseUp:function(d){this.options.iframeFix===true&&a("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)});a.ui.ddmanager&&a.ui.ddmanager.dragStop(this,d);return a.ui.mouse.prototype._mouseUp.call(this,d)},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(d){var c=!this.options.handle|| -!a(this.options.handle,this.element).length?true:false;a(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==d.target)c=true});return c},_createHelper:function(d){var c=this.options;d=a.isFunction(c.helper)?a(c.helper.apply(this.element[0],[d])):c.helper=="clone"?this.element.clone().removeAttr("id"):this.element;d.parents("body").length||d.appendTo(c.appendTo=="parent"?this.element[0].parentNode:c.appendTo);d[0]!=this.element[0]&&!/(fixed|absolute)/.test(d.css("position"))&& -d.css("position","absolute");return d},_adjustOffsetFromHelper:function(d){if(typeof d=="string")d=d.split(" ");if(a.isArray(d))d={left:+d[0],top:+d[1]||0};if("left"in d)this.offset.click.left=d.left+this.margins.left;if("right"in d)this.offset.click.left=this.helperProportions.width-d.right+this.margins.left;if("top"in d)this.offset.click.top=d.top+this.margins.top;if("bottom"in d)this.offset.click.top=this.helperProportions.height-d.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent= -this.helper.offsetParent();var d=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){d.left+=this.scrollParent.scrollLeft();d.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)d={top:0,left:0};return{top:d.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:d.left+(parseInt(this.offsetParent.css("borderLeftWidth"), -10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var d=this.element.position();return{top:d.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:d.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"), -10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var d=this.options;if(d.containment=="parent")d.containment=this.helper[0].parentNode;if(d.containment=="document"||d.containment=="window")this.containment=[d.containment=="document"?0:a(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,d.containment=="document"?0:a(window).scrollTop()-this.offset.relative.top-this.offset.parent.top, -(d.containment=="document"?0:a(window).scrollLeft())+a(d.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(d.containment=="document"?0:a(window).scrollTop())+(a(d.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(d.containment)&&d.containment.constructor!=Array){d=a(d.containment);var c=d[0];if(c){d.offset();var e=a(c).css("overflow")!= -"hidden";this.containment=[(parseInt(a(c).css("borderLeftWidth"),10)||0)+(parseInt(a(c).css("paddingLeft"),10)||0),(parseInt(a(c).css("borderTopWidth"),10)||0)+(parseInt(a(c).css("paddingTop"),10)||0),(e?Math.max(c.scrollWidth,c.offsetWidth):c.offsetWidth)-(parseInt(a(c).css("borderLeftWidth"),10)||0)-(parseInt(a(c).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(e?Math.max(c.scrollHeight,c.offsetHeight):c.offsetHeight)-(parseInt(a(c).css("borderTopWidth"), -10)||0)-(parseInt(a(c).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom];this.relative_container=d}}else if(d.containment.constructor==Array)this.containment=d.containment},_convertPositionTo:function(d,c){if(!c)c=this.position;d=d=="absolute"?1:-1;var e=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,h=/(html|body)/i.test(e[0].tagName);return{top:c.top+ -this.offset.relative.top*d+this.offset.parent.top*d-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():h?0:e.scrollTop())*d),left:c.left+this.offset.relative.left*d+this.offset.parent.left*d-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():h?0:e.scrollLeft())*d)}},_generatePosition:function(d){var c=this.options,e=this.cssPosition=="absolute"&& -!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,h=/(html|body)/i.test(e[0].tagName),g=d.pageX,i=d.pageY;if(this.originalPosition){var b;if(this.containment){if(this.relative_container){b=this.relative_container.offset();b=[this.containment[0]+b.left,this.containment[1]+b.top,this.containment[2]+b.left,this.containment[3]+b.top]}else b=this.containment;if(d.pageX-this.offset.click.leftb[2])g=b[2]+this.offset.click.left;if(d.pageY-this.offset.click.top>b[3])i=b[3]+this.offset.click.top}if(c.grid){i=c.grid[1]?this.originalPageY+Math.round((i-this.originalPageY)/c.grid[1])*c.grid[1]:this.originalPageY;i=b?!(i-this.offset.click.topb[3])?i:!(i-this.offset.click.topb[2])?g:!(g-this.offset.click.left=0;l--){var o=e.snapElements[l].left,n=o+e.snapElements[l].width,k=e.snapElements[l].top,m=k+e.snapElements[l].height;if(o-g=l&&i<=o||b>=l&&b<=o||io)&&(h>= -f&&h<=j||g>=f&&g<=j||hj);default:return false}};a.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(d,c){var e=a.ui.ddmanager.droppables[d.options.scope]||[],h=c?c.type:null,g=(d.currentItem||d.element).find(":data(droppable)").andSelf(),i=0;a:for(;i').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(), -top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle= -this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=h.handles||(!a(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne", -nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var g=this.handles.split(",");this.handles={};for(var i=0;i');/sw|se|ne|nw/.test(b)&&f.css({zIndex:++h.zIndex});"se"==b&&f.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[b]=".ui-resizable-"+b;this.element.append(f)}}this._renderAxis=function(j){j=j||this.element;for(var l in this.handles){if(this.handles[l].constructor== -String)this.handles[l]=a(this.handles[l],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=a(this.handles[l],this.element),n=0;n=/sw|ne|nw|se|n|s/.test(l)?o.outerHeight():o.outerWidth();o=["padding",/ne|nw|n/.test(l)?"Top":/se|sw|s/.test(l)?"Bottom":/^e$/.test(l)?"Right":"Left"].join("");j.css(o,n);this._proportionallyResize()}a(this.handles[l])}};this._renderAxis(this.element);this._handles=a(".ui-resizable-handle",this.element).disableSelection(); -this._handles.mouseover(function(){if(!e.resizing){if(this.className)var j=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);e.axis=j&&j[1]?j[1]:"se"}});if(h.autoHide){this._handles.hide();a(this.element).addClass("ui-resizable-autohide").hover(function(){if(!h.disabled){a(this).removeClass("ui-resizable-autohide");e._handles.show()}},function(){if(!h.disabled)if(!e.resizing){a(this).addClass("ui-resizable-autohide");e._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy(); -var e=function(g){a(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var h=this.element;h.after(this.originalElement.css({position:h.css("position"),width:h.outerWidth(),height:h.outerHeight(),top:h.css("top"),left:h.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(e){var h= -false;for(var g in this.handles)if(a(this.handles[g])[0]==e.target)h=true;return!this.options.disabled&&h},_mouseStart:function(e){var h=this.options,g=this.element.position(),i=this.element;this.resizing=true;this.documentScroll={top:a(document).scrollTop(),left:a(document).scrollLeft()};if(i.is(".ui-draggable")||/absolute/.test(i.css("position")))i.css({position:"absolute",top:g.top,left:g.left});a.browser.opera&&/relative/.test(i.css("position"))&&i.css({position:"relative",top:"auto",left:"auto"}); -this._renderProxy();g=d(this.helper.css("left"));var b=d(this.helper.css("top"));if(h.containment){g+=a(h.containment).scrollLeft()||0;b+=a(h.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:g,top:b};this.size=this._helper?{width:i.outerWidth(),height:i.outerHeight()}:{width:i.width(),height:i.height()};this.originalSize=this._helper?{width:i.outerWidth(),height:i.outerHeight()}:{width:i.width(),height:i.height()};this.originalPosition={left:g,top:b};this.sizeDiff= -{width:i.outerWidth()-i.width(),height:i.outerHeight()-i.height()};this.originalMousePosition={left:e.pageX,top:e.pageY};this.aspectRatio=typeof h.aspectRatio=="number"?h.aspectRatio:this.originalSize.width/this.originalSize.height||1;h=a(".ui-resizable-"+this.axis).css("cursor");a("body").css("cursor",h=="auto"?this.axis+"-resize":h);i.addClass("ui-resizable-resizing");this._propagate("start",e);return true},_mouseDrag:function(e){var h=this.helper,g=this.originalMousePosition,i=this._change[this.axis]; -if(!i)return false;g=i.apply(this,[e,e.pageX-g.left||0,e.pageY-g.top||0]);this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey)g=this._updateRatio(g,e);g=this._respectSize(g,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(g);this._trigger("resize",e,this.ui());return false}, -_mouseStop:function(e){this.resizing=false;var h=this.options,g=this;if(this._helper){var i=this._proportionallyResizeElements,b=i.length&&/textarea/i.test(i[0].nodeName);i=b&&a.ui.hasScroll(i[0],"left")?0:g.sizeDiff.height;b=b?0:g.sizeDiff.width;b={width:g.helper.width()-b,height:g.helper.height()-i};i=parseInt(g.element.css("left"),10)+(g.position.left-g.originalPosition.left)||null;var f=parseInt(g.element.css("top"),10)+(g.position.top-g.originalPosition.top)||null;h.animate||this.element.css(a.extend(b, -{top:f,left:i}));g.helper.height(g.size.height);g.helper.width(g.size.width);this._helper&&!h.animate&&this._proportionallyResize()}a("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",e);this._helper&&this.helper.remove();return false},_updateVirtualBoundaries:function(e){var h=this.options,g,i,b;h={minWidth:c(h.minWidth)?h.minWidth:0,maxWidth:c(h.maxWidth)?h.maxWidth:Infinity,minHeight:c(h.minHeight)?h.minHeight:0,maxHeight:c(h.maxHeight)?h.maxHeight: -Infinity};if(this._aspectRatio||e){e=h.minHeight*this.aspectRatio;i=h.minWidth/this.aspectRatio;g=h.maxHeight*this.aspectRatio;b=h.maxWidth/this.aspectRatio;if(e>h.minWidth)h.minWidth=e;if(i>h.minHeight)h.minHeight=i;if(ge.width,j=c(e.height)&&h.minHeight&&h.minHeight>e.height;if(f)e.width=h.minWidth;if(j)e.height=h.minHeight;if(i)e.width=h.maxWidth;if(b)e.height=h.maxHeight;var l=this.originalPosition.left+this.originalSize.width,o=this.position.top+this.size.height,n=/sw|nw|w/.test(g);g=/nw|ne|n/.test(g);if(f&&n)e.left=l-h.minWidth;if(i&&n)e.left=l-h.maxWidth;if(j&&g)e.top=o-h.minHeight;if(b&&g)e.top=o-h.maxHeight;if((h=!e.width&&!e.height)&&!e.left&&e.top)e.top=null;else if(h&&!e.top&&e.left)e.left= -null;return e},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var e=this.helper||this.element,h=0;h');var h=a.browser.msie&&a.browser.version<7,g=h?1:0;h=h?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+ -h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++e.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(e,h){return{width:this.originalSize.width+h}},w:function(e,h){return{left:this.originalPosition.left+h,width:this.originalSize.width-h}},n:function(e,h,g){return{top:this.originalPosition.top+g,height:this.originalSize.height-g}},s:function(e,h,g){return{height:this.originalSize.height+ -g}},se:function(e,h,g){return a.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,h,g]))},sw:function(e,h,g){return a.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,h,g]))},ne:function(e,h,g){return a.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,h,g]))},nw:function(e,h,g){return a.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,h,g]))}},_propagate:function(e,h){a.ui.plugin.call(this,e,[h,this.ui()]); -e!="resize"&&this._trigger(e,h,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});a.extend(a.ui.resizable,{version:"1.8.16"});a.ui.plugin.add("resizable","alsoResize",{start:function(){var e=a(this).data("resizable").options,h=function(g){a(g).each(function(){var i=a(this);i.data("resizable-alsoresize",{width:parseInt(i.width(), -10),height:parseInt(i.height(),10),left:parseInt(i.css("left"),10),top:parseInt(i.css("top"),10),position:i.css("position")})})};if(typeof e.alsoResize=="object"&&!e.alsoResize.parentNode)if(e.alsoResize.length){e.alsoResize=e.alsoResize[0];h(e.alsoResize)}else a.each(e.alsoResize,function(g){h(g)});else h(e.alsoResize)},resize:function(e,h){var g=a(this).data("resizable");e=g.options;var i=g.originalSize,b=g.originalPosition,f={height:g.size.height-i.height||0,width:g.size.width-i.width||0,top:g.position.top- -b.top||0,left:g.position.left-b.left||0},j=function(l,o){a(l).each(function(){var n=a(this),k=a(this).data("resizable-alsoresize"),m={},p=o&&o.length?o:n.parents(h.originalElement[0]).length?["width","height"]:["width","height","top","left"];a.each(p,function(q,s){if((q=(k[s]||0)+(f[s]||0))&&q>=0)m[s]=q||null});if(a.browser.opera&&/relative/.test(n.css("position"))){g._revertToRelativePosition=true;n.css({position:"absolute",top:"auto",left:"auto"})}n.css(m)})};typeof e.alsoResize=="object"&&!e.alsoResize.nodeType? -a.each(e.alsoResize,function(l,o){j(l,o)}):j(e.alsoResize)},stop:function(){var e=a(this).data("resizable"),h=e.options,g=function(i){a(i).each(function(){var b=a(this);b.css({position:b.data("resizable-alsoresize").position})})};if(e._revertToRelativePosition){e._revertToRelativePosition=false;typeof h.alsoResize=="object"&&!h.alsoResize.nodeType?a.each(h.alsoResize,function(i){g(i)}):g(h.alsoResize)}a(this).removeData("resizable-alsoresize")}});a.ui.plugin.add("resizable","animate",{stop:function(e){var h= -a(this).data("resizable"),g=h.options,i=h._proportionallyResizeElements,b=i.length&&/textarea/i.test(i[0].nodeName),f=b&&a.ui.hasScroll(i[0],"left")?0:h.sizeDiff.height;b={width:h.size.width-(b?0:h.sizeDiff.width),height:h.size.height-f};f=parseInt(h.element.css("left"),10)+(h.position.left-h.originalPosition.left)||null;var j=parseInt(h.element.css("top"),10)+(h.position.top-h.originalPosition.top)||null;h.element.animate(a.extend(b,j&&f?{top:j,left:f}:{}),{duration:g.animateDuration,easing:g.animateEasing, -step:function(){var l={width:parseInt(h.element.css("width"),10),height:parseInt(h.element.css("height"),10),top:parseInt(h.element.css("top"),10),left:parseInt(h.element.css("left"),10)};i&&i.length&&a(i[0]).css({width:l.width,height:l.height});h._updateCache(l);h._propagate("resize",e)}})}});a.ui.plugin.add("resizable","containment",{start:function(){var e=a(this).data("resizable"),h=e.element,g=e.options.containment;if(h=g instanceof a?g.get(0):/parent/.test(g)?h.parent().get(0):g){e.containerElement= -a(h);if(/document/.test(g)||g==document){e.containerOffset={left:0,top:0};e.containerPosition={left:0,top:0};e.parentData={element:a(document),left:0,top:0,width:a(document).width(),height:a(document).height()||document.body.parentNode.scrollHeight}}else{var i=a(h),b=[];a(["Top","Right","Left","Bottom"]).each(function(l,o){b[l]=d(i.css("padding"+o))});e.containerOffset=i.offset();e.containerPosition=i.position();e.containerSize={height:i.innerHeight()-b[3],width:i.innerWidth()-b[1]};g=e.containerOffset; -var f=e.containerSize.height,j=e.containerSize.width;j=a.ui.hasScroll(h,"left")?h.scrollWidth:j;f=a.ui.hasScroll(h)?h.scrollHeight:f;e.parentData={element:h,left:g.left,top:g.top,width:j,height:f}}}},resize:function(e){var h=a(this).data("resizable"),g=h.options,i=h.containerOffset,b=h.position;e=h._aspectRatio||e.shiftKey;var f={top:0,left:0},j=h.containerElement;if(j[0]!=document&&/static/.test(j.css("position")))f=i;if(b.left<(h._helper?i.left:0)){h.size.width+=h._helper?h.position.left-i.left: -h.position.left-f.left;if(e)h.size.height=h.size.width/g.aspectRatio;h.position.left=g.helper?i.left:0}if(b.top<(h._helper?i.top:0)){h.size.height+=h._helper?h.position.top-i.top:h.position.top;if(e)h.size.width=h.size.height*g.aspectRatio;h.position.top=h._helper?i.top:0}h.offset.left=h.parentData.left+h.position.left;h.offset.top=h.parentData.top+h.position.top;g=Math.abs((h._helper?h.offset.left-f.left:h.offset.left-f.left)+h.sizeDiff.width);i=Math.abs((h._helper?h.offset.top-f.top:h.offset.top- -i.top)+h.sizeDiff.height);b=h.containerElement.get(0)==h.element.parent().get(0);f=/relative|absolute/.test(h.containerElement.css("position"));if(b&&f)g-=h.parentData.left;if(g+h.size.width>=h.parentData.width){h.size.width=h.parentData.width-g;if(e)h.size.height=h.size.width/h.aspectRatio}if(i+h.size.height>=h.parentData.height){h.size.height=h.parentData.height-i;if(e)h.size.width=h.size.height*h.aspectRatio}},stop:function(){var e=a(this).data("resizable"),h=e.options,g=e.containerOffset,i=e.containerPosition, -b=e.containerElement,f=a(e.helper),j=f.offset(),l=f.outerWidth()-e.sizeDiff.width;f=f.outerHeight()-e.sizeDiff.height;e._helper&&!h.animate&&/relative/.test(b.css("position"))&&a(this).css({left:j.left-i.left-g.left,width:l,height:f});e._helper&&!h.animate&&/static/.test(b.css("position"))&&a(this).css({left:j.left-i.left-g.left,width:l,height:f})}});a.ui.plugin.add("resizable","ghost",{start:function(){var e=a(this).data("resizable"),h=e.options,g=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25, -display:"block",position:"relative",height:g.height,width:g.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof h.ghost=="string"?h.ghost:"");e.ghost.appendTo(e.helper)},resize:function(){var e=a(this).data("resizable");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=a(this).data("resizable");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}});a.ui.plugin.add("resizable","grid",{resize:function(){var e= -a(this).data("resizable"),h=e.options,g=e.size,i=e.originalSize,b=e.originalPosition,f=e.axis;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var j=Math.round((g.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1);h=Math.round((g.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(f)){e.size.width=i.width+j;e.size.height=i.height+h}else if(/^(ne)$/.test(f)){e.size.width=i.width+j;e.size.height=i.height+h;e.position.top=b.top-h}else{if(/^(sw)$/.test(f)){e.size.width=i.width+j;e.size.height= -i.height+h}else{e.size.width=i.width+j;e.size.height=i.height+h;e.position.top=b.top-h}e.position.left=b.left-j}}});var d=function(e){return parseInt(e,10)||0},c=function(e){return!isNaN(parseInt(e,10))}})(jQuery); -(function(a){a.widget("ui.selectable",a.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var d=this;this.element.addClass("ui-selectable");this.dragged=false;var c;this.refresh=function(){c=a(d.options.filter,d.element[0]);c.each(function(){var e=a(this),h=e.offset();a.data(this,"selectable-item",{element:this,$element:e,left:h.left,top:h.top,right:h.left+e.outerWidth(),bottom:h.top+e.outerHeight(),startselected:false,selected:e.hasClass("ui-selected"), -selecting:e.hasClass("ui-selecting"),unselecting:e.hasClass("ui-unselecting")})})};this.refresh();this.selectees=c.addClass("ui-selectee");this._mouseInit();this.helper=a("
    ")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(d){var c=this;this.opos=[d.pageX, -d.pageY];if(!this.options.disabled){var e=this.options;this.selectees=a(e.filter,this.element[0]);this._trigger("start",d);a(e.appendTo).append(this.helper);this.helper.css({left:d.clientX,top:d.clientY,width:0,height:0});e.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var h=a.data(this,"selectable-item");h.startselected=true;if(!d.metaKey){h.$element.removeClass("ui-selected");h.selected=false;h.$element.addClass("ui-unselecting");h.unselecting=true;c._trigger("unselecting", -d,{unselecting:h.element})}});a(d.target).parents().andSelf().each(function(){var h=a.data(this,"selectable-item");if(h){var g=!d.metaKey||!h.$element.hasClass("ui-selected");h.$element.removeClass(g?"ui-unselecting":"ui-selected").addClass(g?"ui-selecting":"ui-unselecting");h.unselecting=!g;h.selecting=g;(h.selected=g)?c._trigger("selecting",d,{selecting:h.element}):c._trigger("unselecting",d,{unselecting:h.element});return false}})}},_mouseDrag:function(d){var c=this;this.dragged=true;if(!this.options.disabled){var e= -this.options,h=this.opos[0],g=this.opos[1],i=d.pageX,b=d.pageY;if(h>i){var f=i;i=h;h=f}if(g>b){f=b;b=g;g=f}this.helper.css({left:h,top:g,width:i-h,height:b-g});this.selectees.each(function(){var j=a.data(this,"selectable-item");if(!(!j||j.element==c.element[0])){var l=false;if(e.tolerance=="touch")l=!(j.left>i||j.rightb||j.bottomh&&j.rightg&&j.bottom *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){var d=this.options;this.containerCache={};this.element.addClass("ui-sortable"); -this.refresh();this.floating=this.items.length?d.axis==="x"||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var d=this.items.length-1;d>=0;d--)this.items[d].item.removeData("sortable-item");return this},_setOption:function(d,c){if(d=== -"disabled"){this.options[d]=c;this.widget()[c?"addClass":"removeClass"]("ui-sortable-disabled")}else a.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(d,c){if(this.reverting)return false;if(this.options.disabled||this.options.type=="static")return false;this._refreshItems(d);var e=null,h=this;a(d.target).parents().each(function(){if(a.data(this,"sortable-item")==h){e=a(this);return false}});if(a.data(d.target,"sortable-item")==h)e=a(d.target);if(!e)return false;if(this.options.handle&& -!c){var g=false;a(this.options.handle,e).find("*").andSelf().each(function(){if(this==d.target)g=true});if(!g)return false}this.currentItem=e;this._removeCurrentsFromItems();return true},_mouseStart:function(d,c,e){c=this.options;var h=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(d);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top, -left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");a.extend(this.offset,{click:{left:d.pageX-this.offset.left,top:d.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(d);this.originalPageX=d.pageX;this.originalPageY=d.pageY;c.cursorAt&&this._adjustOffsetFromHelper(c.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]}; -this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();c.containment&&this._setContainment();if(c.cursor){if(a("body").css("cursor"))this._storedCursor=a("body").css("cursor");a("body").css("cursor",c.cursor)}if(c.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",c.opacity)}if(c.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex",c.zIndex)}if(this.scrollParent[0]!= -document&&this.scrollParent[0].tagName!="HTML")this.overflowOffset=this.scrollParent.offset();this._trigger("start",d,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!e)for(e=this.containers.length-1;e>=0;e--)this.containers[e]._trigger("activate",d,h._uiHash(this));if(a.ui.ddmanager)a.ui.ddmanager.current=this;a.ui.ddmanager&&!c.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,d);this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(d); -return true},_mouseDrag:function(d){this.position=this._generatePosition(d);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs)this.lastPositionAbs=this.positionAbs;if(this.options.scroll){var c=this.options,e=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if(this.overflowOffset.top+this.scrollParent[0].offsetHeight-d.pageY=0;c--){e=this.items[c];var h=e.item[0],g=this._intersectsWithPointer(e);if(g)if(h!=this.currentItem[0]&&this.placeholder[g==1?"next":"prev"]()[0]!=h&&!a.ui.contains(this.placeholder[0],h)&&(this.options.type=="semi-dynamic"?!a.ui.contains(this.element[0], -h):true)){this.direction=g==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(e))this._rearrange(d,e);else break;this._trigger("change",d,this._uiHash());break}}this._contactContainers(d);a.ui.ddmanager&&a.ui.ddmanager.drag(this,d);this._trigger("sort",d,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(d,c){if(d){a.ui.ddmanager&&!this.options.dropBehaviour&&a.ui.ddmanager.drop(this,d);if(this.options.revert){var e=this;c=e.placeholder.offset(); -e.reverting=true;a(this.helper).animate({left:c.left-this.offset.parent.left-e.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:c.top-this.offset.parent.top-e.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){e._clear(d)})}else this._clear(d,c);return false}},cancel:function(){var d=this;if(this.dragging){this._mouseUp({target:null});this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"): -this.currentItem.show();for(var c=this.containers.length-1;c>=0;c--){this.containers[c]._trigger("deactivate",null,d._uiHash(this));if(this.containers[c].containerCache.over){this.containers[c]._trigger("out",null,d._uiHash(this));this.containers[c].containerCache.over=0}}}if(this.placeholder){this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove();a.extend(this,{helper:null, -dragging:false,reverting:false,_noFinalSort:null});this.domPosition.prev?a(this.domPosition.prev).after(this.currentItem):a(this.domPosition.parent).prepend(this.currentItem)}return this},serialize:function(d){var c=this._getItemsAsjQuery(d&&d.connected),e=[];d=d||{};a(c).each(function(){var h=(a(d.item||this).attr(d.attribute||"id")||"").match(d.expression||/(.+)[-=_](.+)/);if(h)e.push((d.key||h[1]+"[]")+"="+(d.key&&d.expression?h[1]:h[2]))});!e.length&&d.key&&e.push(d.key+"=");return e.join("&")}, -toArray:function(d){var c=this._getItemsAsjQuery(d&&d.connected),e=[];d=d||{};c.each(function(){e.push(a(d.item||this).attr(d.attribute||"id")||"")});return e},_intersectsWith:function(d){var c=this.positionAbs.left,e=c+this.helperProportions.width,h=this.positionAbs.top,g=h+this.helperProportions.height,i=d.left,b=i+d.width,f=d.top,j=f+d.height,l=this.offset.click.top,o=this.offset.click.left;l=h+l>f&&h+li&&c+od[this.floating?"width":"height"]?l:i0?"down":"up")},_getDragHorizontalDirection:function(){var d=this.positionAbs.left-this.lastPositionAbs.left;return d!=0&&(d>0?"right":"left")},refresh:function(d){this._refreshItems(d);this.refreshPositions();return this},_connectWith:function(){var d=this.options;return d.connectWith.constructor==String?[d.connectWith]:d.connectWith},_getItemsAsjQuery:function(d){var c=[],e=[],h=this._connectWith(); -if(h&&d)for(d=h.length-1;d>=0;d--)for(var g=a(h[d]),i=g.length-1;i>=0;i--){var b=a.data(g[i],"sortable");if(b&&b!=this&&!b.options.disabled)e.push([a.isFunction(b.options.items)?b.options.items.call(b.element):a(b.options.items,b.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),b])}e.push([a.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):a(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), -this]);for(d=e.length-1;d>=0;d--)e[d][0].each(function(){c.push(this)});return a(c)},_removeCurrentsFromItems:function(){for(var d=this.currentItem.find(":data(sortable-item)"),c=0;c=0;g--)for(var i=a(h[g]),b=i.length-1;b>=0;b--){var f=a.data(i[b],"sortable");if(f&&f!=this&&!f.options.disabled){e.push([a.isFunction(f.options.items)?f.options.items.call(f.element[0],d,{item:this.currentItem}):a(f.options.items,f.element),f]);this.containers.push(f)}}for(g=e.length-1;g>=0;g--){d=e[g][1];h=e[g][0];b=0;for(i=h.length;b=0;c--){var e=this.items[c];if(!(e.instance!=this.currentContainer&&this.currentContainer&&e.item[0]!=this.currentItem[0])){var h=this.options.toleranceElement?a(this.options.toleranceElement,e.item):e.item;if(!d){e.width=h.outerWidth();e.height=h.outerHeight()}h=h.offset();e.left=h.left;e.top=h.top}}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(c= -this.containers.length-1;c>=0;c--){h=this.containers[c].element.offset();this.containers[c].containerCache.left=h.left;this.containers[c].containerCache.top=h.top;this.containers[c].containerCache.width=this.containers[c].element.outerWidth();this.containers[c].containerCache.height=this.containers[c].element.outerHeight()}return this},_createPlaceholder:function(d){var c=d||this,e=c.options;if(!e.placeholder||e.placeholder.constructor==String){var h=e.placeholder;e.placeholder={element:function(){var g= -a(document.createElement(c.currentItem[0].nodeName)).addClass(h||c.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!h)g.style.visibility="hidden";return g},update:function(g,i){if(!(h&&!e.forcePlaceholderSize)){i.height()||i.height(c.currentItem.innerHeight()-parseInt(c.currentItem.css("paddingTop")||0,10)-parseInt(c.currentItem.css("paddingBottom")||0,10));i.width()||i.width(c.currentItem.innerWidth()-parseInt(c.currentItem.css("paddingLeft")||0,10)-parseInt(c.currentItem.css("paddingRight")|| -0,10))}}}}c.placeholder=a(e.placeholder.element.call(c.element,c.currentItem));c.currentItem.after(c.placeholder);e.placeholder.update(c,c.placeholder)},_contactContainers:function(d){for(var c=null,e=null,h=this.containers.length-1;h>=0;h--)if(!a.ui.contains(this.currentItem[0],this.containers[h].element[0]))if(this._intersectsWith(this.containers[h].containerCache)){if(!(c&&a.ui.contains(this.containers[h].element[0],c.element[0]))){c=this.containers[h];e=h}}else if(this.containers[h].containerCache.over){this.containers[h]._trigger("out", -d,this._uiHash(this));this.containers[h].containerCache.over=0}if(c)if(this.containers.length===1){this.containers[e]._trigger("over",d,this._uiHash(this));this.containers[e].containerCache.over=1}else if(this.currentContainer!=this.containers[e]){c=1E4;h=null;for(var g=this.positionAbs[this.containers[e].floating?"left":"top"],i=this.items.length-1;i>=0;i--)if(a.ui.contains(this.containers[e].element[0],this.items[i].item[0])){var b=this.items[i][this.containers[e].floating?"left":"top"];if(Math.abs(b- -g)this.containment[2])g=this.containment[2]+this.offset.click.left;if(d.pageY-this.offset.click.top>this.containment[3])i=this.containment[3]+this.offset.click.top}if(c.grid){i=this.originalPageY+Math.round((i- -this.originalPageY)/c.grid[1])*c.grid[1];i=this.containment?!(i-this.offset.click.topthis.containment[3])?i:!(i-this.offset.click.topthis.containment[2])?g:!(g-this.offset.click.left=0;h--)if(a.ui.contains(this.containers[h].element[0],this.currentItem[0])&&!c){e.push(function(g){return function(i){g._trigger("receive",i,this._uiHash(this))}}.call(this,this.containers[h]));e.push(function(g){return function(i){g._trigger("update",i,this._uiHash(this))}}.call(this,this.containers[h]))}}for(h=this.containers.length-1;h>=0;h--){c||e.push(function(g){return function(i){g._trigger("deactivate",i,this._uiHash(this))}}.call(this, -this.containers[h]));if(this.containers[h].containerCache.over){e.push(function(g){return function(i){g._trigger("out",i,this._uiHash(this))}}.call(this,this.containers[h]));this.containers[h].containerCache.over=0}}this._storedCursor&&a("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!c){this._trigger("beforeStop", -d,this._uiHash());for(h=0;h").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}), -p=document.activeElement;n.wrap(m);if(n[0]===p||a.contains(n[0],p))a(p).focus();m=n.parent();if(n.css("position")=="static"){m.css({position:"relative"});n.css({position:"relative"})}else{a.extend(k,{position:n.css("position"),zIndex:n.css("z-index")});a.each(["top","left","bottom","right"],function(q,s){k[s]=n.css(s);if(isNaN(parseInt(k[s],10)))k[s]="auto"});n.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}return m.css(k).show()},removeWrapper:function(n){var k,m=document.activeElement; -if(n.parent().is(".ui-effects-wrapper")){k=n.parent().replaceWith(n);if(n[0]===m||a.contains(n[0],m))a(m).focus();return k}return n},setTransition:function(n,k,m,p){p=p||{};a.each(k,function(q,s){unit=n.cssUnit(s);if(unit[0]>0)p[s]=unit[0]*m+unit[1]});return p}});a.fn.extend({effect:function(n){var k=b.apply(this,arguments),m={options:k[1],duration:k[2],callback:k[3]};k=m.options.mode;var p=a.effects[n];if(a.fx.off||!p)return k?this[k](m.duration,m.callback):this.each(function(){m.callback&&m.callback.call(this)}); -return p.call(this,m)},_show:a.fn.show,show:function(n){if(f(n))return this._show.apply(this,arguments);else{var k=b.apply(this,arguments);k[1].mode="show";return this.effect.apply(this,k)}},_hide:a.fn.hide,hide:function(n){if(f(n))return this._hide.apply(this,arguments);else{var k=b.apply(this,arguments);k[1].mode="hide";return this.effect.apply(this,k)}},__toggle:a.fn.toggle,toggle:function(n){if(f(n)||typeof n==="boolean"||a.isFunction(n))return this.__toggle.apply(this,arguments);else{var k=b.apply(this, -arguments);k[1].mode="toggle";return this.effect.apply(this,k)}},cssUnit:function(n){var k=this.css(n),m=[];a.each(["em","px","%","pt"],function(p,q){if(k.indexOf(q)>0)m=[parseFloat(k),q]});return m}});a.easing.jswing=a.easing.swing;a.extend(a.easing,{def:"easeOutQuad",swing:function(n,k,m,p,q){return a.easing[a.easing.def](n,k,m,p,q)},easeInQuad:function(n,k,m,p,q){return p*(k/=q)*k+m},easeOutQuad:function(n,k,m,p,q){return-p*(k/=q)*(k-2)+m},easeInOutQuad:function(n,k,m,p,q){if((k/=q/2)<1)return p/ -2*k*k+m;return-p/2*(--k*(k-2)-1)+m},easeInCubic:function(n,k,m,p,q){return p*(k/=q)*k*k+m},easeOutCubic:function(n,k,m,p,q){return p*((k=k/q-1)*k*k+1)+m},easeInOutCubic:function(n,k,m,p,q){if((k/=q/2)<1)return p/2*k*k*k+m;return p/2*((k-=2)*k*k+2)+m},easeInQuart:function(n,k,m,p,q){return p*(k/=q)*k*k*k+m},easeOutQuart:function(n,k,m,p,q){return-p*((k=k/q-1)*k*k*k-1)+m},easeInOutQuart:function(n,k,m,p,q){if((k/=q/2)<1)return p/2*k*k*k*k+m;return-p/2*((k-=2)*k*k*k-2)+m},easeInQuint:function(n,k,m, -p,q){return p*(k/=q)*k*k*k*k+m},easeOutQuint:function(n,k,m,p,q){return p*((k=k/q-1)*k*k*k*k+1)+m},easeInOutQuint:function(n,k,m,p,q){if((k/=q/2)<1)return p/2*k*k*k*k*k+m;return p/2*((k-=2)*k*k*k*k+2)+m},easeInSine:function(n,k,m,p,q){return-p*Math.cos(k/q*(Math.PI/2))+p+m},easeOutSine:function(n,k,m,p,q){return p*Math.sin(k/q*(Math.PI/2))+m},easeInOutSine:function(n,k,m,p,q){return-p/2*(Math.cos(Math.PI*k/q)-1)+m},easeInExpo:function(n,k,m,p,q){return k==0?m:p*Math.pow(2,10*(k/q-1))+m},easeOutExpo:function(n, -k,m,p,q){return k==q?m+p:p*(-Math.pow(2,-10*k/q)+1)+m},easeInOutExpo:function(n,k,m,p,q){if(k==0)return m;if(k==q)return m+p;if((k/=q/2)<1)return p/2*Math.pow(2,10*(k-1))+m;return p/2*(-Math.pow(2,-10*--k)+2)+m},easeInCirc:function(n,k,m,p,q){return-p*(Math.sqrt(1-(k/=q)*k)-1)+m},easeOutCirc:function(n,k,m,p,q){return p*Math.sqrt(1-(k=k/q-1)*k)+m},easeInOutCirc:function(n,k,m,p,q){if((k/=q/2)<1)return-p/2*(Math.sqrt(1-k*k)-1)+m;return p/2*(Math.sqrt(1-(k-=2)*k)+1)+m},easeInElastic:function(n,k,m, -p,q){n=1.70158;var s=0,r=p;if(k==0)return m;if((k/=q)==1)return m+p;s||(s=q*0.3);if(r").css({position:"absolute",visibility:"visible",left:-j*(i/e),top:-f*(b/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:i/e,height:b/c,left:g.left+j*(i/e)+(d.options.mode=="show"?(j-Math.floor(e/2))*(i/e):0),top:g.top+f*(b/c)+(d.options.mode=="show"?(f-Math.floor(c/2))*(b/c):0),opacity:d.options.mode=="show"?0:1}).animate({left:g.left+j*(i/e)+(d.options.mode=="show"?0:(j-Math.floor(e/2))*(i/e)),top:g.top+ -f*(b/c)+(d.options.mode=="show"?0:(f-Math.floor(c/2))*(b/c)),opacity:d.options.mode=="show"?1:0},d.duration||500);setTimeout(function(){d.options.mode=="show"?h.css({visibility:"visible"}):h.css({visibility:"visible"}).hide();d.callback&&d.callback.apply(h[0]);h.dequeue();a("div.ui-effects-explode").remove()},d.duration||500)})}})(jQuery); -(function(a){a.effects.fade=function(d){return this.queue(function(){var c=a(this),e=a.effects.setMode(c,d.options.mode||"hide");c.animate({opacity:e},{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){d.callback&&d.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery); -(function(a){a.effects.fold=function(d){return this.queue(function(){var c=a(this),e=["position","top","bottom","left","right"],h=a.effects.setMode(c,d.options.mode||"hide"),g=d.options.size||15,i=!!d.options.horizFirst,b=d.duration?d.duration/2:a.fx.speeds._default/2;a.effects.save(c,e);c.show();var f=a.effects.createWrapper(c).css({overflow:"hidden"}),j=h=="show"!=i,l=j?["width","height"]:["height","width"];j=j?[f.width(),f.height()]:[f.height(),f.width()];var o=/([0-9]+)%/.exec(g);if(o)g=parseInt(o[1], -10)/100*j[h=="hide"?0:1];if(h=="show")f.css(i?{height:0,width:g}:{height:g,width:0});i={};o={};i[l[0]]=h=="show"?j[0]:g;o[l[1]]=h=="show"?j[1]:0;f.animate(i,b,d.options.easing).animate(o,b,d.options.easing,function(){h=="hide"&&c.hide();a.effects.restore(c,e);a.effects.removeWrapper(c);d.callback&&d.callback.apply(c[0],arguments);c.dequeue()})})}})(jQuery); -(function(a){a.effects.highlight=function(d){return this.queue(function(){var c=a(this),e=["backgroundImage","backgroundColor","opacity"],h=a.effects.setMode(c,d.options.mode||"show"),g={backgroundColor:c.css("backgroundColor")};if(h=="hide")g.opacity=0;a.effects.save(c,e);c.show().css({backgroundImage:"none",backgroundColor:d.options.color||"#ffff99"}).animate(g,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){h=="hide"&&c.hide();a.effects.restore(c,e);h=="show"&&!a.support.opacity&& -this.style.removeAttribute("filter");d.callback&&d.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery); -(function(a){a.effects.pulsate=function(d){return this.queue(function(){var c=a(this),e=a.effects.setMode(c,d.options.mode||"show");times=(d.options.times||5)*2-1;duration=d.duration?d.duration/2:a.fx.speeds._default/2;isVisible=c.is(":visible");animateTo=0;if(!isVisible){c.css("opacity",0).show();animateTo=1}if(e=="hide"&&isVisible||e=="show"&&!isVisible)times--;for(e=0;e').appendTo(document.body).addClass(d.options.className).css({top:h.top,left:h.left,height:c.innerHeight(),width:c.innerWidth(),position:"absolute"}).animate(e,d.duration,d.options.easing,function(){g.remove();d.callback&&d.callback.apply(c[0],arguments); -c.dequeue()})})}})(jQuery); -(function(a){a.widget("ui.accordion",{options:{active:0,animated:"slide",autoHeight:true,clearStyle:false,collapsible:false,event:"click",fillSpace:false,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var d=this,c=d.options;d.running=0;d.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix");d.headers= -d.element.find(c.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){c.disabled||a(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){c.disabled||a(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){c.disabled||a(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){c.disabled||a(this).removeClass("ui-state-focus")});d.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom"); -if(c.navigation){var e=d.element.find("a").filter(c.navigationFilter).eq(0);if(e.length){var h=e.closest(".ui-accordion-header");d.active=h.length?h:e.closest(".ui-accordion-content").prev()}}d.active=d._findActive(d.active||c.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");d.active.next().addClass("ui-accordion-content-active");d._createIcons();d.resize();d.element.attr("role","tablist");d.headers.attr("role","tab").bind("keydown.accordion", -function(g){return d._keydown(g)}).next().attr("role","tabpanel");d.headers.not(d.active||"").attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).next().hide();d.active.length?d.active.attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}):d.headers.eq(0).attr("tabIndex",0);a.browser.safari||d.headers.find("a").attr("tabIndex",-1);c.event&&d.headers.bind(c.event.split(" ").join(".accordion ")+".accordion",function(g){d._clickHandler.call(d,g,this);g.preventDefault()})},_createIcons:function(){var d= -this.options;if(d.icons){a("").addClass("ui-icon "+d.icons.header).prependTo(this.headers);this.active.children(".ui-icon").toggleClass(d.icons.header).toggleClass(d.icons.headerSelected);this.element.addClass("ui-accordion-icons")}},_destroyIcons:function(){this.headers.children(".ui-icon").remove();this.element.removeClass("ui-accordion-icons")},destroy:function(){var d=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("tabIndex"); -this.headers.find("a").removeAttr("tabIndex");this._destroyIcons();var c=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");if(d.autoHeight||d.fillHeight)c.css("height","");return a.Widget.prototype.destroy.call(this)},_setOption:function(d,c){a.Widget.prototype._setOption.apply(this,arguments);d=="active"&&this.activate(c);if(d=="icons"){this._destroyIcons(); -c&&this._createIcons()}if(d=="disabled")this.headers.add(this.headers.next())[c?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(d){if(!(this.options.disabled||d.altKey||d.ctrlKey)){var c=a.ui.keyCode,e=this.headers.length,h=this.headers.index(d.target),g=false;switch(d.keyCode){case c.RIGHT:case c.DOWN:g=this.headers[(h+1)%e];break;case c.LEFT:case c.UP:g=this.headers[(h-1+e)%e];break;case c.SPACE:case c.ENTER:this._clickHandler({target:d.target},d.target); -d.preventDefault()}if(g){a(d.target).attr("tabIndex",-1);a(g).attr("tabIndex",0);g.focus();return false}return true}},resize:function(){var d=this.options,c;if(d.fillSpace){if(a.browser.msie){var e=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}c=this.element.parent().height();a.browser.msie&&this.element.parent().css("overflow",e);this.headers.each(function(){c-=a(this).outerHeight(true)});this.headers.next().each(function(){a(this).height(Math.max(0,c-a(this).innerHeight()+ -a(this).height()))}).css("overflow","auto")}else if(d.autoHeight){c=0;this.headers.next().each(function(){c=Math.max(c,a(this).height("").height())}).height(c)}return this},activate:function(d){this.options.active=d;d=this._findActive(d)[0];this._clickHandler({target:d},d);return this},_findActive:function(d){return d?typeof d==="number"?this.headers.filter(":eq("+d+")"):this.headers.not(this.headers.not(d)):d===false?a([]):this.headers.filter(":eq(0)")},_clickHandler:function(d,c){var e=this.options; -if(!e.disabled)if(d.target){d=a(d.currentTarget||c);c=d[0]===this.active[0];e.active=e.collapsible&&c?false:this.headers.index(d);if(!(this.running||!e.collapsible&&c)){var h=this.active;f=d.next();i=this.active.next();b={options:e,newHeader:c&&e.collapsible?a([]):d,oldHeader:this.active,newContent:c&&e.collapsible?a([]):f,oldContent:i};var g=this.headers.index(this.active[0])>this.headers.index(d[0]);this.active=c?a([]):d;this._toggle(f,i,b,c,g);h.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(e.icons.headerSelected).addClass(e.icons.header); -if(!c){d.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(e.icons.header).addClass(e.icons.headerSelected);d.next().addClass("ui-accordion-content-active")}}}else if(e.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(e.icons.headerSelected).addClass(e.icons.header);this.active.next().addClass("ui-accordion-content-active");var i=this.active.next(), -b={options:e,newHeader:a([]),oldHeader:e.active,newContent:a([]),oldContent:i},f=this.active=a([]);this._toggle(f,i,b)}},_toggle:function(d,c,e,h,g){var i=this,b=i.options;i.toShow=d;i.toHide=c;i.data=e;var f=function(){if(i)return i._completed.apply(i,arguments)};i._trigger("changestart",null,i.data);i.running=c.size()===0?d.size():c.size();if(b.animated){e={};e=b.collapsible&&h?{toShow:a([]),toHide:c,complete:f,down:g,autoHeight:b.autoHeight||b.fillSpace}:{toShow:d,toHide:c,complete:f,down:g,autoHeight:b.autoHeight|| -b.fillSpace};if(!b.proxied)b.proxied=b.animated;if(!b.proxiedDuration)b.proxiedDuration=b.duration;b.animated=a.isFunction(b.proxied)?b.proxied(e):b.proxied;b.duration=a.isFunction(b.proxiedDuration)?b.proxiedDuration(e):b.proxiedDuration;h=a.ui.accordion.animations;var j=b.duration,l=b.animated;if(l&&!h[l]&&!a.easing[l])l="slide";h[l]||(h[l]=function(o){this.slide(o,{easing:l,duration:j||700})});h[l](e)}else{if(b.collapsible&&h)d.toggle();else{c.hide();d.show()}f(true)}c.prev().attr({"aria-expanded":"false", -"aria-selected":"false",tabIndex:-1}).blur();d.prev().attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}).focus()},_completed:function(d){this.running=d?0:--this.running;if(!this.running){this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""});this.toHide.removeClass("ui-accordion-content-active");if(this.toHide.length)this.toHide.parent()[0].className=this.toHide.parent()[0].className;this._trigger("change",null,this.data)}}});a.extend(a.ui.accordion,{version:"1.8.16", -animations:{slide:function(d,c){d=a.extend({easing:"swing",duration:300},d,c);if(d.toHide.size())if(d.toShow.size()){var e=d.toShow.css("overflow"),h=0,g={},i={},b;c=d.toShow;b=c[0].style.width;c.width(parseInt(c.parent().width(),10)-parseInt(c.css("paddingLeft"),10)-parseInt(c.css("paddingRight"),10)-(parseInt(c.css("borderLeftWidth"),10)||0)-(parseInt(c.css("borderRightWidth"),10)||0));a.each(["height","paddingTop","paddingBottom"],function(f,j){i[j]="hide";f=(""+a.css(d.toShow[0],j)).match(/^([\d+-.]+)(.*)$/); -g[j]={value:f[1],unit:f[2]||"px"}});d.toShow.css({height:0,overflow:"hidden"}).show();d.toHide.filter(":hidden").each(d.complete).end().filter(":visible").animate(i,{step:function(f,j){if(j.prop=="height")h=j.end-j.start===0?0:(j.now-j.start)/(j.end-j.start);d.toShow[0].style[j.prop]=h*g[j.prop].value+g[j.prop].unit},duration:d.duration,easing:d.easing,complete:function(){d.autoHeight||d.toShow.css("height","");d.toShow.css({width:b,overflow:e});d.complete()}})}else d.toHide.animate({height:"hide", -paddingTop:"hide",paddingBottom:"hide"},d);else d.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},d)},bounceslide:function(d){this.slide(d,{easing:d.down?"easeOutBounce":"swing",duration:d.down?1E3:200})}}})})(jQuery); -(function(a){var d=0;a.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:false,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var c=this,e=this.element[0].ownerDocument,h;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(g){if(!(c.options.disabled||c.element.propAttr("readOnly"))){h= -false;var i=a.ui.keyCode;switch(g.keyCode){case i.PAGE_UP:c._move("previousPage",g);break;case i.PAGE_DOWN:c._move("nextPage",g);break;case i.UP:c._move("previous",g);g.preventDefault();break;case i.DOWN:c._move("next",g);g.preventDefault();break;case i.ENTER:case i.NUMPAD_ENTER:if(c.menu.active){h=true;g.preventDefault()}case i.TAB:if(!c.menu.active)return;c.menu.select(g);break;case i.ESCAPE:c.element.val(c.term);c.close(g);break;default:clearTimeout(c.searching);c.searching=setTimeout(function(){if(c.term!= -c.element.val()){c.selectedItem=null;c.search(null,g)}},c.options.delay);break}}}).bind("keypress.autocomplete",function(g){if(h){h=false;g.preventDefault()}}).bind("focus.autocomplete",function(){if(!c.options.disabled){c.selectedItem=null;c.previous=c.element.val()}}).bind("blur.autocomplete",function(g){if(!c.options.disabled){clearTimeout(c.searching);c.closing=setTimeout(function(){c.close(g);c._change(g)},150)}});this._initSource();this.response=function(){return c._response.apply(c,arguments)}; -this.menu=a("
      ").addClass("ui-autocomplete").appendTo(a(this.options.appendTo||"body",e)[0]).mousedown(function(g){var i=c.menu.element[0];a(g.target).closest(".ui-menu-item").length||setTimeout(function(){a(document).one("mousedown",function(b){b.target!==c.element[0]&&b.target!==i&&!a.ui.contains(i,b.target)&&c.close()})},1);setTimeout(function(){clearTimeout(c.closing)},13)}).menu({focus:function(g,i){i=i.item.data("item.autocomplete");false!==c._trigger("focus",g,{item:i})&&/^key/.test(g.originalEvent.type)&& -c.element.val(i.value)},selected:function(g,i){var b=i.item.data("item.autocomplete"),f=c.previous;if(c.element[0]!==e.activeElement){c.element.focus();c.previous=f;setTimeout(function(){c.previous=f;c.selectedItem=b},1)}false!==c._trigger("select",g,{item:b})&&c.element.val(b.value);c.term=c.element.val();c.close(g);c.selectedItem=b},blur:function(){c.menu.element.is(":visible")&&c.element.val()!==c.term&&c.element.val(c.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu"); -a.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");this.menu.element.remove();a.Widget.prototype.destroy.call(this)},_setOption:function(c,e){a.Widget.prototype._setOption.apply(this,arguments);c==="source"&&this._initSource();if(c==="appendTo")this.menu.element.appendTo(a(e||"body",this.element[0].ownerDocument)[0]);c==="disabled"&& -e&&this.xhr&&this.xhr.abort()},_initSource:function(){var c=this,e,h;if(a.isArray(this.options.source)){e=this.options.source;this.source=function(g,i){i(a.ui.autocomplete.filter(e,g.term))}}else if(typeof this.options.source==="string"){h=this.options.source;this.source=function(g,i){c.xhr&&c.xhr.abort();c.xhr=a.ajax({url:h,data:g,dataType:"json",autocompleteRequest:++d,success:function(b){this.autocompleteRequest===d&&i(b)},error:function(){this.autocompleteRequest===d&&i([])}})}}else this.source= -this.options.source},search:function(c,e){c=c!=null?c:this.element.val();this.term=this.element.val();if(c.length").data("item.autocomplete",e).append(a("").text(e.label)).appendTo(c)},_move:function(c,e){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(c)||this.menu.last()&&/^next/.test(c)){this.element.val(this.term);this.menu.deactivate()}else this.menu[c](e);else this.search(null,e)},widget:function(){return this.menu.element}});a.extend(a.ui.autocomplete,{escapeRegex:function(c){return c.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, -"\\$&")},filter:function(c,e){var h=new RegExp(a.ui.autocomplete.escapeRegex(e),"i");return a.grep(c,function(g){return h.test(g.label||g.value||g)})}})})(jQuery); -(function(a){a.widget("ui.menu",{_create:function(){var d=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(c){if(a(c.target).closest(".ui-menu-item a").length){c.preventDefault();d.select(c)}});this.refresh()},refresh:function(){var d=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex", --1).mouseenter(function(c){d.activate(c,a(this).parent())}).mouseleave(function(){d.deactivate()})},activate:function(d,c){this.deactivate();if(this.hasScroll()){var e=c.offset().top-this.element.offset().top,h=this.element.scrollTop(),g=this.element.height();if(e<0)this.element.scrollTop(h+e);else e>=g&&this.element.scrollTop(h+e-g+c.height())}this.active=c.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",d,{item:c})},deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id"); -this._trigger("blur");this.active=null}},next:function(d){this.move("next",".ui-menu-item:first",d)},previous:function(d){this.move("prev",".ui-menu-item:last",d)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(d,c,e){if(this.active){d=this.active[d+"All"](".ui-menu-item").eq(0);d.length?this.activate(e,d):this.activate(e,this.element.children(c))}else this.activate(e, -this.element.children(c))},nextPage:function(d){if(this.hasScroll())if(!this.active||this.last())this.activate(d,this.element.children(".ui-menu-item:first"));else{var c=this.active.offset().top,e=this.element.height(),h=this.element.children(".ui-menu-item").filter(function(){var g=a(this).offset().top-c-e+a(this).height();return g<10&&g>-10});h.length||(h=this.element.children(".ui-menu-item:last"));this.activate(d,h)}else this.activate(d,this.element.children(".ui-menu-item").filter(!this.active|| -this.last()?":first":":last"))},previousPage:function(d){if(this.hasScroll())if(!this.active||this.first())this.activate(d,this.element.children(".ui-menu-item:last"));else{var c=this.active.offset().top,e=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var h=a(this).offset().top-c+e-a(this).height();return h<10&&h>-10});result.length||(result=this.element.children(".ui-menu-item:first"));this.activate(d,result)}else this.activate(d,this.element.children(".ui-menu-item").filter(!this.active|| -this.first()?":last":":first"))},hasScroll:function(){return this.element.height()").addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),j=this.options.icons,l=j.primary&&j.secondary,o=[];if(j.primary||j.secondary){if(this.options.text)o.push("ui-button-text-icon"+(l?"s":j.primary?"-primary":"-secondary"));j.primary&&b.prepend("");j.secondary&&b.append("");if(!this.options.text){o.push(l?"ui-button-icons-only": -"ui-button-icon-only");this.hasTitle||b.attr("title",f)}}else o.push("ui-button-text-only");b.addClass(o.join(" "))}}});a.widget("ui.buttonset",{options:{items:":button, :submit, :reset, :checkbox, :radio, a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(b,f){b==="disabled"&&this.buttons.button("option",b,f);a.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){var b=this.element.css("direction")=== -"ltr";this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(b?"ui-corner-left":"ui-corner-right").end().filter(":last").addClass(b?"ui-corner-right":"ui-corner-left").end().end()},destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy"); -a.Widget.prototype.destroy.call(this)}})})(jQuery); -(function(a,d){function c(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._inDialog=this._datepickerShowing=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass= -"ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su", -"Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:false,showMonthAfterYear:false,yearSuffix:""};this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,yearRange:"c-10:c+10",showOtherMonths:false,selectOtherMonths:false,showWeek:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10", -minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false,autoSize:false,disabled:false};a.extend(this._defaults,this.regional[""]);this.dpDiv=e(a('
      '))}function e(b){return b.bind("mouseout", -function(f){f=a(f.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");f.length&&f.removeClass("ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover")}).bind("mouseover",function(f){f=a(f.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");if(!(a.datepicker._isDisabledDatepicker(i.inline?b.parent()[0]:i.input[0])||!f.length)){f.parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"); -f.addClass("ui-state-hover");f.hasClass("ui-datepicker-prev")&&f.addClass("ui-datepicker-prev-hover");f.hasClass("ui-datepicker-next")&&f.addClass("ui-datepicker-next-hover")}})}function h(b,f){a.extend(b,f);for(var j in f)if(f[j]==null||f[j]==d)b[j]=f[j];return b}a.extend(a.ui,{datepicker:{version:"1.8.16"}});var g=(new Date).getTime(),i;a.extend(c.prototype,{markerClassName:"hasDatepicker",maxRows:4,log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv}, -setDefaults:function(b){h(this._defaults,b||{});return this},_attachDatepicker:function(b,f){var j=null;for(var l in this._defaults){var o=b.getAttribute("date:"+l);if(o){j=j||{};try{j[l]=eval(o)}catch(n){j[l]=o}}}l=b.nodeName.toLowerCase();o=l=="div"||l=="span";if(!b.id){this.uuid+=1;b.id="dp"+this.uuid}var k=this._newInst(a(b),o);k.settings=a.extend({},f||{},j||{});if(l=="input")this._connectDatepicker(b,k);else o&&this._inlineDatepicker(b,k)},_newInst:function(b,f){return{id:b[0].id.replace(/([^A-Za-z0-9_-])/g, -"\\\\$1"),input:b,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:f,dpDiv:!f?this.dpDiv:e(a('
      '))}},_connectDatepicker:function(b,f){var j=a(b);f.append=a([]);f.trigger=a([]);if(!j.hasClass(this.markerClassName)){this._attachments(j,f);j.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker", -function(l,o,n){f.settings[o]=n}).bind("getData.datepicker",function(l,o){return this._get(f,o)});this._autoSize(f);a.data(b,"datepicker",f);f.settings.disabled&&this._disableDatepicker(b)}},_attachments:function(b,f){var j=this._get(f,"appendText"),l=this._get(f,"isRTL");f.append&&f.append.remove();if(j){f.append=a(''+j+"");b[l?"before":"after"](f.append)}b.unbind("focus",this._showDatepicker);f.trigger&&f.trigger.remove();j=this._get(f,"showOn");if(j== -"focus"||j=="both")b.focus(this._showDatepicker);if(j=="button"||j=="both"){j=this._get(f,"buttonText");var o=this._get(f,"buttonImage");f.trigger=a(this._get(f,"buttonImageOnly")?a("").addClass(this._triggerClass).attr({src:o,alt:j,title:j}):a('').addClass(this._triggerClass).html(o==""?j:a("").attr({src:o,alt:j,title:j})));b[l?"before":"after"](f.trigger);f.trigger.click(function(){a.datepicker._datepickerShowing&&a.datepicker._lastInput==b[0]?a.datepicker._hideDatepicker(): -a.datepicker._showDatepicker(b[0]);return false})}},_autoSize:function(b){if(this._get(b,"autoSize")&&!b.inline){var f=new Date(2009,11,20),j=this._get(b,"dateFormat");if(j.match(/[DM]/)){var l=function(o){for(var n=0,k=0,m=0;mn){n=o[m].length;k=m}return k};f.setMonth(l(this._get(b,j.match(/MM/)?"monthNames":"monthNamesShort")));f.setDate(l(this._get(b,j.match(/DD/)?"dayNames":"dayNamesShort"))+20-f.getDay())}b.input.attr("size",this._formatDate(b,f).length)}},_inlineDatepicker:function(b, -f){var j=a(b);if(!j.hasClass(this.markerClassName)){j.addClass(this.markerClassName).append(f.dpDiv).bind("setData.datepicker",function(l,o,n){f.settings[o]=n}).bind("getData.datepicker",function(l,o){return this._get(f,o)});a.data(b,"datepicker",f);this._setDate(f,this._getDefaultDate(f),true);this._updateDatepicker(f);this._updateAlternate(f);f.settings.disabled&&this._disableDatepicker(b);f.dpDiv.css("display","block")}},_dialogDatepicker:function(b,f,j,l,o){b=this._dialogInst;if(!b){this.uuid+= -1;this._dialogInput=a('');this._dialogInput.keydown(this._doKeyDown);a("body").append(this._dialogInput);b=this._dialogInst=this._newInst(this._dialogInput,false);b.settings={};a.data(this._dialogInput[0],"datepicker",b)}h(b.settings,l||{});f=f&&f.constructor==Date?this._formatDate(b,f):f;this._dialogInput.val(f);this._pos=o?o.length?o:[o.pageX,o.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/ -2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px");b.settings.onSelect=j;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);a.blockUI&&a.blockUI(this.dpDiv);a.data(this._dialogInput[0],"datepicker",b);return this},_destroyDatepicker:function(b){var f= -a(b),j=a.data(b,"datepicker");if(f.hasClass(this.markerClassName)){var l=b.nodeName.toLowerCase();a.removeData(b,"datepicker");if(l=="input"){j.append.remove();j.trigger.remove();f.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)}else if(l=="div"||l=="span")f.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(b){var f=a(b),j=a.data(b,"datepicker");if(f.hasClass(this.markerClassName)){var l= -b.nodeName.toLowerCase();if(l=="input"){b.disabled=false;j.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(l=="div"||l=="span"){f=f.children("."+this._inlineClass);f.children().removeClass("ui-state-disabled");f.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled")}this._disabledInputs=a.map(this._disabledInputs,function(o){return o==b?null:o})}},_disableDatepicker:function(b){var f=a(b),j=a.data(b, -"datepicker");if(f.hasClass(this.markerClassName)){var l=b.nodeName.toLowerCase();if(l=="input"){b.disabled=true;j.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else if(l=="div"||l=="span"){f=f.children("."+this._inlineClass);f.children().addClass("ui-state-disabled");f.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled","disabled")}this._disabledInputs=a.map(this._disabledInputs,function(o){return o== -b?null:o});this._disabledInputs[this._disabledInputs.length]=b}},_isDisabledDatepicker:function(b){if(!b)return false;for(var f=0;f-1}},_doKeyUp:function(b){b=a.datepicker._getInst(b.target);if(b.input.val()!=b.lastVal)try{if(a.datepicker.parseDate(a.datepicker._get(b,"dateFormat"),b.input?b.input.val():null,a.datepicker._getFormatConfig(b))){a.datepicker._setDateFromField(b);a.datepicker._updateAlternate(b);a.datepicker._updateDatepicker(b)}}catch(f){a.datepicker.log(f)}return true},_showDatepicker:function(b){b=b.target||b;if(b.nodeName.toLowerCase()!="input")b=a("input", -b.parentNode)[0];if(!(a.datepicker._isDisabledDatepicker(b)||a.datepicker._lastInput==b)){var f=a.datepicker._getInst(b);if(a.datepicker._curInst&&a.datepicker._curInst!=f){a.datepicker._datepickerShowing&&a.datepicker._triggerOnClose(a.datepicker._curInst);a.datepicker._curInst.dpDiv.stop(true,true)}var j=a.datepicker._get(f,"beforeShow");j=j?j.apply(b,[b,f]):{};if(j!==false){h(f.settings,j);f.lastVal=null;a.datepicker._lastInput=b;a.datepicker._setDateFromField(f);if(a.datepicker._inDialog)b.value= -"";if(!a.datepicker._pos){a.datepicker._pos=a.datepicker._findPos(b);a.datepicker._pos[1]+=b.offsetHeight}var l=false;a(b).parents().each(function(){l|=a(this).css("position")=="fixed";return!l});if(l&&a.browser.opera){a.datepicker._pos[0]-=document.documentElement.scrollLeft;a.datepicker._pos[1]-=document.documentElement.scrollTop}j={left:a.datepicker._pos[0],top:a.datepicker._pos[1]};a.datepicker._pos=null;f.dpDiv.empty();f.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});a.datepicker._updateDatepicker(f); -j=a.datepicker._checkOffset(f,j,l);f.dpDiv.css({position:a.datepicker._inDialog&&a.blockUI?"static":l?"fixed":"absolute",display:"none",left:j.left+"px",top:j.top+"px"});if(!f.inline){j=a.datepicker._get(f,"showAnim");var o=a.datepicker._get(f,"duration"),n=function(){var k=f.dpDiv.find("iframe.ui-datepicker-cover");if(k.length){var m=a.datepicker._getBorders(f.dpDiv);k.css({left:-m[0],top:-m[1],width:f.dpDiv.outerWidth(),height:f.dpDiv.outerHeight()})}};f.dpDiv.zIndex(a(b).zIndex()+1);a.datepicker._datepickerShowing= -true;a.effects&&a.effects[j]?f.dpDiv.show(j,a.datepicker._get(f,"showOptions"),o,n):f.dpDiv[j||"show"](j?o:null,n);if(!j||!o)n();f.input.is(":visible")&&!f.input.is(":disabled")&&f.input.focus();a.datepicker._curInst=f}}}},_updateDatepicker:function(b){this.maxRows=4;var f=a.datepicker._getBorders(b.dpDiv);i=b;b.dpDiv.empty().append(this._generateHTML(b));var j=b.dpDiv.find("iframe.ui-datepicker-cover");j.length&&j.css({left:-f[0],top:-f[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()}); -b.dpDiv.find("."+this._dayOverClass+" a").mouseover();f=this._getNumberOfMonths(b);j=f[1];b.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");j>1&&b.dpDiv.addClass("ui-datepicker-multi-"+j).css("width",17*j+"em");b.dpDiv[(f[0]!=1||f[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");b.dpDiv[(this._get(b,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");b==a.datepicker._curInst&&a.datepicker._datepickerShowing&&b.input&&b.input.is(":visible")&& -!b.input.is(":disabled")&&b.input[0]!=document.activeElement&&b.input.focus();if(b.yearshtml){var l=b.yearshtml;setTimeout(function(){l===b.yearshtml&&b.yearshtml&&b.dpDiv.find("select.ui-datepicker-year:first").replaceWith(b.yearshtml);l=b.yearshtml=null},0)}},_getBorders:function(b){var f=function(j){return{thin:1,medium:2,thick:3}[j]||j};return[parseFloat(f(b.css("border-left-width"))),parseFloat(f(b.css("border-top-width")))]},_checkOffset:function(b,f,j){var l=b.dpDiv.outerWidth(),o=b.dpDiv.outerHeight(), -n=b.input?b.input.outerWidth():0,k=b.input?b.input.outerHeight():0,m=document.documentElement.clientWidth+a(document).scrollLeft(),p=document.documentElement.clientHeight+a(document).scrollTop();f.left-=this._get(b,"isRTL")?l-n:0;f.left-=j&&f.left==b.input.offset().left?a(document).scrollLeft():0;f.top-=j&&f.top==b.input.offset().top+k?a(document).scrollTop():0;f.left-=Math.min(f.left,f.left+l>m&&m>l?Math.abs(f.left+l-m):0);f.top-=Math.min(f.top,f.top+o>p&&p>o?Math.abs(o+k):0);return f},_findPos:function(b){for(var f= -this._get(this._getInst(b),"isRTL");b&&(b.type=="hidden"||b.nodeType!=1||a.expr.filters.hidden(b));)b=b[f?"previousSibling":"nextSibling"];b=a(b).offset();return[b.left,b.top]},_triggerOnClose:function(b){var f=this._get(b,"onClose");if(f)f.apply(b.input?b.input[0]:null,[b.input?b.input.val():"",b])},_hideDatepicker:function(b){var f=this._curInst;if(!(!f||b&&f!=a.data(b,"datepicker")))if(this._datepickerShowing){b=this._get(f,"showAnim");var j=this._get(f,"duration"),l=function(){a.datepicker._tidyDialog(f); -this._curInst=null};a.effects&&a.effects[b]?f.dpDiv.hide(b,a.datepicker._get(f,"showOptions"),j,l):f.dpDiv[b=="slideDown"?"slideUp":b=="fadeIn"?"fadeOut":"hide"](b?j:null,l);b||l();a.datepicker._triggerOnClose(f);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if(a.blockUI){a.unblockUI();a("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(b){b.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")}, -_checkExternalClick:function(b){if(a.datepicker._curInst){b=a(b.target);b[0].id!=a.datepicker._mainDivId&&b.parents("#"+a.datepicker._mainDivId).length==0&&!b.hasClass(a.datepicker.markerClassName)&&!b.hasClass(a.datepicker._triggerClass)&&a.datepicker._datepickerShowing&&!(a.datepicker._inDialog&&a.blockUI)&&a.datepicker._hideDatepicker()}},_adjustDate:function(b,f,j){b=a(b);var l=this._getInst(b[0]);if(!this._isDisabledDatepicker(b[0])){this._adjustInstDate(l,f+(j=="M"?this._get(l,"showCurrentAtPos"): -0),j);this._updateDatepicker(l)}},_gotoToday:function(b){b=a(b);var f=this._getInst(b[0]);if(this._get(f,"gotoCurrent")&&f.currentDay){f.selectedDay=f.currentDay;f.drawMonth=f.selectedMonth=f.currentMonth;f.drawYear=f.selectedYear=f.currentYear}else{var j=new Date;f.selectedDay=j.getDate();f.drawMonth=f.selectedMonth=j.getMonth();f.drawYear=f.selectedYear=j.getFullYear()}this._notifyChange(f);this._adjustDate(b)},_selectMonthYear:function(b,f,j){b=a(b);var l=this._getInst(b[0]);l["selected"+(j=="M"? -"Month":"Year")]=l["draw"+(j=="M"?"Month":"Year")]=parseInt(f.options[f.selectedIndex].value,10);this._notifyChange(l);this._adjustDate(b)},_selectDay:function(b,f,j,l){var o=a(b);if(!(a(l).hasClass(this._unselectableClass)||this._isDisabledDatepicker(o[0]))){o=this._getInst(o[0]);o.selectedDay=o.currentDay=a("a",l).html();o.selectedMonth=o.currentMonth=f;o.selectedYear=o.currentYear=j;this._selectDate(b,this._formatDate(o,o.currentDay,o.currentMonth,o.currentYear))}},_clearDate:function(b){b=a(b); -this._getInst(b[0]);this._selectDate(b,"")},_selectDate:function(b,f){b=this._getInst(a(b)[0]);f=f!=null?f:this._formatDate(b);b.input&&b.input.val(f);this._updateAlternate(b);var j=this._get(b,"onSelect");if(j)j.apply(b.input?b.input[0]:null,[f,b]);else b.input&&b.input.trigger("change");if(b.inline)this._updateDatepicker(b);else{this._hideDatepicker();this._lastInput=b.input[0];typeof b.input[0]!="object"&&b.input.focus();this._lastInput=null}},_updateAlternate:function(b){var f=this._get(b,"altField"); -if(f){var j=this._get(b,"altFormat")||this._get(b,"dateFormat"),l=this._getDate(b),o=this.formatDate(j,l,this._getFormatConfig(b));a(f).each(function(){a(this).val(o)})}},noWeekends:function(b){b=b.getDay();return[b>0&&b<6,""]},iso8601Week:function(b){b=new Date(b.getTime());b.setDate(b.getDate()+4-(b.getDay()||7));var f=b.getTime();b.setMonth(0);b.setDate(1);return Math.floor(Math.round((f-b)/864E5)/7)+1},parseDate:function(b,f,j){if(b==null||f==null)throw"Invalid arguments";f=typeof f=="object"? -f.toString():f+"";if(f=="")return null;var l=(j?j.shortYearCutoff:null)||this._defaults.shortYearCutoff;l=typeof l!="string"?l:(new Date).getFullYear()%100+parseInt(l,10);for(var o=(j?j.dayNamesShort:null)||this._defaults.dayNamesShort,n=(j?j.dayNames:null)||this._defaults.dayNames,k=(j?j.monthNamesShort:null)||this._defaults.monthNamesShort,m=(j?j.monthNames:null)||this._defaults.monthNames,p=j=-1,q=-1,s=-1,r=false,u=function(z){(z=H+1-1){p=1;q=s;do{l=this._getDaysInMonth(j,p-1);if(q<=l)break;p++;q-=l}while(1)}C=this._daylightSavingAdjust(new Date(j,p-1,q));if(C.getFullYear()!=j||C.getMonth()+1!=p||C.getDate()!=q)throw"Invalid date";return C},ATOM:"yy-mm-dd", -COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1E7,formatDate:function(b,f,j){if(!f)return"";var l=(j?j.dayNamesShort:null)||this._defaults.dayNamesShort,o=(j?j.dayNames:null)||this._defaults.dayNames,n=(j?j.monthNamesShort:null)||this._defaults.monthNamesShort;j=(j?j.monthNames: -null)||this._defaults.monthNames;var k=function(u){(u=r+1 -12?b.getHours()+2:0);return b},_setDate:function(b,f,j){var l=!f,o=b.selectedMonth,n=b.selectedYear;f=this._restrictMinMax(b,this._determineDate(b,f,new Date));b.selectedDay=b.currentDay=f.getDate();b.drawMonth=b.selectedMonth=b.currentMonth=f.getMonth();b.drawYear=b.selectedYear=b.currentYear=f.getFullYear();if((o!=b.selectedMonth||n!=b.selectedYear)&&!j)this._notifyChange(b);this._adjustInstDate(b);if(b.input)b.input.val(l?"":this._formatDate(b))},_getDate:function(b){return!b.currentYear||b.input&& -b.input.val()==""?null:this._daylightSavingAdjust(new Date(b.currentYear,b.currentMonth,b.currentDay))},_generateHTML:function(b){var f=new Date;f=this._daylightSavingAdjust(new Date(f.getFullYear(),f.getMonth(),f.getDate()));var j=this._get(b,"isRTL"),l=this._get(b,"showButtonPanel"),o=this._get(b,"hideIfNoPrevNext"),n=this._get(b,"navigationAsDateFormat"),k=this._getNumberOfMonths(b),m=this._get(b,"showCurrentAtPos"),p=this._get(b,"stepMonths"),q=k[0]!=1||k[1]!=1,s=this._daylightSavingAdjust(!b.currentDay? -new Date(9999,9,9):new Date(b.currentYear,b.currentMonth,b.currentDay)),r=this._getMinMaxDate(b,"min"),u=this._getMinMaxDate(b,"max");m=b.drawMonth-m;var v=b.drawYear;if(m<0){m+=12;v--}if(u){var w=this._daylightSavingAdjust(new Date(u.getFullYear(),u.getMonth()-k[0]*k[1]+1,u.getDate()));for(w=r&&ww;){m--;if(m<0){m=11;v--}}}b.drawMonth=m;b.drawYear=v;w=this._get(b,"prevText");w=!n?w:this.formatDate(w,this._daylightSavingAdjust(new Date(v,m-p,1)),this._getFormatConfig(b)); -w=this._canAdjustMonth(b,-1,v,m)?''+w+"":o?"":''+w+"";var x=this._get(b,"nextText");x=!n?x:this.formatDate(x,this._daylightSavingAdjust(new Date(v, -m+p,1)),this._getFormatConfig(b));o=this._canAdjustMonth(b,+1,v,m)?''+x+"":o?"":''+x+"";p=this._get(b,"currentText");x=this._get(b,"gotoCurrent")&& -b.currentDay?s:f;p=!n?p:this.formatDate(p,x,this._getFormatConfig(b));n=!b.inline?'":"";l=l?'
      '+(j?n:"")+(this._isInRange(b,x)?'":"")+(j?"":n)+"
      ":"";n=parseInt(this._get(b,"firstDay"),10);n=isNaN(n)?0:n;p=this._get(b,"showWeek");x=this._get(b,"dayNames");this._get(b,"dayNamesShort");var y=this._get(b,"dayNamesMin"),H=this._get(b,"monthNames"),C=this._get(b,"monthNamesShort"),z=this._get(b,"beforeShowDay"),I=this._get(b,"showOtherMonths"),N=this._get(b,"selectOtherMonths");this._get(b,"calculateWeek");for(var J=this._getDefaultDate(b),D="",E=0;E1)switch(L){case 0:F+=" ui-datepicker-group-first";B=" ui-corner-"+(j?"right":"left");break;case k[1]-1:F+=" ui-datepicker-group-last";B=" ui-corner-"+(j?"left":"right");break;default:F+=" ui-datepicker-group-middle";B="";break}F+='">'}F+='
      '+(/all|left/.test(B)&& -E==0?j?o:w:"")+(/all|right/.test(B)&&E==0?j?w:o:"")+this._generateMonthYearHeader(b,m,v,r,u,E>0||L>0,H,C)+'
      Channel NameMembersTopic
      ' + chan.channel + '' + chan.num_users + '' + kiwi.front.formatIRCMsg(chan.topic) + '
      ';var G=p?'":"";for(B=0;B<7;B++){var A=(B+n)%7;G+="=5?' class="ui-datepicker-week-end"':"")+'>'+y[A]+""}F+=G+"";G=this._getDaysInMonth(v,m);if(v==b.selectedYear&&m==b.selectedMonth)b.selectedDay=Math.min(b.selectedDay, -G);B=(this._getFirstDayOfMonth(v,m)-n+7)%7;G=Math.ceil((B+G)/7);this.maxRows=G=q?this.maxRows>G?this.maxRows:G:G;A=this._daylightSavingAdjust(new Date(v,m,1-B));for(var R=0;R";var S=!p?"":'";for(B=0;B<7;B++){var M=z?z.apply(b.input?b.input[0]:null,[A]):[true,""],K=A.getMonth()!=m,O=K&&!N||!M[0]||r&&Au;S+='";A.setDate(A.getDate()+1);A=this._daylightSavingAdjust(A)}F+=S+""}m++;if(m>11){m=0;v++}F+="
      '+this._get(b,"weekHeader")+"
      '+this._get(b,"calculateWeek")(A)+""+(K&&!I?" ":O?''+ -A.getDate()+"":''+A.getDate()+"")+"
      "+(q?""+(k[0]>0&&L==k[1]-1?'
      ':""):"");P+=F}D+=P}D+=l+(a.browser.msie&&parseInt(a.browser.version,10)<7&&!b.inline?'': -"");b._keyEvent=false;return D},_generateMonthYearHeader:function(b,f,j,l,o,n,k,m){var p=this._get(b,"changeMonth"),q=this._get(b,"changeYear"),s=this._get(b,"showMonthAfterYear"),r='
      ',u="";if(n||!p)u+=''+k[f]+"";else{k=l&&l.getFullYear()==j;var v=o&&o.getFullYear()==j;u+='"}s||(r+=u+(n||!(p&&q)?" ":""));if(!b.yearshtml){b.yearshtml="";if(n||!q)r+=''+j+"";else{m=this._get(b,"yearRange").split(":");var x=(new Date).getFullYear();k=function(y){y=y.match(/c[+-].*/)?j+parseInt(y.substring(1),10):y.match(/[+-].*/)?x+parseInt(y,10):parseInt(y,10);return isNaN(y)?x:y};f=k(m[0]);m=Math.max(f,k(m[1]||""));f=l?Math.max(f, -l.getFullYear()):f;m=o?Math.min(m,o.getFullYear()):m;for(b.yearshtml+='";r+=b.yearshtml;b.yearshtml=null}}r+=this._get(b,"yearSuffix");if(s)r+=(n||!(p&&q)?" ":"")+u;r+="
      ";return r},_adjustInstDate:function(b,f,j){var l=b.drawYear+(j=="Y"?f:0),o=b.drawMonth+ -(j=="M"?f:0);f=Math.min(b.selectedDay,this._getDaysInMonth(l,o))+(j=="D"?f:0);l=this._restrictMinMax(b,this._daylightSavingAdjust(new Date(l,o,f)));b.selectedDay=l.getDate();b.drawMonth=b.selectedMonth=l.getMonth();b.drawYear=b.selectedYear=l.getFullYear();if(j=="M"||j=="Y")this._notifyChange(b)},_restrictMinMax:function(b,f){var j=this._getMinMaxDate(b,"min");b=this._getMinMaxDate(b,"max");f=j&&fb?b:f},_notifyChange:function(b){var f=this._get(b,"onChangeMonthYear");if(f)f.apply(b.input? -b.input[0]:null,[b.selectedYear,b.selectedMonth+1,b])},_getNumberOfMonths:function(b){b=this._get(b,"numberOfMonths");return b==null?[1,1]:typeof b=="number"?[1,b]:b},_getMinMaxDate:function(b,f){return this._determineDate(b,this._get(b,f+"Date"),null)},_getDaysInMonth:function(b,f){return 32-this._daylightSavingAdjust(new Date(b,f,32)).getDate()},_getFirstDayOfMonth:function(b,f){return(new Date(b,f,1)).getDay()},_canAdjustMonth:function(b,f,j,l){var o=this._getNumberOfMonths(b);j=this._daylightSavingAdjust(new Date(j, -l+(f<0?f:o[0]*o[1]),1));f<0&&j.setDate(this._getDaysInMonth(j.getFullYear(),j.getMonth()));return this._isInRange(b,j)},_isInRange:function(b,f){var j=this._getMinMaxDate(b,"min");b=this._getMinMaxDate(b,"max");return(!j||f.getTime()>=j.getTime())&&(!b||f.getTime()<=b.getTime())},_getFormatConfig:function(b){var f=this._get(b,"shortYearCutoff");f=typeof f!="string"?f:(new Date).getFullYear()%100+parseInt(f,10);return{shortYearCutoff:f,dayNamesShort:this._get(b,"dayNamesShort"),dayNames:this._get(b, -"dayNames"),monthNamesShort:this._get(b,"monthNamesShort"),monthNames:this._get(b,"monthNames")}},_formatDate:function(b,f,j,l){if(!f){b.currentDay=b.selectedDay;b.currentMonth=b.selectedMonth;b.currentYear=b.selectedYear}f=f?typeof f=="object"?f:this._daylightSavingAdjust(new Date(l,j,f)):this._daylightSavingAdjust(new Date(b.currentYear,b.currentMonth,b.currentDay));return this.formatDate(this._get(b,"dateFormat"),f,this._getFormatConfig(b))}});a.fn.datepicker=function(b){if(!this.length)return this; -if(!a.datepicker.initialized){a(document).mousedown(a.datepicker._checkExternalClick).find("body").append(a.datepicker.dpDiv);a.datepicker.initialized=true}var f=Array.prototype.slice.call(arguments,1);if(typeof b=="string"&&(b=="isDisabled"||b=="getDate"||b=="widget"))return a.datepicker["_"+b+"Datepicker"].apply(a.datepicker,[this[0]].concat(f));if(b=="option"&&arguments.length==2&&typeof arguments[1]=="string")return a.datepicker["_"+b+"Datepicker"].apply(a.datepicker,[this[0]].concat(f));return this.each(function(){typeof b== -"string"?a.datepicker["_"+b+"Datepicker"].apply(a.datepicker,[this].concat(f)):a.datepicker._attachDatepicker(this,b)})};a.datepicker=new c;a.datepicker.initialized=false;a.datepicker.uuid=(new Date).getTime();a.datepicker.version="1.8.16";window["DP_jQuery_"+g]=a})(jQuery); -(function(a,d){var c={buttons:true,height:true,maxHeight:true,maxWidth:true,minHeight:true,minWidth:true,width:true},e={maxHeight:true,maxWidth:true,minHeight:true,minWidth:true},h=a.attrFn||{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true,click:true};a.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false, -position:{my:"center",at:"center",collision:"fit",using:function(g){var i=a(this).css(g).offset().top;i<0&&a(this).css("top",g.top-i)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");if(typeof this.originalTitle!=="string")this.originalTitle="";this.options.title=this.options.title||this.originalTitle;var g=this,i=g.options,b=i.title||" ",f=a.ui.dialog.getTitleId(g.element),j=(g.uiDialog=a("
      ")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+ -i.dialogClass).css({zIndex:i.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(n){if(i.closeOnEscape&&!n.isDefaultPrevented()&&n.keyCode&&n.keyCode===a.ui.keyCode.ESCAPE){g.close(n);n.preventDefault()}}).attr({role:"dialog","aria-labelledby":f}).mousedown(function(n){g.moveToTop(false,n)});g.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(j);var l=(g.uiDialogTitlebar=a("
      ")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(j), -o=a('').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){o.addClass("ui-state-hover")},function(){o.removeClass("ui-state-hover")}).focus(function(){o.addClass("ui-state-focus")}).blur(function(){o.removeClass("ui-state-focus")}).click(function(n){g.close(n);return false}).appendTo(l);(g.uiDialogTitlebarCloseText=a("")).addClass("ui-icon ui-icon-closethick").text(i.closeText).appendTo(o);a("").addClass("ui-dialog-title").attr("id", -f).html(b).prependTo(l);if(a.isFunction(i.beforeclose)&&!a.isFunction(i.beforeClose))i.beforeClose=i.beforeclose;l.find("*").add(l).disableSelection();i.draggable&&a.fn.draggable&&g._makeDraggable();i.resizable&&a.fn.resizable&&g._makeResizable();g._createButtons(i.buttons);g._isOpen=false;a.fn.bgiframe&&j.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var g=this;g.overlay&&g.overlay.destroy();g.uiDialog.hide();g.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body"); -g.uiDialog.remove();g.originalTitle&&g.element.attr("title",g.originalTitle);return g},widget:function(){return this.uiDialog},close:function(g){var i=this,b,f;if(false!==i._trigger("beforeClose",g)){i.overlay&&i.overlay.destroy();i.uiDialog.unbind("keypress.ui-dialog");i._isOpen=false;if(i.options.hide)i.uiDialog.hide(i.options.hide,function(){i._trigger("close",g)});else{i.uiDialog.hide();i._trigger("close",g)}a.ui.dialog.overlay.resize();if(i.options.modal){b=0;a(".ui-dialog").each(function(){if(this!== -i.uiDialog[0]){f=a(this).css("z-index");isNaN(f)||(b=Math.max(b,f))}});a.ui.dialog.maxZ=b}return i}},isOpen:function(){return this._isOpen},moveToTop:function(g,i){var b=this,f=b.options;if(f.modal&&!g||!f.stack&&!f.modal)return b._trigger("focus",i);if(f.zIndex>a.ui.dialog.maxZ)a.ui.dialog.maxZ=f.zIndex;if(b.overlay){a.ui.dialog.maxZ+=1;b.overlay.$el.css("z-index",a.ui.dialog.overlay.maxZ=a.ui.dialog.maxZ)}g={scrollTop:b.element.scrollTop(),scrollLeft:b.element.scrollLeft()};a.ui.dialog.maxZ+=1; -b.uiDialog.css("z-index",a.ui.dialog.maxZ);b.element.attr(g);b._trigger("focus",i);return b},open:function(){if(!this._isOpen){var g=this,i=g.options,b=g.uiDialog;g.overlay=i.modal?new a.ui.dialog.overlay(g):null;g._size();g._position(i.position);b.show(i.show);g.moveToTop(true);i.modal&&b.bind("keypress.ui-dialog",function(f){if(f.keyCode===a.ui.keyCode.TAB){var j=a(":tabbable",this),l=j.filter(":first");j=j.filter(":last");if(f.target===j[0]&&!f.shiftKey){l.focus(1);return false}else if(f.target=== -l[0]&&f.shiftKey){j.focus(1);return false}}});a(g.element.find(":tabbable").get().concat(b.find(".ui-dialog-buttonpane :tabbable").get().concat(b.get()))).eq(0).focus();g._isOpen=true;g._trigger("open");return g}},_createButtons:function(g){var i=this,b=false,f=a("
      ").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),j=a("
      ").addClass("ui-dialog-buttonset").appendTo(f);i.uiDialog.find(".ui-dialog-buttonpane").remove();typeof g==="object"&&g!==null&&a.each(g, -function(){return!(b=true)});if(b){a.each(g,function(l,o){o=a.isFunction(o)?{click:o,text:l}:o;var n=a('').click(function(){o.click.apply(i.element[0],arguments)}).appendTo(j);a.each(o,function(k,m){if(k!=="click")k in h?n[k](m):n.attr(k,m)});a.fn.button&&n.button()});f.appendTo(i.uiDialog)}},_makeDraggable:function(){function g(l){return{position:l.position,offset:l.offset}}var i=this,b=i.options,f=a(document),j;i.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close", -handle:".ui-dialog-titlebar",containment:"document",start:function(l,o){j=b.height==="auto"?"auto":a(this).height();a(this).height(a(this).height()).addClass("ui-dialog-dragging");i._trigger("dragStart",l,g(o))},drag:function(l,o){i._trigger("drag",l,g(o))},stop:function(l,o){b.position=[o.position.left-f.scrollLeft(),o.position.top-f.scrollTop()];a(this).removeClass("ui-dialog-dragging").height(j);i._trigger("dragStop",l,g(o));a.ui.dialog.overlay.resize()}})},_makeResizable:function(g){function i(l){return{originalPosition:l.originalPosition, -originalSize:l.originalSize,position:l.position,size:l.size}}g=g===d?this.options.resizable:g;var b=this,f=b.options,j=b.uiDialog.css("position");g=typeof g==="string"?g:"n,e,s,w,se,sw,ne,nw";b.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:b.element,maxWidth:f.maxWidth,maxHeight:f.maxHeight,minWidth:f.minWidth,minHeight:b._minHeight(),handles:g,start:function(l,o){a(this).addClass("ui-dialog-resizing");b._trigger("resizeStart",l,i(o))},resize:function(l,o){b._trigger("resize", -l,i(o))},stop:function(l,o){a(this).removeClass("ui-dialog-resizing");f.height=a(this).height();f.width=a(this).width();b._trigger("resizeStop",l,i(o));a.ui.dialog.overlay.resize()}}).css("position",j).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var g=this.options;return g.height==="auto"?g.minHeight:Math.min(g.minHeight,g.height)},_position:function(g){var i=[],b=[0,0],f;if(g){if(typeof g==="string"||typeof g==="object"&&"0"in g){i=g.split?g.split(" "): -[g[0],g[1]];if(i.length===1)i[1]=i[0];a.each(["left","top"],function(j,l){if(+i[j]===i[j]){b[j]=i[j];i[j]=l}});g={my:i.join(" "),at:i.join(" "),offset:b.join(" ")}}g=a.extend({},a.ui.dialog.prototype.options.position,g)}else g=a.ui.dialog.prototype.options.position;(f=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(a.extend({of:window},g));f||this.uiDialog.hide()},_setOptions:function(g){var i=this,b={},f=false;a.each(g,function(j,l){i._setOption(j,l); -if(j in c)f=true;if(j in e)b[j]=l});f&&this._size();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",b)},_setOption:function(g,i){var b=this,f=b.uiDialog;switch(g){case "beforeclose":g="beforeClose";break;case "buttons":b._createButtons(i);break;case "closeText":b.uiDialogTitlebarCloseText.text(""+i);break;case "dialogClass":f.removeClass(b.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+i);break;case "disabled":i?f.addClass("ui-dialog-disabled"): -f.removeClass("ui-dialog-disabled");break;case "draggable":var j=f.is(":data(draggable)");j&&!i&&f.draggable("destroy");!j&&i&&b._makeDraggable();break;case "position":b._position(i);break;case "resizable":(j=f.is(":data(resizable)"))&&!i&&f.resizable("destroy");j&&typeof i==="string"&&f.resizable("option","handles",i);!j&&i!==false&&b._makeResizable(i);break;case "title":a(".ui-dialog-title",b.uiDialogTitlebar).html(""+(i||" "));break}a.Widget.prototype._setOption.apply(b,arguments)},_size:function(){var g= -this.options,i,b,f=this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0});if(g.minWidth>g.width)g.width=g.minWidth;i=this.uiDialog.css({height:"auto",width:g.width}).height();b=Math.max(0,g.minHeight-i);if(g.height==="auto")if(a.support.minHeight)this.element.css({minHeight:b,height:"auto"});else{this.uiDialog.show();g=this.element.css("height","auto").height();f||this.uiDialog.hide();this.element.height(Math.max(g,b))}else this.element.height(Math.max(g.height- -i,0));this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}});a.extend(a.ui.dialog,{version:"1.8.16",uuid:0,maxZ:0,getTitleId:function(g){g=g.attr("id");if(!g){this.uuid+=1;g=this.uuid}return"ui-dialog-title-"+g},overlay:function(g){this.$el=a.ui.dialog.overlay.create(g)}});a.extend(a.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:a.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(g){return g+".dialog-overlay"}).join(" "), -create:function(g){if(this.instances.length===0){setTimeout(function(){a.ui.dialog.overlay.instances.length&&a(document).bind(a.ui.dialog.overlay.events,function(b){if(a(b.target).zIndex()").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),height:this.height()});a.fn.bgiframe&&i.bgiframe();this.instances.push(i);return i},destroy:function(g){var i=a.inArray(g,this.instances);i!=-1&&this.oldInstances.push(this.instances.splice(i,1)[0]);this.instances.length===0&&a([document,window]).unbind(".dialog-overlay");g.remove();var b=0;a.each(this.instances,function(){b=Math.max(b,this.css("z-index"))});this.maxZ=b},height:function(){var g,i;if(a.browser.msie&& -a.browser.version<7){g=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);i=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return g0?g.left-b:Math.max(g.left-i.collisionPosition.left,g.left)},top:function(g,i){var b=a(window);b=i.collisionPosition.top+i.collisionHeight-b.height()-b.scrollTop();g.top=b>0?g.top-b:Math.max(g.top-i.collisionPosition.top,g.top)}},flip:{left:function(g,i){if(i.at[0]!=="center"){var b=a(window);b=i.collisionPosition.left+i.collisionWidth-b.width()-b.scrollLeft();var f=i.my[0]==="left"?-i.elemWidth:i.my[0]==="right"?i.elemWidth:0,j=i.at[0]==="left"?i.targetWidth:-i.targetWidth,l=-2*i.offset[0];g.left+= -i.collisionPosition.left<0?f+j+l:b>0?f+j+l:0}},top:function(g,i){if(i.at[1]!=="center"){var b=a(window);b=i.collisionPosition.top+i.collisionHeight-b.height()-b.scrollTop();var f=i.my[1]==="top"?-i.elemHeight:i.my[1]==="bottom"?i.elemHeight:0,j=i.at[1]==="top"?i.targetHeight:-i.targetHeight,l=-2*i.offset[1];g.top+=i.collisionPosition.top<0?f+j+l:b>0?f+j+l:0}}}};if(!a.offset.setOffset){a.offset.setOffset=function(g,i){if(/static/.test(a.curCSS(g,"position")))g.style.position="relative";var b=a(g), -f=b.offset(),j=parseInt(a.curCSS(g,"top",true),10)||0,l=parseInt(a.curCSS(g,"left",true),10)||0;f={top:i.top-f.top+j,left:i.left-f.left+l};"using"in i?i.using.call(g,f):b.css(f)};a.fn.offset=function(g){var i=this[0];if(!i||!i.ownerDocument)return null;if(g)return this.each(function(){a.offset.setOffset(this,g)});return h.call(this)}}})(jQuery); -(function(a,d){a.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()});this.valueDiv=a("
      ").appendTo(this.element);this.oldValue=this._value();this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"); -this.valueDiv.remove();a.Widget.prototype.destroy.apply(this,arguments)},value:function(c){if(c===d)return this._value();this._setOption("value",c);return this},_setOption:function(c,e){if(c==="value"){this.options.value=e;this._refreshValue();this._value()===this.options.max&&this._trigger("complete")}a.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var c=this.options.value;if(typeof c!=="number")c=0;return Math.min(this.options.max,Math.max(this.min,c))},_percentage:function(){return 100* -this._value()/this.options.max},_refreshValue:function(){var c=this.value(),e=this._percentage();if(this.oldValue!==c){this.oldValue=c;this._trigger("change")}this.valueDiv.toggle(c>this.min).toggleClass("ui-corner-right",c===this.options.max).width(e.toFixed(0)+"%");this.element.attr("aria-valuenow",c)}});a.extend(a.ui.progressbar,{version:"1.8.16"})})(jQuery); -(function(a){a.widget("ui.slider",a.ui.mouse,{widgetEventPrefix:"slide",options:{animate:false,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null},_create:function(){var d=this,c=this.options,e=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),h=c.values&&c.values.length||1,g=[];this._mouseSliding=this._keySliding=false;this._animateOff=true;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+ -this.orientation+" ui-widget ui-widget-content ui-corner-all"+(c.disabled?" ui-slider-disabled ui-disabled":""));this.range=a([]);if(c.range){if(c.range===true){if(!c.values)c.values=[this._valueMin(),this._valueMin()];if(c.values.length&&c.values.length!==2)c.values=[c.values[0],c.values[0]]}this.range=a("
      ").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(c.range==="min"||c.range==="max"?" ui-slider-range-"+c.range:""))}for(var i=e.length;i"); -this.handles=e.add(a(g.join("")).appendTo(d.element));this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(b){b.preventDefault()}).hover(function(){c.disabled||a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")}).focus(function(){if(c.disabled)a(this).blur();else{a(".ui-slider .ui-state-focus").removeClass("ui-state-focus");a(this).addClass("ui-state-focus")}}).blur(function(){a(this).removeClass("ui-state-focus")});this.handles.each(function(b){a(this).data("index.ui-slider-handle", -b)});this.handles.keydown(function(b){var f=true,j=a(this).data("index.ui-slider-handle"),l,o,n;if(!d.options.disabled){switch(b.keyCode){case a.ui.keyCode.HOME:case a.ui.keyCode.END:case a.ui.keyCode.PAGE_UP:case a.ui.keyCode.PAGE_DOWN:case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:f=false;if(!d._keySliding){d._keySliding=true;a(this).addClass("ui-state-active");l=d._start(b,j);if(l===false)return}break}n=d.options.step;l=d.options.values&&d.options.values.length? -(o=d.values(j)):(o=d.value());switch(b.keyCode){case a.ui.keyCode.HOME:o=d._valueMin();break;case a.ui.keyCode.END:o=d._valueMax();break;case a.ui.keyCode.PAGE_UP:o=d._trimAlignValue(l+(d._valueMax()-d._valueMin())/5);break;case a.ui.keyCode.PAGE_DOWN:o=d._trimAlignValue(l-(d._valueMax()-d._valueMin())/5);break;case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:if(l===d._valueMax())return;o=d._trimAlignValue(l+n);break;case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:if(l===d._valueMin())return;o=d._trimAlignValue(l- -n);break}d._slide(b,j,o);return f}}).keyup(function(b){var f=a(this).data("index.ui-slider-handle");if(d._keySliding){d._keySliding=false;d._stop(b,f);d._change(b,f);a(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy(); -return this},_mouseCapture:function(d){var c=this.options,e,h,g,i,b;if(c.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();e=this._normValueFromMouse({x:d.pageX,y:d.pageY});h=this._valueMax()-this._valueMin()+1;i=this;this.handles.each(function(f){var j=Math.abs(e-i.values(f));if(h>j){h=j;g=a(this);b=f}});if(c.range===true&&this.values(1)===c.min){b+=1;g=a(this.handles[b])}if(this._start(d,b)===false)return false; -this._mouseSliding=true;i._handleIndex=b;g.addClass("ui-state-active").focus();c=g.offset();this._clickOffset=!a(d.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:d.pageX-c.left-g.width()/2,top:d.pageY-c.top-g.height()/2-(parseInt(g.css("borderTopWidth"),10)||0)-(parseInt(g.css("borderBottomWidth"),10)||0)+(parseInt(g.css("marginTop"),10)||0)};this.handles.hasClass("ui-state-hover")||this._slide(d,b,e);return this._animateOff=true},_mouseStart:function(){return true},_mouseDrag:function(d){var c= -this._normValueFromMouse({x:d.pageX,y:d.pageY});this._slide(d,this._handleIndex,c);return false},_mouseStop:function(d){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(d,this._handleIndex);this._change(d,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(d){var c;if(this.orientation==="horizontal"){c= -this.elementSize.width;d=d.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{c=this.elementSize.height;d=d.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}c=d/c;if(c>1)c=1;if(c<0)c=0;if(this.orientation==="vertical")c=1-c;d=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+c*d)},_start:function(d,c){var e={handle:this.handles[c],value:this.value()};if(this.options.values&&this.options.values.length){e.value=this.values(c); -e.values=this.values()}return this._trigger("start",d,e)},_slide:function(d,c,e){var h;if(this.options.values&&this.options.values.length){h=this.values(c?0:1);if(this.options.values.length===2&&this.options.range===true&&(c===0&&e>h||c===1&&e1){this.options.values[d]=this._trimAlignValue(c);this._refreshValue();this._change(null,d)}else if(arguments.length)if(a.isArray(arguments[0])){e=this.options.values;h=arguments[0];for(g=0;g=this._valueMax())return this._valueMax();var c=this.options.step>0?this.options.step:1,e=(d-this._valueMin())%c;d=d-e;if(Math.abs(e)*2>=c)d+=e>0?c:-c;return parseFloat(d.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var d= -this.options.range,c=this.options,e=this,h=!this._animateOff?c.animate:false,g,i={},b,f,j,l;if(this.options.values&&this.options.values.length)this.handles.each(function(o){g=(e.values(o)-e._valueMin())/(e._valueMax()-e._valueMin())*100;i[e.orientation==="horizontal"?"left":"bottom"]=g+"%";a(this).stop(1,1)[h?"animate":"css"](i,c.animate);if(e.options.range===true)if(e.orientation==="horizontal"){if(o===0)e.range.stop(1,1)[h?"animate":"css"]({left:g+"%"},c.animate);if(o===1)e.range[h?"animate":"css"]({width:g- -b+"%"},{queue:false,duration:c.animate})}else{if(o===0)e.range.stop(1,1)[h?"animate":"css"]({bottom:g+"%"},c.animate);if(o===1)e.range[h?"animate":"css"]({height:g-b+"%"},{queue:false,duration:c.animate})}b=g});else{f=this.value();j=this._valueMin();l=this._valueMax();g=l!==j?(f-j)/(l-j)*100:0;i[e.orientation==="horizontal"?"left":"bottom"]=g+"%";this.handle.stop(1,1)[h?"animate":"css"](i,c.animate);if(d==="min"&&this.orientation==="horizontal")this.range.stop(1,1)[h?"animate":"css"]({width:g+"%"}, -c.animate);if(d==="max"&&this.orientation==="horizontal")this.range[h?"animate":"css"]({width:100-g+"%"},{queue:false,duration:c.animate});if(d==="min"&&this.orientation==="vertical")this.range.stop(1,1)[h?"animate":"css"]({height:g+"%"},c.animate);if(d==="max"&&this.orientation==="vertical")this.range[h?"animate":"css"]({height:100-g+"%"},{queue:false,duration:c.animate})}}});a.extend(a.ui.slider,{version:"1.8.16"})})(jQuery); -(function(a,d){function c(){return++h}function e(){return++g}var h=0,g=0;a.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"
      ",remove:null,select:null,show:null,spinner:"Loading…",tabTemplate:"
    • #{label}
    • "},_create:function(){this._tabify(true)},_setOption:function(i,b){if(i=="selected")this.options.collapsible&& -b==this.options.selected||this.select(b);else{this.options[i]=b;this._tabify()}},_tabId:function(i){return i.title&&i.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+c()},_sanitizeSelector:function(i){return i.replace(/:/g,"\\:")},_cookie:function(){var i=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+e());return a.cookie.apply(null,[i].concat(a.makeArray(arguments)))},_ui:function(i,b){return{tab:i,panel:b,index:this.anchors.index(i)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var i= -a(this);i.html(i.data("label.tabs")).removeData("label.tabs")})},_tabify:function(i){function b(r,u){r.css("display","");!a.support.opacity&&u.opacity&&r[0].style.removeAttribute("filter")}var f=this,j=this.options,l=/^#.+/;this.list=this.element.find("ol,ul").eq(0);this.lis=a(" > li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return a("a",this)[0]});this.panels=a([]);this.anchors.each(function(r,u){var v=a(u).attr("href"),w=v.split("#")[0],x;if(w&&(w===location.toString().split("#")[0]|| -(x=a("base")[0])&&w===x.href)){v=u.hash;u.href=v}if(l.test(v))f.panels=f.panels.add(f.element.find(f._sanitizeSelector(v)));else if(v&&v!=="#"){a.data(u,"href.tabs",v);a.data(u,"load.tabs",v.replace(/#.*$/,""));v=f._tabId(u);u.href="#"+v;u=f.element.find("#"+v);if(!u.length){u=a(j.panelTemplate).attr("id",v).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(f.panels[r-1]||f.list);u.data("destroy.tabs",true)}f.panels=f.panels.add(u)}else j.disabled.push(r)});if(i){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all"); -this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(j.selected===d){location.hash&&this.anchors.each(function(r,u){if(u.hash==location.hash){j.selected=r;return false}});if(typeof j.selected!=="number"&&j.cookie)j.selected=parseInt(f._cookie(),10);if(typeof j.selected!=="number"&&this.lis.filter(".ui-tabs-selected").length)j.selected= -this.lis.index(this.lis.filter(".ui-tabs-selected"));j.selected=j.selected||(this.lis.length?0:-1)}else if(j.selected===null)j.selected=-1;j.selected=j.selected>=0&&this.anchors[j.selected]||j.selected<0?j.selected:0;j.disabled=a.unique(j.disabled.concat(a.map(this.lis.filter(".ui-state-disabled"),function(r){return f.lis.index(r)}))).sort();a.inArray(j.selected,j.disabled)!=-1&&j.disabled.splice(a.inArray(j.selected,j.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active"); -if(j.selected>=0&&this.anchors.length){f.element.find(f._sanitizeSelector(f.anchors[j.selected].hash)).removeClass("ui-tabs-hide");this.lis.eq(j.selected).addClass("ui-tabs-selected ui-state-active");f.element.queue("tabs",function(){f._trigger("show",null,f._ui(f.anchors[j.selected],f.element.find(f._sanitizeSelector(f.anchors[j.selected].hash))[0]))});this.load(j.selected)}a(window).bind("unload",function(){f.lis.add(f.anchors).unbind(".tabs");f.lis=f.anchors=f.panels=null})}else j.selected=this.lis.index(this.lis.filter(".ui-tabs-selected")); -this.element[j.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");j.cookie&&this._cookie(j.selected,j.cookie);i=0;for(var o;o=this.lis[i];i++)a(o)[a.inArray(i,j.disabled)!=-1&&!a(o).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");j.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(j.event!=="mouseover"){var n=function(r,u){u.is(":not(.ui-state-disabled)")&&u.addClass("ui-state-"+r)},k=function(r,u){u.removeClass("ui-state-"+ -r)};this.lis.bind("mouseover.tabs",function(){n("hover",a(this))});this.lis.bind("mouseout.tabs",function(){k("hover",a(this))});this.anchors.bind("focus.tabs",function(){n("focus",a(this).closest("li"))});this.anchors.bind("blur.tabs",function(){k("focus",a(this).closest("li"))})}var m,p;if(j.fx)if(a.isArray(j.fx)){m=j.fx[0];p=j.fx[1]}else m=p=j.fx;var q=p?function(r,u){a(r).closest("li").addClass("ui-tabs-selected ui-state-active");u.hide().removeClass("ui-tabs-hide").animate(p,p.duration||"normal", -function(){b(u,p);f._trigger("show",null,f._ui(r,u[0]))})}:function(r,u){a(r).closest("li").addClass("ui-tabs-selected ui-state-active");u.removeClass("ui-tabs-hide");f._trigger("show",null,f._ui(r,u[0]))},s=m?function(r,u){u.animate(m,m.duration||"normal",function(){f.lis.removeClass("ui-tabs-selected ui-state-active");u.addClass("ui-tabs-hide");b(u,m);f.element.dequeue("tabs")})}:function(r,u){f.lis.removeClass("ui-tabs-selected ui-state-active");u.addClass("ui-tabs-hide");f.element.dequeue("tabs")}; -this.anchors.bind(j.event+".tabs",function(){var r=this,u=a(r).closest("li"),v=f.panels.filter(":not(.ui-tabs-hide)"),w=f.element.find(f._sanitizeSelector(r.hash));if(u.hasClass("ui-tabs-selected")&&!j.collapsible||u.hasClass("ui-state-disabled")||u.hasClass("ui-state-processing")||f.panels.filter(":animated").length||f._trigger("select",null,f._ui(this,w[0]))===false){this.blur();return false}j.selected=f.anchors.index(this);f.abort();if(j.collapsible)if(u.hasClass("ui-tabs-selected")){j.selected= --1;j.cookie&&f._cookie(j.selected,j.cookie);f.element.queue("tabs",function(){s(r,v)}).dequeue("tabs");this.blur();return false}else if(!v.length){j.cookie&&f._cookie(j.selected,j.cookie);f.element.queue("tabs",function(){q(r,w)});f.load(f.anchors.index(this));this.blur();return false}j.cookie&&f._cookie(j.selected,j.cookie);if(w.length){v.length&&f.element.queue("tabs",function(){s(r,v)});f.element.queue("tabs",function(){q(r,w)});f.load(f.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier."; -a.browser.msie&&this.blur()});this.anchors.bind("click.tabs",function(){return false})},_getIndex:function(i){if(typeof i=="string")i=this.anchors.index(this.anchors.filter("[href$="+i+"]"));return i},destroy:function(){var i=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var b= -a.data(this,"href.tabs");if(b)this.href=b;var f=a(this).unbind(".tabs");a.each(["href","load","cache"],function(j,l){f.removeData(l+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){a.data(this,"destroy.tabs")?a(this).remove():a(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});i.cookie&&this._cookie(null,i.cookie);return this},add:function(i, -b,f){if(f===d)f=this.anchors.length;var j=this,l=this.options;b=a(l.tabTemplate.replace(/#\{href\}/g,i).replace(/#\{label\}/g,b));i=!i.indexOf("#")?i.replace("#",""):this._tabId(a("a",b)[0]);b.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var o=j.element.find("#"+i);o.length||(o=a(l.panelTemplate).attr("id",i).data("destroy.tabs",true));o.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(f>=this.lis.length){b.appendTo(this.list);o.appendTo(this.list[0].parentNode)}else{b.insertBefore(this.lis[f]); -o.insertBefore(this.panels[f])}l.disabled=a.map(l.disabled,function(n){return n>=f?++n:n});this._tabify();if(this.anchors.length==1){l.selected=0;b.addClass("ui-tabs-selected ui-state-active");o.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){j._trigger("show",null,j._ui(j.anchors[0],j.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[f],this.panels[f]));return this},remove:function(i){i=this._getIndex(i);var b=this.options,f=this.lis.eq(i).remove(),j=this.panels.eq(i).remove(); -if(f.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(i+(i+1=i?--l:l});this._tabify();this._trigger("remove",null,this._ui(f.find("a")[0],j[0]));return this},enable:function(i){i=this._getIndex(i);var b=this.options;if(a.inArray(i,b.disabled)!=-1){this.lis.eq(i).removeClass("ui-state-disabled");b.disabled=a.grep(b.disabled,function(f){return f!=i});this._trigger("enable",null, -this._ui(this.anchors[i],this.panels[i]));return this}},disable:function(i){i=this._getIndex(i);var b=this.options;if(i!=b.selected){this.lis.eq(i).addClass("ui-state-disabled");b.disabled.push(i);b.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[i],this.panels[i]))}return this},select:function(i){i=this._getIndex(i);if(i==-1)if(this.options.collapsible&&this.options.selected!=-1)i=this.options.selected;else return this;this.anchors.eq(i).trigger(this.options.event+".tabs");return this}, -load:function(i){i=this._getIndex(i);var b=this,f=this.options,j=this.anchors.eq(i)[0],l=a.data(j,"load.tabs");this.abort();if(!l||this.element.queue("tabs").length!==0&&a.data(j,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(i).addClass("ui-state-processing");if(f.spinner){var o=a("span",j);o.data("label.tabs",o.html()).html(f.spinner)}this.xhr=a.ajax(a.extend({},f.ajaxOptions,{url:l,success:function(n,k){b.element.find(b._sanitizeSelector(j.hash)).html(n);b._cleanup();f.cache&&a.data(j, -"cache.tabs",true);b._trigger("load",null,b._ui(b.anchors[i],b.panels[i]));try{f.ajaxOptions.success(n,k)}catch(m){}},error:function(n,k){b._cleanup();b._trigger("load",null,b._ui(b.anchors[i],b.panels[i]));try{f.ajaxOptions.error(n,k,i,j)}catch(m){}}}));b.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this}, -url:function(i,b){this.anchors.eq(i).removeData("cache.tabs").data("load.tabs",b);return this},length:function(){return this.anchors.length}});a.extend(a.ui.tabs,{version:"1.8.16"});a.extend(a.ui.tabs.prototype,{rotation:null,rotate:function(i,b){var f=this,j=this.options,l=f._rotate||(f._rotate=function(o){clearTimeout(f.rotation);f.rotation=setTimeout(function(){var n=j.selected;f.select(++n").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"":"")+""),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cq(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cp(){cn=b}function co(){setTimeout(cp,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bv(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bl(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bd,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bk(a){f.nodeName(a,"input")?bj(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bj)}function bj(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bi(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bh(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bg(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i=0===c})}function U(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function M(a,b){return(a&&a!=="*"?a+".":"")+b.replace(y,"`").replace(z,"&")}function L(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;ic)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function J(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function D(){return!0}function C(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function K(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(K,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z]|[0-9])/ig,x=/^-ms-/,y=function(a,b){return(b+"").toUpperCase()},z=d.userAgent,A,B,C,D=Object.prototype.toString,E=Object.prototype.hasOwnProperty,F=Array.prototype.push,G=Array.prototype.slice,H=String.prototype.trim,I=Array.prototype.indexOf,J={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.4",length:0,size:function(){return this.length},toArray:function(){return G.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?F.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),B.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(G.apply(this,arguments),"slice",G.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:F,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;B.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!B){B=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",C,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",C),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&K()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):J[D.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!E.call(a,"constructor")&&!E.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||E.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(x,"ms-").replace(w,y)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c
      a",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},m&&f.extend(p,{position:"absolute",left:"-1000px",top:"-1000px"});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="
      ",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="
      t
      ",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i=f.expando,j=typeof c=="string",k=a.nodeType,l=k?f.cache:a,m=k?a[f.expando]:a[f.expando]&&f.expando;if((!m||e&&m&&l[m]&&!l[m][i])&&j&&d===b)return;m||(k?a[f.expando]=m=++f.uuid:m=f.expando),l[m]||(l[m]={},k||(l[m].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?l[m][i]=f.extend(l[m][i],c):l[m]=f.extend(l[m],c);g=l[m],e&&(g[i]||(g[i]={}),g=g[i]),d!==b&&(g[f.camelCase(c)]=d);if(c==="events"&&!g[c])return g[i]&&g[i].events;j?(h=g[c],h==null&&(h=g[f.camelCase(c)])):h=g;return h}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e=f.expando,g=a.nodeType,h=g?f.cache:a,i=g?a[f.expando]:f.expando;if(!h[i])return;if(b){d=c?h[i][e]:h[i];if(d){d[b]||(b=f.camelCase(b)),delete d[b];if(!l(d))return}}if(c){delete h[i][e];if(!l(h[i]))return}var j=h[i][e];f.support.deleteExpando||!h.setInterval?delete h[i]:h[i]=null,j?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=j):g&&(f.support.deleteExpando?delete a[f.expando]:a.removeAttribute?a.removeAttribute(f.expando):a[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=v:u&&(i=u)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.attr(a,b,""),a.removeAttribute(b),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(u&&f.nodeName(a,"button"))return u.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(u&&f.nodeName(a,"button"))return u.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==null?g:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabIndex=f.propHooks.tabIndex,v={get:function(a,c){var d;return f.prop(a,c)===!0||(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},f.support.getSetAttribute||(u=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var w=/\.(.*)$/,x=/^(?:textarea|input|select)$/i,y=/\./g,z=/ /g,A=/[^\w\s.|`]/g,B=function(a){return a.replace(A,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=C;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=C);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),B).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},I=function(c){var d=c.target,e,g;if(!!x.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=H(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:I,beforedeactivate:I,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&I.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&I.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",H(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in G)f.event.add(this,c+".specialChange",G[c]);return x.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return x.test(this.nodeName)}},G=f.event.special.change.filters,G.focus=G.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

      ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
      ";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g0)for(h=g;h0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=S.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(U(c[0])||U(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=R.call(arguments);N.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!T[a]?f.unique(e):e,(this.length>1||P.test(d))&&O.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
      ","
      "],thead:[1,"","
      "],tr:[2,"","
      "],td:[3,"","
      "],col:[2,"","
      "],area:[1,"",""],_default:[0,"",""]};be.optgroup=be.option,be.tbody=be.tfoot=be.colgroup=be.caption=be.thead,be.th=be.td,f.support.htmlSerialize||(be._default=[1,"div
      ","
      "]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!be[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bh(a,d),e=bi(a),g=bi(d);for(h=0;e[h];++h)g[h]&&bh(e[h],g[h])}if(b){bg(a,d);if(c){e=bi(a),g=bi(d);for(h=0;e[h];++h)bg(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=be[l]||be._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bn.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bm,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bm.test(g)?g.replace(bm,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bv(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bw=function(a,c){var d,e,g;c=c.replace(bo,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bx=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bp.test(d)&&bq.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bv=bw||bx,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bz=/%20/g,bA=/\[\]$/,bB=/\r?\n/g,bC=/#.*$/,bD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bE=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bF=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bG=/^(?:GET|HEAD)$/,bH=/^\/\//,bI=/\?/,bJ=/)<[^<]*)*<\/script>/gi,bK=/^(?:select|textarea)/i,bL=/\s+/,bM=/([?&])_=[^&]*/,bN=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bO=f.fn.load,bP={},bQ={},bR,bS,bT=["*/"]+["*"];try{bR=e.href}catch(bU){bR=c.createElement("a"),bR.href="",bR=bR.href}bS=bN.exec(bR.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bO)return bO.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
      ").append(c.replace(bJ,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bK.test(this.nodeName)||bE.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bB,"\r\n")}}):{name:b.name,value:c.replace(bB,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?bX(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),bX(a,b);return a},ajaxSettings:{url:bR,isLocal:bF.test(bS[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bT},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bV(bP),ajaxTransport:bV(bQ),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?bZ(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=b$(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bD.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bC,"").replace(bH,bS[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bL),d.crossDomain==null&&(r=bN.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bS[1]&&r[2]==bS[2]&&(r[3]||(r[1]==="http:"?80:443))==(bS[3]||(bS[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bW(bP,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bG.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bI.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bM,"$1_="+x);d.url=y+(y===d.url?(bI.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bT+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bW(bQ,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){s<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bY(g,a[g],c,e);return d.join("&").replace(bz,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ca.test(b.url)||e&&ca.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ca,l),b.url===j&&(e&&(k=k.replace(ca,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cb&&delete cd[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cq("show",3),a,b,c);for(var g=0,h=this.length;g=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b
      ";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=ct.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!ct.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cu(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cu(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a&&a.style?parseFloat(f.css(a,d,"padding")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNaN(j)?i:j}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window); diff --git a/client/js/jquery.json-2.2.min.js b/client/js/jquery.json-2.2.min.js deleted file mode 100755 index bad4a0a..0000000 --- a/client/js/jquery.json-2.2.min.js +++ /dev/null @@ -1,31 +0,0 @@ - -(function($){$.toJSON=function(o) -{if(typeof(JSON)=='object'&&JSON.stringify) -return JSON.stringify(o);var type=typeof(o);if(o===null) -return"null";if(type=="undefined") -return undefined;if(type=="number"||type=="boolean") -return o+"";if(type=="string") -return $.quoteString(o);if(type=='object') -{if(typeof o.toJSON=="function") -return $.toJSON(o.toJSON());if(o.constructor===Date) -{var month=o.getUTCMonth()+1;if(month<10)month='0'+month;var day=o.getUTCDate();if(day<10)day='0'+day;var year=o.getUTCFullYear();var hours=o.getUTCHours();if(hours<10)hours='0'+hours;var minutes=o.getUTCMinutes();if(minutes<10)minutes='0'+minutes;var seconds=o.getUTCSeconds();if(seconds<10)seconds='0'+seconds;var milli=o.getUTCMilliseconds();if(milli<100)milli='0'+milli;if(milli<10)milli='0'+milli;return'"'+year+'-'+month+'-'+day+'T'+ -hours+':'+minutes+':'+seconds+'.'+milli+'Z"';} -if(o.constructor===Array) -{var ret=[];for(var i=0;i - - - - - - -KiwiIRC - - - - - - - - - - - - -
      - -
        -
        - -
        - -
        - -
        - - \ No newline at end of file diff --git a/client/js/mobile.js b/client/js/mobile.js deleted file mode 100755 index bcb70b2..0000000 --- a/client/js/mobile.js +++ /dev/null @@ -1,421 +0,0 @@ -if (typeof String.prototype.lpad === 'undefined') { - String.prototype.lpad = function (length, character) { - var padding = "", - i; - for (i = 0; i < length; i++) { - padding += character; - } - return (padding + this).slice(-length); - }; -} - - -var kiwi = {}; -kiwi.objects = {}; -kiwi.ui = {}; -kiwi.events = {}; -kiwi.gateway = {}; - - -/** - * Any user interface methods - */ -kiwi.ui = { - views: {}, - current_view: null, - - doLayout: function () { - var msgs = $('#msgs'); - msgs.css('padding-top', $('#hover_top').outerHeight()); - msgs.css('padding-bottom', $('#hover_bottom').outerHeight()); - }, - - - formatIRCMsg: function (msg) { - var re, next; - - if ((!msg) || (typeof msg !== 'string')) { - return ''; - } - - // bold - if (msg.indexOf(String.fromCharCode(2)) !== -1) { - next = ''; - while (msg.indexOf(String.fromCharCode(2)) !== -1) { - msg = msg.replace(String.fromCharCode(2), next); - next = (next === '') ? '' : ''; - } - if (next === '') { - msg = msg + ''; - } - } - - // underline - if (msg.indexOf(String.fromCharCode(31)) !== -1) { - next = ''; - while (msg.indexOf(String.fromCharCode(31)) !== -1) { - msg = msg.replace(String.fromCharCode(31), next); - next = (next === '') ? '' : ''; - } - if (next === '') { - msg = msg + ''; - } - } - - // colour - /** - * @inner - */ - msg = (function (msg) { - var replace, colourMatch, col, i, match, to, endCol, fg, bg, str; - replace = ''; - /** - * @inner - */ - colourMatch = function (str) { - var re = /^\x03([0-9][0-5]?)(,([0-9][0-5]?))?/; - return re.exec(str); - }; - /** - * @inner - */ - col = function (num) { - switch (parseInt(num, 10)) { - case 0: - return '#FFFFFF'; - case 1: - return '#000000'; - case 2: - return '#000080'; - case 3: - return '#008000'; - case 4: - return '#FF0000'; - case 5: - return '#800040'; - case 6: - return '#800080'; - case 7: - return '#FF8040'; - case 8: - return '#FFFF00'; - case 9: - return '#80FF00'; - case 10: - return '#008080'; - case 11: - return '#00FFFF'; - case 12: - return '#0000FF'; - case 13: - return '#FF55FF'; - case 14: - return '#808080'; - case 15: - return '#C0C0C0'; - default: - return null; - } - }; - if (msg.indexOf('\x03') !== -1) { - i = msg.indexOf('\x03'); - replace = msg.substr(0, i); - while (i < msg.length) { - /** - * @inner - */ - match = colourMatch(msg.substr(i, 6)); - if (match) { - //console.log(match); - // Next colour code - to = msg.indexOf('\x03', i + 1); - endCol = msg.indexOf(String.fromCharCode(15), i + 1); - if (endCol !== -1) { - if (to === -1) { - to = endCol; - } else { - to = ((to < endCol) ? to : endCol); - } - } - if (to === -1) { - to = msg.length; - } - //console.log(i, to); - fg = col(match[1]); - bg = col(match[3]); - str = msg.substring(i + 1 + match[1].length + ((bg !== null) ? match[2].length + 1 : 0), to); - //console.log(str); - replace += '' + str + ''; - i = to; - } else { - if ((msg[i] !== '\x03') && (msg[i] !== String.fromCharCode(15))) { - replace += msg[i]; - } - i++; - } - } - return replace; - } - return msg; - }(msg)); - - return msg; - }, - - - run: function (msg) { - var parts, dest, t, pos, textRange, plugin_event, msg_sliced, tab, nick; - - if (msg.substring(0, 1) === '/') { - console.log("running " + msg); - parts = msg.split(' '); - switch (parts[0].toLowerCase()) { - case '/nick': - if (parts[1] === undefined) { - console.log("calling show nick"); - kiwi.front.ui.showChangeNick(); - } else { - console.log("sending nick"); - kiwi.gateway.nick(msg.substring(1)); - } - break; - - case '/q': - case '/query': - if (typeof parts[1] !== "undefined") { - tab = new kiwi.objects.MessageView(parts[1]); - } - break; - - case '/k': - case '/kick': - if (typeof parts[1] === 'undefined') { - return; - } - t = msg.split(' ', 3); - nick = t[1]; - kiwi.gateway.kick(Tabview.getCurrent().title, nick, t[2]); - break; - - case '/j': - case '/join': - kiwi.ui.joinChannel(parts[1]); - break; - - case '/part': - break; - - case '/quote': - kiwi.gateway.raw(msg.replace(/^\/quote /i, '')); - break; - - case '/me': - tab = kiwi.objects.getCurrent(); - kiwi.gateway.ctcp(true, 'ACTION', tab.title, msg.substring(4)); - tab.addMsg(' ', '* ' + kiwi.gateway.nick + ' ' + msg.substring(4)); - break; - - case '/quit': - kiwi.gateway.quit(parts.slice(1).join(' ')); - break; - } - - } else { - if (msg.trim() === '') { - return; - } - tab = kiwi.objects.MessageView.getCurrent(); - if (tab.title !== 'server') { - console.log(tab.title); - kiwi.gateway.privmsg(tab.title, msg); - tab.addMsg(kiwi.gateway.nick, msg); - } - } - - }, - - joinChannel: function (chan_name) { - var chans = chan_name.split(','), - i, - chan, - tab; - for (i in chans) { - chan = chans[i]; - tab = kiwi.objects.MessageView.get(chan); - if ((!tab) || (tab.safe_to_close === true)) { - kiwi.gateway.join(chan); - tab = new kiwi.objects.MessageView(chan); - } - } - - if (tab) { - tab.show(); - } - }, -}; - - -/** - * Entry point for Kiwi - */ -kiwi.init = function () { - var server, - gateway = $(kiwi.gateway); - - server = new kiwi.objects.MessageView('server'); - server.show(); - server.addMsg('', 'KiwiIRC Mobile client'); - console.log = function (w) { - server.addMsg('log', w); - } - - kiwi.ui.doLayout(); - - $('#msginp').bind('keydown', function (e) { - switch (true) { - case e.which === 13: // return - msg = $(this).val(); - msg = msg.trim(); - - kiwi.ui.run(msg); - $(this).val(''); - - break; - } - }); - - gateway.bind('onconnect', function (e, data) { - kiwi.objects.MessageView.getServer().addMsg('', 'Connected :)'); - }); - gateway.bind('onmotd', function (e, data) { - kiwi.objects.MessageView.getServer().addMsg('', data.msg); - }); - gateway.bind('onmsg', function (e, data) { - var destination, plugin_event, tab; - // Is this message from a user? - if (data.channel === kiwi.gateway.nick) { - destination = data.nick.toLowerCase(); - } else { - destination = data.channel.toLowerCase(); - } - - tab = kiwi.objects.MessageView.get(destination); - if (!tab) { - tab = new kiwi.objects.MessageView(destination); - } - tab.addMsg(data.nick, data.msg); - }); - gateway.bind('onjoin', function (e, data) { - var tab = kiwi.objects.MessageView.get(data.channel); - if (!tab) { - tab = new kiwi.objects.MessageView(data.channel); - } - tab.addMsg('', '--> ' + data.nick + ' has joined', 'join'); - }); - gateway.bind('onpart', function (e, data) { - var tab = kiwi.objects.MessageView.get(data.channel); - if (!tab) { - tab = new kiwi.objects.MessageView(data.channel); - } - tab.addMsg('', '<-- ' + data.nick + ' has left (' + data.message + ')', 'part'); - }); -}; - - - - - - - - -/** - * Basic container that holds content on the page - */ -kiwi.objects.View = function (title) { - var that = this; - - this.title = title; - this.tab = $('
      • ' + title + '
      • '); - this.content = $('
        '); - - $('#chan_list').append(this.tab); - $('#msgs').append(this.content); - - this.tab.click(function () { that.show.call(that); }); -}; -kiwi.objects.View.prototype.title = 'View'; -kiwi.objects.View.prototype.tab = null; -kiwi.objects.View.prototype.content = null; -kiwi.objects.View.prototype.show = function () { - $('#msgs > div.active').removeClass('active'); - this.content.addClass('active'); - kiwi.ui.current_view = this; - this.scrollBottom(); -} -kiwi.objects.View.prototype.scrollBottom = function () { - $(window).scrollTop($(document).height()); -} - - - - -/** - * A type of View that contains mainly messages - */ -kiwi.objects.MessageView = function (name) { - // Call the parent constructor - kiwi.objects.View.prototype.constructor.call(this, name); - - // Add this MessageView to the array - kiwi.ui.views[name.toLowerCase()] = this; -} -kiwi.objects.MessageView.prototype = new kiwi.objects.View(); -kiwi.objects.MessageView.prototype.msg_count = 0; -kiwi.objects.MessageView.prototype.addMsg = function (nick, text, msg_class) { - var msg, d = new Date(), - time; - - // The CSS class to use - msg_class = msg_class || ''; - - msg = $('
        '); - time = d.getHours().toString().lpad(2, "0") + ":" + d.getMinutes().toString().lpad(2, "0") + ":" + d.getSeconds().toString().lpad(2, "0"); - - $('.time', msg).text(time); - $('.nick', msg).text(nick); - $('.body', msg).text(kiwi.ui.formatIRCMsg(text)); - this.content.append(msg); - - this.msg_count++; - if (this.msg_count > 5) { - $('.msg:first', this.content).remove(); - this.msg_count--; - } - - this.scrollBottom(); -} -// Static functions -kiwi.objects.MessageView.exists = function (name) { - if ((!name) || (typeof name !== 'string')) { - return false; - } - var ret = (typeof kiwi.ui.views[name.toLowerCase()] !== 'undefined'); - return ret; -}; -kiwi.objects.MessageView.get = function (name) { - if (kiwi.objects.MessageView.exists(name)) { - var ret = kiwi.ui.views[name.toLowerCase()]; - return ret; - } else { - return null; - } -}; -kiwi.objects.MessageView.getServer = function () { - return kiwi.ui.views.server; -}; -kiwi.objects.MessageView.getAlls = function () { - return kiwi.ui.views; -}; -kiwi.objects.MessageView.getCurrent = function () { - return kiwi.ui.current_view; -}; \ No newline at end of file diff --git a/client/js/model.js b/client/js/model.js deleted file mode 100755 index 335fd88..0000000 --- a/client/js/model.js +++ /dev/null @@ -1,232 +0,0 @@ -/*jslint white:true, regexp: true, nomen: true, devel: true, undef: true, browser: true, continue: true, sloppy: true, forin: true, newcap: true, plusplus: true, maxerr: 50, indent: 4 */ -/*global kiwi */ -kiwi.model = {}; - -kiwi.model.MemberList = Backbone.Collection.extend({ - model: kiwi.model.Member, - comparator: function (a, b) { - var i, a_modes, b_modes, a_idx, b_idx, a_nick, b_nick; - a_modes = a.get("modes"); - b_modes = b.get("modes"); - // Try to sort by modes first - if (a_modes.length > 0) { - // a has modes, but b doesn't so a should appear first - if (b_modes.length === 0) { - return -1; - } - a_idx = b_idx = -1; - // Compare the first (highest) mode - for (i = 0; i < kiwi.gateway.user_prefixes.length; i++) { - if (kiwi.gateway.user_prefixes[i].mode === a_modes[0]) { - a_idx = i; - } - } - for (i = 0; i < kiwi.gateway.user_prefixes.length; i++) { - if (kiwi.gateway.user_prefixes[i].mode === b_modes[0]) { - b_idx = i; - } - } - if (a_idx < b_idx) { - return -1; - } else if (a_idx > b_idx) { - return 1; - } - // If we get to here both a and b have the same highest mode so have to resort to lexicographical sorting - - } else if (b_modes.length > 0) { - // b has modes but a doesn't so b should appear first - return 1; - } - a_nick = a.get("nick").toLocaleUpperCase(); - b_nick = b.get("nick").toLocaleUpperCase(); - // Lexicographical sorting - if (a_nick < b_nick) { - return -1; - } else if (a_nick > b_nick) { - return 1; - } else { - // This should never happen; both users have the same nick. - console.log('Something\'s gone wrong somewhere - two users have the same nick!'); - return 0; - } - }, - initialize: function (options) { - this.view = new kiwi.view.MemberList({"model": this, "name": options.name}); - }, - getByNick: function (nick) { - return this.find(function (m) { - return nick === m.get("nick"); - }); - } -}); - -kiwi.model.Member = Backbone.Model.extend({ - sortModes: function (modes) { - return modes.sort(function (a, b) { - var a_idx, b_idx, i; - for (i = 0; i < kiwi.gateway.user_prefixes.length; i++) { - if (kiwi.gateway.user_prefixes[i].mode === a) { - a_idx = i; - } - } - for (i = 0; i < kiwi.gateway.user_prefixes.length; i++) { - if (kiwi.gateway.user_prefixes[i].mode === b) { - b_idx = i; - } - } - if (a_idx < b_idx) { - return -1; - } else if (a_idx > b_idx) { - return 1; - } else { - return 0; - } - }); - }, - initialize: function (attributes) { - var nick, modes, prefix; - nick = this.stripPrefix(this.get("nick")); - - modes = this.get("modes"); - modes = modes || []; - this.sortModes(modes); - this.set({"nick": nick, "modes": modes, "prefix": this.getPrefix(modes)}, {silent: true}); - }, - addMode: function (mode) { - var modes, prefix; - modes = this.get("modes"); - modes.push(mode); - modes = this.sortModes(modes); - this.set({"prefix": this.getPrefix(modes), "modes": modes}); - }, - removeMode: function (mode) { - var modes, prefix; - modes = this.get("modes"); - modes = _.reject(modes, function(m) { - return m === mode; - }); - this.set({"prefix": this.getPrefix(modes), "modes": modes}); - }, - getPrefix: function (modes) { - var prefix = ''; - if (typeof modes[0] !== 'undefined') { - prefix = _.detect(kiwi.gateway.user_prefixes, function (prefix) { - return prefix.mode === modes[0]; - }); - prefix = (prefix) ? prefix.symbol : ''; - } - return prefix; - }, - stripPrefix: function (nick) { - var tmp = nick, i, j, k; - i = 0; - for (j = 0; j < nick.length; j++) { - for (k = 0; k < kiwi.gateway.user_prefixes.length; k++) { - if (nick.charAt(j) === kiwi.gateway.user_prefixes[k].symbol) { - i++; - break; - } - } - } - - return tmp.substr(i); - } -}); - -kiwi.model.PanelList = Backbone.Collection.extend({ - model: kiwi.model.Panel, - comparator: function (chan) { - return chan.get("name"); - }, - initialize: function () { - this.server = new kiwi.model.Server({"name": kiwi.gateway.network_name}); - this.view = new kiwi.view.Tabs({"el": $('#kiwi .windowlist ul')[0], "model": this}); - kiwi.currentPanel = this.server; - }, - getByName: function (name) { - return this.find(function (c) { - return name === c.get("name"); - }); - } -}); - -kiwi.model.Panel = Backbone.Model.extend({ - initialize: function (attributes) { - var name = this.get("name") || ""; - this.view = new kiwi.view.Panel({"model": this, "name": name}); - this.set({ - "backscroll": [], - "name": name - }, {"silent": true}); - - this.isChannel = false; - }, - addMsg: function (time, nick, msg, type, style) { - var tmp, bs; - - tmp = {"msg": msg, "time": time, "nick": nick, "chan": this.get("name"), "style": style}; - tmp = kiwi.plugs.run('addmsg', tmp); - if (!tmp) { - return; - } - if (tmp.time === null) { - d = new Date(); - tmp.time = d.getHours().toString().lpad(2, "0") + ":" + d.getMinutes().toString().lpad(2, "0") + ":" + d.getSeconds().toString().lpad(2, "0"); - } - - // The CSS class (action, topic, notice, etc) - if (typeof tmp.type !== "string") { - tmp.type = ''; - } - - // Make sure we don't have NaN or something - if (typeof tmp.msg !== "string") { - tmp.msg = ''; - } - - bs = this.get("backscroll"); - bs.push(tmp) - this.set({"backscroll": bs}, {silent:true}); - this.trigger("msg", tmp); - } -}); - -kiwi.model.Server = kiwi.model.Panel.extend({ - initialize: function (attributes) { - var name = "Server"; - this.view = new kiwi.view.Panel({"model": this, "name": name}); - this.set({ - "backscroll": [], - "name": name - }, {"silent": true}); - this.isChannel = false; - } -}); - -// TODO: Channel modes -kiwi.model.Channel = kiwi.model.Panel.extend({ - initialize: function (attributes) { - var name = this.get("name") || "", - members; - this.view = new kiwi.view.Panel({"model": this, "name": name}); - this.set({ - "members": new kiwi.model.MemberList({"name": this.view.htmlsafe_name}), - "name": name, - "backscroll": [], - "topic": "" - }, {"silent": true}); - this.addMsg(null, ' ', '--> You have joined ' + name, 'action join', 'color:#009900;'); - members = this.get("members"); - members.bind("add", function (member) { - this.addMsg(null, ' ', '--> ' + member.get("nick") + ' [' + member.get("ident") + '@' + member.get("hostname") + '] has joined', 'action join', 'color:#009900;'); - }, this); - members.bind("remove", function (member, options) { - this.addMsg(null, ' ', '<-- ' + member.get("nick") + ' has left ' + ((options.message) ? '(' + options.message + ')' : ''), 'action join', 'color:#009900;'); - }, this); - members.bind("quit", function (args) { - this.addMsg(null, ' ', '<-- ' + args.member.get("nick") + ' has quit ' + ((args.message) ? '(' + args.message + ')' : ''), 'action join', 'color:#009900;'); - }, this); - - this.isChannel = true; - } -}); \ No newline at end of file diff --git a/client/js/touchscreen_tweaks.js b/client/js/touchscreen_tweaks.js deleted file mode 100755 index 43a50b2..0000000 --- a/client/js/touchscreen_tweaks.js +++ /dev/null @@ -1,217 +0,0 @@ -/* - Orientation stuff -*/ - -var supportsOrientationChange = "onorientationchange" in window, - orientationEvent = supportsOrientationChange ? "orientationchange" : "resize"; - -window.addEventListener(orientationEvent, function() { - //alert('rotated' + window.orientation + " " + screen.width); - var or = window.orientation; - if(or == 90 || or == -90){ - // We have a landscape screen - or = "landscape"; - } else { - // We have a portrait screen - or = "portrait"; - } - - if(agent == "ipad" || agent == "iphone" || agent == "ipod"){ - if(or == "landscape"){ - width = window.height; - height = window.width; - } else { - width = window.width; - height = window.height; - } - } else { - width = window.width; - height = window.height; - } - - //alert('adding class: '+or); - if(or=="landscape"){ - $('#kiwi').removeClass("portrait"); - } else { - $('#kiwi').removeClass("landscape"); - } - $('#kiwi').addClass(or); -}, false); - - - - - - - - - -/* - Scroll stuff -*/ - -function registerTouches(obj){ - return; -//$(document).ready(function(){ - obj.ontouchstart = function(e) { - e.preventDefault(); - document.touchx_start = e.touches[0].pageX; - document.touchy_start = e.touches[0].pageY; - } - obj.ontouchmove = function(e) { - e.preventDefault(); - document.touchx_cur = e.touches[0].pageX; - document.touchy_cur = e.touches[0].pageY; - - var xdiff = document.touchx_start - document.touchx_cur - var ydiff = document.touchy_start - document.touchy_cur - - var obj = $(this); - if(ydiff < -20){ - var n = obj.attr("scrollTop")+ydiff; - //alert("down (xdiff="+xdiff+" ydiff="+ydiff+" scrollTop="+obj.attr("scrollTop")+") "+n ); - obj.attr("scrollTop", n); - } else if(ydiff > 20){ - var n = obj.attr("scrollTop")+ydiff; - //alert("up (xdiff="+xdiff+" ydiff="+ydiff+" scrollTop="+obj.attr("scrollTop")+") "+n); - obj.attr("scrollTop", n); - } - } - obj.ontouchend = function(e) { - e.preventDefault(); - - var xdiff = document.touchx_start - document.touchx_cur - var ydiff = document.touchy_start - document.touchy_cur - //alert('x='+xdiff+' y='+ydiff); - //alert('Start: x='+document.touchx+' y='+document.touchy+"\n"+'End: x='+e.pageX+' y='+e.pageY); - - if(xdiff < -150 && (ydiff > -250 && ydiff < 250)){ - //alert("next window (xdiff="+xdiff+" ydiff="+ydiff+")"); - front.tabviewsNext(); - } else if(xdiff > 150 && (ydiff > -250 && ydiff < 250)){ - //alert("previous window (xdiff="+xdiff+" ydiff="+ydiff+")"); - front.tabviewsPrevious(); - } - } -//}); -} - - - - - - - - - - - - - - - - - - -/* - * jSwipe - jQuery Plugin - * http://plugins.jquery.com/project/swipe - * http://www.ryanscherf.com/demos/swipe/ - * - * Copyright (c) 2009 Ryan Scherf (www.ryanscherf.com) - * Licensed under the MIT license - * - * $Date: 2009-07-14 (Tue, 14 Jul 2009) $ - * $version: 0.1.2 - * - * This jQuery plugin will only run on devices running Mobile Safari - * on iPhone or iPod Touch devices running iPhone OS 2.0 or later. - * http://developer.apple.com/iphone/library/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html#//apple_ref/doc/uid/TP40006511-SW5 - */ -(function($) { - $.fn.swipe = function(options) { - - // Default thresholds & swipe functions - var defaults = { - threshold: { - x: 30, - y: 10 - }, - swipeLeft: function() { }, - swipeRight: function() { } - }; - - var options = $.extend(defaults, options); - - if (!this) return false; - - return this.each(function() { - - var me = $(this) - - // Private variables for each element - var originalCoord = { x: 0, y: 0 } - var finalCoord = { x: 0, y: 0 } - - // Screen touched, store the original coordinate - function touchStart(event) { - //console.log('Starting swipe gesture...') - originalCoord.x = event.targetTouches[0].pageX - originalCoord.y = event.targetTouches[0].pageY - } - - // Store coordinates as finger is swiping - function touchMove(event) { - //event.preventDefault(); - finalCoord.x = event.targetTouches[0].pageX // Updated X,Y coordinates - finalCoord.y = event.targetTouches[0].pageY - } - - // Done Swiping - // Swipe should only be on X axis, ignore if swipe on Y axis - // Calculate if the swipe was left or right - function touchEnd(event) { - //console.log('Ending swipe gesture...') - var changeY = originalCoord.y - finalCoord.y - if(changeY < defaults.threshold.y && changeY > (defaults.threshold.y*-1)) { - changeX = originalCoord.x - finalCoord.x - - if(changeX > defaults.threshold.x) { - defaults.swipeLeft() - } - if(changeX < (defaults.threshold.x*-1)) { - defaults.swipeRight() - } - } - } - - // Swipe was started - function touchStart(event) { - //console.log('Starting swipe gesture...') - originalCoord.x = event.targetTouches[0].pageX - originalCoord.y = event.targetTouches[0].pageY - - finalCoord.x = originalCoord.x - finalCoord.y = originalCoord.y - } - - // Swipe was canceled - function touchCancel(event) { - //console.log('Canceling swipe gesture...') - } - - // Add gestures to all swipable areas - this.addEventListener("touchstart", touchStart, false); - this.addEventListener("touchmove", touchMove, false); - this.addEventListener("touchend", touchEnd, false); - this.addEventListener("touchcancel", touchCancel, false); - - }); - }; -})(jQuery); - -$(document).swipe({ - swipeLeft: function(){ front.windowsNext(); }, - swipeRight: function(){ front.windowsPrevious(); }, - threshold: {x: 30, y: 20} -}); \ No newline at end of file diff --git a/client/js/underscore.min.js b/client/js/underscore.min.js deleted file mode 100755 index ad19500..0000000 --- a/client/js/underscore.min.js +++ /dev/null @@ -1,31 +0,0 @@ -// Underscore.js 1.2.2 -// (c) 2011 Jeremy Ashkenas, DocumentCloud Inc. -// Underscore is freely distributable under the MIT license. -// Portions of Underscore are inspired or borrowed from Prototype, -// Oliver Steele's Functional, and John Resig's Micro-Templating. -// For all details and documentation: -// http://documentcloud.github.com/underscore -(function(){function r(a,c,d){if(a===c)return a!==0||1/a==1/c;if(a==null||c==null)return a===c;if(a._chain)a=a._wrapped;if(c._chain)c=c._wrapped;if(b.isFunction(a.isEqual))return a.isEqual(c);if(b.isFunction(c.isEqual))return c.isEqual(a);var e=l.call(a);if(e!=l.call(c))return false;switch(e){case "[object String]":return String(a)==String(c);case "[object Number]":return a=+a,c=+c,a!=a?c!=c:a==0?1/a==1/c:a==c;case "[object Date]":case "[object Boolean]":return+a==+c;case "[object RegExp]":return a.source== -c.source&&a.global==c.global&&a.multiline==c.multiline&&a.ignoreCase==c.ignoreCase}if(typeof a!="object"||typeof c!="object")return false;for(var f=d.length;f--;)if(d[f]==a)return true;d.push(a);var f=0,g=true;if(e=="[object Array]"){if(f=a.length,g=f==c.length)for(;f--;)if(!(g=f in a==f in c&&r(a[f],c[f],d)))break}else{if("constructor"in a!="constructor"in c||a.constructor!=c.constructor)return false;for(var h in a)if(m.call(a,h)&&(f++,!(g=m.call(c,h)&&r(a[h],c[h],d))))break;if(g){for(h in c)if(m.call(c, -h)&&!f--)break;g=!f}}d.pop();return g}var s=this,F=s._,o={},k=Array.prototype,p=Object.prototype,i=k.slice,G=k.unshift,l=p.toString,m=p.hasOwnProperty,v=k.forEach,w=k.map,x=k.reduce,y=k.reduceRight,z=k.filter,A=k.every,B=k.some,q=k.indexOf,C=k.lastIndexOf,p=Array.isArray,H=Object.keys,t=Function.prototype.bind,b=function(a){return new n(a)};if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports)exports=module.exports=b;exports._=b}else typeof define==="function"&&define.amd? -define("underscore",function(){return b}):s._=b;b.VERSION="1.2.2";var j=b.each=b.forEach=function(a,c,b){if(a!=null)if(v&&a.forEach===v)a.forEach(c,b);else if(a.length===+a.length)for(var e=0,f=a.length;e=e.computed&&(e={value:a,computed:b})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a))return Math.min.apply(Math,a);if(!c&&b.isEmpty(a))return Infinity;var e={computed:Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;bd?1:0}),"value")};b.groupBy=function(a,c){var d={},e=b.isFunction(c)?c:function(a){return a[c]};j(a,function(a,c){var b=e(a,c);(d[b]||(d[b]=[])).push(a)});return d};b.sortedIndex=function(a,c,d){d||(d=b.identity);for(var e=0,f=a.length;e< -f;){var g=e+f>>1;d(a[g])=0})})};b.difference=function(a,c){return b.filter(a,function(a){return!b.include(c,a)})};b.zip=function(){for(var a=i.call(arguments),c=b.max(b.pluck(a,"length")),d=Array(c),e=0;e=0;d--)b=[a[d].apply(this,b)];return b[0]}};b.after=function(a,b){return a<=0?b():function(){if(--a<1)return b.apply(this,arguments)}};b.keys=H||function(a){if(a!== -Object(a))throw new TypeError("Invalid object");var b=[],d;for(d in a)m.call(a,d)&&(b[b.length]=d);return b};b.values=function(a){return b.map(a,b.identity)};b.functions=b.methods=function(a){var c=[],d;for(d in a)b.isFunction(a[d])&&c.push(d);return c.sort()};b.extend=function(a){j(i.call(arguments,1),function(b){for(var d in b)b[d]!==void 0&&(a[d]=b[d])});return a};b.defaults=function(a){j(i.call(arguments,1),function(b){for(var d in b)a[d]==null&&(a[d]=b[d])});return a};b.clone=function(a){return!b.isObject(a)? -a:b.isArray(a)?a.slice():b.extend({},a)};b.tap=function(a,b){b(a);return a};b.isEqual=function(a,b){return r(a,b,[])};b.isEmpty=function(a){if(b.isArray(a)||b.isString(a))return a.length===0;for(var c in a)if(m.call(a,c))return false;return true};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=p||function(a){return l.call(a)=="[object Array]"};b.isObject=function(a){return a===Object(a)};b.isArguments=l.call(arguments)=="[object Arguments]"?function(a){return l.call(a)=="[object Arguments]"}: -function(a){return!(!a||!m.call(a,"callee"))};b.isFunction=function(a){return l.call(a)=="[object Function]"};b.isString=function(a){return l.call(a)=="[object String]"};b.isNumber=function(a){return l.call(a)=="[object Number]"};b.isNaN=function(a){return a!==a};b.isBoolean=function(a){return a===true||a===false||l.call(a)=="[object Boolean]"};b.isDate=function(a){return l.call(a)=="[object Date]"};b.isRegExp=function(a){return l.call(a)=="[object RegExp]"};b.isNull=function(a){return a===null}; -b.isUndefined=function(a){return a===void 0};b.noConflict=function(){s._=F;return this};b.identity=function(a){return a};b.times=function(a,b,d){for(var e=0;e/g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/")};b.mixin=function(a){j(b.functions(a),function(c){I(c,b[c]=a[c])})};var J=0;b.uniqueId=function(a){var b=J++;return a?a+b:b};b.templateSettings={evaluate:/<%([\s\S]+?)%>/g, -interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};b.template=function(a,c){var d=b.templateSettings,d="var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('"+a.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(d.escape,function(a,b){return"',_.escape("+b.replace(/\\'/g,"'")+"),'"}).replace(d.interpolate,function(a,b){return"',"+b.replace(/\\'/g,"'")+",'"}).replace(d.evaluate||null,function(a,b){return"');"+b.replace(/\\'/g,"'").replace(/[\r\n\t]/g," ")+";__p.push('"}).replace(/\r/g, -"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t")+"');}return __p.join('');",e=new Function("obj","_",d);return c?e(c,b):function(a){return e(a,b)}};var n=function(a){this._wrapped=a};b.prototype=n.prototype;var u=function(a,c){return c?b(a).chain():a},I=function(a,c){n.prototype[a]=function(){var a=i.call(arguments);G.call(a,this._wrapped);return u(c.apply(b,a),this._chain)}};b.mixin(b);j("pop,push,reverse,shift,sort,splice,unshift".split(","),function(a){var b=k[a];n.prototype[a]=function(){b.apply(this._wrapped, -arguments);return u(this._wrapped,this._chain)}});j(["concat","join","slice"],function(a){var b=k[a];n.prototype[a]=function(){return u(b.apply(this._wrapped,arguments),this._chain)}});n.prototype.chain=function(){this._chain=true;return this};n.prototype.value=function(){return this._wrapped}}).call(this); - diff --git a/client/js/util.js b/client/js/util.js deleted file mode 100755 index c6658dc..0000000 --- a/client/js/util.js +++ /dev/null @@ -1,491 +0,0 @@ -/*jslint devel: true, browser: true, continue: true, sloppy: true, forin: true, plusplus: true, maxerr: 50, indent: 4, nomen: true, regexp: true*/ -/*globals $, front, gateway, Utilityview */ - -// Holds anything kiwi client specific (ie. front, gateway, kiwi.plugs..) -/** -* @namespace -*/ -var kiwi = {}; - - - -/** -* Suppresses console.log -* @param {Boolean} debug Whether to re-enable console.log or not -*/ -function manageDebug(debug) { -/* var log, consoleBackUp; - if (window.console) { - consoleBackUp = window.console.log; - window.console.log = function () { - if (debug) { - consoleBackUp.apply(console, arguments); - } - }; - } else { - log = window.opera ? window.opera.postError : alert; - window.console = {}; - window.console.log = function (str) { - if (debug) { - log(str); - } - }; - }*/ -} - -/** -* Generate a random string of given length -* @param {Number} string_length The length of the random string -* @returns {String} The random string -*/ -function randomString(string_length) { - var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz", - randomstring = '', - i, - rnum; - for (i = 0; i < string_length; i++) { - rnum = Math.floor(Math.random() * chars.length); - randomstring += chars.substring(rnum, rnum + 1); - } - return randomstring; -} - -/** -* String.trim shim -*/ -if (typeof String.prototype.trim === 'undefined') { - String.prototype.trim = function () { - return this.replace(/^\s+|\s+$/g, ""); - }; -} - -/** -* String.lpad shim -* @param {Number} length The length of padding -* @param {String} characher The character to pad with -* @returns {String} The padded string -*/ -if (typeof String.prototype.lpad === 'undefined') { - String.prototype.lpad = function (length, character) { - var padding = "", - i; - for (i = 0; i < length; i++) { - padding += character; - } - return (padding + this).slice(-length); - }; -} - - -/** -* Convert seconds into hours:minutes:seconds -* @param {Number} secs The number of seconds to converts -* @returns {Object} An object representing the hours/minutes/second conversion of secs -*/ -function secondsToTime(secs) { - var hours, minutes, seconds, divisor_for_minutes, divisor_for_seconds, obj; - hours = Math.floor(secs / (60 * 60)); - - divisor_for_minutes = secs % (60 * 60); - minutes = Math.floor(divisor_for_minutes / 60); - - divisor_for_seconds = divisor_for_minutes % 60; - seconds = Math.ceil(divisor_for_seconds); - - obj = { - "h": hours, - "m": minutes, - "s": seconds - }; - return obj; -} - - -/* - PLUGINS - Each function in each object is looped through and ran. The resulting text - is expected to be returned. -*/ -var plugins = [ - { - name: "images", - onaddmsg: function (event, opts) { - if (!event.msg) { - return event; - } - - event.msg = event.msg.replace(/^((https?\:\/\/|ftp\:\/\/)|(www\.))(\S+)(\w{2,4})(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?(\.jpg|\.jpeg|\.gif|\.bmp|\.png)$/gi, function (url) { - // Don't let any future plugins change it (ie. html_safe plugins) - event.event_bubbles = false; - - var img = ''; - return '' + img + '
        '; - }); - - return event; - } - }, - - { - name: "html_safe", - onaddmsg: function (event, opts) { - event.msg = $('
        ').text(event.msg).html(); - event.nick = $('
        ').text(event.nick).html(); - - return event; - } - }, - - { - name: "activity", - onaddmsg: function (event, opts) { - //if (kiwi.front.cur_channel.name.toLowerCase() !== kiwi.front.tabviews[event.tabview.toLowerCase()].name) { - // kiwi.front.tabviews[event.tabview].activity(); - //} - - return event; - } - }, - - { - name: "highlight", - onaddmsg: function (event, opts) { - //var tab = Tabviews.getTab(event.tabview.toLowerCase()); - - // If we have a highlight... - //if (event.msg.toLowerCase().indexOf(kiwi.gateway.nick.toLowerCase()) > -1) { - // if (Tabview.getCurrentTab() !== tab) { - // tab.highlight(); - // } - // if (kiwi.front.isChannel(tab.name)) { - // event.msg = '' + event.msg + ''; - // } - //} - - // If it's a PM, highlight - //if (!kiwi.front.isChannel(tab.name) && tab.name !== "server" - // && Tabview.getCurrentTab().name.toLowerCase() !== tab.name - //) { - // tab.highlight(); - //} - - return event; - } - }, - - - - { - //Following method taken from: http://snipplr.com/view/13533/convert-text-urls-into-links/ - name: "linkify_plain", - onaddmsg: function (event, opts) { - if (!event.msg) { - return event; - } - - event.msg = event.msg.replace(/((https?\:\/\/|ftp\:\/\/)|(www\.))(\S+)(\w{2,4})(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/gi, function (url) { - var nice; - // If it's any of the supported images in the images plugin, skip it - if (url.match(/(\.jpg|\.jpeg|\.gif|\.bmp|\.png)$/)) { - return url; - } - - nice = url; - if (url.match('^https?:\/\/')) { - //nice = nice.replace(/^https?:\/\//i,'') - nice = url; // Shutting up JSLint... - } else { - url = 'http://' + url; - } - - //return '' + nice + '
        '; - return '' + nice + ''; - }); - - return event; - } - }, - - { - name: "lftobr", - onaddmsg: function (event, opts) { - if (!event.msg) { - return event; - } - - event.msg = event.msg.replace(/\n/gi, function (txt) { - return '
        '; - }); - - return event; - } - }, - - - /* - * Disabled due to many websites closing kiwi with iframe busting - { - name: "inBrowser", - oninit: function (event, opts) { - $('#windows a.link_ext').live('mouseover', this.mouseover); - $('#windows a.link_ext').live('mouseout', this.mouseout); - $('#windows a.link_ext').live('click', this.mouseclick); - }, - - onunload: function (event, opts) { - // TODO: make this work (remove all .link_ext_browser as created in mouseover()) - $('#windows a.link_ext').die('mouseover', this.mouseover); - $('#windows a.link_ext').die('mouseout', this.mouseout); - $('#windows a.link_ext').die('click', this.mouseclick); - }, - - - - mouseover: function (e) { - var a = $(this), - tt = $('.tt', a), - tooltip; - - if (tt.text() === '') { - tooltip = $('Open in Kiwi..'); - tt.append(tooltip); - } - - tt.css('top', -tt.outerHeight() + 'px'); - tt.css('left', (a.outerWidth() / 2) - (tt.outerWidth() / 2)); - }, - - mouseout: function (e) { - var a = $(this), - tt = $('.tt', a); - }, - - mouseclick: function (e) { - var a = $(this), - t; - - switch (e.target.className) { - case 'link_ext': - case 'link_img_a': - return true; - //break; - case 'link_ext_browser': - t = new Utilityview('Browser'); - t.topic = a.attr('href'); - - t.iframe = $(''); - t.iframe.attr('src', a.attr('href')); - t.div.append(t.iframe); - t.show(); - break; - } - return false; - - } - }, - */ - - { - name: "nick_colour", - onaddmsg: function (event, opts) { - if (!event.msg) { - return event; - } - - //if (typeof kiwi.front.tabviews[event.tabview].nick_colours === 'undefined') { - // kiwi.front.tabviews[event.tabview].nick_colours = {}; - //} - - //if (typeof kiwi.front.tabviews[event.tabview].nick_colours[event.nick] === 'undefined') { - // kiwi.front.tabviews[event.tabview].nick_colours[event.nick] = this.randColour(); - //} - - //var c = kiwi.front.tabviews[event.tabview].nick_colours[event.nick]; - var c = this.randColour(); - event.nick = '' + event.nick + ''; - - return event; - }, - - - - randColour: function () { - var h = this.rand(-250, 0), - s = this.rand(30, 100), - l = this.rand(20, 70); - return 'hsl(' + h + ',' + s + '%,' + l + '%)'; - }, - - - rand: function (min, max) { - return parseInt(Math.random() * (max - min + 1), 10) + min; - } - }, - - { - name: "kiwitest", - oninit: function (event, opts) { - console.log('registering namespace'); - $(gateway).bind("kiwi.lol.browser", function (e, data) { - console.log('YAY kiwitest'); - console.log(data); - }); - } - } -]; - - - - - - - -/** -* @namespace -*/ -kiwi.plugs = {}; -/** -* Loaded plugins -*/ -kiwi.plugs.loaded = {}; -/** -* Load a plugin -* @param {Object} plugin The plugin to be loaded -* @returns {Boolean} True on success, false on failure -*/ -kiwi.plugs.loadPlugin = function (plugin) { - var plugin_ret; - if (typeof plugin.name !== 'string') { - return false; - } - - plugin_ret = kiwi.plugs.run('plugin_load', {plugin: plugin}); - if (typeof plugin_ret === 'object') { - kiwi.plugs.loaded[plugin_ret.plugin.name] = plugin_ret.plugin; - kiwi.plugs.loaded[plugin_ret.plugin.name].local_data = new kiwi.dataStore('kiwi_plugin_' + plugin_ret.plugin.name); - } - kiwi.plugs.run('init', {}, {run_only: plugin_ret.plugin.name}); - - return true; -}; - -/** -* Unload a plugin -* @param {String} plugin_name The name of the plugin to unload -*/ -kiwi.plugs.unloadPlugin = function (plugin_name) { - if (typeof kiwi.plugs.loaded[plugin_name] !== 'object') { - return; - } - - kiwi.plugs.run('unload', {}, {run_only: plugin_name}); - delete kiwi.plugs.loaded[plugin_name]; -}; - - - -/** -* Run an event against all loaded plugins -* @param {String} event_name The name of the event -* @param {Object} event_data The data to pass to the plugin -* @param {Object} opts Options -* @returns {Object} Event data, possibly modified by the plugins -*/ -kiwi.plugs.run = function (event_name, event_data, opts) { - var ret = event_data, - ret_tmp, - plugin_name; - - // Set some defaults if not provided - event_data = (typeof event_data === 'undefined') ? {} : event_data; - opts = (typeof opts === 'undefined') ? {} : opts; - - for (plugin_name in kiwi.plugs.loaded) { - // If we're only calling 1 plugin, make sure it's that one - if (typeof opts.run_only === 'string' && opts.run_only !== plugin_name) { - continue; - } - - if (typeof kiwi.plugs.loaded[plugin_name]['on' + event_name] === 'function') { - try { - ret_tmp = kiwi.plugs.loaded[plugin_name]['on' + event_name](ret, opts); - if (ret_tmp === null) { - return null; - } - ret = ret_tmp; - - if (typeof ret.event_bubbles === 'boolean' && ret.event_bubbles === false) { - delete ret.event_bubbles; - return ret; - } - } catch (e) { - } - } - } - - return ret; -}; - - - -/** -* @constructor -* @param {String} data_namespace The namespace for the data store -*/ -kiwi.dataStore = function (data_namespace) { - var namespace = data_namespace; - - this.get = function (key) { - return $.jStorage.get(data_namespace + '_' + key); - }; - - this.set = function (key, value) { - return $.jStorage.set(data_namespace + '_' + key, value); - }; -}; - -kiwi.data = new kiwi.dataStore('kiwi'); - - - - -/* - * jQuery Templates Plugin 1.0.0pre - * http://github.com/jquery/jquery-tmpl - * Requires jQuery 1.4.2 - * - * Copyright Software Freedom Conservancy, Inc. - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - */ -(function(a){var r=a.fn.domManip,d="_tmplitem",q=/^[^<]*(<[\w\W]+>)[^>]*$|\{\{\! /,b={},f={},e,p={key:0,data:{}},i=0,c=0,l=[];function g(g,d,h,e){var c={data:e||(e===0||e===false)?e:d?d.data:{},_wrap:d?d._wrap:null,tmpl:null,parent:d||null,nodes:[],calls:u,nest:w,wrap:x,html:v,update:t};g&&a.extend(c,g,{nodes:[],parent:d});if(h){c.tmpl=h;c._ctnt=c._ctnt||c.tmpl(a,c);c.key=++i;(l.length?f:b)[i]=c}return c}a.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(f,d){a.fn[f]=function(n){var g=[],i=a(n),k,h,m,l,j=this.length===1&&this[0].parentNode;e=b||{};if(j&&j.nodeType===11&&j.childNodes.length===1&&i.length===1){i[d](this[0]);g=this}else{for(h=0,m=i.length;h0?this.clone(true):this).get();a(i[h])[d](k);g=g.concat(k)}c=0;g=this.pushStack(g,f,i.selector)}l=e;e=null;a.tmpl.complete(l);return g}});a.fn.extend({tmpl:function(d,c,b){return a.tmpl(this[0],d,c,b)},tmplItem:function(){return a.tmplItem(this[0])},template:function(b){return a.template(b,this[0])},domManip:function(d,m,k){if(d[0]&&a.isArray(d[0])){var g=a.makeArray(arguments),h=d[0],j=h.length,i=0,f;while(i").join(">").split('"').join(""").split("'").join("'")}});a.extend(a.tmpl,{tag:{tmpl:{_default:{$2:"null"},open:"if($notnull_1){__=__.concat($item.nest($1,$2));}"},wrap:{_default:{$2:"null"},open:"$item.calls(__,$1,$2);__=[];",close:"call=$item.calls();__=call._.concat($item.wrap(call,__));"},each:{_default:{$2:"$index, $value"},open:"if($notnull_1){$.each($1a,function($2){with(this){",close:"}});}"},"if":{open:"if(($notnull_1) && $1a){",close:"}"},"else":{_default:{$1:"true"},open:"}else if(($notnull_1) && $1a){"},html:{open:"if($notnull_1){__.push($1a);}"},"=":{_default:{$1:"$data"},open:"if($notnull_1){__.push($.encode($1a));}"},"!":{open:""}},complete:function(){b={}},afterManip:function(f,b,d){var e=b.nodeType===11?a.makeArray(b.childNodes):b.nodeType===1?[b]:[];d.call(f,b);m(e);c++}});function j(e,g,f){var b,c=f?a.map(f,function(a){return typeof a==="string"?e.key?a.replace(/(<\w+)(?=[\s>])(?![^>]*_tmplitem)([^>]*)/g,"$1 "+d+'="'+e.key+'" $2'):a:j(a,e,a._ctnt)}):e;if(g)return c;c=c.join("");c.replace(/^\s*([^<\s][^<]*)?(<[\w\W]+>)([^>]*[^>\s])?\s*$/,function(f,c,e,d){b=a(e).get();m(b);if(c)b=k(c).concat(b);if(d)b=b.concat(k(d))});return b?b:k(c)}function k(c){var b=document.createElement("div");b.innerHTML=c;return a.makeArray(b.childNodes)}function o(b){return new Function("jQuery","$item","var $=jQuery,call,__=[],$data=$item.data;with($data){__.push('"+a.trim(b).replace(/([\\'])/g,"\\$1").replace(/[\r\t\n]/g," ").replace(/\$\{([^\}]*)\}/g,"{{= $1}}").replace(/\{\{(\/?)(\w+|.)(?:\(((?:[^\}]|\}(?!\}))*?)?\))?(?:\s+(.*?)?)?(\(((?:[^\}]|\}(?!\}))*?)\))?\s*\}\}/g,function(m,l,k,g,b,c,d){var j=a.tmpl.tag[k],i,e,f;if(!j)throw"Unknown template tag: "+k;i=j._default||[];if(c&&!/\w$/.test(b)){b+=c;c=""}if(b){b=h(b);d=d?","+h(d)+")":c?")":"";e=c?b.indexOf(".")>-1?b+h(c):"("+b+").call($item"+d:b;f=c?e:"(typeof("+b+")==='function'?("+b+").call($item):("+b+"))"}else f=e=i.$1||"null";g=h(g);return"');"+j[l?"close":"open"].split("$notnull_1").join(b?"typeof("+b+")!=='undefined' && ("+b+")!=null":"true").split("$1a").join(f).split("$1").join(e).split("$2").join(g||i.$2||"")+"__.push('"})+"');}return __;")}function n(c,b){c._wrap=j(c,true,a.isArray(b)?b:[q.test(b)?b:a(b).html()]).join("")}function h(a){return a?a.replace(/\\'/g,"'").replace(/\\\\/g,"\\"):null}function s(b){var a=document.createElement("div");a.appendChild(b.cloneNode(true));return a.innerHTML}function m(o){var n="_"+c,k,j,l={},e,p,h;for(e=0,p=o.length;e=0;h--)m(j[h]);m(k)}function m(j){var p,h=j,k,e,m;if(m=j.getAttribute(d)){while(h.parentNode&&(h=h.parentNode).nodeType===1&&!(p=h.getAttribute(d)));if(p!==m){h=h.parentNode?h.nodeType===11?0:h.getAttribute(d)||0:0;if(!(e=b[m])){e=f[m];e=g(e,b[h]||f[h]);e.key=++i;b[i]=e}c&&o(m)}j.removeAttribute(d)}else if(c&&(e=a.data(j,"tmplItem"))){o(e.key);b[e.key]=e;h=a.data(j.parentNode,"tmplItem");h=h?h.key:0}if(e){k=e;while(k&&k.key!=h){k.nodes.push(j);k=k.parent}delete e._ctnt;delete e._wrap;a.data(j,"tmplItem",e)}function o(a){a=a+n;e=l[a]=l[a]||g(e,b[e.parent.key+n]||e.parent)}}}function u(a,d,c,b){if(!a)return l.pop();l.push({_:a,tmpl:d,item:this,data:c,options:b})}function w(d,c,b){return a.tmpl(a.template(d),c,b,this)}function x(b,d){var c=b.options||{};c.wrapped=d;return a.tmpl(a.template(b.tmpl),b.data,c,b.item)}function v(d,c){var b=this._wrap;return a.map(a(a.isArray(b)?b.join(""):b).filter(d||"*"),function(a){return c?a.innerText||a.textContent:a.outerHTML||s(a)})}function t(){var b=this.nodes;a.tmpl(null,null,null,this).insertBefore(b[0]);a(b).remove()}})(jQuery); - - -/* - * jQuery jStorage plugin - * https://github.com/andris9/jStorage/ - */ -(function(f){if(!f||!(f.toJSON||Object.toJSON||window.JSON)){throw new Error("jQuery, MooTools or Prototype needs to be loaded before jStorage!")}var g={},d={jStorage:"{}"},h=null,j=0,l=f.toJSON||Object.toJSON||(window.JSON&&(JSON.encode||JSON.stringify)),e=f.evalJSON||(window.JSON&&(JSON.decode||JSON.parse))||function(m){return String(m).evalJSON()},i=false;_XMLService={isXML:function(n){var m=(n?n.ownerDocument||n:0).documentElement;return m?m.nodeName!=="HTML":false},encode:function(n){if(!this.isXML(n)){return false}try{return new XMLSerializer().serializeToString(n)}catch(m){try{return n.xml}catch(o){}}return false},decode:function(n){var m=("DOMParser" in window&&(new DOMParser()).parseFromString)||(window.ActiveXObject&&function(p){var q=new ActiveXObject("Microsoft.XMLDOM");q.async="false";q.loadXML(p);return q}),o;if(!m){return false}o=m.call("DOMParser" in window&&(new DOMParser())||window,n,"text/xml");return this.isXML(o)?o:false}};function k(){if("localStorage" in window){try{if(window.localStorage){d=window.localStorage;i="localStorage"}}catch(p){}}else{if("globalStorage" in window){try{if(window.globalStorage){d=window.globalStorage[window.location.hostname];i="globalStorage"}}catch(o){}}else{h=document.createElement("link");if(h.addBehavior){h.style.behavior="url(#default#userData)";document.getElementsByTagName("head")[0].appendChild(h);h.load("jStorage");var n="{}";try{n=h.getAttribute("jStorage")}catch(m){}d.jStorage=n;i="userDataBehavior"}else{h=null;return}}}b()}function b(){if(d.jStorage){try{g=e(String(d.jStorage))}catch(m){d.jStorage="{}"}}else{d.jStorage="{}"}j=d.jStorage?String(d.jStorage).length:0}function c(){try{d.jStorage=l(g);if(h){h.setAttribute("jStorage",d.jStorage);h.save("jStorage")}j=d.jStorage?String(d.jStorage).length:0}catch(m){}}function a(m){if(!m||(typeof m!="string"&&typeof m!="number")){throw new TypeError("Key name must be string or numeric")}return true}f.jStorage={version:"0.1.5.1",set:function(m,n){a(m);if(_XMLService.isXML(n)){n={_is_xml:true,xml:_XMLService.encode(n)}}g[m]=n;c();return n},get:function(m,n){a(m);if(m in g){if(g[m]&&typeof g[m]=="object"&&g[m]._is_xml&&g[m]._is_xml){return _XMLService.decode(g[m].xml)}else{return g[m]}}return typeof(n)=="undefined"?null:n},deleteKey:function(m){a(m);if(m in g){delete g[m];c();return true}return false},flush:function(){g={};c();return true},storageObj:function(){function m(){}m.prototype=g;return new m()},index:function(){var m=[],n;for(n in g){if(g.hasOwnProperty(n)){m.push(n)}}return m},storageSize:function(){return j},currentBackend:function(){return i},storageAvailable:function(){return !!i},reInit:function(){var m,o;if(h&&h.addBehavior){m=document.createElement("link");h.parentNode.replaceChild(m,h);h=m;h.style.behavior="url(#default#userData)";document.getElementsByTagName("head")[0].appendChild(h);h.load("jStorage");o="{}";try{o=h.getAttribute("jStorage")}catch(n){}d.jStorage=o;i="userDataBehavior"}b()}};k()})(window.jQuery||window.$); - - - /* - * TipTip - * Copyright 2010 Drew Wilson - * www.drewwilson.com - * code.drewwilson.com/entry/tiptip-jquery-plugin - * - * Version 1.3 - Updated: Mar. 23, 2010 - * - * This Plug-In will create a custom tooltip to replace the default - * browser tooltip. It is extremely lightweight and very smart in - * that it detects the edges of the browser window and will make sure - * the tooltip stays within the current window size. As a result the - * tooltip will adjust itself to be displayed above, below, to the left - * or to the right depending on what is necessary to stay within the - * browser window. It is completely customizable as well via CSS. - * - * This TipTip jQuery plug-in is dual licensed under the MIT and GPL licenses: - * http://www.opensource.org/licenses/mit-license.php - * http://www.gnu.org/licenses/gpl.html - */ -(function($){$.fn.tipTip=function(options){var defaults={activation:"hover",keepAlive:false,maxWidth:"200px",edgeOffset:3,defaultPosition:"bottom",delay:400,fadeIn:200,fadeOut:200,attribute:"title",content:false,enter:function(){},exit:function(){}};var opts=$.extend(defaults,options);if($("#tiptip_holder").length<=0){var tiptip_holder=$('
        ');var tiptip_content=$('
        ');var tiptip_arrow=$('
        ');$("body").append(tiptip_holder.html(tiptip_content).prepend(tiptip_arrow.html('
        ')))}else{var tiptip_holder=$("#tiptip_holder");var tiptip_content=$("#tiptip_content");var tiptip_arrow=$("#tiptip_arrow")}return this.each(function(){var org_elem=$(this);if(opts.content){var org_title=opts.content}else{var org_title=org_elem.attr(opts.attribute)}if(org_title!=""){if(!opts.content){org_elem.removeAttr(opts.attribute)}var timeout=false;if(opts.activation=="hover"){org_elem.hover(function(){active_tiptip()},function(){if(!opts.keepAlive){deactive_tiptip()}});if(opts.keepAlive){tiptip_holder.hover(function(){},function(){deactive_tiptip()})}}else if(opts.activation=="focus"){org_elem.focus(function(){active_tiptip()}).blur(function(){deactive_tiptip()})}else if(opts.activation=="click"){org_elem.click(function(){active_tiptip();return false}).hover(function(){},function(){if(!opts.keepAlive){deactive_tiptip()}});if(opts.keepAlive){tiptip_holder.hover(function(){},function(){deactive_tiptip()})}}function active_tiptip(){opts.enter.call(this);tiptip_content.html(org_title);tiptip_holder.hide().removeAttr("class").css("margin","0");tiptip_arrow.removeAttr("style");var top=parseInt(org_elem.offset()['top']);var left=parseInt(org_elem.offset()['left']);var org_width=parseInt(org_elem.outerWidth());var org_height=parseInt(org_elem.outerHeight());var tip_w=tiptip_holder.outerWidth();var tip_h=tiptip_holder.outerHeight();var w_compare=Math.round((org_width-tip_w)/2);var h_compare=Math.round((org_height-tip_h)/2);var marg_left=Math.round(left+w_compare);var marg_top=Math.round(top+org_height+opts.edgeOffset);var t_class="";var arrow_top="";var arrow_left=Math.round(tip_w-12)/2;if(opts.defaultPosition=="bottom"){t_class="_bottom"}else if(opts.defaultPosition=="top"){t_class="_top"}else if(opts.defaultPosition=="left"){t_class="_left"}else if(opts.defaultPosition=="right"){t_class="_right"}var right_compare=(w_compare+left)parseInt($(window).width());if((right_compare&&w_compare<0)||(t_class=="_right"&&!left_compare)||(t_class=="_left"&&left<(tip_w+opts.edgeOffset+5))){t_class="_right";arrow_top=Math.round(tip_h-13)/2;arrow_left=-12;marg_left=Math.round(left+org_width+opts.edgeOffset);marg_top=Math.round(top+h_compare)}else if((left_compare&&w_compare<0)||(t_class=="_left"&&!right_compare)){t_class="_left";arrow_top=Math.round(tip_h-13)/2;arrow_left=Math.round(tip_w);marg_left=Math.round(left-(tip_w+opts.edgeOffset+5));marg_top=Math.round(top+h_compare)}var top_compare=(top+org_height+opts.edgeOffset+tip_h+8)>parseInt($(window).height()+$(window).scrollTop());var bottom_compare=((top+org_height)-(opts.edgeOffset+tip_h+8))<0;if(top_compare||(t_class=="_bottom"&&top_compare)||(t_class=="_top"&&!bottom_compare)){if(t_class=="_top"||t_class=="_bottom"){t_class="_top"}else{t_class=t_class+"_top"}arrow_top=tip_h;marg_top=Math.round(top-(tip_h+5+opts.edgeOffset))}else if(bottom_compare|(t_class=="_top"&&bottom_compare)||(t_class=="_bottom"&&!top_compare)){if(t_class=="_top"||t_class=="_bottom"){t_class="_bottom"}else{t_class=t_class+"_bottom"}arrow_top=-12;marg_top=Math.round(top+org_height+opts.edgeOffset)}if(t_class=="_right_top"||t_class=="_left_top"){marg_top=marg_top+5}else if(t_class=="_right_bottom"||t_class=="_left_bottom"){marg_top=marg_top-5}if(t_class=="_left_top"||t_class=="_left_bottom"){marg_left=marg_left+5}tiptip_arrow.css({"margin-left":arrow_left+"px","margin-top":arrow_top+"px"});tiptip_holder.css({"margin-left":marg_left+"px","margin-top":marg_top+"px"}).attr("class","tip"+t_class);if(timeout){clearTimeout(timeout)}timeout=setTimeout(function(){tiptip_holder.stop(true,true).fadeIn(opts.fadeIn)},opts.delay)}function deactive_tiptip(){opts.exit.call(this);if(timeout){clearTimeout(timeout)}tiptip_holder.fadeOut(opts.fadeOut)}}})}})(jQuery); \ No newline at end of file diff --git a/client/js/view.js b/client/js/view.js deleted file mode 100755 index c971627..0000000 --- a/client/js/view.js +++ /dev/null @@ -1,155 +0,0 @@ -/*jslint white:true, regexp: true, nomen: true, devel: true, undef: true, browser: true, continue: true, sloppy: true, forin: true, newcap: true, plusplus: true, maxerr: 50, indent: 4 */ -/*global kiwi */ - -kiwi.view = {}; - -kiwi.view.MemberList = Backbone.View.extend({ - tagName: "ul", - events: { - "click .nick": "nickClick" - }, - initialize: function (options) { - $(this.el).attr("id", 'kiwi_userlist_' + options.name); - this.model.bind('all', this.render, this); - $(this.el).appendTo('#kiwi .userlist'); - }, - render: function () { - var $this = $(this.el); - $this.empty(); - this.model.forEach(function (member) { - $('
      • ' + member.get("prefix") + '' + member.get("nick") + '
      • ').appendTo($this).data('member', member); - }); - }, - nickClick: function (x) { - console.log(x); - }, - show: function () { - $('#kiwi .userlist').children().css('display', 'none'); - $(this.el).css('display', 'block'); - } -}); - -kiwi.view.Panel = Backbone.View.extend({ - tagName: "div", - className: "messages", - events: { - "click .chan": "chanClick" - }, - initialize: function (options) { - this.htmlsafe_name = 'panel_' + randomString(15); - $(this.el).attr("id", 'kiwi_panel_' + this.htmlsafe_name).css('display', 'none'); - this.el = $(this.el).appendTo('#panel1 .scroller')[0]; - this.model.bind('msg', this.newMsg, this); - this.msg_count = 0; - this.model.set({"view": this}, {"silent": true}); - }, - render: function () { - var $this = $(this.el); - $this.empty(); - this.model.get("backscroll").forEach(this.newMsg); - }, - newMsg: function (msg) { - // TODO: make sure that the message pane is scrolled to the bottom - var re, line_msg, $this = $(this.el); - // Make the channels clickable - re = new RegExp('\\B(' + kiwi.gateway.channel_prefix + '[^ ,.\\007]+)', 'g'); - msg.msg = msg.msg.replace(re, function (match) { - return '' + match + ''; - }); - - msg.msg = kiwi.front.formatIRCMsg(msg.msg); - - // Build up and add the line - line_msg = $('
        ' + msg.time + '
        ' + msg.nick + '
        ' + msg.msg + '
        '); - $this.append(line_msg); - this.msg_count++; - if (this.msg_count > 250) { - $('.msg:first', this.div).remove(); - this.msg_count--; - } - }, - chanClick: function (x) { - console.log(x); - }, - show: function () { - var $this = $(this.el); - $('#panel1 .scroller').children().css('display','none'); - $this.css('display', 'block'); - var members = this.model.get("members"); - if (members) { - members.view.show(); - } else { - $('#kiwi .userlist').children().css('display', 'none'); - } - kiwi.front.ui.setTopicText(this.model.get("topic") || "") - // TODO: Have Kiwi remember the scoll locations of each panel - $('#panel1').scrollTop($this.height()); - kiwi.currentPanel = this.model; - } -}); - -kiwi.view.Channel = kiwi.view.Panel.extend({ - initialize: function (options) { - this.htmlsafe_name = 'chan_' + randomString(15); - $(this.el).attr("id", 'kiwi_window_' + this.htmlsafe_name).css('display', 'none'); - this.el = $(this.el).appendTo('#panel1 .scroller')[0]; - this.model.bind('msg', this.newMsg, this); - this.model.bind('change[topic]', this.topic, this); - this.msg_count = 0; - this.model.set({"view": this}, {"silent": true}); - this.show(); - }, - topic: function (topic) { - console.log(topic); - if (!topic) { - topic = this.model.get("topic"); - } - this.model.addMsg(null, ' ', '=== Topic for ' + this.model.get("name") + ' is: ' + topic, 'topic'); - if ($(this.el).css('display') === 'block') { - kiwi.front.ui.setTopicText(this.model.get("topic")) - } - } -}); - -kiwi.view.Tabs = Backbone.View.extend({ - events: { - "click li": "tabClick" - }, - initialize: function () { - this.model.bind("add", this.addTab, this); - this.model.bind("remove", this.removeTab, this); - this.model.bind("reset", this.render, this); - this.model.server.bind("change", this.render, this); - }, - render: function () { - $this = $(this.el); - $this.empty(); - $('
      • ' + kiwi.gateway.network_name + '
      • ').data('pane', this.model.server).appendTo($this); - this.model.forEach(function (tab) { - var tabname = $(tab.get("view").el).attr("id"); - $('
      • ' + tab.get("name") + '
      • ').data('pane', tab).appendTo($this); - }); - }, - addTab: function (tab) { - var tabname = $(tab.get("view").el).attr("id"), - $this = $(this.el); - $('
      • ' + tab.get("name") + '
      • ').data('pane', tab).appendTo($this); - }, - removeTab: function (tab) { - $('#tab_' + $(tab.get("view").el).attr("id")).remove(); - }, - tabClick: function (e) { - $(e.currentTarget).data('pane').view.show(); - } -}); - - - - - - - - - - - diff --git a/client_backbone/underscore-min.js b/client/underscore-min.js old mode 100755 new mode 100644 similarity index 100% rename from client_backbone/underscore-min.js rename to client/underscore-min.js diff --git a/client_backbone/img/ico.png b/client_backbone/img/ico.png deleted file mode 100644 index 82edbcb..0000000 Binary files a/client_backbone/img/ico.png and /dev/null differ diff --git a/client_backbone/img/more.png b/client_backbone/img/more.png deleted file mode 100644 index a0d4dd7..0000000 Binary files a/client_backbone/img/more.png and /dev/null differ diff --git a/client_backbone/img/redcross.png b/client_backbone/img/redcross.png deleted file mode 100644 index e5f5fe0..0000000 Binary files a/client_backbone/img/redcross.png and /dev/null differ