Switching old client with the new
authorDarren <darren@darrenwhitlen.com>
Mon, 8 Oct 2012 20:39:22 +0000 (21:39 +0100)
committerDarren <darren@darrenwhitlen.com>
Mon, 8 Oct 2012 20:39:22 +0000 (21:39 +0100)
53 files changed:
client/backbone-git.js [moved from client_backbone/backbone-git.js with 100% similarity, mode: 0644]
client/css/border-radius.htc [deleted file]
client/css/default.css [deleted file]
client/css/style.css [moved from client_backbone/css/style.css with 100% similarity]
client/css/touchscreen_tweaks.css [deleted file]
client/css/ui.css [deleted file]
client/dev/app.js [moved from client_backbone/dev/app.js with 100% similarity, mode: 0644]
client/dev/applet_chanlist.js [moved from client_backbone/dev/applet_chanlist.js with 100% similarity]
client/dev/applet_nickserv.js [moved from client_backbone/dev/applet_nickserv.js with 100% similarity, mode: 0644]
client/dev/applet_settings.js [moved from client_backbone/dev/applet_settings.js with 100% similarity, mode: 0644]
client/dev/build.js [moved from client_backbone/dev/build.js with 100% similarity, mode: 0644]
client/dev/model_applet.js [moved from client_backbone/dev/model_applet.js with 100% similarity, mode: 0644]
client/dev/model_application.js [moved from client_backbone/dev/model_application.js with 100% similarity, mode: 0644]
client/dev/model_channel.js [moved from client_backbone/dev/model_channel.js with 100% similarity, mode: 0644]
client/dev/model_gateway.js [moved from client_backbone/dev/model_gateway.js with 96% similarity, mode: 0644]
client/dev/model_member.js [moved from client_backbone/dev/model_member.js with 100% similarity, mode: 0644]
client/dev/model_memberlist.js [moved from client_backbone/dev/model_memberlist.js with 100% similarity, mode: 0644]
client/dev/model_panel.js [moved from client_backbone/dev/model_panel.js with 100% similarity, mode: 0644]
client/dev/model_panellist.js [moved from client_backbone/dev/model_panellist.js with 100% similarity, mode: 0644]
client/dev/model_server.js [moved from client_backbone/dev/model_server.js with 100% similarity, mode: 0644]
client/dev/utils.js [moved from client_backbone/dev/utils.js with 100% similarity, mode: 0644]
client/dev/view.js [moved from client_backbone/dev/view.js with 100% similarity, mode: 0644]
client/img/app_menu.png [deleted file]
client/img/background-light.png [moved from client_backbone/img/background-light.png with 100% similarity]
client/img/logo.png [deleted file]
client/img/resize_handle.png [moved from client_backbone/img/resize_handle.png with 100% similarity]
client/img/scroll_handle.png [deleted file]
client/img/server_tab.png [moved from client_backbone/img/server_tab.png with 100% similarity]
client/img/trans_back.png [deleted file]
client/index.html [moved from client_backbone/index.html with 100% similarity, mode: 0644]
client/index.html.jade [deleted file]
client/jquery-1.7.1.min.js [moved from client_backbone/jquery-1.7.1.min.js with 100% similarity, mode: 0644]
client/js/backbone-0.5.3-min.js [deleted file]
client/js/backbone-git.js [deleted file]
client/js/front.events.js [deleted file]
client/js/front.js [deleted file]
client/js/front.ui.js [deleted file]
client/js/gateway.js [deleted file]
client/js/iscroll.js [deleted file]
client/js/jquery-ui.1.8.16.min.js [deleted file]
client/js/jquery.1.6.4.min.js [deleted file]
client/js/jquery.json-2.2.min.js [deleted file]
client/js/mobile.html [deleted file]
client/js/mobile.js [deleted file]
client/js/model.js [deleted file]
client/js/touchscreen_tweaks.js [deleted file]
client/js/underscore.min.js [deleted file]
client/js/util.js [deleted file]
client/js/view.js [deleted file]
client/underscore-min.js [moved from client_backbone/underscore-min.js with 100% similarity, mode: 0644]
client_backbone/img/ico.png [deleted file]
client_backbone/img/more.png [deleted file]
client_backbone/img/redcross.png [deleted file]

old mode 100755 (executable)
new mode 100644 (file)
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 (file)
index c3ae104..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
---Do not remove this if you are using--\r
-Original Author: Remiz Rahnas\r
-Original Author URL: http://www.htmlremix.com\r
-Published date: 2008/09/24\r
-\r
-Changes by Nick Fetchak:\r
-- IE8 standards mode compatibility\r
-- VML elements now positioned behind original box rather than inside of it - should be less prone to breakage\r
-Published date : 2009/11/18\r
-\r
-\r
-<public:attach event="oncontentready" onevent="oncontentready('v08vnSVo78t4JfjH')" />\r
-<script type="text/javascript">\r
-\r
-// findPos() borrowed from http://www.quirksmode.org/js/findpos.html\r
-function findPos(obj) {\r
-       var curleft = curtop = 0;\r
-\r
-       if (obj.offsetParent) {\r
-               do {\r
-                       curleft += obj.offsetLeft;\r
-                       curtop += obj.offsetTop;\r
-               } while (obj = obj.offsetParent);\r
-       }\r
-\r
-       return({\r
-               'x': curleft,\r
-               'y': curtop\r
-       });\r
-}\r
-\r
-function oncontentready(classID) {\r
-  if (this.className.match(classID)) { return(false); }\r
-\r
-       if (!document.namespaces.v) { document.namespaces.add("v", "urn:schemas-microsoft-com:vml"); }\r
-\r
-       this.className = this.className.concat(' ', classID);\r
-       var arcSize = Math.min(parseInt(this.currentStyle['-moz-border-radius'] ||\r
-                                       this.currentStyle['-webkit-border-radius'] ||\r
-                                       this.currentStyle['border-radius'] ||\r
-                                       this.currentStyle['-khtml-border-radius']) /\r
-                              Math.min(this.offsetWidth, this.offsetHeight), 1);\r
-       var fillColor = this.currentStyle.backgroundColor;\r
-       var fillSrc = this.currentStyle.backgroundImage.replace(/^url\("(.+)"\)$/, '$1');\r
-       var strokeColor = this.currentStyle.borderColor;\r
-       var strokeWeight = parseInt(this.currentStyle.borderWidth);\r
-       var stroked = 'true';\r
-       if (isNaN(strokeWeight)) {\r
-               strokeWeight = 0;\r
-               strokeColor = fillColor;\r
-               stroked = 'false';\r
-       }\r
-\r
-       this.style.background = 'transparent';\r
-       this.style.borderColor = 'transparent';\r
-\r
-       // Find which element provides position:relative for the target element (default to BODY)\r
-       var el = this;\r
-       var limit = 100, i = 0;\r
-       while ((typeof(el) != 'unknown') && (el.currentStyle.position != 'relative') && (el.tagName != 'BODY')) {\r
-               el = el.parentElement;\r
-               i++;\r
-               if (i >= limit) { return(false); }\r
-       }\r
-       var el_zindex = parseInt(el.currentStyle.zIndex);\r
-       if (isNaN(el_zindex)) { el_zindex = 0; }\r
-       //alert('got tag '+ el.tagName +' with pos '+ el.currentStyle.position);\r
-\r
-       var rect_size = {\r
-               'width': this.offsetWidth - strokeWeight,\r
-               'height': this.offsetHeight - strokeWeight\r
-       };\r
-       var el_pos = findPos(el);\r
-       var this_pos = findPos(this);\r
-       this_pos.y = this_pos.y + (0.5 * strokeWeight) - el_pos.y;\r
-       this_pos.x = this_pos.x + (0.5 * strokeWeight) - el_pos.x;\r
-\r
-       var rect = document.createElement('v:roundrect');\r
-       rect.arcsize = arcSize +'px';\r
-       rect.strokecolor = strokeColor;\r
-       rect.strokeWeight = strokeWeight +'px';\r
-       rect.stroked = stroked;\r
-       rect.style.display = 'block';\r
-       rect.style.position = 'absolute';\r
-       rect.style.top = this_pos.y +'px';\r
-       rect.style.left = this_pos.x +'px';\r
-       rect.style.width = rect_size.width +'px';\r
-       rect.style.height = rect_size.height +'px';\r
-       rect.style.antialias = true;\r
-       rect.style.zIndex = el_zindex - 1;\r
-\r
-       var fill = document.createElement('v:fill');\r
-       fill.color = fillColor;\r
-       fill.src = fillSrc;\r
-       fill.type = 'tile';\r
-\r
-       rect.appendChild(fill);\r
-       el.appendChild(rect);\r
-\r
-       var css = el.document.createStyleSheet();\r
-       css.addRule("v\\:roundrect", "behavior: url(#default#VML)");\r
-       css.addRule("v\\:fill", "behavior: url(#default#VML)");\r
-\r
-       isIE6 = /msie|MSIE 6/.test(navigator.userAgent);\r
-       // IE6 doesn't support transparent borders, use padding to offset original element\r
-       if (isIE6 && (strokeWeight > 0)) {\r
-               this.style.borderStyle = 'none';\r
-               this.style.paddingTop = parseInt(this.currentStyle.paddingTop || 0) + strokeWeight;\r
-               this.style.paddingBottom = parseInt(this.currentStyle.paddingBottom || 0) + strokeWeight;\r
-       }\r
-\r
-       if (typeof(window.rounded_elements) == 'undefined') {\r
-               window.rounded_elements = new Array();\r
-\r
-               if (typeof(window.onresize) == 'function') { window.previous_onresize = window.onresize; }\r
-               window.onresize = window_resize;\r
-       }\r
-       this.element.vml = rect;\r
-       window.rounded_elements.push(this.element);\r
-}\r
-\r
-function window_resize() {\r
-       if (typeof(window.rounded_elements) == 'undefined') { return(false); }\r
-\r
-       for (var i in window.rounded_elements) {\r
-               var el = window.rounded_elements[i];\r
-\r
-               var strokeWeight = parseInt(el.currentStyle.borderWidth);\r
-               if (isNaN(strokeWeight)) { strokeWeight = 0; }\r
-\r
-               var parent_pos = findPos(el.vml.parentNode);\r
-               var pos = findPos(el);\r
-               pos.y = pos.y + (0.5 * strokeWeight) - parent_pos.y;\r
-               pos.x = pos.x + (0.5 * strokeWeight) - parent_pos.x;\r
-\r
-               el.vml.style.top = pos.y +'px';\r
-               el.vml.style.left = pos.x +'px';\r
-       }\r
-\r
-       if (typeof(window.previous_onresize) == 'function') { window.previous_onresize(); }\r
-}\r
-</script>\r
-\r
diff --git a/client/css/default.css b/client/css/default.css
deleted file mode 100644 (file)
index 8abd3b3..0000000
+++ /dev/null
@@ -1,260 +0,0 @@
-body, html {\r
-    height: 100%; margin:0px;\r
-    font-size:14px;\r
-    line-height:1.4em;\r
-}\r
-\r
-\r
-\r
-\r
-\r
-/* Style resets */\r
-#kiwi * {\r
-    padding:0px; margin:0px;\r
-}\r
-#kiwi ul { list-style:none; }\r
-\r
-#kiwi a {\r
-    color: #36C; text-decoration:none;\r
-    cursor: pointer;\r
-}\r
-#kiwi #login a {\r
-    color: #8D9713;\r
-    text-decoration:none;\r
-}\r
-\r
-\r
-\r
-/* The main app container */\r
-#kiwi {\r
-    overflow:hidden; position:relative; \r
-    height:100%;\r
-    font-family:Arial, Helvetica, sans-serif; font-size:1em;\r
-    background:#EBEBEB;\r
-}\r
-#kiwi .messages { font-family:monospace; }\r
-#kiwi.small_kiwi .userlist { right:-100px; }\r
-#kiwi.small_kiwi .messages { right:10px; }\r
-\r
-\r
-#kiwi .windowlist, #kiwi .utilityviewlist {\r
-    /*height: 65px;*/\r
-    background-color:#1B1B1B;\r
-    font-size:0.9em;\r
-}\r
-#kiwi .windowlist ul, #kiwi .utilityviewlist ul {\r
-    overflow: hidden;\r
-    margin-right: 50px;\r
-    white-space: nowrap;\r
-    display:block;\r
-    /*height: 35px;*/\r
-}\r
-#kiwi .windowlist ul li, #kiwi .utilityviewlist ul li {\r
-    float: left; list-style: inline;\r
-    display:inline; position:relative;\r
-    padding:5px; margin:3px;\r
-    border: 1px solid #333;\r
-    background-color: #eee;\r
-    \r
-    cursor: pointer;\r
-\r
-    line-height: 1.4em;\r
-    vertical-align: middle;\r
-    \r
-    border-radius:5px;\r
-    -moz-border-radius:5px;\r
-    -webkit-border-radius:5px;\r
-    -khtml-border-radius:5px;\r
-    behavior: url(border-radius.htc);\r
-\r
-background-image: -webkit-gradient(\r
-    linear,\r
-    left top,\r
-    left bottom,\r
-    color-stop(0.38, rgb(238,238,238)),\r
-    color-stop(0.68, rgb(209,209,209))\r
-);\r
-background-image: -moz-linear-gradient(\r
-    center top,\r
-    rgb(238,238,238) 38%,\r
-    rgb(209,209,209) 68%\r
-);\r
-}\r
-#kiwi .windowlist .active, #kiwi .utilityviewlist .active { padding-right:23px; }\r
-#kiwi .windowlist .highlight, #kiwi .utilityviewlist .highlight {\r
-    background: #990000;\r
-    font-weight: bold;\r
-}\r
-#kiwi .windowlist .activity, #kiwi .utilityviewlist .activity { font-weight: bold; background: #009900; }\r
-\r
-#kiwi .windowlist ul li img, #kiwi .utilityviewlist ul li img { width:1em; height:1em; top:7px; right:5px; position:absolute; }\r
-#kiwi .windowlist ul li img.icon, #kiwi .utilityviewlist ul li img.icon { left:5px; top:2px; height:auto; width:auto;}\r
-/*#kiwi .windowlist ul li a {\r
-    margin:3px;\r
-    border: 1px solid #333;\r
-    background-color: #eee;\r
-    display: inline;\r
-}*/\r
-\r
-#kiwi .poweredby { float:right; margin:8px 15px; cursor:pointer; color:#EBEBEB; font-family: arial;}\r
-#kiwi .poweredby img { height:1.5em; float:right; margin-left:7px; }\r
-\r
-\r
-#kiwi .userlist {\r
-    position: absolute;\r
-    width: 100px;\r
-    top:92px; right:0px;\r
-    bottom: 55px;\r
-    overflow-y:auto; overflow-x:hidden;\r
-}\r
-#kiwi .userlist ul { display: none; margin:5px; }\r
-#kiwi .userlist ul.active { display:block; }\r
-#kiwi .userlist ul li { padding:1px 2px; cursor:pointer; }\r
-#kiwi .userlist ul li:hover { background-color:#FAF7D3; }\r
-#kiwi .userlist ul li a.nick { display:block; color:black; }\r
-\r
-#kiwi .userlist ul li .userbox { margin:0px 5px 5px 5px; font-size:.9em; }\r
-#kiwi .userlist ul li .userbox a { display:block; text-decoration:none; border-bottom: 1px dashed #aaa; }\r
-\r
-#nicklist_resize {\r
-    position:absolute; cursor:w-resize; width:5px;\r
-    background: url(/img/scroll_handle.png) no-repeat;\r
-    background-position: center;\r
-}\r
-\r
-#kiwi .cur_topic {\r
-    font-family:Verdana, Geneva, sans-serif;\r
-    font-size:.85em;\r
-    line-height:18px; vertical-align:middle;\r
-    /*height:18px;*/\r
-    text-align:center;\r
-    /*white-space: nowrap;*/ overflow: hidden;\r
-    padding: 3px 5px;\r
-    border-bottom:3px solid #1B1B1B;\r
-    \r
-}\r
-\r
-\r
-#kiwi_menu {\r
-    display:none;\r
-    position:absolute;\r
-    right:0px;\r
-    background: gray;\r
-    border: 1px solid dark-gray;\r
-}\r
-.cur_topic .edit:hover #kiwi_menu { display:inline; }\r
-\r
-\r
-\r
-#kiwi .windows {\r
-    position: absolute;\r
-    top:92px; left:0px;\r
-    right: 110px; bottom:30px;\r
-    outline: none;\r
-}\r
-#kiwi .panel { overflow-y:scroll; height:100%; }\r
-#panel1 { float:left; width:100%;}\r
-#panel2 { float:right; width:0%; }\r
-#kiwi .messages {\r
-    overflow-x:wrap;\r
-    border:none;\r
-    display: none;\r
-    height: 100%;\r
-}\r
-#kiwi .messages a {\r
-    text-decoration:none;\r
-}\r
-#kiwi .messages.active { display:block; }\r
-\r
-#kiwi .messages .msg { border-bottom: 1px solid #CCC; padding:1px; font-size:0.9em; }\r
-#kiwi .messages .msg .time { width:6em; float:left; color:#777; }\r
-#kiwi .messages .msg .nick { width:7em; text-align:right; float:left; font-family:arial; font-size:12px; }\r
-#kiwi .messages .msg .text { margin-left:15em; white-space:pre-wrap; word-wrap:break-word;  }\r
-\r
-#kiwi .messages .msg.action .nick { display:none; }\r
-#kiwi .messages .msg.action .text { margin-left:9em; }\r
-#kiwi .messages .msg.status .nick { display:none; }\r
-#kiwi .messages .msg.status .text { color:#990000; margin-left:9em; font-weight:bold; }\r
-#kiwi .messages .msg.topic .nick { display:none; }\r
-#kiwi .messages .msg.topic .text { color:#009900; margin-left:9em; font-style: italic; }\r
-/*#kiwi .messages .msg.motd .nick { display:none; }*/\r
-#kiwi .messages .msg.motd { border:none; }\r
-#kiwi .messages .msg.motd .text { color:#666; }\r
-#kiwi .messages .msg.whois .nick { font-weight:normal; }\r
-#kiwi .messages .msg.whois .text { margin-left:18em; padding-left:1em; border-left:1px dashed #999; }\r
-#kiwi .messages .msg.error .text {\r
-    border:1px solid #A33F3F; background-color:#D28A8A;\r
-    padding:0.5em; margin-top:1em; margin-bottom:1em; margin-right:2em;\r
-}\r
-\r
-\r
-/*\r
- * Link tooltips\r
- */\r
-#kiwi .messages a { position: relative; }\r
-#kiwi .messages a .tt {\r
-    position: absolute; display:none;\r
-    padding: 1em 1.5em;\r
-    /*background-image: -webkit-gradient(\r
-        linear,\r
-        left bottom,\r
-        left top,\r
-        color-stop(0.04, rgb(164,200,126)),\r
-        color-stop(0.52, rgb(197,240,164))\r
-    );\r
-    background-image: -moz-linear-gradient(\r
-        center bottom,\r
-        rgb(164,200,126) 4%,\r
-        rgb(197,240,164) 52%\r
-    );\r
-    border: 1px solid #444;\r
-    border-radius:5px;\r
-    -moz-border-radius:5px;\r
-    -webkit-border-radius:5px;*/\r
-    font-size: 0.9em;\r
-}\r
-#kiwi .messages a:hover .tt { display:inline; cursor:default; }\r
-#kiwi .messages a:hover .tt a { cursor:pointer; color:inherit; }\r
-#kiwi .messages a:active .tt a { color:inherit; }\r
-\r
-#kiwi .messages a.link_img { border: 1px solid gray; }\r
-\r
-\r
-\r
-\r
-#kiwi .control {\r
-    position: absolute;\r
-    bottom:0px; left: 0px;\r
-    /*height:55px;*/\r
-    /*padding: 3px;*/\r
-    width: 100%;\r
-    background-color:#1B1B1B;\r
-}\r
-#kiwi .control .msginput {\r
-    background-color:#fff; margin:3px;\r
-    position:relative; height:1.7em;\r
-    \r
-    border-radius:5px;\r
-    -moz-border-radius:5px;\r
-    -webkit-border-radius:5px;\r
-    -khtml-border-radius:5px;\r
-    behavior: url(border-radius.htc);\r
-}\r
-#kiwi .control .nick { text-align: right; width:11em; position:absolute; padding:2px; }\r
-#kiwi .control .nick a { text-decoration:none; }\r
-#kiwi .control #kiwi_msginput_wrapper {\r
-    border:none;\r
-    position:absolute;\r
-    right:5px; left: 12.2em;\r
-    height:1.7em;\r
-}\r
-#kiwi .control input {\r
-    width: 100%; height: 100%;\r
-    position: relative;\r
-    border: medium none;\r
-    outline:none;\r
-}\r
-#kiwi .control .plugins { margin:3px; margin-top:7px; }\r
-#kiwi .control .plugins ul li {\r
-    display:inline; font-size:0.8em; margin-left:1em;\r
-}
\ No newline at end of file
diff --git a/client/css/touchscreen_tweaks.css b/client/css/touchscreen_tweaks.css
deleted file mode 100644 (file)
index 84ffadf..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-#kiwi.touchscreen.portrait .userlist { display:none; }\r
-\r
-#kiwi.touchscreen.portrait .messages { right:0px; }\r
-\r
-#kiwi.touchscreen .windowlist ul li { padding:10px; }\r
-\r
-#kiwi .windowlist ul {\r
-       /* border: 1px solid blue;*/\r
-       margin-right: 0px; /* i* safari seem to behave differently here :/ */\r
-       height: 50px;\r
-}\r
-\r
-#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 (file)
index 51d5ff7..0000000
+++ /dev/null
@@ -1,285 +0,0 @@
-/*\r
-       ####################\r
-               Common\r
-       ####################\r
-*/\r
-#kiwi .link { cursor:pointer; color:blue; }\r
-#kiwi .newnick {\r
-       bottom:40px;\r
-       left:20px;\r
-}\r
-\r
-\r
-#kiwi .plugins a { cursor:pointer; color:#EBEBEB; font-family:verdana; }\r
-#kiwi .plugin_file { left:20px; }\r
-\r
-#kiwi .plugin_file .list select { width:150px; height:200px; }\r
-#kiwi .plugin_file .list button { float:right; }\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-#kiwi .connectwindow {\r
-       background:#1b1b1b; color: #D4D4D4;\r
-       z-index:50; position:absolute;\r
-       top:0px; bottom:0px;\r
-       overflow-y:scroll;\r
-       width:100%; height:100%;\r
-}\r
-#kiwi h1.logo {\r
-       display:block; width:180px; height:48px;\r
-       padding-left:58px; margin:70px auto 60px;\r
-       background:url(../img/ico.png) no-repeat;\r
-       font-size:1.3em; line-height:48px; font-weight:normal;\r
-       vertical-align: middle;\r
-}\r
-#kiwi h1 a { color:#D4D4D4; }\r
-#kiwi #login { max-width:665px; margin:0px auto; padding:0px 1em; }\r
-#kiwi #login ul { list-style:none; }\r
-#kiwi #login ul li { overflow:show; margin-bottom:10px; }\r
-#kiwi #login ul li.section { margin-top:25px; }\r
-#kiwi #login ul li label { float:left; text-align:right; padding-right:.5em; }\r
-#kiwi #login input {\r
-       border:none;\r
-       box-shadow: inset 0 1px 2px rgba(0,0,0,0.5),0 1px 0px rgba(255,255,255,0.3);\r
-\r
-}\r
-#kiwi #login input[type=checkbox] { width:auto !important; }\r
-#kiwi #login .more { border-top: 1px dotted #888888; font-size: 0.9em;}\r
-#kiwi #login .more_link {\r
-       font-size:12px;\r
-       position:relative;\r
-       top:-16px;\r
-       background: url(../img/more.png) no-repeat right 5px;\r
-       padding-right: 12px;\r
-       color:#888;\r
-}\r
-\r
-#kiwi #login .content.top {\r
-       width:470px;\r
-       margin:30px auto 60px;\r
-}\r
-#kiwi #login .content.top ul { font-size:20px; }\r
-#kiwi #login .content.top label { width:8em; }\r
-#kiwi #login .content.top input {\r
-       width:240px; padding:.2em .5em;\r
-       font-size:.8em; text-align:center;\r
-       background:#D4D4D4;\r
-       border-radius:4px; -moz-border-radius:4px;\r
-}\r
-#kiwi #login .content.top a { display:block; text-align:right; font-size:22px; margin-top:30px; }\r
-\r
-#kiwi #login .content.bottom { width:350px; margin:30px auto; display:none; }\r
-#kiwi #login .content.bottom ul { font-size:18px; }\r
-#kiwi #login .content.bottom label { width:25%; }\r
-#kiwi #login .content.bottom input { width:216px; font-size:.8em; no-repeat; padding:.2em .5em; background:#D4D4D4; border-radius:4px; -moz-border-radius:4px; }\r
-#kiwi #login .content.bottom a { display:block; text-align:right; font-size:16px; margin-top:30px; }\r
-\r
-\r
-#kiwi .newnick .caption { display:block; margin-bottom:1em; }\r
-\r
-#kiwi .about {\r
-       top: 100px;\r
-       left: 200px;\r
-       width: 400px;\r
-       z-index: 1;\r
-       display: none;\r
-}\r
-#kiwi .about button { float:right; }\r
-\r
-#kiwi .box {\r
-       color:#eee;\r
-       min-width:150px;\r
-       background: url(../img/trans_back.png) repeat;\r
-       border-radius:5px;\r
-       -moz-border-radius:5px;\r
-       -webkit-border-radius:5px;\r
-       -khtml-border-radius:5px;\r
-       padding:7px;\r
-       \r
-       /*background-color: #819463;\r
-       padding: 10px;*/\r
-       position:absolute;\r
-       \r
-       /*\r
-       box-shadow: 0px 0px 20px #555;\r
-       -webkit-box-shadow: 0px 0px 20px #555;\r
-       -moz-box-shadow: 0px 0px 20px #555;\r
-       filter: progid:DXImageTransform.Microsoft.dropShadow(color=#555, offX=0, offY=0, positive=true);\r
-       \r
-       border-radius: 4px;\r
-       -moz-border-radius: 4px;\r
-       -webkit-border-radius: 4px;\r
-       */\r
-}\r
-\r
-.box .boxarea {\r
-       color:black;\r
-       padding:15px !important;\r
-       background-color:#D4D4D4;\r
-       border-radius:3px;\r
-       -moz-border-radius:3px;\r
-       -webkit-border-radius:3px;\r
-       -khtml-border-radius:3px;\r
-       overflow:hidden;\r
-}\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-#alertbox {\r
-       background-image: linear-gradient(bottom, rgb(212,212,45) 43%, rgb(171,171,0) 72%);\r
-       background-image: -o-linear-gradient(bottom, rgb(212,212,45) 43%, rgb(171,171,0) 72%);\r
-       background-image: -moz-linear-gradient(bottom, rgb(212,212,45) 43%, rgb(171,171,0) 72%);\r
-       background-image: -webkit-linear-gradient(bottom, rgb(212,212,45) 43%, rgb(171,171,0) 72%);\r
-       background-image: -ms-linear-gradient(bottom, rgb(212,212,45) 43%, rgb(171,171,0) 72%);\r
-\r
-       background-image: -webkit-gradient(\r
-               linear,\r
-               left bottom,\r
-               left top,\r
-               color-stop(0.43, rgb(212,212,45)),\r
-               color-stop(0.72, rgb(171,171,0))\r
-       );\r
-}\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-/* TipTip CSS - Version 1.2 */\r
-\r
-#tiptip_holder {\r
-       display: none;\r
-       position: absolute;\r
-       top: 0;\r
-       left: 0;\r
-       z-index: 99999;\r
-}\r
-\r
-#tiptip_holder.tip_top {\r
-       padding-bottom: 5px;\r
-}\r
-\r
-#tiptip_holder.tip_bottom {\r
-       padding-top: 5px;\r
-}\r
-\r
-#tiptip_holder.tip_right {\r
-       padding-left: 5px;\r
-}\r
-\r
-#tiptip_holder.tip_left {\r
-       padding-right: 5px;\r
-}\r
-\r
-#tiptip_content {\r
-       /*font-size: 11px;\r
-       color: #fff;\r
-       text-shadow: 0 0 2px #000;*/\r
-       font-size:0.9em;\r
-       color:#fff;\r
-       \r
-       padding: 4px 8px;\r
-       border: 1px solid rgba(255,255,255,0.25);\r
-       background-color: rgb(25,25,25);\r
-       background-color: rgba(25,25,25,0.92);\r
-       background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(transparent), to(#000));\r
-       border-radius: 3px;\r
-       -webkit-border-radius: 3px;\r
-       -moz-border-radius: 3px;\r
-       box-shadow: 0 0 3px #555;\r
-       -webkit-box-shadow: 0 0 3px #555;\r
-       -moz-box-shadow: 0 0 3px #555;\r
-}\r
-\r
-#tiptip_arrow, #tiptip_arrow_inner {\r
-       position: absolute;\r
-       border-color: transparent;\r
-       border-style: solid;\r
-       border-width: 6px;\r
-       height: 0;\r
-       width: 0;\r
-}\r
-\r
-#tiptip_holder.tip_top #tiptip_arrow {\r
-       border-top-color: #fff;\r
-       border-top-color: rgba(255,255,255,0.35);\r
-}\r
-\r
-#tiptip_holder.tip_bottom #tiptip_arrow {\r
-       border-bottom-color: #fff;\r
-       border-bottom-color: rgba(255,255,255,0.35);\r
-}\r
-\r
-#tiptip_holder.tip_right #tiptip_arrow {\r
-       border-right-color: #fff;\r
-       border-right-color: rgba(255,255,255,0.35);\r
-}\r
-\r
-#tiptip_holder.tip_left #tiptip_arrow {\r
-       border-left-color: #fff;\r
-       border-left-color: rgba(255,255,255,0.35);\r
-}\r
-\r
-#tiptip_holder.tip_top #tiptip_arrow_inner {\r
-       margin-top: -7px;\r
-       margin-left: -6px;\r
-       border-top-color: rgb(25,25,25);\r
-       border-top-color: rgba(25,25,25,0.92);\r
-}\r
-\r
-#tiptip_holder.tip_bottom #tiptip_arrow_inner {\r
-       margin-top: -5px;\r
-       margin-left: -6px;\r
-       border-bottom-color: rgb(25,25,25);\r
-       border-bottom-color: rgba(25,25,25,0.92);\r
-}\r
-\r
-#tiptip_holder.tip_right #tiptip_arrow_inner {\r
-       margin-top: -6px;\r
-       margin-left: -5px;\r
-       border-right-color: rgb(25,25,25);\r
-       border-right-color: rgba(25,25,25,0.92);\r
-}\r
-\r
-#tiptip_holder.tip_left #tiptip_arrow_inner {\r
-       margin-top: -6px;\r
-       margin-left: -7px;\r
-       border-left-color: rgb(25,25,25);\r
-       border-left-color: rgba(25,25,25,0.92);\r
-}\r
-\r
-/* Webkit Hacks  */\r
-@media screen and (-webkit-min-device-pixel-ratio:0) { \r
-       #tiptip_content {\r
-               padding: 4px 8px 5px 8px;\r
-               background-color: rgba(45,45,45,0.88);\r
-       }\r
-       #tiptip_holder.tip_bottom #tiptip_arrow_inner { \r
-               border-bottom-color: rgba(45,45,45,0.88);\r
-       }\r
-       #tiptip_holder.tip_top #tiptip_arrow_inner { \r
-               border-top-color: rgba(20,20,20,0.92);\r
-       }\r
-}
\ No newline at end of file
old mode 100755 (executable)
new mode 100644 (file)
similarity index 100%
rename from client_backbone/dev/app.js
rename to client/dev/app.js
old mode 100755 (executable)
new mode 100644 (file)
similarity index 100%
rename from client_backbone/dev/applet_nickserv.js
rename to client/dev/applet_nickserv.js
old mode 100755 (executable)
new mode 100644 (file)
similarity index 100%
rename from client_backbone/dev/applet_settings.js
rename to client/dev/applet_settings.js
old mode 100755 (executable)
new mode 100644 (file)
similarity index 100%
rename from client_backbone/dev/build.js
rename to client/dev/build.js
old mode 100755 (executable)
new mode 100644 (file)
similarity index 100%
rename from client_backbone/dev/model_applet.js
rename to client/dev/model_applet.js
old mode 100755 (executable)
new mode 100644 (file)
similarity index 100%
rename from client_backbone/dev/model_application.js
rename to client/dev/model_application.js
old mode 100755 (executable)
new mode 100644 (file)
similarity index 100%
rename from client_backbone/dev/model_channel.js
rename to client/dev/model_channel.js
old mode 100755 (executable)
new mode 100644 (file)
similarity index 96%
rename from client_backbone/dev/model_gateway.js
rename to client/dev/model_gateway.js
index f0657ad..dba907f
@@ -159,7 +159,7 @@ kiwi.model.Gateway = function () {
     *   Parses the response from the server\r
     */\r
     this.parse = function (command, data) {\r
-        //console.log('gateway event', command, data);\r
+        console.log('gateway event', command, data);\r
         if (command !== undefined) {\r
             that.trigger('on' + command, data);\r
 \r
old mode 100755 (executable)
new mode 100644 (file)
similarity index 100%
rename from client_backbone/dev/model_member.js
rename to client/dev/model_member.js
old mode 100755 (executable)
new mode 100644 (file)
similarity index 100%
rename from client_backbone/dev/model_memberlist.js
rename to client/dev/model_memberlist.js
old mode 100755 (executable)
new mode 100644 (file)
similarity index 100%
rename from client_backbone/dev/model_panel.js
rename to client/dev/model_panel.js
old mode 100755 (executable)
new mode 100644 (file)
similarity index 100%
rename from client_backbone/dev/model_panellist.js
rename to client/dev/model_panellist.js
old mode 100755 (executable)
new mode 100644 (file)
similarity index 100%
rename from client_backbone/dev/model_server.js
rename to client/dev/model_server.js
old mode 100755 (executable)
new mode 100644 (file)
similarity index 100%
rename from client_backbone/dev/utils.js
rename to client/dev/utils.js
old mode 100755 (executable)
new mode 100644 (file)
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 (file)
index 1cbbc47..0000000
Binary files a/client/img/app_menu.png and /dev/null differ
diff --git a/client/img/logo.png b/client/img/logo.png
deleted file mode 100644 (file)
index 21b08d6..0000000
Binary files a/client/img/logo.png and /dev/null differ
diff --git a/client/img/scroll_handle.png b/client/img/scroll_handle.png
deleted file mode 100644 (file)
index a196e65..0000000
Binary files a/client/img/scroll_handle.png and /dev/null differ
diff --git a/client/img/trans_back.png b/client/img/trans_back.png
deleted file mode 100644 (file)
index f17dc9d..0000000
Binary files a/client/img/trans_back.png and /dev/null differ
old mode 100755 (executable)
new mode 100644 (file)
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 (executable)
index eb96042..0000000
+++ /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")
-            |    <h2>Kiwi IRC</h2>
-            |    <p>An alternative to downloading an irc client. Kiwi IRC is the best web app you'll use for the next couple years.</p>
-            |    <button class="about_close">Close</button>
-            |    <p class="info">${about}</p>
-        
-        script#tmpl_change_nick(type="text/x-jquery-tmpl")
-            |    <div class="newnick box">
-            |        <span class="caption"></span>
-            |        Your new nickname:<br />
-            |        <form class="form_newnick">
-            |            <input type="text" class="txtnewnick" /><br />
-            |            <button class="butnewnick" type="submit">Change</button> <a class="link cancelnewnick">Cancel</a>
-            |        </form>
-            |    </div>
-
-
-        script#tmpl_plugins(type="text/x-jquery-tmpl")
-            |    <div class="list">
-            |        <h2>Kiwi plugins</h2>
-            |        <p>
-            |            <select multiple="multiple" id="plugin_list">
-            |            </select>
-            |            <button id="plugins_list_unload">Unload</button>
-            |        </p>
-            |    </div>
-            |    <div class="load">
-            |        Plugin file URL:<br />
-            |        <form>
-            |            <input type="text" class="txtpluginfile" /><br />
-            |            <button class="butnewnick" type="submit">Load..</button> <a class="link cancelpluginfile">Cancel</a>
-            |        </form>
-            |    </div>
-
-        script#tmpl_user_box(type="text/x-jquery-tmpl")
-            |    <div class="userbox">
-            |        <input type="hidden" class="userbox_nick" value="${nick}" />
-            |        <a class="userbox_query">Message</a>
-            |        <a class="userbox_whois">Info</a>
-            |    </div>
-
-        script#tmpl_network_menu(type="text/x-jquery-tmpl")
-            |    <ul id="network_menu">
-            |       <li><a class="link" onclick="kiwi.front.run('/motd');Tabview.getServerTab().show();">Show MOTD</a></li>
-            |       <li><a class="link" onclick="kiwi.front.run('/list');">Channel list</a></li>
-            |    </ul>
old mode 100755 (executable)
new mode 100644 (file)
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 (executable)
index 08623c0..0000000
+++ /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<e;d++)if(c[d]&&b===c[d][0]){c[d]=null;break}}else c[a]=[]}else this._callbacks={};return this},trigger:function(a){var b,c,d,e,f=2;if(!(c=this._callbacks))return this;for(;f--;)if(b=f?a:"all",b=c[b])for(var g=0,h=b.length;g<h;g++)(d=b[g])?(e=f?Array.prototype.slice.call(arguments,1):arguments,d[0].apply(d[1]||this,e)):(b.splice(g,1),g--,h--);return this}};e.Model=function(a,b){var c;a||(a={});if(c=this.defaults)f.isFunction(c)&&(c=c.call(this)),a=f.extend({},c,a);this.attributes={};
-this._escapedAttributes={};this.cid=f.uniqueId("c");this.set(a,{silent:!0});this._changed=!1;this._previousAttributes=f.clone(this.attributes);if(b&&b.collection)this.collection=b.collection;this.initialize(a,b)};f.extend(e.Model.prototype,e.Events,{_previousAttributes:null,_changed:!1,idAttribute:"id",initialize:function(){},toJSON:function(){return f.clone(this.attributes)},get:function(a){return this.attributes[a]},escape:function(a){var b;if(b=this._escapedAttributes[a])return b;b=this.attributes[a];
-return this._escapedAttributes[a]=(b==null?"":""+b).replace(/&(?!\w+;|#\d+;|#x[\da-f]+;)/gi,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;").replace(/\//g,"&#x2F;")},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<d;c++)this._add(a[c],b);else this._add(a,b);return this},remove:function(a,b){if(f.isArray(a))for(var c=
-0,d=a.length;c<d;c++)this._remove(a[c],b);else this._remove(a,b);return this},get:function(a){if(a==null)return null;return this._byId[a.id!=null?a.id:a]},getByCid:function(a){return a&&this._byCid[a.cid||a]},at:function(a){return this.models[a]},sort:function(a){a||(a={});if(!this.comparator)throw Error("Cannot sort a set without a comparator");this.models=this.sortBy(this.comparator);a.silent||this.trigger("reset",this,a);return this},pluck:function(a){return f.map(this.models,function(b){return b.get(a)})},
-reset:function(a,b){a||(a=[]);b||(b={});this.each(this._removeReference);this._reset();this.add(a,{silent:!0});b.silent||this.trigger("reset",this,b);return this},fetch:function(a){a||(a={});var b=this,c=a.success;a.success=function(d,f,e){b[a.add?"add":"reset"](b.parse(d,e),a);c&&c(b,d)};a.error=i(a.error,b,a);return(this.sync||e.sync).call(this,"read",this,a)},create:function(a,b){var c=this;b||(b={});a=this._prepareModel(a,b);if(!a)return!1;var d=b.success;b.success=function(a,e,f){c.add(a,b);
-d&&d(a,e,f)};a.save(null,b);return a},parse:function(a){return a},chain:function(){return f(this.models).chain()},_reset:function(){this.length=0;this.models=[];this._byId={};this._byCid={}},_prepareModel:function(a,b){if(a instanceof e.Model){if(!a.collection)a.collection=this}else{var c=a;a=new this.model(c,{collection:this});a.validate&&!a._performValidation(c,b)&&(a=!1)}return a},_add:function(a,b){b||(b={});a=this._prepareModel(a,b);if(!a)return!1;var c=this.getByCid(a);if(c)throw Error(["Can't add the same model to a set twice",
-c.id]);this._byId[a.id]=a;this._byCid[a.cid]=a;this.models.splice(b.at!=null?b.at:this.comparator?this.sortedIndex(a,this.comparator):this.length,0,a);a.bind("all",this._onModelEvent);this.length++;b.silent||a.trigger("add",a,this,b);return a},_remove:function(a,b){b||(b={});a=this.getByCid(a)||this.get(a);if(!a)return null;delete this._byId[a.id];delete this._byCid[a.cid];this.models.splice(this.indexOf(a),1);this.length--;b.silent||a.trigger("remove",a,this,b);this._removeReference(a);return a},
-_removeReference:function(a){this==a.collection&&delete a.collection;a.unbind("all",this._onModelEvent)},_onModelEvent:function(a,b,c,d){(a=="add"||a=="remove")&&c!=this||(a=="destroy"&&this._remove(b,d),b&&a==="change:"+b.idAttribute&&(delete this._byId[b.previous(b.idAttribute)],this._byId[b.id]=b),this.trigger.apply(this,arguments))}});f.each(["forEach","each","map","reduce","reduceRight","find","detect","filter","select","reject","every","all","some","any","include","contains","invoke","max",
-"min","sortBy","sortedIndex","toArray","size","first","rest","last","without","indexOf","lastIndexOf","isEmpty","groupBy"],function(a){e.Collection.prototype[a]=function(){return f[a].apply(f,[this.models].concat(f.toArray(arguments)))}});e.Router=function(a){a||(a={});if(a.routes)this.routes=a.routes;this._bindRoutes();this.initialize.apply(this,arguments)};var q=/:([\w\d]+)/g,r=/\*([\w\d]+)/g,s=/[-[\]{}()+?.,\\^$|#\s]/g;f.extend(e.Router.prototype,e.Events,{initialize:function(){},route:function(a,
-b,c){e.history||(e.history=new e.History);f.isRegExp(a)||(a=this._routeToRegExp(a));e.history.route(a,f.bind(function(d){d=this._extractParameters(a,d);c.apply(this,d);this.trigger.apply(this,["route:"+b].concat(d))},this))},navigate:function(a,b){e.history.navigate(a,b)},_bindRoutes:function(){if(this.routes){var a=[],b;for(b in this.routes)a.unshift([b,this.routes[b]]);b=0;for(var c=a.length;b<c;b++)this.route(a[b][0],a[b][1],this[a[b][1]])}},_routeToRegExp:function(a){a=a.replace(s,"\\$&").replace(q,
-"([^/]*)").replace(r,"(.*?)");return RegExp("^"+a+"$")},_extractParameters:function(a,b){return a.exec(b).slice(1)}});e.History=function(){this.handlers=[];f.bindAll(this,"checkUrl")};var j=/^#*/,t=/msie [\w.]+/,m=!1;f.extend(e.History.prototype,{interval:50,getFragment:function(a,b){if(a==null)if(this._hasPushState||b){a=window.location.pathname;var c=window.location.search;c&&(a+=c);a.indexOf(this.options.root)==0&&(a=a.substr(this.options.root.length))}else a=window.location.hash;return decodeURIComponent(a.replace(j,
-""))},start:function(a){if(m)throw Error("Backbone.history has already been started");this.options=f.extend({},{root:"/"},this.options,a);this._wantsPushState=!!this.options.pushState;this._hasPushState=!(!this.options.pushState||!window.history||!window.history.pushState);a=this.getFragment();var b=document.documentMode;if(b=t.exec(navigator.userAgent.toLowerCase())&&(!b||b<=7))this.iframe=g('<iframe src="javascript:0" tabindex="-1" />').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<c;b++){var d=n[b];a[d]&&(this[d]=a[d])}this.options=a},_ensureElement:function(){if(this.el){if(f.isString(this.el))this.el=g(this.el).get(0)}else{var a=this.attributes||{};if(this.id)a.id=this.id;if(this.className)a["class"]=this.className;this.el=this.make(this.tagName,a)}}});e.Model.extend=e.Collection.extend=e.Router.extend=e.View.extend=function(a,b){var c=v(this,a,b);c.extend=this.extend;return c};var w={create:"POST",update:"PUT","delete":"DELETE",read:"GET"};e.sync=function(a,
-b,c){var d=w[a];c=f.extend({type:d,dataType:"json"},c);if(!c.url)c.url=k(b)||l();if(!c.data&&b&&(a=="create"||a=="update"))c.contentType="application/json",c.data=JSON.stringify(b.toJSON());if(e.emulateJSON)c.contentType="application/x-www-form-urlencoded",c.data=c.data?{model:c.data}:{};if(e.emulateHTTP&&(d==="PUT"||d==="DELETE")){if(e.emulateJSON)c.data._method=d;c.type="POST";c.beforeSend=function(a){a.setRequestHeader("X-HTTP-Method-Override",d)}}if(c.type!=="GET"&&!e.emulateJSON)c.processData=
-!1;return g.ajax(c)};var o=function(){},v=function(a,b,c){var d;d=b&&b.hasOwnProperty("constructor")?b.constructor:function(){return a.apply(this,arguments)};f.extend(d,a);o.prototype=a.prototype;d.prototype=new o;b&&f.extend(d.prototype,b);c&&f.extend(d,c);d.prototype.constructor=d;d.__super__=a.prototype;return d},k=function(a){if(!a||!a.url)return null;return f.isFunction(a.url)?a.url():a.url},l=function(){throw Error('A "url" property or function must be specified');},i=function(a,b,c){return function(d){a?
-a(b,d,c):b.trigger("error",b,d,c)}}}).call(this);
-
diff --git a/client/js/backbone-git.js b/client/js/backbone-git.js
deleted file mode 100755 (executable)
index 7c32137..0000000
+++ /dev/null
@@ -1,1260 +0,0 @@
-//     Backbone.js 0.5.3\r
-//     (c) 2010-2012 Jeremy Ashkenas, DocumentCloud Inc.\r
-//     Backbone may be freely distributed under the MIT license.\r
-//     For all details and documentation:\r
-//     http://backbonejs.org\r
-\r
-(function(){\r
-\r
-  // Initial Setup\r
-  // -------------\r
-\r
-  // Save a reference to the global object (`window` in the browser, `global`\r
-  // on the server).\r
-  var root = this;\r
-\r
-  // Save the previous value of the `Backbone` variable, so that it can be\r
-  // restored later on, if `noConflict` is used.\r
-  var previousBackbone = root.Backbone;\r
-\r
-  // Create a local reference to slice/splice.\r
-  var slice = Array.prototype.slice;\r
-  var splice = Array.prototype.splice;\r
-\r
-  // The top-level namespace. All public Backbone classes and modules will\r
-  // be attached to this. Exported for both CommonJS and the browser.\r
-  var Backbone;\r
-  if (typeof exports !== 'undefined') {\r
-    Backbone = exports;\r
-  } else {\r
-    Backbone = root.Backbone = {};\r
-  }\r
-\r
-  // Current version of the library. Keep in sync with `package.json`.\r
-  Backbone.VERSION = '0.5.3';\r
-\r
-  // Require Underscore, if we're on the server, and it's not already present.\r
-  var _ = root._;\r
-  if (!_ && (typeof require !== 'undefined')) _ = require('underscore');\r
-\r
-  // For Backbone's purposes, jQuery, Zepto, or Ender owns the `$` variable.\r
-  var $ = root.jQuery || root.Zepto || root.ender;\r
-\r
-  // Runs Backbone.js in *noConflict* mode, returning the `Backbone` variable\r
-  // to its previous owner. Returns a reference to this Backbone object.\r
-  Backbone.noConflict = function() {\r
-    root.Backbone = previousBackbone;\r
-    return this;\r
-  };\r
-\r
-  // Turn on `emulateHTTP` to support legacy HTTP servers. Setting this option\r
-  // will fake `"PUT"` and `"DELETE"` requests via the `_method` parameter and\r
-  // set a `X-Http-Method-Override` header.\r
-  Backbone.emulateHTTP = false;\r
-\r
-  // Turn on `emulateJSON` to support legacy servers that can't deal with direct\r
-  // `application/json` requests ... will encode the body as\r
-  // `application/x-www-form-urlencoded` instead and will send the model in a\r
-  // form param named `model`.\r
-  Backbone.emulateJSON = false;\r
-\r
-  // Backbone.Events\r
-  // -----------------\r
-\r
-  // A module that can be mixed in to *any object* in order to provide it with\r
-  // custom events. You may bind with `on` or remove with `off` callback functions\r
-  // to an event; trigger`-ing an event fires all callbacks in succession.\r
-  //\r
-  //     var object = {};\r
-  //     _.extend(object, Backbone.Events);\r
-  //     object.on('expand', function(){ alert('expanded'); });\r
-  //     object.trigger('expand');\r
-  //\r
-  Backbone.Events = {\r
-\r
-    // Bind an event, specified by a string name, `ev`, to a `callback`\r
-    // function. Passing `"all"` will bind the callback to all events fired.\r
-    on: function(events, callback, context) {\r
-      var ev;\r
-      events = events.split(/\s+/);\r
-      var calls = this._callbacks || (this._callbacks = {});\r
-      while (ev = events.shift()) {\r
-        // Create an immutable callback list, allowing traversal during\r
-        // modification.  The tail is an empty object that will always be used\r
-        // as the next node.\r
-        var list  = calls[ev] || (calls[ev] = {});\r
-        var tail = list.tail || (list.tail = list.next = {});\r
-        tail.callback = callback;\r
-        tail.context = context;\r
-        list.tail = tail.next = {};\r
-      }\r
-      return this;\r
-    },\r
-\r
-    // Remove one or many callbacks. If `context` is null, removes all callbacks\r
-    // with that function. If `callback` is null, removes all callbacks for the\r
-    // event. If `ev` is null, removes all bound callbacks for all events.\r
-    off: function(events, callback, context) {\r
-      var ev, calls, node;\r
-      if (!events) {\r
-        delete this._callbacks;\r
-      } else if (calls = this._callbacks) {\r
-        events = events.split(/\s+/);\r
-        while (ev = events.shift()) {\r
-          node = calls[ev];\r
-          delete calls[ev];\r
-          if (!callback || !node) continue;\r
-          // Create a new list, omitting the indicated event/context pairs.\r
-          while ((node = node.next) && node.next) {\r
-            if (node.callback === callback &&\r
-              (!context || node.context === context)) continue;\r
-            this.on(ev, node.callback, node.context);\r
-          }\r
-        }\r
-      }\r
-      return this;\r
-    },\r
-\r
-    // Trigger an event, firing all bound callbacks. Callbacks are passed the\r
-    // same arguments as `trigger` is, apart from the event name.\r
-    // Listening for `"all"` passes the true event name as the first argument.\r
-    trigger: function(events) {\r
-      var event, node, calls, tail, args, all, rest;\r
-      if (!(calls = this._callbacks)) return this;\r
-      all = calls['all'];\r
-      (events = events.split(/\s+/)).push(null);\r
-      // Save references to the current heads & tails.\r
-      while (event = events.shift()) {\r
-        if (all) events.push({next: all.next, tail: all.tail, event: event});\r
-        if (!(node = calls[event])) continue;\r
-        events.push({next: node.next, tail: node.tail});\r
-      }\r
-      // Traverse each list, stopping when the saved tail is reached.\r
-      rest = slice.call(arguments, 1);\r
-      while (node = events.pop()) {\r
-        tail = node.tail;\r
-        args = node.event ? [node.event].concat(rest) : rest;\r
-        while ((node = node.next) !== tail) {\r
-          node.callback.apply(node.context || this, args);\r
-        }\r
-      }\r
-      return this;\r
-    }\r
-\r
-  };\r
-\r
-  // Aliases for backwards compatibility.\r
-  Backbone.Events.bind   = Backbone.Events.on;\r
-  Backbone.Events.unbind = Backbone.Events.off;\r
-\r
-  // Backbone.Model\r
-  // --------------\r
-\r
-  // Create a new model, with defined attributes. A client id (`cid`)\r
-  // is automatically generated and assigned for you.\r
-  Backbone.Model = function(attributes, options) {\r
-    var defaults;\r
-    attributes || (attributes = {});\r
-    if (options && options.parse) attributes = this.parse(attributes);\r
-    if (defaults = getValue(this, 'defaults')) {\r
-      attributes = _.extend({}, defaults, attributes);\r
-    }\r
-    if (options && options.collection) this.collection = options.collection;\r
-    this.attributes = {};\r
-    this._escapedAttributes = {};\r
-    this.cid = _.uniqueId('c');\r
-    if (!this.set(attributes, {silent: true})) {\r
-      throw new Error("Can't create an invalid model");\r
-    }\r
-    this._changed = false;\r
-    this._previousAttributes = _.clone(this.attributes);\r
-    this.initialize.apply(this, arguments);\r
-  };\r
-\r
-  // Attach all inheritable methods to the Model prototype.\r
-  _.extend(Backbone.Model.prototype, Backbone.Events, {\r
-\r
-    // Has the item been changed since the last `"change"` event?\r
-    _changed: false,\r
-\r
-    // The default name for the JSON `id` attribute is `"id"`. MongoDB and\r
-    // CouchDB users may want to set this to `"_id"`.\r
-    idAttribute: 'id',\r
-\r
-    // Initialize is an empty function by default. Override it with your own\r
-    // initialization logic.\r
-    initialize: function(){},\r
-\r
-    // Return a copy of the model's `attributes` object.\r
-    toJSON: function() {\r
-      return _.clone(this.attributes);\r
-    },\r
-\r
-    // Get the value of an attribute.\r
-    get: function(attr) {\r
-      return this.attributes[attr];\r
-    },\r
-\r
-    // Get the HTML-escaped value of an attribute.\r
-    escape: function(attr) {\r
-      var html;\r
-      if (html = this._escapedAttributes[attr]) return html;\r
-      var val = this.attributes[attr];\r
-      return this._escapedAttributes[attr] = _.escape(val == null ? '' : '' + val);\r
-    },\r
-\r
-    // Returns `true` if the attribute contains a value that is not null\r
-    // or undefined.\r
-    has: function(attr) {\r
-      return this.attributes[attr] != null;\r
-    },\r
-\r
-    // Set a hash of model attributes on the object, firing `"change"` unless\r
-    // you choose to silence it.\r
-    set: function(key, value, options) {\r
-      var attrs, attr, val;\r
-      if (_.isObject(key) || key == null) {\r
-        attrs = key;\r
-        options = value;\r
-      } else {\r
-        attrs = {};\r
-        attrs[key] = value;\r
-      }\r
-\r
-      // Extract attributes and options.\r
-      options || (options = {});\r
-      if (!attrs) return this;\r
-      if (attrs instanceof Backbone.Model) attrs = attrs.attributes;\r
-      if (options.unset) for (var attr in attrs) attrs[attr] = void 0;\r
-      var now = this.attributes, escaped = this._escapedAttributes;\r
-\r
-      // Run validation.\r
-      if (this.validate && !this._performValidation(attrs, options)) return false;\r
-\r
-      // Check for changes of `id`.\r
-      if (this.idAttribute in attrs) this.id = attrs[this.idAttribute];\r
-\r
-      // We're about to start triggering change events.\r
-      var alreadyChanging = this._changing;\r
-      this._changing = true;\r
-\r
-      // Update attributes.\r
-      var changes = {};\r
-      for (attr in attrs) {\r
-        val = attrs[attr];\r
-        if (!_.isEqual(now[attr], val) || (options.unset && (attr in now))) {\r
-          delete escaped[attr];\r
-          this._changed = true;\r
-          changes[attr] = val;\r
-        }\r
-        options.unset ? delete now[attr] : now[attr] = val;\r
-      }\r
-\r
-      // Fire `change:attribute` events.\r
-      for (var attr in changes) {\r
-        if (!options.silent) this.trigger('change:' + attr, this, changes[attr], options);\r
-      }\r
-\r
-      // Fire the `"change"` event, if the model has been changed.\r
-      if (!alreadyChanging) {\r
-        if (!options.silent && this._changed) this.change(options);\r
-        this._changing = false;\r
-      }\r
-      return this;\r
-    },\r
-\r
-    // Remove an attribute from the model, firing `"change"` unless you choose\r
-    // to silence it. `unset` is a noop if the attribute doesn't exist.\r
-    unset: function(attr, options) {\r
-      (options || (options = {})).unset = true;\r
-      return this.set(attr, null, options);\r
-    },\r
-\r
-    // Clear all attributes on the model, firing `"change"` unless you choose\r
-    // to silence it.\r
-    clear: function(options) {\r
-      (options || (options = {})).unset = true;\r
-      return this.set(_.clone(this.attributes), options);\r
-    },\r
-\r
-    // Fetch the model from the server. If the server's representation of the\r
-    // model differs from its current attributes, they will be overriden,\r
-    // triggering a `"change"` event.\r
-    fetch: function(options) {\r
-      options = options ? _.clone(options) : {};\r
-      var model = this;\r
-      var success = options.success;\r
-      options.success = function(resp, status, xhr) {\r
-        if (!model.set(model.parse(resp, xhr), options)) return false;\r
-        if (success) success(model, resp);\r
-      };\r
-      options.error = Backbone.wrapError(options.error, model, options);\r
-      return (this.sync || Backbone.sync).call(this, 'read', this, options);\r
-    },\r
-\r
-    // Set a hash of model attributes, and sync the model to the server.\r
-    // If the server returns an attributes hash that differs, the model's\r
-    // state will be `set` again.\r
-    save: function(key, value, options) {\r
-      var attrs;\r
-      if (_.isObject(key) || key == null) {\r
-        attrs = key;\r
-        options = value;\r
-      } else {\r
-        attrs = {};\r
-        attrs[key] = value;\r
-      }\r
-\r
-      options = options ? _.clone(options) : {};\r
-      if (attrs && !this[options.wait ? '_performValidation' : 'set'](attrs, options)) return false;\r
-      var model = this;\r
-      var success = options.success;\r
-      options.success = function(resp, status, xhr) {\r
-        var serverAttrs = model.parse(resp, xhr);\r
-        if (options.wait) serverAttrs = _.extend(attrs || {}, serverAttrs);\r
-        if (!model.set(serverAttrs, options)) return false;\r
-        if (success) {\r
-          success(model, resp);\r
-        } else {\r
-          model.trigger('sync', model, resp, options);\r
-        }\r
-      };\r
-      options.error = Backbone.wrapError(options.error, model, options);\r
-      var method = this.isNew() ? 'create' : 'update';\r
-      return (this.sync || Backbone.sync).call(this, method, this, options);\r
-    },\r
-\r
-    // Destroy this model on the server if it was already persisted.\r
-    // Optimistically removes the model from its collection, if it has one.\r
-    // If `wait: true` is passed, waits for the server to respond before removal.\r
-    destroy: function(options) {\r
-      options = options ? _.clone(options) : {};\r
-      var model = this;\r
-      var success = options.success;\r
-\r
-      var triggerDestroy = function() {\r
-        model.trigger('destroy', model, model.collection, options);\r
-      };\r
-\r
-      if (this.isNew()) return triggerDestroy();\r
-      options.success = function(resp) {\r
-        if (options.wait) triggerDestroy();\r
-        if (success) {\r
-          success(model, resp);\r
-        } else {\r
-          model.trigger('sync', model, resp, options);\r
-        }\r
-      };\r
-      options.error = Backbone.wrapError(options.error, model, options);\r
-      var xhr = (this.sync || Backbone.sync).call(this, 'delete', this, options);\r
-      if (!options.wait) triggerDestroy();\r
-      return xhr;\r
-    },\r
-\r
-    // Default URL for the model's representation on the server -- if you're\r
-    // using Backbone's restful methods, override this to change the endpoint\r
-    // that will be called.\r
-    url: function() {\r
-      var base = getValue(this.collection, 'url') || getValue(this, 'urlRoot') || urlError();\r
-      if (this.isNew()) return base;\r
-      return base + (base.charAt(base.length - 1) == '/' ? '' : '/') + encodeURIComponent(this.id);\r
-    },\r
-\r
-    // **parse** converts a response into the hash of attributes to be `set` on\r
-    // the model. The default implementation is just to pass the response along.\r
-    parse: function(resp, xhr) {\r
-      return resp;\r
-    },\r
-\r
-    // Create a new model with identical attributes to this one.\r
-    clone: function() {\r
-      return new this.constructor(this.attributes);\r
-    },\r
-\r
-    // A model is new if it has never been saved to the server, and lacks an id.\r
-    isNew: function() {\r
-      return this.id == null;\r
-    },\r
-\r
-    // Call this method to manually fire a `change` event for this model.\r
-    // Calling this will cause all objects observing the model to update.\r
-    change: function(options) {\r
-      this.trigger('change', this, options);\r
-      this._previousAttributes = _.clone(this.attributes);\r
-      this._changed = false;\r
-    },\r
-\r
-    // Determine if the model has changed since the last `"change"` event.\r
-    // If you specify an attribute name, determine if that attribute has changed.\r
-    hasChanged: function(attr) {\r
-      if (attr) return !_.isEqual(this._previousAttributes[attr], this.attributes[attr]);\r
-      return this._changed;\r
-    },\r
-\r
-    // Return an object containing all the attributes that have changed, or\r
-    // false if there are no changed attributes. Useful for determining what\r
-    // parts of a view need to be updated and/or what attributes need to be\r
-    // persisted to the server. Unset attributes will be set to undefined.\r
-    changedAttributes: function(now) {\r
-      if (!this._changed) return false;\r
-      now || (now = this.attributes);\r
-      var changed = false, old = this._previousAttributes;\r
-      for (var attr in now) {\r
-        if (_.isEqual(old[attr], now[attr])) continue;\r
-        (changed || (changed = {}))[attr] = now[attr];\r
-      }\r
-      for (var attr in old) {\r
-        if (!(attr in now)) (changed || (changed = {}))[attr] = void 0;\r
-      }\r
-      return changed;\r
-    },\r
-\r
-    // Get the previous value of an attribute, recorded at the time the last\r
-    // `"change"` event was fired.\r
-    previous: function(attr) {\r
-      if (!attr || !this._previousAttributes) return null;\r
-      return this._previousAttributes[attr];\r
-    },\r
-\r
-    // Get all of the attributes of the model at the time of the previous\r
-    // `"change"` event.\r
-    previousAttributes: function() {\r
-      return _.clone(this._previousAttributes);\r
-    },\r
-\r
-    // Run validation against a set of incoming attributes, returning `true`\r
-    // if all is well. If a specific `error` callback has been passed,\r
-    // call that instead of firing the general `"error"` event.\r
-    _performValidation: function(attrs, options) {\r
-      var newAttrs = _.extend({}, this.attributes, attrs);\r
-      var error = this.validate(newAttrs, options);\r
-      if (error) {\r
-        if (options.error) {\r
-          options.error(this, error, options);\r
-        } else {\r
-          this.trigger('error', this, error, options);\r
-        }\r
-        return false;\r
-      }\r
-      return true;\r
-    }\r
-\r
-  });\r
-\r
-  // Backbone.Collection\r
-  // -------------------\r
-\r
-  // Provides a standard collection class for our sets of models, ordered\r
-  // or unordered. If a `comparator` is specified, the Collection will maintain\r
-  // its models in sort order, as they're added and removed.\r
-  Backbone.Collection = function(models, options) {\r
-    options || (options = {});\r
-    if (options.comparator) this.comparator = options.comparator;\r
-    this._reset();\r
-    this.initialize.apply(this, arguments);\r
-    if (models) this.reset(models, {silent: true, parse: options.parse});\r
-  };\r
-\r
-  // Define the Collection's inheritable methods.\r
-  _.extend(Backbone.Collection.prototype, Backbone.Events, {\r
-\r
-    // The default model for a collection is just a **Backbone.Model**.\r
-    // This should be overridden in most cases.\r
-    model: Backbone.Model,\r
-\r
-    // Initialize is an empty function by default. Override it with your own\r
-    // initialization logic.\r
-    initialize: function(){},\r
-\r
-    // The JSON representation of a Collection is an array of the\r
-    // models' attributes.\r
-    toJSON: function() {\r
-      return this.map(function(model){ return model.toJSON(); });\r
-    },\r
-\r
-    // Add a model, or list of models to the set. Pass **silent** to avoid\r
-    // firing the `add` event for every new model.\r
-    add: function(models, options) {\r
-      var i, index, length, model, cids = {};\r
-      options || (options = {});\r
-      models = _.isArray(models) ? models.slice() : [models];\r
-\r
-      // Begin by turning bare objects into model references, and preventing\r
-      // invalid models or duplicate models from being added.\r
-      for (i = 0, length = models.length; i < length; i++) {\r
-        if (!(model = models[i] = this._prepareModel(models[i], options))) {\r
-          throw new Error("Can't add an invalid model to a collection");\r
-        }\r
-        var hasId = model.id != null;\r
-        if (this._byCid[model.cid] || (hasId && this._byId[model.id])) {\r
-          throw new Error("Can't add the same model to a collection twice");\r
-        }\r
-      }\r
-\r
-      // Listen to added models' events, and index models for lookup by\r
-      // `id` and by `cid`.\r
-      for (i = 0; i < length; i++) {\r
-        (model = models[i]).on('all', this._onModelEvent, this);\r
-        this._byCid[model.cid] = model;\r
-        if (model.id != null) this._byId[model.id] = model;\r
-        cids[model.cid] = true;\r
-      }\r
-\r
-      // Insert models into the collection, re-sorting if needed, and triggering\r
-      // `add` events unless silenced.\r
-      this.length += length;\r
-      index = options.at != null ? options.at : this.models.length;\r
-      splice.apply(this.models, [index, 0].concat(models));\r
-      if (this.comparator) this.sort({silent: true});\r
-      if (options.silent) return this;\r
-      for (i = 0, length = this.models.length; i < length; i++) {\r
-        if (!cids[(model = this.models[i]).cid]) continue;\r
-        options.index = i;\r
-        model.trigger('add', model, this, options);\r
-      }\r
-      return this;\r
-    },\r
-\r
-    // Remove a model, or a list of models from the set. Pass silent to avoid\r
-    // firing the `remove` event for every model removed.\r
-    remove: function(models, options) {\r
-      var i, l, index, model;\r
-      options || (options = {});\r
-      models = _.isArray(models) ? models.slice() : [models];\r
-      for (i = 0, l = models.length; i < l; i++) {\r
-        model = this.getByCid(models[i]) || this.get(models[i]);\r
-        if (!model) continue;\r
-        delete this._byId[model.id];\r
-        delete this._byCid[model.cid];\r
-        index = this.indexOf(model);\r
-        this.models.splice(index, 1);\r
-        this.length--;\r
-        if (!options.silent) {\r
-          options.index = index;\r
-          model.trigger('remove', model, this, options);\r
-        }\r
-        this._removeReference(model);\r
-      }\r
-      return this;\r
-    },\r
-\r
-    // Get a model from the set by id.\r
-    get: function(id) {\r
-      if (id == null) return null;\r
-      return this._byId[id.id != null ? id.id : id];\r
-    },\r
-\r
-    // Get a model from the set by client id.\r
-    getByCid: function(cid) {\r
-      return cid && this._byCid[cid.cid || cid];\r
-    },\r
-\r
-    // Get the model at the given index.\r
-    at: function(index) {\r
-      return this.models[index];\r
-    },\r
-\r
-    // Force the collection to re-sort itself. You don't need to call this under\r
-    // normal circumstances, as the set will maintain sort order as each item\r
-    // is added.\r
-    sort: function(options) {\r
-      options || (options = {});\r
-      if (!this.comparator) throw new Error('Cannot sort a set without a comparator');\r
-      var boundComparator = _.bind(this.comparator, this);\r
-      if (this.comparator.length == 1) {\r
-        this.models = this.sortBy(boundComparator);\r
-      } else {\r
-        this.models.sort(boundComparator);\r
-      }\r
-      if (!options.silent) this.trigger('reset', this, options);\r
-      return this;\r
-    },\r
-\r
-    // Pluck an attribute from each model in the collection.\r
-    pluck: function(attr) {\r
-      return _.map(this.models, function(model){ return model.get(attr); });\r
-    },\r
-\r
-    // When you have more items than you want to add or remove individually,\r
-    // you can reset the entire set with a new list of models, without firing\r
-    // any `add` or `remove` events. Fires `reset` when finished.\r
-    reset: function(models, options) {\r
-      models  || (models = []);\r
-      options || (options = {});\r
-      for (var i = 0, l = this.models.length; i < l; i++) {\r
-        this._removeReference(this.models[i]);\r
-      }\r
-      this._reset();\r
-      this.add(models, {silent: true, parse: options.parse});\r
-      if (!options.silent) this.trigger('reset', this, options);\r
-      return this;\r
-    },\r
-\r
-    // Fetch the default set of models for this collection, resetting the\r
-    // collection when they arrive. If `add: true` is passed, appends the\r
-    // models to the collection instead of resetting.\r
-    fetch: function(options) {\r
-      options = options ? _.clone(options) : {};\r
-      if (options.parse === undefined) options.parse = true;\r
-      var collection = this;\r
-      var success = options.success;\r
-      options.success = function(resp, status, xhr) {\r
-        collection[options.add ? 'add' : 'reset'](collection.parse(resp, xhr), options);\r
-        if (success) success(collection, resp);\r
-      };\r
-      options.error = Backbone.wrapError(options.error, collection, options);\r
-      return (this.sync || Backbone.sync).call(this, 'read', this, options);\r
-    },\r
-\r
-    // Create a new instance of a model in this collection. Add the model to the\r
-    // collection immediately, unless `wait: true` is passed, in which case we\r
-    // wait for the server to agree.\r
-    create: function(model, options) {\r
-      var coll = this;\r
-      options = options ? _.clone(options) : {};\r
-      model = this._prepareModel(model, options);\r
-      if (!model) return false;\r
-      if (!options.wait) coll.add(model, options);\r
-      var success = options.success;\r
-      options.success = function(nextModel, resp, xhr) {\r
-        if (options.wait) coll.add(nextModel, options);\r
-        if (success) {\r
-          success(nextModel, resp);\r
-        } else {\r
-          nextModel.trigger('sync', model, resp, options);\r
-        }\r
-      };\r
-      model.save(null, options);\r
-      return model;\r
-    },\r
-\r
-    // **parse** converts a response into a list of models to be added to the\r
-    // collection. The default implementation is just to pass it through.\r
-    parse: function(resp, xhr) {\r
-      return resp;\r
-    },\r
-\r
-    // Proxy to _'s chain. Can't be proxied the same way the rest of the\r
-    // underscore methods are proxied because it relies on the underscore\r
-    // constructor.\r
-    chain: function () {\r
-      return _(this.models).chain();\r
-    },\r
-\r
-    // Reset all internal state. Called when the collection is reset.\r
-    _reset: function(options) {\r
-      this.length = 0;\r
-      this.models = [];\r
-      this._byId  = {};\r
-      this._byCid = {};\r
-    },\r
-\r
-    // Prepare a model or hash of attributes to be added to this collection.\r
-    _prepareModel: function(model, options) {\r
-      if (!(model instanceof Backbone.Model)) {\r
-        var attrs = model;\r
-        options.collection = this;\r
-        model = new this.model(attrs, options);\r
-        if (model.validate && !model._performValidation(model.attributes, options)) model = false;\r
-      } else if (!model.collection) {\r
-        model.collection = this;\r
-      }\r
-      return model;\r
-    },\r
-\r
-    // Internal method to remove a model's ties to a collection.\r
-    _removeReference: function(model) {\r
-      if (this == model.collection) {\r
-        delete model.collection;\r
-      }\r
-      model.off('all', this._onModelEvent, this);\r
-    },\r
-\r
-    // Internal method called every time a model in the set fires an event.\r
-    // Sets need to update their indexes when models change ids. All other\r
-    // events simply proxy through. "add" and "remove" events that originate\r
-    // in other collections are ignored.\r
-    _onModelEvent: function(ev, model, collection, options) {\r
-      if ((ev == 'add' || ev == 'remove') && collection != this) return;\r
-      if (ev == 'destroy') {\r
-        this.remove(model, options);\r
-      }\r
-      if (model && ev === 'change:' + model.idAttribute) {\r
-        delete this._byId[model.previous(model.idAttribute)];\r
-        this._byId[model.id] = model;\r
-      }\r
-      this.trigger.apply(this, arguments);\r
-    }\r
-\r
-  });\r
-\r
-  // Underscore methods that we want to implement on the Collection.\r
-  var methods = ['forEach', 'each', 'map', 'reduce', 'reduceRight', 'find',\r
-    'detect', 'filter', 'select', 'reject', 'every', 'all', 'some', 'any',\r
-    'include', 'contains', 'invoke', 'max', 'min', 'sortBy', 'sortedIndex',\r
-    'toArray', 'size', 'first', 'initial', 'rest', 'last', 'without', 'indexOf',\r
-    'shuffle', 'lastIndexOf', 'isEmpty', 'groupBy'];\r
-\r
-  // Mix in each Underscore method as a proxy to `Collection#models`.\r
-  _.each(methods, function(method) {\r
-    Backbone.Collection.prototype[method] = function() {\r
-      return _[method].apply(_, [this.models].concat(_.toArray(arguments)));\r
-    };\r
-  });\r
-\r
-  // Backbone.Router\r
-  // -------------------\r
-\r
-  // Routers map faux-URLs to actions, and fire events when routes are\r
-  // matched. Creating a new one sets its `routes` hash, if not set statically.\r
-  Backbone.Router = function(options) {\r
-    options || (options = {});\r
-    if (options.routes) this.routes = options.routes;\r
-    this._bindRoutes();\r
-    this.initialize.apply(this, arguments);\r
-  };\r
-\r
-  // Cached regular expressions for matching named param parts and splatted\r
-  // parts of route strings.\r
-  var namedParam    = /:\w+/g;\r
-  var splatParam    = /\*\w+/g;\r
-  var escapeRegExp  = /[-[\]{}()+?.,\\^$|#\s]/g;\r
-\r
-  // Set up all inheritable **Backbone.Router** properties and methods.\r
-  _.extend(Backbone.Router.prototype, Backbone.Events, {\r
-\r
-    // Initialize is an empty function by default. Override it with your own\r
-    // initialization logic.\r
-    initialize: function(){},\r
-\r
-    // Manually bind a single named route to a callback. For example:\r
-    //\r
-    //     this.route('search/:query/p:num', 'search', function(query, num) {\r
-    //       ...\r
-    //     });\r
-    //\r
-    route: function(route, name, callback) {\r
-      Backbone.history || (Backbone.history = new Backbone.History);\r
-      if (!_.isRegExp(route)) route = this._routeToRegExp(route);\r
-      if (!callback) callback = this[name];\r
-      Backbone.history.route(route, _.bind(function(fragment) {\r
-        var args = this._extractParameters(route, fragment);\r
-        callback && callback.apply(this, args);\r
-        this.trigger.apply(this, ['route:' + name].concat(args));\r
-        Backbone.history.trigger('route', this, name, args);\r
-      }, this));\r
-    },\r
-\r
-    // Simple proxy to `Backbone.history` to save a fragment into the history.\r
-    navigate: function(fragment, options) {\r
-      Backbone.history.navigate(fragment, options);\r
-    },\r
-\r
-    // Bind all defined routes to `Backbone.history`. We have to reverse the\r
-    // order of the routes here to support behavior where the most general\r
-    // routes can be defined at the bottom of the route map.\r
-    _bindRoutes: function() {\r
-      if (!this.routes) return;\r
-      var routes = [];\r
-      for (var route in this.routes) {\r
-        routes.unshift([route, this.routes[route]]);\r
-      }\r
-      for (var i = 0, l = routes.length; i < l; i++) {\r
-        this.route(routes[i][0], routes[i][1], this[routes[i][1]]);\r
-      }\r
-    },\r
-\r
-    // Convert a route string into a regular expression, suitable for matching\r
-    // against the current location hash.\r
-    _routeToRegExp: function(route) {\r
-      route = route.replace(escapeRegExp, '\\$&')\r
-                   .replace(namedParam, '([^\/]+)')\r
-                   .replace(splatParam, '(.*?)');\r
-      return new RegExp('^' + route + '$');\r
-    },\r
-\r
-    // Given a route, and a URL fragment that it matches, return the array of\r
-    // extracted parameters.\r
-    _extractParameters: function(route, fragment) {\r
-      return route.exec(fragment).slice(1);\r
-    }\r
-\r
-  });\r
-\r
-  // Backbone.History\r
-  // ----------------\r
-\r
-  // Handles cross-browser history management, based on URL fragments. If the\r
-  // browser does not support `onhashchange`, falls back to polling.\r
-  Backbone.History = function() {\r
-    this.handlers = [];\r
-    _.bindAll(this, 'checkUrl');\r
-  };\r
-\r
-  // Cached regex for cleaning leading hashes and slashes .\r
-  var routeStripper = /^[#\/]/;\r
-\r
-  // Cached regex for detecting MSIE.\r
-  var isExplorer = /msie [\w.]+/;\r
-\r
-  // Has the history handling already been started?\r
-  var historyStarted = false;\r
-\r
-  // Set up all inheritable **Backbone.History** properties and methods.\r
-  _.extend(Backbone.History.prototype, Backbone.Events, {\r
-\r
-    // The default interval to poll for hash changes, if necessary, is\r
-    // twenty times a second.\r
-    interval: 50,\r
-\r
-    // Get the cross-browser normalized URL fragment, either from the URL,\r
-    // the hash, or the override.\r
-    getFragment: function(fragment, forcePushState) {\r
-      if (fragment == null) {\r
-        if (this._hasPushState || forcePushState) {\r
-          fragment = window.location.pathname;\r
-          var search = window.location.search;\r
-          if (search) fragment += search;\r
-        } else {\r
-          fragment = window.location.hash;\r
-        }\r
-      }\r
-      fragment = decodeURIComponent(fragment.replace(routeStripper, ''));\r
-      if (!fragment.indexOf(this.options.root)) fragment = fragment.substr(this.options.root.length);\r
-      return fragment;\r
-    },\r
-\r
-    // Start the hash change handling, returning `true` if the current URL matches\r
-    // an existing route, and `false` otherwise.\r
-    start: function(options) {\r
-\r
-      // Figure out the initial configuration. Do we need an iframe?\r
-      // Is pushState desired ... is it available?\r
-      if (historyStarted) throw new Error("Backbone.history has already been started");\r
-      this.options          = _.extend({}, {root: '/'}, this.options, options);\r
-      this._wantsHashChange = this.options.hashChange !== false;\r
-      this._wantsPushState  = !!this.options.pushState;\r
-      this._hasPushState    = !!(this.options.pushState && window.history && window.history.pushState);\r
-      var fragment          = this.getFragment();\r
-      var docMode           = document.documentMode;\r
-      var oldIE             = (isExplorer.exec(navigator.userAgent.toLowerCase()) && (!docMode || docMode <= 7));\r
-      if (oldIE) {\r
-        this.iframe = $('<iframe src="javascript:0" tabindex="-1" />').hide().appendTo('body')[0].contentWindow;\r
-        this.navigate(fragment);\r
-      }\r
-\r
-      // Depending on whether we're using pushState or hashes, and whether\r
-      // 'onhashchange' is supported, determine how we check the URL state.\r
-      if (this._hasPushState) {\r
-        $(window).bind('popstate', this.checkUrl);\r
-      } else if (this._wantsHashChange && ('onhashchange' in window) && !oldIE) {\r
-        $(window).bind('hashchange', this.checkUrl);\r
-      } else if (this._wantsHashChange) {\r
-        this._checkUrlInterval = setInterval(this.checkUrl, this.interval);\r
-      }\r
-\r
-      // Determine if we need to change the base url, for a pushState link\r
-      // opened by a non-pushState browser.\r
-      this.fragment = fragment;\r
-      historyStarted = true;\r
-      var loc = window.location;\r
-      var atRoot  = loc.pathname == this.options.root;\r
-\r
-      // If we've started off with a route from a `pushState`-enabled browser,\r
-      // but we're currently in a browser that doesn't support it...\r
-      if (this._wantsHashChange && this._wantsPushState && !this._hasPushState && !atRoot) {\r
-        this.fragment = this.getFragment(null, true);\r
-        window.location.replace(this.options.root + '#' + this.fragment);\r
-        // Return immediately as browser will do redirect to new url\r
-        return true;\r
-\r
-      // Or if we've started out with a hash-based route, but we're currently\r
-      // in a browser where it could be `pushState`-based instead...\r
-      } else if (this._wantsPushState && this._hasPushState && atRoot && loc.hash) {\r
-        this.fragment = loc.hash.replace(routeStripper, '');\r
-        window.history.replaceState({}, document.title, loc.protocol + '//' + loc.host + this.options.root + this.fragment);\r
-      }\r
-\r
-      if (!this.options.silent) {\r
-        return this.loadUrl();\r
-      }\r
-    },\r
-\r
-    // Disable Backbone.history, perhaps temporarily. Not useful in a real app,\r
-    // but possibly useful for unit testing Routers.\r
-    stop: function() {\r
-      $(window).unbind('popstate', this.checkUrl).unbind('hashchange', this.checkUrl);\r
-      clearInterval(this._checkUrlInterval);\r
-      historyStarted = false;\r
-    },\r
-\r
-    // Add a route to be tested when the fragment changes. Routes added later\r
-    // may override previous routes.\r
-    route: function(route, callback) {\r
-      this.handlers.unshift({route: route, callback: callback});\r
-    },\r
-\r
-    // Checks the current URL to see if it has changed, and if it has,\r
-    // calls `loadUrl`, normalizing across the hidden iframe.\r
-    checkUrl: function(e) {\r
-      var current = this.getFragment();\r
-      if (current == this.fragment && this.iframe) current = this.getFragment(this.iframe.location.hash);\r
-      if (current == this.fragment || current == decodeURIComponent(this.fragment)) return false;\r
-      if (this.iframe) this.navigate(current);\r
-      this.loadUrl() || this.loadUrl(window.location.hash);\r
-    },\r
-\r
-    // Attempt to load the current URL fragment. If a route succeeds with a\r
-    // match, returns `true`. If no defined routes matches the fragment,\r
-    // returns `false`.\r
-    loadUrl: function(fragmentOverride) {\r
-      var fragment = this.fragment = this.getFragment(fragmentOverride);\r
-      var matched = _.any(this.handlers, function(handler) {\r
-        if (handler.route.test(fragment)) {\r
-          handler.callback(fragment);\r
-          return true;\r
-        }\r
-      });\r
-      return matched;\r
-    },\r
-\r
-    // Save a fragment into the hash history, or replace the URL state if the\r
-    // 'replace' option is passed. You are responsible for properly URL-encoding\r
-    // the fragment in advance.\r
-    //\r
-    // The options object can contain `trigger: true` if you wish to have the\r
-    // route callback be fired (not usually desirable), or `replace: true`, if\r
-    // you which to modify the current URL without adding an entry to the history.\r
-    navigate: function(fragment, options) {\r
-      if (!historyStarted) return false;\r
-      if (!options || options === true) options = {trigger: options};\r
-      var frag = (fragment || '').replace(routeStripper, '');\r
-      if (this.fragment == frag || this.fragment == decodeURIComponent(frag)) return;\r
-\r
-      // If pushState is available, we use it to set the fragment as a real URL.\r
-      if (this._hasPushState) {\r
-        if (frag.indexOf(this.options.root) != 0) frag = this.options.root + frag;\r
-        this.fragment = frag;\r
-        window.history[options.replace ? 'replaceState' : 'pushState']({}, document.title, frag);\r
-\r
-      // If hash changes haven't been explicitly disabled, update the hash\r
-      // fragment to store history.\r
-      } else if (this._wantsHashChange) {\r
-        this.fragment = frag;\r
-        this._updateHash(window.location, frag, options.replace);\r
-        if (this.iframe && (frag != this.getFragment(this.iframe.location.hash))) {\r
-          // Opening and closing the iframe tricks IE7 and earlier to push a history entry on hash-tag change.\r
-          // When replace is true, we don't want this.\r
-          if(!options.replace) this.iframe.document.open().close();\r
-          this._updateHash(this.iframe.location, frag, options.replace);\r
-        }\r
-\r
-      // If you've told us that you explicitly don't want fallback hashchange-\r
-      // based history, then `navigate` becomes a page refresh.\r
-      } else {\r
-        window.location.assign(this.options.root + fragment);\r
-      }\r
-      if (options.trigger) this.loadUrl(fragment);\r
-    },\r
-\r
-    // Update the hash location, either replacing the current entry, or adding\r
-    // a new one to the browser history.\r
-    _updateHash: function(location, fragment, replace) {\r
-      if (replace) {\r
-        location.replace(location.toString().replace(/(javascript:|#).*$/, '') + '#' + fragment);\r
-      } else {\r
-        location.hash = fragment;\r
-      }\r
-    }\r
-  });\r
-\r
-  // Backbone.View\r
-  // -------------\r
-\r
-  // Creating a Backbone.View creates its initial element outside of the DOM,\r
-  // if an existing element is not provided...\r
-  Backbone.View = function(options) {\r
-    this.cid = _.uniqueId('view');\r
-    this._configure(options || {});\r
-    this._ensureElement();\r
-    this.initialize.apply(this, arguments);\r
-    this.delegateEvents();\r
-  };\r
-\r
-  // Cached regex to split keys for `delegate`.\r
-  var eventSplitter = /^(\S+)\s*(.*)$/;\r
-\r
-  // List of view options to be merged as properties.\r
-  var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName'];\r
-\r
-  // Set up all inheritable **Backbone.View** properties and methods.\r
-  _.extend(Backbone.View.prototype, Backbone.Events, {\r
-\r
-    // The default `tagName` of a View's element is `"div"`.\r
-    tagName: 'div',\r
-\r
-    // jQuery delegate for element lookup, scoped to DOM elements within the\r
-    // current view. This should be prefered to global lookups where possible.\r
-    $: function(selector) {\r
-      return $(selector, this.el);\r
-    },\r
-\r
-    // Initialize is an empty function by default. Override it with your own\r
-    // initialization logic.\r
-    initialize: function(){},\r
-\r
-    // **render** is the core function that your view should override, in order\r
-    // to populate its element (`this.el`), with the appropriate HTML. The\r
-    // convention is for **render** to always return `this`.\r
-    render: function() {\r
-      return this;\r
-    },\r
-\r
-    // Remove this view from the DOM. Note that the view isn't present in the\r
-    // DOM by default, so calling this method may be a no-op.\r
-    remove: function() {\r
-      this.$el.remove();\r
-      return this;\r
-    },\r
-\r
-    // For small amounts of DOM Elements, where a full-blown template isn't\r
-    // needed, use **make** to manufacture elements, one at a time.\r
-    //\r
-    //     var el = this.make('li', {'class': 'row'}, this.model.escape('title'));\r
-    //\r
-    make: function(tagName, attributes, content) {\r
-      var el = document.createElement(tagName);\r
-      if (attributes) $(el).attr(attributes);\r
-      if (content) $(el).html(content);\r
-      return el;\r
-    },\r
-\r
-    // Change the view's element (`this.el` property), including event\r
-    // re-delegation.\r
-    setElement: function(element, delegate) {\r
-      this.$el = $(element);\r
-      this.el = this.$el[0];\r
-      if (delegate !== false) this.delegateEvents();\r
-    },\r
-\r
-    // Set callbacks, where `this.events` is a hash of\r
-    //\r
-    // *{"event selector": "callback"}*\r
-    //\r
-    //     {\r
-    //       'mousedown .title':  'edit',\r
-    //       'click .button':     'save'\r
-    //       'click .open':       function(e) { ... }\r
-    //     }\r
-    //\r
-    // pairs. Callbacks will be bound to the view, with `this` set properly.\r
-    // Uses event delegation for efficiency.\r
-    // Omitting the selector binds the event to `this.el`.\r
-    // This only works for delegate-able events: not `focus`, `blur`, and\r
-    // not `change`, `submit`, and `reset` in Internet Explorer.\r
-    delegateEvents: function(events) {\r
-      if (!(events || (events = getValue(this, 'events')))) return;\r
-      this.undelegateEvents();\r
-      for (var key in events) {\r
-        var method = events[key];\r
-        if (!_.isFunction(method)) method = this[events[key]];\r
-        if (!method) throw new Error('Event "' + events[key] + '" does not exist');\r
-        var match = key.match(eventSplitter);\r
-        var eventName = match[1], selector = match[2];\r
-        method = _.bind(method, this);\r
-        eventName += '.delegateEvents' + this.cid;\r
-        if (selector === '') {\r
-          this.$el.bind(eventName, method);\r
-        } else {\r
-          this.$el.delegate(selector, eventName, method);\r
-        }\r
-      }\r
-    },\r
-\r
-    // Clears all callbacks previously bound to the view with `delegateEvents`.\r
-    // You usually don't need to use this, but may wish to if you have multiple\r
-    // Backbone views attached to the same DOM element.\r
-    undelegateEvents: function() {\r
-      this.$el.unbind('.delegateEvents' + this.cid);\r
-    },\r
-\r
-    // Performs the initial configuration of a View with a set of options.\r
-    // Keys with special meaning *(model, collection, id, className)*, are\r
-    // attached directly to the view.\r
-    _configure: function(options) {\r
-      if (this.options) options = _.extend({}, this.options, options);\r
-      for (var i = 0, l = viewOptions.length; i < l; i++) {\r
-        var attr = viewOptions[i];\r
-        if (options[attr]) this[attr] = options[attr];\r
-      }\r
-      this.options = options;\r
-    },\r
-\r
-    // Ensure that the View has a DOM element to render into.\r
-    // If `this.el` is a string, pass it through `$()`, take the first\r
-    // matching element, and re-assign it to `el`. Otherwise, create\r
-    // an element from the `id`, `className` and `tagName` properties.\r
-    _ensureElement: function() {\r
-      if (!this.el) {\r
-        var attrs = getValue(this, 'attributes') || {};\r
-        if (this.id) attrs.id = this.id;\r
-        if (this.className) attrs['class'] = this.className;\r
-        this.setElement(this.make(this.tagName, attrs), false);\r
-      } else {\r
-        this.setElement(this.el, false);\r
-      }\r
-    }\r
-\r
-  });\r
-\r
-  // The self-propagating extend function that Backbone classes use.\r
-  var extend = function (protoProps, classProps) {\r
-    var child = inherits(this, protoProps, classProps);\r
-    child.extend = this.extend;\r
-    return child;\r
-  };\r
-\r
-  // Set up inheritance for the model, collection, and view.\r
-  Backbone.Model.extend = Backbone.Collection.extend =\r
-    Backbone.Router.extend = Backbone.View.extend = extend;\r
-\r
-  // Backbone.sync\r
-  // -------------\r
-\r
-  // Map from CRUD to HTTP for our default `Backbone.sync` implementation.\r
-  var methodMap = {\r
-    'create': 'POST',\r
-    'update': 'PUT',\r
-    'delete': 'DELETE',\r
-    'read':   'GET'\r
-  };\r
-\r
-  // Override this function to change the manner in which Backbone persists\r
-  // models to the server. You will be passed the type of request, and the\r
-  // model in question. By default, makes a RESTful Ajax request\r
-  // to the model's `url()`. Some possible customizations could be:\r
-  //\r
-  // * Use `setTimeout` to batch rapid-fire updates into a single request.\r
-  // * Send up the models as XML instead of JSON.\r
-  // * Persist models via WebSockets instead of Ajax.\r
-  //\r
-  // Turn on `Backbone.emulateHTTP` in order to send `PUT` and `DELETE` requests\r
-  // as `POST`, with a `_method` parameter containing the true HTTP method,\r
-  // as well as all requests with the body as `application/x-www-form-urlencoded`\r
-  // instead of `application/json` with the model in a param named `model`.\r
-  // Useful when interfacing with server-side languages like **PHP** that make\r
-  // it difficult to read the body of `PUT` requests.\r
-  Backbone.sync = function(method, model, options) {\r
-    var type = methodMap[method];\r
-\r
-    // Default JSON-request options.\r
-    var params = {type: type, dataType: 'json'};\r
-\r
-    // Ensure that we have a URL.\r
-    if (!options.url) {\r
-      params.url = getValue(model, 'url') || urlError();\r
-    }\r
-\r
-    // Ensure that we have the appropriate request data.\r
-    if (!options.data && model && (method == 'create' || method == 'update')) {\r
-      params.contentType = 'application/json';\r
-      params.data = JSON.stringify(model.toJSON());\r
-    }\r
-\r
-    // For older servers, emulate JSON by encoding the request into an HTML-form.\r
-    if (Backbone.emulateJSON) {\r
-      params.contentType = 'application/x-www-form-urlencoded';\r
-      params.data = params.data ? {model: params.data} : {};\r
-    }\r
-\r
-    // For older servers, emulate HTTP by mimicking the HTTP method with `_method`\r
-    // And an `X-HTTP-Method-Override` header.\r
-    if (Backbone.emulateHTTP) {\r
-      if (type === 'PUT' || type === 'DELETE') {\r
-        if (Backbone.emulateJSON) params.data._method = type;\r
-        params.type = 'POST';\r
-        params.beforeSend = function(xhr) {\r
-          xhr.setRequestHeader('X-HTTP-Method-Override', type);\r
-        };\r
-      }\r
-    }\r
-\r
-    // Don't process data on a non-GET request.\r
-    if (params.type !== 'GET' && !Backbone.emulateJSON) {\r
-      params.processData = false;\r
-    }\r
-\r
-    // Make the request, allowing the user to override any Ajax options.\r
-    return $.ajax(_.extend(params, options));\r
-  };\r
-\r
-  // Wrap an optional error callback with a fallback error event.\r
-  Backbone.wrapError = function(onError, originalModel, options) {\r
-    return function(model, resp) {\r
-      var resp = model === originalModel ? resp : model;\r
-      if (onError) {\r
-        onError(model, resp, options);\r
-      } else {\r
-        originalModel.trigger('error', model, resp, options);\r
-      }\r
-    };\r
-  };\r
-\r
-  // Helpers\r
-  // -------\r
-\r
-  // Shared empty constructor function to aid in prototype-chain creation.\r
-  var ctor = function(){};\r
-\r
-  // Helper function to correctly set up the prototype chain, for subclasses.\r
-  // Similar to `goog.inherits`, but uses a hash of prototype properties and\r
-  // class properties to be extended.\r
-  var inherits = function(parent, protoProps, staticProps) {\r
-    var child;\r
-\r
-    // The constructor function for the new subclass is either defined by you\r
-    // (the "constructor" property in your `extend` definition), or defaulted\r
-    // by us to simply call the parent's constructor.\r
-    if (protoProps && protoProps.hasOwnProperty('constructor')) {\r
-      child = protoProps.constructor;\r
-    } else {\r
-      child = function(){ parent.apply(this, arguments); };\r
-    }\r
-\r
-    // Inherit class (static) properties from parent.\r
-    _.extend(child, parent);\r
-\r
-    // Set the prototype chain to inherit from `parent`, without calling\r
-    // `parent`'s constructor function.\r
-    ctor.prototype = parent.prototype;\r
-    child.prototype = new ctor();\r
-\r
-    // Add prototype properties (instance properties) to the subclass,\r
-    // if supplied.\r
-    if (protoProps) _.extend(child.prototype, protoProps);\r
-\r
-    // Add static properties to the constructor function, if supplied.\r
-    if (staticProps) _.extend(child, staticProps);\r
-\r
-    // Correctly set child's `prototype.constructor`.\r
-    child.prototype.constructor = child;\r
-\r
-    // Set a convenience property in case the parent's prototype is needed later.\r
-    child.__super__ = parent.prototype;\r
-\r
-    return child;\r
-  };\r
-\r
-  // Helper function to get a value from a Backbone object as a property\r
-  // or as a function.\r
-  var getValue = function(object, prop) {\r
-    if (!(object && object[prop])) return null;\r
-    return _.isFunction(object[prop]) ? object[prop]() : object[prop];\r
-  };\r
-\r
-  // Throw an error when a URL is needed, and none is supplied.\r
-  var urlError = function() {\r
-    throw new Error('A "url" property or function must be specified');\r
-  };\r
-\r
-}).call(this);\r
diff --git a/client/js/front.events.js b/client/js/front.events.js
deleted file mode 100755 (executable)
index cf02cf3..0000000
+++ /dev/null
@@ -1,654 +0,0 @@
-/*jslint browser: true, devel: true, sloppy: true, plusplus: true, nomen: true, forin: true, continue: true */\r
-/*globals kiwi, $, _, Tabview, Userlist, User, Box, init_data */\r
-/**\r
-*   @namespace\r
-*/\r
-kiwi.front.events = {\r
-\r
-    /**\r
-    *   Binds all of the event handlers to their events\r
-    */\r
-    bindAll: function () {\r
-        $(kiwi.gateway).bind('onmsg', this.onMsg)\r
-            .bind('onnotice', this.onNotice)\r
-            .bind('onaction', this.onAction)\r
-            .bind('onmotd', this.onMOTD)\r
-            .bind('onoptions', this.onOptions)\r
-            .bind('onconnect', this.onConnect)\r
-            .bind('onconnect_fail', this.onConnectFail)\r
-            .bind('ondisconnect', this.onDisconnect)\r
-            .bind('onreconnecting', this.onReconnecting)\r
-            .bind('onnick', this.onNick)\r
-            .bind('onuserlist', this.onUserList)\r
-            .bind('onuserlist_end', this.onUserListEnd)\r
-            .bind('onlist_start', this.onChannelListStart)\r
-            .bind('onlist_channel', this.onChannelList)\r
-            .bind('onlist_end', this.onChannelListEnd)\r
-            .bind('onbanlist', this.onBanList)\r
-            .bind('onbanlist_end', this.onBanListEnd)\r
-            .bind('onjoin', this.onJoin)\r
-            .bind('ontopic', this.onTopic)\r
-            .bind('ontopicsetby', this.onTopicSetBy)\r
-            .bind('onpart', this.onPart)\r
-            .bind('onkick', this.onKick)\r
-            .bind('onquit', this.onQuit)\r
-            .bind('onmode', this.onMode)\r
-            .bind('onwhois', this.onWhois)\r
-            .bind('onsync', this.onSync)\r
-            .bind('onchannel_redirect', this.onChannelRedirect)\r
-            .bind('ondebug', this.onDebug)\r
-            .bind('onctcp_request', this.onCTCPRequest)\r
-            .bind('onctcp_response', this.onCTCPResponse)\r
-            .bind('onirc_error', this.onIRCError)\r
-            .bind('onkiwi', this.onKiwi);\r
-    },\r
-\r
-    /**\r
-    *   Handles the msg event\r
-    *   @param  {eventObject}   e       The event object\r
-    *   @param  {Object}        data    The event data\r
-    */\r
-    onMsg: function (e, data) {\r
-        var destination, plugin_event, tab;\r
-        // Is this message from a user?\r
-        if (data.channel === kiwi.gateway.nick) {\r
-            destination = data.nick.toLowerCase();\r
-        } else {\r
-            destination = data.channel.toLowerCase();\r
-        }\r
-\r
-        plugin_event = {nick: data.nick, msg: data.msg, destination: destination};\r
-        plugin_event = kiwi.plugs.run('msg_recieved', plugin_event);\r
-        if (!plugin_event) {\r
-            return;\r
-        }\r
-        \r
-        var chan = kiwi.channels.getByName(plugin_event.destination);\r
-        if (chan) {\r
-            chan.addMsg(null, plugin_event.nick, plugin_event.msg);\r
-        }\r
-    },\r
-\r
-    /**\r
-    *   Handles the debug event\r
-    *   @param  {eventObject}   e       The event object\r
-    *   @param  {Object}        data    The event data\r
-    */\r
-    onDebug: function (e, data) {\r
-        var tab = Tabview.getTab('kiwi_debug');\r
-        if (!tab) {\r
-            tab = new Tabview('kiwi_debug');\r
-        }\r
-        tab.addMsg(null, ' ', data.msg);\r
-    },\r
-\r
-    /**\r
-    *   Handles the action event\r
-    *   @param  {eventObject}   e       The event object\r
-    *   @param  {Object}        data    The event data\r
-    */\r
-    onAction: function (e, data) {\r
-        var destination, tab;\r
-        // Is this message from a user?\r
-        if (data.channel === kiwi.gateway.nick) {\r
-            destination = data.nick;\r
-        } else {\r
-            destination = data.channel;\r
-        }\r
-\r
-        var chan = kiwi.channels.getByName(destination);\r
-        if (chan) {\r
-            chan.addMsg(null, ' ', '* ' + data.nick + ' ' + data.msg, 'action', 'color:#555;');\r
-        } else {\r
-            kiwi.channels.server.addMsg(null, ' ', '* ' + data.nick + ' ' + data.msg, 'action', 'color:#555;');\r
-        }\r
-    },\r
-\r
-    /**\r
-    *   Handles the topic event\r
-    *   @param  {eventObject}   e       The event object\r
-    *   @param  {Object}        data    The event data\r
-    */\r
-    onTopic: function (e, data) {\r
-        var chan = kiwi.channels.getByName(data.channel);\r
-        if (chan) {\r
-            chan.set({"topic": data.topic});\r
-            chan.addMsg(null, ' ', '=== Topic for ' + data.channel + ' is: ' + data.topic, 'topic');\r
-        }\r
-    },\r
-\r
-    /**\r
-    *   Handles the topicsetby event\r
-    *   @param  {eventObject}   e       The event object\r
-    *   @param  {Object}        data    The event data\r
-    */\r
-    onTopicSetBy: function (e, data) {\r
-        var when,\r
-            chan = kiwi.channels.getByName(data.channel);\r
-        if (chan) {\r
-            when = new Date(data.when * 1000).toLocaleString();\r
-            chan.addMsg(null, '', 'Topic set by ' + data.nick + ' at ' + when, 'topic');\r
-        }\r
-    },\r
-\r
-    /**\r
-    *   Handles the notice event\r
-    *   @param  {eventObject}   e       The event object\r
-    *   @param  {Object}        data    The event data\r
-    */\r
-    onNotice: function (e, data) {\r
-        var nick = (data.nick === undefined) ? '' : data.nick,\r
-            enick = '[' + nick + ']',\r
-            chan;\r
-\r
-        chan = kiwi.channels.getByName(data.channel);\r
-        if (chan) {\r
-            chan.addMsg(null, enick, data.msg, 'notice');\r
-        } else {\r
-            kiwi.channels.server.addMsg(null, enick, data.msg, 'notice');\r
-        }\r
-    },\r
-\r
-    /**\r
-    *   Handles the CTCP request event\r
-    *   @param  {eventObject}   e       The event object\r
-    *   @param  {Object}        data    The event data\r
-    */\r
-    onCTCPRequest: function (e, data) {\r
-        var msg = data.msg.split(" ", 2);\r
-        switch (msg[0]) {\r
-        case 'PING':\r
-            if (typeof msg[1] === 'undefined') {\r
-                msg[1] = '';\r
-            }\r
-            kiwi.gateway.ctcp(false, 'PING', data.nick, msg[1]);\r
-            break;\r
-        case 'TIME':\r
-            kiwi.gateway.ctcp(false, 'TIME', data.nick, (new Date()).toLocaleString());\r
-            break;\r
-        }\r
-        kiwi.channels.server.addMsg(null, 'CTCP Request', '[from ' + data.nick + '] ' + data.msg, 'ctcp');\r
-        \r
-    },\r
-\r
-    /**\r
-    *   Handles the CTCP response event\r
-    *   @param  {eventObject}   e       The event object\r
-    *   @param  {Object}        data    The event data\r
-    */\r
-    onCTCPResponse: function (e, data) {\r
-        kiwi.channels.server.addMsg(null, 'CTCP Reply', '[from ' + data.nick + '] ' + data.msg, 'ctcp');\r
-    },\r
-\r
-    /**\r
-    *   Handles the kiwi event\r
-    *   @param  {eventObject}   e       The event object\r
-    *   @param  {Object}        data    The event data\r
-    */\r
-    onKiwi: function (e, data) {\r
-        //console.log(data);\r
-    },\r
-\r
-    /**\r
-    *   Handles the connect event\r
-    *   @param  {eventObject}   e       The event object\r
-    *   @param  {Object}        data    The event data\r
-    */\r
-    onConnect: function (e, data) {\r
-        var err_box, channels;\r
-\r
-        if (data.connected) {\r
-            // Did we disconnect?\r
-            err_box = $('.messages .msg.error.disconnect .text');\r
-            if (typeof err_box[0] !== 'undefined') {\r
-                err_box.text('Reconnected OK :)');\r
-                err_box.parent().removeClass('disconnect');\r
-\r
-                // Rejoin channels\r
-                //channels = '';\r
-                //_.each(Tabview.getAllTabs(), function (tabview) {\r
-                //    if (tabview.name === 'server') {\r
-                //        return;\r
-                //    }\r
-                //    channels += tabview.name + ',';\r
-                //});\r
-                //console.log('Rejoining: ' + channels);\r
-                //kiwi.gateway.join(channels);\r
-                return;\r
-            }\r
-\r
-            if (kiwi.gateway.nick !== data.nick) {\r
-                kiwi.gateway.nick = data.nick;\r
-                kiwi.front.ui.doLayout();\r
-            }\r
-\r
-            kiwi.channels.server.addMsg(null, ' ', '=== Connected OK :)', 'status');\r
-            if (typeof init_data.channel === "string") {\r
-                kiwi.front.joinChannel(init_data.channel);\r
-            }\r
-            kiwi.plugs.run('connect', {success: true});\r
-        } else {\r
-            kiwi.channels.server.addMsg(null, ' ', '=== Failed to connect :(', 'status');\r
-            kiwi.plugs.run('connect', {success: false});\r
-        }\r
-\r
-        // Now that we're connected, warn the user if they really want to quit\r
-        kiwi.front.ui.preventRefresh();\r
-    },\r
-    /**\r
-    *   Handles the connectFail event\r
-    *   @param  {eventObject}   e       The event object\r
-    *   @param  {Object}        data    The event data\r
-    */\r
-    onConnectFail: function (e, data) {\r
-        var reason = (typeof data.reason === 'string') ? data.reason : '';\r
-        kiwi.channels.server.addMsg(null, '', 'There\'s a problem connecting! (' + reason + ')', 'error');\r
-        kiwi.plugs.run('connect', {success: false});\r
-    },\r
-    /**\r
-    *   Handles the disconnect event\r
-    *   @param  {eventObject}   e       The event object\r
-    *   @param  {Object}        data    The event data\r
-    */\r
-    onDisconnect: function (e, data) {\r
-        var tab, tabs;\r
-        //tabs = Tabview.getAllTabs();\r
-        //for (tab in tabs) {\r
-        //    tabs[tab].addMsg(null, '', 'Disconnected from server!', 'error disconnect');\r
-        //}\r
-        kiwi.plugs.run('disconnect', {success: false});\r
-    },\r
-    /**\r
-    *   Handles the reconnecting event\r
-    *   @param  {eventObject}   e       The event object\r
-    *   @param  {Object}        data    The event data\r
-    */\r
-    onReconnecting: function (e, data) {\r
-        var err_box, f, msg, mins, secs;\r
-\r
-        err_box = $('.messages .msg.error.disconnect .text');\r
-        if (!err_box) {\r
-            return;\r
-        }\r
-\r
-        /**\r
-        *   @inner\r
-        */\r
-        f = function (num) {\r
-            switch (num) {\r
-            case 1: return 'First';\r
-            case 2: return 'Second';\r
-            case 3: return 'Third';\r
-            case 4: return 'Fourth';\r
-            case 5: return 'Fifth';\r
-            case 6: return 'Sixth';\r
-            case 7: return 'Seventh';\r
-            default: return 'Next';\r
-            }\r
-        };\r
-\r
-        secs = Math.floor(data.delay / 1000);\r
-        mins = Math.floor(secs / 60);\r
-        secs = secs % 60;\r
-        if (mins > 0) {\r
-            msg = f(data.attempts) + ' attempt at reconnecting in ' + mins + ' minute' + ((mins > 1) ? 's' : '') + ', ' + secs + ' second' + (((secs > 1) || (secs === 0)) ? 's' : '') + '...';\r
-        } else {\r
-            msg = f(data.attempts) + ' attempt at reconnecting in ' + secs + ' second' + (((secs > 1) || (secs === 0)) ? 's' : '') + '...';\r
-        }\r
-\r
-        err_box.text(msg);\r
-    },\r
-    /**\r
-    *   Handles the options event\r
-    *   @param  {eventObject}   e       The event object\r
-    *   @param  {Object}        data    The event data\r
-    */\r
-    onOptions: function (e, data) {\r
-        if (typeof kiwi.gateway.network_name === "string" && kiwi.gateway.network_name !== "") {\r
-            kiwi.channels.server.set({"name": kiwi.gateway.network_name});\r
-        }\r
-    },\r
-    /**\r
-    *   Handles the MOTD event\r
-    *   @param  {eventObject}   e       The event object\r
-    *   @param  {Object}        data    The event data\r
-    */\r
-    onMOTD: function (e, data) {\r
-        kiwi.channels.server.addMsg(null, data.server, data.msg, 'motd');\r
-    },\r
-    /**\r
-    *   Handles the whois event\r
-    *   @param  {eventObject}   e       The event object\r
-    *   @param  {Object}        data    The event data\r
-    */\r
-    onWhois: function (e, data) {\r
-        /*globals secondsToTime */\r
-        var d, tab, idle_time = '';\r
-\r
-        if (data.end) {\r
-            return;\r
-        }\r
-\r
-        if (typeof data.idle !== 'undefined') {\r
-            idle_time = secondsToTime(parseInt(data.idle, 10));\r
-            idle_time = idle_time.h.toString().lpad(2, "0") + ':' + idle_time.m.toString().lpad(2, "0") + ':' + idle_time.s.toString().lpad(2, "0");\r
-        }\r
-\r
-        tab = kiwi.currentPanel;\r
-        if (data.msg) {\r
-            tab.addMsg(null, data.nick, data.msg, 'whois');\r
-        } else if (data.logon) {\r
-            d = new Date();\r
-            d.setTime(data.logon * 1000);\r
-            d = d.toLocaleString();\r
-\r
-            tab.addMsg(null, data.nick, 'idle for ' + idle_time + ', signed on ' + d, 'whois');\r
-        } else {\r
-            tab.addMsg(null, data.nick, 'idle for ' + idle_time, 'whois');\r
-        }\r
-    },\r
-    /**\r
-    *   Handles the mode event\r
-    *   @param  {eventObject}   e       The event object\r
-    *   @param  {Object}        data    The event data\r
-    */\r
-    onMode: function (e, data) {\r
-        var tab, mem;\r
-        if ((typeof data.channel === 'string') && (typeof data.effected_nick === 'string')) {\r
-            chan = kiwi.channels.getByName(data.channel);\r
-            if (chan) {\r
-                chan.addMsg(null, ' ', '[' + data.mode + '] ' + data.effected_nick + ' by ' + data.nick, 'mode', '');\r
-                mem = _.detect(chan.get("members"), function (m) {\r
-                    return data.effected_nick === m.get("nick");\r
-                });\r
-                if (mem) {\r
-                    if (data.mode[0] === '+') {\r
-                        mem.addMode(data.mode);\r
-                    } else {\r
-                        mem.removeMode(data.mode);\r
-                    }\r
-                }\r
-            }\r
-        }\r
-        // TODO: Other mode changes that aren't +/- qaohv. - JA\r
-    },\r
-    /**\r
-    *   Handles the userList event\r
-    *   @param  {eventObject}   e       The event object\r
-    *   @param  {Object}        data    The event data\r
-    */\r
-    onUserList: function (e, data) {\r
-        var tab, chan;\r
-        chan = kiwi.channels.getByName(data.channel);\r
-        if (chan) {\r
-            if ((!kiwi.front.cache.userlist) || (!kiwi.front.cache.userlist.updating)) {\r
-                if (!kiwi.front.cache.userlist) {\r
-                    kiwi.front.cache.userlist = {updating: true};\r
-                } else {\r
-                    kiwi.front.cache.userlist.updating = true;\r
-                }\r
-                chan.get("members").reset([],{"silent": true});\r
-            }\r
-            _.forEach(data.users, function (u) {\r
-                chan.get("members").add(new kiwi.model.Member(u), {"silent": true});\r
-            });\r
-        }\r
-    },\r
-    /**\r
-    *   Handles the userListEnd event\r
-    *   @param  {eventObject}   e       The event object\r
-    *   @param  {Object}        data    The event data\r
-    */\r
-    onUserListEnd: function (e, data) {\r
-        var chan;\r
-        if (!kiwi.front.cache.userlist) {\r
-            kiwi.front.cache.userlist = {};\r
-        }\r
-        kiwi.front.cache.userlist.updating = false;\r
-        chan = kiwi.channels.getByName(data.channel);\r
-        if (chan) {\r
-            chan.get("members").trigger("change");\r
-        }\r
-    },\r
-\r
-    /**\r
-    *   Handles the channelListStart event\r
-    *   @param  {eventObject}   e       The event object\r
-    *   @param  {Object}        data    The event data\r
-    */\r
-    onChannelListStart: function (e, data) {\r
-        /*global ChannelList */\r
-        kiwi.front.cache.list = new ChannelList();\r
-        console.profile('list');\r
-    },\r
-    /**\r
-    *   Handles the channelList event\r
-    *   @param  {eventObject}   e       The event object\r
-    *   @param  {Object}        data    The event data\r
-    */\r
-    onChannelList: function (e, data) {\r
-        kiwi.front.cache.list.addChannel(data.chans);\r
-    },\r
-    /**\r
-    *   Handles the channelListEnd event\r
-    *   @param  {eventObject}   e       The event object\r
-    *   @param  {Object}        data    The event data\r
-    */\r
-    onChannelListEnd: function (e, data) {\r
-        kiwi.front.cache.list.show();\r
-        console.profileEnd();\r
-    },\r
-\r
-    /**\r
-    *   Handles the banList event\r
-    *   @param  {eventObject}   e       The event object\r
-    *   @param  {Object}        data    The event data\r
-    */\r
-    onBanList: function (e, data) {\r
-    },\r
-\r
-    /**\r
-    *   Handles the banListEnd event\r
-    *   @param  {eventObject}   e       The event object\r
-    *   @param  {Object}        data    The event data\r
-    */\r
-    onBanListEnd: function (e, data) {\r
-    },\r
-\r
-    /**\r
-    *   Handles the join event\r
-    *   @param  {eventObject}   e       The event object\r
-    *   @param  {Object}        data    The event data\r
-    */\r
-    onJoin: function (e, data) {\r
-        var chan = kiwi.channels.getByName(data.channel);\r
-        if (!chan) {\r
-            chan = new kiwi.model.Channel({"name": data.channel.toLowerCase()});\r
-            kiwi.channels.add(chan);\r
-            // No need to add ourselves to the MemberList as RPL_NAMESREPLY will be next\r
-            chan.view.show();\r
-        } else {\r
-            chan.get("members").add(new kiwi.model.Member({"nick": data.nick, "modes": [], "ident": data.ident, "hostname": data.hostname}));\r
-        }\r
-    },\r
-    /**\r
-    *   Handles the part event\r
-    *   @param  {eventObject}   e       The event object\r
-    *   @param  {Object}        data    The event data\r
-    */\r
-    onPart: function (e, data) {\r
-        var chan, members, cid;\r
-        chan = kiwi.channels.getByName(data.channel);\r
-        if (chan) {\r
-            if (data.nick === kiwi.gateway.nick) {\r
-                chan.trigger("close");\r
-            } else {\r
-                members = chan.get("members");\r
-                members.remove(members.detect(function (m) {\r
-                    return data.nick === m.get("nick");\r
-                }).cid, {"message": data.message})\r
-            }\r
-        }\r
-    },\r
-    /**\r
-    *   Handles the kick event\r
-    *   @param  {eventObject}   e       The event object\r
-    *   @param  {Object}        data    The event data\r
-    */\r
-    onKick: function (e, data) {\r
-        var panel = kiwi.channels.getByName(data.channel);\r
-        if (panel) {\r
-            // If this is us, close the panel\r
-            if (data.kicked === kiwi.gateway.nick) {\r
-                kiwi.channels.remove(panel);\r
-                kiwi.channels.server.addMsg(null, ' ', '=== You have been kicked from ' + data.channel + '. ' + data.message, 'status kick');\r
-                return;\r
-            }\r
-\r
-            panel.addMsg(null, ' ', '<-- ' + data.kicked + ' kicked by ' + data.nick + '(' + data.message + ')', 'action kick', 'color:#990000;');\r
-            panel.userlist.removeUser(data.nick);\r
-        }\r
-    },\r
-    /**\r
-    *   Handles the nick event\r
-    *   @param  {eventObject}   e       The event object\r
-    *   @param  {Object}        data    The event data\r
-    */\r
-    onNick: function (e, data) {\r
-        if (data.nick === kiwi.gateway.nick) {\r
-            kiwi.gateway.nick = data.newnick;\r
-            kiwi.front.ui.doLayout();\r
-        }\r
-\r
-        kiwi.channels.each(function (panel) {\r
-            if (panel.isChannel) {\r
-                var member = panel.get("members").getByNick(data.nick);\r
-                if (member) {\r
-                    member.set({"nick": data.newnick});\r
-                    panel.addMsg(null, ' ', '=== ' + data.nick + ' is now known as ' + data.newnick, 'action changenick');\r
-                }\r
-            }\r
-        });\r
-    },\r
-    /**\r
-    *   Handles the quit event\r
-    *   @param  {eventObject}   e       The event object\r
-    *   @param  {Object}        data    The event data\r
-    */\r
-    onQuit: function (e, data) {\r
-        var chan, members, member;\r
-        kiwi.channels.forEach(function (chan) {\r
-            members = chan.get("members");\r
-            member = members.detect(function (m) {\r
-                return data.nick === m.get("nick");\r
-            });\r
-            if (member) {\r
-                members.trigger("quit", {"member": member, "message": data.message});\r
-                members.remove(member.cid);\r
-            }\r
-        });\r
-    },\r
-    /**\r
-    *   Handles the channelRedirect event\r
-    *   @param  {eventObject}   e       The event object\r
-    *   @param  {Object}        data    The event data\r
-    */\r
-    onChannelRedirect: function (e, data) {\r
-        //var tab = Tabview.getTab(data.from);\r
-        //tab.close();\r
-        //tab = new Tabview(data.to);\r
-        //tab.addMsg(null, ' ', '=== Redirected from ' + data.from, 'action');\r
-    },\r
-\r
-    /**\r
-    *   Handles the IRCError event\r
-    *   @param  {eventObject}   e       The event object\r
-    *   @param  {Object}        data    The event data\r
-    */\r
-    onIRCError: function (e, data) {\r
-        /*var t_view,\r
-            tab = Tabview.getTab(data.channel);\r
-        if (data.channel !== undefined && tab) {\r
-            t_view = data.channel;\r
-        } else {\r
-            t_view = 'server';\r
-            tab = Tabview.getServerTab();\r
-        }\r
-\r
-        switch (data.error) {\r
-        case 'banned_from_channel':\r
-            tab.addMsg(null, ' ', '=== You are banned from ' + data.channel + '. ' + data.reason, 'status');\r
-            if (t_view !== 'server') {\r
-                tab.safe_to_close = true;\r
-            }\r
-            break;\r
-        case 'bad_channel_key':\r
-            tab.addMsg(null, ' ', '=== Bad channel key for ' + data.channel, 'status');\r
-            if (t_view !== 'server') {\r
-                tab.safe_to_close = true;\r
-            }\r
-            break;\r
-        case 'invite_only_channel':\r
-            tab.addMsg(null, ' ', '=== ' + data.channel + ' is invite only.', 'status');\r
-            if (t_view !== 'server') {\r
-                tab.safe_to_close = true;\r
-            }\r
-            break;\r
-        case 'channel_is_full':\r
-            tab.addMsg(null, ' ', '=== ' + data.channel + ' is full.', 'status');\r
-            if (t_view !== 'server') {\r
-                tab.safe_to_close = true;\r
-            }\r
-            break;\r
-        case 'chanop_privs_needed':\r
-            tab.addMsg(null, ' ', '=== ' + data.reason, 'status');\r
-            break;\r
-        case 'no_such_nick':\r
-            Tabview.getServerTab().addMsg(null, ' ', '=== ' + data.nick + ': ' + data.reason, 'status');\r
-            break;\r
-        case 'nickname_in_use':\r
-            Tabview.getServerTab().addMsg(null, ' ', '=== The nickname ' + data.nick + ' is already in use. Please select a new nickname', 'status');\r
-            kiwi.front.ui.showChangeNick('That nick is already taken');\r
-            break;\r
-        default:\r
-            // We don't know what data contains, so don't do anything with it.\r
-            console.log(e, data);\r
-        }*/\r
-    },\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-    /**\r
-    *   Handles the sync event\r
-    *   @param  {eventObject}   e       The event object\r
-    *   @param  {Object}        data    The event data\r
-    */\r
-    onSync: function (e, data) {\r
-        // Set any settings\r
-        if (data.nick !== undefined) {\r
-            kiwi.gateway.nick = data.nick;\r
-        }\r
-\r
-        // Add the tabviews\r
-        if (data.tabviews !== undefined) {\r
-            _.each(data.tabviews, function (tab) {\r
-                var newTab;\r
-                if (!Tabview.tabExists(tab.name)) {\r
-                    newTab = new Tabview(kiwi.gateway.channel_prefix + tab.name);\r
-\r
-                    if (tab.userlist !== undefined) {\r
-                        kiwi.front.events.onUserList({'channel': kiwi.gateway.channel_prefix + tab.name, 'users': tab.userlist.getUsers(false)});\r
-                    }\r
-                }\r
-            });\r
-        }\r
-\r
-        kiwi.front.ui.doLayout();\r
-    }\r
-\r
-\r
-};
\ No newline at end of file
diff --git a/client/js/front.js b/client/js/front.js
deleted file mode 100755 (executable)
index 005cffa..0000000
+++ /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
-        $('<div id="nicklist_resize"></div>').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 <br/>
-        $('#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 = '<b>';
-            while (msg.indexOf(String.fromCharCode(2)) !== -1) {
-                msg = msg.replace(String.fromCharCode(2), next);
-                next = (next === '<b>') ? '</b>' : '<b>';
-            }
-            if (next === '</b>') {
-                msg = msg + '</b>';
-            }
-        }
-
-        // underline
-        if (msg.indexOf(String.fromCharCode(31)) !== -1) {
-            next = '<u>';
-            while (msg.indexOf(String.fromCharCode(31)) !== -1) {
-                msg = msg.replace(String.fromCharCode(31), next);
-                next = (next === '<u>') ? '</u>' : '<u>';
-            }
-            if (next === '</u>') {
-                msg = msg + '</u>';
-            }
-        }
-
-        // 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 += '<span style="' + ((fg !== null) ? 'color: ' + fg + '; ' : '') + ((bg !== null) ? 'background-color: ' + bg + ';' : '') + '">' + str + '</span>';
-                        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 style="margin:1em 2em;"><thead style="font-weight: bold;"><tr><td>Channel Name</td><td>Members</td><td style="padding-left: 2em;">Topic</td></tr></thead><tbody style="vertical-align: top;"></tbody>');
-    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 = $('<tr><td><a class="chan">' + chan.channel + '</a></td><td class="num_users" style="text-align: center;">' + chan.num_users + '</td><td style="padding-left: 2em;">' + kiwi.front.formatIRCMsg(chan.topic) + '</td></tr>');
-                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('<div id="' + tmp_divname + '" class="messages"></div>');
-    } else {
-        $('.scroller', this.panel).append('<div id="' + tmp_divname + '" class="messages"></div>');
-    }
-
-    this.tab = $('<li id="' + tmp_tabname + '">' + this.title + '</li>');
-    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 = '<img src="/img/redcross.png" class="tab_part" />';
-    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 = $('<div id="' + this.id + '" class="box ' + classname + '"><div class="boxarea"></div></div>');
-    $('#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 (executable)
index e7d2eb4..0000000
+++ /dev/null
@@ -1,490 +0,0 @@
-/*jslint browser: true, devel: true, sloppy: true, plusplus: true, nomen: true, forin: true, continue: true */\r
-/*globals kiwi, $, _, Tabview, Userlist, User, Box */\r
-/**\r
-*   @namespace\r
-*/\r
-kiwi.front.ui = {\r
-\r
-    /**\r
-    *\r
-    */\r
-    doLayoutSize: function () {\r
-        var kiwi, toolbars, ul, n_top, n_bottom, nl;\r
-        kiwi = $('#kiwi');\r
-\r
-        if (kiwi.width() < 330 && !kiwi.hasClass('small_kiwi')) {\r
-            console.log("switching to small kiwi");\r
-            kiwi.removeClass('large_kiwi');\r
-            kiwi.addClass('small_kiwi');\r
-        } else if (kiwi.width() >= 330 && !kiwi.hasClass('large_kiwi')) {\r
-            kiwi.removeClass('small_kiwi');\r
-            kiwi.addClass('large_kiwi');\r
-        }\r
-\r
-        toolbars = $('#kiwi .toolbars');\r
-        ul = $('#kiwi .userlist');\r
-\r
-        n_top = parseInt(toolbars.offset().top, 10) + parseInt(toolbars.outerHeight(true), 10);\r
-        n_bottom = $(document).height() - parseInt($('#kiwi .control').offset().top, 10);\r
-\r
-        $('#kiwi .windows').css({top: n_top + 'px', bottom: n_bottom + 'px'});\r
-        ul.css({top: n_top + 'px', bottom: n_bottom + 'px'});\r
-\r
-        nl = $('#nicklist_resize');\r
-        nl.css({top: n_top + 'px', bottom: n_bottom + 'px', left: $(document).width() - ul.outerWidth(true)});\r
-    },\r
-\r
-    /**\r
-    *\r
-    */\r
-    doLayout: function () {\r
-        $('#kiwi .msginput .nick a').text(kiwi.gateway.nick);\r
-        $('#kiwi_msginput').val(' ');\r
-        $('#kiwi_msginput').focus();\r
-    },\r
-\r
-    /**\r
-    *   Binds keyboard and mouse events to handlers\r
-    */\r
-    registerKeys: function () {\r
-        var tabcomplete = {active: false, data: [], prefix: ''};\r
-        $('#kiwi_msginput').bind('keydown', function (e) {\r
-            var windows, meta, num, msg, data, self;\r
-            windows = $('#windows');\r
-\r
-            if (navigator.appVersion.indexOf("Mac") !== -1) {\r
-                meta = e.ctrlKey;\r
-            } else {\r
-                meta = e.altKey;\r
-            }\r
-\r
-            if (e.which !== 9) {\r
-                tabcomplete.active = false;\r
-                tabcomplete.data = [];\r
-                tabcomplete.prefix = '';\r
-            }\r
-\r
-            switch (true) {\r
-            case (e.which >= 48) && (e.which <= 57):\r
-                if (meta) {\r
-                    num = e.which - 48;\r
-                    if (num === 0) {\r
-                        num = 10;\r
-                    }\r
-                    num = num - 1;\r
-                    kiwi.front.ui.windowsShow(num);\r
-                    return false;\r
-                }\r
-                break;\r
-            case e.which === 27:            // escape                    \r
-                return false;\r
-            case e.which === 13:            // return\r
-                msg = $('#kiwi_msginput').val();\r
-                msg = msg.trim();\r
-\r
-                kiwi.front.buffer.push(msg);\r
-                kiwi.front.buffer_pos = kiwi.front.buffer.length;\r
-\r
-                kiwi.front.run(msg);\r
-                $('#kiwi_msginput').val('');\r
-\r
-                break;\r
-            case e.which === 33:             // page up\r
-                console.log("page up");\r
-                windows[0].scrollTop = windows[0].scrollTop - windows.height();\r
-                return false;\r
-            case e.which === 34:             // page down\r
-                windows[0].scrollTop = windows[0].scrollTop + windows.height();\r
-                return false;\r
-            case e.which === 37:            // left\r
-                if (meta) {\r
-                    kiwi.front.ui.windowsPrevious();\r
-                    return false;\r
-                }\r
-                break;\r
-            case e.which === 38:            // up\r
-                if (kiwi.front.buffer_pos > 0) {\r
-                    kiwi.front.buffer_pos--;\r
-                    $('#kiwi_msginput').val(kiwi.front.buffer[kiwi.front.buffer_pos]);\r
-                }\r
-                break;\r
-            case e.which === 39:            // right\r
-                if (meta) {\r
-                    kiwi.front.ui.windowsNext();\r
-                    return false;\r
-                }\r
-                break;\r
-            case e.which === 40:            // down\r
-                if (kiwi.front.buffer_pos < kiwi.front.buffer.length) {\r
-                    kiwi.front.buffer_pos++;\r
-                    $('#kiwi_msginput').val(kiwi.front.buffer[kiwi.front.buffer_pos]);\r
-                }\r
-                break;\r
-\r
-            case e.which === 9:                // tab\r
-                tabcomplete.active = true;\r
-                if (_.isEqual(tabcomplete.data, [])) {\r
-                    // Get possible autocompletions\r
-                    data = [];\r
-                    $.each(Tabview.getCurrentTab().userlist.listUsers(false), function () {\r
-                        var nick;\r
-                        nick = User.stripPrefix(this.nick);\r
-                        data.push(nick);\r
-                    });\r
-                    data = _.sortBy(data, function (nick) {\r
-                        return nick;\r
-                    });\r
-                    tabcomplete.data = data;\r
-                }\r
-\r
-                if (this.value[this.selectionStart - 1] === ' ') {\r
-                    return false;\r
-                }\r
-                self = this;\r
-                (function () {\r
-                    var tokens = self.value.substring(0, self.selectionStart).split(" "),\r
-                        val,\r
-                        p1,\r
-                        newnick,\r
-                        range,\r
-                        nick = tokens[tokens.length - 1];\r
-                    if (tabcomplete.prefix === '') {\r
-                        tabcomplete.prefix = nick;\r
-                    }\r
-\r
-                    tabcomplete.data = _.select(tabcomplete.data, function (n) {\r
-                        return (n.toLowerCase().indexOf(tabcomplete.prefix.toLowerCase()) === 0);\r
-                    });\r
-\r
-                    if (tabcomplete.data.length > 0) {\r
-                        p1 = self.selectionStart - (nick.length);\r
-                        val = self.value.substr(0, p1);\r
-                        newnick = tabcomplete.data.shift();\r
-                        tabcomplete.data.push(newnick);\r
-                        val += newnick;\r
-                        val += self.value.substr(self.selectionStart);\r
-                        self.value = val;\r
-                        if (self.setSelectionRange) {\r
-                            self.setSelectionRange(p1 + newnick.length, p1 + newnick.length);\r
-                        } else if (self.createTextRange) { // not sure if this bit is actually needed....\r
-                            range = self.createTextRange();\r
-                            range.collapse(true);\r
-                            range.moveEnd('character', p1 + newnick.length);\r
-                            range.moveStart('character', p1 + newnick.length);\r
-                            range.select();\r
-                        }\r
-                    }\r
-                }());\r
-                return false;\r
-            }\r
-        });\r
-\r
-\r
-        $('#kiwi .control .msginput .nick').click(function () {\r
-            kiwi.front.ui.showChangeNick();\r
-        });\r
-\r
-\r
-\r
-\r
-\r
-        $('#kiwi .plugins .load_plugin_file').click(function () {\r
-            if (typeof kiwi.front.boxes.plugins !== "undefined") {\r
-                return;\r
-            }\r
-\r
-            kiwi.front.boxes.plugins = new Box("plugin_file");\r
-            $('#tmpl_plugins').tmpl({}).appendTo(kiwi.front.boxes.plugins.content);\r
-            kiwi.front.boxes.plugins.box.css('top', -(kiwi.front.boxes.plugins.height + 40));\r
-\r
-            // Populate the plugin list..\r
-            function enumPlugins() {\r
-                var lst, j, txt;\r
-                lst = $('#plugin_list');\r
-                lst.find('option').remove();\r
-                for (j in kiwi.plugs.loaded) {\r
-                    txt = kiwi.plugs.loaded[j].name;\r
-                    lst.append('<option value="' + txt + '">' + txt + '</option>');\r
-                }\r
-            }\r
-            enumPlugins();\r
-\r
-            // Event bindings\r
-            $('#kiwi .plugin_file').submit(function () {\r
-                $('<div></div>').load($('.txtpluginfile').val(), function (e) {\r
-                    enumPlugins();\r
-                });\r
-                return false;\r
-            });\r
-            $('#kiwi .cancelpluginfile').click(function () {\r
-                kiwi.front.boxes.plugins.destroy();\r
-            });\r
-\r
-            $('#kiwi #plugins_list_unload').click(function () {\r
-                var selected_plugin;\r
-                selected_plugin = $('#plugin_list').val();\r
-                kiwi.plugs.unloadPlugin(selected_plugin);\r
-                enumPlugins();\r
-            });\r
-\r
-            $('#kiwi .txtpluginfile').focus();\r
-\r
-        });\r
-\r
-        $('#kiwi .plugins .reload_css').click(function () {\r
-            var links = document.getElementsByTagName("link"),\r
-                i;\r
-            for (i = 0; i < links.length; i++) {\r
-                if (links[i].rel === "stylesheet") {\r
-                    if (links[i].href.indexOf("?") === -1) {\r
-                        links[i].href += "?";\r
-                    }\r
-                    links[i].href += "x";\r
-                }\r
-            }\r
-        });\r
-\r
-\r
-        $('#kiwi .about .about_close').click(function () {\r
-            $('#kiwi .about').css('display', 'none');\r
-        });\r
-\r
-\r
-        $('#kiwi .poweredby').click(function () {\r
-            $('#kiwi .about').css('display', 'block');\r
-        });\r
-\r
-    },\r
-\r
-    /**\r
-    *   Prevents the user from accidentally refreshing the page by pressing F5 or <meta> + R\r
-    */\r
-    preventRefresh: function () {\r
-        $(document).keydown(function (e) {\r
-            // meta + r || F5\r
-            if ((e.metaKey && e.which === 82) || e.which === 116) {\r
-                e.preventDefault();\r
-                e.stopPropagation();\r
-\r
-                // Reset IE keyCode\r
-                event.keyCode = 0;\r
-\r
-                return false;\r
-            }\r
-        });\r
-    },\r
-\r
-    /**\r
-    *   Prompts user for a new nick\r
-    */\r
-    showChangeNick: function (caption) {\r
-        caption = (typeof caption !== 'undefined') ? caption : '';\r
-\r
-        $('#kiwi').append($('#tmpl_change_nick').tmpl({}));\r
-\r
-        $('#kiwi .newnick .caption').text(caption);\r
-\r
-        $('#kiwi .form_newnick').submit(function () {\r
-            kiwi.front.run('/NICK ' + $('#kiwi .txtnewnick').val());\r
-            $('#kiwi .newnick').remove();\r
-            return false;\r
-        });\r
-\r
-        $('#kiwi .txtnewnick').keypress(function (ev) {\r
-            if (!this.first_press) {\r
-                this.first_press = true;\r
-                return false;\r
-            }\r
-        });\r
-\r
-        $('#kiwi .txtnewnick').keydown(function (ev) {\r
-            if (ev.which === 27) {  // ESC\r
-                $('#kiwi_msginput').focus();\r
-                $('#kiwi .newnick').remove();\r
-            }\r
-        });\r
-\r
-        $('#kiwi .cancelnewnick').click(function () {\r
-            $('#kiwi .newnick').remove();\r
-        });\r
-\r
-        $('#kiwi .txtnewnick').focus();\r
-    },\r
-\r
-\r
-    /**\r
-    *   Displays the current channel's topic in the topic bar\r
-    */\r
-    setTopicText: function (new_topic) {\r
-        kiwi.front.cache.original_topic = new_topic;\r
-        $('#kiwi .cur_topic .topic').text(new_topic);\r
-        kiwi.front.ui.doLayoutSize();\r
-    },\r
-\r
-\r
-\r
-    /**\r
-    *   \r
-    */\r
-    tabviewsNext: function () {\r
-        var wl = $('#kiwi .windowlist ul'),\r
-            next_left = parseInt(wl.css('text-indent').replace('px', ''), 10) + 170;\r
-        wl.css('text-indent', next_left);\r
-    },\r
-\r
-    /**\r
-    *\r
-    */\r
-    tabviewsPrevious: function () {\r
-        var wl = $('#kiwi .windowlist ul'),\r
-            next_left = parseInt(wl.css('text-indent').replace('px', ''), 10) - 170;\r
-        wl.css('text-indent', next_left);\r
-    },\r
-\r
-    /**\r
-    *   Displays the next tab\r
-    */\r
-    windowsNext: function () {\r
-        /*var tab, tabs, curTab, next;\r
-        next = false;\r
-        tabs = Tabview.getAllTabs();\r
-        curTab = Tabview.getCurrentTab();\r
-        for (tab in tabs) {\r
-            if (!next) {\r
-                if (tabs[tab] === curTab) {\r
-                    next = true;\r
-                    continue;\r
-                }\r
-            } else {\r
-                tabs[tab].show();\r
-                return;\r
-            }\r
-        }*/\r
-    },\r
-\r
-    /**\r
-    *   Displays the previous tab\r
-    */\r
-    windowsPrevious: function () {\r
-        /*var tab, tabs, curTab, prev_tab, next;\r
-        next = false;\r
-        tabs = Tabview.getAllTabs();\r
-        curTab = Tabview.getCurrentTab();\r
-        for (tab in tabs) {\r
-            if (tabs[tab] === curTab) {\r
-                if (prev_tab) {\r
-                    prev_tab.show();\r
-                }\r
-                return;\r
-            }\r
-            prev_tab = tabs[tab];\r
-        }*/\r
-    },\r
-\r
-    /**\r
-    *   Shows a specific tab\r
-    *   @param  {Number}    num The index of the tab to show\r
-    */\r
-    windowsShow: function (num) {\r
-        /*num = parseInt(num, 10);\r
-        console.log('Showing window ' + num.toString());\r
-        var i = 0, tab, tabs;\r
-        tabs = Tabview.getAllTabs();\r
-        for (tab in tabs) {\r
-            if (i === num) {\r
-                tabs[tab].show();\r
-                return;\r
-            }\r
-            i++;\r
-        }*/\r
-    },\r
-\r
-\r
-    /**\r
-    *   \r
-    */\r
-    barsShow: function () {\r
-        $('#kiwi .control').slideDown();\r
-        $('#kiwi .toolbars').slideDown(400, function () {\r
-            kiwi.front.ui.doLayoutSize();\r
-        });\r
-    },\r
-\r
-    /**\r
-    *\r
-    */\r
-    barsHide: function () {\r
-        $('#kiwi .control').slideUp();\r
-        $('#kiwi .toolbars').slideUp(400, function () {\r
-            kiwi.front.ui.doLayoutSize();\r
-        });\r
-    },\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-    /**\r
-    *   Displays the tutorial\r
-    */\r
-    tutorial: function () {\r
-        var b = $('<div id="tutorial_box" style="border:3px solid blue;"></div>'),\r
-            bounds,\r
-            s,\r
-            current_s,\r
-            next_s;\r
-        b.css({display: 'block', position: 'absolute', height: '100%', width: '100%'});\r
-        $('#kiwi').append(b);\r
-\r
-        /**\r
-        *   @inner\r
-        */\r
-        bounds = function (el) {\r
-            var b = 3, ret = {};\r
-            ret.top = el.offset().top;\r
-            ret.left = el.offset().left;\r
-            ret.width = parseInt(el.outerWidth(true), 10) - (b * 2);\r
-            ret.height = parseInt(el.outerHeight(true), 10) - (b * 2);\r
-            return ret;\r
-        };\r
-\r
-        s = [\r
-            function () {\r
-                b.animate(bounds($('#kiwi .msginput')), 2000, '', next_s);\r
-            },\r
-\r
-            function () {\r
-                b.animate(bounds($('#kiwi .userlist')), 2000, '', next_s);\r
-            },\r
-\r
-            function () {\r
-                b.animate(bounds($('#panel1')), 2000, '', next_s);\r
-            },\r
-\r
-            function () {\r
-                b.animate(bounds($('#kiwi .cur_topic')), 2000, '', next_s);\r
-            },\r
-\r
-            function () {\r
-                b.animate(bounds($('#kiwi .windowlist')), 2000, '', next_s);\r
-            }\r
-        ];\r
-\r
-\r
-        current_s = -1;\r
-        /**\r
-        *   @inner\r
-        */\r
-        next_s = function () {\r
-            current_s++;\r
-            if (typeof s[current_s] === 'function') {\r
-                console.log('Animating ' + current_s.toString());\r
-                s[current_s]();\r
-            }\r
-        };\r
-        next_s();\r
-    }\r
-\r
-};
\ No newline at end of file
diff --git a/client/js/gateway.js b/client/js/gateway.js
deleted file mode 100755 (executable)
index c9dbce7..0000000
+++ /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 (executable)
index eca1eed..0000000
+++ /dev/null
@@ -1,963 +0,0 @@
-/*!\r
- * iScroll v4.1.4 ~ Copyright (c) 2011 Matteo Spinelli, http://cubiq.org\r
- * Released under MIT license, http://cubiq.org/license\r
- */\r
-\r
-(function(){\r
-var m = Math,\r
-       vendor = (/webkit/i).test(navigator.appVersion) ? 'webkit' :\r
-               (/firefox/i).test(navigator.userAgent) ? 'Moz' :\r
-               'opera' in window ? 'O' : '',\r
-\r
-       // Browser capabilities\r
-       has3d = 'WebKitCSSMatrix' in window && 'm11' in new WebKitCSSMatrix(),\r
-       hasTouch = 'ontouchstart' in window,\r
-       hasTransform = vendor + 'Transform' in document.documentElement.style,\r
-       isAndroid = (/android/gi).test(navigator.appVersion),\r
-       isIDevice = (/iphone|ipad/gi).test(navigator.appVersion),\r
-       isPlaybook = (/playbook/gi).test(navigator.appVersion),\r
-       hasTransitionEnd = (isIDevice || isPlaybook) && 'onwebkittransitionend' in window,\r
-       nextFrame = (function() {\r
-           return window.requestAnimationFrame\r
-                       || window.webkitRequestAnimationFrame\r
-                       || window.mozRequestAnimationFrame\r
-                       || window.oRequestAnimationFrame\r
-                       || window.msRequestAnimationFrame\r
-                       || function(callback) { return setTimeout(callback, 17); }\r
-       })(),\r
-       cancelFrame = (function () {\r
-           return window.cancelRequestAnimationFrame\r
-                       || window.webkitCancelRequestAnimationFrame\r
-                       || window.mozCancelRequestAnimationFrame\r
-                       || window.oCancelRequestAnimationFrame\r
-                       || window.msCancelRequestAnimationFrame\r
-                       || clearTimeout\r
-       })(),\r
-\r
-       // Events\r
-       RESIZE_EV = 'onorientationchange' in window ? 'orientationchange' : 'resize',\r
-       START_EV = hasTouch ? 'touchstart' : 'mousedown',\r
-       MOVE_EV = hasTouch ? 'touchmove' : 'mousemove',\r
-       END_EV = hasTouch ? 'touchend' : 'mouseup',\r
-       CANCEL_EV = hasTouch ? 'touchcancel' : 'mouseup',\r
-       WHEEL_EV = vendor == 'Moz' ? 'DOMMouseScroll' : 'mousewheel',\r
-\r
-       // Helpers\r
-       trnOpen = 'translate' + (has3d ? '3d(' : '('),\r
-       trnClose = has3d ? ',0)' : ')',\r
-\r
-       // Constructor\r
-       iScroll = function (el, options) {\r
-               var that = this,\r
-                       doc = document,\r
-                       i;\r
-\r
-               that.wrapper = typeof el == 'object' ? el : doc.getElementById(el);\r
-               that.wrapper.style.overflow = 'hidden';\r
-               that.scroller = that.wrapper.children[0];\r
-\r
-               // Default options\r
-               that.options = {\r
-                       hScroll: true,\r
-                       vScroll: true,\r
-                       bounce: true,\r
-                       bounceLock: false,\r
-                       momentum: true,\r
-                       lockDirection: true,\r
-                       useTransform: true,\r
-                       useTransition: false,\r
-\r
-                       // Scrollbar\r
-                       hScrollbar: true,\r
-                       vScrollbar: true,\r
-                       fixedScrollbar: isAndroid,\r
-                       hideScrollbar: isIDevice,\r
-                       fadeScrollbar: isIDevice && has3d,\r
-                       scrollbarClass: '',\r
-\r
-                       // Zoom\r
-                       zoom: false,\r
-                       zoomMin: 1,\r
-                       zoomMax: 4,\r
-                       doubleTapZoom: 2,\r
-\r
-                       // Snap\r
-                       snap: false,\r
-                       snapThreshold: 1,\r
-\r
-                       // Events\r
-                       onRefresh: null,\r
-                       onBeforeScrollStart: function (e) { e.preventDefault(); },\r
-                       onScrollStart: null,\r
-                       onBeforeScrollMove: null,\r
-                       onScrollMove: null,\r
-                       onBeforeScrollEnd: null,\r
-                       onScrollEnd: null,\r
-                       onTouchEnd: null,\r
-                       onDestroy: null\r
-               };\r
-\r
-               // User defined options\r
-               for (i in options) that.options[i] = options[i];\r
-\r
-               // Normalize options\r
-               that.options.useTransform = hasTransform ? that.options.useTransform : false;\r
-               that.options.hScrollbar = that.options.hScroll && that.options.hScrollbar;\r
-               that.options.vScrollbar = that.options.vScroll && that.options.vScrollbar;\r
-               that.options.zoom = that.options.useTransform && that.options.zoom;\r
-               that.options.useTransition = hasTransitionEnd && that.options.useTransition;\r
-               \r
-               // Set some default styles\r
-               that.scroller.style[vendor + 'TransitionProperty'] = that.options.useTransform ? '-' + vendor.toLowerCase() + '-transform' : 'top left';\r
-               that.scroller.style[vendor + 'TransitionDuration'] = '0';\r
-               that.scroller.style[vendor + 'TransformOrigin'] = '0 0';\r
-               if (that.options.useTransition) that.scroller.style[vendor + 'TransitionTimingFunction'] = 'cubic-bezier(0.33,0.66,0.66,1)';\r
-               \r
-               if (that.options.useTransform) that.scroller.style[vendor + 'Transform'] = trnOpen + '0,0' + trnClose;\r
-               else that.scroller.style.cssText += ';top:0;left:0';\r
-\r
-               if (that.options.useTransition) that.options.fixedScrollbar = true;\r
-\r
-               that.refresh();\r
-\r
-               that._bind(RESIZE_EV, window);\r
-               that._bind(START_EV);\r
-               if (!hasTouch) {\r
-                       that._bind('mouseout', that.wrapper);\r
-                       that._bind(WHEEL_EV);\r
-               }\r
-       };\r
-\r
-// Prototype\r
-iScroll.prototype = {\r
-       enabled: true,\r
-       x: 0,\r
-       y: 0,\r
-       steps: [],\r
-       scale: 1,\r
-       currPageX: 0, currPageY: 0,\r
-       pagesX: [], pagesY: [],\r
-       aniTime: null,\r
-       \r
-       handleEvent: function (e) {\r
-               var that = this;\r
-               switch(e.type) {\r
-                       case START_EV: that._start(e); break;\r
-                       case MOVE_EV: that._move(e); break;\r
-                       case END_EV:\r
-                       case CANCEL_EV: that._end(e); break;\r
-                       case RESIZE_EV: that._resize(); break;\r
-                       case WHEEL_EV: that._wheel(e); break;\r
-                       case 'mouseout': that._mouseout(e); break;\r
-                       case 'webkitTransitionEnd': that._transitionEnd(e); break;\r
-               }\r
-       },\r
-       \r
-       _scrollbar: function (dir) {\r
-               var that = this,\r
-                       doc = document,\r
-                       bar;\r
-\r
-               if (!that[dir + 'Scrollbar']) {\r
-                       if (that[dir + 'ScrollbarWrapper']) {\r
-                               if (hasTransform) that[dir + 'ScrollbarIndicator'].style[vendor + 'Transform'] = '';\r
-                               that[dir + 'ScrollbarWrapper'].parentNode.removeChild(that[dir + 'ScrollbarWrapper']);\r
-                               that[dir + 'ScrollbarWrapper'] = null;\r
-                               that[dir + 'ScrollbarIndicator'] = null;\r
-                       }\r
-\r
-                       return;\r
-               }\r
-\r
-               if (!that[dir + 'ScrollbarWrapper']) {\r
-                       // Create the scrollbar wrapper\r
-                       bar = doc.createElement('div');\r
-\r
-                       if (that.options.scrollbarClass) bar.className = that.options.scrollbarClass + dir.toUpperCase();\r
-                       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');\r
-\r
-                       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');\r
-\r
-                       that.wrapper.appendChild(bar);\r
-                       that[dir + 'ScrollbarWrapper'] = bar;\r
-\r
-                       // Create the scrollbar indicator\r
-                       bar = doc.createElement('div');\r
-                       if (!that.options.scrollbarClass) {\r
-                               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';\r
-                       }\r
-                       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;\r
-                       if (that.options.useTransition) bar.style.cssText += ';-' + vendor + '-transition-timing-function:cubic-bezier(0.33,0.66,0.66,1)';\r
-\r
-                       that[dir + 'ScrollbarWrapper'].appendChild(bar);\r
-                       that[dir + 'ScrollbarIndicator'] = bar;\r
-               }\r
-\r
-               if (dir == 'h') {\r
-                       that.hScrollbarSize = that.hScrollbarWrapper.clientWidth;\r
-                       that.hScrollbarIndicatorSize = m.max(m.round(that.hScrollbarSize * that.hScrollbarSize / that.scrollerW), 8);\r
-                       that.hScrollbarIndicator.style.width = that.hScrollbarIndicatorSize + 'px';\r
-                       that.hScrollbarMaxScroll = that.hScrollbarSize - that.hScrollbarIndicatorSize;\r
-                       that.hScrollbarProp = that.hScrollbarMaxScroll / that.maxScrollX;\r
-               } else {\r
-                       that.vScrollbarSize = that.vScrollbarWrapper.clientHeight;\r
-                       that.vScrollbarIndicatorSize = m.max(m.round(that.vScrollbarSize * that.vScrollbarSize / that.scrollerH), 8);\r
-                       that.vScrollbarIndicator.style.height = that.vScrollbarIndicatorSize + 'px';\r
-                       that.vScrollbarMaxScroll = that.vScrollbarSize - that.vScrollbarIndicatorSize;\r
-                       that.vScrollbarProp = that.vScrollbarMaxScroll / that.maxScrollY;\r
-               }\r
-\r
-               // Reset position\r
-               that._scrollbarPos(dir, true);\r
-       },\r
-       \r
-       _resize: function () {\r
-               this.refresh();\r
-       },\r
-       \r
-       _pos: function (x, y) {\r
-               x = this.hScroll ? x : 0;\r
-               y = this.vScroll ? y : 0;\r
-\r
-               if (this.options.useTransform) {\r
-                       this.scroller.style[vendor + 'Transform'] = trnOpen + x + 'px,' + y + 'px' + trnClose + ' scale(' + this.scale + ')';\r
-               } else {\r
-                       x = m.round(x);\r
-                       y = m.round(y);\r
-                       this.scroller.style.left = x + 'px';\r
-                       this.scroller.style.top = y + 'px';\r
-               }\r
-\r
-               this.x = x;\r
-               this.y = y;\r
-\r
-               this._scrollbarPos('h');\r
-               this._scrollbarPos('v');\r
-       },\r
-\r
-       _scrollbarPos: function (dir, hidden) {\r
-               var that = this,\r
-                       pos = dir == 'h' ? that.x : that.y,\r
-                       size;\r
-               \r
-               if (!that[dir + 'Scrollbar']) return;\r
-               \r
-               pos = that[dir + 'ScrollbarProp'] * pos;\r
-       \r
-               if (pos < 0) {\r
-                       if (!that.options.fixedScrollbar) {\r
-                               size = that[dir + 'ScrollbarIndicatorSize'] + m.round(pos * 3);\r
-                               if (size < 8) size = 8;\r
-                               that[dir + 'ScrollbarIndicator'].style[dir == 'h' ? 'width' : 'height'] = size + 'px';\r
-                       }\r
-                       pos = 0;\r
-               } else if (pos > that[dir + 'ScrollbarMaxScroll']) {\r
-                       if (!that.options.fixedScrollbar) {\r
-                               size = that[dir + 'ScrollbarIndicatorSize'] - m.round((pos - that[dir + 'ScrollbarMaxScroll']) * 3);\r
-                               if (size < 8) size = 8;\r
-                               that[dir + 'ScrollbarIndicator'].style[dir == 'h' ? 'width' : 'height'] = size + 'px';\r
-                               pos = that[dir + 'ScrollbarMaxScroll'] + (that[dir + 'ScrollbarIndicatorSize'] - size);\r
-                       } else {\r
-                               pos = that[dir + 'ScrollbarMaxScroll'];\r
-                       }\r
-               }\r
-\r
-               that[dir + 'ScrollbarWrapper'].style[vendor + 'TransitionDelay'] = '0';\r
-               that[dir + 'ScrollbarWrapper'].style.opacity = hidden && that.options.hideScrollbar ? '0' : '1';\r
-               that[dir + 'ScrollbarIndicator'].style[vendor + 'Transform'] = trnOpen + (dir == 'h' ? pos + 'px,0' : '0,' + pos + 'px') + trnClose;\r
-       },\r
-       \r
-       _start: function (e) {\r
-               var that = this,\r
-                       point = hasTouch ? e.touches[0] : e,\r
-                       matrix, x, y,\r
-                       c1, c2, target;\r
-\r
-               if (!that.enabled) return;\r
-\r
-               if (that.options.onBeforeScrollStart) that.options.onBeforeScrollStart.call(that, e);\r
-\r
-               if (that.options.useTransition) that._transitionTime(0);\r
-\r
-               that.moved = false;\r
-               that.animating = false;\r
-               that.zoomed = false;\r
-               that.distX = 0;\r
-               that.distY = 0;\r
-               that.absDistX = 0;\r
-               that.absDistY = 0;\r
-               that.dirX = 0;\r
-               that.dirY = 0;\r
-\r
-               // Gesture start\r
-               if (that.options.zoom && hasTouch && e.touches.length > 1) {\r
-                       c1 = m.abs(e.touches[0].pageX-e.touches[1].pageX);\r
-                       c2 = m.abs(e.touches[0].pageY-e.touches[1].pageY);\r
-                       that.touchesDistStart = m.sqrt(c1 * c1 + c2 * c2);\r
-\r
-                       that.originX = m.abs(e.touches[0].pageX + e.touches[1].pageX - that.wrapperOffsetLeft * 2) / 2 - that.x;\r
-                       that.originY = m.abs(e.touches[0].pageY + e.touches[1].pageY - that.wrapperOffsetTop * 2) / 2 - that.y;\r
-               }\r
-\r
-               if (that.options.momentum) {\r
-                       if (that.options.useTransform) {\r
-                               // Very lame general purpose alternative to CSSMatrix\r
-                               matrix = getComputedStyle(that.scroller, null)[vendor + 'Transform'].replace(/[^0-9-.,]/g, '').split(',');\r
-                               x = matrix[4] * 1;\r
-                               y = matrix[5] * 1;\r
-                       } else {\r
-                               x = getComputedStyle(that.scroller, null).left.replace(/[^0-9-]/g, '') * 1;\r
-                               y = getComputedStyle(that.scroller, null).top.replace(/[^0-9-]/g, '') * 1;\r
-                       }\r
-                       \r
-                       if (x != that.x || y != that.y) {\r
-                               if (that.options.useTransition) that._unbind('webkitTransitionEnd');\r
-                               else cancelFrame(that.aniTime);\r
-                               that.steps = [];\r
-                               that._pos(x, y);\r
-                       }\r
-               }\r
-\r
-               that.absStartX = that.x;        // Needed by snap threshold\r
-               that.absStartY = that.y;\r
-\r
-               that.startX = that.x;\r
-               that.startY = that.y;\r
-               that.pointX = point.pageX;\r
-               that.pointY = point.pageY;\r
-\r
-               that.startTime = e.timeStamp || (new Date()).getTime();\r
-\r
-               if (that.options.onScrollStart) that.options.onScrollStart.call(that, e);\r
-\r
-               that._bind(MOVE_EV);\r
-               that._bind(END_EV);\r
-               that._bind(CANCEL_EV);\r
-       },\r
-       \r
-       _move: function (e) {\r
-               var that = this,\r
-                       point = hasTouch ? e.touches[0] : e,\r
-                       deltaX = point.pageX - that.pointX,\r
-                       deltaY = point.pageY - that.pointY,\r
-                       newX = that.x + deltaX,\r
-                       newY = that.y + deltaY,\r
-                       c1, c2, scale,\r
-                       timestamp = e.timeStamp || (new Date()).getTime();\r
-\r
-               if (that.options.onBeforeScrollMove) that.options.onBeforeScrollMove.call(that, e);\r
-\r
-               // Zoom\r
-               if (that.options.zoom && hasTouch && e.touches.length > 1) {\r
-                       c1 = m.abs(e.touches[0].pageX - e.touches[1].pageX);\r
-                       c2 = m.abs(e.touches[0].pageY - e.touches[1].pageY);\r
-                       that.touchesDist = m.sqrt(c1*c1+c2*c2);\r
-\r
-                       that.zoomed = true;\r
-\r
-                       scale = 1 / that.touchesDistStart * that.touchesDist * this.scale;\r
-                       if (scale < 0.5) scale = 0.5;\r
-                       else if (scale > that.options.zoomMax) scale = that.options.zoomMax;\r
-                       that.lastScale = scale / this.scale;\r
-\r
-                       newX = this.originX - this.originX * that.lastScale + this.x,\r
-                       newY = this.originY - this.originY * that.lastScale + this.y;\r
-\r
-                       this.scroller.style[vendor + 'Transform'] = trnOpen + newX + 'px,' + newY + 'px' + trnClose + ' scale(' + scale + ')';\r
-\r
-                       return;\r
-               }\r
-\r
-               that.pointX = point.pageX;\r
-               that.pointY = point.pageY;\r
-\r
-               // Slow down if outside of the boundaries\r
-               if (newX > 0 || newX < that.maxScrollX) {\r
-                       newX = that.options.bounce ? that.x + (deltaX / 2) : newX >= 0 || that.maxScrollX >= 0 ? 0 : that.maxScrollX;\r
-               }\r
-               if (newY > 0 || newY < that.maxScrollY) { \r
-                       newY = that.options.bounce ? that.y + (deltaY / 2) : newY >= 0 || that.maxScrollY >= 0 ? 0 : that.maxScrollY;\r
-               }\r
-\r
-               if (that.absDistX < 6 && that.absDistY < 6) {\r
-                       that.distX += deltaX;\r
-                       that.distY += deltaY;\r
-                       that.absDistX = m.abs(that.distX);\r
-                       that.absDistY = m.abs(that.distY);\r
-\r
-                       return;\r
-               }\r
-\r
-               // Lock direction\r
-               if (that.options.lockDirection) {\r
-                       if (that.absDistX > that.absDistY + 5) {\r
-                               newY = that.y;\r
-                               deltaY = 0;\r
-                       } else if (that.absDistY > that.absDistX + 5) {\r
-                               newX = that.x;\r
-                               deltaX = 0;\r
-                       }\r
-               }\r
-\r
-               that.moved = true;\r
-               that._pos(newX, newY);\r
-               that.dirX = deltaX > 0 ? -1 : deltaX < 0 ? 1 : 0;\r
-               that.dirY = deltaY > 0 ? -1 : deltaY < 0 ? 1 : 0;\r
-\r
-               if (timestamp - that.startTime > 300) {\r
-                       that.startTime = timestamp;\r
-                       that.startX = that.x;\r
-                       that.startY = that.y;\r
-               }\r
-               \r
-               if (that.options.onScrollMove) that.options.onScrollMove.call(that, e);\r
-       },\r
-       \r
-       _end: function (e) {\r
-               if (hasTouch && e.touches.length != 0) return;\r
-\r
-               var that = this,\r
-                       point = hasTouch ? e.changedTouches[0] : e,\r
-                       target, ev,\r
-                       momentumX = { dist:0, time:0 },\r
-                       momentumY = { dist:0, time:0 },\r
-                       duration = (e.timeStamp || (new Date()).getTime()) - that.startTime,\r
-                       newPosX = that.x,\r
-                       newPosY = that.y,\r
-                       distX, distY,\r
-                       newDuration;\r
-\r
-               that._unbind(MOVE_EV);\r
-               that._unbind(END_EV);\r
-               that._unbind(CANCEL_EV);\r
-\r
-               if (that.options.onBeforeScrollEnd) that.options.onBeforeScrollEnd.call(that, e);\r
-\r
-               if (that.zoomed) {\r
-                       that.scale = that.scale * that.lastScale;\r
-                       that.x = that.originX - that.originX * that.lastScale + that.x;\r
-                       that.y = that.originY - that.originY * that.lastScale + that.y;\r
-\r
-                       that.scroller.style.webkitTransform = trnOpen + that.x + 'px,' + that.y + 'px' + trnClose + ' scale(' + that.scale + ')';\r
-\r
-                       that.refresh();\r
-                       return;\r
-               }\r
-\r
-               if (!that.moved) {\r
-                       if (hasTouch) {\r
-                               if (that.doubleTapTimer && that.options.zoom) {\r
-                                       // Double tapped\r
-                                       clearTimeout(that.doubleTapTimer);\r
-                                       that.doubleTapTimer = null;\r
-                                       that.zoom(that.pointX, that.pointY, that.scale == 1 ? that.options.doubleTapZoom : 1);\r
-                               } else {\r
-                                       that.doubleTapTimer = setTimeout(function () {\r
-                                               that.doubleTapTimer = null;\r
-\r
-                                               // Find the last touched element\r
-                                               target = point.target;\r
-                                               while (target.nodeType != 1) target = target.parentNode;\r
-\r
-                                               if (target.tagName != 'SELECT' && target.tagName != 'INPUT' && target.tagName != 'TEXTAREA') {\r
-                                                       ev = document.createEvent('MouseEvents');\r
-                                                       ev.initMouseEvent('click', true, true, e.view, 1,\r
-                                                               point.screenX, point.screenY, point.clientX, point.clientY,\r
-                                                               e.ctrlKey, e.altKey, e.shiftKey, e.metaKey,\r
-                                                               0, null);\r
-                                                       ev._fake = true;\r
-                                                       target.dispatchEvent(ev);\r
-                                               }\r
-                                       }, that.options.zoom ? 250 : 0);\r
-                               }\r
-                       }\r
-\r
-                       that._resetPos(200);\r
-\r
-                       if (that.options.onTouchEnd) that.options.onTouchEnd.call(that, e);\r
-                       return;\r
-               }\r
-\r
-               if (duration < 300 && that.options.momentum) {\r
-                       momentumX = newPosX ? that._momentum(newPosX - that.startX, duration, -that.x, that.scrollerW - that.wrapperW + that.x, that.options.bounce ? that.wrapperW : 0) : momentumX;\r
-                       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;\r
-\r
-                       newPosX = that.x + momentumX.dist;\r
-                       newPosY = that.y + momentumY.dist;\r
-\r
-                       if ((that.x > 0 && newPosX > 0) || (that.x < that.maxScrollX && newPosX < that.maxScrollX)) momentumX = { dist:0, time:0 };\r
-                       if ((that.y > 0 && newPosY > 0) || (that.y < that.maxScrollY && newPosY < that.maxScrollY)) momentumY = { dist:0, time:0 };\r
-               }\r
-\r
-               if (momentumX.dist || momentumY.dist) {\r
-                       newDuration = m.max(m.max(momentumX.time, momentumY.time), 10);\r
-\r
-                       // Do we need to snap?\r
-                       if (that.options.snap) {\r
-                               distX = newPosX - that.absStartX;\r
-                               distY = newPosY - that.absStartY;\r
-                               if (m.abs(distX) < that.options.snapThreshold && m.abs(distY) < that.options.snapThreshold) { that.scrollTo(that.absStartX, that.absStartY, 200); }\r
-                               else {\r
-                                       snap = that._snap(newPosX, newPosY);\r
-                                       newPosX = snap.x;\r
-                                       newPosY = snap.y;\r
-                                       newDuration = m.max(snap.time, newDuration);\r
-                               }\r
-                       }\r
-\r
-                       that.scrollTo(newPosX, newPosY, newDuration);\r
-\r
-                       if (that.options.onTouchEnd) that.options.onTouchEnd.call(that, e);\r
-                       return;\r
-               }\r
-\r
-               // Do we need to snap?\r
-               if (that.options.snap) {\r
-                       distX = newPosX - that.absStartX;\r
-                       distY = newPosY - that.absStartY;\r
-                       if (m.abs(distX) < that.options.snapThreshold && m.abs(distY) < that.options.snapThreshold) that.scrollTo(that.absStartX, that.absStartY, 200);\r
-                       else {\r
-                               snap = that._snap(that.x, that.y);\r
-                               if (snap.x != that.x || snap.y != that.y) that.scrollTo(snap.x, snap.y, snap.time);\r
-                       }\r
-\r
-                       if (that.options.onTouchEnd) that.options.onTouchEnd.call(that, e);\r
-                       return;\r
-               }\r
-\r
-               that._resetPos(200);\r
-               if (that.options.onTouchEnd) that.options.onTouchEnd.call(that, e);\r
-       },\r
-       \r
-       _resetPos: function (time) {\r
-               var that = this,\r
-                       resetX = that.x >= 0 ? 0 : that.x < that.maxScrollX ? that.maxScrollX : that.x,\r
-                       resetY = that.y >= 0 || that.maxScrollY > 0 ? 0 : that.y < that.maxScrollY ? that.maxScrollY : that.y;\r
-\r
-               if (resetX == that.x && resetY == that.y) {\r
-                       if (that.moved) {\r
-                               that.moved = false;\r
-                               if (that.options.onScrollEnd) that.options.onScrollEnd.call(that);              // Execute custom code on scroll end\r
-                       }\r
-\r
-                       if (that.hScrollbar && that.options.hideScrollbar) {\r
-                               if (vendor == 'webkit') that.hScrollbarWrapper.style[vendor + 'TransitionDelay'] = '300ms';\r
-                               that.hScrollbarWrapper.style.opacity = '0';\r
-                       }\r
-                       if (that.vScrollbar && that.options.hideScrollbar) {\r
-                               if (vendor == 'webkit') that.vScrollbarWrapper.style[vendor + 'TransitionDelay'] = '300ms';\r
-                               that.vScrollbarWrapper.style.opacity = '0';\r
-                       }\r
-\r
-                       return;\r
-               }\r
-\r
-               that.scrollTo(resetX, resetY, time || 0);\r
-       },\r
-\r
-       _wheel: function (e) {\r
-               var that = this,\r
-                       deltaX, deltaY;\r
-\r
-               if ('wheelDeltaX' in e) {\r
-                       deltaX = that.x + e.wheelDeltaX / 12,\r
-                       deltaY = that.y + e.wheelDeltaY / 12;\r
-               } else if ('detail' in e) {\r
-                       deltaX = that.x - e.detail * 3,\r
-                       deltaY = that.y - e.detail * 3;\r
-               } else {\r
-                       deltaX = that.x - e.wheelDelta,\r
-                       deltaY = that.y - e.wheelDelta;\r
-               }\r
-\r
-               if (deltaX > 0) deltaX = 0;\r
-               else if (deltaX < that.maxScrollX) deltaX = that.maxScrollX;\r
-\r
-               if (deltaY > 0) deltaY = 0;\r
-               else if (deltaY < that.maxScrollY) deltaY = that.maxScrollY;\r
-\r
-               that.scrollTo(deltaX, deltaY, 0);\r
-       },\r
-       \r
-       _mouseout: function (e) {\r
-               var t = e.relatedTarget;\r
-\r
-               if (!t) {\r
-                       this._end(e);\r
-                       return;\r
-               }\r
-\r
-               while (t = t.parentNode) if (t == this.wrapper) return;\r
-               \r
-               this._end(e);\r
-       },\r
-\r
-       _transitionEnd: function (e) {\r
-               var that = this;\r
-\r
-               if (e.target != that.scroller) return;\r
-\r
-               that._unbind('webkitTransitionEnd');\r
-               \r
-               that._startAni();\r
-       },\r
-\r
-\r
-       /**\r
-        *\r
-        * Utilities\r
-        *\r
-        */\r
-       _startAni: function () {\r
-               var that = this,\r
-                       startX = that.x, startY = that.y,\r
-                       startTime = (new Date).getTime(),\r
-                       step, easeOut;\r
-\r
-               if (that.animating) return;\r
-               \r
-               if (!that.steps.length) {\r
-                       that._resetPos(400);\r
-                       return;\r
-               }\r
-               \r
-               step = that.steps.shift();\r
-               \r
-               if (step.x == startX && step.y == startY) step.time = 0;\r
-\r
-               that.animating = true;\r
-               that.moved = true;\r
-               \r
-               if (that.options.useTransition) {\r
-                       that._transitionTime(step.time);\r
-                       that._pos(step.x, step.y);\r
-                       that.animating = false;\r
-                       if (step.time) that._bind('webkitTransitionEnd');\r
-                       return;\r
-               }\r
-\r
-               (function animate () {\r
-                       var now = (new Date).getTime(),\r
-                               newX, newY;\r
-\r
-                       if (now >= startTime + step.time) {\r
-                               that._pos(step.x, step.y);\r
-                               that.animating = false;\r
-                               if (that.options.onAnimationEnd) that.options.onAnimationEnd.call(that);                        // Execute custom code on animation end\r
-                               that._startAni();\r
-                               return;\r
-                       }\r
-\r
-                       now = (now - startTime) / step.time - 1;\r
-                       easeOut = m.sqrt(1 - now * now);\r
-                       newX = (step.x - startX) * easeOut + startX;\r
-                       newY = (step.y - startY) * easeOut + startY;\r
-                       that._pos(newX, newY);\r
-                       if (that.animating) that.aniTime = nextFrame(animate);\r
-               })();\r
-       },\r
-\r
-       _transitionTime: function (time) {\r
-               time += 'ms';\r
-               this.scroller.style[vendor + 'TransitionDuration'] = time;\r
-               if (this.hScrollbar) this.hScrollbarIndicator.style[vendor + 'TransitionDuration'] = time;\r
-               if (this.vScrollbar) this.vScrollbarIndicator.style[vendor + 'TransitionDuration'] = time;\r
-       },\r
-\r
-       _momentum: function (dist, time, maxDistUpper, maxDistLower, size) {\r
-               var deceleration = 0.0006,\r
-                       speed = m.abs(dist) / time,\r
-                       newDist = (speed * speed) / (2 * deceleration),\r
-                       newTime = 0, outsideDist = 0;\r
-\r
-               // Proportinally reduce speed if we are outside of the boundaries \r
-               if (dist > 0 && newDist > maxDistUpper) {\r
-                       outsideDist = size / (6 / (newDist / speed * deceleration));\r
-                       maxDistUpper = maxDistUpper + outsideDist;\r
-                       speed = speed * maxDistUpper / newDist;\r
-                       newDist = maxDistUpper;\r
-               } else if (dist < 0 && newDist > maxDistLower) {\r
-                       outsideDist = size / (6 / (newDist / speed * deceleration));\r
-                       maxDistLower = maxDistLower + outsideDist;\r
-                       speed = speed * maxDistLower / newDist;\r
-                       newDist = maxDistLower;\r
-               }\r
-\r
-               newDist = newDist * (dist < 0 ? -1 : 1);\r
-               newTime = speed / deceleration;\r
-\r
-               return { dist: newDist, time: m.round(newTime) };\r
-       },\r
-\r
-       _offset: function (el) {\r
-               var left = -el.offsetLeft,\r
-                       top = -el.offsetTop;\r
-                       \r
-               while (el = el.offsetParent) {\r
-                       left -= el.offsetLeft;\r
-                       top -= el.offsetTop;\r
-               }\r
-               \r
-               if (el != this.wrapper) {\r
-                       left *= this.scale;\r
-                       top *= this.scale;\r
-               }\r
-\r
-               return { left: left, top: top };\r
-       },\r
-\r
-       _snap: function (x, y) {\r
-               var that = this,\r
-                       i, l,\r
-                       page, time,\r
-                       sizeX, sizeY;\r
-\r
-               // Check page X\r
-               page = that.pagesX.length - 1;\r
-               for (i=0, l=that.pagesX.length; i<l; i++) {\r
-                       if (x >= that.pagesX[i]) {\r
-                               page = i;\r
-                               break;\r
-                       }\r
-               }\r
-               if (page == that.currPageX && page > 0 && that.dirX < 0) page--;\r
-               x = that.pagesX[page];\r
-               sizeX = m.abs(x - that.pagesX[that.currPageX]);\r
-               sizeX = sizeX ? m.abs(that.x - x) / sizeX * 500 : 0;\r
-               that.currPageX = page;\r
-\r
-               // Check page Y\r
-               page = that.pagesY.length-1;\r
-               for (i=0; i<page; i++) {\r
-                       if (y >= that.pagesY[i]) {\r
-                               page = i;\r
-                               break;\r
-                       }\r
-               }\r
-               if (page == that.currPageY && page > 0 && that.dirY < 0) page--;\r
-               y = that.pagesY[page];\r
-               sizeY = m.abs(y - that.pagesY[that.currPageY]);\r
-               sizeY = sizeY ? m.abs(that.y - y) / sizeY * 500 : 0;\r
-               that.currPageY = page;\r
-\r
-               // Snap with constant speed (proportional duration)\r
-               time = m.round(m.max(sizeX, sizeY)) || 200;\r
-\r
-               return { x: x, y: y, time: time };\r
-       },\r
-\r
-       _bind: function (type, el, bubble) {\r
-               (el || this.scroller).addEventListener(type, this, !!bubble);\r
-       },\r
-\r
-       _unbind: function (type, el, bubble) {\r
-               (el || this.scroller).removeEventListener(type, this, !!bubble);\r
-       },\r
-\r
-\r
-       /**\r
-        *\r
-        * Public methods\r
-        *\r
-        */\r
-       destroy: function () {\r
-               var that = this;\r
-\r
-               that.scroller.style[vendor + 'Transform'] = '';\r
-\r
-               // Remove the scrollbars\r
-               that.hScrollbar = false;\r
-               that.vScrollbar = false;\r
-               that._scrollbar('h');\r
-               that._scrollbar('v');\r
-\r
-               // Remove the event listeners\r
-               that._unbind(RESIZE_EV);\r
-               that._unbind(START_EV);\r
-               that._unbind(MOVE_EV);\r
-               that._unbind(END_EV);\r
-               that._unbind(CANCEL_EV);\r
-               \r
-               if (that.options.hasTouch) {\r
-                       that._unbind('mouseout', that.wrapper);\r
-                       that._unbind(WHEEL_EV);\r
-               }\r
-               \r
-               if (that.options.useTransition) that._unbind('webkitTransitionEnd');\r
-               \r
-               if (that.options.onDestroy) that.options.onDestroy.call(that);\r
-       },\r
-\r
-       refresh: function () {\r
-               var that = this,\r
-                       offset,\r
-                       pos = 0,\r
-                       page = 0;\r
-\r
-               if (that.scale < that.options.zoomMin) that.scale = that.options.zoomMin;\r
-               that.wrapperW = that.wrapper.clientWidth || 1;\r
-               that.wrapperH = that.wrapper.clientHeight || 1;\r
-\r
-               that.scrollerW = m.round(that.scroller.offsetWidth * that.scale);\r
-               that.scrollerH = m.round(that.scroller.offsetHeight * that.scale);\r
-               that.maxScrollX = that.wrapperW - that.scrollerW;\r
-               that.maxScrollY = that.wrapperH - that.scrollerH;\r
-               that.dirX = 0;\r
-               that.dirY = 0;\r
-\r
-               that.hScroll = that.options.hScroll && that.maxScrollX < 0;\r
-               that.vScroll = that.options.vScroll && (!that.options.bounceLock && !that.hScroll || that.scrollerH > that.wrapperH);\r
-\r
-               that.hScrollbar = that.hScroll && that.options.hScrollbar;\r
-               that.vScrollbar = that.vScroll && that.options.vScrollbar && that.scrollerH > that.wrapperH;\r
-\r
-               offset = that._offset(that.wrapper);\r
-               that.wrapperOffsetLeft = -offset.left;\r
-               that.wrapperOffsetTop = -offset.top;\r
-\r
-               // Prepare snap\r
-               if (typeof that.options.snap == 'string') {\r
-                       that.pagesX = [];\r
-                       that.pagesY = [];\r
-                       els = that.scroller.querySelectorAll(that.options.snap);\r
-                       for (i=0, l=els.length; i<l; i++) {\r
-                               pos = that._offset(els[i]);\r
-                               pos.left += that.wrapperOffsetLeft;\r
-                               pos.top += that.wrapperOffsetTop;\r
-                               that.pagesX[i] = pos.left < that.maxScrollX ? that.maxScrollX : pos.left * that.scale;\r
-                               that.pagesY[i] = pos.top < that.maxScrollY ? that.maxScrollY : pos.top * that.scale;\r
-                       }\r
-               } else if (that.options.snap) {\r
-                       that.pagesX = [];\r
-                       while (pos >= that.maxScrollX) {\r
-                               that.pagesX[page] = pos;\r
-                               pos = pos - that.wrapperW;\r
-                               page++;\r
-                       }\r
-                       if (that.maxScrollX%that.wrapperW) that.pagesX[that.pagesX.length] = that.maxScrollX - that.pagesX[that.pagesX.length-1] + that.pagesX[that.pagesX.length-1];\r
-\r
-                       pos = 0;\r
-                       page = 0;\r
-                       that.pagesY = [];\r
-                       while (pos >= that.maxScrollY) {\r
-                               that.pagesY[page] = pos;\r
-                               pos = pos - that.wrapperH;\r
-                               page++;\r
-                       }\r
-                       if (that.maxScrollY%that.wrapperH) that.pagesY[that.pagesY.length] = that.maxScrollY - that.pagesY[that.pagesY.length-1] + that.pagesY[that.pagesY.length-1];\r
-               }\r
-\r
-               // Prepare the scrollbars\r
-               that._scrollbar('h');\r
-               that._scrollbar('v');\r
-\r
-               that.scroller.style[vendor + 'TransitionDuration'] = '0';\r
-\r
-               that._resetPos(200);\r
-       },\r
-\r
-       scrollTo: function (x, y, time, relative) {\r
-               var that = this,\r
-                       step = x,\r
-                       i, l;\r
-\r
-               that.stop();\r
-\r
-               if (!step.length) step = [{ x: x, y: y, time: time, relative: relative }];\r
-               \r
-               for (i=0, l=step.length; i<l; i++) {\r
-                       if (step[i].relative) { step[i].x = that.x - step[i].x; step[i].y = that.y - step[i].y; }\r
-                       that.steps.push({ x: step[i].x, y: step[i].y, time: step[i].time || 0 });\r
-               }\r
-\r
-               that._startAni();\r
-       },\r
-\r
-       scrollToElement: function (el, time) {\r
-               var that = this, pos;\r
-               el = el.nodeType ? el : that.scroller.querySelector(el);\r
-               if (!el) return;\r
-\r
-               pos = that._offset(el);\r
-               pos.left += that.wrapperOffsetLeft;\r
-               pos.top += that.wrapperOffsetTop;\r
-\r
-               pos.left = pos.left > 0 ? 0 : pos.left < that.maxScrollX ? that.maxScrollX : pos.left;\r
-               pos.top = pos.top > 0 ? 0 : pos.top < that.maxScrollY ? that.maxScrollY : pos.top;\r
-               time = time === undefined ? m.max(m.abs(pos.left)*2, m.abs(pos.top)*2) : time;\r
-\r
-               that.scrollTo(pos.left, pos.top, time);\r
-       },\r
-\r
-       scrollToPage: function (pageX, pageY, time) {\r
-               var that = this, x, y;\r
-               \r
-               if (that.options.snap) {\r
-                       pageX = pageX == 'next' ? that.currPageX+1 : pageX == 'prev' ? that.currPageX-1 : pageX;\r
-                       pageY = pageY == 'next' ? that.currPageY+1 : pageY == 'prev' ? that.currPageY-1 : pageY;\r
-\r
-                       pageX = pageX < 0 ? 0 : pageX > that.pagesX.length-1 ? that.pagesX.length-1 : pageX;\r
-                       pageY = pageY < 0 ? 0 : pageY > that.pagesY.length-1 ? that.pagesY.length-1 : pageY;\r
-\r
-                       that.currPageX = pageX;\r
-                       that.currPageY = pageY;\r
-                       x = that.pagesX[pageX];\r
-                       y = that.pagesY[pageY];\r
-               } else {\r
-                       x = -that.wrapperW * pageX;\r
-                       y = -that.wrapperH * pageY;\r
-                       if (x < that.maxScrollX) x = that.maxScrollX;\r
-                       if (y < that.maxScrollY) y = that.maxScrollY;\r
-               }\r
-\r
-               that.scrollTo(x, y, time || 400);\r
-       },\r
-\r
-       disable: function () {\r
-               this.stop();\r
-               this._resetPos(0);\r
-               this.enabled = false;\r
-\r
-               // If disabled after touchstart we make sure that there are no left over events\r
-               this._unbind(MOVE_EV);\r
-               this._unbind(END_EV);\r
-               this._unbind(CANCEL_EV);\r
-       },\r
-       \r
-       enable: function () {\r
-               this.enabled = true;\r
-       },\r
-       \r
-       stop: function () {\r
-               if (this.options.useTransition) this._unbind('webkitTransitionEnd');\r
-               else cancelFrame(this.aniTime);\r
-               this.steps = [];\r
-               this.moved = false;\r
-               this.animating = false;\r
-       },\r
-       \r
-       zoom: function (x, y, scale, time) {\r
-               var that = this,\r
-                       relScale = scale / that.scale;\r
-\r
-               if (!that.options.useTransform) return;\r
-\r
-               time = (time || 200) + 'ms'\r
-               x = x - that.wrapperOffsetLeft - that.x;\r
-               y = y - that.wrapperOffsetTop - that.y;\r
-               that.x = x - x * relScale + that.x;\r
-               that.y = y - y * relScale + that.y;\r
-\r
-               that.scale = scale;\r
-\r
-               that.scroller.style[vendor + 'TransitionDuration'] = time;\r
-               that.scroller.style[vendor + 'Transform'] = trnOpen + that.x + 'px,' + that.y + 'px' + trnClose + ' scale(' + scale + ')';\r
-\r
-               that.refresh();\r
-       }\r
-};\r
-\r
-if (typeof exports !== 'undefined') exports.iScroll = iScroll;\r
-else window.iScroll = iScroll;\r
-\r
-})();
\ 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 (executable)
index 6b522aa..0000000
+++ /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;b<g.length;b++)h.options[g[b][0]]&&g[b][1].apply(h.element,i)}},contains:function(h,g){return document.compareDocumentPosition?h.compareDocumentPosition(g)&16:h!==g&&h.contains(g)},hasScroll:function(h,g){if(a(h).css("overflow")==="hidden")return false;g=g&&g==="left"?"scrollLeft":"scrollTop";var i=false;if(h[g]>0)return true;h[g]=1;i=h[g]>0;h[g]=0;return i},isOverAxis:function(h,g,i){return h>g&&h<g+i},isOver:function(h,g,i,b,f,j){return a.ui.isOverAxis(h,i,f)&&
-a.ui.isOverAxis(g,b,j)}})}})(jQuery);
-(function(a,d){if(a.cleanData){var c=a.cleanData;a.cleanData=function(h){for(var g=0,i;(i=h[g])!=null;g++)try{a(i).triggerHandler("remove")}catch(b){}c(h)}}else{var e=a.fn.remove;a.fn.remove=function(h,g){return this.each(function(){if(!g)if(!h||a.filter(h,[this]).length)a("*",this).add([this]).each(function(){try{a(this).triggerHandler("remove")}catch(i){}});return e.call(a(this),h,g)})}}a.widget=function(h,g,i){var b=h.split(".")[0],f;h=h.split(".")[1];f=b+"-"+h;if(!i){i=g;g=a.Widget}a.expr[":"][f]=
-function(j){return!!a.data(j,h)};a[b]=a[b]||{};a[b][h]=function(j,l){arguments.length&&this._createWidget(j,l)};g=new g;g.options=a.extend(true,{},g.options);a[b][h].prototype=a.extend(true,g,{namespace:b,widgetName:h,widgetEventPrefix:a[b][h].prototype.widgetEventPrefix||h,widgetBaseClass:f},i);a.widget.bridge(h,a[b][h])};a.widget.bridge=function(h,g){a.fn[h]=function(i){var b=typeof i==="string",f=Array.prototype.slice.call(arguments,1),j=this;i=!b&&f.length?a.extend.apply(null,[true,i].concat(f)):
-i;if(b&&i.charAt(0)==="_")return j;b?this.each(function(){var l=a.data(this,h),o=l&&a.isFunction(l[i])?l[i].apply(l,f):l;if(o!==l&&o!==d){j=o;return false}}):this.each(function(){var l=a.data(this,h);l?l.option(i||{})._init():a.data(this,h,new g(i,this))});return j}};a.Widget=function(h,g){arguments.length&&this._createWidget(h,g)};a.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(h,g){a.data(g,this.widgetName,this);this.element=a(g);this.options=
-a.extend(true,{},this.options,this._getCreateOptions(),h);var i=this;this.element.bind("remove."+this.widgetName,function(){i.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return a.metadata&&a.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+
-"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(h,g){var i=h;if(arguments.length===0)return a.extend({},this.options);if(typeof h==="string"){if(g===d)return this.options[h];i={};i[h]=g}this._setOptions(i);return this},_setOptions:function(h){var g=this;a.each(h,function(i,b){g._setOption(i,b)});return this},_setOption:function(h,g){this.options[h]=g;if(h==="disabled")this.widget()[g?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",
-g);return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(h,g,i){var b=this.options[h];g=a.Event(g);g.type=(h===this.widgetEventPrefix?h:this.widgetEventPrefix+h).toLowerCase();i=i||{};if(g.originalEvent){h=a.event.props.length;for(var f;h;){f=a.event.props[--h];g[f]=g.originalEvent[f]}}this.element.trigger(g,i);return!(a.isFunction(b)&&b.call(this.element[0],g,i)===false||g.isDefaultPrevented())}}})(jQuery);
-(function(a){var d=false;a(document).mouseup(function(){d=false});a.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var c=this;this.element.bind("mousedown."+this.widgetName,function(e){return c._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===a.data(e.target,c.widgetName+".preventClickEvent")){a.removeData(e.target,c.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+
-this.widgetName)},_mouseDown:function(c){if(!d){this._mouseStarted&&this._mouseUp(c);this._mouseDownEvent=c;var e=this,h=c.which==1,g=typeof this.options.cancel=="string"&&c.target.nodeName?a(c.target).closest(this.options.cancel).length:false;if(!h||g||!this._mouseCapture(c))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(c)&&this._mouseDelayMet(c)){this._mouseStarted=
-this._mouseStart(c)!==false;if(!this._mouseStarted){c.preventDefault();return true}}true===a.data(c.target,this.widgetName+".preventClickEvent")&&a.removeData(c.target,this.widgetName+".preventClickEvent");this._mouseMoveDelegate=function(i){return e._mouseMove(i)};this._mouseUpDelegate=function(i){return e._mouseUp(i)};a(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);c.preventDefault();return d=true}},_mouseMove:function(c){if(a.browser.msie&&
-!(document.documentMode>=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('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').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.left<b[0])g=b[0]+this.offset.click.left;
-if(d.pageY-this.offset.click.top<b[1])i=b[1]+this.offset.click.top;if(d.pageX-this.offset.click.left>b[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.top<b[1]||i-this.offset.click.top>b[3])?i:!(i-this.offset.click.top<b[1])?i-c.grid[1]:i+c.grid[1]:i;g=c.grid[0]?this.originalPageX+Math.round((g-this.originalPageX)/
-c.grid[0])*c.grid[0]:this.originalPageX;g=b?!(g-this.offset.click.left<b[0]||g-this.offset.click.left>b[2])?g:!(g-this.offset.click.left<b[0])?g-c.grid[0]:g+c.grid[0]:g}}return{top:i-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():h?0:e.scrollTop()),left:g-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&a.browser.version<
-526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():h?0:e.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove();this.helper=null;this.cancelHelperRemoval=false},_trigger:function(d,c,e){e=e||this._uiHash();a.ui.plugin.call(this,d,[c,e]);if(d=="drag")this.positionAbs=this._convertPositionTo("absolute");return a.Widget.prototype._trigger.call(this,d,c,
-e)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}});a.extend(a.ui.draggable,{version:"1.8.16"});a.ui.plugin.add("draggable","connectToSortable",{start:function(d,c){var e=a(this).data("draggable"),h=e.options,g=a.extend({},c,{item:e.element});e.sortables=[];a(h.connectToSortable).each(function(){var i=a.data(this,"sortable");if(i&&!i.options.disabled){e.sortables.push({instance:i,shouldRevert:i.options.revert});
-i.refreshPositions();i._trigger("activate",d,g)}})},stop:function(d,c){var e=a(this).data("draggable"),h=a.extend({},c,{item:e.element});a.each(e.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;e.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert)this.instance.options.revert=true;this.instance._mouseStop(d);this.instance.options.helper=this.instance.options._helper;e.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})}else{this.instance.cancelHelperRemoval=
-false;this.instance._trigger("deactivate",d,h)}})},drag:function(d,c){var e=a(this).data("draggable"),h=this;a.each(e.sortables,function(){this.instance.positionAbs=e.positionAbs;this.instance.helperProportions=e.helperProportions;this.instance.offset.click=e.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=a(h).clone().removeAttr("id").appendTo(this.instance.element).data("sortable-item",true);
-this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return c.helper[0]};d.target=this.instance.currentItem[0];this.instance._mouseCapture(d,true);this.instance._mouseStart(d,true,true);this.instance.offset.click.top=e.offset.click.top;this.instance.offset.click.left=e.offset.click.left;this.instance.offset.parent.left-=e.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=e.offset.parent.top-this.instance.offset.parent.top;
-e._trigger("toSortable",d);e.dropped=this.instance.element;e.currentItem=e.element;this.instance.fromOutside=e}this.instance.currentItem&&this.instance._mouseDrag(d)}else if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",d,this.instance._uiHash(this.instance));this.instance._mouseStop(d,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();this.instance.placeholder&&
-this.instance.placeholder.remove();e._trigger("fromSortable",d);e.dropped=false}})}});a.ui.plugin.add("draggable","cursor",{start:function(){var d=a("body"),c=a(this).data("draggable").options;if(d.css("cursor"))c._cursor=d.css("cursor");d.css("cursor",c.cursor)},stop:function(){var d=a(this).data("draggable").options;d._cursor&&a("body").css("cursor",d._cursor)}});a.ui.plugin.add("draggable","opacity",{start:function(d,c){d=a(c.helper);c=a(this).data("draggable").options;if(d.css("opacity"))c._opacity=
-d.css("opacity");d.css("opacity",c.opacity)},stop:function(d,c){d=a(this).data("draggable").options;d._opacity&&a(c.helper).css("opacity",d._opacity)}});a.ui.plugin.add("draggable","scroll",{start:function(){var d=a(this).data("draggable");if(d.scrollParent[0]!=document&&d.scrollParent[0].tagName!="HTML")d.overflowOffset=d.scrollParent.offset()},drag:function(d){var c=a(this).data("draggable"),e=c.options,h=false;if(c.scrollParent[0]!=document&&c.scrollParent[0].tagName!="HTML"){if(!e.axis||e.axis!=
-"x")if(c.overflowOffset.top+c.scrollParent[0].offsetHeight-d.pageY<e.scrollSensitivity)c.scrollParent[0].scrollTop=h=c.scrollParent[0].scrollTop+e.scrollSpeed;else if(d.pageY-c.overflowOffset.top<e.scrollSensitivity)c.scrollParent[0].scrollTop=h=c.scrollParent[0].scrollTop-e.scrollSpeed;if(!e.axis||e.axis!="y")if(c.overflowOffset.left+c.scrollParent[0].offsetWidth-d.pageX<e.scrollSensitivity)c.scrollParent[0].scrollLeft=h=c.scrollParent[0].scrollLeft+e.scrollSpeed;else if(d.pageX-c.overflowOffset.left<
-e.scrollSensitivity)c.scrollParent[0].scrollLeft=h=c.scrollParent[0].scrollLeft-e.scrollSpeed}else{if(!e.axis||e.axis!="x")if(d.pageY-a(document).scrollTop()<e.scrollSensitivity)h=a(document).scrollTop(a(document).scrollTop()-e.scrollSpeed);else if(a(window).height()-(d.pageY-a(document).scrollTop())<e.scrollSensitivity)h=a(document).scrollTop(a(document).scrollTop()+e.scrollSpeed);if(!e.axis||e.axis!="y")if(d.pageX-a(document).scrollLeft()<e.scrollSensitivity)h=a(document).scrollLeft(a(document).scrollLeft()-
-e.scrollSpeed);else if(a(window).width()-(d.pageX-a(document).scrollLeft())<e.scrollSensitivity)h=a(document).scrollLeft(a(document).scrollLeft()+e.scrollSpeed)}h!==false&&a.ui.ddmanager&&!e.dropBehaviour&&a.ui.ddmanager.prepareOffsets(c,d)}});a.ui.plugin.add("draggable","snap",{start:function(){var d=a(this).data("draggable"),c=d.options;d.snapElements=[];a(c.snap.constructor!=String?c.snap.items||":data(draggable)":c.snap).each(function(){var e=a(this),h=e.offset();this!=d.element[0]&&d.snapElements.push({item:this,
-width:e.outerWidth(),height:e.outerHeight(),top:h.top,left:h.left})})},drag:function(d,c){for(var e=a(this).data("draggable"),h=e.options,g=h.snapTolerance,i=c.offset.left,b=i+e.helperProportions.width,f=c.offset.top,j=f+e.helperProportions.height,l=e.snapElements.length-1;l>=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<i&&i<n+g&&k-g<f&&f<m+g||o-g<i&&i<n+g&&k-g<j&&j<m+g||o-g<b&&b<n+g&&k-g<f&&f<m+g||o-g<b&&b<n+g&&k-g<j&&
-j<m+g){if(h.snapMode!="inner"){var p=Math.abs(k-j)<=g,q=Math.abs(m-f)<=g,s=Math.abs(o-b)<=g,r=Math.abs(n-i)<=g;if(p)c.position.top=e._convertPositionTo("relative",{top:k-e.helperProportions.height,left:0}).top-e.margins.top;if(q)c.position.top=e._convertPositionTo("relative",{top:m,left:0}).top-e.margins.top;if(s)c.position.left=e._convertPositionTo("relative",{top:0,left:o-e.helperProportions.width}).left-e.margins.left;if(r)c.position.left=e._convertPositionTo("relative",{top:0,left:n}).left-e.margins.left}var u=
-p||q||s||r;if(h.snapMode!="outer"){p=Math.abs(k-f)<=g;q=Math.abs(m-j)<=g;s=Math.abs(o-i)<=g;r=Math.abs(n-b)<=g;if(p)c.position.top=e._convertPositionTo("relative",{top:k,left:0}).top-e.margins.top;if(q)c.position.top=e._convertPositionTo("relative",{top:m-e.helperProportions.height,left:0}).top-e.margins.top;if(s)c.position.left=e._convertPositionTo("relative",{top:0,left:o}).left-e.margins.left;if(r)c.position.left=e._convertPositionTo("relative",{top:0,left:n-e.helperProportions.width}).left-e.margins.left}if(!e.snapElements[l].snapping&&
-(p||q||s||r||u))e.options.snap.snap&&e.options.snap.snap.call(e.element,d,a.extend(e._uiHash(),{snapItem:e.snapElements[l].item}));e.snapElements[l].snapping=p||q||s||r||u}else{e.snapElements[l].snapping&&e.options.snap.release&&e.options.snap.release.call(e.element,d,a.extend(e._uiHash(),{snapItem:e.snapElements[l].item}));e.snapElements[l].snapping=false}}}});a.ui.plugin.add("draggable","stack",{start:function(){var d=a(this).data("draggable").options;d=a.makeArray(a(d.stack)).sort(function(e,h){return(parseInt(a(e).css("zIndex"),
-10)||0)-(parseInt(a(h).css("zIndex"),10)||0)});if(d.length){var c=parseInt(d[0].style.zIndex)||0;a(d).each(function(e){this.style.zIndex=c+e});this[0].style.zIndex=c+d.length}}});a.ui.plugin.add("draggable","zIndex",{start:function(d,c){d=a(c.helper);c=a(this).data("draggable").options;if(d.css("zIndex"))c._zIndex=d.css("zIndex");d.css("zIndex",c.zIndex)},stop:function(d,c){d=a(this).data("draggable").options;d._zIndex&&a(c.helper).css("zIndex",d._zIndex)}})})(jQuery);
-(function(a){a.widget("ui.droppable",{widgetEventPrefix:"drop",options:{accept:"*",activeClass:false,addClasses:true,greedy:false,hoverClass:false,scope:"default",tolerance:"intersect"},_create:function(){var d=this.options,c=d.accept;this.isover=0;this.isout=1;this.accept=a.isFunction(c)?c:function(e){return e.is(c)};this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};a.ui.ddmanager.droppables[d.scope]=a.ui.ddmanager.droppables[d.scope]||[];a.ui.ddmanager.droppables[d.scope].push(this);
-d.addClasses&&this.element.addClass("ui-droppable")},destroy:function(){for(var d=a.ui.ddmanager.droppables[this.options.scope],c=0;c<d.length;c++)d[c]==this&&d.splice(c,1);this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable");return this},_setOption:function(d,c){if(d=="accept")this.accept=a.isFunction(c)?c:function(e){return e.is(c)};a.Widget.prototype._setOption.apply(this,arguments)},_activate:function(d){var c=a.ui.ddmanager.current;this.options.activeClass&&
-this.element.addClass(this.options.activeClass);c&&this._trigger("activate",d,this.ui(c))},_deactivate:function(d){var c=a.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass);c&&this._trigger("deactivate",d,this.ui(c))},_over:function(d){var c=a.ui.ddmanager.current;if(!(!c||(c.currentItem||c.element)[0]==this.element[0]))if(this.accept.call(this.element[0],c.currentItem||c.element)){this.options.hoverClass&&this.element.addClass(this.options.hoverClass);
-this._trigger("over",d,this.ui(c))}},_out:function(d){var c=a.ui.ddmanager.current;if(!(!c||(c.currentItem||c.element)[0]==this.element[0]))if(this.accept.call(this.element[0],c.currentItem||c.element)){this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("out",d,this.ui(c))}},_drop:function(d,c){var e=c||a.ui.ddmanager.current;if(!e||(e.currentItem||e.element)[0]==this.element[0])return false;var h=false;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var g=
-a.data(this,"droppable");if(g.options.greedy&&!g.options.disabled&&g.options.scope==e.options.scope&&g.accept.call(g.element[0],e.currentItem||e.element)&&a.ui.intersect(e,a.extend(g,{offset:g.element.offset()}),g.options.tolerance)){h=true;return false}});if(h)return false;if(this.accept.call(this.element[0],e.currentItem||e.element)){this.options.activeClass&&this.element.removeClass(this.options.activeClass);this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("drop",
-d,this.ui(e));return this.element}return false},ui:function(d){return{draggable:d.currentItem||d.element,helper:d.helper,position:d.position,offset:d.positionAbs}}});a.extend(a.ui.droppable,{version:"1.8.16"});a.ui.intersect=function(d,c,e){if(!c.offset)return false;var h=(d.positionAbs||d.position.absolute).left,g=h+d.helperProportions.width,i=(d.positionAbs||d.position.absolute).top,b=i+d.helperProportions.height,f=c.offset.left,j=f+c.proportions.width,l=c.offset.top,o=l+c.proportions.height;
-switch(e){case "fit":return f<=h&&g<=j&&l<=i&&b<=o;case "intersect":return f<h+d.helperProportions.width/2&&g-d.helperProportions.width/2<j&&l<i+d.helperProportions.height/2&&b-d.helperProportions.height/2<o;case "pointer":return a.ui.isOver((d.positionAbs||d.position.absolute).top+(d.clickOffset||d.offset.click).top,(d.positionAbs||d.position.absolute).left+(d.clickOffset||d.offset.click).left,l,f,c.proportions.height,c.proportions.width);case "touch":return(i>=l&&i<=o||b>=l&&b<=o||i<l&&b>o)&&(h>=
-f&&h<=j||g>=f&&g<=j||h<f&&g>j);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<e.length;i++)if(!(e[i].options.disabled||d&&!e[i].accept.call(e[i].element[0],d.currentItem||d.element))){for(var b=0;b<g.length;b++)if(g[b]==e[i].element[0]){e[i].proportions.height=0;continue a}e[i].visible=e[i].element.css("display")!=
-"none";if(e[i].visible){h=="mousedown"&&e[i]._activate.call(e[i],c);e[i].offset=e[i].element.offset();e[i].proportions={width:e[i].element[0].offsetWidth,height:e[i].element[0].offsetHeight}}}},drop:function(d,c){var e=false;a.each(a.ui.ddmanager.droppables[d.options.scope]||[],function(){if(this.options){if(!this.options.disabled&&this.visible&&a.ui.intersect(d,this,this.options.tolerance))e=e||this._drop.call(this,c);if(!this.options.disabled&&this.visible&&this.accept.call(this.element[0],d.currentItem||
-d.element)){this.isout=1;this.isover=0;this._deactivate.call(this,c)}}});return e},dragStart:function(d,c){d.element.parents(":not(body,html)").bind("scroll.droppable",function(){d.options.refreshPositions||a.ui.ddmanager.prepareOffsets(d,c)})},drag:function(d,c){d.options.refreshPositions&&a.ui.ddmanager.prepareOffsets(d,c);a.each(a.ui.ddmanager.droppables[d.options.scope]||[],function(){if(!(this.options.disabled||this.greedyChild||!this.visible)){var e=a.ui.intersect(d,this,this.options.tolerance);
-if(e=!e&&this.isover==1?"isout":e&&this.isover==0?"isover":null){var h;if(this.options.greedy){var g=this.element.parents(":data(droppable):eq(0)");if(g.length){h=a.data(g[0],"droppable");h.greedyChild=e=="isover"?1:0}}if(h&&e=="isover"){h.isover=0;h.isout=1;h._out.call(h,c)}this[e]=1;this[e=="isout"?"isover":"isout"]=0;this[e=="isover"?"_over":"_out"].call(this,c);if(h&&e=="isout"){h.isout=0;h.isover=1;h._over.call(h,c)}}}})},dragStop:function(d,c){d.element.parents(":not(body,html)").unbind("scroll.droppable");
-d.options.refreshPositions||a.ui.ddmanager.prepareOffsets(d,c)}}})(jQuery);
-(function(a){a.widget("ui.resizable",a.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1E3},_create:function(){var e=this,h=this.options;this.element.addClass("ui-resizable");a.extend(this,{_aspectRatio:!!h.aspectRatio,aspectRatio:h.aspectRatio,originalElement:this.element,
-_proportionallyResizeElements:[],_helper:h.helper||h.ghost||h.animate?h.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){/relative/.test(this.element.css("position"))&&a.browser.opera&&this.element.css({position:"relative",top:"auto",left:"auto"});this.element.wrap(a('<div class="ui-wrapper" style="overflow: hidden;"></div>').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<g.length;i++){var b=a.trim(g[i]),f=a('<div class="ui-resizable-handle '+("ui-resizable-"+b)+'"></div>');/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(g<h.maxWidth)h.maxWidth=g;if(b<h.maxHeight)h.maxHeight=b}this._vBoundaries=h},_updateCache:function(e){this.offset=this.helper.offset();if(c(e.left))this.position.left=e.left;if(c(e.top))this.position.top=e.top;if(c(e.height))this.size.height=e.height;if(c(e.width))this.size.width=
-e.width},_updateRatio:function(e){var h=this.position,g=this.size,i=this.axis;if(c(e.height))e.width=e.height*this.aspectRatio;else if(c(e.width))e.height=e.width/this.aspectRatio;if(i=="sw"){e.left=h.left+(g.width-e.width);e.top=null}if(i=="nw"){e.top=h.top+(g.height-e.height);e.left=h.left+(g.width-e.width)}return e},_respectSize:function(e){var h=this._vBoundaries,g=this.axis,i=c(e.width)&&h.maxWidth&&h.maxWidth<e.width,b=c(e.height)&&h.maxHeight&&h.maxHeight<e.height,f=c(e.width)&&h.minWidth&&
-h.minWidth>e.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<this._proportionallyResizeElements.length;h++){var g=this._proportionallyResizeElements[h];if(!this.borderDif){var i=[g.css("borderTopWidth"),g.css("borderRightWidth"),g.css("borderBottomWidth"),g.css("borderLeftWidth")],b=[g.css("paddingTop"),g.css("paddingRight"),g.css("paddingBottom"),g.css("paddingLeft")];this.borderDif=a.map(i,function(f,j){f=parseInt(f,10)||
-0;j=parseInt(b[j],10)||0;return f+j})}a.browser.msie&&(a(e).is(":hidden")||a(e).parents(":hidden").length)||g.css({height:e.height()-this.borderDif[0]-this.borderDif[2]||0,width:e.width()-this.borderDif[1]-this.borderDif[3]||0})}},_renderProxy:function(){var e=this.options;this.elementOffset=this.element.offset();if(this._helper){this.helper=this.helper||a('<div style="overflow:hidden;"></div>');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("<div class='ui-selectable-helper'></div>")},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.right<h||j.top>b||j.bottom<g);else if(e.tolerance=="fit")l=j.left>h&&j.right<i&&j.top>g&&j.bottom<b;if(l){if(j.selected){j.$element.removeClass("ui-selected");j.selected=false}if(j.unselecting){j.$element.removeClass("ui-unselecting");
-j.unselecting=false}if(!j.selecting){j.$element.addClass("ui-selecting");j.selecting=true;c._trigger("selecting",d,{selecting:j.element})}}else{if(j.selecting)if(d.metaKey&&j.startselected){j.$element.removeClass("ui-selecting");j.selecting=false;j.$element.addClass("ui-selected");j.selected=true}else{j.$element.removeClass("ui-selecting");j.selecting=false;if(j.startselected){j.$element.addClass("ui-unselecting");j.unselecting=true}c._trigger("unselecting",d,{unselecting:j.element})}if(j.selected)if(!d.metaKey&&
-!j.startselected){j.$element.removeClass("ui-selected");j.selected=false;j.$element.addClass("ui-unselecting");j.unselecting=true;c._trigger("unselecting",d,{unselecting:j.element})}}}});return false}},_mouseStop:function(d){var c=this;this.dragged=false;a(".ui-unselecting",this.element[0]).each(function(){var e=a.data(this,"selectable-item");e.$element.removeClass("ui-unselecting");e.unselecting=false;e.startselected=false;c._trigger("unselected",d,{unselected:e.element})});a(".ui-selecting",this.element[0]).each(function(){var e=
-a.data(this,"selectable-item");e.$element.removeClass("ui-selecting").addClass("ui-selected");e.selecting=false;e.selected=true;e.startselected=true;c._trigger("selected",d,{selected:e.element})});this._trigger("stop",d);this.helper.remove();return false}});a.extend(a.ui.selectable,{version:"1.8.16"})})(jQuery);
-(function(a){a.widget("ui.sortable",a.ui.mouse,{widgetEventPrefix:"sort",options:{appendTo:"parent",axis:false,connectWith:false,containment:false,cursor:"auto",cursorAt:false,dropOnEmpty:true,forcePlaceholderSize:false,forceHelperSize:false,grid:false,handle:false,helper:"original",items:"> *",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<c.scrollSensitivity)this.scrollParent[0].scrollTop=e=this.scrollParent[0].scrollTop+c.scrollSpeed;else if(d.pageY-this.overflowOffset.top<
-c.scrollSensitivity)this.scrollParent[0].scrollTop=e=this.scrollParent[0].scrollTop-c.scrollSpeed;if(this.overflowOffset.left+this.scrollParent[0].offsetWidth-d.pageX<c.scrollSensitivity)this.scrollParent[0].scrollLeft=e=this.scrollParent[0].scrollLeft+c.scrollSpeed;else if(d.pageX-this.overflowOffset.left<c.scrollSensitivity)this.scrollParent[0].scrollLeft=e=this.scrollParent[0].scrollLeft-c.scrollSpeed}else{if(d.pageY-a(document).scrollTop()<c.scrollSensitivity)e=a(document).scrollTop(a(document).scrollTop()-
-c.scrollSpeed);else if(a(window).height()-(d.pageY-a(document).scrollTop())<c.scrollSensitivity)e=a(document).scrollTop(a(document).scrollTop()+c.scrollSpeed);if(d.pageX-a(document).scrollLeft()<c.scrollSensitivity)e=a(document).scrollLeft(a(document).scrollLeft()-c.scrollSpeed);else if(a(window).width()-(d.pageX-a(document).scrollLeft())<c.scrollSensitivity)e=a(document).scrollLeft(a(document).scrollLeft()+c.scrollSpeed)}e!==false&&a.ui.ddmanager&&!c.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,
-d)}this.positionAbs=this._convertPositionTo("absolute");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";for(c=this.items.length-1;c>=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+l<j&&c+o>i&&c+o<b;return this.options.tolerance=="pointer"||this.options.forcePointerForContainers||
-this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>d[this.floating?"width":"height"]?l:i<c+this.helperProportions.width/2&&e-this.helperProportions.width/2<b&&f<h+this.helperProportions.height/2&&g-this.helperProportions.height/2<j},_intersectsWithPointer:function(d){var c=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,d.top,d.height);d=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,d.left,d.width);c=c&&d;d=this._getDragVerticalDirection();
-var e=this._getDragHorizontalDirection();if(!c)return false;return this.floating?e&&e=="right"||d=="down"?2:1:d&&(d=="down"?2:1)},_intersectsWithSides:function(d){var c=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,d.top+d.height/2,d.height);d=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,d.left+d.width/2,d.width);var e=this._getDragVerticalDirection(),h=this._getDragHorizontalDirection();return this.floating&&h?h=="right"&&d||h=="left"&&!d:e&&(e=="down"&&c||e=="up"&&!c)},
-_getDragVerticalDirection:function(){var d=this.positionAbs.top-this.lastPositionAbs.top;return d!=0&&(d>0?"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<this.items.length;c++)for(var e=0;e<d.length;e++)d[e]==this.items[c].item[0]&&this.items.splice(c,1)},_refreshItems:function(d){this.items=[];this.containers=[this];var c=this.items,e=[[a.isFunction(this.options.items)?this.options.items.call(this.element[0],d,{item:this.currentItem}):a(this.options.items,this.element),
-this]],h=this._connectWith();if(h)for(var g=h.length-1;g>=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<i;b++){f=a(h[b]);f.data("sortable-item",d);c.push({item:f,instance:d,width:0,height:0,left:0,top:0})}}},refreshPositions:function(d){if(this.offsetParent&&
-this.helper)this.offset.parent=this._getParentOffset();for(var c=this.items.length-1;c>=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)<c){c=Math.abs(b-g);h=this.items[i]}}if(h||this.options.dropOnEmpty){this.currentContainer=this.containers[e];h?this._rearrange(d,h,null,true):this._rearrange(d,null,this.containers[e].element,true);this._trigger("change",d,this._uiHash());this.containers[e]._trigger("change",d,this._uiHash(this));this.options.placeholder.update(this.currentContainer,this.placeholder);this.containers[e]._trigger("over",d,this._uiHash(this));this.containers[e].containerCache.over=1}}},_createHelper:function(d){var c=
-this.options;d=a.isFunction(c.helper)?a(c.helper.apply(this.element[0],[d,this.currentItem])):c.helper=="clone"?this.currentItem.clone():this.currentItem;d.parents("body").length||a(c.appendTo!="parent"?c.appendTo:this.currentItem[0].parentNode)[0].appendChild(d[0]);if(d[0]==this.currentItem[0])this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")};if(d[0].style.width==
-""||c.forceHelperSize)d.width(this.currentItem.width());if(d[0].style.height==""||c.forceHelperSize)d.height(this.currentItem.height());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.currentItem.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.currentItem.css("marginLeft"),
-10)||0,top:parseInt(this.currentItem.css("marginTop"),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=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(d.containment=="document"?
-document:window).width()-this.helperProportions.width-this.margins.left,(a(d.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(d.containment)){var c=a(d.containment)[0];d=a(d.containment).offset();var e=a(c).css("overflow")!="hidden";this.containment=[d.left+(parseInt(a(c).css("borderLeftWidth"),10)||0)+(parseInt(a(c).css("paddingLeft"),10)||0)-this.margins.left,d.top+(parseInt(a(c).css("borderTopWidth"),
-10)||0)+(parseInt(a(c).css("paddingTop"),10)||0)-this.margins.top,d.left+(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,d.top+(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]}},_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&&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&&
-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);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0]))this.offset.relative=this._getRelativeOffset();
-var g=d.pageX,i=d.pageY;if(this.originalPosition){if(this.containment){if(d.pageX-this.offset.click.left<this.containment[0])g=this.containment[0]+this.offset.click.left;if(d.pageY-this.offset.click.top<this.containment[1])i=this.containment[1]+this.offset.click.top;if(d.pageX-this.offset.click.left>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.top<this.containment[1]||i-this.offset.click.top>this.containment[3])?i:!(i-this.offset.click.top<this.containment[1])?i-c.grid[1]:i+c.grid[1]:i;g=this.originalPageX+Math.round((g-this.originalPageX)/c.grid[0])*c.grid[0];g=this.containment?!(g-this.offset.click.left<this.containment[0]||g-this.offset.click.left>this.containment[2])?g:!(g-this.offset.click.left<this.containment[0])?g-c.grid[0]:g+c.grid[0]:g}}return{top:i-
-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():h?0:e.scrollTop()),left:g-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():h?0:e.scrollLeft())}},_rearrange:function(d,c,e,h){e?e[0].appendChild(this.placeholder[0]):c.item[0].parentNode.insertBefore(this.placeholder[0],
-this.direction=="down"?c.item[0]:c.item[0].nextSibling);this.counter=this.counter?++this.counter:1;var g=this,i=this.counter;window.setTimeout(function(){i==g.counter&&g.refreshPositions(!h)},0)},_clear:function(d,c){this.reverting=false;var e=[];!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem);this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var h in this._storedCSS)if(this._storedCSS[h]=="auto"||this._storedCSS[h]=="static")this._storedCSS[h]=
-"";this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();this.fromOutside&&!c&&e.push(function(g){this._trigger("receive",g,this._uiHash(this.fromOutside))});if((this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!c)e.push(function(g){this._trigger("update",g,this._uiHash())});if(!a.ui.contains(this.element[0],this.currentItem[0])){c||e.push(function(g){this._trigger("remove",
-g,this._uiHash())});for(h=this.containers.length-1;h>=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<e.length;h++)e[h].call(this,d);this._trigger("stop",d,this._uiHash())}return false}c||this._trigger("beforeStop",d,this._uiHash());this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.helper[0]!=this.currentItem[0]&&this.helper.remove();this.helper=null;if(!c){for(h=0;h<e.length;h++)e[h].call(this,d);this._trigger("stop",d,this._uiHash())}this.fromOutside=false;return true},_trigger:function(){a.Widget.prototype._trigger.apply(this,arguments)===false&&this.cancel()},
-_uiHash:function(d){var c=d||this;return{helper:c.helper,placeholder:c.placeholder||a([]),position:c.position,originalPosition:c.originalPosition,offset:c.positionAbs,item:c.currentItem,sender:d?d.element:null}}});a.extend(a.ui.sortable,{version:"1.8.16"})})(jQuery);
-jQuery.effects||function(a,d){function c(n){var k;if(n&&n.constructor==Array&&n.length==3)return n;if(k=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(n))return[parseInt(k[1],10),parseInt(k[2],10),parseInt(k[3],10)];if(k=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(n))return[parseFloat(k[1])*2.55,parseFloat(k[2])*2.55,parseFloat(k[3])*2.55];if(k=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(n))return[parseInt(k[1],
-16),parseInt(k[2],16),parseInt(k[3],16)];if(k=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(n))return[parseInt(k[1]+k[1],16),parseInt(k[2]+k[2],16),parseInt(k[3]+k[3],16)];if(/rgba\(0, 0, 0, 0\)/.exec(n))return j.transparent;return j[a.trim(n).toLowerCase()]}function e(n,k){var m;do{m=a.curCSS(n,k);if(m!=""&&m!="transparent"||a.nodeName(n,"body"))break;k="backgroundColor"}while(n=n.parentNode);return c(m)}function h(){var n=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle,
-k={},m,p;if(n&&n.length&&n[0]&&n[n[0]])for(var q=n.length;q--;){m=n[q];if(typeof n[m]=="string"){p=m.replace(/\-(\w)/g,function(s,r){return r.toUpperCase()});k[p]=n[m]}}else for(m in n)if(typeof n[m]==="string")k[m]=n[m];return k}function g(n){var k,m;for(k in n){m=n[k];if(m==null||a.isFunction(m)||k in o||/scrollbar/.test(k)||!/color/i.test(k)&&isNaN(parseFloat(m)))delete n[k]}return n}function i(n,k){var m={_:0},p;for(p in k)if(n[p]!=k[p])m[p]=k[p];return m}function b(n,k,m,p){if(typeof n=="object"){p=
-k;m=null;k=n;n=k.effect}if(a.isFunction(k)){p=k;m=null;k={}}if(typeof k=="number"||a.fx.speeds[k]){p=m;m=k;k={}}if(a.isFunction(m)){p=m;m=null}k=k||{};m=m||k.duration;m=a.fx.off?0:typeof m=="number"?m:m in a.fx.speeds?a.fx.speeds[m]:a.fx.speeds._default;p=p||k.complete;return[n,k,m,p]}function f(n){if(!n||typeof n==="number"||a.fx.speeds[n])return true;if(typeof n==="string"&&!a.effects[n])return true;return false}a.effects={};a.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor",
-"borderTopColor","borderColor","color","outlineColor"],function(n,k){a.fx.step[k]=function(m){if(!m.colorInit){m.start=e(m.elem,k);m.end=c(m.end);m.colorInit=true}m.elem.style[k]="rgb("+Math.max(Math.min(parseInt(m.pos*(m.end[0]-m.start[0])+m.start[0],10),255),0)+","+Math.max(Math.min(parseInt(m.pos*(m.end[1]-m.start[1])+m.start[1],10),255),0)+","+Math.max(Math.min(parseInt(m.pos*(m.end[2]-m.start[2])+m.start[2],10),255),0)+")"}});var j={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,
-0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,
-211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},l=["add","remove","toggle"],o={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};a.effects.animateClass=function(n,k,m,
-p){if(a.isFunction(m)){p=m;m=null}return this.queue(function(){var q=a(this),s=q.attr("style")||" ",r=g(h.call(this)),u,v=q.attr("class");a.each(l,function(w,x){n[x]&&q[x+"Class"](n[x])});u=g(h.call(this));q.attr("class",v);q.animate(i(r,u),{queue:false,duration:k,easing:m,complete:function(){a.each(l,function(w,x){n[x]&&q[x+"Class"](n[x])});if(typeof q.attr("style")=="object"){q.attr("style").cssText="";q.attr("style").cssText=s}else q.attr("style",s);p&&p.apply(this,arguments);a.dequeue(this)}})})};
-a.fn.extend({_addClass:a.fn.addClass,addClass:function(n,k,m,p){return k?a.effects.animateClass.apply(this,[{add:n},k,m,p]):this._addClass(n)},_removeClass:a.fn.removeClass,removeClass:function(n,k,m,p){return k?a.effects.animateClass.apply(this,[{remove:n},k,m,p]):this._removeClass(n)},_toggleClass:a.fn.toggleClass,toggleClass:function(n,k,m,p,q){return typeof k=="boolean"||k===d?m?a.effects.animateClass.apply(this,[k?{add:n}:{remove:n},m,p,q]):this._toggleClass(n,k):a.effects.animateClass.apply(this,
-[{toggle:n},k,m,p])},switchClass:function(n,k,m,p,q){return a.effects.animateClass.apply(this,[{add:k,remove:n},m,p,q])}});a.extend(a.effects,{version:"1.8.16",save:function(n,k){for(var m=0;m<k.length;m++)k[m]!==null&&n.data("ec.storage."+k[m],n[0].style[k[m]])},restore:function(n,k){for(var m=0;m<k.length;m++)k[m]!==null&&n.css(k[m],n.data("ec.storage."+k[m]))},setMode:function(n,k){if(k=="toggle")k=n.is(":hidden")?"show":"hide";return k},getBaseline:function(n,k){var m;switch(n[0]){case "top":m=
-0;break;case "middle":m=0.5;break;case "bottom":m=1;break;default:m=n[0]/k.height}switch(n[1]){case "left":n=0;break;case "center":n=0.5;break;case "right":n=1;break;default:n=n[1]/k.width}return{x:n,y:m}},createWrapper:function(n){if(n.parent().is(".ui-effects-wrapper"))return n.parent();var k={width:n.outerWidth(true),height:n.outerHeight(true),"float":n.css("float")},m=a("<div></div>").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<Math.abs(p)){r=p;n=s/4}else n=s/(2*Math.PI)*Math.asin(p/r);return-(r*Math.pow(2,10*(k-=1))*Math.sin((k*q-n)*2*Math.PI/s))+m},easeOutElastic: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<Math.abs(p)){r=p;n=s/4}else n=s/(2*Math.PI)*Math.asin(p/r);return r*Math.pow(2,-10*k)*Math.sin((k*q-n)*2*Math.PI/s)+p+m},easeInOutElastic:function(n,k,m,p,q){n=1.70158;var s=
-0,r=p;if(k==0)return m;if((k/=q/2)==2)return m+p;s||(s=q*0.3*1.5);if(r<Math.abs(p)){r=p;n=s/4}else n=s/(2*Math.PI)*Math.asin(p/r);if(k<1)return-0.5*r*Math.pow(2,10*(k-=1))*Math.sin((k*q-n)*2*Math.PI/s)+m;return r*Math.pow(2,-10*(k-=1))*Math.sin((k*q-n)*2*Math.PI/s)*0.5+p+m},easeInBack:function(n,k,m,p,q,s){if(s==d)s=1.70158;return p*(k/=q)*k*((s+1)*k-s)+m},easeOutBack:function(n,k,m,p,q,s){if(s==d)s=1.70158;return p*((k=k/q-1)*k*((s+1)*k+s)+1)+m},easeInOutBack:function(n,k,m,p,q,s){if(s==d)s=1.70158;
-if((k/=q/2)<1)return p/2*k*k*(((s*=1.525)+1)*k-s)+m;return p/2*((k-=2)*k*(((s*=1.525)+1)*k+s)+2)+m},easeInBounce:function(n,k,m,p,q){return p-a.easing.easeOutBounce(n,q-k,0,p,q)+m},easeOutBounce:function(n,k,m,p,q){return(k/=q)<1/2.75?p*7.5625*k*k+m:k<2/2.75?p*(7.5625*(k-=1.5/2.75)*k+0.75)+m:k<2.5/2.75?p*(7.5625*(k-=2.25/2.75)*k+0.9375)+m:p*(7.5625*(k-=2.625/2.75)*k+0.984375)+m},easeInOutBounce:function(n,k,m,p,q){if(k<q/2)return a.easing.easeInBounce(n,k*2,0,p,q)*0.5+m;return a.easing.easeOutBounce(n,
-k*2-q,0,p,q)*0.5+p*0.5+m}})}(jQuery);
-(function(a){a.effects.blind=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.direction||"vertical";a.effects.save(c,e);c.show();var i=a.effects.createWrapper(c).css({overflow:"hidden"}),b=g=="vertical"?"height":"width";g=g=="vertical"?i.height():i.width();h=="show"&&i.css(b,0);var f={};f[b]=h=="show"?g:0;i.animate(f,d.duration,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.bounce=function(d){return this.queue(function(){var c=a(this),e=["position","top","bottom","left","right"],h=a.effects.setMode(c,d.options.mode||"effect"),g=d.options.direction||"up",i=d.options.distance||20,b=d.options.times||5,f=d.duration||250;/show|hide/.test(h)&&e.push("opacity");a.effects.save(c,e);c.show();a.effects.createWrapper(c);var j=g=="up"||g=="down"?"top":"left";g=g=="up"||g=="left"?"pos":"neg";i=d.options.distance||(j=="top"?c.outerHeight({margin:true})/3:c.outerWidth({margin:true})/
-3);if(h=="show")c.css("opacity",0).css(j,g=="pos"?-i:i);if(h=="hide")i/=b*2;h!="hide"&&b--;if(h=="show"){var l={opacity:1};l[j]=(g=="pos"?"+=":"-=")+i;c.animate(l,f/2,d.options.easing);i/=2;b--}for(l=0;l<b;l++){var o={},n={};o[j]=(g=="pos"?"-=":"+=")+i;n[j]=(g=="pos"?"+=":"-=")+i;c.animate(o,f/2,d.options.easing).animate(n,f/2,d.options.easing);i=h=="hide"?i*2:i/2}if(h=="hide"){l={opacity:0};l[j]=(g=="pos"?"-=":"+=")+i;c.animate(l,f/2,d.options.easing,function(){c.hide();a.effects.restore(c,e);a.effects.removeWrapper(c);
-d.callback&&d.callback.apply(this,arguments)})}else{o={};n={};o[j]=(g=="pos"?"-=":"+=")+i;n[j]=(g=="pos"?"+=":"-=")+i;c.animate(o,f/2,d.options.easing).animate(n,f/2,d.options.easing,function(){a.effects.restore(c,e);a.effects.removeWrapper(c);d.callback&&d.callback.apply(this,arguments)})}c.queue("fx",function(){c.dequeue()});c.dequeue()})}})(jQuery);
-(function(a){a.effects.clip=function(d){return this.queue(function(){var c=a(this),e=["position","top","bottom","left","right","height","width"],h=a.effects.setMode(c,d.options.mode||"hide"),g=d.options.direction||"vertical";a.effects.save(c,e);c.show();var i=a.effects.createWrapper(c).css({overflow:"hidden"});i=c[0].tagName=="IMG"?i:c;var b={size:g=="vertical"?"height":"width",position:g=="vertical"?"top":"left"};g=g=="vertical"?i.height():i.width();if(h=="show"){i.css(b.size,0);i.css(b.position,
-g/2)}var f={};f[b.size]=h=="show"?g:0;f[b.position]=h=="show"?0:g/2;i.animate(f,{queue:false,duration:d.duration,easing:d.options.easing,complete: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.drop=function(d){return this.queue(function(){var c=a(this),e=["position","top","bottom","left","right","opacity"],h=a.effects.setMode(c,d.options.mode||"hide"),g=d.options.direction||"left";a.effects.save(c,e);c.show();a.effects.createWrapper(c);var i=g=="up"||g=="down"?"top":"left";g=g=="up"||g=="left"?"pos":"neg";var b=d.options.distance||(i=="top"?c.outerHeight({margin:true})/2:c.outerWidth({margin:true})/2);if(h=="show")c.css("opacity",0).css(i,g=="pos"?-b:b);var f={opacity:h==
-"show"?1:0};f[i]=(h=="show"?g=="pos"?"+=":"-=":g=="pos"?"-=":"+=")+b;c.animate(f,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){h=="hide"&&c.hide();a.effects.restore(c,e);a.effects.removeWrapper(c);d.callback&&d.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery);
-(function(a){a.effects.explode=function(d){return this.queue(function(){var c=d.options.pieces?Math.round(Math.sqrt(d.options.pieces)):3,e=d.options.pieces?Math.round(Math.sqrt(d.options.pieces)):3;d.options.mode=d.options.mode=="toggle"?a(this).is(":visible")?"hide":"show":d.options.mode;var h=a(this).show().css("visibility","hidden"),g=h.offset();g.top-=parseInt(h.css("marginTop"),10)||0;g.left-=parseInt(h.css("marginLeft"),10)||0;for(var i=h.outerWidth(true),b=h.outerHeight(true),f=0;f<c;f++)for(var j=
-0;j<e;j++)h.clone().appendTo("body").wrap("<div></div>").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<times;e++){c.animate({opacity:animateTo},duration,d.options.easing);animateTo=(animateTo+1)%2}c.animate({opacity:animateTo},duration,
-d.options.easing,function(){animateTo==0&&c.hide();d.callback&&d.callback.apply(this,arguments)});c.queue("fx",function(){c.dequeue()}).dequeue()})}})(jQuery);
-(function(a){a.effects.puff=function(d){return this.queue(function(){var c=a(this),e=a.effects.setMode(c,d.options.mode||"hide"),h=parseInt(d.options.percent,10)||150,g=h/100,i={height:c.height(),width:c.width()};a.extend(d.options,{fade:true,mode:e,percent:e=="hide"?h:100,from:e=="hide"?i:{height:i.height*g,width:i.width*g}});c.effect("scale",d.options,d.duration,d.callback);c.dequeue()})};a.effects.scale=function(d){return this.queue(function(){var c=a(this),e=a.extend(true,{},d.options),h=a.effects.setMode(c,
-d.options.mode||"effect"),g=parseInt(d.options.percent,10)||(parseInt(d.options.percent,10)==0?0:h=="hide"?0:100),i=d.options.direction||"both",b=d.options.origin;if(h!="effect"){e.origin=b||["middle","center"];e.restore=true}b={height:c.height(),width:c.width()};c.from=d.options.from||(h=="show"?{height:0,width:0}:b);g={y:i!="horizontal"?g/100:1,x:i!="vertical"?g/100:1};c.to={height:b.height*g.y,width:b.width*g.x};if(d.options.fade){if(h=="show"){c.from.opacity=0;c.to.opacity=1}if(h=="hide"){c.from.opacity=
-1;c.to.opacity=0}}e.from=c.from;e.to=c.to;e.mode=h;c.effect("size",e,d.duration,d.callback);c.dequeue()})};a.effects.size=function(d){return this.queue(function(){var c=a(this),e=["position","top","bottom","left","right","width","height","overflow","opacity"],h=["position","top","bottom","left","right","overflow","opacity"],g=["width","height","overflow"],i=["fontSize"],b=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],f=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],
-j=a.effects.setMode(c,d.options.mode||"effect"),l=d.options.restore||false,o=d.options.scale||"both",n=d.options.origin,k={height:c.height(),width:c.width()};c.from=d.options.from||k;c.to=d.options.to||k;if(n){n=a.effects.getBaseline(n,k);c.from.top=(k.height-c.from.height)*n.y;c.from.left=(k.width-c.from.width)*n.x;c.to.top=(k.height-c.to.height)*n.y;c.to.left=(k.width-c.to.width)*n.x}var m={from:{y:c.from.height/k.height,x:c.from.width/k.width},to:{y:c.to.height/k.height,x:c.to.width/k.width}};
-if(o=="box"||o=="both"){if(m.from.y!=m.to.y){e=e.concat(b);c.from=a.effects.setTransition(c,b,m.from.y,c.from);c.to=a.effects.setTransition(c,b,m.to.y,c.to)}if(m.from.x!=m.to.x){e=e.concat(f);c.from=a.effects.setTransition(c,f,m.from.x,c.from);c.to=a.effects.setTransition(c,f,m.to.x,c.to)}}if(o=="content"||o=="both")if(m.from.y!=m.to.y){e=e.concat(i);c.from=a.effects.setTransition(c,i,m.from.y,c.from);c.to=a.effects.setTransition(c,i,m.to.y,c.to)}a.effects.save(c,l?e:h);c.show();a.effects.createWrapper(c);
-c.css("overflow","hidden").css(c.from);if(o=="content"||o=="both"){b=b.concat(["marginTop","marginBottom"]).concat(i);f=f.concat(["marginLeft","marginRight"]);g=e.concat(b).concat(f);c.find("*[width]").each(function(){child=a(this);l&&a.effects.save(child,g);var p={height:child.height(),width:child.width()};child.from={height:p.height*m.from.y,width:p.width*m.from.x};child.to={height:p.height*m.to.y,width:p.width*m.to.x};if(m.from.y!=m.to.y){child.from=a.effects.setTransition(child,b,m.from.y,child.from);
-child.to=a.effects.setTransition(child,b,m.to.y,child.to)}if(m.from.x!=m.to.x){child.from=a.effects.setTransition(child,f,m.from.x,child.from);child.to=a.effects.setTransition(child,f,m.to.x,child.to)}child.css(child.from);child.animate(child.to,d.duration,d.options.easing,function(){l&&a.effects.restore(child,g)})})}c.animate(c.to,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){c.to.opacity===0&&c.css("opacity",c.from.opacity);j=="hide"&&c.hide();a.effects.restore(c,
-l?e:h);a.effects.removeWrapper(c);d.callback&&d.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery);
-(function(a){a.effects.shake=function(d){return this.queue(function(){var c=a(this),e=["position","top","bottom","left","right"];a.effects.setMode(c,d.options.mode||"effect");var h=d.options.direction||"left",g=d.options.distance||20,i=d.options.times||3,b=d.duration||d.options.duration||140;a.effects.save(c,e);c.show();a.effects.createWrapper(c);var f=h=="up"||h=="down"?"top":"left",j=h=="up"||h=="left"?"pos":"neg";h={};var l={},o={};h[f]=(j=="pos"?"-=":"+=")+g;l[f]=(j=="pos"?"+=":"-=")+g*2;o[f]=
-(j=="pos"?"-=":"+=")+g*2;c.animate(h,b,d.options.easing);for(g=1;g<i;g++)c.animate(l,b,d.options.easing).animate(o,b,d.options.easing);c.animate(l,b,d.options.easing).animate(h,b/2,d.options.easing,function(){a.effects.restore(c,e);a.effects.removeWrapper(c);d.callback&&d.callback.apply(this,arguments)});c.queue("fx",function(){c.dequeue()});c.dequeue()})}})(jQuery);
-(function(a){a.effects.slide=function(d){return this.queue(function(){var c=a(this),e=["position","top","bottom","left","right"],h=a.effects.setMode(c,d.options.mode||"show"),g=d.options.direction||"left";a.effects.save(c,e);c.show();a.effects.createWrapper(c).css({overflow:"hidden"});var i=g=="up"||g=="down"?"top":"left";g=g=="up"||g=="left"?"pos":"neg";var b=d.options.distance||(i=="top"?c.outerHeight({margin:true}):c.outerWidth({margin:true}));if(h=="show")c.css(i,g=="pos"?isNaN(b)?"-"+b:-b:b);
-var f={};f[i]=(h=="show"?g=="pos"?"+=":"-=":g=="pos"?"-=":"+=")+b;c.animate(f,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){h=="hide"&&c.hide();a.effects.restore(c,e);a.effects.removeWrapper(c);d.callback&&d.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery);
-(function(a){a.effects.transfer=function(d){return this.queue(function(){var c=a(this),e=a(d.options.to),h=e.offset();e={top:h.top,left:h.left,height:e.innerHeight(),width:e.innerWidth()};h=c.offset();var g=a('<div class="ui-effects-transfer"></div>').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("<span></span>").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("<ul></ul>").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<this.options.minLength)return this.close(e);clearTimeout(this.closing);if(this._trigger("search",e)!==false)return this._search(c)},_search:function(c){this.pending++;this.element.addClass("ui-autocomplete-loading");this.source({term:c},this.response)},_response:function(c){if(!this.options.disabled&&c&&c.length){c=this._normalize(c);this._suggest(c);this._trigger("open")}else this.close();
-this.pending--;this.pending||this.element.removeClass("ui-autocomplete-loading")},close:function(c){clearTimeout(this.closing);if(this.menu.element.is(":visible")){this.menu.element.hide();this.menu.deactivate();this._trigger("close",c)}},_change:function(c){this.previous!==this.element.val()&&this._trigger("change",c,{item:this.selectedItem})},_normalize:function(c){if(c.length&&c[0].label&&c[0].value)return c;return a.map(c,function(e){if(typeof e==="string")return{label:e,value:e};return a.extend({label:e.label||
-e.value,value:e.value||e.label},e)})},_suggest:function(c){var e=this.menu.element.empty().zIndex(this.element.zIndex()+1);this._renderMenu(e,c);this.menu.deactivate();this.menu.refresh();e.show();this._resizeMenu();e.position(a.extend({of:this.element},this.options.position));this.options.autoFocus&&this.menu.next(new a.Event("mouseover"))},_resizeMenu:function(){var c=this.menu.element;c.outerWidth(Math.max(c.width("").outerWidth(),this.element.outerWidth()))},_renderMenu:function(c,e){var h=this;
-a.each(e,function(g,i){h._renderItem(c,i)})},_renderItem:function(c,e){return a("<li></li>").data("item.autocomplete",e).append(a("<a></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()<this.element[a.fn.prop?"prop":"attr"]("scrollHeight")},select:function(d){this._trigger("selected",d,{item:this.active})}})})(jQuery);
-(function(a){var d,c,e,h,g=function(){var b=a(this).find(":ui-button");setTimeout(function(){b.button("refresh")},1)},i=function(b){var f=b.name,j=b.form,l=a([]);if(f)l=j?a(j).find("[name='"+f+"']"):a("[name='"+f+"']",b.ownerDocument).filter(function(){return!this.form});return l};a.widget("ui.button",{options:{disabled:null,text:true,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset.button").bind("reset.button",g);if(typeof this.options.disabled!==
-"boolean")this.options.disabled=this.element.propAttr("disabled");this._determineButtonType();this.hasTitle=!!this.buttonElement.attr("title");var b=this,f=this.options,j=this.type==="checkbox"||this.type==="radio",l="ui-state-hover"+(!j?" ui-state-active":"");if(f.label===null)f.label=this.buttonElement.html();if(this.element.is(":disabled"))f.disabled=true;this.buttonElement.addClass("ui-button ui-widget ui-state-default ui-corner-all").attr("role","button").bind("mouseenter.button",function(){if(!f.disabled){a(this).addClass("ui-state-hover");
-this===d&&a(this).addClass("ui-state-active")}}).bind("mouseleave.button",function(){f.disabled||a(this).removeClass(l)}).bind("click.button",function(o){if(f.disabled){o.preventDefault();o.stopImmediatePropagation()}});this.element.bind("focus.button",function(){b.buttonElement.addClass("ui-state-focus")}).bind("blur.button",function(){b.buttonElement.removeClass("ui-state-focus")});if(j){this.element.bind("change.button",function(){h||b.refresh()});this.buttonElement.bind("mousedown.button",function(o){if(!f.disabled){h=
-false;c=o.pageX;e=o.pageY}}).bind("mouseup.button",function(o){if(!f.disabled)if(c!==o.pageX||e!==o.pageY)h=true})}if(this.type==="checkbox")this.buttonElement.bind("click.button",function(){if(f.disabled||h)return false;a(this).toggleClass("ui-state-active");b.buttonElement.attr("aria-pressed",b.element[0].checked)});else if(this.type==="radio")this.buttonElement.bind("click.button",function(){if(f.disabled||h)return false;a(this).addClass("ui-state-active");b.buttonElement.attr("aria-pressed","true");
-var o=b.element[0];i(o).not(o).map(function(){return a(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")});else{this.buttonElement.bind("mousedown.button",function(){if(f.disabled)return false;a(this).addClass("ui-state-active");d=this;a(document).one("mouseup",function(){d=null})}).bind("mouseup.button",function(){if(f.disabled)return false;a(this).removeClass("ui-state-active")}).bind("keydown.button",function(o){if(f.disabled)return false;if(o.keyCode==a.ui.keyCode.SPACE||
-o.keyCode==a.ui.keyCode.ENTER)a(this).addClass("ui-state-active")}).bind("keyup.button",function(){a(this).removeClass("ui-state-active")});this.buttonElement.is("a")&&this.buttonElement.keyup(function(o){o.keyCode===a.ui.keyCode.SPACE&&a(this).click()})}this._setOption("disabled",f.disabled);this._resetButton()},_determineButtonType:function(){this.type=this.element.is(":checkbox")?"checkbox":this.element.is(":radio")?"radio":this.element.is("input")?"input":"button";if(this.type==="checkbox"||this.type===
-"radio"){var b=this.element.parents().filter(":last"),f="label[for='"+this.element.attr("id")+"']";this.buttonElement=b.find(f);if(!this.buttonElement.length){b=b.length?b.siblings():this.element.siblings();this.buttonElement=b.filter(f);if(!this.buttonElement.length)this.buttonElement=b.find(f)}this.element.addClass("ui-helper-hidden-accessible");(b=this.element.is(":checked"))&&this.buttonElement.addClass("ui-state-active");this.buttonElement.attr("aria-pressed",b)}else this.buttonElement=this.element},
-widget:function(){return this.buttonElement},destroy:function(){this.element.removeClass("ui-helper-hidden-accessible");this.buttonElement.removeClass("ui-button ui-widget ui-state-default ui-corner-all ui-state-hover ui-state-active  ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only").removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html());this.hasTitle||this.buttonElement.removeAttr("title");
-a.Widget.prototype.destroy.call(this)},_setOption:function(b,f){a.Widget.prototype._setOption.apply(this,arguments);if(b==="disabled")f?this.element.propAttr("disabled",true):this.element.propAttr("disabled",false);else this._resetButton()},refresh:function(){var b=this.element.is(":disabled");b!==this.options.disabled&&this._setOption("disabled",b);if(this.type==="radio")i(this.element[0]).each(function(){a(this).is(":checked")?a(this).button("widget").addClass("ui-state-active").attr("aria-pressed",
-"true"):a(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")});else if(this.type==="checkbox")this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false")},_resetButton:function(){if(this.type==="input")this.options.label&&this.element.val(this.options.label);else{var b=this.buttonElement.removeClass("ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only"),
-f=a("<span></span>").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("<span class='ui-button-icon-primary ui-icon "+j.primary+"'></span>");j.secondary&&b.append("<span class='ui-button-icon-secondary ui-icon "+j.secondary+"'></span>");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('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}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('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}},_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('<span class="'+this._appendClass+'">'+j+"</span>");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("<img/>").addClass(this._triggerClass).attr({src:o,alt:j,title:j}):a('<button type="button"></button>').addClass(this._triggerClass).html(o==""?j:a("<img/>").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;m<o.length;m++)if(o[m].length>n){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('<input type="text" id="'+("dp"+this.uuid)+'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>');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<this._disabledInputs.length;f++)if(this._disabledInputs[f]==b)return true;return false},_getInst:function(b){try{return a.data(b,"datepicker")}catch(f){throw"Missing instance data for this datepicker";}},_optionDatepicker:function(b,f,j){var l=this._getInst(b);if(arguments.length==2&&typeof f=="string")return f=="defaults"?a.extend({},a.datepicker._defaults):l?f=="all"?
-a.extend({},l.settings):this._get(l,f):null;var o=f||{};if(typeof f=="string"){o={};o[f]=j}if(l){this._curInst==l&&this._hideDatepicker();var n=this._getDateDatepicker(b,true),k=this._getMinMaxDate(l,"min"),m=this._getMinMaxDate(l,"max");h(l.settings,o);if(k!==null&&o.dateFormat!==d&&o.minDate===d)l.settings.minDate=this._formatDate(l,k);if(m!==null&&o.dateFormat!==d&&o.maxDate===d)l.settings.maxDate=this._formatDate(l,m);this._attachments(a(b),l);this._autoSize(l);this._setDate(l,n);this._updateAlternate(l);
-this._updateDatepicker(l)}},_changeDatepicker:function(b,f,j){this._optionDatepicker(b,f,j)},_refreshDatepicker:function(b){(b=this._getInst(b))&&this._updateDatepicker(b)},_setDateDatepicker:function(b,f){if(b=this._getInst(b)){this._setDate(b,f);this._updateDatepicker(b);this._updateAlternate(b)}},_getDateDatepicker:function(b,f){(b=this._getInst(b))&&!b.inline&&this._setDateFromField(b,f);return b?this._getDate(b):null},_doKeyDown:function(b){var f=a.datepicker._getInst(b.target),j=true,l=f.dpDiv.is(".ui-datepicker-rtl");
-f._keyEvent=true;if(a.datepicker._datepickerShowing)switch(b.keyCode){case 9:a.datepicker._hideDatepicker();j=false;break;case 13:j=a("td."+a.datepicker._dayOverClass+":not(."+a.datepicker._currentClass+")",f.dpDiv);j[0]&&a.datepicker._selectDay(b.target,f.selectedMonth,f.selectedYear,j[0]);if(b=a.datepicker._get(f,"onSelect")){j=a.datepicker._formatDate(f);b.apply(f.input?f.input[0]:null,[j,f])}else a.datepicker._hideDatepicker();return false;case 27:a.datepicker._hideDatepicker();break;case 33:a.datepicker._adjustDate(b.target,
-b.ctrlKey?-a.datepicker._get(f,"stepBigMonths"):-a.datepicker._get(f,"stepMonths"),"M");break;case 34:a.datepicker._adjustDate(b.target,b.ctrlKey?+a.datepicker._get(f,"stepBigMonths"):+a.datepicker._get(f,"stepMonths"),"M");break;case 35:if(b.ctrlKey||b.metaKey)a.datepicker._clearDate(b.target);j=b.ctrlKey||b.metaKey;break;case 36:if(b.ctrlKey||b.metaKey)a.datepicker._gotoToday(b.target);j=b.ctrlKey||b.metaKey;break;case 37:if(b.ctrlKey||b.metaKey)a.datepicker._adjustDate(b.target,l?+1:-1,"D");j=
-b.ctrlKey||b.metaKey;if(b.originalEvent.altKey)a.datepicker._adjustDate(b.target,b.ctrlKey?-a.datepicker._get(f,"stepBigMonths"):-a.datepicker._get(f,"stepMonths"),"M");break;case 38:if(b.ctrlKey||b.metaKey)a.datepicker._adjustDate(b.target,-7,"D");j=b.ctrlKey||b.metaKey;break;case 39:if(b.ctrlKey||b.metaKey)a.datepicker._adjustDate(b.target,l?-1:+1,"D");j=b.ctrlKey||b.metaKey;if(b.originalEvent.altKey)a.datepicker._adjustDate(b.target,b.ctrlKey?+a.datepicker._get(f,"stepBigMonths"):+a.datepicker._get(f,
-"stepMonths"),"M");break;case 40:if(b.ctrlKey||b.metaKey)a.datepicker._adjustDate(b.target,+7,"D");j=b.ctrlKey||b.metaKey;break;default:j=false}else if(b.keyCode==36&&b.ctrlKey)a.datepicker._showDatepicker(this);else j=false;if(j){b.preventDefault();b.stopPropagation()}},_doKeyPress:function(b){var f=a.datepicker._getInst(b.target);if(a.datepicker._get(f,"constrainInput")){f=a.datepicker._possibleChars(a.datepicker._get(f,"dateFormat"));var j=String.fromCharCode(b.charCode==d?b.keyCode:b.charCode);
-return b.ctrlKey||b.metaKey||j<" "||!f||f.indexOf(j)>-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<b.length&&b.charAt(H+1)==z)&&H++;return z},v=function(z){var I=
-u(z);z=new RegExp("^\\d{1,"+(z=="@"?14:z=="!"?20:z=="y"&&I?4:z=="o"?3:2)+"}");z=f.substring(y).match(z);if(!z)throw"Missing number at position "+y;y+=z[0].length;return parseInt(z[0],10)},w=function(z,I,N){z=a.map(u(z)?N:I,function(D,E){return[[E,D]]}).sort(function(D,E){return-(D[1].length-E[1].length)});var J=-1;a.each(z,function(D,E){D=E[1];if(f.substr(y,D.length).toLowerCase()==D.toLowerCase()){J=E[0];y+=D.length;return false}});if(J!=-1)return J+1;else throw"Unknown name at position "+y;},x=
-function(){if(f.charAt(y)!=b.charAt(H))throw"Unexpected literal at position "+y;y++},y=0,H=0;H<b.length;H++)if(r)if(b.charAt(H)=="'"&&!u("'"))r=false;else x();else switch(b.charAt(H)){case "d":q=v("d");break;case "D":w("D",o,n);break;case "o":s=v("o");break;case "m":p=v("m");break;case "M":p=w("M",k,m);break;case "y":j=v("y");break;case "@":var C=new Date(v("@"));j=C.getFullYear();p=C.getMonth()+1;q=C.getDate();break;case "!":C=new Date((v("!")-this._ticksTo1970)/1E4);j=C.getFullYear();p=C.getMonth()+
-1;q=C.getDate();break;case "'":if(u("'"))x();else r=true;break;default:x()}if(y<f.length)throw"Extra/unparsed characters found in date: "+f.substring(y);if(j==-1)j=(new Date).getFullYear();else if(j<100)j+=(new Date).getFullYear()-(new Date).getFullYear()%100+(j<=l?0:-100);if(s>-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<b.length&&b.charAt(r+1)==u)&&r++;return u},m=function(u,v,w){v=""+v;if(k(u))for(;v.length<w;)v="0"+v;return v},p=function(u,v,w,x){return k(u)?x[v]:w[v]},q="",s=false;if(f)for(var r=0;r<b.length;r++)if(s)if(b.charAt(r)=="'"&&!k("'"))s=false;else q+=b.charAt(r);else switch(b.charAt(r)){case "d":q+=m("d",f.getDate(),2);break;case "D":q+=p("D",f.getDay(),l,o);break;case "o":q+=m("o",Math.round(((new Date(f.getFullYear(),f.getMonth(),f.getDate())).getTime()-
-(new Date(f.getFullYear(),0,0)).getTime())/864E5),3);break;case "m":q+=m("m",f.getMonth()+1,2);break;case "M":q+=p("M",f.getMonth(),n,j);break;case "y":q+=k("y")?f.getFullYear():(f.getYear()%100<10?"0":"")+f.getYear()%100;break;case "@":q+=f.getTime();break;case "!":q+=f.getTime()*1E4+this._ticksTo1970;break;case "'":if(k("'"))q+="'";else s=true;break;default:q+=b.charAt(r)}return q},_possibleChars:function(b){for(var f="",j=false,l=function(n){(n=o+1<b.length&&b.charAt(o+1)==n)&&o++;return n},o=
-0;o<b.length;o++)if(j)if(b.charAt(o)=="'"&&!l("'"))j=false;else f+=b.charAt(o);else switch(b.charAt(o)){case "d":case "m":case "y":case "@":f+="0123456789";break;case "D":case "M":return null;case "'":if(l("'"))f+="'";else j=true;break;default:f+=b.charAt(o)}return f},_get:function(b,f){return b.settings[f]!==d?b.settings[f]:this._defaults[f]},_setDateFromField:function(b,f){if(b.input.val()!=b.lastVal){var j=this._get(b,"dateFormat"),l=b.lastVal=b.input?b.input.val():null,o,n;o=n=this._getDefaultDate(b);
-var k=this._getFormatConfig(b);try{o=this.parseDate(j,l,k)||n}catch(m){this.log(m);l=f?"":l}b.selectedDay=o.getDate();b.drawMonth=b.selectedMonth=o.getMonth();b.drawYear=b.selectedYear=o.getFullYear();b.currentDay=l?o.getDate():0;b.currentMonth=l?o.getMonth():0;b.currentYear=l?o.getFullYear():0;this._adjustInstDate(b)}},_getDefaultDate:function(b){return this._restrictMinMax(b,this._determineDate(b,this._get(b,"defaultDate"),new Date))},_determineDate:function(b,f,j){var l=function(n){var k=new Date;
-k.setDate(k.getDate()+n);return k},o=function(n){try{return a.datepicker.parseDate(a.datepicker._get(b,"dateFormat"),n,a.datepicker._getFormatConfig(b))}catch(k){}var m=(n.toLowerCase().match(/^c/)?a.datepicker._getDate(b):null)||new Date,p=m.getFullYear(),q=m.getMonth();m=m.getDate();for(var s=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,r=s.exec(n);r;){switch(r[2]||"d"){case "d":case "D":m+=parseInt(r[1],10);break;case "w":case "W":m+=parseInt(r[1],10)*7;break;case "m":case "M":q+=parseInt(r[1],10);m=
-Math.min(m,a.datepicker._getDaysInMonth(p,q));break;case "y":case "Y":p+=parseInt(r[1],10);m=Math.min(m,a.datepicker._getDaysInMonth(p,q));break}r=s.exec(n)}return new Date(p,q,m)};if(f=(f=f==null||f===""?j:typeof f=="string"?o(f):typeof f=="number"?isNaN(f)?j:l(f):new Date(f.getTime()))&&f.toString()=="Invalid Date"?j:f){f.setHours(0);f.setMinutes(0);f.setSeconds(0);f.setMilliseconds(0)}return this._daylightSavingAdjust(f)},_daylightSavingAdjust:function(b){if(!b)return null;b.setHours(b.getHours()>
-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&&w<r?r:w;this._daylightSavingAdjust(new Date(v,m,1))>w;){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)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_'+g+".datepicker._adjustDate('#"+b.id+"', -"+p+", 'M');\" title=\""+w+'"><span class="ui-icon ui-icon-circle-triangle-'+(j?"e":"w")+'">'+w+"</span></a>":o?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+w+'"><span class="ui-icon ui-icon-circle-triangle-'+(j?"e":"w")+'">'+w+"</span></a>";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)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_'+g+".datepicker._adjustDate('#"+b.id+"', +"+p+", 'M');\" title=\""+x+'"><span class="ui-icon ui-icon-circle-triangle-'+(j?"w":"e")+'">'+x+"</span></a>":o?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+x+'"><span class="ui-icon ui-icon-circle-triangle-'+(j?"w":"e")+'">'+x+"</span></a>";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?'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_'+g+'.datepicker._hideDatepicker();">'+this._get(b,"closeText")+"</button>":"";l=l?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(j?n:"")+(this._isInRange(b,x)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_'+
-g+".datepicker._gotoToday('#"+b.id+"');\">"+p+"</button>":"")+(j?"":n)+"</div>":"";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;E<k[0];E++){var P=
-"";this.maxRows=4;for(var L=0;L<k[1];L++){var Q=this._daylightSavingAdjust(new Date(v,m,b.selectedDay)),B=" ui-corner-all",F="";if(q){F+='<div class="ui-datepicker-group';if(k[1]>1)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+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+B+'">'+(/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)+'</div><table class="ui-datepicker-calendar"><thead><tr>';var G=p?'<th class="ui-datepicker-week-col">'+this._get(b,"weekHeader")+"</th>":"";for(B=0;B<7;B++){var A=(B+n)%7;G+="<th"+((B+n+6)%7>=5?' class="ui-datepicker-week-end"':"")+'><span title="'+x[A]+'">'+y[A]+"</span></th>"}F+=G+"</tr></thead><tbody>";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<G;R++){F+="<tr>";var S=!p?"":'<td class="ui-datepicker-week-col">'+this._get(b,"calculateWeek")(A)+"</td>";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&&A<r||u&&A>u;S+='<td class="'+((B+n+6)%7>=5?" ui-datepicker-week-end":"")+(K?" ui-datepicker-other-month":"")+(A.getTime()==
-Q.getTime()&&m==b.selectedMonth&&b._keyEvent||J.getTime()==A.getTime()&&J.getTime()==Q.getTime()?" "+this._dayOverClass:"")+(O?" "+this._unselectableClass+" ui-state-disabled":"")+(K&&!I?"":" "+M[1]+(A.getTime()==s.getTime()?" "+this._currentClass:"")+(A.getTime()==f.getTime()?" ui-datepicker-today":""))+'"'+((!K||I)&&M[2]?' title="'+M[2]+'"':"")+(O?"":' onclick="DP_jQuery_'+g+".datepicker._selectDay('#"+b.id+"',"+A.getMonth()+","+A.getFullYear()+', this);return false;"')+">"+(K&&!I?"&#xa0;":O?'<span class="ui-state-default">'+
-A.getDate()+"</span>":'<a class="ui-state-default'+(A.getTime()==f.getTime()?" ui-state-highlight":"")+(A.getTime()==s.getTime()?" ui-state-active":"")+(K?" ui-priority-secondary":"")+'" href="#">'+A.getDate()+"</a>")+"</td>";A.setDate(A.getDate()+1);A=this._daylightSavingAdjust(A)}F+=S+"</tr>"}m++;if(m>11){m=0;v++}F+="</tbody></table>"+(q?"</div>"+(k[0]>0&&L==k[1]-1?'<div class="ui-datepicker-row-break"></div>':""):"");P+=F}D+=P}D+=l+(a.browser.msie&&parseInt(a.browser.version,10)<7&&!b.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':
-"");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='<div class="ui-datepicker-title">',u="";if(n||!p)u+='<span class="ui-datepicker-month">'+k[f]+"</span>";else{k=l&&l.getFullYear()==j;var v=o&&o.getFullYear()==j;u+='<select class="ui-datepicker-month" onchange="DP_jQuery_'+g+".datepicker._selectMonthYear('#"+b.id+"', this, 'M');\" >";for(var w=0;w<12;w++)if((!k||w>=l.getMonth())&&
-(!v||w<=o.getMonth()))u+='<option value="'+w+'"'+(w==f?' selected="selected"':"")+">"+m[w]+"</option>";u+="</select>"}s||(r+=u+(n||!(p&&q)?"&#xa0;":""));if(!b.yearshtml){b.yearshtml="";if(n||!q)r+='<span class="ui-datepicker-year">'+j+"</span>";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+='<select class="ui-datepicker-year" onchange="DP_jQuery_'+g+".datepicker._selectMonthYear('#"+b.id+"', this, 'Y');\" >";f<=m;f++)b.yearshtml+='<option value="'+f+'"'+(f==j?' selected="selected"':"")+">"+f+"</option>";b.yearshtml+="</select>";r+=b.yearshtml;b.yearshtml=null}}r+=this._get(b,"yearSuffix");if(s)r+=(n||!(p&&q)?"&#xa0;":"")+u;r+="</div>";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&&f<j?j:f;return f=b&&f>b?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||"&#160;",f=a.ui.dialog.getTitleId(g.element),j=(g.uiDialog=a("<div></div>")).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("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(j),
-o=a('<a href="#"></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("<span></span>")).addClass("ui-icon ui-icon-closethick").text(i.closeText).appendTo(o);a("<span></span>").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("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),j=a("<div></div>").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('<button type="button"></button>').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||"&#160;"));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()<a.ui.dialog.overlay.maxZ)return false})},1);a(document).bind("keydown.dialog-overlay",function(b){if(g.options.closeOnEscape&&!b.isDefaultPrevented()&&b.keyCode&&b.keyCode===a.ui.keyCode.ESCAPE){g.close(b);b.preventDefault()}});a(window).bind("resize.dialog-overlay",a.ui.dialog.overlay.resize)}var i=(this.oldInstances.pop()||
-a("<div></div>").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 g<i?a(window).height()+"px":g+"px"}else return a(document).height()+"px"},width:function(){var g,i;if(a.browser.msie){g=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth);i=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);return g<i?a(window).width()+"px":g+"px"}else return a(document).width()+
-"px"},resize:function(){var g=a([]);a.each(a.ui.dialog.overlay.instances,function(){g=g.add(this)});g.css({width:0,height:0}).css({width:a.ui.dialog.overlay.width(),height:a.ui.dialog.overlay.height()})}});a.extend(a.ui.dialog.overlay.prototype,{destroy:function(){a.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);
-(function(a){a.ui=a.ui||{};var d=/left|center|right/,c=/top|center|bottom/,e=a.fn.position,h=a.fn.offset;a.fn.position=function(g){if(!g||!g.of)return e.apply(this,arguments);g=a.extend({},g);var i=a(g.of),b=i[0],f=(g.collision||"flip").split(" "),j=g.offset?g.offset.split(" "):[0,0],l,o,n;if(b.nodeType===9){l=i.width();o=i.height();n={top:0,left:0}}else if(b.setTimeout){l=i.width();o=i.height();n={top:i.scrollTop(),left:i.scrollLeft()}}else if(b.preventDefault){g.at="left top";l=o=0;n={top:g.of.pageY,
-left:g.of.pageX}}else{l=i.outerWidth();o=i.outerHeight();n=i.offset()}a.each(["my","at"],function(){var k=(g[this]||"").split(" ");if(k.length===1)k=d.test(k[0])?k.concat(["center"]):c.test(k[0])?["center"].concat(k):["center","center"];k[0]=d.test(k[0])?k[0]:"center";k[1]=c.test(k[1])?k[1]:"center";g[this]=k});if(f.length===1)f[1]=f[0];j[0]=parseInt(j[0],10)||0;if(j.length===1)j[1]=j[0];j[1]=parseInt(j[1],10)||0;if(g.at[0]==="right")n.left+=l;else if(g.at[0]==="center")n.left+=l/2;if(g.at[1]==="bottom")n.top+=
-o;else if(g.at[1]==="center")n.top+=o/2;n.left+=j[0];n.top+=j[1];return this.each(function(){var k=a(this),m=k.outerWidth(),p=k.outerHeight(),q=parseInt(a.curCSS(this,"marginLeft",true))||0,s=parseInt(a.curCSS(this,"marginTop",true))||0,r=m+q+(parseInt(a.curCSS(this,"marginRight",true))||0),u=p+s+(parseInt(a.curCSS(this,"marginBottom",true))||0),v=a.extend({},n),w;if(g.my[0]==="right")v.left-=m;else if(g.my[0]==="center")v.left-=m/2;if(g.my[1]==="bottom")v.top-=p;else if(g.my[1]==="center")v.top-=
-p/2;v.left=Math.round(v.left);v.top=Math.round(v.top);w={left:v.left-q,top:v.top-s};a.each(["left","top"],function(x,y){a.ui.position[f[x]]&&a.ui.position[f[x]][y](v,{targetWidth:l,targetHeight:o,elemWidth:m,elemHeight:p,collisionPosition:w,collisionWidth:r,collisionHeight:u,offset:j,my:g.my,at:g.at})});a.fn.bgiframe&&k.bgiframe();k.offset(a.extend(v,{using:g.using}))})};a.ui.position={fit:{left:function(g,i){var b=a(window);b=i.collisionPosition.left+i.collisionWidth-b.width()-b.scrollLeft();g.left=
-b>0?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("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").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("<div></div>").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<h;i+=1)g.push("<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>");
-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&&e<h))e=h;if(e!==this.values(c)){h=this.values();h[c]=e;d=this._trigger("slide",d,{handle:this.handles[c],value:e,values:h});this.values(c?0:1);d!==false&&this.values(c,e,true)}}else if(e!==this.value()){d=this._trigger("slide",d,{handle:this.handles[c],value:e});
-d!==false&&this.value(e)}},_stop: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()}this._trigger("stop",d,e)},_change:function(d,c){if(!this._keySliding&&!this._mouseSliding){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()}this._trigger("change",d,e)}},value:function(d){if(arguments.length){this.options.value=
-this._trimAlignValue(d);this._refreshValue();this._change(null,0)}else return this._value()},values:function(d,c){var e,h,g;if(arguments.length>1){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<e.length;g+=1){e[g]=this._trimAlignValue(h[g]);this._change(null,g)}this._refreshValue()}else return this.options.values&&this.options.values.length?this._values(d):
-this.value();else return this._values()},_setOption:function(d,c){var e,h=0;if(a.isArray(this.options.values))h=this.options.values.length;a.Widget.prototype._setOption.apply(this,arguments);switch(d){case "disabled":if(c){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.propAttr("disabled",true);this.element.addClass("ui-disabled")}else{this.handles.propAttr("disabled",false);this.element.removeClass("ui-disabled")}break;case "orientation":this._detectOrientation();
-this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue();break;case "value":this._animateOff=true;this._refreshValue();this._change(null,0);this._animateOff=false;break;case "values":this._animateOff=true;this._refreshValue();for(e=0;e<h;e+=1)this._change(null,e);this._animateOff=false;break}},_value:function(){var d=this.options.value;return d=this._trimAlignValue(d)},_values:function(d){var c,e;if(arguments.length){c=this.options.values[d];
-return c=this._trimAlignValue(c)}else{c=this.options.values.slice();for(e=0;e<c.length;e+=1)c[e]=this._trimAlignValue(c[e]);return c}},_trimAlignValue:function(d){if(d<=this._valueMin())return this._valueMin();if(d>=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:"<div></div>",remove:null,select:null,show:null,spinner:"<em>Loading&#8230;</em>",tabTemplate:"<li><a href='#{href}'><span>#{label}</span></a></li>"},_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<this.anchors.length?1:-1));b.disabled=a.map(a.grep(b.disabled,function(l){return l!=i}),function(l){return l>=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<f.anchors.length?n:0)},i);o&&o.stopPropagation()});b=f._unrotate||(f._unrotate=!b?function(o){o.clientX&&
-f.rotate(null)}:function(){t=j.selected;l()});if(i){this.element.bind("tabsshow",l);this.anchors.bind(j.event+".tabs",b);l()}else{clearTimeout(f.rotation);this.element.unbind("tabsshow",l);this.anchors.unbind(j.event+".tabs",b);delete this._rotate;delete this._unrotate}return this}})})(jQuery);
-
diff --git a/client/js/jquery.1.6.4.min.js b/client/js/jquery.1.6.4.min.js
deleted file mode 100755 (executable)
index 1a3c50b..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! jQuery v1.6.4 http://jquery.com/ | http://jquery.org/license */
-(function(a,b){function cu(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cr(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").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"?"<!doctype html>":"")+"<html><body>"),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;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function bZ(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function bY(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bA.test(a)?d(a,e):bY(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)bY(a+"["+e+"]",b[e],c,d);else d(a,b)}function bX(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function bW(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bP,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bW(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bW(a,c,d,e,"*",g));return l}function bV(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bL),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function by(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bt:bu;if(d>0){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<j;i++)f.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function bf(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function V(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(Q.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=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;i<s.length;i++)g=s[i],g.origType.replace(w,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){e=p[j];if(c&&e.level>c)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(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)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(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:H?function(a){return a==null?"":H.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?F.call(c,a):e.merge(c,a)}return c},inArray:function(a,b){if(!b)return-1;if(I)return I.call(b,a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=G.call(arguments,2),g=function(){return a.apply(c,f.concat(G.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){J["[object "+b+"]"]=b.toLowerCase()}),A=e.uaMatch(z),A.browser&&(e.browser[A.browser]=!0,e.browser.version=A.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?C=function(){c.removeEventListener("DOMContentLoaded",C,!1),e.ready()}:c.attachEvent&&(C=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",C),e.ready())});return e}(),g="done fail isResolved isRejected promise then always pipe".split(" "),h=[].slice;f.extend({_Deferred:function(){var a=[],b,c,d,e={done:function(){if(!d){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=f.type(i),j==="array"?e.done.apply(e,i):j==="function"&&a.push(i);k&&e.resolveWith(k[0],k[1])}return this},resolveWith:function(e,f){if(!d&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(e,f)}finally{b=[e,f],c=0}}return this},resolve:function(){e.resolveWith(this,arguments);return this},isResolved:function(){return!!c||!!b},cancel:function(){d=1,a=[];return this}};return e},Deferred:function(a){var b=f._Deferred(),c=f._Deferred(),d;f.extend(b,{then:function(a,c){b.done(a).fail(c);return this},always:function(){return b.done.apply(b,arguments).fail.apply(this,arguments)},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,pipe:function(a,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[c,"reject"]},function(a,c){var e=c[0],g=c[1],h;f.isFunction(e)?b[a](function(){h=e.apply(this,arguments),h&&f.isFunction(h.promise)?h.promise().then(d.resolve,d.reject):d[g+"With"](this===b?d:this,[h])}):b[a](d[g])})}).promise()},promise:function(a){if(a==null){if(d)return d;d=a={}}var c=g.length;while(c--)a[g[c]]=b[g[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?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<d;c++)b[c]&&f.isFunction(b[c].promise)?b[c].promise().then(i(c),g.reject):--e;e||g.resolveWith(g,b)}else g!==a&&g.resolveWith(g,d?[a]:[]);return g.promise()}}),f.support=function(){var a=c.createElement("div"),b=c.documentElement,d,e,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;a.setAttribute("className","t"),a.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",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="<div style='width:4px;'></div>",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",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<i;h++)g=e[h].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),k(this[0],g,d[g]))}}return d}if(typeof a=="object")return this.each(function(){f.data(this,a)});var j=a.split(".");j[1]=j[1]?"."+j[1]:"";if(c===b){d=this.triggerHandler("getData"+j[1]+"!",[j[0]]),d===b&&this.length&&(d=f.data(this[0],a),d=k(this[0],a,d));return d===b&&j[1]?this.data(j[0]):d}return this.each(function(){var b=f(this),d=[j[0],c];b.triggerHandler("setData"+j[1]+"!",d),f.data(this,a,c),b.triggerHandler("changeData"+j[1]+"!",d)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,c){a&&(c=(c||"fx")+"mark",f.data(a,c,(f.data(a,c,b,!0)||0)+1,!0))},_unmark:function(a,c,d){a!==!0&&(d=c,c=a,a=!1);if(c){d=d||"fx";var e=d+"mark",g=a?0:(f.data(c,e,b,!0)||1)-1;g?f.data(c,e,g,!0):(f.removeData(c,e,!0),m(c,d,"mark"))}},queue:function(a,c,d){if(a){c=(c||"fx")+"queue";var e=f.data(a,c,b,!0);d&&(!e||f.isArray(d)?e=f.data(a,c,f.makeArray(d),!0):e.push(d));return e||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e;d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),d.call(a,function(){f.dequeue(a,b)})),c.length||(f.removeData(a,b+"queue",!0),m(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){f.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f._Deferred(),!0))h++,l.done(m);m();return d.promise()}});var n=/[\n\t\r]/g,o=/\s+/,p=/\r/g,q=/^(?:button|input)$/i,r=/^(?:button|input|object|select|textarea)$/i,s=/^a(?:rea)?$/i,t=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,u,v;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(o);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(o);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(n," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(o);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(n," ").indexOf(b)>-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<i;h++){var j=e[h];if(j.selected&&(f.support.optDisabled?!j.disabled:j.getAttribute("disabled")===null)&&(!j.parentNode.disabled||!f.nodeName(j.parentNode,"optgroup"))){b=f(j).val();if(g)return b;d.push(b)}}if(g&&!d.length&&e.length)return f(e[c]).val();return d},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=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<p.length;j++){q=p[j];if(l||n.test(q.namespace))f.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=f.event.special[h]||{};for(j=e||0;j<p.length;j++){q=p[j];if(d.guid===q.guid){if(l||n.test(q.namespace))e==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(e!=null)break}}if(p.length===0||e!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&f.removeEvent(a,h,s.handle),g=null,delete 
-t[h]}if(f.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,f.isEmptyObject(s)&&f.removeData(a,b,!0)}}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){var h=c.type||c,i=[],j;h.indexOf("!")>=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<i;h++){var j=d[h];if(e||c.namespace_re.test(j.namespace)){c.handler=j.handler,c.data=j.data,c.handleObj=j;var k=j.handler.apply(this,g);k!==b&&(c.result=k,k===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[f.expando])return a;var d=a;a=f.Event(d);for(var e=this.props.length,g;e;)g=this.props[--e],a[g]=d[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=a.target.ownerDocument||c,i=h.documentElement,j=h.body;a.pageX=a.clientX+(i&&i.scrollLeft||j&&j.scrollLeft||0)-(i&&i.clientLeft||j&&j.clientLeft||0),a.pageY=a.clientY+(i&&i.scrollTop||j&&j.scrollTop||0)-(i&&i.clientTop||j&&j.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:f.proxy,special:{ready:{setup:f.bindReady,teardown:f.noop},live:{add:function(a){f.event.add(this,M(a.origType,a.selector),f.extend({},a,{handler:L,guid:a.handler.guid}))},remove:function(a){f.event.remove(this,M(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!this.preventDefault)return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?D:C):this.type=a,b&&f.extend(this,b),this.timeStamp=f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=D;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=D;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=D,this.stopPropagation()},isDefaultPrevented:C,isPropagationStopped:C,isImmediatePropagationStopped:C};var E=function(a){var b=a.relatedTarget,c=!1,d=a.type;a.type=a.data,b!==this&&(b&&(c=f.contains(this,b)),c||(f.event.handle.apply(this,arguments),a.type=d))},F=function(a){a.type=a.data,f.event.handle.apply(this,arguments)};f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={setup:function(c){f.event.add(this,b,c&&c.selector?F:E,a)},teardown:function(a){f.event.remove(this,b,a&&a.selector?F:E)}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(a,b){if(!f.nodeName(this,"form"))f.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=f.nodeName(b,"input")||f.nodeName(b,"button")?b.type:"";(c==="submit"||c==="image")&&f(b).closest("form").length&&J("submit",this,arguments)}),f.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=f.nodeName(b,"input")||f.nodeName(b,"button")?b.type:"";(c==="text"||c==="password")&&f(b).closest("form").length&&a.keyCode===13&&J("submit",this,arguments)});else return!1},teardown:function(a){f.event.remove(this,".specialSubmit")}});if(!f.support.changeBubbles){var G,H=function(a){var b=f.nodeName(a,"input")?a.type:"",c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-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;i<j;i++)f.event.add(this[i],a,g,d);return this}}),f.fn.extend({unbind:function(a,b){if(typeof a=="object"&&!a.preventDefault)for(var c in a)this.unbind(c,a[c]);else for(var d=0,e=this.length;d<e;d++)f.event.remove(this[d],a,b);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f.data(this,"lastToggle"+a.guid)||0)%d;f.data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var K={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};f.each(["live","die"],function(a,c){f.fn[c]=function(a,d,e,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:f(this.context);if(typeof a=="object"&&!a.preventDefault){for(var o in a)n[c](o,d,a[o],m);return this}if(c==="die"&&!a&&g&&g.charAt(0)==="."){n.unbind(g);return this}if(d===!1||f.isFunction(d))e=d||C,d=b;a=(a||"").split(" ");while((h=a[i++])!=null){j=w.exec(h),k="",j&&(k=j[0],h=h.replace(w,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,K[h]?(a.push(K[h]+k),h=h+k):h=(K[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)f.event.add(n[p],"live."+M(h,m),{data:d,selector:m,handler:e,origType:h,origHandler:e,preType:l});else n.unbind("live."+M(h,m),e)}return this}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?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;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){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<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\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;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(!f)g=o=!0;else if(f===!0)continue}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("parentNode",b,f,a,e,c)},"~":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("previousSibling",b,f,a,e,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=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 b<c[3]-0},gt:function(a,b,c){return b>c[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<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=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<f;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){if(a===b){g=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",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 href='#'></a>",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="<p class='TEST'></p>";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="<div class='test e'></div><div class='test'></div>";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;g<h;g++)k(a,f[g],d);return k.filter(e,d)};f.find=k,f.expr=k.selectors,f.expr[":"]=f.expr.filters,f.unique=k.uniqueSort,f.text=k.getText,f.isXMLDoc=k.isXML,f.contains=k.contains}();var N=/Until$/,O=/^(?:parents|prevUntil|prevAll)/,P=/,/,Q=/^.[^:#\[\.,]*$/,R=Array.prototype.slice,S=f.expr.match.POS,T={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(V(this,a,!1),"not",a)},filter:function(a){return this.pushStack(V(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?f.filter(a,this).length>0: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<e;d++)i=a[d],j[i]||(j[i]=S.test(i)?f(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-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<e;d++){g=this[d];while(g){if(l?l.index(g)>-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:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|object|embed|option|style)/i,bb=/checked\s*(?:[^=]|=\s*.checked.)/i,bc=/\/(java|ecma)script/i,bd=/^\s*<!(?:\[CDATA\[|\-\-)/,be={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_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<div>","</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></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bb.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bf(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bl)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i;b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof a[0]=="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!ba.test(a[0])&&(f.support.checkClone||!bb.test(a[0]))&&(g=!0,h=f.fragments[a[0]],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean
-(a,i,e,d)),g&&(f.fragments[a[0]]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?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></$2>");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]==="<table>"&&!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<r;i++)bk(k[i]);else bk(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||bc.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.expando,g=f.event.special,h=f.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&f.noData[j.nodeName.toLowerCase()])continue;c=j[f.expando];if(c){b=d[c]&&d[c][e];if(b&&b.events){for(var k in b.events)g[k]?f.event.remove(j,k):f.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[f.expando]:j.removeAttribute&&j.removeAttribute(f.expando),delete d[c]}}}});var bm=/alpha\([^)]*\)/i,bn=/opacity=([^)]*)/,bo=/([A-Z]|^ms)/g,bp=/^-?\d+(?:px)?$/i,bq=/^-?\d/,br=/^([\-+])=([\-+.\de]+)/,bs={position:"absolute",visibility:"hidden",display:"block"},bt=["Left","Right"],bu=["Top","Bottom"],bv,bw,bx;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bv(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=br.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bv)return bv(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return by(a,b,d);f.swap(a,bs,function(){e=by(a,b,d)});return e}},set:function(a,b){if(!bp.test(b))return b;b=parseFloat(b);if(b>=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\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/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("<div>").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<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cr(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cq("hide",3),a,b,c);for(var d=0,e=this.length;d<e;d++)if(this[d].style){var g=f.css(this[d],"display");g!=="none"&&!f._data(this[d],"olddisplay")&&f._data(this[d],"olddisplay",g)}for(d=0;d<e;d++)this[d].style&&(this[d].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cq("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return this[e.queue===!1?"each":"queue"](function(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(f.support.inlineBlockNeedsLayout?(j=cr(this.nodeName),j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)):this.style.display="inline-block"))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)k=new f.fx(this,b,i),h=a[i],cj.test(h)?k[h==="toggle"?d?"show":"hide":h]():(l=ck.exec(h),m=k.cur(),l?(n=parseFloat(l[2]),o=l[3]||(f.cssNumber[i]?"":"px"),o!=="px"&&(f.style(this,i,(n||1)+o),m=(n||1)/k.cur()*m,f.style(this,i,m+o)),l[1]&&(n=(l[1]==="-="?-1:1)*n+m),k.custom(m,n,o)):k.custom(m,h,""));return!0})},stop:function(a,b){a&&this.queue([]),this.each(function(){var a=f.timers,c=a.length;b||f._unmark(!0,this);while(c--)a[c].elem===this&&(b&&a[c](!0),a.splice(c,1))}),b||this.dequeue();return this}}),f.each({slideDown:cq("show",1),slideUp:cq("hide",1),slideToggle:cq("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default,d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue!==!1?f.dequeue(this):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function g(a){return d.step(a)}var d=this,e=f.fx;this.startTime=cn||co(),this.start=a,this.end=b,this.unit=c||this.unit||(f.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,g.elem=this.elem,g()&&f.timers.push(g)&&!cl&&(cl=setInterval(e.tick,e.interval))},show:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=cn||co(),c=!0,d=this.elem,e=this.options,g,h;if(a||b>=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<a.length;++b)a[b]()||a.splice(b--,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cl),cl=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cs=/^t(?:able|d|h)$/i,ct=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cu(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!cs.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";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 (executable)
index bad4a0a..0000000
+++ /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<o.length;i++)
-ret.push($.toJSON(o[i])||"null");return"["+ret.join(",")+"]";}
-var pairs=[];for(var k in o){var name;var type=typeof k;if(type=="number")
-name='"'+k+'"';else if(type=="string")
-name=$.quoteString(k);else
-continue;if(typeof o[k]=="function")
-continue;var val=$.toJSON(o[k]);pairs.push(name+":"+val);}
-return"{"+pairs.join(", ")+"}";}};$.evalJSON=function(src)
-{if(typeof(JSON)=='object'&&JSON.parse)
-return JSON.parse(src);return eval("("+src+")");};$.secureEvalJSON=function(src)
-{if(typeof(JSON)=='object'&&JSON.parse)
-return JSON.parse(src);var filtered=src;filtered=filtered.replace(/\\["\\\/bfnrtu]/g,'@');filtered=filtered.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']');filtered=filtered.replace(/(?:^|:|,)(?:\s*\[)+/g,'');if(/^[\],:{}\s]*$/.test(filtered))
-return eval("("+src+")");else
-throw new SyntaxError("Error parsing JSON, source is not valid.");};$.quoteString=function(string)
-{if(string.match(_escapeable))
-{return'"'+string.replace(_escapeable,function(a)
-{var c=_meta[a];if(typeof c==='string')return c;c=a.charCodeAt();return'\\u00'+Math.floor(c/16).toString(16)+(c%16).toString(16);})+'"';}
-return'"'+string+'"';};var _escapeable=/["\\\x00-\x1f\x7f-\x9f]/g;var _meta={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'};})(jQuery);
\ No newline at end of file
diff --git a/client/js/mobile.html b/client/js/mobile.html
deleted file mode 100644 (file)
index 7f3e241..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-<!DOCTYPE html> \r
-<html> \r
-<head>\r
-\r
-<meta http-equiv="content-type" content="text/html; charset=UTF-8"> \r
-<meta name="viewport" content="width=device-width, user-scalable=no" />\r
-\r
-<title>KiwiIRC</title> \r
-\r
-<script type='text/javascript' src='http://code.jquery.com/jquery-1.6.3.js'></script>\r
-<script type='text/javascript' src='jquery.json-2.2.min.js'></script>\r
-<script type='text/javascript' src='/socket.io/socket.io.js'></script>\r
-<script type='text/javascript' src='mobile.js'></script> \r
-<script type='text/javascript' src='gateway.js'></script> \r
-\r
-<script type='text/javascript'>\r
-    $(function () {\r
-        console.log('starting');\r
-        kiwi.init();\r
-        kiwi.gateway.nick = "mobwok"+Math.floor(Math.random()*500);\r
-        kiwi.gateway.start('/kiwi');\r
-    });\r
-\r
-    function k(){\r
-        console.log('goooing gogo');\r
-        kiwi.gateway.connect('irc.anonnet.org', 6667, false);\r
-    }\r
-</script>\r
-<style type='text/css'> \r
-* { margin:0px; padding:0px; }\r
-\r
-body { font-family:arial; font-size:14px; color:rgb(233,242,237); background:#EBEBEB; }\r
-\r
-.fixed { position:fixed; width:100%; background:#1B1B1B; top:0px; left:0px; z-index:1; }\r
-#hover_top { top:0px; }\r
-#hover_bottom { bottom:0px; top:auto; padding-top:3px; background:#1B1B1B; }\r
-\r
-#nav { padding:10px 1em 0px 1em; }\r
-#nav a { display:block; float:right; margin-right:1em; }\r
-\r
-#chan_list { margin:1em 0px 1em 0px; }\r
-#chan_list li {\r
-    display:inline; list-style:none;\r
-    padding:5px 3px; margin:0.5em;\r
-    border:1px solid gray; border-radius:3px;\r
-    line-height:2.5em;\r
-}\r
-\r
-#msgs { position:absolute; width:100%; top:0px; z-index:0; }\r
-#msgs > div { display:none; }\r
-#msgs > div.active { display:block; }\r
-.msg { border-bottom:1px solid #CCC; padding:4px 3px; }\r
-.msg .time { color: gray; display:block; font-size:0.9em; color:#777; display:none; }\r
-.msg .nick { color: rgb(199,199,199); }\r
-.msg .body { margin-left:2em; white-space:pre-wrap; word-wrap:break-word; color:#333; }\r
-.msg.motd .body { color:#666; }\r
-.msg.join .body { color: #009900; }\r
-.msg.part .body { color: #990000; }\r
-#msginp { width:100%; border:0px; margin:0px; padding:5px 3px; }\r
-</style>  \r
-</head> \r
-<body>\r
-\r
-    <div id="hover_top" class="fixed">\r
-        <div id="nav">KiwiIRC - irc.server.com <button onclick="k();">Connect</button><a>Opts</a> </div>\r
-        <ul id="chan_list"></ul>\r
-    </div>\r
-\r
-    <div id="hover_bottom" class="fixed">\r
-        <input id="msginp" type="text" value="" />\r
-    </div>\r
-\r
-    <div id="msgs"></div>\r
-</body>\r
-</html> 
\ No newline at end of file
diff --git a/client/js/mobile.js b/client/js/mobile.js
deleted file mode 100755 (executable)
index bcb70b2..0000000
+++ /dev/null
@@ -1,421 +0,0 @@
-if (typeof String.prototype.lpad === 'undefined') {\r
-    String.prototype.lpad = function (length, character) {\r
-        var padding = "",\r
-            i;\r
-        for (i = 0; i < length; i++) {\r
-            padding += character;\r
-        }\r
-        return (padding + this).slice(-length);\r
-    };\r
-}\r
-\r
-\r
-var kiwi = {};\r
-kiwi.objects = {};\r
-kiwi.ui = {};\r
-kiwi.events = {};\r
-kiwi.gateway = {};\r
-\r
-\r
-/**\r
- * Any user interface methods\r
- */\r
-kiwi.ui = {\r
-    views: {},\r
-    current_view: null,\r
-\r
-    doLayout: function () {\r
-        var msgs = $('#msgs');\r
-        msgs.css('padding-top', $('#hover_top').outerHeight());\r
-        msgs.css('padding-bottom', $('#hover_bottom').outerHeight());\r
-    },\r
-\r
-\r
-    formatIRCMsg: function (msg) {\r
-        var re, next;\r
-\r
-        if ((!msg) || (typeof msg !== 'string')) {\r
-            return '';\r
-        }\r
-\r
-        // bold\r
-        if (msg.indexOf(String.fromCharCode(2)) !== -1) {\r
-            next = '<b>';\r
-            while (msg.indexOf(String.fromCharCode(2)) !== -1) {\r
-                msg = msg.replace(String.fromCharCode(2), next);\r
-                next = (next === '<b>') ? '</b>' : '<b>';\r
-            }\r
-            if (next === '</b>') {\r
-                msg = msg + '</b>';\r
-            }\r
-        }\r
-\r
-        // underline\r
-        if (msg.indexOf(String.fromCharCode(31)) !== -1) {\r
-            next = '<u>';\r
-            while (msg.indexOf(String.fromCharCode(31)) !== -1) {\r
-                msg = msg.replace(String.fromCharCode(31), next);\r
-                next = (next === '<u>') ? '</u>' : '<u>';\r
-            }\r
-            if (next === '</u>') {\r
-                msg = msg + '</u>';\r
-            }\r
-        }\r
-\r
-        // colour\r
-        /**\r
-        *   @inner\r
-        */\r
-        msg = (function (msg) {\r
-            var replace, colourMatch, col, i, match, to, endCol, fg, bg, str;\r
-            replace = '';\r
-            /**\r
-            *   @inner\r
-            */\r
-            colourMatch = function (str) {\r
-                var re = /^\x03([0-9][0-5]?)(,([0-9][0-5]?))?/;\r
-                return re.exec(str);\r
-            };\r
-            /**\r
-            *   @inner\r
-            */\r
-            col = function (num) {\r
-                switch (parseInt(num, 10)) {\r
-                case 0:\r
-                    return '#FFFFFF';\r
-                case 1:\r
-                    return '#000000';\r
-                case 2:\r
-                    return '#000080';\r
-                case 3:\r
-                    return '#008000';\r
-                case 4:\r
-                    return '#FF0000';\r
-                case 5:\r
-                    return '#800040';\r
-                case 6:\r
-                    return '#800080';\r
-                case 7:\r
-                    return '#FF8040';\r
-                case 8:\r
-                    return '#FFFF00';\r
-                case 9:\r
-                    return '#80FF00';\r
-                case 10:\r
-                    return '#008080';\r
-                case 11:\r
-                    return '#00FFFF';\r
-                case 12:\r
-                    return '#0000FF';\r
-                case 13:\r
-                    return '#FF55FF';\r
-                case 14:\r
-                    return '#808080';\r
-                case 15:\r
-                    return '#C0C0C0';\r
-                default:\r
-                    return null;\r
-                }\r
-            };\r
-            if (msg.indexOf('\x03') !== -1) {\r
-                i = msg.indexOf('\x03');\r
-                replace = msg.substr(0, i);\r
-                while (i < msg.length) {\r
-                    /**\r
-                    *   @inner\r
-                    */\r
-                    match = colourMatch(msg.substr(i, 6));\r
-                    if (match) {\r
-                        //console.log(match);\r
-                        // Next colour code\r
-                        to = msg.indexOf('\x03', i + 1);\r
-                        endCol = msg.indexOf(String.fromCharCode(15), i + 1);\r
-                        if (endCol !== -1) {\r
-                            if (to === -1) {\r
-                                to = endCol;\r
-                            } else {\r
-                                to = ((to < endCol) ? to : endCol);\r
-                            }\r
-                        }\r
-                        if (to === -1) {\r
-                            to = msg.length;\r
-                        }\r
-                        //console.log(i, to);\r
-                        fg = col(match[1]);\r
-                        bg = col(match[3]);\r
-                        str = msg.substring(i + 1 + match[1].length + ((bg !== null) ? match[2].length + 1 : 0), to);\r
-                        //console.log(str);\r
-                        replace += '<span style="' + ((fg !== null) ? 'color: ' + fg + '; ' : '') + ((bg !== null) ? 'background-color: ' + bg + ';' : '') + '">' + str + '</span>';\r
-                        i = to;\r
-                    } else {\r
-                        if ((msg[i] !== '\x03') && (msg[i] !== String.fromCharCode(15))) {\r
-                            replace += msg[i];\r
-                        }\r
-                        i++;\r
-                    }\r
-                }\r
-                return replace;\r
-            }\r
-            return msg;\r
-        }(msg));\r
-        \r
-        return msg;\r
-    },\r
-\r
-\r
-    run: function (msg) {\r
-        var parts, dest, t, pos, textRange, plugin_event, msg_sliced, tab, nick;\r
-\r
-        if (msg.substring(0, 1) === '/') {\r
-            console.log("running " + msg);\r
-            parts = msg.split(' ');\r
-            switch (parts[0].toLowerCase()) {\r
-            case '/nick':\r
-                if (parts[1] === undefined) {\r
-                    console.log("calling show nick");\r
-                    kiwi.front.ui.showChangeNick();\r
-                } else {\r
-                    console.log("sending nick");\r
-                    kiwi.gateway.nick(msg.substring(1));\r
-                }\r
-                break;\r
-                \r
-            case '/q':\r
-            case '/query':\r
-                if (typeof parts[1] !== "undefined") {\r
-                    tab = new kiwi.objects.MessageView(parts[1]);\r
-                }\r
-                break;\r
-                \r
-            case '/k':\r
-            case '/kick':\r
-                if (typeof parts[1] === 'undefined') {\r
-                    return;\r
-                }\r
-                t = msg.split(' ', 3);\r
-                nick = t[1];\r
-                kiwi.gateway.kick(Tabview.getCurrent().title, nick, t[2]);\r
-                break;\r
-                \r
-            case '/j':\r
-            case '/join':\r
-                kiwi.ui.joinChannel(parts[1]);\r
-                break;\r
-\r
-            case '/part':\r
-                break;\r
-\r
-            case '/quote':\r
-                kiwi.gateway.raw(msg.replace(/^\/quote /i, ''));\r
-                break;\r
-                \r
-            case '/me':\r
-                tab = kiwi.objects.getCurrent();\r
-                kiwi.gateway.ctcp(true, 'ACTION', tab.title, msg.substring(4));\r
-                tab.addMsg(' ', '* ' + kiwi.gateway.nick + ' ' + msg.substring(4));\r
-                break;\r
-\r
-            case '/quit':\r
-                kiwi.gateway.quit(parts.slice(1).join(' '));\r
-                break;\r
-            }\r
-\r
-        } else {\r
-            if (msg.trim() === '') {\r
-                return;\r
-            }\r
-            tab = kiwi.objects.MessageView.getCurrent();\r
-            if (tab.title !== 'server') {\r
-                console.log(tab.title);\r
-                kiwi.gateway.privmsg(tab.title, msg);\r
-                tab.addMsg(kiwi.gateway.nick, msg);\r
-            }\r
-        }\r
-\r
-    },\r
-\r
-    joinChannel: function (chan_name) {\r
-        var chans = chan_name.split(','),\r
-            i,\r
-            chan,\r
-            tab;\r
-        for (i in chans) {\r
-            chan = chans[i];\r
-            tab = kiwi.objects.MessageView.get(chan);\r
-            if ((!tab) || (tab.safe_to_close === true)) {\r
-                kiwi.gateway.join(chan);\r
-                tab = new kiwi.objects.MessageView(chan);\r
-            }\r
-        }\r
-\r
-        if (tab) {\r
-            tab.show();\r
-        }\r
-    },\r
-};\r
-\r
-\r
-/**\r
- * Entry point for Kiwi\r
- */\r
-kiwi.init = function () {\r
-    var server,\r
-        gateway = $(kiwi.gateway);\r
-    \r
-    server = new kiwi.objects.MessageView('server');\r
-    server.show();\r
-    server.addMsg('', 'KiwiIRC Mobile client');\r
-    console.log = function (w) {\r
-        server.addMsg('log', w);\r
-    }\r
-\r
-    kiwi.ui.doLayout();\r
-\r
-    $('#msginp').bind('keydown', function (e) {\r
-        switch (true) {\r
-            case e.which === 13:            // return\r
-                msg = $(this).val();\r
-                msg = msg.trim();\r
-\r
-                kiwi.ui.run(msg);\r
-                $(this).val('');\r
-\r
-                break;\r
-        }\r
-    });\r
-\r
-    gateway.bind('onconnect', function (e, data) {\r
-        kiwi.objects.MessageView.getServer().addMsg('', 'Connected :)');\r
-    });\r
-    gateway.bind('onmotd', function (e, data) {\r
-        kiwi.objects.MessageView.getServer().addMsg('', data.msg);\r
-    });\r
-    gateway.bind('onmsg', function (e, data) {\r
-        var destination, plugin_event, tab;\r
-        // Is this message from a user?\r
-        if (data.channel === kiwi.gateway.nick) {\r
-            destination = data.nick.toLowerCase();\r
-        } else {\r
-            destination = data.channel.toLowerCase();\r
-        }\r
-        \r
-        tab = kiwi.objects.MessageView.get(destination);\r
-        if (!tab) {\r
-            tab = new kiwi.objects.MessageView(destination);\r
-        }\r
-        tab.addMsg(data.nick, data.msg);\r
-    });\r
-    gateway.bind('onjoin', function (e, data) {\r
-        var tab = kiwi.objects.MessageView.get(data.channel);\r
-        if (!tab) {\r
-            tab = new kiwi.objects.MessageView(data.channel);\r
-        }\r
-        tab.addMsg('', '--> ' + data.nick + ' has joined', 'join');\r
-    });\r
-    gateway.bind('onpart', function (e, data) {\r
-        var tab = kiwi.objects.MessageView.get(data.channel);\r
-        if (!tab) {\r
-            tab = new kiwi.objects.MessageView(data.channel);\r
-        }\r
-        tab.addMsg('', '<-- ' + data.nick + ' has left (' + data.message + ')', 'part');\r
-    });\r
-};\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-/**\r
- * Basic container that holds content on the page\r
- */\r
-kiwi.objects.View = function (title) {\r
-    var that = this;\r
-\r
-    this.title = title;\r
-    this.tab = $('<li>' + title + '</li>');\r
-    this.content = $('<div></div>');\r
-\r
-    $('#chan_list').append(this.tab);\r
-    $('#msgs').append(this.content);\r
-\r
-    this.tab.click(function () { that.show.call(that); });\r
-};\r
-kiwi.objects.View.prototype.title = 'View';\r
-kiwi.objects.View.prototype.tab = null;\r
-kiwi.objects.View.prototype.content = null;\r
-kiwi.objects.View.prototype.show = function () {\r
-    $('#msgs > div.active').removeClass('active');\r
-    this.content.addClass('active');\r
-    kiwi.ui.current_view = this;\r
-    this.scrollBottom();\r
-}\r
-kiwi.objects.View.prototype.scrollBottom = function () {\r
-    $(window).scrollTop($(document).height());\r
-}\r
-\r
-\r
-\r
-\r
-/**\r
- * A type of View that contains mainly messages\r
- */\r
-kiwi.objects.MessageView = function (name) {\r
-    // Call the parent constructor\r
-    kiwi.objects.View.prototype.constructor.call(this, name);\r
-\r
-    // Add this MessageView to the array\r
-    kiwi.ui.views[name.toLowerCase()] = this;\r
-}\r
-kiwi.objects.MessageView.prototype = new kiwi.objects.View();\r
-kiwi.objects.MessageView.prototype.msg_count = 0;\r
-kiwi.objects.MessageView.prototype.addMsg = function (nick, text, msg_class) {\r
-    var msg, d = new Date(),\r
-        time;\r
-    \r
-    // The CSS class to use\r
-    msg_class = msg_class || '';\r
-\r
-    msg = $('<div class="msg ' + msg_class + '"><span class="time"></span><span class="nick"></span><span class="body"></span></div>');\r
-    time = d.getHours().toString().lpad(2, "0") + ":" + d.getMinutes().toString().lpad(2, "0") + ":" + d.getSeconds().toString().lpad(2, "0");\r
-\r
-    $('.time', msg).text(time);\r
-    $('.nick', msg).text(nick);\r
-    $('.body', msg).text(kiwi.ui.formatIRCMsg(text));\r
-    this.content.append(msg);\r
-\r
-    this.msg_count++;\r
-    if (this.msg_count > 5) {\r
-        $('.msg:first', this.content).remove();\r
-        this.msg_count--;\r
-    }\r
-\r
-    this.scrollBottom();\r
-}\r
-// Static functions\r
-kiwi.objects.MessageView.exists = function (name) {\r
-    if ((!name) || (typeof name !== 'string')) {\r
-        return false;\r
-    }\r
-    var ret = (typeof kiwi.ui.views[name.toLowerCase()] !== 'undefined');\r
-    return ret;\r
-};\r
-kiwi.objects.MessageView.get = function (name) {\r
-    if (kiwi.objects.MessageView.exists(name)) {\r
-        var ret = kiwi.ui.views[name.toLowerCase()];\r
-        return ret;\r
-    } else {\r
-        return null;\r
-    }\r
-};\r
-kiwi.objects.MessageView.getServer = function () {\r
-    return kiwi.ui.views.server;\r
-};\r
-kiwi.objects.MessageView.getAlls = function () {\r
-    return kiwi.ui.views;\r
-};\r
-kiwi.objects.MessageView.getCurrent = function () {\r
-    return kiwi.ui.current_view;\r
-};
\ No newline at end of file
diff --git a/client/js/model.js b/client/js/model.js
deleted file mode 100755 (executable)
index 335fd88..0000000
+++ /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 */\r
-/*global kiwi */\r
-kiwi.model = {};\r
-\r
-kiwi.model.MemberList = Backbone.Collection.extend({\r
-    model: kiwi.model.Member,\r
-    comparator: function (a, b) {\r
-        var i, a_modes, b_modes, a_idx, b_idx, a_nick, b_nick;\r
-        a_modes = a.get("modes");\r
-        b_modes = b.get("modes");\r
-        // Try to sort by modes first\r
-        if (a_modes.length > 0) {\r
-            // a has modes, but b doesn't so a should appear first\r
-            if (b_modes.length === 0) {\r
-                return -1;\r
-            }\r
-            a_idx = b_idx = -1;\r
-            // Compare the first (highest) mode\r
-            for (i = 0; i < kiwi.gateway.user_prefixes.length; i++) {\r
-                if (kiwi.gateway.user_prefixes[i].mode === a_modes[0]) {\r
-                    a_idx = i;\r
-                }\r
-            }\r
-            for (i = 0; i < kiwi.gateway.user_prefixes.length; i++) {\r
-                if (kiwi.gateway.user_prefixes[i].mode === b_modes[0]) {\r
-                    b_idx = i;\r
-                }\r
-            }\r
-            if (a_idx < b_idx) {\r
-                return -1;\r
-            } else if (a_idx > b_idx) {\r
-                return 1;\r
-            }\r
-            // If we get to here both a and b have the same highest mode so have to resort to lexicographical sorting\r
-\r
-        } else if (b_modes.length > 0) {\r
-            // b has modes but a doesn't so b should appear first\r
-            return 1;\r
-        }\r
-        a_nick = a.get("nick").toLocaleUpperCase();\r
-        b_nick = b.get("nick").toLocaleUpperCase();\r
-        // Lexicographical sorting\r
-        if (a_nick < b_nick) {\r
-            return -1;\r
-        } else if (a_nick > b_nick) {\r
-            return 1;\r
-        } else {\r
-            // This should never happen; both users have the same nick.\r
-            console.log('Something\'s gone wrong somewhere - two users have the same nick!');\r
-            return 0;\r
-        }\r
-    },\r
-    initialize: function (options) {\r
-        this.view = new kiwi.view.MemberList({"model": this, "name": options.name});\r
-    },\r
-    getByNick: function (nick) {\r
-        return this.find(function (m) {\r
-            return nick === m.get("nick");\r
-        });\r
-    }\r
-});\r
-\r
-kiwi.model.Member = Backbone.Model.extend({\r
-    sortModes: function (modes) {\r
-        return modes.sort(function (a, b) {\r
-            var a_idx, b_idx, i;\r
-            for (i = 0; i < kiwi.gateway.user_prefixes.length; i++) {\r
-                if (kiwi.gateway.user_prefixes[i].mode === a) {\r
-                    a_idx = i;\r
-                }\r
-            }\r
-            for (i = 0; i < kiwi.gateway.user_prefixes.length; i++) {\r
-                if (kiwi.gateway.user_prefixes[i].mode === b) {\r
-                    b_idx = i;\r
-                }\r
-            }\r
-            if (a_idx < b_idx) {\r
-                return -1;\r
-            } else if (a_idx > b_idx) {\r
-                return 1;\r
-            } else {\r
-                return 0;\r
-            }\r
-        });\r
-    },\r
-    initialize: function (attributes) {\r
-        var nick, modes, prefix;\r
-        nick = this.stripPrefix(this.get("nick"));\r
-\r
-        modes = this.get("modes");\r
-        modes = modes || [];\r
-        this.sortModes(modes);\r
-        this.set({"nick": nick, "modes": modes, "prefix": this.getPrefix(modes)}, {silent: true});\r
-    },\r
-    addMode: function (mode) {\r
-        var modes, prefix;\r
-        modes = this.get("modes");\r
-        modes.push(mode);\r
-        modes = this.sortModes(modes);\r
-        this.set({"prefix": this.getPrefix(modes), "modes": modes});\r
-    },\r
-    removeMode: function (mode) {\r
-        var modes, prefix;\r
-        modes = this.get("modes");\r
-        modes = _.reject(modes, function(m) {\r
-            return m === mode;\r
-        });\r
-        this.set({"prefix": this.getPrefix(modes), "modes": modes});\r
-    },\r
-    getPrefix: function (modes) {\r
-        var prefix = '';\r
-        if (typeof modes[0] !== 'undefined') {\r
-            prefix = _.detect(kiwi.gateway.user_prefixes, function (prefix) {\r
-                return prefix.mode === modes[0];\r
-            });\r
-            prefix = (prefix) ? prefix.symbol : '';\r
-        }\r
-        return prefix;\r
-    },\r
-    stripPrefix: function (nick) {\r
-        var tmp = nick, i, j, k;\r
-        i = 0;\r
-        for (j = 0; j < nick.length; j++) {\r
-            for (k = 0; k < kiwi.gateway.user_prefixes.length; k++) {\r
-                if (nick.charAt(j) === kiwi.gateway.user_prefixes[k].symbol) {\r
-                    i++;\r
-                    break;\r
-                }\r
-            }\r
-        }\r
-\r
-        return tmp.substr(i);\r
-    }\r
-});\r
-\r
-kiwi.model.PanelList = Backbone.Collection.extend({\r
-    model: kiwi.model.Panel,\r
-    comparator: function (chan) {\r
-        return chan.get("name");\r
-    },\r
-    initialize: function () {\r
-        this.server = new kiwi.model.Server({"name": kiwi.gateway.network_name});\r
-        this.view = new kiwi.view.Tabs({"el": $('#kiwi .windowlist ul')[0], "model": this});\r
-        kiwi.currentPanel = this.server;\r
-    },\r
-    getByName: function (name) {\r
-        return this.find(function (c) {\r
-            return name === c.get("name");\r
-        });\r
-    }\r
-});\r
-\r
-kiwi.model.Panel = Backbone.Model.extend({\r
-    initialize: function (attributes) {\r
-        var name = this.get("name") || "";\r
-        this.view = new kiwi.view.Panel({"model": this, "name": name});\r
-        this.set({\r
-            "backscroll": [],\r
-            "name": name\r
-        }, {"silent": true});\r
-\r
-        this.isChannel = false;\r
-    },\r
-    addMsg: function (time, nick, msg, type, style) {\r
-        var tmp, bs;\r
-\r
-        tmp = {"msg": msg, "time": time, "nick": nick, "chan": this.get("name"), "style": style};\r
-        tmp = kiwi.plugs.run('addmsg', tmp);\r
-        if (!tmp) {\r
-            return;\r
-        }\r
-        if (tmp.time === null) {\r
-            d = new Date();\r
-            tmp.time = d.getHours().toString().lpad(2, "0") + ":" + d.getMinutes().toString().lpad(2, "0") + ":" + d.getSeconds().toString().lpad(2, "0");\r
-        }\r
-\r
-        // The CSS class (action, topic, notice, etc)\r
-        if (typeof tmp.type !== "string") {\r
-            tmp.type = '';\r
-        }\r
-\r
-        // Make sure we don't have NaN or something\r
-        if (typeof tmp.msg !== "string") {\r
-            tmp.msg = '';\r
-        }\r
-\r
-        bs = this.get("backscroll");\r
-        bs.push(tmp)\r
-        this.set({"backscroll": bs}, {silent:true});\r
-        this.trigger("msg", tmp);\r
-    }\r
-});\r
-\r
-kiwi.model.Server = kiwi.model.Panel.extend({\r
-    initialize: function (attributes) {\r
-        var name = "Server";\r
-        this.view = new kiwi.view.Panel({"model": this, "name": name});\r
-        this.set({\r
-            "backscroll": [],\r
-            "name": name\r
-        }, {"silent": true});\r
-        this.isChannel = false;\r
-    }\r
-});\r
-\r
-// TODO: Channel modes\r
-kiwi.model.Channel = kiwi.model.Panel.extend({\r
-    initialize: function (attributes) {\r
-        var name = this.get("name") || "",\r
-            members;\r
-        this.view = new kiwi.view.Panel({"model": this, "name": name});\r
-        this.set({\r
-            "members": new kiwi.model.MemberList({"name": this.view.htmlsafe_name}),\r
-            "name": name,\r
-            "backscroll": [],\r
-            "topic": ""\r
-        }, {"silent": true});\r
-        this.addMsg(null, ' ', '--> You have joined ' + name, 'action join', 'color:#009900;');\r
-        members = this.get("members");\r
-        members.bind("add", function (member) {\r
-            this.addMsg(null, ' ', '--> ' + member.get("nick") + ' [' + member.get("ident") + '@' + member.get("hostname") + '] has joined', 'action join', 'color:#009900;');\r
-        }, this);\r
-        members.bind("remove", function (member, options) {\r
-            this.addMsg(null, ' ', '<-- ' + member.get("nick") + ' has left ' + ((options.message) ? '(' + options.message + ')' : ''), 'action join', 'color:#009900;');\r
-        }, this);\r
-        members.bind("quit", function (args) {\r
-            this.addMsg(null, ' ', '<-- ' + args.member.get("nick") + ' has quit ' + ((args.message) ? '(' + args.message + ')' : ''), 'action join', 'color:#009900;');\r
-        }, this);\r
-\r
-        this.isChannel = true;\r
-    }\r
-});
\ No newline at end of file
diff --git a/client/js/touchscreen_tweaks.js b/client/js/touchscreen_tweaks.js
deleted file mode 100755 (executable)
index 43a50b2..0000000
+++ /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 (executable)
index ad19500..0000000
+++ /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<f;e++){if(e in a&&c.call(b,a[e],e,a)===o)break}else for(e in a)if(m.call(a,e)&&c.call(b,a[e],e,a)===o)break};b.map=function(a,c,b){var e=[];if(a==null)return e;if(w&&a.map===w)return a.map(c,b);j(a,function(a,g,h){e[e.length]=c.call(b,a,g,h)});return e};b.reduce=b.foldl=b.inject=function(a,c,d,e){var f=
-d!==void 0;a==null&&(a=[]);if(x&&a.reduce===x)return e&&(c=b.bind(c,e)),f?a.reduce(c,d):a.reduce(c);j(a,function(a,b,i){f?d=c.call(e,d,a,b,i):(d=a,f=true)});if(!f)throw new TypeError("Reduce of empty array with no initial value");return d};b.reduceRight=b.foldr=function(a,c,d,e){a==null&&(a=[]);if(y&&a.reduceRight===y)return e&&(c=b.bind(c,e)),d!==void 0?a.reduceRight(c,d):a.reduceRight(c);a=(b.isArray(a)?a.slice():b.toArray(a)).reverse();return b.reduce(a,c,d,e)};b.find=b.detect=function(a,c,b){var e;
-D(a,function(a,g,h){if(c.call(b,a,g,h))return e=a,true});return e};b.filter=b.select=function(a,c,b){var e=[];if(a==null)return e;if(z&&a.filter===z)return a.filter(c,b);j(a,function(a,g,h){c.call(b,a,g,h)&&(e[e.length]=a)});return e};b.reject=function(a,c,b){var e=[];if(a==null)return e;j(a,function(a,g,h){c.call(b,a,g,h)||(e[e.length]=a)});return e};b.every=b.all=function(a,c,b){var e=true;if(a==null)return e;if(A&&a.every===A)return a.every(c,b);j(a,function(a,g,h){if(!(e=e&&c.call(b,a,g,h)))return o});
-return e};var D=b.some=b.any=function(a,c,d){var c=c||b.identity,e=false;if(a==null)return e;if(B&&a.some===B)return a.some(c,d);j(a,function(a,b,h){if(e||(e=c.call(d,a,b,h)))return o});return!!e};b.include=b.contains=function(a,c){var b=false;if(a==null)return b;return q&&a.indexOf===q?a.indexOf(c)!=-1:b=D(a,function(a){return a===c})};b.invoke=function(a,c){var d=i.call(arguments,2);return b.map(a,function(a){return(c.call?c||a:a[c]).apply(a,d)})};b.pluck=function(a,c){return b.map(a,function(a){return a[c]})};
-b.max=function(a,c,d){if(!c&&b.isArray(a))return Math.max.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;b>=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;b<e.computed&&(e={value:a,computed:b})});return e.value};b.shuffle=function(a){var c=[],b;
-j(a,function(a,f){f==0?c[0]=a:(b=Math.floor(Math.random()*(f+1)),c[f]=c[b],c[b]=a)});return c};b.sortBy=function(a,c,d){return b.pluck(b.map(a,function(a,b,g){return{value:a,criteria:c.call(d,a,b,g)}}).sort(function(a,c){var b=a.criteria,d=c.criteria;return b<d?-1:b>d?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])<d(c)?e=g+1:f=g}return e};b.toArray=function(a){return!a?[]:a.toArray?a.toArray():b.isArray(a)?i.call(a):b.isArguments(a)?i.call(a):b.values(a)};b.size=function(a){return b.toArray(a).length};b.first=b.head=function(a,b,d){return b!=null&&!d?i.call(a,0,b):a[0]};b.initial=function(a,b,d){return i.call(a,0,a.length-(b==null||d?1:b))};b.last=function(a,b,d){return b!=null&&!d?i.call(a,Math.max(a.length-b,0)):a[a.length-1]};b.rest=b.tail=function(a,b,d){return i.call(a,b==null||
-d?1:b)};b.compact=function(a){return b.filter(a,function(a){return!!a})};b.flatten=function(a,c){return b.reduce(a,function(a,e){if(b.isArray(e))return a.concat(c?e:b.flatten(e));a[a.length]=e;return a},[])};b.without=function(a){return b.difference(a,i.call(arguments,1))};b.uniq=b.unique=function(a,c,d){var d=d?b.map(a,d):a,e=[];b.reduce(d,function(d,g,h){if(0==h||(c===true?b.last(d)!=g:!b.include(d,g)))d[d.length]=g,e[e.length]=a[h];return d},[]);return e};b.union=function(){return b.uniq(b.flatten(arguments,
-true))};b.intersection=b.intersect=function(a){var c=i.call(arguments,1);return b.filter(b.uniq(a),function(a){return b.every(c,function(c){return b.indexOf(c,a)>=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<c;e++)d[e]=b.pluck(a,""+e);return d};b.indexOf=function(a,c,d){if(a==null)return-1;var e;if(d)return d=b.sortedIndex(a,c),a[d]===c?d:-1;if(q&&a.indexOf===q)return a.indexOf(c);
-for(d=0,e=a.length;d<e;d++)if(a[d]===c)return d;return-1};b.lastIndexOf=function(a,b){if(a==null)return-1;if(C&&a.lastIndexOf===C)return a.lastIndexOf(b);for(var d=a.length;d--;)if(a[d]===b)return d;return-1};b.range=function(a,b,d){arguments.length<=1&&(b=a||0,a=0);for(var d=arguments[2]||1,e=Math.max(Math.ceil((b-a)/d),0),f=0,g=Array(e);f<e;)g[f++]=a,a+=d;return g};var E=function(){};b.bind=function(a,c){var d,e;if(a.bind===t&&t)return t.apply(a,i.call(arguments,1));if(!b.isFunction(a))throw new TypeError;
-e=i.call(arguments,2);return d=function(){if(!(this instanceof d))return a.apply(c,e.concat(i.call(arguments)));E.prototype=a.prototype;var b=new E,g=a.apply(b,e.concat(i.call(arguments)));return Object(g)===g?g:b}};b.bindAll=function(a){var c=i.call(arguments,1);c.length==0&&(c=b.functions(a));j(c,function(c){a[c]=b.bind(a[c],a)});return a};b.memoize=function(a,c){var d={};c||(c=b.identity);return function(){var b=c.apply(this,arguments);return m.call(d,b)?d[b]:d[b]=a.apply(this,arguments)}};b.delay=
-function(a,b){var d=i.call(arguments,2);return setTimeout(function(){return a.apply(a,d)},b)};b.defer=function(a){return b.delay.apply(b,[a,1].concat(i.call(arguments,1)))};b.throttle=function(a,c){var d,e,f,g,h,i=b.debounce(function(){h=g=false},c);return function(){d=this;e=arguments;var b;f||(f=setTimeout(function(){f=null;h&&a.apply(d,e);i()},c));g?h=true:a.apply(d,e);i();g=true}};b.debounce=function(a,b){var d;return function(){var e=this,f=arguments;clearTimeout(d);d=setTimeout(function(){d=
-null;a.apply(e,f)},b)}};b.once=function(a){var b=false,d;return function(){if(b)return d;b=true;return d=a.apply(this,arguments)}};b.wrap=function(a,b){return function(){var d=[a].concat(i.call(arguments));return b.apply(this,d)}};b.compose=function(){var a=i.call(arguments);return function(){for(var b=i.call(arguments),d=a.length-1;d>=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<a;e++)b.call(d,e)};b.escape=function(a){return(""+a).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;").replace(/\//g,"&#x2F;")};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 (executable)
index c6658dc..0000000
+++ /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 = '<img class="link_img_a" src="' + url + '" height="100%" width="100%" />';
-                return '<a class="link_ext link_img" target="_blank" rel="nofollow" href="' + url + '" style="height:50px;width:50px;display:block">' + img + '<div class="tt box"></div></a>';
-            });
-
-            return event;
-        }
-    },
-
-    {
-        name: "html_safe",
-        onaddmsg: function (event, opts) {
-            event.msg = $('<div/>').text(event.msg).html();
-            event.nick = $('<div/>').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 = '<span style="color:red;">' + event.msg + '</span>';
-            //    }
-            //}
-
-            // 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 '<a class="link_ext" target="_blank" rel="nofollow" href="' + url + '">' + nice + '<div class="tt box"></div></a>';
-                return '<a class="link_ext" target="_blank" rel="nofollow" href="' + url + '">' + nice + '</a>';
-            });
-
-            return event;
-        }
-    },
-
-    {
-        name: "lftobr",
-        onaddmsg: function (event, opts) {
-            if (!event.msg) {
-                return event;
-            }
-
-            event.msg = event.msg.replace(/\n/gi, function (txt) {
-                return '<br/>';
-            });
-
-            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 = $('<a class="link_ext_browser">Open in Kiwi..</a>');
-                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 = $('<iframe border="0" class="utility_view" src="" style="width:100%;height:100%;border:none;"></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 = '<span style="color:' + c + ';">' + event.nick + '</span>';
-
-            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;h<m;h++){c=h;k=(h>0?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<j&&!(f=a.data(h[i++],"tmplItem")));if(f&&c)g[2]=function(b){a.tmpl.afterManip(this,b,k)};r.apply(this,g)}else r.apply(this,arguments);c=0;!e&&a.tmpl.complete(b);return this}});a.extend({tmpl:function(d,h,e,c){var i,k=!c;if(k){c=p;d=a.template[d]||a.template(null,d);f={}}else if(!d){d=c.tmpl;b[c.key]=c;c.nodes=[];c.wrapped&&n(c,c.wrapped);return a(j(c,null,c.tmpl(a,c)))}if(!d)return[];if(typeof h==="function")h=h.call(c||{});e&&e.wrapped&&n(e,e.wrapped);i=a.isArray(h)?a.map(h,function(a){return a?g(e,c,d,a):null}):[g(e,c,d,h)];return k?a(j(c,null,i)):i},tmplItem:function(b){var c;if(b instanceof a)b=b[0];while(b&&b.nodeType===1&&!(c=a.data(b,"tmplItem"))&&(b=b.parentNode));return c||p},template:function(c,b){if(b){if(typeof b==="string")b=o(b);else if(b instanceof a)b=b[0]||{};if(b.nodeType)b=a.data(b,"tmpl")||a.data(b,"tmpl",o(b.innerHTML));return typeof c==="string"?(a.template[c]=b):b}return c?typeof c!=="string"?a.template(null,c):a.template[c]||a.template(null,q.test(c)?c:a(c)):null},encode:function(a){return(""+a).split("<").join("&lt;").split(">").join("&gt;").split('"').join("&#34;").split("'").join("&#39;")}});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<p;e++){if((k=o[e]).nodeType!==1)continue;j=k.getElementsByTagName("*");for(h=j.length-1;h>=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=$('<div id="tiptip_holder" style="max-width:'+opts.maxWidth+';"></div>');var tiptip_content=$('<div id="tiptip_content"></div>');var tiptip_arrow=$('<div id="tiptip_arrow"></div>');$("body").append(tiptip_holder.html(tiptip_content).prepend(tiptip_arrow.html('<div id="tiptip_arrow_inner"></div>')))}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).scrollLeft());var left_compare=(tip_w+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 (executable)
index c971627..0000000
+++ /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 */\r
-/*global kiwi */\r
-\r
-kiwi.view = {};\r
-\r
-kiwi.view.MemberList = Backbone.View.extend({\r
-    tagName: "ul",\r
-    events: {\r
-        "click .nick": "nickClick"\r
-    },\r
-    initialize: function (options) {\r
-        $(this.el).attr("id", 'kiwi_userlist_' + options.name);\r
-        this.model.bind('all', this.render, this);\r
-        $(this.el).appendTo('#kiwi .userlist');\r
-    },\r
-    render: function () {\r
-        var $this = $(this.el);\r
-        $this.empty();\r
-        this.model.forEach(function (member) {\r
-            $('<li><a class="nick"><span class="prefix">' + member.get("prefix") + '</span>' + member.get("nick") + '</a></li>').appendTo($this).data('member', member);\r
-        });\r
-    },\r
-    nickClick: function (x) {\r
-        console.log(x);\r
-    },\r
-    show: function () {\r
-        $('#kiwi .userlist').children().css('display', 'none');\r
-        $(this.el).css('display', 'block');\r
-    }\r
-});\r
-\r
-kiwi.view.Panel = Backbone.View.extend({\r
-    tagName: "div",\r
-    className: "messages",\r
-    events: {\r
-        "click .chan": "chanClick"\r
-    },\r
-    initialize: function (options) {\r
-        this.htmlsafe_name = 'panel_' + randomString(15);\r
-        $(this.el).attr("id", 'kiwi_panel_' + this.htmlsafe_name).css('display', 'none');\r
-        this.el = $(this.el).appendTo('#panel1 .scroller')[0];\r
-        this.model.bind('msg', this.newMsg, this);\r
-        this.msg_count = 0;\r
-        this.model.set({"view": this}, {"silent": true});\r
-    },\r
-    render: function () {\r
-        var $this = $(this.el);\r
-        $this.empty();\r
-        this.model.get("backscroll").forEach(this.newMsg);\r
-    },\r
-    newMsg: function (msg) {\r
-        // TODO: make sure that the message pane is scrolled to the bottom\r
-        var re, line_msg, $this = $(this.el);\r
-        // Make the channels clickable\r
-        re = new RegExp('\\B(' + kiwi.gateway.channel_prefix + '[^ ,.\\007]+)', 'g');\r
-        msg.msg = msg.msg.replace(re, function (match) {\r
-            return '<a class="chan">' + match + '</a>';\r
-        });\r
-\r
-        msg.msg = kiwi.front.formatIRCMsg(msg.msg);\r
-\r
-        // Build up and add the line\r
-        line_msg = $('<div class="msg ' + msg.type + '"><div class="time">' + msg.time + '</div><div class="nick">' + msg.nick + '</div><div class="text" style="' + msg.style + '">' + msg.msg + ' </div></div>');\r
-        $this.append(line_msg);\r
-        this.msg_count++;\r
-        if (this.msg_count > 250) {\r
-            $('.msg:first', this.div).remove();\r
-            this.msg_count--;\r
-        }\r
-    },\r
-    chanClick: function (x) {\r
-        console.log(x);\r
-    },\r
-    show: function () {\r
-        var $this = $(this.el);\r
-        $('#panel1 .scroller').children().css('display','none');\r
-        $this.css('display', 'block');\r
-        var members = this.model.get("members");\r
-        if (members) {\r
-            members.view.show();\r
-        } else {\r
-            $('#kiwi .userlist').children().css('display', 'none');\r
-        }\r
-        kiwi.front.ui.setTopicText(this.model.get("topic") || "")\r
-        // TODO: Have Kiwi remember the scoll locations of each panel\r
-        $('#panel1').scrollTop($this.height());\r
-        kiwi.currentPanel = this.model;\r
-    }\r
-});\r
-\r
-kiwi.view.Channel = kiwi.view.Panel.extend({\r
-    initialize: function (options) {\r
-        this.htmlsafe_name = 'chan_' + randomString(15);\r
-        $(this.el).attr("id", 'kiwi_window_' + this.htmlsafe_name).css('display', 'none');\r
-        this.el = $(this.el).appendTo('#panel1 .scroller')[0];\r
-        this.model.bind('msg', this.newMsg, this);\r
-        this.model.bind('change[topic]', this.topic, this);\r
-        this.msg_count = 0;\r
-        this.model.set({"view": this}, {"silent": true});\r
-        this.show();\r
-    },\r
-    topic: function (topic) {\r
-        console.log(topic);\r
-        if (!topic) {\r
-            topic = this.model.get("topic");\r
-        }\r
-        this.model.addMsg(null, ' ', '=== Topic for ' + this.model.get("name") + ' is: ' + topic, 'topic');\r
-        if ($(this.el).css('display') === 'block') {\r
-            kiwi.front.ui.setTopicText(this.model.get("topic"))\r
-        }\r
-    }\r
-});\r
-\r
-kiwi.view.Tabs = Backbone.View.extend({\r
-    events: {\r
-        "click li": "tabClick"\r
-    },\r
-    initialize: function () {\r
-        this.model.bind("add", this.addTab, this);\r
-        this.model.bind("remove", this.removeTab, this);\r
-        this.model.bind("reset", this.render, this);\r
-        this.model.server.bind("change", this.render, this);\r
-    },\r
-    render: function () {\r
-        $this = $(this.el);\r
-        $this.empty();\r
-        $('<li id="tab_server"><span>' + kiwi.gateway.network_name + '</span></li>').data('pane', this.model.server).appendTo($this);\r
-        this.model.forEach(function (tab) {\r
-            var tabname = $(tab.get("view").el).attr("id");\r
-            $('<li id="tab_' + tabname + '"><span>' + tab.get("name") + '</span></li>').data('pane', tab).appendTo($this);\r
-        });\r
-    },\r
-    addTab: function (tab) {\r
-        var tabname = $(tab.get("view").el).attr("id"),\r
-            $this = $(this.el);\r
-        $('<li id="tab_' + tabname + '"><span>' + tab.get("name") + '</span></li>').data('pane', tab).appendTo($this);\r
-    },\r
-    removeTab: function (tab) {\r
-        $('#tab_' + $(tab.get("view").el).attr("id")).remove();\r
-    },\r
-    tabClick: function (e) {\r
-        $(e.currentTarget).data('pane').view.show();\r
-    }\r
-});\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
old mode 100755 (executable)
new mode 100644 (file)
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 (file)
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 (file)
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 (file)
index e5f5fe0..0000000
Binary files a/client_backbone/img/redcross.png and /dev/null differ