Commits

Matt Ryall committed a545616

Import project planning web UI

  • Participants
  • Parent commits d9fdfc4

Comments (0)

Files changed (32)

-This project is copyright (c) 2010, Atlassian. All rights reserved.
+This project is, except where otherwise noted, Copyright (c) 2010, Atlassian. All rights reserved.
 

src/main/resources/planning/data.js

+createProject({
+    title: "Engine Room 3.1",
+    iterations: [
+        {
+            title: "Week 1: 1 Jul",
+            tasks: [
+                { title: "TPM Websphere Build", estimate: "2d", complete: true }
+            ]
+        },
+        {
+            title: "Week 2: 8 Jul",
+            tasks: [
+                { title: "CONF-16287 Fix broken search", estimate: "2h", complete: true },
+                { title: "Deploy Renderer & Extras Sources", estimate: "1d", complete: true, notes: "Left over devspeed work for Charles" },
+                { title: "Bootstrapping of caches", estimate: "2d", complete: true },
+                { title: "Update hibernate caching", estimate: "1d", complete: true },
+                { title: "interface cleansing - remove coherence references", estimate: "1d", complete: true },
+                { title: "update cache regions", estimate: "1d", complete: true }
+            ]
+        },
+        {
+            title: "Week 3: 14 Jul",
+            tasks: [
+                { title: "Upgrade SAL to 2.0.10 (CONF-16351)", estimate: "1h", complete: true },
+                { title: "Move coherence code to separate module", estimate: "1d", complete: true },
+                { title: "Get tests passing", estimate: "4h", complete: true },
+                { title: "Update setup with license checks", estimate: "4h", complete: true },
+                { title: "Update cluster setup to check for coherence", estimate: "4h", complete: true },
+                { title: "Update 'update license' to check cluster status", estimate: "4h", complete: true }
+            ]
+        },
+        {
+            title: "Week 4: 21 Jul",
+            tasks: [
+                { title: "Fix PDF plugin", estimate: "1d", complete: true },
+                { title: "Fix acceptance tests", estimate: "2h", complete: true },
+                { title: "Create 2 bamboo builds", estimate: "2h", complete: true },
+                { title: "investigate removing coherence jars from maven repository", estimate: "1d", complete: true },
+                { title: "performance testing", estimate: "1d", complete: true },
+                { title: "Merge to 3.0 stable & update builds", estimate: "1d", complete: true },
+                { title: "Backport to 2.10, 2.9, 2.8, 2.7, 2.6", estimate: "3d", complete: true }
+            ]
+        },
+        {
+            title: "Week 5: 28 Jul",
+            tasks: [
+                { title: "Review/Fix Distributions", estimate: "1d", complete: true },
+                { title: "Merge to Trunk & update builds", estimate: "1d", complete: true },
+                { title: "Finalise public documents", estimate: "2h", complete: true },
+                { title: "Document cache config changes", estimate: "2h", complete: true },
+                { title: "Clean up deprecated code", estimate: "1d", complete: true },
+                { title: "Hide log window AAM-46", estimate: "1d", complete: true },
+                { title: "Replace log messages with progress bars AAM-49", estimate: "4h", complete: true },
+                { title: "Apply UI design for AAM", estimate: "1d", complete: true },
+                { title: "Plugin code reviews (see Don for list)", estimate: "1d", complete: true }
+            ]
+        },
+        {
+            title: "Week 6: 4 Aug",
+            tasks: [
+                { title: "Update log4j to suppress ehcache warnings", estimate: "1h", complete: true },
+                { title: "Update setup wizard for clustered (CONF-16492)", estimate: "2h", complete: true },
+                { title: "AAM-56 Prompt for server port on first install", estimate: "1d", complete: true },
+                { title: "Update atlassian plugins to support retrieval of resources by type i.e. js/css", estimate: "1d", complete: true },
+                { title: "Update atlassian plugins and move JS to bottom", estimate: "1d", complete: true }
+            ]
+        },
+        {
+            title: "Week 7: 11 Aug",
+            tasks: [
+                { title: "Fix inline permissions JS so we can move JS to bottom", estimate: "2d", complete: true },
+                { title: "Spike REST API for Confluence", estimate: "3d", complete: true },
+                { title: "{color:#0000ff}Fedex 12{color}", complete: true }
+            ]
+        },
+        {
+            title: "Week 8: 18 Aug",
+            tasks: [
+                { title: "Planning for REST API", estimate: "1h", complete: true },
+                { title: "Fix FF3 build", estimate: "4h", complete: true }
+            ]
+        },
+        {
+            title: "Week 9: 25 Aug",
+            tasks: [
+                { title: "Finish extracting test code", estimate: "4h", complete: true },
+                { title: "REST - Tests for Spaces, Content", estimate: "2d", complete: true },
+                { title: "Prepare for REST presentation", estimate: "4h", complete: true },
+                { title: "REST - Investigate efficient paging", estimate: "2d", complete: true }
+            ]
+        },
+        {
+            title: "Week 10: 1 Sep",
+            tasks: [
+                { title: "Remove tangosol.jsp", estimate: "1h", complete: true },
+                { title: "Fix REST test code to use test properties", estimate: "1h", complete: true }
+            ]
+        },
+        {
+            title: "Week 11: 8 Sep",
+            tasks: [
+                { title: "Fix REST Build", estimate: "2h", complete: true },
+                { title: "REST - Finish off getSpaces()", estimate: "1d", complete: true },
+                { title: "REST - Finish getSpace() with permissions", estimate: "1d", complete: true }
+            ]
+        },
+        {
+            title: "Week 12: 15 Sep",
+            tasks: [
+                { title: "CONF-16886 Fix performance builds (upgrade plugins)", estimate: "1d", complete: true },
+                { title: "CONF-16772 XML export with attachments broken", estimate: "1d", complete: true }
+            ]
+        },
+        {
+            title: "Week 13: 22 Sep",
+            tasks: [
+                { title: "CONF-16686 Implement disable plugins temporarily", estimate: "1d", complete: true },
+                { title: "REST - Page Children expansion", estimate: "2d", complete: true }
+            ]
+        },
+        {
+            title: "Week 14: 29 Sep",
+            tasks: [
+                { title: "CONF-17045 Javascript bottom backwards compatibility mode", estimate: "1d", complete: true },
+                { title: "Publish deprecated methods doc and forum post", estimate: "1h", complete: true }
+            ]
+        },
+        {
+            title: "Week 15: 6 Oct",
+            tasks: [
+                { title: "REST - Refactor Spaces list", estimate: "4h", complete: true },
+                { title: "REST - Update REST module with better list support", estimate: "1d", complete: true }
+            ]
+        },
+        {
+            title: "Week 16: 13 Oct",
+            tasks: [
+                { title: "CONF-17014 Plugins and Weblogic", estimate: "1d", complete: true },
+                { title: "CONF-17046 Page Comments Expansion", estimate: "2d", complete: true },
+                { title: "CONF-17075 Non existent plugin action stops Confluence from starting", estimate: "1d", complete: true }
+            ]
+        },
+        {
+            title: "Week 17: 20 Oct",
+            tasks: [
+                { title: "CONF-17045 Make javascript top default and remove warning", estimate: "4h", complete: true }
+            ]
+        },
+        {
+            title: "Week 18: 27 Oct",
+            tasks: [
+                { title: "CONF-17151 Super batch confluence web resources", estimate: "2d", complete: true },
+                { title: "Rest Documentation", estimate: "2h", complete: true },
+                { title: "Fix Copy space plugin for 3.1", complete: true }
+            ]
+        },
+        {
+            title: "Week 19: 3 Nov",
+            tasks: [
+                { title: "Builds - TPM Websphere", complete: true },
+                { title: "Builds - TPM Tomcat6 + Oracle 10", complete: true },
+                { title: "CONF-17469 Gallery icons not showing due to superbatch", estimate: "1d", complete: true }
+            ]
+        },
+        {
+            title: "Week 20: 10 November",
+            tasks: [
+                { title: "Performance Regression Investigation" },
+                { title: "Gliffy errors on EAC" },
+                { title: "CONF-17417 TaskQueueJob no longer uses getQueueName()" },
+                { title: "CONF-17040 Create profile for building from source without coherence", estimate: "4h" }
+            ]
+        },
+        {
+            title: "Backlog",
+            tasks: [
+                { title: "CONF-16722 Viewing old version of page on EAC" },
+                { title: "Release plugins 2.4.0" },
+                { title: "CONF-13833 Sprite images - automate SmartSprite", estimate: "1d" },
+                { title: "Add SmartSprite declaratives to CSS files", estimate: "1d" },
+                { title: "Spike/Investigate cluster panic on one node", estimate: "2d", notes: "Why do we get so many cluster panics? Try to reproduce reliably" },
+                { title: "JSON call for agressive caching scripts", estimate: "4h" },
+                { title: "Apply Dmitry's agressive caching script", notes: "Use ajax not iframes" },
+                { title: "Eliminate/Reduce XML parsing libraries", estimate: "2d" },
+                { title: "CONF-11764 Remove concurrent util backport & use Java 5 API", estimate: "1d" },
+                { title: "Spike JS minification in build process", estimate: "2d", notes: "see how JIRA does this" },
+                { title: "Automate REST Documentation" },
+                { title: "Automate cache configs", estimate: "2d", notes: "We currently have two cache config files (ehcache and coherence specific ones)." }
+            ]
+        }
+    ]
+});

src/main/resources/planning/images/blue-add.png

Added
New image

src/main/resources/planning/images/blue-add.psd

Binary file added.

src/main/resources/planning/images/confluence/add.png

Added
New image

src/main/resources/planning/images/confluence/check.png

Added
New image

src/main/resources/planning/images/confluence/error.png

Added
New image

src/main/resources/planning/images/confluence/forbidden.png

Added
New image

src/main/resources/planning/images/confluence/lock_16.gif

Added
New image

src/main/resources/planning/images/confluence/star_yellow.gif

Added
New image

src/main/resources/planning/images/confluence/trash_16.gif

Added
New image

src/main/resources/planning/images/confluence/ulock_16.gif

Added
New image

src/main/resources/planning/images/confluence/warning.png

Added
New image

src/main/resources/planning/images/dark-grey-gradient.png

Added
New image

src/main/resources/planning/images/dark-grey-gradient.psd

Binary file added.

src/main/resources/planning/images/grip-horizontal.png

Added
New image

src/main/resources/planning/images/grip-horizontal.psd

Binary file added.

src/main/resources/planning/images/grip-vertical.png

Added
New image

src/main/resources/planning/images/grip-vertical.psd

Binary file added.

src/main/resources/planning/images/grip.png

Added
New image

src/main/resources/planning/images/grip.psd

Binary file added.

src/main/resources/planning/images/light-grey-gradient.png

Added
New image

src/main/resources/planning/images/light-grey-gradient.psd

Binary file added.

src/main/resources/planning/index.html

+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
+   "http://www.w3.org/TR/html4/strict.dtd">
+
+<html lang="en">
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>Project planning</title>
+    <script src="jquery-1.3.2.min.js" type="text/javascript"></script>
+    <script src="jquery-ui-1.7.2.custom.min.js" type="text/javascript"></script>
+    <script src="jquery.gchart-1.2.3/jquery.gchart.min.js" type="text/javascript"></script>
+    <script src="project.js" type="text/javascript"></script>
+    <script type="text/javascript" charset="utf-8">
+        function createProject(project) {
+            jQuery(function ($) {
+                var currentProject = new Project(project.title);
+                currentProject.batchUpdate(function (currentProject) {
+                    var iteration, currentIteration, task, currentTask;
+                    for (var i=0; i<project.iterations.length; i++) {
+                        iteration = project.iterations[i];
+                        currentIteration = (iteration.title == "Backlog") ?
+                            currentProject.getBacklog() :
+                            currentProject.addIteration(iteration.title);
+                        for (var t=0; t<iteration.tasks.length; t++) {
+                            task = iteration.tasks[t];
+                            currentTask = currentIteration.addTask(task.title, task.estimate, task.notes);
+                            if (task.complete) currentTask.complete();
+                        }
+                    }
+                });
+            });
+        }
+    </script>
+    <script src="data.js" type="text/javascript"></script>
+    <link rel="stylesheet" href="project.css" type="text/css">
+</head>
+<body>
+<h1>Project planning</h1>
+<script type="text/x-template" title="project-template">
+<div class="project locked">
+    <div class="header">
+        <a href="#" class="lock button">Unlock</a>
+        <h3 class="title editable">Untitled Project</h3>
+        <a href="#" class="add-iteration button">Add iteration</a>
+        <a href="#" class="show-chart button">Show charts</a>
+    </div>
+    <div class="charts" style="display: none">
+        <div class="project-chart"></div>
+        <div class="iteration-chart"></div>
+    </div>
+    <div class="headings">
+        <span class="handle"></span>
+        <span class="status">Status</span>
+        <span class="title">Task</span>
+        <span class="estimate">Estimate</span>
+        <span class="notes">Notes</span>
+    </div>
+    <ol class="items">
+    </ol>
+</div>
+</script>
+<script type="text/x-template" title="iteration-template">
+<li class="iteration">
+    <span class="handle" title="Drag to move iteration">&bull;</span>
+    <span class="status">Status</span>
+    <h4 class="title editable"></h4>
+    <span class="estimate">0d</span>
+    <span class="notes">&nbsp;</span>
+    <a href="#" class="add-task button" title="Add task">Add task</a>
+</li>
+</script>
+<script type="text/x-template" title="task-template">
+<li class="task">
+    <span class="handle" title="Drag to reorder task">&bull;</span>
+    <span class="status">Status</span>
+    <span class="title editable"></span>
+    <span class="estimate editable">4h</span>
+    <span class="notes editable">&nbsp;</span>
+</li>
+</script>
+</body>
+</html>

src/main/resources/planning/jquery-1.3.2.min.js

+/*
+ * jQuery JavaScript Library v1.3.2
+ * http://jquery.com/
+ *
+ * Copyright (c) 2009 John Resig
+ * Dual licensed under the MIT and GPL licenses.
+ * http://docs.jquery.com/License
+ *
+ * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
+ * Revision: 6246
+ */
+(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"},isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){return o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"nextSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});
+/*
+ * Sizzle CSS Selector Engine - v0.9.3
+ *  Copyright 2009, The Dojo Foundation
+ *  Released under the MIT, BSD, and GPL Licenses.
+ *  More information: http://sizzlejs.com/
+ */
+(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.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|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML='   <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<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>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})();

src/main/resources/planning/jquery-ui-1.7.2.custom.min.js

+/*
+ * jQuery UI 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI
+ */
+jQuery.ui||(function(c){var i=c.fn.remove,d=c.browser.mozilla&&(parseFloat(c.browser.version)<1.9);c.ui={version:"1.7.2",plugin:{add:function(k,l,n){var m=c.ui[k].prototype;for(var j in n){m.plugins[j]=m.plugins[j]||[];m.plugins[j].push([l,n[j]])}},call:function(j,l,k){var n=j.plugins[l];if(!n||!j.element[0].parentNode){return}for(var m=0;m<n.length;m++){if(j.options[n[m][0]]){n[m][1].apply(j.element,k)}}}},contains:function(k,j){return document.compareDocumentPosition?k.compareDocumentPosition(j)&16:k!==j&&k.contains(j)},hasScroll:function(m,k){if(c(m).css("overflow")=="hidden"){return false}var j=(k&&k=="left")?"scrollLeft":"scrollTop",l=false;if(m[j]>0){return true}m[j]=1;l=(m[j]>0);m[j]=0;return l},isOverAxis:function(k,j,l){return(k>j)&&(k<(j+l))},isOver:function(o,k,n,m,j,l){return c.ui.isOverAxis(o,n,j)&&c.ui.isOverAxis(k,m,l)},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38}};if(d){var f=c.attr,e=c.fn.removeAttr,h="http://www.w3.org/2005/07/aaa",a=/^aria-/,b=/^wairole:/;c.attr=function(k,j,l){var m=l!==undefined;return(j=="role"?(m?f.call(this,k,j,"wairole:"+l):(f.apply(this,arguments)||"").replace(b,"")):(a.test(j)?(m?k.setAttributeNS(h,j.replace(a,"aaa:"),l):f.call(this,k,j.replace(a,"aaa:"))):f.apply(this,arguments)))};c.fn.removeAttr=function(j){return(a.test(j)?this.each(function(){this.removeAttributeNS(h,j.replace(a,""))}):e.call(this,j))}}c.fn.extend({remove:function(){c("*",this).add(this).each(function(){c(this).triggerHandler("remove")});return i.apply(this,arguments)},enableSelection:function(){return this.attr("unselectable","off").css("MozUserSelect","").unbind("selectstart.ui")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})},scrollParent:function(){var j;if((c.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){j=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(c.curCSS(this,"position",1))&&(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}else{j=this.parents().filter(function(){return(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!j.length?c(document):j}});c.extend(c.expr[":"],{data:function(l,k,j){return !!c.data(l,j[3])},focusable:function(k){var l=k.nodeName.toLowerCase(),j=c.attr(k,"tabindex");return(/input|select|textarea|button|object/.test(l)?!k.disabled:"a"==l||"area"==l?k.href||!isNaN(j):!isNaN(j))&&!c(k)["area"==l?"parents":"closest"](":hidden").length},tabbable:function(k){var j=c.attr(k,"tabindex");return(isNaN(j)||j>=0)&&c(k).is(":focusable")}});function g(m,n,o,l){function k(q){var p=c[m][n][q]||[];return(typeof p=="string"?p.split(/,?\s+/):p)}var j=k("getter");if(l.length==1&&typeof l[0]=="string"){j=j.concat(k("getterSetter"))}return(c.inArray(o,j)!=-1)}c.widget=function(k,j){var l=k.split(".")[0];k=k.split(".")[1];c.fn[k]=function(p){var n=(typeof p=="string"),o=Array.prototype.slice.call(arguments,1);if(n&&p.substring(0,1)=="_"){return this}if(n&&g(l,k,p,o)){var m=c.data(this[0],k);return(m?m[p].apply(m,o):undefined)}return this.each(function(){var q=c.data(this,k);(!q&&!n&&c.data(this,k,new c[l][k](this,p))._init());(q&&n&&c.isFunction(q[p])&&q[p].apply(q,o))})};c[l]=c[l]||{};c[l][k]=function(o,n){var m=this;this.namespace=l;this.widgetName=k;this.widgetEventPrefix=c[l][k].eventPrefix||k;this.widgetBaseClass=l+"-"+k;this.options=c.extend({},c.widget.defaults,c[l][k].defaults,c.metadata&&c.metadata.get(o)[k],n);this.element=c(o).bind("setData."+k,function(q,p,r){if(q.target==o){return m._setData(p,r)}}).bind("getData."+k,function(q,p){if(q.target==o){return m._getData(p)}}).bind("remove",function(){return m.destroy()})};c[l][k].prototype=c.extend({},c.widget.prototype,j);c[l][k].getterSetter="option"};c.widget.prototype={_init:function(){},destroy:function(){this.element.removeData(this.widgetName).removeClass(this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").removeAttr("aria-disabled")},option:function(l,m){var k=l,j=this;if(typeof l=="string"){if(m===undefined){return this._getData(l)}k={};k[l]=m}c.each(k,function(n,o){j._setData(n,o)})},_getData:function(j){return this.options[j]},_setData:function(j,k){this.options[j]=k;if(j=="disabled"){this.element[k?"addClass":"removeClass"](this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").attr("aria-disabled",k)}},enable:function(){this._setData("disabled",false)},disable:function(){this._setData("disabled",true)},_trigger:function(l,m,n){var p=this.options[l],j=(l==this.widgetEventPrefix?l:this.widgetEventPrefix+l);m=c.Event(m);m.type=j;if(m.originalEvent){for(var k=c.event.props.length,o;k;){o=c.event.props[--k];m[o]=m.originalEvent[o]}}this.element.trigger(m,n);return !(c.isFunction(p)&&p.call(this.element[0],m,n)===false||m.isDefaultPrevented())}};c.widget.defaults={disabled:false};c.ui.mouse={_mouseInit:function(){var j=this;this.element.bind("mousedown."+this.widgetName,function(k){return j._mouseDown(k)}).bind("click."+this.widgetName,function(k){if(j._preventClickEvent){j._preventClickEvent=false;k.stopImmediatePropagation();return false}});if(c.browser.msie){this._mouseUnselectable=this.element.attr("unselectable");this.element.attr("unselectable","on")}this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName);(c.browser.msie&&this.element.attr("unselectable",this._mouseUnselectable))},_mouseDown:function(l){l.originalEvent=l.originalEvent||{};if(l.originalEvent.mouseHandled){return}(this._mouseStarted&&this._mouseUp(l));this._mouseDownEvent=l;var k=this,m=(l.which==1),j=(typeof this.options.cancel=="string"?c(l.target).parents().add(l.target).filter(this.options.cancel).length:false);if(!m||j||!this._mouseCapture(l)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){k.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(l)&&this._mouseDelayMet(l)){this._mouseStarted=(this._mouseStart(l)!==false);if(!this._mouseStarted){l.preventDefault();return true}}this._mouseMoveDelegate=function(n){return k._mouseMove(n)};this._mouseUpDelegate=function(n){return k._mouseUp(n)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);(c.browser.safari||l.preventDefault());l.originalEvent.mouseHandled=true;return true},_mouseMove:function(j){if(c.browser.msie&&!j.button){return this._mouseUp(j)}if(this._mouseStarted){this._mouseDrag(j);return j.preventDefault()}if(this._mouseDistanceMet(j)&&this._mouseDelayMet(j)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,j)!==false);(this._mouseStarted?this._mouseDrag(j):this._mouseUp(j))}return !this._mouseStarted},_mouseUp:function(j){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=(j.target==this._mouseDownEvent.target);this._mouseStop(j)}return false},_mouseDistanceMet:function(j){return(Math.max(Math.abs(this._mouseDownEvent.pageX-j.pageX),Math.abs(this._mouseDownEvent.pageY-j.pageY))>=this.options.distance)},_mouseDelayMet:function(j){return this.mouseDelayMet},_mouseStart:function(j){},_mouseDrag:function(j){},_mouseStop:function(j){},_mouseCapture:function(j){return true}};c.ui.mouse.defaults={cancel:null,distance:1,delay:0}})(jQuery);;/*
+ * jQuery UI Draggable 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Draggables
+ *
+ * Depends:
+ *	ui.core.js
+ */
+(function(a){a.widget("ui.draggable",a.extend({},a.ui.mouse,{_init: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")){return}this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy()},_mouseCapture:function(b){var c=this.options;if(this.helper||c.disabled||a(b.target).is(".ui-resizable-handle")){return false}this.handle=this._getHandle(b);if(!this.handle){return false}return true},_mouseStart:function(b){var c=this.options;this.helper=this._createHelper(b);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.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};a.extend(this.offset,{click:{left:b.pageX-this.offset.left,top:b.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(b);this.originalPageX=b.pageX;this.originalPageY=b.pageY;if(c.cursorAt){this._adjustOffsetFromHelper(c.cursorAt)}if(c.containment){this._setContainment()}this._trigger("start",b);this._cacheHelperProportions();if(a.ui.ddmanager&&!c.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,b)}this.helper.addClass("ui-draggable-dragging");this._mouseDrag(b,true);return true},_mouseDrag:function(b,d){this.position=this._generatePosition(b);this.positionAbs=this._convertPositionTo("absolute");if(!d){var c=this._uiHash();this._trigger("drag",b,c);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"}if(a.ui.ddmanager){a.ui.ddmanager.drag(this,b)}return false},_mouseStop:function(c){var d=false;if(a.ui.ddmanager&&!this.options.dropBehaviour){d=a.ui.ddmanager.drop(this,c)}if(this.dropped){d=this.dropped;this.dropped=false}if((this.options.revert=="invalid"&&!d)||(this.options.revert=="valid"&&d)||this.options.revert===true||(a.isFunction(this.options.revert)&&this.options.revert.call(this.element,d))){var b=this;a(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){b._trigger("stop",c);b._clear()})}else{this._trigger("stop",c);this._clear()}return false},_getHandle:function(b){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==b.target){c=true}});return c},_createHelper:function(c){var d=this.options;var b=a.isFunction(d.helper)?a(d.helper.apply(this.element[0],[c])):(d.helper=="clone"?this.element.clone():this.element);if(!b.parents("body").length){b.appendTo((d.appendTo=="parent"?this.element[0].parentNode:d.appendTo))}if(b[0]!=this.element[0]&&!(/(fixed|absolute)/).test(b.css("position"))){b.css("position","absolute")}return b},_adjustOffsetFromHelper:function(b){if(b.left!=undefined){this.offset.click.left=b.left+this.margins.left}if(b.right!=undefined){this.offset.click.left=this.helperProportions.width-b.right+this.margins.left}if(b.top!=undefined){this.offset.click.top=b.top+this.margins.top}if(b.bottom!=undefined){this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top}},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){b.left+=this.scrollParent.scrollLeft();b.top+=this.scrollParent.scrollTop()}if((this.offsetParent[0]==document.body)||(this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)){b={top:0,left:0}}return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var b=this.element.position();return{top:b.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:b.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)}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e=this.options;if(e.containment=="parent"){e.containment=this.helper[0].parentNode}if(e.containment=="document"||e.containment=="window"){this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(e.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a(e.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]}if(!(/^(document|window|parent)$/).test(e.containment)&&e.containment.constructor!=Array){var c=a(e.containment)[0];if(!c){return}var d=a(e.containment).offset();var b=(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+(b?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+(b?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]}else{if(e.containment.constructor==Array){this.containment=e.containment}}},_convertPositionTo:function(f,h){if(!h){h=this.position}var c=f=="absolute"?1:-1;var e=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=(/(html|body)/i).test(b[0].tagName);return{top:(h.top+this.offset.relative.top*c+this.offset.parent.top*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(g?0:b.scrollTop()))*c)),left:(h.left+this.offset.relative.left*c+this.offset.parent.left*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:b.scrollLeft())*c))}},_generatePosition:function(e){var h=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,i=(/(html|body)/i).test(b[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0])){this.offset.relative=this._getRelativeOffset()}var d=e.pageX;var c=e.pageY;if(this.originalPosition){if(this.containment){if(e.pageX-this.offset.click.left<this.containment[0]){d=this.containment[0]+this.offset.click.left}if(e.pageY-this.offset.click.top<this.containment[1]){c=this.containment[1]+this.offset.click.top}if(e.pageX-this.offset.click.left>this.containment[2]){d=this.containment[2]+this.offset.click.left}if(e.pageY-this.offset.click.top>this.containment[3]){c=this.containment[3]+this.offset.click.top}}if(h.grid){var g=this.originalPageY+Math.round((c-this.originalPageY)/h.grid[1])*h.grid[1];c=this.containment?(!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:(!(g-this.offset.click.top<this.containment[1])?g-h.grid[1]:g+h.grid[1])):g;var f=this.originalPageX+Math.round((d-this.originalPageX)/h.grid[0])*h.grid[0];d=this.containment?(!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:(!(f-this.offset.click.left<this.containment[0])?f-h.grid[0]:f+h.grid[0])):f}}return{top:(c-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():(i?0:b.scrollTop())))),left:(d-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():i?0:b.scrollLeft())))}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");if(this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval){this.helper.remove()}this.helper=null;this.cancelHelperRemoval=false},_trigger:function(b,c,d){d=d||this._uiHash();a.ui.plugin.call(this,b,[c,d]);if(b=="drag"){this.positionAbs=this._convertPositionTo("absolute")}return a.widget.prototype._trigger.call(this,b,c,d)},plugins:{},_uiHash:function(b){return{helper:this.helper,position:this.position,absolutePosition:this.positionAbs,offset:this.positionAbs}}}));a.extend(a.ui.draggable,{version:"1.7.2",eventPrefix:"drag",defaults:{addClasses:true,appendTo:"parent",axis:false,cancel:":input,option",connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,delay:0,distance:1,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}});a.ui.plugin.add("draggable","connectToSortable",{start:function(c,e){var d=a(this).data("draggable"),f=d.options,b=a.extend({},e,{item:d.element});d.sortables=[];a(f.connectToSortable).each(function(){var g=a.data(this,"sortable");if(g&&!g.options.disabled){d.sortables.push({instance:g,shouldRevert:g.options.revert});g._refreshItems();g._trigger("activate",c,b)}})},stop:function(c,e){var d=a(this).data("draggable"),b=a.extend({},e,{item:d.element});a.each(d.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;d.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert){this.instance.options.revert=true}this.instance._mouseStop(c);this.instance.options.helper=this.instance.options._helper;if(d.options.helper=="original"){this.instance.currentItem.css({top:"auto",left:"auto"})}}else{this.instance.cancelHelperRemoval=false;this.instance._trigger("deactivate",c,b)}})},drag:function(c,f){var e=a(this).data("draggable"),b=this;var d=function(i){var n=this.offset.click.top,m=this.offset.click.left;var g=this.positionAbs.top,k=this.positionAbs.left;var j=i.height,l=i.width;var p=i.top,h=i.left;return a.ui.isOver(g+n,k+m,p,h,j,l)};a.each(e.sortables,function(g){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(b).clone().appendTo(this.instance.element).data("sortable-item",true);this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return f.helper[0]};c.target=this.instance.currentItem[0];this.instance._mouseCapture(c,true);this.instance._mouseStart(c,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",c);e.dropped=this.instance.element;e.currentItem=e.element;this.instance.fromOutside=e}if(this.instance.currentItem){this.instance._mouseDrag(c)}}else{if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",c,this.instance._uiHash(this.instance));this.instance._mouseStop(c,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();if(this.instance.placeholder){this.instance.placeholder.remove()}e._trigger("fromSortable",c);e.dropped=false}}})}});a.ui.plugin.add("draggable","cursor",{start:function(c,d){var b=a("body"),e=a(this).data("draggable").options;if(b.css("cursor")){e._cursor=b.css("cursor")}b.css("cursor",e.cursor)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._cursor){a("body").css("cursor",d._cursor)}}});a.ui.plugin.add("draggable","iframeFix",{start:function(b,c){var d=a(this).data("draggable").options;a(d.iframeFix===true?"iframe":d.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:1000}).css(a(this).offset()).appendTo("body")})},stop:function(b,c){a("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)})}});a.ui.plugin.add("draggable","opacity",{start:function(c,d){var b=a(d.helper),e=a(this).data("draggable").options;if(b.css("opacity")){e._opacity=b.css("opacity")}b.css("opacity",e.opacity)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._opacity){a(c.helper).css("opacity",d._opacity)}}});a.ui.plugin.add("draggable","scroll",{start:function(c,d){var b=a(this).data("draggable");if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!="HTML"){b.overflowOffset=b.scrollParent.offset()}},drag:function(d,e){var c=a(this).data("draggable"),f=c.options,b=false;if(c.scrollParent[0]!=document&&c.scrollParent[0].tagName!="HTML"){if(!f.axis||f.axis!="x"){if((c.overflowOffset.top+c.scrollParent[0].offsetHeight)-d.pageY<f.scrollSensitivity){c.scrollParent[0].scrollTop=b=c.scrollParent[0].scrollTop+f.scrollSpeed}else{if(d.pageY-c.overflowOffset.top<f.scrollSensitivity){c.scrollParent[0].scrollTop=b=c.scrollParent[0].scrollTop-f.scrollSpeed}}}if(!f.axis||f.axis!="y"){if((c.overflowOffset.left+c.scrollParent[0].offsetWidth)-d.pageX<f.scrollSensitivity){c.scrollParent[0].scrollLeft=b=c.scrollParent[0].scrollLeft+f.scrollSpeed}else{if(d.pageX-c.overflowOffset.left<f.scrollSensitivity){c.scrollParent[0].scrollLeft=b=c.scrollParent[0].scrollLeft-f.scrollSpeed}}}}else{if(!f.axis||f.axis!="x"){if(d.pageY-a(document).scrollTop()<f.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()-f.scrollSpeed)}else{if(a(window).height()-(d.pageY-a(document).scrollTop())<f.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()+f.scrollSpeed)}}}if(!f.axis||f.axis!="y"){if(d.pageX-a(document).scrollLeft()<f.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()-f.scrollSpeed)}else{if(a(window).width()-(d.pageX-a(document).scrollLeft())<f.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()+f.scrollSpeed)}}}}if(b!==false&&a.ui.ddmanager&&!f.dropBehaviour){a.ui.ddmanager.prepareOffsets(c,d)}}});a.ui.plugin.add("draggable","snap",{start:function(c,d){var b=a(this).data("draggable"),e=b.options;b.snapElements=[];a(e.snap.constructor!=String?(e.snap.items||":data(draggable)"):e.snap).each(function(){var g=a(this);var f=g.offset();if(this!=b.element[0]){b.snapElements.push({item:this,width:g.outerWidth(),height:g.outerHeight(),top:f.top,left:f.left})}})},drag:function(u,p){var g=a(this).data("draggable"),q=g.options;var y=q.snapTolerance;var x=p.offset.left,w=x+g.helperProportions.width,f=p.offset.top,e=f+g.helperProportions.height;for(var v=g.snapElements.length-1;v>=0;v--){var s=g.snapElements[v].left,n=s+g.snapElements[v].width,m=g.snapElements[v].top,A=m+g.snapElements[v].height;if(!((s-y<x&&x<n+y&&m-y<f&&f<A+y)||(s-y<x&&x<n+y&&m-y<e&&e<A+y)||(s-y<w&&w<n+y&&m-y<f&&f<A+y)||(s-y<w&&w<n+y&&m-y<e&&e<A+y))){if(g.snapElements[v].snapping){(g.options.snap.release&&g.options.snap.release.call(g.element,u,a.extend(g._uiHash(),{snapItem:g.snapElements[v].item})))}g.snapElements[v].snapping=false;continue}if(q.snapMode!="inner"){var c=Math.abs(m-e)<=y;var z=Math.abs(A-f)<=y;var j=Math.abs(s-w)<=y;var k=Math.abs(n-x)<=y;if(c){p.position.top=g._convertPositionTo("relative",{top:m-g.helperProportions.height,left:0}).top-g.margins.top}if(z){p.position.top=g._convertPositionTo("relative",{top:A,left:0}).top-g.margins.top}if(j){p.position.left=g._convertPositionTo("relative",{top:0,left:s-g.helperProportions.width}).left-g.margins.left}if(k){p.position.left=g._convertPositionTo("relative",{top:0,left:n}).left-g.margins.left}}var h=(c||z||j||k);if(q.snapMode!="outer"){var c=Math.abs(m-f)<=y;var z=Math.abs(A-e)<=y;var j=Math.abs(s-x)<=y;var k=Math.abs(n-w)<=y;if(c){p.position.top=g._convertPositionTo("relative",{top:m,left:0}).top-g.margins.top}if(z){p.position.top=g._convertPositionTo("relative",{top:A-g.helperProportions.height,left:0}).top-g.margins.top}if(j){p.position.left=g._convertPositionTo("relative",{top:0,left:s}).left-g.margins.left}if(k){p.position.left=g._convertPositionTo("relative",{top:0,left:n-g.helperProportions.width}).left-g.margins.left}}if(!g.snapElements[v].snapping&&(c||z||j||k||h)){(g.options.snap.snap&&g.options.snap.snap.call(g.element,u,a.extend(g._uiHash(),{snapItem:g.snapElements[v].item})))}g.snapElements[v].snapping=(c||z||j||k||h)}}});a.ui.plugin.add("draggable","stack",{start:function(b,c){var e=a(this).data("draggable").options;var d=a.makeArray(a(e.stack.group)).sort(function(g,f){return(parseInt(a(g).css("zIndex"),10)||e.stack.min)-(parseInt(a(f).css("zIndex"),10)||e.stack.min)});a(d).each(function(f){this.style.zIndex=e.stack.min+f});this[0].style.zIndex=e.stack.min+d.length}});a.ui.plugin.add("draggable","zIndex",{start:function(c,d){var b=a(d.helper),e=a(this).data("draggable").options;if(b.css("zIndex")){e._zIndex=b.css("zIndex")}b.css("zIndex",e.zIndex)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._zIndex){a(c.helper).css("zIndex",d._zIndex)}}})})(jQuery);;/*
+ * jQuery UI Sortable 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Sortables
+ *
+ * Depends:
+ *	ui.core.js
+ */
+(function(a){a.widget("ui.sortable",a.extend({},a.ui.mouse,{_init:function(){var b=this.options;this.containerCache={};this.element.addClass("ui-sortable");this.refresh();this.floating=this.items.length?(/left|right/).test(this.items[0].item.css("float")):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 b=this.items.length-1;b>=0;b--){this.items[b].item.removeData("sortable-item")}},_mouseCapture:function(e,f){if(this.reverting){return false}if(this.options.disabled||this.options.type=="static"){return false}this._refreshItems(e);var d=null,c=this,b=a(e.target).parents().each(function(){if(a.data(this,"sortable-item")==c){d=a(this);return false}});if(a.data(e.target,"sortable-item")==c){d=a(e.target)}if(!d){return false}if(this.options.handle&&!f){var g=false;a(this.options.handle,d).find("*").andSelf().each(function(){if(this==e.target){g=true}});if(!g){return false}}this.currentItem=d;this._removeCurrentsFromItems();return true},_mouseStart:function(e,f,b){var g=this.options,c=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(e);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:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(e);this.originalPageX=e.pageX;this.originalPageY=e.pageY;if(g.cursorAt){this._adjustOffsetFromHelper(g.cursorAt)}this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};if(this.helper[0]!=this.currentItem[0]){this.currentItem.hide()}this._createPlaceholder();if(g.containment){this._setContainment()}if(g.cursor){if(a("body").css("cursor")){this._storedCursor=a("body").css("cursor")}a("body").css("cursor",g.cursor)}if(g.opacity){if(this.helper.css("opacity")){this._storedOpacity=this.helper.css("opacity")}this.helper.css("opacity",g.opacity)}if(g.zIndex){if(this.helper.css("zIndex")){this._storedZIndex=this.helper.css("zIndex")}this.helper.css("zIndex",g.zIndex)}if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){this.overflowOffset=this.scrollParent.offset()}this._trigger("start",e,this._uiHash());if(!this._preserveHelperProportions){this._cacheHelperProportions()}if(!b){for(var d=this.containers.length-1;d>=0;d--){this.containers[d]._trigger("activate",e,c._uiHash(this))}}if(a.ui.ddmanager){a.ui.ddmanager.current=this}if(a.ui.ddmanager&&!g.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,e)}this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(e);return true},_mouseDrag:function(f){this.position=this._generatePosition(f);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs){this.lastPositionAbs=this.positionAbs}if(this.options.scroll){var g=this.options,b=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if((this.overflowOffset.top+this.scrollParent[0].offsetHeight)-f.pageY<g.scrollSensitivity){this.scrollParent[0].scrollTop=b=this.scrollParent[0].scrollTop+g.scrollSpeed}else{if(f.pageY-this.overflowOffset.top<g.scrollSensitivity){this.scrollParent[0].scrollTop=b=this.scrollParent[0].scrollTop-g.scrollSpeed}}if((this.overflowOffset.left+this.scrollParent[0].offsetWidth)-f.pageX<g.scrollSensitivity){this.scrollParent[0].scrollLeft=b=this.scrollParent[0].scrollLeft+g.scrollSpeed}else{if(f.pageX-this.overflowOffset.left<g.scrollSensitivity){this.scrollParent[0].scrollLeft=b=this.scrollParent[0].scrollLeft-g.scrollSpeed}}}else{if(f.pageY-a(document).scrollTop()<g.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()-g.scrollSpeed)}else{if(a(window).height()-(f.pageY-a(document).scrollTop())<g.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()+g.scrollSpeed)}}if(f.pageX-a(document).scrollLeft()<g.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()-g.scrollSpeed)}else{if(a(window).width()-(f.pageX-a(document).scrollLeft())<g.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()+g.scrollSpeed)}}}if(b!==false&&a.ui.ddmanager&&!g.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,f)}}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(var d=this.items.length-1;d>=0;d--){var e=this.items[d],c=e.item[0],h=this._intersectsWithPointer(e);if(!h){continue}if(c!=this.currentItem[0]&&this.placeholder[h==1?"next":"prev"]()[0]!=c&&!a.ui.contains(this.placeholder[0],c)&&(this.options.type=="semi-dynamic"?!a.ui.contains(this.element[0],c):true)){this.direction=h==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(e)){this._rearrange(f,e)}else{break}this._trigger("change",f,this._uiHash());break}}this._contactContainers(f);if(a.ui.ddmanager){a.ui.ddmanager.drag(this,f)}this._trigger("sort",f,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(c,d){if(!c){return}if(a.ui.ddmanager&&!this.options.dropBehaviour){a.ui.ddmanager.drop(this,c)}if(this.options.revert){var b=this;var e=b.placeholder.offset();b.reverting=true;a(this.helper).animate({left:e.left-this.offset.parent.left-b.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:e.top-this.offset.parent.top-b.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){b._clear(c)})}else{this._clear(c,d)}return false},cancel:function(){var b=this;if(this.dragging){this._mouseUp();if(this.options.helper=="original"){this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else{this.currentItem.show()}for(var c=this.containers.length-1;c>=0;c--){this.containers[c]._trigger("deactivate",null,b._uiHash(this));if(this.containers[c].containerCache.over){this.containers[c]._trigger("out",null,b._uiHash(this));this.containers[c].containerCache.over=0}}}if(this.placeholder[0].parentNode){this.placeholder[0].parentNode.removeChild(this.placeholder[0])}if(this.options.helper!="original"&&this.helper&&this.helper[0].parentNode){this.helper.remove()}a.extend(this,{helper:null,dragging:false,reverting:false,_noFinalSort:null});if(this.domPosition.prev){a(this.domPosition.prev).after(this.currentItem)}else{a(this.domPosition.parent).prepend(this.currentItem)}return true},serialize:function(d){var b=this._getItemsAsjQuery(d&&d.connected);var c=[];d=d||{};a(b).each(function(){var e=(a(d.item||this).attr(d.attribute||"id")||"").match(d.expression||(/(.+)[-=_](.+)/));if(e){c.push((d.key||e[1]+"[]")+"="+(d.key&&d.expression?e[1]:e[2]))}});return c.join("&")},toArray:function(d){var b=this._getItemsAsjQuery(d&&d.connected);var c=[];d=d||{};b.each(function(){c.push(a(d.item||this).attr(d.attribute||"id")||"")});return c},_intersectsWith:function(m){var e=this.positionAbs.left,d=e+this.helperProportions.width,k=this.positionAbs.top,j=k+this.helperProportions.height;var f=m.left,c=f+m.width,n=m.top,i=n+m.height;var o=this.offset.click.top,h=this.offset.click.left;var g=(k+o)>n&&(k+o)<i&&(e+h)>f&&(e+h)<c;if(this.options.tolerance=="pointer"||this.options.forcePointerForContainers||(this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>m[this.floating?"width":"height"])){return g}else{return(f<e+(this.helperProportions.width/2)&&d-(this.helperProportions.width/2)<c&&n<k+(this.helperProportions.height/2)&&j-(this.helperProportions.height/2)<i)}},_intersectsWithPointer:function(d){var e=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,d.top,d.height),c=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,d.left,d.width),g=e&&c,b=this._getDragVerticalDirection(),f=this._getDragHorizontalDirection();if(!g){return false}return this.floating?(((f&&f=="right")||b=="down")?2:1):(b&&(b=="down"?2:1))},_intersectsWithSides:function(e){var c=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,e.top+(e.height/2),e.height),d=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,e.left+(e.width/2),e.width),b=this._getDragVerticalDirection(),f=this._getDragHorizontalDirection();if(this.floating&&f){return((f=="right"&&d)||(f=="left"&&!d))}else{return b&&((b=="down"&&c)||(b=="up"&&!c))}},_getDragVerticalDirection:function(){var b=this.positionAbs.top-this.lastPositionAbs.top;return b!=0&&(b>0?"down":"up")},_getDragHorizontalDirection:function(){var b=this.positionAbs.left-this.lastPositionAbs.left;return b!=0&&(b>0?"right":"left")},refresh:function(b){this._refreshItems(b);this.refreshPositions()},_connectWith:function(){var b=this.options;return b.connectWith.constructor==String?[b.connectWith]:b.connectWith},_getItemsAsjQuery:function(b){var l=this;var g=[];var e=[];var h=this._connectWith();if(h&&b){for(var d=h.length-1;d>=0;d--){var k=a(h[d]);for(var c=k.length-1;c>=0;c--){var f=a.data(k[c],"sortable");if(f&&f!=this&&!f.options.disabled){e.push([a.isFunction(f.options.items)?f.options.items.call(f.element):a(f.options.items,f.element).not(".ui-sortable-helper"),f])}}}}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"),this]);for(var d=e.length-1;d>=0;d--){e[d][0].each(function(){g.push(this)})}return a(g)},_removeCurrentsFromItems:function(){var d=this.currentItem.find(":data(sortable-item)");for(var c=0;c<this.items.length;c++){for(var b=0;b<d.length;b++){if(d[b]==this.items[c].item[0]){this.items.splice(c,1)}}}},_refreshItems:function(b){this.items=[];this.containers=[this];var h=this.items;var p=this;var f=[[a.isFunction(this.options.items)?this.options.items.call(this.element[0],b,{item:this.currentItem}):a(this.options.items,this.element),this]];var l=this._connectWith();if(l){for(var e=l.length-1;e>=0;e--){var m=a(l[e]);for(var d=m.length-1;d>=0;d--){var g=a.data(m[d],"sortable");if(g&&g!=this&&!g.options.disabled){f.push([a.isFunction(g.options.items)?g.options.items.call(g.element[0],b,{item:this.currentItem}):a(g.options.items,g.element),g]);this.containers.push(g)}}}}for(var e=f.length-1;e>=0;e--){var k=f[e][1];var c=f[e][0];for(var d=0,n=c.length;d<n;d++){var o=a(c[d]);o.data("sortable-item",k);h.push({item:o,instance:k,width:0,height:0,left:0,top:0})}}},refreshPositions:function(b){if(this.offsetParent&&this.helper){this.offset.parent=this._getParentOffset()}for(var d=this.items.length-1;d>=0;d--){var e=this.items[d];if(e.instance!=this.currentContainer&&this.currentContainer&&e.item[0]!=this.currentItem[0]){continue}var c=this.options.toleranceElement?a(this.options.toleranceElement,e.item):e.item;if(!b){e.width=c.outerWidth();e.height=c.outerHeight()}var f=c.offset();e.left=f.left;e.top=f.top}if(this.options.custom&&this.options.custom.refreshContainers){this.options.custom.refreshContainers.call(this)}else{for(var d=this.containers.length-1;d>=0;d--){var f=this.containers[d].element.offset();this.containers[d].containerCache.left=f.left;this.containers[d].containerCache.top=f.top;this.containers[d].containerCache.width=this.containers[d].element.outerWidth();this.containers[d].containerCache.height=this.containers[d].element.outerHeight()}}},_createPlaceholder:function(d){var b=d||this,e=b.options;if(!e.placeholder||e.placeholder.constructor==String){var c=e.placeholder;e.placeholder={element:function(){var f=a(document.createElement(b.currentItem[0].nodeName)).addClass(c||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!c){f.style.visibility="hidden"}return f},update:function(f,g){if(c&&!e.forcePlaceholderSize){return}if(!g.height()){g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10))}if(!g.width()){g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")||0,10))}}}}b.placeholder=a(e.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);e.placeholder.update(b,b.placeholder)},_contactContainers:function(d){for(var c=this.containers.length-1;c>=0;c--){if(this._intersectsWith(this.containers[c].containerCache)){if(!this.containers[c].containerCache.over){if(this.currentContainer!=this.containers[c]){var h=10000;var g=null;var e=this.positionAbs[this.containers[c].floating?"left":"top"];for(var b=this.items.length-1;b>=0;b--){if(!a.ui.contains(this.containers[c].element[0],this.items[b].item[0])){continue}var f=this.items[b][this.containers[c].floating?"left":"top"];if(Math.abs(f-e)<h){h=Math.abs(f-e);g=this.items[b]}}if(!g&&!this.options.dropOnEmpty){continue}this.currentContainer=this.containers[c];g?this._rearrange(d,g,null,true):this._rearrange(d,null,this.containers[c].element,true);this._trigger("change",d,this._uiHash());this.containers[c]._trigger("change",d,this._uiHash(this));this.options.placeholder.update(this.currentContainer,this.placeholder)}this.containers[c]._trigger("over",d,this._uiHash(this));this.containers[c].containerCache.over=1}}else{if(this.containers[c].containerCache.over){this.containers[c]._trigger("out",d,this._uiHash(this));this.containers[c].containerCache.over=0}}}},_createHelper:function(c){var d=this.options;var b=a.isFunction(d.helper)?a(d.helper.apply(this.element[0],[c,this.currentItem])):(d.helper=="clone"?this.currentItem.clone():this.currentItem);if(!b.parents("body").length){a(d.appendTo!="parent"?d.appendTo:this.currentItem[0].parentNode)[0].appendChild(b[0])}if(b[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(b[0].style.width==""||d.forceHelperSize){b.width(this.currentItem.width())}if(b[0].style.height==""||d.forceHelperSize){b.height(this.currentItem.height())}return b},_adjustOffsetFromHelper:function(b){if(b.left!=undefined){this.offset.click.left=b.left+this.margins.left}if(b.right!=undefined){this.offset.click.left=this.helperProportions.width-b.right+this.margins.left}if(b.top!=undefined){this.offset.click.top=b.top+this.margins.top}if(b.bottom!=undefined){this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top}},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){b.left+=this.scrollParent.scrollLeft();b.top+=this.scrollParent.scrollTop()}if((this.offsetParent[0]==document.body)||(this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)){b={top:0,left:0}}return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var b=this.currentItem.position();return{top:b.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:b.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 e=this.options;if(e.containment=="parent"){e.containment=this.helper[0].parentNode}if(e.containment=="document"||e.containment=="window"){this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(e.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a(e.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]}if(!(/^(document|window|parent)$/).test(e.containment)){var c=a(e.containment)[0];var d=a(e.containment).offset();var b=(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+(b?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+(b?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(f,h){if(!h){h=this.position}var c=f=="absolute"?1:-1;var e=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=(/(html|body)/i).test(b[0].tagName);return{top:(h.top+this.offset.relative.top*c+this.offset.parent.top*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(g?0:b.scrollTop()))*c)),left:(h.left+this.offset.relative.left*c+this.offset.parent.left*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:b.scrollLeft())*c))}},_generatePosition:function(e){var h=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,i=(/(html|body)/i).test(b[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0])){this.offset.relative=this._getRelativeOffset()}var d=e.pageX;var c=e.pageY;if(this.originalPosition){if(this.containment){if(e.pageX-this.offset.click.left<this.containment[0]){d=this.containment[0]+this.offset.click.left}if(e.pageY-this.offset.click.top<this.containment[1]){c=this.containment[1]+this.offset.click.top}if(e.pageX-this.offset.click.left>this.containment[2]){d=this.containment[2]+this.offset.click.left}if(e.pageY-this.offset.click.top>this.containment[3]){c=this.containment[3]+this.offset.click.top}}if(h.grid){var g=this.originalPageY+Math.round((c-this.originalPageY)/h.grid[1])*h.grid[1];c=this.containment?(!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:(!(g-this.offset.click.top<this.containment[1])?g-h.grid[1]:g+h.grid[1])):g;var f=this.originalPageX+Math.round((d-this.originalPageX)/h.grid[0])*h.grid[0];d=this.containment?(!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:(!(f-this.offset.click.left<this.containment[0])?f-h.grid[0]:f+h.grid[0])):f}}return{top:(c-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():(i?0:b.scrollTop())))),left:(d-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():i?0:b.scrollLeft())))}},_rearrange:function(g,f,c,e){c?c[0].appendChild(this.placeholder[0]):f.item[0].parentNode.insertBefore(this.placeholder[0],(this.direction=="down"?f.item[0]:f.item[0].nextSibling));this.counter=this.counter?++this.counter:1;var d=this,b=this.counter;window.setTimeout(function(){if(b==d.counter){d.refreshPositions(!e)}},0)},_clear:function(d,e){this.reverting=false;var f=[],b=this;if(!this._noFinalSort&&this.currentItem[0].parentNode){this.placeholder.before(this.currentItem)}this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var c in this._storedCSS){if(this._storedCSS[c]=="auto"||this._storedCSS[c]=="static"){this._storedCSS[c]=""}}this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else{this.currentItem.show()}if(this.fromOutside&&!e){f.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])&&!e){f.push(function(g){this._trigger("update",g,this._uiHash())})}if(!a.ui.contains(this.element[0],this.currentItem[0])){if(!e){f.push(function(g){this._trigger("remove",g,this._uiHash())})}for(var c=this.containers.length-1;c>=0;c--){if(a.ui.contains(this.containers[c].element[0],this.currentItem[0])&&!e){f.push((function(g){return function(h){g._trigger("receive",h,this._uiHash(this))}}).call(this,this.containers[c]));f.push((function(g){return function(h){g._trigger("update",h,this._uiHash(this))}}).call(this,this.containers[c]))}}}for(var c=this.containers.length-1;c>=0;c--){if(!e){f.push((function(g){return function(h){g._trigger("deactivate",h,this._uiHash(this))}}).call(this,this.containers[c]))}if(this.containers[c].containerCache.over){f.push((function(g){return function(h){g._trigger("out",h,this._uiHash(this))}}).call(this,this.containers[c]));this.containers[c].containerCache.over=0}}if(this._storedCursor){a("body").css("cursor",this._storedCursor)}if(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(!e){this._trigger("beforeStop",d,this._uiHash());for(var c=0;c<f.length;c++){f[c].call(this,d)}this._trigger("stop",d,this._uiHash())}return false}if(!e){this._trigger("beforeStop",d,this._uiHash())}this.placeholder[0].parentNode.removeChild(this.placeholder[0]);if(this.helper[0]!=this.currentItem[0]){this.helper.remove()}this.helper=null;if(!e){for(var c=0;c<f.length;c++){f[c].call(this,d)}this._trigger("stop",d,this._uiHash())}this.fromOutside=false;return true},_trigger:function(){if(a.widget.prototype._trigger.apply(this,arguments)===false){this.cancel()}},_uiHash:function(c){var b=c||this;return{helper:b.helper,placeholder:b.placeholder||a([]),position:b.position,absolutePosition:b.positionAbs,offset:b.positionAbs,item:b.currentItem,sender:c?c.element:null}}}));a.extend(a.ui.sortable,{getter:"serialize toArray",version:"1.7.2",eventPrefix:"sort",defaults:{appendTo:"parent",axis:false,cancel:":input,option",connectWith:false,containment:false,cursor:"auto",cursorAt:false,delay:0,distance:1,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:1000}})})(jQuery);;

src/main/resources/planning/jquery.gchart-1.2.3/gChartBasics.html

+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+     "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+<title>jQuery Google Chart</title>
+<style type="text/css">
+#basicGChart { width: 450px; height: 300px }
+</style>
+<script type="text/javascript" src="js/jquery-1.3.2.js"></script>
+<script type="text/javascript" src="js/jquery.gchart.js"></script>
+<script type="text/javascript">
+$(function () {
+	$('#basicGChart').gchart({type: 'line', maxValue: 40,
+		title: 'Weather for|Brisbane, Australia', titleColor: 'green',
+		backgroundColor: $.gchart.gradient('horizontal', 'ccffff', 'ccffff00'),
+		series: [$.gchart.series('Max', [29.1, 28.9, 28.1, 26.3,
+		23.5, 21.2, 20.6, 21.7, 23.8, 25.6, 27.3, 28.6], 'red', 'ffcccc'),
+		$.gchart.series('Min', [20.9, 20.8, 19.5, 16.9,
+		13.8, 10.9, 9.5, 10.0, 12.5, 15.6, 18.0, 19.8], 'green'),
+		$.gchart.series('Rainfall', [157.7, 174.6, 138.5, 90.4,
+		98.8, 71.2, 62.6, 42.7, 34.9, 94.4, 96.5, 126.2], 'blue', 0, 200)],
+		axes: [$.gchart.axis('bottom', ['Jan', 'Feb', 'Mar', 'Apr',
+		'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], 'black'),
+		$.gchart.axis('left', 0, 40, 'red', 'right'),
+		$.gchart.axis('left', ['C'], [50], 'red', 'right'),
+		$.gchart.axis('right', 0, 200, 50, 'blue', 'left'),
+		$.gchart.axis('right', ['mm'], [50], 'blue', 'left')],
+		legend: 'right'});
+});
+</script>
+</head>
+<body>
+<h1>jQuery Google Chart Basics</h1>
+<p>This page demonstrates the very basics of the
+	<a href="http://keith-wood.name/gChart.html">jQuery Google Chart plugin</a>.
+	It contains the minimum requirements for using the plugin and
+	can be used as the basis for your own experimentation.</p>
+<p>For more detail see the <a href="http://keith-wood.name/gChartRef.html">documentation reference</a> page.</p>
+<div id="basicGChart"></div>
+</body>
+</html>

src/main/resources/planning/jquery.gchart-1.2.3/jquery.gchart.js

+/* http://keith-wood.name/gChart.html
+   Google Chart interface for jQuery v1.2.3.
+   See API details at http://code.google.com/apis/chart/.
+   Written by Keith Wood (kbwood{at}iinet.com.au) September 2008.
+   Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and 
+   MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses. 
+   Please attribute the author if you use it. */
+
+/* Request a chart from Google charts.
+   $('div selector').gchart({type: 'pie', series: [$.gchart.series([101, 84])]});
+*/
+
+(function($) { // Hide scope, no $ conflict
+
+/* Google Charting manager. */
+function GChart() {
+	this._defaults = {
+		width: 0, // Width of the chart
+		height: 0, // Height of the chart
+		margins: null, // The minimum margins (pixels) around the chart:
+			// all or [left/right, top/bottom] or [left, right, top, bottom]
+		title: '', // The title of the chart
+		titleColor: '', // The colour of the title
+		titleSize: 0, // The font size of the title
+		backgroundColor: null, // The background colour for the entire image
+		chartColor: null, // The background colour for the chart area
+		legend: '', // The location of the legend: top, topVertical,
+			// bottom, bottomVertical, left, right, or '' for none
+		legendSize: null, // The minimum size (pixels) of the legend: [width, height]
+		type: 'pie3D', // Type of chart requested: line, lineXY, sparkline,
+			// barHoriz, barVert, barHorizGrouped, barVertGrouped, pie, pie3D (default),
+			// pieConcentric, venn, scatter, radar, radarCurved, map, meter, qrCode
+		encoding: '', // Type of data encoding: text (default), scaled, simple, extended
+		series: [this.series('Hello World', [60, 40])], // Details about the values to be plotted
+		visibleSeries: 0, // The number of series that are directly displayed, 0 for all
+		dataLabels: [], // Labels for the values across all the series
+		axes: [], // Definitions for the various axes, each entry is either
+			// a string of the axis name or a GChartAxis object
+		ranges: [], // Definitions of ranges for the chart, each entry is an object with
+			// vertical (boolean), color (string), start (number, 0-1),
+			// and end (number, 0-1) attributes
+		markers: [], // Definitions of markers for the chart, each entry is an object with
+			// shape (arrow, circle, cross, diamond, down, flag, horizontal,
+			// number, plus, sparkfill, sparkline, square, text, vertical),
+			// color (string), series (number), item (number), size (number),
+			// priority (number), text (string), positioned (boolean)
+		minValue: 0, // The minimum value of the data, $.gchart.calculate to calculate from data
+		maxValue: 100, // The maximum value of the data, $.gchart.calculate to calculate from data
+		gridSize: [], // The x and y spacings between grid lines
+		gridLine: [], // The line and gap lengths for the grid lines
+		gridOffsets: [], // The x and y offsets for the grid lines
+		extension: {}, // Any custom extensions to the Google chart parameters
+		// Bar charts -------------
+		barWidth: null, // The width of each bar (pixels) or 'a' for automatic or 'r' for relative
+		barSpacing: null, // The space (pixels) between bars in a group
+		barGroupSpacing: null, // The space (pixels) between groups of bars
+		barZeroPoint: null, // The position (0.0 to 1.0) of the zero-line
+		// Pie charts -------------
+		pieOrientation: 0, // The angle (degrees) of orientation from the positive x-axis
+		// Maps -------------------
+		mapArea: 'world', // The general area to show: world,
+			// africa, asia, europe, middle_east, south_america, usa
+		mapRegions: [], // List of country/state codes to plot
+		mapDefaultColor: 'white', // The colour for non-plotted countries/states
+		mapColors: ['aaffaa', 'green'], // The colour range for plotted countries/states
+		// QR Code ----------------
+		qrECLevel: null, // Error correction level: low, medium, quarter, high
+		qrMargin: null, // Margin (squares) around QR code, default is 4
+		// Callback
+		onLoad: null // Function to call when loaded
+	};
+};
+
+/* The name of the data property that holds the instance settings. */
+var PROP_NAME = 'gChart';
+/* Translations of text colour names into chart values. */
+var COLOURS = {aqua: '008080', black: '000000', blue: '0000ff', fuchsia: 'ff00ff',
+	gray: '808080', green: '008000', lime: '00ff00', maroon: '800000', navy: '000080',
+	olive: '808000', orange: 'ffa500', purple: '800080', red: 'ff0000', silver: 'c0c0c0',
+	teal: '008080', transparent: '00000000', white: 'ffffff', yellow: 'ffff00'};
+/* Mapping from plugin chart types to Google chart types. */
+var CHART_TYPES = {line: 'lc', lineXY: 'lxy', sparkline: 'ls',
+	barHoriz: 'bhs', barVert: 'bvs', barHorizGrouped: 'bhg', barVertGrouped: 'bvg',
+	pie: 'p', pie3D: 'p3', pieConcentric: 'pc', venn: 'v', scatter: 's',
+	radar: 'r', radarCurved: 'rs', map: 't', meter: 'gom', qrCode: 'qr'};
+/* Mapping from plugin shape types to Google chart shapes. */
+var SHAPES = {arrow: 'a', circle: 'o', cross: 'x', diamond: 'd', down: 'v',
+	flag: 'f', financial: 'F', horizontal: 'h', number: 'N', plus: 'c',
+	sparkfill: 'B', sparkline: 'D', square: 's', text: 't', vertical: 'V'};
+/* Mapping from plugin priority names to chart priority codes. */
+var PRIORITIES = {behind: -1, below: -1, normal: 0, above: 1, inFront: 1};
+/* Mapping from plugin gradient names to angles. */
+var GRADIENTS = {diagonalDown: -45, diagonalUp: 45, horizontal: 0, vertical: 90};
+/* Mapping from plugin alignment names to chart alignment codes. */
+var ALIGNMENTS = {left: -1, center: 0, right: 1};
+/* Mapping from plugin drawing control names to chart drawing control codes. */
+var DRAWING = {line: 'l', ticks: 't', both: 'lt'};
+
+/* Characters to use for encoding schemes. */
+var SIMPLE_ENCODING = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
+var EXTENDED_ENCODING = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-.';
+
+$.extend(GChart.prototype, {
+	/* Class name added to elements to indicate already configured with Google charting. */
+	markerClassName: 'hasGChart',
+	
+	/* Marker value to indicate min/max calculation from data. */
+	calculate: -0.123,
+	
+	/* Possible values for bar width. */
+	barWidthAuto: 'a', // Automatic resize to fill
+	barWidthRelative: 'r', // Spacings are relative to bars (0.0 - 1.0)
+	
+	/* Possible values for number format. */
+	formatFloat: 'f',
+	formatPercent: 'p',
+	formatScientific: 'e',
+	formatCurrency: 'c',
+
+	/* Override the default settings for all Google chart instances.
+	   @param  options  (object) the new settings to use as defaults */
+	setDefaults: function(options) {
+		extendRemove(this._defaults, options || {});
+	},
+
+	/* Create a new data series.
+	   @param  label       (string, optional) the label for this series
+	   @param  data        (number[]) the data values for this series
+	   @param  colour      (string or string[]) the colour(s) for this series
+	   @param  fillColour  (string, optional) the fill colour for this series
+	   @param  minValue    (number) the minimum value for this series
+	   @param  maxValue    (number) the maximum value for this series
+	   @param  thickness   (number) the thickness (pixels) of the line for this series
+	   @param  segments    (number[2]) the line and gap lengths (pixels) for this series
+	   @return  (object) the new series object */
+	series: function(label, data, colour, fillColour, minValue, maxValue, thickness, segments) {
+		if (isArray(label)) { // Optional label
+			segments = thickness;
+			thickness = maxValue;
+			maxValue = minValue;
+			minValue = fillColour;
+			fillColour = colour;
+			colour = data;
+			data = label;
+			label = '';
+		}
+		if (typeof colour != 'string' && !isArray(colour)) { // Optional colour/fillColour
+			segments = maxValue;
+			thickness = minValue;
+			maxValue = fillColour;
+			minValue = colour;
+			fillColour = null;
+			colour = null;
+		}
+		else if (fillColour != null && typeof fillColour != 'string') { // Optional fillColour
+			segments = thickness;
+			thickness = maxValue;
+			maxValue = minValue;
+			minValue = fillColour;
+			fillColour = null;
+		}
+		if (isArray(maxValue)) { // Optional min/max values
+			segments = maxValue;
+			thickness = minValue;
+			maxValue = null;
+			minValue = null;
+		}
+		return {label: label, data: data || [], color: colour || '',
+			fillColor: fillColour, minValue: minValue, maxValue: maxValue,
+			lineThickness: thickness, lineSegments: segments};
+	},
+
+	/* Load series data from CSV.
+	   Include a header row if fields other than data required.
+	   Use these names - label, color, fillColor, minValue, maxValue,
+	   lineThickness, lineSegmentLine, lineSegmentGap - for series attributes.
+	   Data columns should be labelled ynn, where nn is a sequential number.
+	   For X-Y line charts, include xnn columns before corresponding ynn.
+	   @param  csv  (string or string[]) the series data in CSV format
+	   @return  (object[]) the series definitions */
+	seriesFromCsv: function(csv) {
+		var seriesData = [];
+		if (!isArray(csv)) {
+			csv = csv.split('\n');
+		}
+		if (!csv.length) {
+			return seriesData;
+		}
+		var xyData = false;
+		var sColumns = [];
+		var xColumns = [];
+		var fields = ['label', 'color', 'fillColor', 'minValue', 'maxValue',
+			'lineThickness', 'lineSegmentLine', 'lineSegmentGap'];
+		$.each(csv, function(i, line) {
+			var cols = line.split(',');
+			if (i == 0 && isNaN(parseFloat(cols[0]))) { // Header row
+				$.each(cols, function(i, val) {
+					if ($.inArray(val, fields) > -1) { // Note the positions of the columns
+						sColumns[i] = val;
+					}
+					else if (val.match(/^x\d+$/)) { // Column with x-coordinate
+						xColumns[i] = val;
+					}
+				});
+			}
+			else {
+				var series = {};
+				var data = [];
+				var saveX = null;
+				$.each(cols, function(i, val) {
+					if (sColumns[i]) { // Non-data value
+						var pos = $.inArray(sColumns[i], fields);
+						series[sColumns[i]] = (pos > 2 ? $.gchart._numeric(val, 0) : val);
+					}
+					else if (xColumns[i]) { // X-coordinate
+						saveX = (val ? $.gchart._numeric(val, -1) : null);
+						xyData = true;
+					}
+					else {
+						var y = $.gchart._numeric(val, -1);
+						data.push(saveX != null ? [saveX, y] : y);
+						saveX = null;
+					}
+				});
+				if (series.lineSegmentLine != null && series.lineSegmentGap != null) {
+					series.lineSegments = [series.lineSegmentLine, series.lineSegmentGap];
+					series.lineSegmentLine = series.lineSegmentGap = null;
+				}
+				seriesData.push($.extend(series, {data: data}));
+			}
+		});
+		return (xyData ? this.seriesForXYLines(seriesData) : seriesData);
+	},
+
+	/* Load series data from XML. All attributes are optional except point/@y.
+	   <data>
+	     <series label="" color="" fillColor="" minValue="" maxValue="" lineThickness="" lineSegments="">
+	       <point x="" y=""/>
+	       ...
+	     </series>
+	     ...
+	   </data>
+	   @param  xml  (string or Document) the XML containing the series data
+	   @return  (object[]) the series definitions */
+	seriesFromXml: function(xml) {
+		if ($.browser.msie && typeof xml == 'string') {
+			var doc = new ActiveXObject('Microsoft.XMLDOM');
+			doc.validateOnParse = false;
+			doc.resolveExternals = false;
+			doc.loadXML(xml);
+			xml = doc;
+		}
+		xml = $(xml);
+		var seriesData = [];
+		var xyData = false;
+		try {
+			xml.find('series').each(function() {
+				var series = $(this);
+				var data = [];
+				series.find('point').each(function() {
+					var point = $(this);
+					var x = point.attr('x');
+					if (x != null) {
+						xyData = true;
+						x = $.gchart._numeric(x, -1);
+					}
+					y = $.gchart._numeric(point.attr('y'), -1);
+					data.push(x ? [x, y] : y);
+				});
+				var segments = series.attr('lineSegments');
+				if (segments) {
+					segments = segments.split(',');
+				}
+				seriesData.push({label: series.attr('label'), data: data,
+					color: series.attr('color'), fillColor: series.attr('fillColor'),
+					minValue: series.attr('minValue'), maxValue: series.attr('maxValue'),
+					lineThickness: series.attr('lineThickness'), lineSegments: segments});
+			});
+		}
+		catch (e) {
+			// Ignore
+		}
+		return (xyData ? this.seriesForXYLines(seriesData) : seriesData);
+	},
+
+	/* Force a value to be numeric.
+	   @param  val      (string) the value to convert
+	   @param  whenNaN  (number) value to use if not numeric
+	   @return  (number) the numeric equivalent or whenNaN if not numeric */
+	_numeric: function(val, whenNaN) {
+		val = parseFloat(val);
+		return (isNaN(val) ? whenNaN : val);
+	},
+
+	/* Prepare series for a line XY chart.
+	   @param  series  (object[]) the details of the points to plot,
+	                   each data value may be an array of two points
+	   @return  (object[]) the transformed series
+	   @deprecated  in favour of seriesForXYLines */
+	lineXYSeries: function(series) {
+		return this.seriesForXYLines(series);
+	},
+
+	/* Prepare series for a line XY chart.
+	   @param  series  (object[]) the details of the points to plot,
+	                   each data value may be an array of two points
+	   @return  (object[]) the transformed series */
+	seriesForXYLines: function(series) {
+		var xySeries = [];
+		for (var i = 0; i < series.length; i++) {
+			var xNull = !isArray(series[i].data[0]);
+			var xData = (xNull ? [null] : []);
+			var yData = [];
+			for (var j = 0; j < series[i].data.length; j++) {
+				if (xNull) {
+					yData.push(series[i].data[j]);
+				}
+				else {
+					xData.push(series[i].data[j][0]);
+					yData.push(series[i].data[j][1]);
+				}
+			}
+			xySeries.push($.gchart.series(series[i].label, xData, series[i].color,
+				series[i].fillColor, series[i].minValue, series[i].maxValue,
+				series[i].lineThickness, series[i].lineSegments));
+			xySeries.push($.gchart.series(series[i].label, yData, '',
+				series[i].fillColor, series[i].minValue, series[i].maxValue,
+				series[i].lineThickness, series[i].lineSegments));
+		}
+		return xySeries;
+	},
+
+	/* Prepare options for a scatter chart.
+	   @param  values   (number[][]) the coordinates of the points:
+	                    [0] is the x-coord, [1] is the y-coord, [2] is the percentage size
+	   @param  options  (object) additional settings (optional)
+	   @return  (object) the configured options object */
+	scatter: function(values, options) {
+		var series = [[], [], []];
+		for (var i = 0; i < values.length; i++) {
+			series[0][i] = values[i][0];
+			series[1][i] = values[i][1];
+			series[2][i] = values[i][2] || 100;
+		}
+		return $.extend({}, options || {}, {type: 'scatter',
+			series: [$.gchart.series('', series[0]),
+				$.gchart.series('', series[1]),
+				$.gchart.series('', series[2])]});
+	},
+
+	/* Prepare options for a Venn diagram.
+	   @param  size1       (number) the relative size of the first circle
+	   @param  size2       (number) the relative size of the second circle
+	   @param  size3       (number) the relative size of the third circle
+	   @param  overlap12   (number) the overlap between circles 1 and 2
+	   @param  overlap13   (number) the overlap between circles 1 and 3
+	   @param  overlap23   (number) the overlap between circles 2 and 3
+	   @param  overlap123  (number) the overlap between all circles
+	   @param  options     (object) additional settings (optional)
+	   @return  (object) the configured options object */
+	venn: function(size1, size2, size3, overlap12, overlap13, overlap23, overlap123, options) {
+		return $.extend({}, options || {}, {type: 'venn', series:
+			[$.gchart.series([size1, size2, size3, overlap12, overlap13, overlap23, overlap123])]});
+	},
+
+	/* Prepare options for a Google meter.
+	   @param  text      (string) the text to show on the arrow (optional)
+	   @param  value     (number) the position of the arrow
+	   @param  maxValue  (number) the maximum value for the meter (optional, default 100)
+	   @param  colours   (string[]) the colours to use for the band (optional)
+	   @param  options   (object) additional settings (optional)
+	   @return  (object) the configured options object */
+	meter: function(text, value, maxValue, colours, options) {
+		if (typeof text != 'string') {
+			options = colours;
+			colours = maxValue;
+			maxValue = value;
+			value = text;
+			text = '';
+		}
+		if (typeof maxValue != 'number') {
+			options = colours;
+			colours = maxValue;
+			maxValue = null;
+		}
+		if (!isArray(colours)) {
+			options = colours;
+			colours = null;
+		}
+		if (colours) {
+			var cs = '';
+			$.each(colours, function(i, v) {
+				cs += ',' + $.gchart.color(v);
+			});
+			colours = cs.substr(1);
+		}
+		return $.extend({}, options || {}, {type: 'meter', maxValue: maxValue || 100,
+			dataLabels: [text || ''], series: [$.gchart.series([value])]},
+			(colours ? {extension: {chco: colours}} : {}));
+	},
+
+	/* Prepare options for a map chart.
+	   @param  mapArea        (string) the region of the world to show (optional)
+	   @param  values         (object) the countries/states to plot -
+	                          attributes are country/state codes and values
+	   @param  defaultColour  (string) the colour for regions without values (optional)
+	   @param  startColour    (string) the starting colour for rendering values (optional)
+	   @param  endColour      (string) the ending colour for rendering values (optional)
+	   @param  options        (object) additional settings (optional)
+	   @return  (object) the configured options object */
+	map: function(mapArea, values, defaultColour, startColour, endColour, options) {
+		if (typeof mapArea == 'object') { // Optional mapArea
+			options = endColour;
+			endColour = startColour;
+			startColour = defaultColour;
+			defaultColour = values;
+			values = mapArea;
+			mapArea = 'world';
+		}
+		if (typeof defaultColour == 'object') {
+			options = defaultColour;
+			defaultColour = null;
+		}
+		else if (typeof startColour == 'object') {
+			options = startColour;
+			startColour = null;
+		}
+		else if (typeof endColour == 'object') {
+			options = endColour;
+			endColour = null;
+		}
+		var mapRegions = [];
+		var data = [];
+		var i = 0;
+		for (var name in values) {
+			mapRegions[i] = name;
+			data[i] = values[name];
+			i++;
+		}
+		return $.extend({}, options || {}, {type: 'map',
+			mapArea: mapArea, mapRegions: mapRegions,
+			mapDefaultColor: defaultColour || $.gchart._defaults.mapDefaultColor,
+			mapColors: [startColour || $.gchart._defaults.mapColors[0],
+			endColour || $.gchart._defaults.mapColors[1]],
+			series: [$.gchart.series('', data)]});
+	},
+
+	/* Prepare options for generating a QR Code.
+	   @param  text      (object) the QR code settings or
+	                     (string) the text to encode
+	   @param  encoding  (string) the encoding scheme (optional)
+	   @param  ecLevel   (string) the error correction level: l, m, q, h (optional)
+	   @param  margin    (number) the margin around the code (optional)
+	   @return  (object) the configured options object */
+	qrCode: function(text, encoding, ecLevel, margin) {
+		var options = {};
+		if (typeof text == 'object') {
+			options = text;
+		}
+		else { // Individual fields
+			options = {dataLabels: [text], encoding: encoding,
+				qrECLevel: ecLevel, qrMargin: margin};
+		}
+		options.type = 'qrCode';
+		if (options.text) {
+			options.dataLabels = [options.text];
+			options.text = null;
+		}
+		return options;
+	},
+
+	/* Generate a Google chart color.
+	   @param  r  (string) colour name or
+	              (number) red value (0-255)
+	   @param  g  (number) green value (0-255) or
+	              (number) alpha value (0-255, optional) if r is name
+	   @param  b  (number) blue value (0-255)
+	   @param  a  (number) alpha value (0-255, optional)
+	   @return  (string) the translated colour */
+	color: function(r, g, b, a) {
+		var checkRange = function(value) {
+			if (typeof value == 'number' && (value < 0 || value > 255)) {
+				throw 'Value out of range (0-255) ' + value;
+			}
+		};
+		var twoDigits = function(value) {
+			return (value.length == 1 ? '0' : '') + value;
+		};
+		if (typeof r == 'string') {
+			checkRange(g);
+			return (COLOURS[r] || r) + (g ? twoDigits(g.toString(16)) : '');
+		}
+		checkRange(r);
+		checkRange(g);
+		checkRange(b);
+		checkRange(a);
+		return twoDigits(r.toString(16)) + twoDigits(g.toString(16)) +
+			twoDigits(b.toString(16)) + (a ? twoDigits(a.toString(16)) : '');
+	},
+
+	/* Create a simple linear gradient definition for a background.
+	   @param  angle    (string or number) the angle of the gradient from positive x-axis
+	   @param  colour1  (string[]) an array of colours or
+	                    (string) the starting colour
+	   @param  colour2  (string, optional) the ending colour
+	   @return  (object) the gradient definition */
+	gradient: function(angle, colour1, colour2) {
+		var colourPoints = [];
+		if (isArray(colour1)) {
+			var step = 1 / (colour1.length - 1);
+			for (var i = 0; i < colour1.length; i++) {
+				colourPoints.push([colour1[i], Math.round(i * step * 100) / 100]);
+			}
+		}
+		else {
+			colourPoints = [[colour1, 0], [colour2, 1]];
+		}
+		return {angle: angle, colorPoints: colourPoints};
+	},
+
+	/* Create a colour striping definition for a background.
+	   @param  angle    (string or number) the angle of the stripes from positive x-axis
+	   @param  colours  (string[]) the colours to stripe
+	   @return  (object) the stripe definition */
+	stripe: function(angle, colours) {
+		var colourPoints = [];
+		var width = Math.round(100 / colours.length) / 100;
+		for (var i = 0; i < colours.length; i++) {
+			colourPoints.push([colours[i], width]);
+		}
+		return {angle: angle, striped: true, colorPoints: colourPoints};
+	},
+
+	/* Create a range definition.
+	   @param  vertical  (boolean, optional) true if vertical, false if horizontal
+	   @param  colour    (string) the marker's colour
+	   @param  start     (number) the starting point for the range (0.0 to 1.0)
+	   @param  end       (number, optional) the ending point for the range (0.0 to 1.0)
+	   @return  (object) the range definition */
+	range: function(vertical, colour, start, end) {
+		if (typeof vertical == 'string') { // Optional vertical
+			end = start;
+			start = colour;
+			colour = vertical;
+			vertical = false;
+		}
+		return {vertical: vertical, color: colour, start: start, end: end};
+	},
+
+	/* Create a marker definition.
+	   @param  shape       (string) the marker shape
+	   @param  colour      (string) the marker's colour
+	   @param  series      (number) the series to which the marker applies
+	   @param  item        (number or string or number[2 or 3], optional)
+	                       the item in the series to which it applies or 'all' or
+	                       'everyn' or 'everyn[s:e]' or [start, end, every]
+	   @param  size        (number, optional) the size (pixels) of the marker
+	   @param  priority    (string or number, optional) the rendering priority
+	   @param  text        (string, optional) the display text for a text type marker
+	   @param  positioned  (boolean, optional) true to absolutely position the marker
+	   @return  (object) the marker definition */
+	marker: function(shape, colour, series, item, size, priority, text, positioned) {
+		if (typeof size == 'string') { // Optional size/priority
+			positioned = priority;
+			text = size;
+			priority = null;
+			size = null;
+		}
+		return {shape: shape, color: colour, series: series,
+			item: (item || item == 0 ? item : -1), size: size || 10,
+			priority: (priority != null ? priority : 0), text: text,
+			positioned: positioned};
+	},
+
+	/* Create a number format for a marker.
+	   @param  type        (string) 'f' for floating point, 'p' for percentage,
+	                       'e' for scientific notation, 'c<CUR>' for currency (as specified by CUR)
+	   @param  prefix      (string, optional) text appearing before the number
+	   @param  suffix      (string, optional - can only be present if prefix is present)
+	                       text appearing after the number
+	   @param  precision   (number, optional) the number of decimal places
+	   @param  showX       (boolean, optional) true to show the x-value, false for the y-value
+	   @param  zeroes      (boolean, optional - can only be present if showX is present)
+	                       true to display trailing zeroes
+	   @param  separators  (boolean, optional - can only be present if showX and zeroes are present)
+	                       true to display group separators
+	   @return  (string) the format definition */
+	numberFormat: function(type, prefix, suffix, precision, showX, zeroes, separators) {
+		if (typeof prefix == 'number') {
+			separators = showX;
+			zeroes = precision;
+			showX = suffix;
+			precision = prefix;
+			suffix = '';
+			prefix = '';
+		}
+		if (typeof prefix == 'boolean') {
+			separators = precision;
+			zeroes = suffix;
+			showX = prefix;
+			precision = 0;
+			suffix = '';
+			prefix = '';
+		}
+		if (typeof suffix == 'number') {
+			separators = zeroes;
+			zeroes = showX;
+			showX = precision;
+			precision = suffix;
+			suffix = '';
+		}
+		if (typeof suffix == 'boolean') {
+			separators = showX;
+			zeroes = precision;
+			showX = suffix;
+			precision = 0;
+			suffix = '';
+		}
+		if (typeof precision == 'boolean') {
+			separators = zeroes;
+			zeroes = showX;
+			showX = precision;
+			precision = 0;
+		}
+		return (prefix || '') + '*' + type + (precision || '') + (zeroes ? 'z' : '') +
+			(separators ? 's' : '') + (showX ? 'x' : '') + '*' + (suffix || '');
+	},
+
+	/* Create an axis definition.
+	   @param  axis           (string) the axis position: top, bottom, left, right
+	   @param  labels         (string[]) the labels for this axis
+	   @param  positions      (number[], optional) the positions of the labels
+	   @param  rangeStart     (number, optional with next two) start of range
+	   @param  rangeEnd       (number, optional with above) end of range
+	   @param  rangeInterval  (number, optional with above) interval between values in the range
+	   @param  colour         (string, optional) the axis colour
+	   @param  alignment      (string, optional) the labels' alignment
+	   @param  size           (number, optional) the labels' size
+	   @return  (object) the axis definition */
+	axis: function(axis, labels, positions, rangeStart,
+			rangeEnd, rangeInterval, colour, alignment, size) {
+		return new GChartAxis(axis, labels, positions, rangeStart,
+			rangeEnd, rangeInterval, colour, alignment, size);
+	},
+
+	/* Attach the Google chart functionality to a div.
+	   @param  target   (element) the containing division
+	   @param  options  (object) the settings for this Google chart instance (optional) */
+	_attachGChart: function(target, options) {
+		target = $(target);
+		if (target.is('.' + this.markerClassName)) {
+			return;
+		}
+		target.addClass(this.markerClassName);
+		options = options || {};
+		var width = options.width || parseInt(target.css('width'), 10);
+		var height = options.height || parseInt(target.css('height'), 10);
+		var allOptions = $.extend({}, this._defaults, options,
+			{width: width, height: height});
+		$.data(target[0], PROP_NAME, allOptions);
+		this._updateChart(target[0], allOptions);
+	},
+
+	/* Reconfigure the settings for a Google charting div.
+	   @param  target   (element) the containing division
+	   @param  options  (object) the new settings for this Google chart instance */
+	_changeGChart: function(target, options) {
+		var curOptions = $.data(target, PROP_NAME);
+		extendRemove(curOptions || {}, options || {});
+		$.data(target, PROP_NAME, curOptions);
+		this._updateChart(target, curOptions);
+	},
+
+	/* Remove the Google charting functionality from a div.
+	   @param  target  (element) the containing division */
+	_destroyGChart: function(target) {
+		target = $(target);
+		if (!target.is('.' + this.markerClassName)) {
+			return;
+		}
+		target.removeClass(this.markerClassName).empty();
+		$.removeData(target[0], PROP_NAME);
+	},
+
+	/* Generate the Google charting request with the new settings.
+	   @param  options  (object) the new settings for this Google chart instance
+	   @return  (string) the Google chart URL */
+	_generateChart: function(options) {
+		var type = CHART_TYPES[options.type] || 'p3';
+		var encoding = this['_' + options.encoding + 'Encoding'] ||
+			this['_textEncoding'];
+		var labels = '';
+		for (var i = 0; i < options.dataLabels.length; i++) {
+			labels += '|' + encodeURIComponent(options.dataLabels[i] || '');
+		}
+		labels = (labels.length == options.dataLabels.length ? '' : labels);
+		var legends = '';
+		var colours = '';
+		var hasColour = false;
+		var lines = '';
+		for (var i = 0; i < options.series.length; i++) {
+			legends += '|' + encodeURIComponent(options.series[i].label || '');
+			var clrs = '';
+			if (type != 'lxy' || i % 2 == 0) {
+				var sep = ',';
+				$.each((isArray(options.series[i].color) ? options.series[i].color :
+						[options.series[i].color]), function(i, v) {
+					var colour = $.gchart.color(v || '');
+					if (colour) {
+						hasColour = true;
+					}
+					clrs += sep + (colour || '000000');
+					sep = '|';
+				});
+			}
+			colours += (hasColour ? clrs : '');
+			if (type.substr(0, 1) == 'l' && options.series[i].lineThickness &&
+					isArray(options.series[i].lineSegments)) {
+				lines += '|' + options.series[i].lineThickness + ',' +
+					options.series[i].lineSegments.join(',');
+			}
+		}
+		var include = function(name, value) {
+			return (value ? name + value : '');
+		};
+		var addSize = function() {
+			options.width = Math.max(10, Math.min(options.width, 1000));
+			options.height = Math.max(10, Math.min(options.height, 1000));
+			if (type != 't' && options.width * options.height > 300000) {
+				options.height = Math.floor(300000 / options.width);
+			}
+			return (type != 't' ? '&chs=' + options.width + 'x' + options.height :
+				'&chs=' + Math.min(440, options.width) + 'x' + Math.min(220, options.height));
+		};
+		var addMargins = function() {
+			var margins = options.margins;
+			margins = (margins == null ? null :
+				(typeof margins == 'number' ? [margins, margins, margins, margins] :
+				(!isArray(margins) ? null :
+				(margins.length == 4 ? margins :
+				(margins.length == 2 ? [margins[0], margins[0], margins[1], margins[1]] : null)))));
+			return (!margins ? '' : '&chma=' + margins.join(',') +
+				(!options.legendSize || options.legendSize.length != 2 ? '' :
+				'|' + options.legendSize.join(',')));
+		};
+		var qrOptions = function() {
+			return include('&choe=', options.encoding) +
+				(options.qrECLevel || options.qrMargin ?
+				'&chld=' + (options.qrECLevel ? options.qrECLevel.charAt(0) : 'l') +
+				(options.qrMargin != null ? '|' + options.qrMargin : '') : '') +
+				(labels ? '&chl=' + labels.substr(1) : '');
+		};
+		var mapOptions = function() {
+			return '&chtm=' + (options.mapArea || 'world') +
+				'&chd=' + encoding.apply($.gchart, [options]) +
+				(options.mapRegions && options.mapRegions.length ?
+				'&chld=' + options.mapRegions.join('') : '') +
+				'&chco=' + $.gchart.color(options.mapDefaultColor) + ',' +
+				$.gchart.color(options.mapColors[0] || 'aaffaa') + ',' +
+				$.gchart.color(options.mapColors[1] || 'green');
+		};
+		var pieOptions = function() {
+			return (options.pieOrientation ?
+				'&chp=' + (options.pieOrientation / 180 * Math.PI) : '') +
+				standardOptions();
+		};
+		var standardOptions = function() {
+			return '&chd=' + encoding.apply($.gchart, [options]) +
+				(labels ? '&chl=' + labels.substr(1) : '');
+		};
+		var addBarSizings = function() {
+			return (type.substr(0, 1) != 'b' ? '' : (options.barWidth == null ? '' :
+				'&chbh=' + options.barWidth +
+				(options.barSpacing == null ? '' : ',' + (options.barWidth == $.gchart.barWidthRelative ?
+				Math.min(Math.max(options.barSpacing, 0.0), 1.0) : options.barSpacing) +
+				(options.barGroupSpacing == null ? '' : ',' + (options.barWidth == $.gchart.barWidthRelative ?
+				Math.min(Math.max(options.barGroupSpacing, 0.0), 1.0) : options.barGroupSpacing)))) +
+				(options.barZeroPoint == null ? '' : '&chp=' + options.barZeroPoint));
+		};
+		var addLineStyles = function() {
+			return (type.charAt(0) == 'l' && lines ? '&chls=' + lines.substr(1) : '');
+		};
+		var addColours = function() {
+			return (colours.length > options.series.length ? '&chco=' + colours.substr(1) : '');
+		};
+		var addTitle = function() {
+			return include('&chtt=', encodeURIComponent(options.title)) +
+			(options.titleColor || options.titleSize ?
+			'&chts=' + ($.gchart.color(options.titleColor) || '000000') + ',' +
+			(options.titleSize || 20) : '');
+		};
+		var addBackground = function(area, background) {
+			if (background == null) {
+				return '';
+			}
+			if (typeof background == 'string') {
+				return area + ',s,' + $.gchart.color(background);
+			}
+			var bg = area + ',l' + (background.striped ? 's' : 'g') + ',' +
+				(GRADIENTS[background.angle] != null ?
+				GRADIENTS[background.angle] : background.angle);
+			for (var i = 0; i < background.colorPoints.length; i++) {
+				bg += ',' + $.gchart.color(background.colorPoints[i][0]) +
+					',' + background.colorPoints[i][1];
+			}
+			return bg;
+		};
+		var addBackgrounds = function() {
+			var backgrounds = addBackground('|bg', options.backgroundColor) +
+				addBackground('|c', options.chartColor);
+			return (backgrounds ? '&chf=' + backgrounds.substr(1) : '');
+		};
+		var addGrids = function() {
+			return (options.gridSize.length == 0 ? '' :
+				'&chg=' + options.gridSize[0] + ',' + options.gridSize[1] +
+				(options.gridLine.length == 0 ? '' :
+				',' + options.gridLine[0] + ',' + options.gridLine[1] +
+				(options.gridOffsets.length == 0 ? '' :
+				',' + options.gridOffsets[0] + ',' + options.gridOffsets[1])));
+		};
+		var addLegends = function() {
+			return (!options.legend || legends.length <= options.series.length ? '' :
+				'&chdl=' + legends.substr(1) + include('&chdlp=',
+				options.legend.charAt(0) + (options.legend.indexOf('V') > -1 ? 'v' : '')));
+		};
+		var addExtensions = function() {
+			var params = '';
+			for (var name in options.extension) {
+				params += '&' + name + '=' + encodeURIComponent(options.extension[name]);
+			}
+			return params;
+		};
+		return 'http://chart.apis.google.com/chart?cht=' + type +
+			addSize() + addMargins() +
+			(type == 'qr' ? qrOptions() : (type == 't' ? mapOptions() :
+			(type.charAt(0) == 'p' ? pieOptions() : standardOptions()))) +
+			addBarSizings() + addLineStyles() + addColours() + addTitle() +
+			this._addAxes(options) + addBackgrounds() + addGrids() +
+			this._addMarkers(options) + addLegends() + addExtensions();
+	},
+
+	/* Generate axes parameters.
+	   @param  options  (object) the current instance settings
+	   @return  (string) the axes parameters */
+	_addAxes: function(options) {
+		var axes = '';
+		var axesLabels = '';
+		var axesPositions = '';
+		var axesRanges = '';
+		var axesStyles = '';
+		var axesTicks = '';
+		for (var i = 0; i < options.axes.length; i++) {
+			var axisDef = (typeof options.axes[i] == 'string' ?
+				new GChartAxis(options.axes[i]) : options.axes[i]);
+			var axis = axisDef.axis().charAt(0);
+			axes += ',' + (axis == 'b' ? 'x' : (axis == 'l' ? 'y' : axis));
+			if (axisDef.labels()) {
+				var labels = '';
+				for (var j = 0; j < axisDef.labels().length; j++) {
+					labels += '|' + encodeURIComponent(axisDef.labels()[j] || '');
+				}
+				axesLabels += (labels ? '|' + i + ':' + labels : '');
+			}
+			if (axisDef.positions()) {
+				var positions = '';
+				for (var j = 0; j < axisDef.positions().length; j++) {
+					positions += ',' + axisDef.positions()[j];
+				}
+				axesPositions += (positions ? '|' + i + positions : '');
+			}
+			if (axisDef.range()) {
+				var range = axisDef.range();
+				axesRanges += '|' + i + ',' + range[0] + ',' + range[1] +
+					(range[2] ? ',' + range[2] : '');
+			}
+			if (axisDef.style() || axisDef.drawing() || axisDef.ticks()) {
+				var style = axisDef.style() || {};
+				var ticks = axisDef.ticks() || {};
+				axesStyles += '|' + i + ',' +
+					$.gchart.color(style.color || 'gray') + ',' +
+					(style.size || 10) + ',' + 
+					(ALIGNMENTS[style.alignment] || style.alignment || 0) +
+					(!axisDef.drawing() && !ticks.color ? '' : ',' +
+					(DRAWING[axisDef.drawing()] || axisDef.drawing() || 'lt') +
+					(ticks.color ? ',' + $.gchart.color(ticks.color) : ''));
+			}
+			if (axisDef.ticks() && axisDef.ticks().length) {
+				axesTicks += '|' + i + ',' + axisDef.ticks().length;
+			}
+		}
+		return (!axes ? '' : '&chxt=' + axes.substr(1) +
+			(!axesLabels ? '' : '&chxl=' + axesLabels.substr(1)) +
+			(!axesPositions ? '' : '&chxp=' + axesPositions.substr(1)) +
+			(!axesRanges ? '' : '&chxr=' + axesRanges.substr(1)) +
+			(!axesStyles ? '' : '&chxs=' + axesStyles.substr(1)) +
+			(!axesTicks ? '' : '&chxtc=' + axesTicks.substr(1)));
+	},
+
+	/* Generate markers parameters.
+	   @param  options  (object) the current instance settings
+	   @return  (string) the markers parameters */
+	_addMarkers: function(options) {
+		var markers = '';
+		var decodeItem = function(item, positioned) {
+			if (item == 'all') {
+				return -1;
+			}
+			if (typeof item == 'string') {
+				var matches = /^every(\d+)(?:\[(\d+):(\d+)\])?$/.exec(item);
+				if (matches) {
+					var every = parseInt(matches[1], 10);
+					return (matches[2] && matches[3] ?
+						(positioned ? Math.max(0.0, Math.min(1.0, matches[2])) : matches[2]) + ':' +
+						(positioned ? Math.max(0.0, Math.min(1.0, matches[3])) : matches[3]) + ':' +
+						every : -every);
+				}
+			}
+			if (isArray(item)) {
+				$.map(item, function(v, i) {
+					return (positioned ? Math.max(0.0, Math.min(1.0, v)) : v);
+				});
+				return item.join(':');
+			}
+			return item;
+		};
+		for (var i = 0; i < options.markers.length; i++) {
+			var marker = options.markers[i];
+			var shape = SHAPES[marker.shape] || marker.shape;
+			markers += '|' + (marker.positioned ? '@' : '') + shape +
+				('fNt'.indexOf(shape) > -1 ? marker.text || '' : '') + ',' +
+				$.gchart.color(marker.color) + ',' +
+				marker.series + ',' + decodeItem(marker.item, marker.positioned) +
+				',' + marker.size + ',' + (PRIORITIES[marker.priority] != null ?
+				PRIORITIES[marker.priority] : marker.priority);
+		}
+		for (var i = 0; i < options.ranges.length; i++) {
+			markers += '|' + (options.ranges[i].vertical ? 'R' : 'r') + ',' +
+				$.gchart.color(options.ranges[i].color) + ',0,' +
+				options.ranges[i].start + ',' +
+				(options.ranges[i].end || options.ranges[i].start + 0.005);
+		}
+		for (var i = 0; i < options.series.length; i++) {
+			markers += (!options.series[i].fillColor ? '' :
+				'|b,' + $.gchart.color(options.series[i].fillColor) +
+				',' + i + ',' + (i + 1) + ',0');
+		}
+		return (markers ? '&chm=' + markers.substr(1) : '');
+	},
+
+	/* Update the Google charting div with the new settings.
+	   @param  target   (element) the containing division
+	   @param  options  (object) the new settings for this Google chart instance */
+	_updateChart: function(target, options) {
+		var img = $(new Image()); // Prepare to load chart image in background
+		img.load(function() { // Once loaded...
+			$(target).find('img').remove().end().append(this);
+			if (options.onLoad) {
+				options.onLoad.apply(target, []);
+			}
+		});
+		options._src = this._generateChart(options);
+		$(img).attr('src', options._src);
+	},
+
+	/* Encode all series with text encoding.
+	   @param  options  (object) the settings for this Google chart instance
+	   @return  (string) the encoded series data */
+	_textEncoding: function(options) {
+		var minValue = (options.minValue == $.gchart.calculate ?
+			this._calculateMinValue(options.series) : options.minValue);
+		var maxValue = (options.maxValue == $.gchart.calculate ?
+			this._calculateMaxValue(options.series) : options.maxValue);
+		var data = '';
+		for (var i = 0; i < options.series.length; i++) {
+			data += '|' + this._textEncode(options.series[i], minValue, maxValue);
+		}
+		return 't' + (options.visibleSeries || '') + ':' + data.substr(1);
+	},
+
+	/* Encode values in text format: numeric 0.0 to 100.0, comma separated, -1 for null
+	   @param  series    (object) details about the data values to encode
+	   @param  minValue  (number) the minimum possible data value
+	   @param  maxValue  (number) the maximum possible data value
+	   @return  (string) the encoded data values */
+	_textEncode: function(series, minValue, maxValue) {
+		minValue = (series.minValue != null ? series.minValue : minValue);
+		maxValue = (series.maxValue != null ? series.maxValue : maxValue);
+		var factor = 100 / (maxValue - minValue);
+		var data = '';
+		for (var i = 0; i < series.data.length; i++) {
+			data += ',' + (series.data[i] == null || isNaN(series.data[i]) ? '-1' :
+				Math.round(factor * (series.data[i] - minValue) * 100) / 100);
+		}
+		return data.substr(1);
+	},
+
+	/* Encode all series with scaled text encoding.
+	   @param  options  (object) the settings for this Google chart instance
+	   @return  (string) the encoded series data */
+	_scaledEncoding: function(options) {
+		var minValue = (options.minValue == $.gchart.calculate ?
+			this._calculateMinValue(options.series) : options.minValue);
+		var maxValue = (options.maxValue == $.gchart.calculate ?
+			this._calculateMaxValue(options.series) : options.maxValue);
+		var data = '';
+		var minMax = '';
+		for (var i = 0; i < options.series.length; i++) {
+			data += '|' + this._scaledEncode(options.series[i], minValue);
+			minMax += ',' + (options.series[i].minValue != null ?
+				options.series[i].minValue : minValue) +
+				',' + (options.series[i].maxValue != null ?
+				options.series[i].maxValue : maxValue);
+		}
+		return 't' + (options.visibleSeries || '') + ':' + data.substr(1) +
+			'&chds=' + minMax.substr(1);
+	},
+
+	/* Encode values in text format: numeric min to max, comma separated, min - 1 for null
+	   @param  series    (object) details about the data values to encode
+	   @param  minValue  (number) the minimum possible data value
+	   @return  (string) the encoded data values */
+	_scaledEncode: function(series, minValue) {
+		minValue = (series.minValue != null ? series.minValue : minValue);
+		var data = '';
+		for (var i = 0; i < series.data.length; i++) {
+			data += ',' + (series.data[i] == null || isNaN(series.data[i]) ?
+				(minValue - 1) : series.data[i]);
+		}
+		return data.substr(1);
+	},
+
+	/* Encode all series with simple encoding.
+	   @param  options  (object) the settings for this Google chart instance
+	   @return  (string) the encoded series data */
+	_simpleEncoding: function(options) {
+		var minValue = (options.minValue == $.gchart.calculate ?
+			this._calculateMinValue(options.series) : options.minValue);
+		var maxValue = (options.maxValue == $.gchart.calculate ?
+			this._calculateMaxValue(options.series) : options.maxValue);
+		var data = '';
+		for (var i = 0; i < options.series.length; i++) {
+			data += ',' + this._simpleEncode(options.series[i], minValue, maxValue);
+		}
+		return 's' + (options.visibleSeries || '') + ':' + data.substr(1);
+	},
+
+	/* Encode values in simple format: single character,
+	   banded-62 as A-Za-z0-9, _ for null.
+	   @param  series    (object) details about the data values to encode
+	   @param  minValue  (number) the minimum possible data value
+	   @param  maxValue  (number) the maximum possible data value
+	   @return  (string) the encoded data values */
+	_simpleEncode: function(series, minValue, maxValue) {
+		minValue = (series.minValue != null ? series.minValue : minValue);
+		maxValue = (series.maxValue != null ? series.maxValue : maxValue);
+		var factor = 61 / (maxValue - minValue);
+		var data = '';
+		for (var i = 0; i < series.data.length; i++) {
+			data += (series.data[i] == null || isNaN(series.data[i]) ? '_' :
+				SIMPLE_ENCODING.charAt(Math.round(factor * (series.data[i] - minValue))));
+		}
+		return data;
+	},
+
+	/* Encode all series with extended encoding.
+	   @param  options  (object) the settings for this Google chart instance
+	   @return  (string) the encoded series data */
+	_extendedEncoding: function(options) {
+		var minValue = (options.minValue == $.gchart.calculate ?
+			this._calculateMinValue(options.series) : options.minValue);
+		var maxValue = (options.maxValue == $.gchart.calculate ?
+			this._calculateMaxValue(options.series) : options.maxValue);
+		var data = '';
+		for (var i = 0; i < options.series.length; i++) {
+			data += ',' + this._extendedEncode(options.series[i], minValue, maxValue);
+		}
+		return 'e' + (options.visibleSeries || '') + ':' + data.substr(1);
+	},
+
+	/* Encode values in extended format: double character,
+	   banded-4096 as A-Za-z0-9-., __ for null.
+	   @param  series    (object) details about the data values to encode
+	   @param  minValue  (number) the minimum possible data value
+	   @param  maxValue  (number) the maximum possible data value
+	   @return  (string) the encoded data values */
+	_extendedEncode: function(series, minValue, maxValue) {
+		minValue = (series.minValue != null ? series.minValue : minValue);
+		maxValue = (series.maxValue != null ? series.maxValue : maxValue);