Description: Replace scripts with a beautified version
 This patch replaces the following files:
 * chrome/zotero.jar!/content/zotero/tinymce/themes/advanced/editor_template.js
 * chrome/zotero.jar!/content/zotero/tinymce/tiny_mce_popup.js
 * chrome/zotero.jar!/skin/default/zotero/timeline/bundle.js
 * chrome/zotero.jar!/content/zotero/xpcom/connector/typeSchemaData.js
 with beautified versions generated using libnode-uglify
 (uglifyjs -b --no-seqs -nm)
Author: Theodore Lytras <thlytras@gmail.com>
Last-Update: 2012-06-06
--- a/chrome/zotero.jar!/content/zotero/tinymce/themes/advanced/editor_template.js
+++ b/chrome/zotero.jar!/content/zotero/tinymce/themes/advanced/editor_template.js
@@ -1 +1,904 @@
-(function(e){var d=e.DOM,b=e.dom.Event,h=e.extend,f=e.each,a=e.util.Cookie,g,c=e.explode;e.ThemeManager.requireLangPack("advanced");e.create("tinymce.themes.AdvancedTheme",{sizes:[8,10,12,14,18,24,36],controls:{bold:["bold_desc","Bold"],italic:["italic_desc","Italic"],underline:["underline_desc","Underline"],strikethrough:["striketrough_desc","Strikethrough"],justifyleft:["justifyleft_desc","JustifyLeft"],justifycenter:["justifycenter_desc","JustifyCenter"],justifyright:["justifyright_desc","JustifyRight"],justifyfull:["justifyfull_desc","JustifyFull"],bullist:["bullist_desc","InsertUnorderedList"],numlist:["numlist_desc","InsertOrderedList"],outdent:["outdent_desc","Outdent"],indent:["indent_desc","Indent"],cut:["cut_desc","Cut"],copy:["copy_desc","Copy"],paste:["paste_desc","Paste"],undo:["undo_desc","Undo"],redo:["redo_desc","Redo"],link:["link_desc","mceLink"],unlink:["unlink_desc","unlink"],image:["image_desc","mceImage"],cleanup:["cleanup_desc","mceCleanup"],help:["help_desc","mceHelp"],code:["code_desc","mceCodeEditor"],hr:["hr_desc","InsertHorizontalRule"],removeformat:["removeformat_desc","RemoveFormat"],sub:["sub_desc","subscript"],sup:["sup_desc","superscript"],forecolor:["forecolor_desc","ForeColor"],forecolorpicker:["forecolor_desc","mceForeColor"],backcolor:["backcolor_desc","HiliteColor"],backcolorpicker:["backcolor_desc","mceBackColor"],charmap:["charmap_desc","mceCharMap"],visualaid:["visualaid_desc","mceToggleVisualAid"],anchor:["anchor_desc","mceInsertAnchor"],newdocument:["newdocument_desc","mceNewDocument"],blockquote:["blockquote_desc","mceBlockQuote"]},stateControls:["bold","italic","underline","strikethrough","bullist","numlist","justifyleft","justifycenter","justifyright","justifyfull","sub","sup","blockquote"],init:function(j,k){var l=this,m,i,n;l.editor=j;l.url=k;l.onResolveName=new e.util.Dispatcher(this);l.settings=m=h({theme_advanced_path:true,theme_advanced_toolbar_location:"bottom",theme_advanced_buttons1:"bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect",theme_advanced_buttons2:"bullist,numlist,|,outdent,indent,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code",theme_advanced_buttons3:"hr,removeformat,visualaid,|,sub,sup,|,charmap",theme_advanced_blockformats:"p,address,pre,h1,h2,h3,h4,h5,h6",theme_advanced_toolbar_align:"center",theme_advanced_fonts:"Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats",theme_advanced_more_colors:1,theme_advanced_row_height:23,theme_advanced_resize_horizontal:1,theme_advanced_resizing_use_cookie:1,theme_advanced_font_sizes:"1,2,3,4,5,6,7",readonly:j.settings.readonly},j.settings);if(!m.font_size_style_values){m.font_size_style_values="8pt,10pt,12pt,14pt,18pt,24pt,36pt"}if(e.is(m.theme_advanced_font_sizes,"string")){m.font_size_style_values=e.explode(m.font_size_style_values);m.font_size_classes=e.explode(m.font_size_classes||"");n={};j.settings.theme_advanced_font_sizes=m.theme_advanced_font_sizes;f(j.getParam("theme_advanced_font_sizes","","hash"),function(q,p){var o;if(p==q&&q>=1&&q<=7){p=q+" ("+l.sizes[q-1]+"pt)";o=m.font_size_classes[q-1];q=m.font_size_style_values[q-1]||(l.sizes[q-1]+"pt")}if(/^\s*\./.test(q)){o=q.replace(/\./g,"")}n[p]=o?{"class":o}:{fontSize:q}});m.theme_advanced_font_sizes=n}if((i=m.theme_advanced_path_location)&&i!="none"){m.theme_advanced_statusbar_location=m.theme_advanced_path_location}if(m.theme_advanced_statusbar_location=="none"){m.theme_advanced_statusbar_location=0}j.onInit.add(function(){if(!j.settings.readonly){j.onNodeChange.add(l._nodeChanged,l)}if(j.settings.content_css!==false){j.dom.loadCSS(j.baseURI.toAbsolute(k+"/skins/"+j.settings.skin+"/content.css"))}});j.onSetProgressState.add(function(q,o,r){var s,t=q.id,p;if(o){l.progressTimer=setTimeout(function(){s=q.getContainer();s=s.insertBefore(d.create("DIV",{style:"position:relative"}),s.firstChild);p=d.get(q.id+"_tbl");d.add(s,"div",{id:t+"_blocker","class":"mceBlocker",style:{width:p.clientWidth+2,height:p.clientHeight+2}});d.add(s,"div",{id:t+"_progress","class":"mceProgress",style:{left:p.clientWidth/2,top:p.clientHeight/2}})},r||0)}else{d.remove(t+"_blocker");d.remove(t+"_progress");clearTimeout(l.progressTimer)}});d.loadCSS(m.editor_css?j.documentBaseURI.toAbsolute(m.editor_css):k+"/skins/"+j.settings.skin+"/ui.css");if(m.skin_variant){d.loadCSS(k+"/skins/"+j.settings.skin+"/ui_"+m.skin_variant+".css")}},createControl:function(l,i){var j,k;if(k=i.createControl(l)){return k}switch(l){case"styleselect":return this._createStyleSelect();case"formatselect":return this._createBlockFormats();case"fontselect":return this._createFontSelect();case"fontsizeselect":return this._createFontSizeSelect();case"forecolor":return this._createForeColorMenu();case"backcolor":return this._createBackColorMenu()}if((j=this.controls[l])){return i.createButton(l,{title:"advanced."+j[0],cmd:j[1],ui:j[2],value:j[3]})}},execCommand:function(k,j,l){var i=this["_"+k];if(i){i.call(this,j,l);return true}return false},_importClasses:function(k){var i=this.editor,j=i.controlManager.get("styleselect");if(j.getLength()==0){f(i.dom.getClasses(),function(n,l){var m="style_"+l;i.formatter.register(m,{inline:"span",attributes:{"class":n["class"]},selector:"*"});j.add(n["class"],m)})}},_createStyleSelect:function(m){var k=this,i=k.editor,j=i.controlManager,l;l=j.createListBox("styleselect",{title:"advanced.style_select",onselect:function(o){var p,n=[];f(l.items,function(q){n.push(q.value)});i.focus();i.undoManager.add();p=i.formatter.matchAll(n);if(!o||p[0]==o){i.formatter.remove(p[0])}else{i.formatter.apply(o)}i.undoManager.add();i.nodeChanged();return false}});i.onInit.add(function(){var o=0,n=i.getParam("style_formats");if(n){f(n,function(p){var q,r=0;f(p,function(){r++});if(r>1){q=p.name=p.name||"style_"+(o++);i.formatter.register(q,p);l.add(p.title,q)}else{l.add(p.title)}})}else{f(i.getParam("theme_advanced_styles","","hash"),function(r,q){var p;if(r){p="style_"+(o++);i.formatter.register(p,{inline:"span",classes:r,selector:"*"});l.add(k.editor.translate(q),p)}})}});if(l.getLength()==0){l.onPostRender.add(function(o,p){if(!l.NativeListBox){b.add(p.id+"_text","focus",k._importClasses,k);b.add(p.id+"_text","mousedown",k._importClasses,k);b.add(p.id+"_open","focus",k._importClasses,k);b.add(p.id+"_open","mousedown",k._importClasses,k)}else{b.add(p.id,"focus",k._importClasses,k)}})}return l},_createFontSelect:function(){var k,j=this,i=j.editor;k=i.controlManager.createListBox("fontselect",{title:"advanced.fontdefault",onselect:function(l){var m=k.items[k.selectedIndex];if(!l&&m){i.execCommand("FontName",false,m.value);return}i.execCommand("FontName",false,l);k.select(function(n){return l==n});return false}});if(k){f(i.getParam("theme_advanced_fonts",j.settings.theme_advanced_fonts,"hash"),function(m,l){k.add(i.translate(l),m,{style:m.indexOf("dings")==-1?"font-family:"+m:""})})}return k},_createFontSizeSelect:function(){var m=this,k=m.editor,n,l=0,j=[];n=k.controlManager.createListBox("fontsizeselect",{title:"advanced.font_size",onselect:function(i){var o=n.items[n.selectedIndex];if(!i&&o){o=o.value;if(o["class"]){k.formatter.toggle("fontsize_class",{value:o["class"]});k.undoManager.add();k.nodeChanged()}else{k.execCommand("FontSize",false,o.fontSize)}return}if(i["class"]){k.focus();k.undoManager.add();k.formatter.toggle("fontsize_class",{value:i["class"]});k.undoManager.add();k.nodeChanged()}else{k.execCommand("FontSize",false,i.fontSize)}n.select(function(p){return i==p});return false}});if(n){f(m.settings.theme_advanced_font_sizes,function(o,i){var p=o.fontSize;if(p>=1&&p<=7){p=m.sizes[parseInt(p)-1]+"pt"}n.add(i,o,{style:"font-size:"+p,"class":"mceFontSize"+(l++)+(" "+(o["class"]||""))})})}return n},_createBlockFormats:function(){var k,i={p:"advanced.paragraph",address:"advanced.address",pre:"advanced.pre",h1:"advanced.h1",h2:"advanced.h2",h3:"advanced.h3",h4:"advanced.h4",h5:"advanced.h5",h6:"advanced.h6",div:"advanced.div",blockquote:"advanced.blockquote",code:"advanced.code",dt:"advanced.dt",dd:"advanced.dd",samp:"advanced.samp"},j=this;k=j.editor.controlManager.createListBox("formatselect",{title:"advanced.block",cmd:"FormatBlock"});if(k){f(j.editor.getParam("theme_advanced_blockformats",j.settings.theme_advanced_blockformats,"hash"),function(m,l){k.add(j.editor.translate(l!=m?l:i[m]),m,{"class":"mce_formatPreview mce_"+m})})}return k},_createForeColorMenu:function(){var m,j=this,k=j.settings,l={},i;if(k.theme_advanced_more_colors){l.more_colors_func=function(){j._mceColorPicker(0,{color:m.value,func:function(n){m.setColor(n)}})}}if(i=k.theme_advanced_text_colors){l.colors=i}if(k.theme_advanced_default_foreground_color){l.default_color=k.theme_advanced_default_foreground_color}l.title="advanced.forecolor_desc";l.cmd="ForeColor";l.scope=this;m=j.editor.controlManager.createColorSplitButton("forecolor",l);return m},_createBackColorMenu:function(){var m,j=this,k=j.settings,l={},i;if(k.theme_advanced_more_colors){l.more_colors_func=function(){j._mceColorPicker(0,{color:m.value,func:function(n){m.setColor(n)}})}}if(i=k.theme_advanced_background_colors){l.colors=i}if(k.theme_advanced_default_background_color){l.default_color=k.theme_advanced_default_background_color}l.title="advanced.backcolor_desc";l.cmd="HiliteColor";l.scope=this;m=j.editor.controlManager.createColorSplitButton("backcolor",l);return m},renderUI:function(k){var m,l,q,v=this,r=v.editor,w=v.settings,u,j,i;m=j=d.create("span",{id:r.id+"_parent","class":"mceEditor "+r.settings.skin+"Skin"+(w.skin_variant?" "+r.settings.skin+"Skin"+v._ufirst(w.skin_variant):"")});if(!d.boxModel){m=d.add(m,"div",{"class":"mceOldBoxModel"})}m=u=d.add(m,"table",{id:r.id+"_tbl","class":"mceLayout",cellSpacing:0,cellPadding:0});m=q=d.add(m,"tbody");switch((w.theme_advanced_layout_manager||"").toLowerCase()){case"rowlayout":l=v._rowLayout(w,q,k);break;case"customlayout":l=r.execCallback("theme_advanced_custom_layout",w,q,k,j);break;default:l=v._simpleLayout(w,q,k,j)}m=k.targetNode;i=d.stdMode?u.getElementsByTagName("tr"):u.rows;d.addClass(i[0],"mceFirst");d.addClass(i[i.length-1],"mceLast");f(d.select("tr",q),function(o){d.addClass(o.firstChild,"mceFirst");d.addClass(o.childNodes[o.childNodes.length-1],"mceLast")});if(d.get(w.theme_advanced_toolbar_container)){d.get(w.theme_advanced_toolbar_container).appendChild(j)}else{d.insertAfter(j,m)}b.add(r.id+"_path_row","click",function(n){n=n.target;if(n.nodeName=="A"){v._sel(n.className.replace(/^.*mcePath_([0-9]+).*$/,"$1"));return b.cancel(n)}});if(!r.getParam("accessibility_focus")){b.add(d.add(j,"a",{href:"#"},"<!-- IE -->"),"focus",function(){tinyMCE.get(r.id).focus()})}if(w.theme_advanced_toolbar_location=="external"){k.deltaHeight=0}v.deltaHeight=k.deltaHeight;k.targetNode=null;return{iframeContainer:l,editorContainer:r.id+"_parent",sizeContainer:u,deltaHeight:k.deltaHeight}},getInfo:function(){return{longname:"Advanced theme",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",version:e.majorVersion+"."+e.minorVersion}},resizeBy:function(i,j){var k=d.get(this.editor.id+"_tbl");this.resizeTo(k.clientWidth+i,k.clientHeight+j)},resizeTo:function(i,m,k){var j=this.editor,l=this.settings,n=d.get(j.id+"_tbl"),o=d.get(j.id+"_ifr");i=Math.max(l.theme_advanced_resizing_min_width||100,i);m=Math.max(l.theme_advanced_resizing_min_height||100,m);i=Math.min(l.theme_advanced_resizing_max_width||65535,i);m=Math.min(l.theme_advanced_resizing_max_height||65535,m);d.setStyle(n,"height","");d.setStyle(o,"height",m);if(l.theme_advanced_resize_horizontal){d.setStyle(n,"width","");d.setStyle(o,"width",i);if(i<n.clientWidth){i=n.clientWidth;d.setStyle(o,"width",n.clientWidth)}}if(k&&l.theme_advanced_resizing_use_cookie){a.setHash("TinyMCE_"+j.id+"_size",{cw:i,ch:m})}},destroy:function(){var i=this.editor.id;b.clear(i+"_resize");b.clear(i+"_path_row");b.clear(i+"_external_close")},_simpleLayout:function(y,r,k,i){var x=this,u=x.editor,v=y.theme_advanced_toolbar_location,m=y.theme_advanced_statusbar_location,l,j,q,w;if(y.readonly){l=d.add(r,"tr");l=j=d.add(l,"td",{"class":"mceIframeContainer"});return j}if(v=="top"){x._addToolbars(r,k)}if(v=="external"){l=w=d.create("div",{style:"position:relative"});l=d.add(l,"div",{id:u.id+"_external","class":"mceExternalToolbar"});d.add(l,"a",{id:u.id+"_external_close",href:"javascript:;","class":"mceExternalClose"});l=d.add(l,"table",{id:u.id+"_tblext",cellSpacing:0,cellPadding:0});q=d.add(l,"tbody");if(i.firstChild.className=="mceOldBoxModel"){i.firstChild.appendChild(w)}else{i.insertBefore(w,i.firstChild)}x._addToolbars(q,k);u.onMouseUp.add(function(){var o=d.get(u.id+"_external");d.show(o);d.hide(g);var n=b.add(u.id+"_external_close","click",function(){d.hide(u.id+"_external");b.remove(u.id+"_external_close","click",n)});d.show(o);d.setStyle(o,"top",0-d.getRect(u.id+"_tblext").h-1);d.hide(o);d.show(o);o.style.filter="";g=u.id+"_external";o=null})}if(m=="top"){x._addStatusBar(r,k)}if(!y.theme_advanced_toolbar_container){l=d.add(r,"tr");l=j=d.add(l,"td",{"class":"mceIframeContainer"})}if(v=="bottom"){x._addToolbars(r,k)}if(m=="bottom"){x._addStatusBar(r,k)}return j},_rowLayout:function(w,m,k){var v=this,p=v.editor,u,x,i=p.controlManager,l,j,r,q;u=w.theme_advanced_containers_default_class||"";x=w.theme_advanced_containers_default_align||"center";f(c(w.theme_advanced_containers||""),function(s,o){var n=w["theme_advanced_container_"+s]||"";switch(n.toLowerCase()){case"mceeditor":l=d.add(m,"tr");l=j=d.add(l,"td",{"class":"mceIframeContainer"});break;case"mceelementpath":v._addStatusBar(m,k);break;default:q=(w["theme_advanced_container_"+s+"_align"]||x).toLowerCase();q="mce"+v._ufirst(q);l=d.add(d.add(m,"tr"),"td",{"class":"mceToolbar "+(w["theme_advanced_container_"+s+"_class"]||u)+" "+q||x});r=i.createToolbar("toolbar"+o);v._addControls(n,r);d.setHTML(l,r.renderHTML());k.deltaHeight-=w.theme_advanced_row_height}});return j},_addControls:function(j,i){var k=this,l=k.settings,m,n=k.editor.controlManager;if(l.theme_advanced_disable&&!k._disabled){m={};f(c(l.theme_advanced_disable),function(o){m[o]=1});k._disabled=m}else{m=k._disabled}f(c(j),function(p){var o;if(m&&m[p]){return}if(p=="tablecontrols"){f(["table","|","row_props","cell_props","|","row_before","row_after","delete_row","|","col_before","col_after","delete_col","|","split_cells","merge_cells"],function(q){q=k.createControl(q,n);if(q){i.add(q)}});return}o=k.createControl(p,n);if(o){i.add(o)}})},_addToolbars:function(w,k){var z=this,p,m,r=z.editor,A=z.settings,y,j=r.controlManager,u,l,q=[],x;x=A.theme_advanced_toolbar_align.toLowerCase();x="mce"+z._ufirst(x);l=d.add(d.add(w,"tr"),"td",{"class":"mceToolbar "+x});if(!r.getParam("accessibility_focus")){q.push(d.createHTML("a",{href:"#",onfocus:"tinyMCE.get('"+r.id+"').focus();"},"<!-- IE -->"))}q.push(d.createHTML("a",{href:"#",accesskey:"q",title:r.getLang("advanced.toolbar_focus")},"<!-- IE -->"));for(p=1;(y=A["theme_advanced_buttons"+p]);p++){m=j.createToolbar("toolbar"+p,{"class":"mceToolbarRow"+p});if(A["theme_advanced_buttons"+p+"_add"]){y+=","+A["theme_advanced_buttons"+p+"_add"]}if(A["theme_advanced_buttons"+p+"_add_before"]){y=A["theme_advanced_buttons"+p+"_add_before"]+","+y}z._addControls(y,m);q.push(m.renderHTML());k.deltaHeight-=A.theme_advanced_row_height}q.push(d.createHTML("a",{href:"#",accesskey:"z",title:r.getLang("advanced.toolbar_focus"),onfocus:"tinyMCE.getInstanceById('"+r.id+"').focus();"},"<!-- IE -->"));d.setHTML(l,q.join(""))},_addStatusBar:function(m,j){var k,v=this,p=v.editor,w=v.settings,i,q,u,l;k=d.add(m,"tr");k=l=d.add(k,"td",{"class":"mceStatusbar"});k=d.add(k,"div",{id:p.id+"_path_row"},w.theme_advanced_path?p.translate("advanced.path")+": ":"&#160;");d.add(k,"a",{href:"#",accesskey:"x"});if(w.theme_advanced_resizing){d.add(l,"a",{id:p.id+"_resize",href:"javascript:;",onclick:"return false;","class":"mceResize"});if(w.theme_advanced_resizing_use_cookie){p.onPostRender.add(function(){var n=a.getHash("TinyMCE_"+p.id+"_size"),r=d.get(p.id+"_tbl");if(!n){return}v.resizeTo(n.cw,n.ch)})}p.onPostRender.add(function(){b.add(p.id+"_resize","click",function(n){n.preventDefault()});b.add(p.id+"_resize","mousedown",function(D){var t,r,s,o,C,z,A,F,n,E,x;function y(G){G.preventDefault();n=A+(G.screenX-C);E=F+(G.screenY-z);v.resizeTo(n,E)}function B(G){b.remove(d.doc,"mousemove",t);b.remove(p.getDoc(),"mousemove",r);b.remove(d.doc,"mouseup",s);b.remove(p.getDoc(),"mouseup",o);n=A+(G.screenX-C);E=F+(G.screenY-z);v.resizeTo(n,E,true)}D.preventDefault();C=D.screenX;z=D.screenY;x=d.get(v.editor.id+"_ifr");A=n=x.clientWidth;F=E=x.clientHeight;t=b.add(d.doc,"mousemove",y);r=b.add(p.getDoc(),"mousemove",y);s=b.add(d.doc,"mouseup",B);o=b.add(p.getDoc(),"mouseup",B)})})}j.deltaHeight-=21;k=m=null},_nodeChanged:function(r,z,l,x,j){var C=this,i,y=0,B,u,D=C.settings,A,k,w,m,q;e.each(C.stateControls,function(n){z.setActive(n,r.queryCommandState(C.controls[n][1]))});function o(p){var s,n=j.parents,t=p;if(typeof(p)=="string"){t=function(v){return v.nodeName==p}}for(s=0;s<n.length;s++){if(t(n[s])){return n[s]}}}z.setActive("visualaid",r.hasVisual);z.setDisabled("undo",!r.undoManager.hasUndo()&&!r.typing);z.setDisabled("redo",!r.undoManager.hasRedo());z.setDisabled("outdent",!r.queryCommandState("Outdent"));i=o("A");if(u=z.get("link")){if(!i||!i.name){u.setDisabled(!i&&x);u.setActive(!!i)}}if(u=z.get("unlink")){u.setDisabled(!i&&x);u.setActive(!!i&&!i.name)}if(u=z.get("anchor")){u.setActive(!!i&&i.name)}i=o("IMG");if(u=z.get("image")){u.setActive(!!i&&l.className.indexOf("mceItem")==-1)}if(u=z.get("styleselect")){C._importClasses();m=[];f(u.items,function(n){m.push(n.value)});q=r.formatter.matchAll(m);u.select(q[0])}if(u=z.get("formatselect")){i=o(d.isBlock);if(i){u.select(i.nodeName.toLowerCase())}}o(function(p){if(p.nodeName==="SPAN"){if(!A&&p.className){A=p.className}if(!k&&p.style.fontSize){k=p.style.fontSize}if(!w&&p.style.fontFamily){w=p.style.fontFamily.replace(/[\"\']+/g,"").replace(/^([^,]+).*/,"$1").toLowerCase()}}return false});if(u=z.get("fontselect")){u.select(function(n){return n.replace(/^([^,]+).*/,"$1").toLowerCase()==w})}if(u=z.get("fontsizeselect")){if(D.theme_advanced_runtime_fontsize&&!k&&!A){k=r.dom.getStyle(l,"fontSize",true)}u.select(function(n){if(n.fontSize&&n.fontSize===k){return true}if(n["class"]&&n["class"]===A){return true}})}if(D.theme_advanced_path&&D.theme_advanced_statusbar_location){i=d.get(r.id+"_path")||d.add(r.id+"_path_row","span",{id:r.id+"_path"});d.setHTML(i,"");o(function(E){var p=E.nodeName.toLowerCase(),s,v,t="";if(E.nodeType!=1||E.nodeName==="BR"||(d.hasClass(E,"mceItemHidden")||d.hasClass(E,"mceItemRemoved"))){return}if(B=d.getAttrib(E,"mce_name")){p=B}if(e.isIE&&E.scopeName!=="HTML"){p=E.scopeName+":"+p}p=p.replace(/mce\:/g,"");switch(p){case"b":p="strong";break;case"i":p="em";break;case"img":if(B=d.getAttrib(E,"src")){t+="src: "+B+" "}break;case"a":if(B=d.getAttrib(E,"name")){t+="name: "+B+" ";p+="#"+B}if(B=d.getAttrib(E,"href")){t+="href: "+B+" "}break;case"font":if(B=d.getAttrib(E,"face")){t+="font: "+B+" "}if(B=d.getAttrib(E,"size")){t+="size: "+B+" "}if(B=d.getAttrib(E,"color")){t+="color: "+B+" "}break;case"span":if(B=d.getAttrib(E,"style")){t+="style: "+B+" "}break}if(B=d.getAttrib(E,"id")){t+="id: "+B+" "}if(B=E.className){B=B.replace(/\b\s*(webkit|mce|Apple-)\w+\s*\b/g,"");if(B){t+="class: "+B+" ";if(d.isBlock(E)||p=="img"||p=="span"){p+="."+B}}}p=p.replace(/(html:)/g,"");p={name:p,node:E,title:t};C.onResolveName.dispatch(C,p);t=p.title;p=p.name;v=d.create("a",{href:"javascript:;",onmousedown:"return false;",title:t,"class":"mcePath_"+(y++)},p);if(i.hasChildNodes()){i.insertBefore(d.doc.createTextNode(" \u00bb "),i.firstChild);i.insertBefore(v,i.firstChild)}else{i.appendChild(v)}},r.getBody())}},_sel:function(i){this.editor.execCommand("mceSelectNodeDepth",false,i)},_mceInsertAnchor:function(k,j){var i=this.editor;i.windowManager.open({url:this.url+"/anchor.htm",width:320+parseInt(i.getLang("advanced.anchor_delta_width",0)),height:90+parseInt(i.getLang("advanced.anchor_delta_height",0)),inline:true},{theme_url:this.url})},_mceCharMap:function(){var i=this.editor;i.windowManager.open({url:this.url+"/charmap.htm",width:550+parseInt(i.getLang("advanced.charmap_delta_width",0)),height:250+parseInt(i.getLang("advanced.charmap_delta_height",0)),inline:true},{theme_url:this.url})},_mceHelp:function(){var i=this.editor;i.windowManager.open({url:this.url+"/about.htm",width:480,height:380,inline:true},{theme_url:this.url})},_mceColorPicker:function(k,j){var i=this.editor;j=j||{};i.windowManager.open({url:this.url+"/color_picker.htm",width:375+parseInt(i.getLang("advanced.colorpicker_delta_width",0)),height:250+parseInt(i.getLang("advanced.colorpicker_delta_height",0)),close_previous:false,inline:true},{input_color:j.color,func:j.func,theme_url:this.url})},_mceCodeEditor:function(j,k){var i=this.editor;i.windowManager.open({url:this.url+"/source_editor.htm",width:parseInt(i.getParam("theme_advanced_source_editor_width",720)),height:parseInt(i.getParam("theme_advanced_source_editor_height",580)),inline:true,resizable:true,maximizable:true},{theme_url:this.url})},_mceImage:function(j,k){var i=this.editor;if(i.dom.getAttrib(i.selection.getNode(),"class").indexOf("mceItem")!=-1){return}i.windowManager.open({url:this.url+"/image.htm",width:355+parseInt(i.getLang("advanced.image_delta_width",0)),height:275+parseInt(i.getLang("advanced.image_delta_height",0)),inline:true},{theme_url:this.url})},_mceLink:function(j,k){var i=this.editor;i.windowManager.open({url:this.url+"/link.htm",width:310+parseInt(i.getLang("advanced.link_delta_width",0)),height:200+parseInt(i.getLang("advanced.link_delta_height",0)),inline:true},{theme_url:this.url})},_mceNewDocument:function(){var i=this.editor;i.windowManager.confirm("advanced.newdocument",function(j){if(j){i.execCommand("mceSetContent",false,"")}})},_mceForeColor:function(){var i=this;this._mceColorPicker(0,{color:i.fgColor,func:function(j){i.fgColor=j;i.editor.execCommand("ForeColor",false,j)}})},_mceBackColor:function(){var i=this;this._mceColorPicker(0,{color:i.bgColor,func:function(j){i.bgColor=j;i.editor.execCommand("HiliteColor",false,j)}})},_ufirst:function(i){return i.substring(0,1).toUpperCase()+i.substring(1)}});e.ThemeManager.add("advanced",e.themes.AdvancedTheme)}(tinymce));
\ No newline at end of file
+(function(e) {
+    var d = e.DOM, b = e.dom.Event, h = e.extend, f = e.each, a = e.util.Cookie, g, c = e.explode;
+    e.ThemeManager.requireLangPack("advanced");
+    e.create("tinymce.themes.AdvancedTheme", {
+        sizes: [ 8, 10, 12, 14, 18, 24, 36 ],
+        controls: {
+            bold: [ "bold_desc", "Bold" ],
+            italic: [ "italic_desc", "Italic" ],
+            underline: [ "underline_desc", "Underline" ],
+            strikethrough: [ "striketrough_desc", "Strikethrough" ],
+            justifyleft: [ "justifyleft_desc", "JustifyLeft" ],
+            justifycenter: [ "justifycenter_desc", "JustifyCenter" ],
+            justifyright: [ "justifyright_desc", "JustifyRight" ],
+            justifyfull: [ "justifyfull_desc", "JustifyFull" ],
+            bullist: [ "bullist_desc", "InsertUnorderedList" ],
+            numlist: [ "numlist_desc", "InsertOrderedList" ],
+            outdent: [ "outdent_desc", "Outdent" ],
+            indent: [ "indent_desc", "Indent" ],
+            cut: [ "cut_desc", "Cut" ],
+            copy: [ "copy_desc", "Copy" ],
+            paste: [ "paste_desc", "Paste" ],
+            undo: [ "undo_desc", "Undo" ],
+            redo: [ "redo_desc", "Redo" ],
+            link: [ "link_desc", "mceLink" ],
+            unlink: [ "unlink_desc", "unlink" ],
+            image: [ "image_desc", "mceImage" ],
+            cleanup: [ "cleanup_desc", "mceCleanup" ],
+            help: [ "help_desc", "mceHelp" ],
+            code: [ "code_desc", "mceCodeEditor" ],
+            hr: [ "hr_desc", "InsertHorizontalRule" ],
+            removeformat: [ "removeformat_desc", "RemoveFormat" ],
+            sub: [ "sub_desc", "subscript" ],
+            sup: [ "sup_desc", "superscript" ],
+            forecolor: [ "forecolor_desc", "ForeColor" ],
+            forecolorpicker: [ "forecolor_desc", "mceForeColor" ],
+            backcolor: [ "backcolor_desc", "HiliteColor" ],
+            backcolorpicker: [ "backcolor_desc", "mceBackColor" ],
+            charmap: [ "charmap_desc", "mceCharMap" ],
+            visualaid: [ "visualaid_desc", "mceToggleVisualAid" ],
+            anchor: [ "anchor_desc", "mceInsertAnchor" ],
+            newdocument: [ "newdocument_desc", "mceNewDocument" ],
+            blockquote: [ "blockquote_desc", "mceBlockQuote" ]
+        },
+        stateControls: [ "bold", "italic", "underline", "strikethrough", "bullist", "numlist", "justifyleft", "justifycenter", "justifyright", "justifyfull", "sub", "sup", "blockquote" ],
+        init: function(j, k) {
+            var l = this, m, i, n;
+            l.editor = j;
+            l.url = k;
+            l.onResolveName = new e.util.Dispatcher(this);
+            l.settings = m = h({
+                theme_advanced_path: !0,
+                theme_advanced_toolbar_location: "bottom",
+                theme_advanced_buttons1: "bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect",
+                theme_advanced_buttons2: "bullist,numlist,|,outdent,indent,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code",
+                theme_advanced_buttons3: "hr,removeformat,visualaid,|,sub,sup,|,charmap",
+                theme_advanced_blockformats: "p,address,pre,h1,h2,h3,h4,h5,h6",
+                theme_advanced_toolbar_align: "center",
+                theme_advanced_fonts: "Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats",
+                theme_advanced_more_colors: 1,
+                theme_advanced_row_height: 23,
+                theme_advanced_resize_horizontal: 1,
+                theme_advanced_resizing_use_cookie: 1,
+                theme_advanced_font_sizes: "1,2,3,4,5,6,7",
+                readonly: j.settings.readonly
+            }, j.settings);
+            m.font_size_style_values || (m.font_size_style_values = "8pt,10pt,12pt,14pt,18pt,24pt,36pt");
+            if (e.is(m.theme_advanced_font_sizes, "string")) {
+                m.font_size_style_values = e.explode(m.font_size_style_values);
+                m.font_size_classes = e.explode(m.font_size_classes || "");
+                n = {};
+                j.settings.theme_advanced_font_sizes = m.theme_advanced_font_sizes;
+                f(j.getParam("theme_advanced_font_sizes", "", "hash"), function(q, p) {
+                    var o;
+                    if (p == q && q >= 1 && q <= 7) {
+                        p = q + " (" + l.sizes[q - 1] + "pt)";
+                        o = m.font_size_classes[q - 1];
+                        q = m.font_size_style_values[q - 1] || l.sizes[q - 1] + "pt";
+                    }
+                    /^\s*\./.test(q) && (o = q.replace(/\./g, ""));
+                    n[p] = o ? {
+                        "class": o
+                    } : {
+                        fontSize: q
+                    };
+                });
+                m.theme_advanced_font_sizes = n;
+            }
+            (i = m.theme_advanced_path_location) && i != "none" && (m.theme_advanced_statusbar_location = m.theme_advanced_path_location);
+            m.theme_advanced_statusbar_location == "none" && (m.theme_advanced_statusbar_location = 0);
+            j.onInit.add(function() {
+                j.settings.readonly || j.onNodeChange.add(l._nodeChanged, l);
+                j.settings.content_css !== !1 && j.dom.loadCSS(j.baseURI.toAbsolute(k + "/skins/" + j.settings.skin + "/content.css"));
+            });
+            j.onSetProgressState.add(function(q, o, r) {
+                var s, t = q.id, p;
+                if (o) l.progressTimer = setTimeout(function() {
+                    s = q.getContainer();
+                    s = s.insertBefore(d.create("DIV", {
+                        style: "position:relative"
+                    }), s.firstChild);
+                    p = d.get(q.id + "_tbl");
+                    d.add(s, "div", {
+                        id: t + "_blocker",
+                        "class": "mceBlocker",
+                        style: {
+                            width: p.clientWidth + 2,
+                            height: p.clientHeight + 2
+                        }
+                    });
+                    d.add(s, "div", {
+                        id: t + "_progress",
+                        "class": "mceProgress",
+                        style: {
+                            left: p.clientWidth / 2,
+                            top: p.clientHeight / 2
+                        }
+                    });
+                }, r || 0); else {
+                    d.remove(t + "_blocker");
+                    d.remove(t + "_progress");
+                    clearTimeout(l.progressTimer);
+                }
+            });
+            d.loadCSS(m.editor_css ? j.documentBaseURI.toAbsolute(m.editor_css) : k + "/skins/" + j.settings.skin + "/ui.css");
+            m.skin_variant && d.loadCSS(k + "/skins/" + j.settings.skin + "/ui_" + m.skin_variant + ".css");
+        },
+        createControl: function(l, i) {
+            var j, k;
+            if (k = i.createControl(l)) return k;
+            switch (l) {
+              case "styleselect":
+                return this._createStyleSelect();
+              case "formatselect":
+                return this._createBlockFormats();
+              case "fontselect":
+                return this._createFontSelect();
+              case "fontsizeselect":
+                return this._createFontSizeSelect();
+              case "forecolor":
+                return this._createForeColorMenu();
+              case "backcolor":
+                return this._createBackColorMenu();
+            }
+            if (j = this.controls[l]) return i.createButton(l, {
+                title: "advanced." + j[0],
+                cmd: j[1],
+                ui: j[2],
+                value: j[3]
+            });
+        },
+        execCommand: function(k, j, l) {
+            var i = this["_" + k];
+            if (i) {
+                i.call(this, j, l);
+                return !0;
+            }
+            return !1;
+        },
+        _importClasses: function(k) {
+            var i = this.editor, j = i.controlManager.get("styleselect");
+            j.getLength() == 0 && f(i.dom.getClasses(), function(n, l) {
+                var m = "style_" + l;
+                i.formatter.register(m, {
+                    inline: "span",
+                    attributes: {
+                        "class": n["class"]
+                    },
+                    selector: "*"
+                });
+                j.add(n["class"], m);
+            });
+        },
+        _createStyleSelect: function(m) {
+            var k = this, i = k.editor, j = i.controlManager, l;
+            l = j.createListBox("styleselect", {
+                title: "advanced.style_select",
+                onselect: function(o) {
+                    var p, n = [];
+                    f(l.items, function(q) {
+                        n.push(q.value);
+                    });
+                    i.focus();
+                    i.undoManager.add();
+                    p = i.formatter.matchAll(n);
+                    !o || p[0] == o ? i.formatter.remove(p[0]) : i.formatter.apply(o);
+                    i.undoManager.add();
+                    i.nodeChanged();
+                    return !1;
+                }
+            });
+            i.onInit.add(function() {
+                var o = 0, n = i.getParam("style_formats");
+                n ? f(n, function(p) {
+                    var q, r = 0;
+                    f(p, function() {
+                        r++;
+                    });
+                    if (r > 1) {
+                        q = p.name = p.name || "style_" + o++;
+                        i.formatter.register(q, p);
+                        l.add(p.title, q);
+                    } else l.add(p.title);
+                }) : f(i.getParam("theme_advanced_styles", "", "hash"), function(r, q) {
+                    var p;
+                    if (r) {
+                        p = "style_" + o++;
+                        i.formatter.register(p, {
+                            inline: "span",
+                            classes: r,
+                            selector: "*"
+                        });
+                        l.add(k.editor.translate(q), p);
+                    }
+                });
+            });
+            l.getLength() == 0 && l.onPostRender.add(function(o, p) {
+                if (!l.NativeListBox) {
+                    b.add(p.id + "_text", "focus", k._importClasses, k);
+                    b.add(p.id + "_text", "mousedown", k._importClasses, k);
+                    b.add(p.id + "_open", "focus", k._importClasses, k);
+                    b.add(p.id + "_open", "mousedown", k._importClasses, k);
+                } else b.add(p.id, "focus", k._importClasses, k);
+            });
+            return l;
+        },
+        _createFontSelect: function() {
+            var k, j = this, i = j.editor;
+            k = i.controlManager.createListBox("fontselect", {
+                title: "advanced.fontdefault",
+                onselect: function(l) {
+                    var m = k.items[k.selectedIndex];
+                    if (!l && m) {
+                        i.execCommand("FontName", !1, m.value);
+                        return;
+                    }
+                    i.execCommand("FontName", !1, l);
+                    k.select(function(n) {
+                        return l == n;
+                    });
+                    return !1;
+                }
+            });
+            k && f(i.getParam("theme_advanced_fonts", j.settings.theme_advanced_fonts, "hash"), function(m, l) {
+                k.add(i.translate(l), m, {
+                    style: m.indexOf("dings") == -1 ? "font-family:" + m : ""
+                });
+            });
+            return k;
+        },
+        _createFontSizeSelect: function() {
+            var m = this, k = m.editor, n, l = 0, j = [];
+            n = k.controlManager.createListBox("fontsizeselect", {
+                title: "advanced.font_size",
+                onselect: function(i) {
+                    var o = n.items[n.selectedIndex];
+                    if (!i && o) {
+                        o = o.value;
+                        if (o["class"]) {
+                            k.formatter.toggle("fontsize_class", {
+                                value: o["class"]
+                            });
+                            k.undoManager.add();
+                            k.nodeChanged();
+                        } else k.execCommand("FontSize", !1, o.fontSize);
+                        return;
+                    }
+                    if (i["class"]) {
+                        k.focus();
+                        k.undoManager.add();
+                        k.formatter.toggle("fontsize_class", {
+                            value: i["class"]
+                        });
+                        k.undoManager.add();
+                        k.nodeChanged();
+                    } else k.execCommand("FontSize", !1, i.fontSize);
+                    n.select(function(p) {
+                        return i == p;
+                    });
+                    return !1;
+                }
+            });
+            n && f(m.settings.theme_advanced_font_sizes, function(o, i) {
+                var p = o.fontSize;
+                p >= 1 && p <= 7 && (p = m.sizes[parseInt(p) - 1] + "pt");
+                n.add(i, o, {
+                    style: "font-size:" + p,
+                    "class": "mceFontSize" + l++ + (" " + (o["class"] || ""))
+                });
+            });
+            return n;
+        },
+        _createBlockFormats: function() {
+            var k, i = {
+                p: "advanced.paragraph",
+                address: "advanced.address",
+                pre: "advanced.pre",
+                h1: "advanced.h1",
+                h2: "advanced.h2",
+                h3: "advanced.h3",
+                h4: "advanced.h4",
+                h5: "advanced.h5",
+                h6: "advanced.h6",
+                div: "advanced.div",
+                blockquote: "advanced.blockquote",
+                code: "advanced.code",
+                dt: "advanced.dt",
+                dd: "advanced.dd",
+                samp: "advanced.samp"
+            }, j = this;
+            k = j.editor.controlManager.createListBox("formatselect", {
+                title: "advanced.block",
+                cmd: "FormatBlock"
+            });
+            k && f(j.editor.getParam("theme_advanced_blockformats", j.settings.theme_advanced_blockformats, "hash"), function(m, l) {
+                k.add(j.editor.translate(l != m ? l : i[m]), m, {
+                    "class": "mce_formatPreview mce_" + m
+                });
+            });
+            return k;
+        },
+        _createForeColorMenu: function() {
+            var m, j = this, k = j.settings, l = {}, i;
+            k.theme_advanced_more_colors && (l.more_colors_func = function() {
+                j._mceColorPicker(0, {
+                    color: m.value,
+                    func: function(n) {
+                        m.setColor(n);
+                    }
+                });
+            });
+            if (i = k.theme_advanced_text_colors) l.colors = i;
+            k.theme_advanced_default_foreground_color && (l.default_color = k.theme_advanced_default_foreground_color);
+            l.title = "advanced.forecolor_desc";
+            l.cmd = "ForeColor";
+            l.scope = this;
+            m = j.editor.controlManager.createColorSplitButton("forecolor", l);
+            return m;
+        },
+        _createBackColorMenu: function() {
+            var m, j = this, k = j.settings, l = {}, i;
+            k.theme_advanced_more_colors && (l.more_colors_func = function() {
+                j._mceColorPicker(0, {
+                    color: m.value,
+                    func: function(n) {
+                        m.setColor(n);
+                    }
+                });
+            });
+            if (i = k.theme_advanced_background_colors) l.colors = i;
+            k.theme_advanced_default_background_color && (l.default_color = k.theme_advanced_default_background_color);
+            l.title = "advanced.backcolor_desc";
+            l.cmd = "HiliteColor";
+            l.scope = this;
+            m = j.editor.controlManager.createColorSplitButton("backcolor", l);
+            return m;
+        },
+        renderUI: function(k) {
+            var m, l, q, v = this, r = v.editor, w = v.settings, u, j, i;
+            m = j = d.create("span", {
+                id: r.id + "_parent",
+                "class": "mceEditor " + r.settings.skin + "Skin" + (w.skin_variant ? " " + r.settings.skin + "Skin" + v._ufirst(w.skin_variant) : "")
+            });
+            d.boxModel || (m = d.add(m, "div", {
+                "class": "mceOldBoxModel"
+            }));
+            m = u = d.add(m, "table", {
+                id: r.id + "_tbl",
+                "class": "mceLayout",
+                cellSpacing: 0,
+                cellPadding: 0
+            });
+            m = q = d.add(m, "tbody");
+            switch ((w.theme_advanced_layout_manager || "").toLowerCase()) {
+              case "rowlayout":
+                l = v._rowLayout(w, q, k);
+                break;
+              case "customlayout":
+                l = r.execCallback("theme_advanced_custom_layout", w, q, k, j);
+                break;
+              default:
+                l = v._simpleLayout(w, q, k, j);
+            }
+            m = k.targetNode;
+            i = d.stdMode ? u.getElementsByTagName("tr") : u.rows;
+            d.addClass(i[0], "mceFirst");
+            d.addClass(i[i.length - 1], "mceLast");
+            f(d.select("tr", q), function(o) {
+                d.addClass(o.firstChild, "mceFirst");
+                d.addClass(o.childNodes[o.childNodes.length - 1], "mceLast");
+            });
+            d.get(w.theme_advanced_toolbar_container) ? d.get(w.theme_advanced_toolbar_container).appendChild(j) : d.insertAfter(j, m);
+            b.add(r.id + "_path_row", "click", function(n) {
+                n = n.target;
+                if (n.nodeName == "A") {
+                    v._sel(n.className.replace(/^.*mcePath_([0-9]+).*$/, "$1"));
+                    return b.cancel(n);
+                }
+            });
+            r.getParam("accessibility_focus") || b.add(d.add(j, "a", {
+                href: "#"
+            }, "<!-- IE -->"), "focus", function() {
+                tinyMCE.get(r.id).focus();
+            });
+            w.theme_advanced_toolbar_location == "external" && (k.deltaHeight = 0);
+            v.deltaHeight = k.deltaHeight;
+            k.targetNode = null;
+            return {
+                iframeContainer: l,
+                editorContainer: r.id + "_parent",
+                sizeContainer: u,
+                deltaHeight: k.deltaHeight
+            };
+        },
+        getInfo: function() {
+            return {
+                longname: "Advanced theme",
+                author: "Moxiecode Systems AB",
+                authorurl: "http://tinymce.moxiecode.com",
+                version: e.majorVersion + "." + e.minorVersion
+            };
+        },
+        resizeBy: function(i, j) {
+            var k = d.get(this.editor.id + "_tbl");
+            this.resizeTo(k.clientWidth + i, k.clientHeight + j);
+        },
+        resizeTo: function(i, m, k) {
+            var j = this.editor, l = this.settings, n = d.get(j.id + "_tbl"), o = d.get(j.id + "_ifr");
+            i = Math.max(l.theme_advanced_resizing_min_width || 100, i);
+            m = Math.max(l.theme_advanced_resizing_min_height || 100, m);
+            i = Math.min(l.theme_advanced_resizing_max_width || 65535, i);
+            m = Math.min(l.theme_advanced_resizing_max_height || 65535, m);
+            d.setStyle(n, "height", "");
+            d.setStyle(o, "height", m);
+            if (l.theme_advanced_resize_horizontal) {
+                d.setStyle(n, "width", "");
+                d.setStyle(o, "width", i);
+                if (i < n.clientWidth) {
+                    i = n.clientWidth;
+                    d.setStyle(o, "width", n.clientWidth);
+                }
+            }
+            k && l.theme_advanced_resizing_use_cookie && a.setHash("TinyMCE_" + j.id + "_size", {
+                cw: i,
+                ch: m
+            });
+        },
+        destroy: function() {
+            var i = this.editor.id;
+            b.clear(i + "_resize");
+            b.clear(i + "_path_row");
+            b.clear(i + "_external_close");
+        },
+        _simpleLayout: function(y, r, k, i) {
+            var x = this, u = x.editor, v = y.theme_advanced_toolbar_location, m = y.theme_advanced_statusbar_location, l, j, q, w;
+            if (y.readonly) {
+                l = d.add(r, "tr");
+                l = j = d.add(l, "td", {
+                    "class": "mceIframeContainer"
+                });
+                return j;
+            }
+            v == "top" && x._addToolbars(r, k);
+            if (v == "external") {
+                l = w = d.create("div", {
+                    style: "position:relative"
+                });
+                l = d.add(l, "div", {
+                    id: u.id + "_external",
+                    "class": "mceExternalToolbar"
+                });
+                d.add(l, "a", {
+                    id: u.id + "_external_close",
+                    href: "javascript:;",
+                    "class": "mceExternalClose"
+                });
+                l = d.add(l, "table", {
+                    id: u.id + "_tblext",
+                    cellSpacing: 0,
+                    cellPadding: 0
+                });
+                q = d.add(l, "tbody");
+                i.firstChild.className == "mceOldBoxModel" ? i.firstChild.appendChild(w) : i.insertBefore(w, i.firstChild);
+                x._addToolbars(q, k);
+                u.onMouseUp.add(function() {
+                    var o = d.get(u.id + "_external");
+                    d.show(o);
+                    d.hide(g);
+                    var n = b.add(u.id + "_external_close", "click", function() {
+                        d.hide(u.id + "_external");
+                        b.remove(u.id + "_external_close", "click", n);
+                    });
+                    d.show(o);
+                    d.setStyle(o, "top", 0 - d.getRect(u.id + "_tblext").h - 1);
+                    d.hide(o);
+                    d.show(o);
+                    o.style.filter = "";
+                    g = u.id + "_external";
+                    o = null;
+                });
+            }
+            m == "top" && x._addStatusBar(r, k);
+            if (!y.theme_advanced_toolbar_container) {
+                l = d.add(r, "tr");
+                l = j = d.add(l, "td", {
+                    "class": "mceIframeContainer"
+                });
+            }
+            v == "bottom" && x._addToolbars(r, k);
+            m == "bottom" && x._addStatusBar(r, k);
+            return j;
+        },
+        _rowLayout: function(w, m, k) {
+            var v = this, p = v.editor, u, x, i = p.controlManager, l, j, r, q;
+            u = w.theme_advanced_containers_default_class || "";
+            x = w.theme_advanced_containers_default_align || "center";
+            f(c(w.theme_advanced_containers || ""), function(s, o) {
+                var n = w["theme_advanced_container_" + s] || "";
+                switch (n.toLowerCase()) {
+                  case "mceeditor":
+                    l = d.add(m, "tr");
+                    l = j = d.add(l, "td", {
+                        "class": "mceIframeContainer"
+                    });
+                    break;
+                  case "mceelementpath":
+                    v._addStatusBar(m, k);
+                    break;
+                  default:
+                    q = (w["theme_advanced_container_" + s + "_align"] || x).toLowerCase();
+                    q = "mce" + v._ufirst(q);
+                    l = d.add(d.add(m, "tr"), "td", {
+                        "class": "mceToolbar " + (w["theme_advanced_container_" + s + "_class"] || u) + " " + q || x
+                    });
+                    r = i.createToolbar("toolbar" + o);
+                    v._addControls(n, r);
+                    d.setHTML(l, r.renderHTML());
+                    k.deltaHeight -= w.theme_advanced_row_height;
+                }
+            });
+            return j;
+        },
+        _addControls: function(j, i) {
+            var k = this, l = k.settings, m, n = k.editor.controlManager;
+            if (l.theme_advanced_disable && !k._disabled) {
+                m = {};
+                f(c(l.theme_advanced_disable), function(o) {
+                    m[o] = 1;
+                });
+                k._disabled = m;
+            } else m = k._disabled;
+            f(c(j), function(p) {
+                var o;
+                if (m && m[p]) return;
+                if (p == "tablecontrols") {
+                    f([ "table", "|", "row_props", "cell_props", "|", "row_before", "row_after", "delete_row", "|", "col_before", "col_after", "delete_col", "|", "split_cells", "merge_cells" ], function(q) {
+                        q = k.createControl(q, n);
+                        q && i.add(q);
+                    });
+                    return;
+                }
+                o = k.createControl(p, n);
+                o && i.add(o);
+            });
+        },
+        _addToolbars: function(w, k) {
+            var z = this, p, m, r = z.editor, A = z.settings, y, j = r.controlManager, u, l, q = [], x;
+            x = A.theme_advanced_toolbar_align.toLowerCase();
+            x = "mce" + z._ufirst(x);
+            l = d.add(d.add(w, "tr"), "td", {
+                "class": "mceToolbar " + x
+            });
+            r.getParam("accessibility_focus") || q.push(d.createHTML("a", {
+                href: "#",
+                onfocus: "tinyMCE.get('" + r.id + "').focus();"
+            }, "<!-- IE -->"));
+            q.push(d.createHTML("a", {
+                href: "#",
+                accesskey: "q",
+                title: r.getLang("advanced.toolbar_focus")
+            }, "<!-- IE -->"));
+            for (p = 1; y = A["theme_advanced_buttons" + p]; p++) {
+                m = j.createToolbar("toolbar" + p, {
+                    "class": "mceToolbarRow" + p
+                });
+                A["theme_advanced_buttons" + p + "_add"] && (y += "," + A["theme_advanced_buttons" + p + "_add"]);
+                A["theme_advanced_buttons" + p + "_add_before"] && (y = A["theme_advanced_buttons" + p + "_add_before"] + "," + y);
+                z._addControls(y, m);
+                q.push(m.renderHTML());
+                k.deltaHeight -= A.theme_advanced_row_height;
+            }
+            q.push(d.createHTML("a", {
+                href: "#",
+                accesskey: "z",
+                title: r.getLang("advanced.toolbar_focus"),
+                onfocus: "tinyMCE.getInstanceById('" + r.id + "').focus();"
+            }, "<!-- IE -->"));
+            d.setHTML(l, q.join(""));
+        },
+        _addStatusBar: function(m, j) {
+            var k, v = this, p = v.editor, w = v.settings, i, q, u, l;
+            k = d.add(m, "tr");
+            k = l = d.add(k, "td", {
+                "class": "mceStatusbar"
+            });
+            k = d.add(k, "div", {
+                id: p.id + "_path_row"
+            }, w.theme_advanced_path ? p.translate("advanced.path") + ": " : "&#160;");
+            d.add(k, "a", {
+                href: "#",
+                accesskey: "x"
+            });
+            if (w.theme_advanced_resizing) {
+                d.add(l, "a", {
+                    id: p.id + "_resize",
+                    href: "javascript:;",
+                    onclick: "return false;",
+                    "class": "mceResize"
+                });
+                w.theme_advanced_resizing_use_cookie && p.onPostRender.add(function() {
+                    var n = a.getHash("TinyMCE_" + p.id + "_size"), r = d.get(p.id + "_tbl");
+                    if (!n) return;
+                    v.resizeTo(n.cw, n.ch);
+                });
+                p.onPostRender.add(function() {
+                    b.add(p.id + "_resize", "click", function(n) {
+                        n.preventDefault();
+                    });
+                    b.add(p.id + "_resize", "mousedown", function(D) {
+                        var t, r, s, o, C, z, A, F, n, E, x;
+                        function y(G) {
+                            G.preventDefault();
+                            n = A + (G.screenX - C);
+                            E = F + (G.screenY - z);
+                            v.resizeTo(n, E);
+                        }
+                        function B(G) {
+                            b.remove(d.doc, "mousemove", t);
+                            b.remove(p.getDoc(), "mousemove", r);
+                            b.remove(d.doc, "mouseup", s);
+                            b.remove(p.getDoc(), "mouseup", o);
+                            n = A + (G.screenX - C);
+                            E = F + (G.screenY - z);
+                            v.resizeTo(n, E, !0);
+                        }
+                        D.preventDefault();
+                        C = D.screenX;
+                        z = D.screenY;
+                        x = d.get(v.editor.id + "_ifr");
+                        A = n = x.clientWidth;
+                        F = E = x.clientHeight;
+                        t = b.add(d.doc, "mousemove", y);
+                        r = b.add(p.getDoc(), "mousemove", y);
+                        s = b.add(d.doc, "mouseup", B);
+                        o = b.add(p.getDoc(), "mouseup", B);
+                    });
+                });
+            }
+            j.deltaHeight -= 21;
+            k = m = null;
+        },
+        _nodeChanged: function(r, z, l, x, j) {
+            var C = this, i, y = 0, B, u, D = C.settings, A, k, w, m, q;
+            e.each(C.stateControls, function(n) {
+                z.setActive(n, r.queryCommandState(C.controls[n][1]));
+            });
+            function o(p) {
+                var s, n = j.parents, t = p;
+                typeof p == "string" && (t = function(v) {
+                    return v.nodeName == p;
+                });
+                for (s = 0; s < n.length; s++) if (t(n[s])) return n[s];
+            }
+            z.setActive("visualaid", r.hasVisual);
+            z.setDisabled("undo", !r.undoManager.hasUndo() && !r.typing);
+            z.setDisabled("redo", !r.undoManager.hasRedo());
+            z.setDisabled("outdent", !r.queryCommandState("Outdent"));
+            i = o("A");
+            if (u = z.get("link")) if (!i || !i.name) {
+                u.setDisabled(!i && x);
+                u.setActive(!!i);
+            }
+            if (u = z.get("unlink")) {
+                u.setDisabled(!i && x);
+                u.setActive(!!i && !i.name);
+            }
+            (u = z.get("anchor")) && u.setActive(!!i && i.name);
+            i = o("IMG");
+            (u = z.get("image")) && u.setActive(!!i && l.className.indexOf("mceItem") == -1);
+            if (u = z.get("styleselect")) {
+                C._importClasses();
+                m = [];
+                f(u.items, function(n) {
+                    m.push(n.value);
+                });
+                q = r.formatter.matchAll(m);
+                u.select(q[0]);
+            }
+            if (u = z.get("formatselect")) {
+                i = o(d.isBlock);
+                i && u.select(i.nodeName.toLowerCase());
+            }
+            o(function(p) {
+                if (p.nodeName === "SPAN") {
+                    !A && p.className && (A = p.className);
+                    !k && p.style.fontSize && (k = p.style.fontSize);
+                    !w && p.style.fontFamily && (w = p.style.fontFamily.replace(/[\"\']+/g, "").replace(/^([^,]+).*/, "$1").toLowerCase());
+                }
+                return !1;
+            });
+            (u = z.get("fontselect")) && u.select(function(n) {
+                return n.replace(/^([^,]+).*/, "$1").toLowerCase() == w;
+            });
+            if (u = z.get("fontsizeselect")) {
+                D.theme_advanced_runtime_fontsize && !k && !A && (k = r.dom.getStyle(l, "fontSize", !0));
+                u.select(function(n) {
+                    if (n.fontSize && n.fontSize === k) return !0;
+                    if (n["class"] && n["class"] === A) return !0;
+                });
+            }
+            if (D.theme_advanced_path && D.theme_advanced_statusbar_location) {
+                i = d.get(r.id + "_path") || d.add(r.id + "_path_row", "span", {
+                    id: r.id + "_path"
+                });
+                d.setHTML(i, "");
+                o(function(E) {
+                    var p = E.nodeName.toLowerCase(), s, v, t = "";
+                    if (E.nodeType != 1 || E.nodeName === "BR" || d.hasClass(E, "mceItemHidden") || d.hasClass(E, "mceItemRemoved")) return;
+                    if (B = d.getAttrib(E, "mce_name")) p = B;
+                    e.isIE && E.scopeName !== "HTML" && (p = E.scopeName + ":" + p);
+                    p = p.replace(/mce\:/g, "");
+                    switch (p) {
+                      case "b":
+                        p = "strong";
+                        break;
+                      case "i":
+                        p = "em";
+                        break;
+                      case "img":
+                        if (B = d.getAttrib(E, "src")) t += "src: " + B + " ";
+                        break;
+                      case "a":
+                        if (B = d.getAttrib(E, "name")) {
+                            t += "name: " + B + " ";
+                            p += "#" + B;
+                        }
+                        if (B = d.getAttrib(E, "href")) t += "href: " + B + " ";
+                        break;
+                      case "font":
+                        if (B = d.getAttrib(E, "face")) t += "font: " + B + " ";
+                        if (B = d.getAttrib(E, "size")) t += "size: " + B + " ";
+                        if (B = d.getAttrib(E, "color")) t += "color: " + B + " ";
+                        break;
+                      case "span":
+                        if (B = d.getAttrib(E, "style")) t += "style: " + B + " ";
+                    }
+                    if (B = d.getAttrib(E, "id")) t += "id: " + B + " ";
+                    if (B = E.className) {
+                        B = B.replace(/\b\s*(webkit|mce|Apple-)\w+\s*\b/g, "");
+                        if (B) {
+                            t += "class: " + B + " ";
+                            if (d.isBlock(E) || p == "img" || p == "span") p += "." + B;
+                        }
+                    }
+                    p = p.replace(/(html:)/g, "");
+                    p = {
+                        name: p,
+                        node: E,
+                        title: t
+                    };
+                    C.onResolveName.dispatch(C, p);
+                    t = p.title;
+                    p = p.name;
+                    v = d.create("a", {
+                        href: "javascript:;",
+                        onmousedown: "return false;",
+                        title: t,
+                        "class": "mcePath_" + y++
+                    }, p);
+                    if (i.hasChildNodes()) {
+                        i.insertBefore(d.doc.createTextNode(" » "), i.firstChild);
+                        i.insertBefore(v, i.firstChild);
+                    } else i.appendChild(v);
+                }, r.getBody());
+            }
+        },
+        _sel: function(i) {
+            this.editor.execCommand("mceSelectNodeDepth", !1, i);
+        },
+        _mceInsertAnchor: function(k, j) {
+            var i = this.editor;
+            i.windowManager.open({
+                url: this.url + "/anchor.htm",
+                width: 320 + parseInt(i.getLang("advanced.anchor_delta_width", 0)),
+                height: 90 + parseInt(i.getLang("advanced.anchor_delta_height", 0)),
+                inline: !0
+            }, {
+                theme_url: this.url
+            });
+        },
+        _mceCharMap: function() {
+            var i = this.editor;
+            i.windowManager.open({
+                url: this.url + "/charmap.htm",
+                width: 550 + parseInt(i.getLang("advanced.charmap_delta_width", 0)),
+                height: 250 + parseInt(i.getLang("advanced.charmap_delta_height", 0)),
+                inline: !0
+            }, {
+                theme_url: this.url
+            });
+        },
+        _mceHelp: function() {
+            var i = this.editor;
+            i.windowManager.open({
+                url: this.url + "/about.htm",
+                width: 480,
+                height: 380,
+                inline: !0
+            }, {
+                theme_url: this.url
+            });
+        },
+        _mceColorPicker: function(k, j) {
+            var i = this.editor;
+            j = j || {};
+            i.windowManager.open({
+                url: this.url + "/color_picker.htm",
+                width: 375 + parseInt(i.getLang("advanced.colorpicker_delta_width", 0)),
+                height: 250 + parseInt(i.getLang("advanced.colorpicker_delta_height", 0)),
+                close_previous: !1,
+                inline: !0
+            }, {
+                input_color: j.color,
+                func: j.func,
+                theme_url: this.url
+            });
+        },
+        _mceCodeEditor: function(j, k) {
+            var i = this.editor;
+            i.windowManager.open({
+                url: this.url + "/source_editor.htm",
+                width: parseInt(i.getParam("theme_advanced_source_editor_width", 720)),
+                height: parseInt(i.getParam("theme_advanced_source_editor_height", 580)),
+                inline: !0,
+                resizable: !0,
+                maximizable: !0
+            }, {
+                theme_url: this.url
+            });
+        },
+        _mceImage: function(j, k) {
+            var i = this.editor;
+            if (i.dom.getAttrib(i.selection.getNode(), "class").indexOf("mceItem") != -1) return;
+            i.windowManager.open({
+                url: this.url + "/image.htm",
+                width: 355 + parseInt(i.getLang("advanced.image_delta_width", 0)),
+                height: 275 + parseInt(i.getLang("advanced.image_delta_height", 0)),
+                inline: !0
+            }, {
+                theme_url: this.url
+            });
+        },
+        _mceLink: function(j, k) {
+            var i = this.editor;
+            i.windowManager.open({
+                url: this.url + "/link.htm",
+                width: 310 + parseInt(i.getLang("advanced.link_delta_width", 0)),
+                height: 200 + parseInt(i.getLang("advanced.link_delta_height", 0)),
+                inline: !0
+            }, {
+                theme_url: this.url
+            });
+        },
+        _mceNewDocument: function() {
+            var i = this.editor;
+            i.windowManager.confirm("advanced.newdocument", function(j) {
+                j && i.execCommand("mceSetContent", !1, "");
+            });
+        },
+        _mceForeColor: function() {
+            var i = this;
+            this._mceColorPicker(0, {
+                color: i.fgColor,
+                func: function(j) {
+                    i.fgColor = j;
+                    i.editor.execCommand("ForeColor", !1, j);
+                }
+            });
+        },
+        _mceBackColor: function() {
+            var i = this;
+            this._mceColorPicker(0, {
+                color: i.bgColor,
+                func: function(j) {
+                    i.bgColor = j;
+                    i.editor.execCommand("HiliteColor", !1, j);
+                }
+            });
+        },
+        _ufirst: function(i) {
+            return i.substring(0, 1).toUpperCase() + i.substring(1);
+        }
+    });
+    e.ThemeManager.add("advanced", e.themes.AdvancedTheme);
+})(tinymce);
\ No newline at end of file
--- a/chrome/zotero.jar!/content/zotero/tinymce/tiny_mce_popup.js
+++ b/chrome/zotero.jar!/content/zotero/tinymce/tiny_mce_popup.js
@@ -1,5 +1,193 @@
-
 // Uncomment and change this document.domain value if you are loading the script cross subdomains
 // document.domain = 'moxiecode.com';
+var tinymce = null, tinyMCEPopup, tinyMCE;
+
+tinyMCEPopup = {
+    init: function() {
+        var b = this, a, c;
+        a = b.getWin();
+        tinymce = a.tinymce;
+        tinyMCE = a.tinyMCE;
+        b.editor = tinymce.EditorManager.activeEditor;
+        b.params = b.editor.windowManager.params;
+        b.features = b.editor.windowManager.features;
+        b.dom = b.editor.windowManager.createInstance("tinymce.dom.DOMUtils", document);
+        b.features.popup_css !== !1 && b.dom.loadCSS(b.features.popup_css || b.editor.settings.popup_css);
+        b.listeners = [];
+        b.onInit = {
+            add: function(e, d) {
+                b.listeners.push({
+                    func: e,
+                    scope: d
+                });
+            }
+        };
+        b.isWindow = !b.getWindowArg("mce_inline");
+        b.id = b.getWindowArg("mce_window_id");
+        b.editor.windowManager.onOpen.dispatch(b.editor.windowManager, window);
+    },
+    getWin: function() {
+        return !window.frameElement && window.dialogArguments || opener || parent || top;
+    },
+    getWindowArg: function(c, b) {
+        var a = this.params[c];
+        return tinymce.is(a) ? a : b;
+    },
+    getParam: function(b, a) {
+        return this.editor.getParam(b, a);
+    },
+    getLang: function(b, a) {
+        return this.editor.getLang(b, a);
+    },
+    execCommand: function(d, c, e, b) {
+        b = b || {};
+        b.skip_focus = 1;
+        this.restoreSelection();
+        return this.editor.execCommand(d, c, e, b);
+    },
+    resizeToInnerSize: function() {
+        var a = this;
+        setTimeout(function() {
+            var b = a.dom.getViewPort(window);
+            a.editor.windowManager.resizeBy(a.getWindowArg("mce_width") - b.w, a.getWindowArg("mce_height") - b.h, a.id || window);
+        }, 0);
+    },
+    executeOnLoad: function(s) {
+        this.onInit.add(function() {
+            eval(s);
+        });
+    },
+    storeSelection: function() {
+        this.editor.windowManager.bookmark = tinyMCEPopup.editor.selection.getBookmark(1);
+    },
+    restoreSelection: function() {
+        var a = tinyMCEPopup;
+        !a.isWindow && tinymce.isIE && a.editor.selection.moveToBookmark(a.editor.windowManager.bookmark);
+    },
+    requireLangPack: function() {
+        var b = this, a = b.getWindowArg("plugin_url") || b.getWindowArg("theme_url");
+        if (a && b.editor.settings.language && b.features.translate_i18n !== !1) {
+            a += "/langs/" + b.editor.settings.language + "_dlg.js";
+            if (!tinymce.ScriptLoader.isDone(a)) {
+                document.write('<script type="text/javascript" src="' + tinymce._addVer(a) + '"></script>');
+                tinymce.ScriptLoader.markDone(a);
+            }
+        }
+    },
+    pickColor: function(b, a) {
+        this.execCommand("mceColorPicker", !0, {
+            color: document.getElementById(a).value,
+            func: function(e) {
+                document.getElementById(a).value = e;
+                try {
+                    document.getElementById(a).onchange();
+                } catch (d) {}
+            }
+        });
+    },
+    openBrowser: function(a, c, b) {
+        tinyMCEPopup.restoreSelection();
+        this.editor.execCallback("file_browser_callback", a, document.getElementById(a).value, c, window);
+    },
+    confirm: function(b, a, c) {
+        this.editor.windowManager.confirm(b, a, c, window);
+    },
+    alert: function(b, a, c) {
+        this.editor.windowManager.alert(b, a, c, window);
+    },
+    close: function() {
+        var a = this;
+        function b() {
+            a.editor.windowManager.close(window);
+            tinymce = tinyMCE = a.editor = a.params = a.dom = a.dom.doc = null;
+        }
+        tinymce.isOpera ? a.getWin().setTimeout(b, 0) : b();
+    },
+    _restoreSelection: function() {
+        var a = window.event.srcElement;
+        a.nodeName == "INPUT" && (a.type == "submit" || a.type == "button") && tinyMCEPopup.restoreSelection();
+    },
+    _onDOMLoaded: function() {
+        var b = tinyMCEPopup, d = document.title, e, c, a;
+        if (b.domLoaded) return;
+        b.domLoaded = 1;
+        if (b.features.translate_i18n !== !1) {
+            c = document.body.innerHTML;
+            tinymce.isIE && (c = c.replace(/ (value|title|alt)=([^"][^\s>]+)/gi, ' $1="$2"'));
+            document.dir = b.editor.getParam("directionality", "");
+            (a = b.editor.translate(c)) && a != c && (document.body.innerHTML = a);
+            (a = b.editor.translate(d)) && a != d && (document.title = d = a);
+        }
+        document.body.style.display = "";
+        if (tinymce.isIE) {
+            document.attachEvent("onmouseup", tinyMCEPopup._restoreSelection);
+            b.dom.add(b.dom.select("head")[0], "base", {
+                target: "_self"
+            });
+        }
+        b.restoreSelection();
+        b.resizeToInnerSize();
+        b.isWindow ? window.focus() : b.editor.windowManager.setTitle(window, d);
+        !tinymce.isIE && !b.isWindow && tinymce.dom.Event._add(document, "focus", function() {
+            b.editor.windowManager.focus(b.id);
+        });
+        tinymce.each(b.dom.select("select"), function(f) {
+            f.onkeydown = tinyMCEPopup._accessHandler;
+        });
+        tinymce.each(b.listeners, function(f) {
+            f.func.call(f.scope, b.editor);
+        });
+        if (b.getWindowArg("mce_auto_focus", !0)) {
+            window.focus();
+            tinymce.each(document.forms, function(g) {
+                tinymce.each(g.elements, function(f) {
+                    if (b.dom.hasClass(f, "mceFocus") && !f.disabled) {
+                        f.focus();
+                        return !1;
+                    }
+                });
+            });
+        }
+        document.onkeyup = tinyMCEPopup._closeWinKeyHandler;
+    },
+    _accessHandler: function(a) {
+        a = a || window.event;
+        if (a.keyCode == 13 || a.keyCode == 32) {
+            a = a.target || a.srcElement;
+            a.onchange && a.onchange();
+            return tinymce.dom.Event.cancel(a);
+        }
+    },
+    _closeWinKeyHandler: function(a) {
+        a = a || window.event;
+        a.keyCode == 27 && tinyMCEPopup.close();
+    },
+    _wait: function() {
+        if (document.attachEvent) {
+            document.attachEvent("onreadystatechange", function() {
+                if (document.readyState === "complete") {
+                    document.detachEvent("onreadystatechange", arguments.callee);
+                    tinyMCEPopup._onDOMLoaded();
+                }
+            });
+            document.documentElement.doScroll && window == window.top && function() {
+                if (tinyMCEPopup.domLoaded) return;
+                try {
+                    document.documentElement.doScroll("left");
+                } catch (a) {
+                    setTimeout(arguments.callee, 0);
+                    return;
+                }
+                tinyMCEPopup._onDOMLoaded();
+            }();
+            document.attachEvent("onload", tinyMCEPopup._onDOMLoaded);
+        } else if (document.addEventListener) {
+            window.addEventListener("DOMContentLoaded", tinyMCEPopup._onDOMLoaded, !1);
+            window.addEventListener("load", tinyMCEPopup._onDOMLoaded, !1);
+        }
+    }
+};
+
+tinyMCEPopup.init();
 
-var tinymce=null,tinyMCEPopup,tinyMCE;tinyMCEPopup={init:function(){var b=this,a,c;a=b.getWin();tinymce=a.tinymce;tinyMCE=a.tinyMCE;b.editor=tinymce.EditorManager.activeEditor;b.params=b.editor.windowManager.params;b.features=b.editor.windowManager.features;b.dom=b.editor.windowManager.createInstance("tinymce.dom.DOMUtils",document);if(b.features.popup_css!==false){b.dom.loadCSS(b.features.popup_css||b.editor.settings.popup_css)}b.listeners=[];b.onInit={add:function(e,d){b.listeners.push({func:e,scope:d})}};b.isWindow=!b.getWindowArg("mce_inline");b.id=b.getWindowArg("mce_window_id");b.editor.windowManager.onOpen.dispatch(b.editor.windowManager,window)},getWin:function(){return(!window.frameElement&&window.dialogArguments)||opener||parent||top},getWindowArg:function(c,b){var a=this.params[c];return tinymce.is(a)?a:b},getParam:function(b,a){return this.editor.getParam(b,a)},getLang:function(b,a){return this.editor.getLang(b,a)},execCommand:function(d,c,e,b){b=b||{};b.skip_focus=1;this.restoreSelection();return this.editor.execCommand(d,c,e,b)},resizeToInnerSize:function(){var a=this;setTimeout(function(){var b=a.dom.getViewPort(window);a.editor.windowManager.resizeBy(a.getWindowArg("mce_width")-b.w,a.getWindowArg("mce_height")-b.h,a.id||window)},0)},executeOnLoad:function(s){this.onInit.add(function(){eval(s)})},storeSelection:function(){this.editor.windowManager.bookmark=tinyMCEPopup.editor.selection.getBookmark(1)},restoreSelection:function(){var a=tinyMCEPopup;if(!a.isWindow&&tinymce.isIE){a.editor.selection.moveToBookmark(a.editor.windowManager.bookmark)}},requireLangPack:function(){var b=this,a=b.getWindowArg("plugin_url")||b.getWindowArg("theme_url");if(a&&b.editor.settings.language&&b.features.translate_i18n!==false){a+="/langs/"+b.editor.settings.language+"_dlg.js";if(!tinymce.ScriptLoader.isDone(a)){document.write('<script type="text/javascript" src="'+tinymce._addVer(a)+'"><\/script>');tinymce.ScriptLoader.markDone(a)}}},pickColor:function(b,a){this.execCommand("mceColorPicker",true,{color:document.getElementById(a).value,func:function(e){document.getElementById(a).value=e;try{document.getElementById(a).onchange()}catch(d){}}})},openBrowser:function(a,c,b){tinyMCEPopup.restoreSelection();this.editor.execCallback("file_browser_callback",a,document.getElementById(a).value,c,window)},confirm:function(b,a,c){this.editor.windowManager.confirm(b,a,c,window)},alert:function(b,a,c){this.editor.windowManager.alert(b,a,c,window)},close:function(){var a=this;function b(){a.editor.windowManager.close(window);tinymce=tinyMCE=a.editor=a.params=a.dom=a.dom.doc=null}if(tinymce.isOpera){a.getWin().setTimeout(b,0)}else{b()}},_restoreSelection:function(){var a=window.event.srcElement;if(a.nodeName=="INPUT"&&(a.type=="submit"||a.type=="button")){tinyMCEPopup.restoreSelection()}},_onDOMLoaded:function(){var b=tinyMCEPopup,d=document.title,e,c,a;if(b.domLoaded){return}b.domLoaded=1;if(b.features.translate_i18n!==false){c=document.body.innerHTML;if(tinymce.isIE){c=c.replace(/ (value|title|alt)=([^"][^\s>]+)/gi,' $1="$2"')}document.dir=b.editor.getParam("directionality","");if((a=b.editor.translate(c))&&a!=c){document.body.innerHTML=a}if((a=b.editor.translate(d))&&a!=d){document.title=d=a}}document.body.style.display="";if(tinymce.isIE){document.attachEvent("onmouseup",tinyMCEPopup._restoreSelection);b.dom.add(b.dom.select("head")[0],"base",{target:"_self"})}b.restoreSelection();b.resizeToInnerSize();if(!b.isWindow){b.editor.windowManager.setTitle(window,d)}else{window.focus()}if(!tinymce.isIE&&!b.isWindow){tinymce.dom.Event._add(document,"focus",function(){b.editor.windowManager.focus(b.id)})}tinymce.each(b.dom.select("select"),function(f){f.onkeydown=tinyMCEPopup._accessHandler});tinymce.each(b.listeners,function(f){f.func.call(f.scope,b.editor)});if(b.getWindowArg("mce_auto_focus",true)){window.focus();tinymce.each(document.forms,function(g){tinymce.each(g.elements,function(f){if(b.dom.hasClass(f,"mceFocus")&&!f.disabled){f.focus();return false}})})}document.onkeyup=tinyMCEPopup._closeWinKeyHandler},_accessHandler:function(a){a=a||window.event;if(a.keyCode==13||a.keyCode==32){a=a.target||a.srcElement;if(a.onchange){a.onchange()}return tinymce.dom.Event.cancel(a)}},_closeWinKeyHandler:function(a){a=a||window.event;if(a.keyCode==27){tinyMCEPopup.close()}},_wait:function(){if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);tinyMCEPopup._onDOMLoaded()}});if(document.documentElement.doScroll&&window==window.top){(function(){if(tinyMCEPopup.domLoaded){return}try{document.documentElement.doScroll("left")}catch(a){setTimeout(arguments.callee,0);return}tinyMCEPopup._onDOMLoaded()})()}document.attachEvent("onload",tinyMCEPopup._onDOMLoaded)}else{if(document.addEventListener){window.addEventListener("DOMContentLoaded",tinyMCEPopup._onDOMLoaded,false);window.addEventListener("load",tinyMCEPopup._onDOMLoaded,false)}}}};tinyMCEPopup.init();tinyMCEPopup._wait();
\ No newline at end of file
+tinyMCEPopup._wait();
\ No newline at end of file
--- a/chrome/zotero.jar!/skin/default/zotero/timeline/bundle.js
+++ b/chrome/zotero.jar!/skin/default/zotero/timeline/bundle.js
@@ -28,289 +28,3262 @@
 	THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 	(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 	THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
+*//* timeline.js */Timeline.strings = {};
 
-/* timeline.js */
+Timeline.create = function(elmt, bandInfos, orientation, unit) {
+    return new Timeline._Impl(elmt, bandInfos, orientation, unit);
+};
+
+Timeline.HORIZONTAL = 0;
+
+Timeline.VERTICAL = 1;
+
+Timeline._defaultTheme = null;
+
+Timeline.createBandInfo = function(params) {
+    var theme = "theme" in params ? params.theme : Timeline.getDefaultTheme(), eventSource = "eventSource" in params ? params.eventSource : null, ether = new Timeline.LinearEther({
+        centersOn: "date" in params ? params.date : new Date,
+        interval: Timeline.DateTime.gregorianUnitLengths[params.intervalUnit],
+        pixelsPerInterval: params.intervalPixels
+    }), etherPainter = new Timeline.GregorianEtherPainter({
+        unit: params.intervalUnit,
+        multiple: "multiple" in params ? params.multiple : 1,
+        theme: theme,
+        align: "align" in params ? params.align : undefined
+    }), layout = new Timeline.StaticTrackBasedLayout({
+        eventSource: eventSource,
+        ether: ether,
+        showText: "showEventText" in params ? params.showEventText : !0,
+        theme: theme
+    }), eventPainterParams = {
+        showText: "showEventText" in params ? params.showEventText : !0,
+        layout: layout,
+        theme: theme
+    };
+    "trackHeight" in params && (eventPainterParams.trackHeight = params.trackHeight);
+    "trackGap" in params && (eventPainterParams.trackGap = params.trackGap);
+    var eventPainter = new Timeline.DurationEventPainter(eventPainterParams);
+    return {
+        width: params.width,
+        eventSource: eventSource,
+        timeZone: "timeZone" in params ? params.timeZone : 0,
+        ether: ether,
+        etherPainter: etherPainter,
+        eventPainter: eventPainter
+    };
+};
+
+Timeline.createHotZoneBandInfo = function(params) {
+    var theme = "theme" in params ? params.theme : Timeline.getDefaultTheme(), eventSource = "eventSource" in params ? params.eventSource : null, ether = new Timeline.HotZoneEther({
+        centersOn: "date" in params ? params.date : new Date,
+        interval: Timeline.DateTime.gregorianUnitLengths[params.intervalUnit],
+        pixelsPerInterval: params.intervalPixels,
+        zones: params.zones
+    }), etherPainter = new Timeline.HotZoneGregorianEtherPainter({
+        unit: params.intervalUnit,
+        zones: params.zones,
+        theme: theme,
+        align: "align" in params ? params.align : undefined
+    }), layout = new Timeline.StaticTrackBasedLayout({
+        eventSource: eventSource,
+        ether: ether,
+        theme: theme
+    }), eventPainterParams = {
+        showText: "showEventText" in params ? params.showEventText : !0,
+        layout: layout,
+        theme: theme
+    };
+    "trackHeight" in params && (eventPainterParams.trackHeight = params.trackHeight);
+    "trackGap" in params && (eventPainterParams.trackGap = params.trackGap);
+    var eventPainter = new Timeline.DurationEventPainter(eventPainterParams);
+    return {
+        width: params.width,
+        eventSource: eventSource,
+        timeZone: "timeZone" in params ? params.timeZone : 0,
+        ether: ether,
+        etherPainter: etherPainter,
+        eventPainter: eventPainter
+    };
+};
+
+Timeline.getDefaultTheme = function() {
+    Timeline._defaultTheme == null && (Timeline._defaultTheme = Timeline.ClassicTheme.create(Timeline.Platform.getDefaultLocale()));
+    return Timeline._defaultTheme;
+};
+
+Timeline.setDefaultTheme = function(theme) {
+    Timeline._defaultTheme = theme;
+};
+
+Timeline.loadXML = function(url, f) {
+    var fError = function(statusText, status, xmlhttp) {
+        alert("Failed to load data xml from " + url + "\n" + statusText);
+    }, fDone = function(xmlhttp) {
+        var xml = xmlhttp.responseXML;
+        !xml.documentElement && xmlhttp.responseStream && xml.load(xmlhttp.responseStream);
+        f(xml, url);
+    };
+    Timeline.XmlHttp.get(url, fError, fDone);
+};
+
+Timeline.loadJSON = function(url, f) {
+    var fError = function(statusText, status, xmlhttp) {
+        alert("Failed to load json data from " + url + "\n" + statusText);
+    }, fDone = function(xmlhttp) {
+        throw "break";
+    };
+    Timeline.XmlHttp.get(url, fError, fDone);
+};
+
+Timeline._Impl = function(elmt, bandInfos, orientation, unit) {
+    this._containerDiv = elmt;
+    this._bandInfos = bandInfos;
+    this._orientation = orientation == null ? Timeline.HORIZONTAL : orientation;
+    this._unit = unit != null ? unit : Timeline.NativeDateUnit;
+    this._initialize();
+};
+
+Timeline._Impl.prototype.dispose = function() {
+    for (var i = 0; i < this._bands.length; i++) this._bands[i].dispose();
+    this._bands = null;
+    this._bandInfos = null;
+    this._containerDiv.innerHTML = "";
+};
+
+Timeline._Impl.prototype.getBandCount = function() {
+    return this._bands.length;
+};
+
+Timeline._Impl.prototype.getBand = function(index) {
+    return this._bands[index];
+};
+
+Timeline._Impl.prototype.layout = function() {
+    this._distributeWidths();
+};
+
+Timeline._Impl.prototype.paint = function() {
+    for (var i = 0; i < this._bands.length; i++) this._bands[i].paint();
+};
+
+Timeline._Impl.prototype.getDocument = function() {
+    return this._containerDiv.ownerDocument;
+};
+
+Timeline._Impl.prototype.addDiv = function(div) {
+    this._containerDiv.appendChild(div);
+};
+
+Timeline._Impl.prototype.removeDiv = function(div) {
+    this._containerDiv.removeChild(div);
+};
+
+Timeline._Impl.prototype.isHorizontal = function() {
+    return this._orientation == Timeline.HORIZONTAL;
+};
+
+Timeline._Impl.prototype.isVertical = function() {
+    return this._orientation == Timeline.VERTICAL;
+};
+
+Timeline._Impl.prototype.getPixelLength = function() {
+    return this._orientation == Timeline.HORIZONTAL ? this._containerDiv.offsetWidth : this._containerDiv.offsetHeight;
+};
+
+Timeline._Impl.prototype.getPixelWidth = function() {
+    return this._orientation == Timeline.VERTICAL ? this._containerDiv.offsetWidth : this._containerDiv.offsetHeight;
+};
+
+Timeline._Impl.prototype.getUnit = function() {
+    return this._unit;
+};
+
+Timeline._Impl.prototype.loadXML = function(url, f) {
+    var tl = this, fError = function(statusText, status, xmlhttp) {
+        alert("Failed to load data xml from " + url + "\n" + statusText);
+        tl.hideLoadingMessage();
+    }, fDone = function(xmlhttp) {
+        try {
+            var xml = xmlhttp.responseXML;
+            !xml.documentElement && xmlhttp.responseStream && xml.load(xmlhttp.responseStream);
+            f(xml, url);
+        } finally {
+            tl.hideLoadingMessage();
+        }
+    };
+    this.showLoadingMessage();
+    window.setTimeout(function() {
+        Timeline.XmlHttp.get(url, fError, fDone);
+    }, 0);
+};
+
+Timeline._Impl.prototype.loadJSON = function(url, f) {
+    var tl = this, fError = function(statusText, status, xmlhttp) {
+        alert("Failed to load json data from " + url + "\n" + statusText);
+        tl.hideLoadingMessage();
+    }, fDone = function(xmlhttp) {
+        try {
+            throw "break2";
+        } finally {
+            tl.hideLoadingMessage();
+        }
+    };
+    this.showLoadingMessage();
+    window.setTimeout(function() {
+        Timeline.XmlHttp.get(url, fError, fDone);
+    }, 0);
+};
+
+Timeline._Impl.prototype._initialize = function() {
+    var containerDiv = this._containerDiv, doc = containerDiv.ownerDocument;
+    containerDiv.className = containerDiv.className.split(" ").concat("timeline-container").join(" ");
+    while (containerDiv.firstChild) containerDiv.removeChild(containerDiv.firstChild);
+    var elmtCopyright = Timeline.Graphics.createTranslucentImage(doc, Timeline.urlPrefix + (this.isHorizontal() ? "images/copyright-vertical.png" : "images/copyright.png"));
+    elmtCopyright.className = "timeline-copyright";
+    elmtCopyright.title = "Timeline (c) SIMILE - http://simile.mit.edu/timeline/";
+    Timeline.DOM.registerEvent(elmtCopyright, "click", function() {
+        window.location = "http://simile.mit.edu/timeline/";
+    });
+    containerDiv.appendChild(elmtCopyright);
+    this._bands = [];
+    for (var i = 0; i < this._bandInfos.length; i++) {
+        var band = new Timeline._Band(this, this._bandInfos[i], i);
+        this._bands.push(band);
+    }
+    this._distributeWidths();
+    for (var i = 0; i < this._bandInfos.length; i++) {
+        var bandInfo = this._bandInfos[i];
+        "syncWith" in bandInfo && this._bands[i].setSyncWithBand(this._bands[bandInfo.syncWith], "highlight" in bandInfo ? bandInfo.highlight : !1);
+    }
+    var message = Timeline.Graphics.createMessageBubble(doc);
+    message.containerDiv.className = "timeline-message-container";
+    containerDiv.appendChild(message.containerDiv);
+    message.contentDiv.className = "timeline-message";
+    message.contentDiv.innerHTML = "<img src='" + Timeline.urlPrefix + "images/progress-running.gif' /> Loading...";
+    this.showLoadingMessage = function() {
+        message.containerDiv.style.display = "block";
+    };
+    this.hideLoadingMessage = function() {
+        message.containerDiv.style.display = "none";
+    };
+};
+
+Timeline._Impl.prototype._distributeWidths = function() {
+    var length = this.getPixelLength(), width = this.getPixelWidth(), cumulativeWidth = 0;
+    for (var i = 0; i < this._bands.length; i++) {
+        var band = this._bands[i], bandInfos = this._bandInfos[i], widthString = bandInfos.width, x = widthString.indexOf("%");
+        if (x > 0) var percent = parseInt(widthString.substr(0, x)), bandWidth = percent * width / 100; else var bandWidth = parseInt(widthString);
+        band.setBandShiftAndWidth(cumulativeWidth, bandWidth);
+        band.setViewLength(length);
+        cumulativeWidth += bandWidth;
+    }
+};
+
+Timeline._Band = function(timeline, bandInfo, index) {
+    this._timeline = timeline;
+    this._bandInfo = bandInfo;
+    this._index = index;
+    this._locale = "locale" in bandInfo ? bandInfo.locale : Timeline.Platform.getDefaultLocale();
+    this._timeZone = "timeZone" in bandInfo ? bandInfo.timeZone : 0;
+    this._labeller = "labeller" in bandInfo ? bandInfo.labeller : timeline.getUnit().createLabeller(this._locale, this._timeZone);
+    this._dragging = !1;
+    this._changing = !1;
+    this._originalScrollSpeed = 5;
+    this._scrollSpeed = this._originalScrollSpeed;
+    this._onScrollListeners = [];
+    var b = this;
+    this._syncWithBand = null;
+    this._syncWithBandHandler = function(band) {
+        b._onHighlightBandScroll();
+    };
+    this._selectorListener = function(band) {
+        b._onHighlightBandScroll();
+    };
+    var inputDiv = this._timeline.getDocument().createElement("div");
+    inputDiv.className = "timeline-band-input";
+    this._timeline.addDiv(inputDiv);
+    this._keyboardInput = document.createElement("input");
+    this._keyboardInput.type = "text";
+    inputDiv.appendChild(this._keyboardInput);
+    Timeline.DOM.registerEventWithObject(this._keyboardInput, "keydown", this, this._onKeyDown);
+    Timeline.DOM.registerEventWithObject(this._keyboardInput, "keyup", this, this._onKeyUp);
+    this._div = this._timeline.getDocument().createElement("div");
+    this._div.className = "timeline-band";
+    this._timeline.addDiv(this._div);
+    Timeline.DOM.registerEventWithObject(this._div, "mousedown", this, this._onMouseDown);
+    Timeline.DOM.registerEventWithObject(this._div, "mousemove", this, this._onMouseMove);
+    Timeline.DOM.registerEventWithObject(this._div, "mouseup", this, this._onMouseUp);
+    Timeline.DOM.registerEventWithObject(this._div, "mouseout", this, this._onMouseOut);
+    Timeline.DOM.registerEventWithObject(this._div, "dblclick", this, this._onDblClick);
+    this._innerDiv = this._timeline.getDocument().createElement("div");
+    this._innerDiv.className = "timeline-band-inner";
+    this._div.appendChild(this._innerDiv);
+    this._ether = bandInfo.ether;
+    bandInfo.ether.initialize(timeline);
+    this._etherPainter = bandInfo.etherPainter;
+    bandInfo.etherPainter.initialize(this, timeline);
+    this._eventSource = bandInfo.eventSource;
+    if (this._eventSource) {
+        this._eventListener = {
+            onAddMany: function() {
+                b._onAddMany();
+            },
+            onClear: function() {
+                b._onClear();
+            }
+        };
+        this._eventSource.addListener(this._eventListener);
+    }
+    this._eventPainter = bandInfo.eventPainter;
+    bandInfo.eventPainter.initialize(this, timeline);
+    this._decorators = "decorators" in bandInfo ? bandInfo.decorators : [];
+    for (var i = 0; i < this._decorators.length; i++) this._decorators[i].initialize(this, timeline);
+    this._bubble = null;
+};
+
+Timeline._Band.SCROLL_MULTIPLES = 5;
+
+Timeline._Band.prototype.dispose = function() {
+    this.closeBubble();
+    if (this._eventSource) {
+        this._eventSource.removeListener(this._eventListener);
+        this._eventListener = null;
+        this._eventSource = null;
+    }
+    this._timeline = null;
+    this._bandInfo = null;
+    this._labeller = null;
+    this._ether = null;
+    this._etherPainter = null;
+    this._eventPainter = null;
+    this._decorators = null;
+    this._onScrollListeners = null;
+    this._syncWithBandHandler = null;
+    this._selectorListener = null;
+    this._div = null;
+    this._innerDiv = null;
+    this._keyboardInput = null;
+    this._bubble = null;
+};
+
+Timeline._Band.prototype.addOnScrollListener = function(listener) {
+    this._onScrollListeners.push(listener);
+};
+
+Timeline._Band.prototype.removeOnScrollListener = function(listener) {
+    for (var i = 0; i < this._onScrollListeners.length; i++) if (this._onScrollListeners[i] == listener) {
+        this._onScrollListeners.splice(i, 1);
+        break;
+    }
+};
+
+Timeline._Band.prototype.setSyncWithBand = function(band, highlight) {
+    this._syncWithBand && this._syncWithBand.removeOnScrollListener(this._syncWithBandHandler);
+    this._syncWithBand = band;
+    this._syncWithBand.addOnScrollListener(this._syncWithBandHandler);
+    this._highlight = highlight;
+    this._positionHighlight();
+};
+
+Timeline._Band.prototype.getLocale = function() {
+    return this._locale;
+};
+
+Timeline._Band.prototype.getTimeZone = function() {
+    return this._timeZone;
+};
+
+Timeline._Band.prototype.getLabeller = function() {
+    return this._labeller;
+};
+
+Timeline._Band.prototype.getIndex = function() {
+    return this._index;
+};
+
+Timeline._Band.prototype.getEther = function() {
+    return this._ether;
+};
+
+Timeline._Band.prototype.getEtherPainter = function() {
+    return this._etherPainter;
+};
+
+Timeline._Band.prototype.getEventSource = function() {
+    return this._eventSource;
+};
+
+Timeline._Band.prototype.getEventPainter = function() {
+    return this._eventPainter;
+};
+
+Timeline._Band.prototype.layout = function() {
+    this.paint();
+};
+
+Timeline._Band.prototype.paint = function() {
+    this._etherPainter.paint();
+    this._paintDecorators();
+    this._paintEvents();
+};
+
+Timeline._Band.prototype.softLayout = function() {
+    this.softPaint();
+};
+
+Timeline._Band.prototype.softPaint = function() {
+    this._etherPainter.softPaint();
+    this._softPaintDecorators();
+    this._softPaintEvents();
+};
+
+Timeline._Band.prototype.setBandShiftAndWidth = function(shift, width) {
+    var inputDiv = this._keyboardInput.parentNode, middle = shift + Math.floor(width / 2);
+    if (this._timeline.isHorizontal()) {
+        this._div.style.top = shift + "px";
+        this._div.style.height = width + "px";
+        inputDiv.style.top = middle + "px";
+        inputDiv.style.left = "-1em";
+    } else {
+        this._div.style.left = shift + "px";
+        this._div.style.width = width + "px";
+        inputDiv.style.left = middle + "px";
+        inputDiv.style.top = "-1em";
+    }
+};
+
+Timeline._Band.prototype.getViewWidth = function() {
+    return this._timeline.isHorizontal() ? this._div.offsetHeight : this._div.offsetWidth;
+};
+
+Timeline._Band.prototype.setViewLength = function(length) {
+    this._viewLength = length;
+    this._recenterDiv();
+    this._onChanging();
+};
+
+Timeline._Band.prototype.getViewLength = function() {
+    return this._viewLength;
+};
+
+Timeline._Band.prototype.getTotalViewLength = function() {
+    return Timeline._Band.SCROLL_MULTIPLES * this._viewLength;
+};
+
+Timeline._Band.prototype.getViewOffset = function() {
+    return this._viewOffset;
+};
+
+Timeline._Band.prototype.getMinDate = function() {
+    return this._ether.pixelOffsetToDate(this._viewOffset);
+};
+
+Timeline._Band.prototype.getMaxDate = function() {
+    return this._ether.pixelOffsetToDate(this._viewOffset + Timeline._Band.SCROLL_MULTIPLES * this._viewLength);
+};
+
+Timeline._Band.prototype.getMinVisibleDate = function() {
+    return this._ether.pixelOffsetToDate(0);
+};
+
+Timeline._Band.prototype.getMaxVisibleDate = function() {
+    return this._ether.pixelOffsetToDate(this._viewLength);
+};
+
+Timeline._Band.prototype.getCenterVisibleDate = function() {
+    return this._ether.pixelOffsetToDate(this._viewLength / 2);
+};
+
+Timeline._Band.prototype.setMinVisibleDate = function(date) {
+    this._changing || this._moveEther(Math.round(-this._ether.dateToPixelOffset(date)));
+};
+
+Timeline._Band.prototype.setMaxVisibleDate = function(date) {
+    this._changing || this._moveEther(Math.round(this._viewLength - this._ether.dateToPixelOffset(date)));
+};
+
+Timeline._Band.prototype.setCenterVisibleDate = function(date) {
+    this._changing || this._moveEther(Math.round(this._viewLength / 2 - this._ether.dateToPixelOffset(date)));
+};
+
+Timeline._Band.prototype.dateToPixelOffset = function(date) {
+    return this._ether.dateToPixelOffset(date) - this._viewOffset;
+};
+
+Timeline._Band.prototype.pixelOffsetToDate = function(pixels) {
+    return this._ether.pixelOffsetToDate(pixels + this._viewOffset);
+};
+
+Timeline._Band.prototype.createLayerDiv = function(zIndex) {
+    var div = this._timeline.getDocument().createElement("div");
+    div.className = "timeline-band-layer";
+    div.style.zIndex = zIndex;
+    this._innerDiv.appendChild(div);
+    var innerDiv = this._timeline.getDocument().createElement("div");
+    innerDiv.className = "timeline-band-layer-inner";
+    Timeline.Platform.browser.isIE ? innerDiv.style.cursor = "move" : innerDiv.style.cursor = "-moz-grab";
+    div.appendChild(innerDiv);
+    return innerDiv;
+};
+
+Timeline._Band.prototype.removeLayerDiv = function(div) {
+    this._innerDiv.removeChild(div.parentNode);
+};
+
+Timeline._Band.prototype.closeBubble = function() {
+    if (this._bubble != null) {
+        this._bubble.close();
+        this._bubble = null;
+    }
+};
+
+Timeline._Band.prototype.openBubbleForPoint = function(pageX, pageY, width, height) {
+    this.closeBubble();
+    this._bubble = Timeline.Graphics.createBubbleForPoint(this._timeline.getDocument(), pageX, pageY, width, height);
+    return this._bubble.content;
+};
+
+Timeline._Band.prototype.scrollToCenter = function(date) {
+    var pixelOffset = this._ether.dateToPixelOffset(date);
+    pixelOffset < -this._viewLength / 2 ? this.setCenterVisibleDate(this.pixelOffsetToDate(pixelOffset + this._viewLength)) : pixelOffset > 3 * this._viewLength / 2 && this.setCenterVisibleDate(this.pixelOffsetToDate(pixelOffset - this._viewLength));
+    this._autoScroll(Math.round(this._viewLength / 2 - this._ether.dateToPixelOffset(date)));
+};
+
+Timeline._Band.prototype._onMouseDown = function(innerFrame, evt, target) {
+    this.closeBubble();
+    this._dragging = !0;
+    this._dragX = evt.clientX;
+    this._dragY = evt.clientY;
+};
+
+Timeline._Band.prototype._onMouseMove = function(innerFrame, evt, target) {
+    if (this._dragging) {
+        var diffX = evt.clientX - this._dragX, diffY = evt.clientY - this._dragY;
+        this._dragX = evt.clientX;
+        this._dragY = evt.clientY;
+        this._moveEther(this._timeline.isHorizontal() ? diffX : diffY);
+        this._positionHighlight();
+    }
+};
+
+Timeline._Band.prototype._onMouseUp = function(innerFrame, evt, target) {
+    this._dragging = !1;
+    this._keyboardInput.focus();
+};
+
+Timeline._Band.prototype._onMouseOut = function(innerFrame, evt, target) {
+    var coords = Timeline.DOM.getEventRelativeCoordinates(evt, innerFrame);
+    coords.x += this._viewOffset;
+    if (coords.x < 0 || coords.x > innerFrame.offsetWidth || coords.y < 0 || coords.y > innerFrame.offsetHeight) this._dragging = !1;
+};
+
+Timeline._Band.prototype._onDblClick = function(innerFrame, evt, target) {
+    var coords = Timeline.DOM.getEventRelativeCoordinates(evt, innerFrame), distance = coords.x - (this._viewLength / 2 - this._viewOffset);
+    this._autoScroll(-distance);
+};
+
+Timeline._Band.prototype._onKeyDown = function(keyboardInput, evt, target) {
+    if (!this._dragging) {
+        switch (evt.keyCode) {
+          case 27:
+            break;
+          case 37:
+          case 38:
+            this._scrollSpeed = Math.min(50, Math.abs(this._scrollSpeed * 1.05));
+            this._moveEther(this._scrollSpeed);
+            break;
+          case 39:
+          case 40:
+            this._scrollSpeed = -Math.min(50, Math.abs(this._scrollSpeed * 1.05));
+            this._moveEther(this._scrollSpeed);
+            break;
+          default:
+            return !0;
+        }
+        this.closeBubble();
+        Timeline.DOM.cancelEvent(evt);
+        return !1;
+    }
+    return !0;
+};
+
+Timeline._Band.prototype._onKeyUp = function(keyboardInput, evt, target) {
+    if (!this._dragging) {
+        this._scrollSpeed = this._originalScrollSpeed;
+        switch (evt.keyCode) {
+          case 35:
+            this.setCenterVisibleDate(this._eventSource.getLatestDate());
+            break;
+          case 36:
+            this.setCenterVisibleDate(this._eventSource.getEarliestDate());
+            break;
+          case 33:
+            this._autoScroll(this._timeline.getPixelLength());
+            break;
+          case 34:
+            this._autoScroll(-this._timeline.getPixelLength());
+            break;
+          default:
+            return !0;
+        }
+        this.closeBubble();
+        Timeline.DOM.cancelEvent(evt);
+        return !1;
+    }
+    return !0;
+};
+
+Timeline._Band.prototype._autoScroll = function(distance) {
+    var b = this, a = Timeline.Graphics.createAnimation(function(abs, diff) {
+        b._moveEther(diff);
+    }, 0, distance, 1e3);
+    a.run();
+};
+
+Timeline._Band.prototype._moveEther = function(shift) {
+    this.closeBubble();
+    this._viewOffset += shift;
+    this._ether.shiftPixels(-shift);
+    this._timeline.isHorizontal() ? this._div.style.left = this._viewOffset + "px" : this._div.style.top = this._viewOffset + "px";
+    this._viewOffset > -this._viewLength * .5 || this._viewOffset < -this._viewLength * (Timeline._Band.SCROLL_MULTIPLES - 1.5) ? this._recenterDiv() : this.softLayout();
+    this._onChanging();
+};
+
+Timeline._Band.prototype._onChanging = function() {
+    this._changing = !0;
+    this._fireOnScroll();
+    this._setSyncWithBandDate();
+    this._changing = !1;
+};
+
+Timeline._Band.prototype._fireOnScroll = function() {
+    for (var i = 0; i < this._onScrollListeners.length; i++) this._onScrollListeners[i](this);
+};
+
+Timeline._Band.prototype._setSyncWithBandDate = function() {
+    if (this._syncWithBand) {
+        var centerDate = this._ether.pixelOffsetToDate(this.getViewLength() / 2);
+        this._syncWithBand.setCenterVisibleDate(centerDate);
+    }
+};
+
+Timeline._Band.prototype._onHighlightBandScroll = function() {
+    if (this._syncWithBand) {
+        var centerDate = this._syncWithBand.getCenterVisibleDate(), centerPixelOffset = this._ether.dateToPixelOffset(centerDate);
+        this._moveEther(Math.round(this._viewLength / 2 - centerPixelOffset));
+        this._highlight && this._etherPainter.setHighlight(this._syncWithBand.getMinVisibleDate(), this._syncWithBand.getMaxVisibleDate());
+    }
+};
+
+Timeline._Band.prototype._onAddMany = function() {
+    this._paintEvents();
+};
+
+Timeline._Band.prototype._onClear = function() {
+    this._paintEvents();
+};
+
+Timeline._Band.prototype._positionHighlight = function() {
+    if (this._syncWithBand) {
+        var startDate = this._syncWithBand.getMinVisibleDate(), endDate = this._syncWithBand.getMaxVisibleDate();
+        this._highlight && this._etherPainter.setHighlight(startDate, endDate);
+    }
+};
+
+Timeline._Band.prototype._recenterDiv = function() {
+    this._viewOffset = -this._viewLength * (Timeline._Band.SCROLL_MULTIPLES - 1) / 2;
+    if (this._timeline.isHorizontal()) {
+        this._div.style.left = this._viewOffset + "px";
+        this._div.style.width = Timeline._Band.SCROLL_MULTIPLES * this._viewLength + "px";
+    } else {
+        this._div.style.top = this._viewOffset + "px";
+        this._div.style.height = Timeline._Band.SCROLL_MULTIPLES * this._viewLength + "px";
+    }
+    this.layout();
+};
+
+Timeline._Band.prototype._paintEvents = function() {
+    this._eventPainter.paint();
+};
+
+Timeline._Band.prototype._softPaintEvents = function() {
+    this._eventPainter.softPaint();
+};
+
+Timeline._Band.prototype._paintDecorators = function() {
+    for (var i = 0; i < this._decorators.length; i++) this._decorators[i].paint();
+};
+
+Timeline._Band.prototype._softPaintDecorators = function() {
+    for (var i = 0; i < this._decorators.length; i++) this._decorators[i].softPaint();
+};
+
+Timeline.Platform.os = {
+    isMac: !1,
+    isWin: !1,
+    isWin32: !1,
+    isUnix: !1
+};
+
+Timeline.Platform.browser = {
+    isIE: !1,
+    isNetscape: !1,
+    isMozilla: !1,
+    isFirefox: !1,
+    isOpera: !1,
+    isSafari: !1,
+    majorVersion: 0,
+    minorVersion: 0
+};
+
+(function() {
+    var an = navigator.appName.toLowerCase(), ua = navigator.userAgent.toLowerCase();
+    Timeline.Platform.os.isMac = ua.indexOf("mac") != -1;
+    Timeline.Platform.os.isWin = ua.indexOf("win") != -1;
+    Timeline.Platform.os.isWin32 = Timeline.Platform.isWin && (ua.indexOf("95") != -1 || ua.indexOf("98") != -1 || ua.indexOf("nt") != -1 || ua.indexOf("win32") != -1 || ua.indexOf("32bit") != -1);
+    Timeline.Platform.os.isUnix = ua.indexOf("x11") != -1;
+    Timeline.Platform.browser.isIE = an.indexOf("microsoft") != -1;
+    Timeline.Platform.browser.isNetscape = an.indexOf("netscape") != -1;
+    Timeline.Platform.browser.isMozilla = ua.indexOf("mozilla") != -1;
+    Timeline.Platform.browser.isFirefox = ua.indexOf("firefox") != -1;
+    Timeline.Platform.browser.isOpera = an.indexOf("opera") != -1;
+    var parseVersionString = function(s) {
+        var a = s.split(".");
+        Timeline.Platform.browser.majorVersion = parseInt(a[0]);
+        Timeline.Platform.browser.minorVersion = parseInt(a[1]);
+    }, indexOf = function(s, sub, start) {
+        var i = s.indexOf(sub, start);
+        return i >= 0 ? i : s.length;
+    };
+    if (Timeline.Platform.browser.isMozilla) {
+        var offset = ua.indexOf("mozilla/");
+        offset >= 0 && parseVersionString(ua.substring(offset + 8, indexOf(ua, " ", offset)));
+    }
+    if (Timeline.Platform.browser.isIE) {
+        var offset = ua.indexOf("msie ");
+        offset >= 0 && parseVersionString(ua.substring(offset + 5, indexOf(ua, ";", offset)));
+    }
+    if (Timeline.Platform.browser.isNetscape) {
+        var offset = ua.indexOf("rv:");
+        offset >= 0 && parseVersionString(ua.substring(offset + 3, indexOf(ua, ")", offset)));
+    }
+    if (Timeline.Platform.browser.isFirefox) {
+        var offset = ua.indexOf("firefox/");
+        offset >= 0 && parseVersionString(ua.substring(offset + 8, indexOf(ua, " ", offset)));
+    }
+})();
+
+Timeline.Platform.getDefaultLocale = function() {
+    return Timeline.Platform.clientLocale;
+};
+
+Timeline.SortedArray = function(compare, initialArray) {
+    this._a = initialArray instanceof Array ? initialArray : [];
+    this._compare = compare;
+};
+
+Timeline.SortedArray.prototype.add = function(elmt) {
+    var sa = this, index = this.find(function(elmt2) {
+        return sa._compare(elmt2, elmt);
+    });
+    index < this._a.length ? this._a.splice(index, 0, elmt) : this._a.push(elmt);
+};
+
+Timeline.SortedArray.prototype.remove = function(elmt) {
+    var sa = this, index = this.find(function(elmt2) {
+        return sa._compare(elmt2, elmt);
+    });
+    while (index < this._a.length && this._compare(this._a[index], elmt) == 0) {
+        if (this._a[index] == elmt) {
+            this._a.splice(index, 1);
+            return !0;
+        }
+        index++;
+    }
+    return !1;
+};
+
+Timeline.SortedArray.prototype.removeAll = function() {
+    this._a = [];
+};
+
+Timeline.SortedArray.prototype.elementAt = function(index) {
+    return this._a[index];
+};
+
+Timeline.SortedArray.prototype.length = function() {
+    return this._a.length;
+};
+
+Timeline.SortedArray.prototype.find = function(compare) {
+    var a = 0, b = this._a.length;
+    while (a < b) {
+        var mid = Math.floor((a + b) / 2), c = compare(this._a[mid]);
+        if (mid == a) return c < 0 ? a + 1 : a;
+        c < 0 ? a = mid : b = mid;
+    }
+    return a;
+};
+
+Timeline.SortedArray.prototype.getFirst = function() {
+    return this._a.length > 0 ? this._a[0] : null;
+};
+
+Timeline.SortedArray.prototype.getLast = function() {
+    return this._a.length > 0 ? this._a[this._a.length - 1] : null;
+};
+
+Timeline.EventIndex = function(unit) {
+    var eventIndex = this;
+    this._unit = unit != null ? unit : Timeline.NativeDateUnit;
+    this._events = new Timeline.SortedArray(function(event1, event2) {
+        return eventIndex._unit.compare(event1.getStart(), event2.getStart());
+    });
+    this._indexed = !0;
+};
+
+Timeline.EventIndex.prototype.getUnit = function() {
+    return this._unit;
+};
+
+Timeline.EventIndex.prototype.add = function(evt) {
+    this._events.add(evt);
+    this._indexed = !1;
+};
+
+Timeline.EventIndex.prototype.removeAll = function() {
+    this._events.removeAll();
+    this._indexed = !1;
+};
+
+Timeline.EventIndex.prototype.getCount = function() {
+    return this._events.length();
+};
+
+Timeline.EventIndex.prototype.getIterator = function(startDate, endDate) {
+    this._indexed || this._index();
+    return new Timeline.EventIndex._Iterator(this._events, startDate, endDate, this._unit);
+};
+
+Timeline.EventIndex.prototype.getAllIterator = function() {
+    return new Timeline.EventIndex._AllIterator(this._events);
+};
+
+Timeline.EventIndex.prototype.getEarliestDate = function() {
+    var evt = this._events.getFirst();
+    return evt == null ? null : evt.getStart();
+};
+
+Timeline.EventIndex.prototype.getLatestDate = function() {
+    var evt = this._events.getLast();
+    if (evt == null) return null;
+    this._indexed || this._index();
+    var index = evt._earliestOverlapIndex, date = this._events.elementAt(index).getEnd();
+    for (var i = index + 1; i < this._events.length(); i++) date = this._unit.later(date, this._events.elementAt(i).getEnd());
+    return date;
+};
+
+Timeline.EventIndex.prototype._index = function() {
+    var l = this._events.length();
+    for (var i = 0; i < l; i++) {
+        var evt = this._events.elementAt(i);
+        evt._earliestOverlapIndex = i;
+    }
+    var toIndex = 1;
+    for (var i = 0; i < l; i++) {
+        var evt = this._events.elementAt(i), end = evt.getEnd();
+        toIndex = Math.max(toIndex, i + 1);
+        while (toIndex < l) {
+            var evt2 = this._events.elementAt(toIndex), start2 = evt2.getStart();
+            if (!(this._unit.compare(start2, end) < 0)) break;
+            evt2._earliestOverlapIndex = i;
+            toIndex++;
+        }
+    }
+    this._indexed = !0;
+};
+
+Timeline.EventIndex._Iterator = function(events, startDate, endDate, unit) {
+    this._events = events;
+    this._startDate = startDate;
+    this._endDate = endDate;
+    this._unit = unit;
+    this._currentIndex = events.find(function(evt) {
+        return unit.compare(evt.getStart(), startDate);
+    });
+    this._currentIndex - 1 >= 0 && (this._currentIndex = this._events.elementAt(this._currentIndex - 1)._earliestOverlapIndex);
+    this._currentIndex--;
+    this._maxIndex = events.find(function(evt) {
+        return unit.compare(evt.getStart(), endDate);
+    });
+    this._hasNext = !1;
+    this._next = null;
+    this._findNext();
+};
+
+Timeline.EventIndex._Iterator.prototype = {
+    hasNext: function() {
+        return this._hasNext;
+    },
+    next: function() {
+        if (this._hasNext) {
+            var next = this._next;
+            this._findNext();
+            return next;
+        }
+        return null;
+    },
+    _findNext: function() {
+        var unit = this._unit;
+        while (++this._currentIndex < this._maxIndex) {
+            var evt = this._events.elementAt(this._currentIndex);
+            if (unit.compare(evt.getStart(), this._endDate) < 0 && unit.compare(evt.getEnd(), this._startDate) > 0) {
+                this._next = evt;
+                this._hasNext = !0;
+                return;
+            }
+        }
+        this._next = null;
+        this._hasNext = !1;
+    }
+};
+
+Timeline.EventIndex._AllIterator = function(events) {
+    this._events = events;
+    this._index = 0;
+};
+
+Timeline.EventIndex._AllIterator.prototype = {
+    hasNext: function() {
+        return this._index < this._events.length();
+    },
+    next: function() {
+        return this._index < this._events.length() ? this._events.elementAt(this._index++) : null;
+    }
+};
+
+Timeline.DateTime = new Object;
+
+Timeline.DateTime.MILLISECOND = 0;
+
+Timeline.DateTime.SECOND = 1;
+
+Timeline.DateTime.MINUTE = 2;
+
+Timeline.DateTime.HOUR = 3;
+
+Timeline.DateTime.DAY = 4;
+
+Timeline.DateTime.WEEK = 5;
+
+Timeline.DateTime.MONTH = 6;
+
+Timeline.DateTime.YEAR = 7;
+
+Timeline.DateTime.DECADE = 8;
+
+Timeline.DateTime.CENTURY = 9;
+
+Timeline.DateTime.MILLENNIUM = 10;
+
+Timeline.DateTime.EPOCH = -1;
+
+Timeline.DateTime.ERA = -2;
+
+Timeline.DateTime.gregorianUnitLengths = [];
+
+(function() {
+    var d = Timeline.DateTime, a = d.gregorianUnitLengths;
+    a[d.MILLISECOND] = 1;
+    a[d.SECOND] = 1e3;
+    a[d.MINUTE] = a[d.SECOND] * 60;
+    a[d.HOUR] = a[d.MINUTE] * 60;
+    a[d.DAY] = a[d.HOUR] * 24;
+    a[d.WEEK] = a[d.DAY] * 7;
+    a[d.MONTH] = a[d.DAY] * 31;
+    a[d.YEAR] = a[d.DAY] * 365;
+    a[d.DECADE] = a[d.YEAR] * 10;
+    a[d.CENTURY] = a[d.YEAR] * 100;
+    a[d.MILLENNIUM] = a[d.YEAR] * 1e3;
+})();
+
+Timeline.DateTime.parseGregorianDateTime = function(o) {
+    if (o == null) return null;
+    if (o instanceof Date) return o;
+    var s = o.toString();
+    if (s.length > 0 && s.length < 8) {
+        var space = s.indexOf(" ");
+        if (space > 0) {
+            var year = parseInt(s.substr(0, space)), suffix = s.substr(space + 1);
+            suffix.toLowerCase() == "bc" && (year = 1 - year);
+        } else var year = parseInt(s);
+        var d = new Date(0);
+        d.setUTCFullYear(year);
+        return d;
+    }
+    try {
+        return new Date(Date.parse(s));
+    } catch (e) {
+        return null;
+    }
+};
+
+Timeline.DateTime._iso8601DateRegExp = "^(-?)([0-9]{4})(" + [ "(-?([0-9]{2})(-?([0-9]{2}))?)", "(-?([0-9]{3}))", "(-?W([0-9]{2})(-?([1-7]))?)" ].join("|") + ")?$";
+
+Timeline.DateTime.setIso8601Date = function(dateObject, string) {
+    var regexp = Timeline.DateTime._iso8601DateRegExp, d = string.match(new RegExp(regexp));
+    if (!d) throw new Error("Invalid date string: " + string);
+    var sign = d[1] == "-" ? -1 : 1, year = sign * d[2], month = d[5], date = d[7], dayofyear = d[9], week = d[11], dayofweek = d[13] ? d[13] : 1;
+    dateObject.setUTCFullYear(year);
+    if (dayofyear) {
+        dateObject.setUTCMonth(0);
+        dateObject.setUTCDate(Number(dayofyear));
+    } else if (week) {
+        dateObject.setUTCMonth(0);
+        dateObject.setUTCDate(1);
+        var gd = dateObject.getUTCDay(), day = gd ? gd : 7, offset = Number(dayofweek) + 7 * Number(week);
+        day <= 4 ? dateObject.setUTCDate(offset + 1 - day) : dateObject.setUTCDate(offset + 8 - day);
+    } else {
+        if (month) {
+            dateObject.setUTCDate(1);
+            dateObject.setUTCMonth(month - 1);
+        }
+        date && dateObject.setUTCDate(date);
+    }
+    return dateObject;
+};
+
+Timeline.DateTime.setIso8601Time = function(dateObject, string) {
+    var timezone = "Z|(([-+])([0-9]{2})(:?([0-9]{2}))?)$", d = string.match(new RegExp(timezone)), offset = 0;
+    if (d) {
+        if (d[0] != "Z") {
+            offset = Number(d[3]) * 60 + Number(d[5]);
+            offset *= d[2] == "-" ? 1 : -1;
+        }
+        string = string.substr(0, string.length - d[0].length);
+    }
+    var regexp = "^([0-9]{2})(:?([0-9]{2})(:?([0-9]{2})(.([0-9]+))?)?)?$", d = string.match(new RegExp(regexp));
+    if (!d) {
+        dojo.debug("invalid time string: " + string);
+        return !1;
+    }
+    var hours = d[1], mins = Number(d[3] ? d[3] : 0), secs = d[5] ? d[5] : 0, ms = d[7] ? Number("0." + d[7]) * 1e3 : 0;
+    dateObject.setUTCHours(hours);
+    dateObject.setUTCMinutes(mins);
+    dateObject.setUTCSeconds(secs);
+    dateObject.setUTCMilliseconds(ms);
+    return dateObject;
+};
+
+Timeline.DateTime.setIso8601 = function(dateObject, string) {
+    var comps = string.indexOf("T") == -1 ? string.split(" ") : string.split("T");
+    Timeline.DateTime.setIso8601Date(dateObject, comps[0]);
+    comps.length == 2 && Timeline.DateTime.setIso8601Time(dateObject, comps[1]);
+    return dateObject;
+};
+
+Timeline.DateTime.parseIso8601DateTime = function(string) {
+    try {
+        return Timeline.DateTime.setIso8601(new Date(0), string);
+    } catch (e) {
+        return null;
+    }
+};
+
+Timeline.DateTime.roundDownToInterval = function(date, intervalUnit, timeZone, multiple, firstDayOfWeek) {
+    var timeShift = timeZone * Timeline.DateTime.gregorianUnitLengths[Timeline.DateTime.HOUR], date2 = new Date(date.getTime() + timeShift), clearInDay = function(d) {
+        d.setUTCMilliseconds(0);
+        d.setUTCSeconds(0);
+        d.setUTCMinutes(0);
+        d.setUTCHours(0);
+    }, clearInYear = function(d) {
+        clearInDay(d);
+        d.setUTCDate(1);
+        d.setUTCMonth(0);
+    };
+    switch (intervalUnit) {
+      case Timeline.DateTime.MILLISECOND:
+        var x = date2.getUTCMilliseconds();
+        date2.setUTCMilliseconds(x - x % multiple);
+        break;
+      case Timeline.DateTime.SECOND:
+        date2.setUTCMilliseconds(0);
+        var x = date2.getUTCSeconds();
+        date2.setUTCSeconds(x - x % multiple);
+        break;
+      case Timeline.DateTime.MINUTE:
+        date2.setUTCMilliseconds(0);
+        date2.setUTCSeconds(0);
+        var x = date2.getUTCMinutes();
+        date2.setTime(date2.getTime() - x % multiple * Timeline.DateTime.gregorianUnitLengths[Timeline.DateTime.MINUTE]);
+        break;
+      case Timeline.DateTime.HOUR:
+        date2.setUTCMilliseconds(0);
+        date2.setUTCSeconds(0);
+        date2.setUTCMinutes(0);
+        var x = date2.getUTCHours();
+        date2.setUTCHours(x - x % multiple);
+        break;
+      case Timeline.DateTime.DAY:
+        clearInDay(date2);
+        break;
+      case Timeline.DateTime.WEEK:
+        clearInDay(date2);
+        var d = (date2.getUTCDay() + 7 - firstDayOfWeek) % 7;
+        date2.setTime(date2.getTime() - d * Timeline.DateTime.gregorianUnitLengths[Timeline.DateTime.DAY]);
+        break;
+      case Timeline.DateTime.MONTH:
+        clearInDay(date2);
+        date2.setUTCDate(1);
+        var x = date2.getUTCMonth();
+        date2.setUTCMonth(x - x % multiple);
+        break;
+      case Timeline.DateTime.YEAR:
+        clearInYear(date2);
+        var x = date2.getUTCFullYear();
+        date2.setUTCFullYear(x - x % multiple);
+        break;
+      case Timeline.DateTime.DECADE:
+        clearInYear(date2);
+        date2.setUTCFullYear(Math.floor(date2.getUTCFullYear() / 10) * 10);
+        break;
+      case Timeline.DateTime.CENTURY:
+        clearInYear(date2);
+        date2.setUTCFullYear(Math.floor(date2.getUTCFullYear() / 100) * 100);
+        break;
+      case Timeline.DateTime.MILLENNIUM:
+        clearInYear(date2);
+        date2.setUTCFullYear(Math.floor(date2.getUTCFullYear() / 1e3) * 1e3);
+    }
+    date.setTime(date2.getTime() - timeShift);
+};
+
+Timeline.DateTime.roundUpToInterval = function(date, intervalUnit, timeZone, multiple, firstDayOfWeek) {
+    var originalTime = date.getTime();
+    Timeline.DateTime.roundDownToInterval(date, intervalUnit, timeZone, multiple, firstDayOfWeek);
+    date.getTime() < originalTime && date.setTime(date.getTime() + Timeline.DateTime.gregorianUnitLengths[intervalUnit] * multiple);
+};
+
+Timeline.DateTime.incrementByInterval = function(date, intervalUnit) {
+    switch (intervalUnit) {
+      case Timeline.DateTime.MILLISECOND:
+        date.setTime(date.getTime() + 1);
+        break;
+      case Timeline.DateTime.SECOND:
+        date.setTime(date.getTime() + 1e3);
+        break;
+      case Timeline.DateTime.MINUTE:
+        date.setTime(date.getTime() + Timeline.DateTime.gregorianUnitLengths[Timeline.DateTime.MINUTE]);
+        break;
+      case Timeline.DateTime.HOUR:
+        date.setTime(date.getTime() + Timeline.DateTime.gregorianUnitLengths[Timeline.DateTime.HOUR]);
+        break;
+      case Timeline.DateTime.DAY:
+        date.setUTCDate(date.getUTCDate() + 1);
+        break;
+      case Timeline.DateTime.WEEK:
+        date.setUTCDate(date.getUTCDate() + 7);
+        break;
+      case Timeline.DateTime.MONTH:
+        date.setUTCMonth(date.getUTCMonth() + 1);
+        break;
+      case Timeline.DateTime.YEAR:
+        date.setUTCFullYear(date.getUTCFullYear() + 1);
+        break;
+      case Timeline.DateTime.DECADE:
+        date.setUTCFullYear(date.getUTCFullYear() + 10);
+        break;
+      case Timeline.DateTime.CENTURY:
+        date.setUTCFullYear(date.getUTCFullYear() + 100);
+        break;
+      case Timeline.DateTime.MILLENNIUM:
+        date.setUTCFullYear(date.getUTCFullYear() + 1e3);
+    }
+};
+
+Timeline.DateTime.removeTimeZoneOffset = function(date, timeZone) {
+    return new Date(date.getTime() + timeZone * Timeline.DateTime.gregorianUnitLengths[Timeline.DateTime.HOUR]);
+};
 
-Timeline.strings={};Timeline.create=function(elmt,bandInfos,orientation,unit){return new Timeline._Impl(elmt,bandInfos,orientation,unit);};Timeline.HORIZONTAL=0;Timeline.VERTICAL=1;Timeline._defaultTheme=null;Timeline.createBandInfo=function(params){var theme=("theme"in params)?params.theme:Timeline.getDefaultTheme();var eventSource=("eventSource"in params)?params.eventSource:null;var ether=new Timeline.LinearEther({centersOn:("date"in params)?params.date:new Date(),interval:Timeline.DateTime.gregorianUnitLengths[params.intervalUnit],pixelsPerInterval:params.intervalPixels});var etherPainter=new Timeline.GregorianEtherPainter({unit:params.intervalUnit,multiple:("multiple"in params)?params.multiple:1,theme:theme,align:("align"in params)?params.align:undefined});var layout=new Timeline.StaticTrackBasedLayout({eventSource:eventSource,ether:ether,showText:("showEventText"in params)?params.showEventText:true,theme:theme});var eventPainterParams={showText:("showEventText"in params)?params.showEventText:true,layout:layout,theme:theme};if("trackHeight"in params){eventPainterParams.trackHeight=params.trackHeight;}
-if("trackGap"in params){eventPainterParams.trackGap=params.trackGap;}
-var eventPainter=new Timeline.DurationEventPainter(eventPainterParams);return{width:params.width,eventSource:eventSource,timeZone:("timeZone"in params)?params.timeZone:0,ether:ether,etherPainter:etherPainter,eventPainter:eventPainter};};Timeline.createHotZoneBandInfo=function(params){var theme=("theme"in params)?params.theme:Timeline.getDefaultTheme();var eventSource=("eventSource"in params)?params.eventSource:null;var ether=new Timeline.HotZoneEther({centersOn:("date"in params)?params.date:new Date(),interval:Timeline.DateTime.gregorianUnitLengths[params.intervalUnit],pixelsPerInterval:params.intervalPixels,zones:params.zones});var etherPainter=new Timeline.HotZoneGregorianEtherPainter({unit:params.intervalUnit,zones:params.zones,theme:theme,align:("align"in params)?params.align:undefined});var layout=new Timeline.StaticTrackBasedLayout({eventSource:eventSource,ether:ether,theme:theme});var eventPainterParams={showText:("showEventText"in params)?params.showEventText:true,layout:layout,theme:theme};if("trackHeight"in params){eventPainterParams.trackHeight=params.trackHeight;}
-if("trackGap"in params){eventPainterParams.trackGap=params.trackGap;}
-var eventPainter=new Timeline.DurationEventPainter(eventPainterParams);return{width:params.width,eventSource:eventSource,timeZone:("timeZone"in params)?params.timeZone:0,ether:ether,etherPainter:etherPainter,eventPainter:eventPainter};};Timeline.getDefaultTheme=function(){if(Timeline._defaultTheme==null){Timeline._defaultTheme=Timeline.ClassicTheme.create(Timeline.Platform.getDefaultLocale());}
-return Timeline._defaultTheme;};Timeline.setDefaultTheme=function(theme){Timeline._defaultTheme=theme;};Timeline.loadXML=function(url,f){var fError=function(statusText,status,xmlhttp){alert("Failed to load data xml from "+url+"\n"+statusText);};var fDone=function(xmlhttp){var xml=xmlhttp.responseXML;if(!xml.documentElement&&xmlhttp.responseStream){xml.load(xmlhttp.responseStream);}
-f(xml,url);};Timeline.XmlHttp.get(url,fError,fDone);};Timeline.loadJSON=function(url,f){var fError=function(statusText,status,xmlhttp){alert("Failed to load json data from "+url+"\n"+statusText);};var fDone=function(xmlhttp){throw('break');};Timeline.XmlHttp.get(url,fError,fDone);};Timeline._Impl=function(elmt,bandInfos,orientation,unit){this._containerDiv=elmt;this._bandInfos=bandInfos;this._orientation=orientation==null?Timeline.HORIZONTAL:orientation;this._unit=(unit!=null)?unit:Timeline.NativeDateUnit;this._initialize();};Timeline._Impl.prototype.dispose=function(){for(var i=0;i<this._bands.length;i++){this._bands[i].dispose();}
-this._bands=null;this._bandInfos=null;this._containerDiv.innerHTML="";};Timeline._Impl.prototype.getBandCount=function(){return this._bands.length;};Timeline._Impl.prototype.getBand=function(index){return this._bands[index];};Timeline._Impl.prototype.layout=function(){this._distributeWidths();};Timeline._Impl.prototype.paint=function(){for(var i=0;i<this._bands.length;i++){this._bands[i].paint();}};Timeline._Impl.prototype.getDocument=function(){return this._containerDiv.ownerDocument;};Timeline._Impl.prototype.addDiv=function(div){this._containerDiv.appendChild(div);};Timeline._Impl.prototype.removeDiv=function(div){this._containerDiv.removeChild(div);};Timeline._Impl.prototype.isHorizontal=function(){return this._orientation==Timeline.HORIZONTAL;};Timeline._Impl.prototype.isVertical=function(){return this._orientation==Timeline.VERTICAL;};Timeline._Impl.prototype.getPixelLength=function(){return this._orientation==Timeline.HORIZONTAL?this._containerDiv.offsetWidth:this._containerDiv.offsetHeight;};Timeline._Impl.prototype.getPixelWidth=function(){return this._orientation==Timeline.VERTICAL?this._containerDiv.offsetWidth:this._containerDiv.offsetHeight;};Timeline._Impl.prototype.getUnit=function(){return this._unit;};Timeline._Impl.prototype.loadXML=function(url,f){var tl=this;var fError=function(statusText,status,xmlhttp){alert("Failed to load data xml from "+url+"\n"+statusText);tl.hideLoadingMessage();};var fDone=function(xmlhttp){try{var xml=xmlhttp.responseXML;if(!xml.documentElement&&xmlhttp.responseStream){xml.load(xmlhttp.responseStream);}
-f(xml,url);}finally{tl.hideLoadingMessage();}};this.showLoadingMessage();window.setTimeout(function(){Timeline.XmlHttp.get(url,fError,fDone);},0);};Timeline._Impl.prototype.loadJSON=function(url,f){var tl=this;var fError=function(statusText,status,xmlhttp){alert("Failed to load json data from "+url+"\n"+statusText);tl.hideLoadingMessage();};var fDone=function(xmlhttp){try{throw('break2');}finally{tl.hideLoadingMessage();}};this.showLoadingMessage();window.setTimeout(function(){Timeline.XmlHttp.get(url,fError,fDone);},0);};Timeline._Impl.prototype._initialize=function(){var containerDiv=this._containerDiv;var doc=containerDiv.ownerDocument;containerDiv.className=containerDiv.className.split(" ").concat("timeline-container").join(" ");while(containerDiv.firstChild){containerDiv.removeChild(containerDiv.firstChild);}
-var elmtCopyright=Timeline.Graphics.createTranslucentImage(doc,Timeline.urlPrefix+(this.isHorizontal()?"images/copyright-vertical.png":"images/copyright.png"));elmtCopyright.className="timeline-copyright";elmtCopyright.title="Timeline (c) SIMILE - http://simile.mit.edu/timeline/";Timeline.DOM.registerEvent(elmtCopyright,"click",function(){window.location="http://simile.mit.edu/timeline/";});containerDiv.appendChild(elmtCopyright);this._bands=[];for(var i=0;i<this._bandInfos.length;i++){var band=new Timeline._Band(this,this._bandInfos[i],i);this._bands.push(band);}
-this._distributeWidths();for(var i=0;i<this._bandInfos.length;i++){var bandInfo=this._bandInfos[i];if("syncWith"in bandInfo){this._bands[i].setSyncWithBand(this._bands[bandInfo.syncWith],("highlight"in bandInfo)?bandInfo.highlight:false);}}
-var message=Timeline.Graphics.createMessageBubble(doc);message.containerDiv.className="timeline-message-container";containerDiv.appendChild(message.containerDiv);message.contentDiv.className="timeline-message";message.contentDiv.innerHTML="<img src='"+Timeline.urlPrefix+"images/progress-running.gif' /> Loading...";this.showLoadingMessage=function(){message.containerDiv.style.display="block";};this.hideLoadingMessage=function(){message.containerDiv.style.display="none";};};Timeline._Impl.prototype._distributeWidths=function(){var length=this.getPixelLength();var width=this.getPixelWidth();var cumulativeWidth=0;for(var i=0;i<this._bands.length;i++){var band=this._bands[i];var bandInfos=this._bandInfos[i];var widthString=bandInfos.width;var x=widthString.indexOf("%");if(x>0){var percent=parseInt(widthString.substr(0,x));var bandWidth=percent*width/100;}else{var bandWidth=parseInt(widthString);}
-band.setBandShiftAndWidth(cumulativeWidth,bandWidth);band.setViewLength(length);cumulativeWidth+=bandWidth;}};Timeline._Band=function(timeline,bandInfo,index){this._timeline=timeline;this._bandInfo=bandInfo;this._index=index;this._locale=("locale"in bandInfo)?bandInfo.locale:Timeline.Platform.getDefaultLocale();this._timeZone=("timeZone"in bandInfo)?bandInfo.timeZone:0;this._labeller=("labeller"in bandInfo)?bandInfo.labeller:timeline.getUnit().createLabeller(this._locale,this._timeZone);this._dragging=false;this._changing=false;this._originalScrollSpeed=5;this._scrollSpeed=this._originalScrollSpeed;this._onScrollListeners=[];var b=this;this._syncWithBand=null;this._syncWithBandHandler=function(band){b._onHighlightBandScroll();};this._selectorListener=function(band){b._onHighlightBandScroll();};var inputDiv=this._timeline.getDocument().createElement("div");inputDiv.className="timeline-band-input";this._timeline.addDiv(inputDiv);this._keyboardInput=document.createElement("input");this._keyboardInput.type="text";inputDiv.appendChild(this._keyboardInput);Timeline.DOM.registerEventWithObject(this._keyboardInput,"keydown",this,this._onKeyDown);Timeline.DOM.registerEventWithObject(this._keyboardInput,"keyup",this,this._onKeyUp);this._div=this._timeline.getDocument().createElement("div");this._div.className="timeline-band";this._timeline.addDiv(this._div);Timeline.DOM.registerEventWithObject(this._div,"mousedown",this,this._onMouseDown);Timeline.DOM.registerEventWithObject(this._div,"mousemove",this,this._onMouseMove);Timeline.DOM.registerEventWithObject(this._div,"mouseup",this,this._onMouseUp);Timeline.DOM.registerEventWithObject(this._div,"mouseout",this,this._onMouseOut);Timeline.DOM.registerEventWithObject(this._div,"dblclick",this,this._onDblClick);this._innerDiv=this._timeline.getDocument().createElement("div");this._innerDiv.className="timeline-band-inner";this._div.appendChild(this._innerDiv);this._ether=bandInfo.ether;bandInfo.ether.initialize(timeline);this._etherPainter=bandInfo.etherPainter;bandInfo.etherPainter.initialize(this,timeline);this._eventSource=bandInfo.eventSource;if(this._eventSource){this._eventListener={onAddMany:function(){b._onAddMany();},onClear:function(){b._onClear();}}
-this._eventSource.addListener(this._eventListener);}
-this._eventPainter=bandInfo.eventPainter;bandInfo.eventPainter.initialize(this,timeline);this._decorators=("decorators"in bandInfo)?bandInfo.decorators:[];for(var i=0;i<this._decorators.length;i++){this._decorators[i].initialize(this,timeline);}
-this._bubble=null;};Timeline._Band.SCROLL_MULTIPLES=5;Timeline._Band.prototype.dispose=function(){this.closeBubble();if(this._eventSource){this._eventSource.removeListener(this._eventListener);this._eventListener=null;this._eventSource=null;}
-this._timeline=null;this._bandInfo=null;this._labeller=null;this._ether=null;this._etherPainter=null;this._eventPainter=null;this._decorators=null;this._onScrollListeners=null;this._syncWithBandHandler=null;this._selectorListener=null;this._div=null;this._innerDiv=null;this._keyboardInput=null;this._bubble=null;};Timeline._Band.prototype.addOnScrollListener=function(listener){this._onScrollListeners.push(listener);};Timeline._Band.prototype.removeOnScrollListener=function(listener){for(var i=0;i<this._onScrollListeners.length;i++){if(this._onScrollListeners[i]==listener){this._onScrollListeners.splice(i,1);break;}}};Timeline._Band.prototype.setSyncWithBand=function(band,highlight){if(this._syncWithBand){this._syncWithBand.removeOnScrollListener(this._syncWithBandHandler);}
-this._syncWithBand=band;this._syncWithBand.addOnScrollListener(this._syncWithBandHandler);this._highlight=highlight;this._positionHighlight();};Timeline._Band.prototype.getLocale=function(){return this._locale;};Timeline._Band.prototype.getTimeZone=function(){return this._timeZone;};Timeline._Band.prototype.getLabeller=function(){return this._labeller;};Timeline._Band.prototype.getIndex=function(){return this._index;};Timeline._Band.prototype.getEther=function(){return this._ether;};Timeline._Band.prototype.getEtherPainter=function(){return this._etherPainter;};Timeline._Band.prototype.getEventSource=function(){return this._eventSource;};Timeline._Band.prototype.getEventPainter=function(){return this._eventPainter;};Timeline._Band.prototype.layout=function(){this.paint();};Timeline._Band.prototype.paint=function(){this._etherPainter.paint();this._paintDecorators();this._paintEvents();};Timeline._Band.prototype.softLayout=function(){this.softPaint();};Timeline._Band.prototype.softPaint=function(){this._etherPainter.softPaint();this._softPaintDecorators();this._softPaintEvents();};Timeline._Band.prototype.setBandShiftAndWidth=function(shift,width){var inputDiv=this._keyboardInput.parentNode;var middle=shift+Math.floor(width/2);if(this._timeline.isHorizontal()){this._div.style.top=shift+"px";this._div.style.height=width+"px";inputDiv.style.top=middle+"px";inputDiv.style.left="-1em";}else{this._div.style.left=shift+"px";this._div.style.width=width+"px";inputDiv.style.left=middle+"px";inputDiv.style.top="-1em";}};Timeline._Band.prototype.getViewWidth=function(){if(this._timeline.isHorizontal()){return this._div.offsetHeight;}else{return this._div.offsetWidth;}};Timeline._Band.prototype.setViewLength=function(length){this._viewLength=length;this._recenterDiv();this._onChanging();};Timeline._Band.prototype.getViewLength=function(){return this._viewLength;};Timeline._Band.prototype.getTotalViewLength=function(){return Timeline._Band.SCROLL_MULTIPLES*this._viewLength;};Timeline._Band.prototype.getViewOffset=function(){return this._viewOffset;};Timeline._Band.prototype.getMinDate=function(){return this._ether.pixelOffsetToDate(this._viewOffset);};Timeline._Band.prototype.getMaxDate=function(){return this._ether.pixelOffsetToDate(this._viewOffset+Timeline._Band.SCROLL_MULTIPLES*this._viewLength);};Timeline._Band.prototype.getMinVisibleDate=function(){return this._ether.pixelOffsetToDate(0);};Timeline._Band.prototype.getMaxVisibleDate=function(){return this._ether.pixelOffsetToDate(this._viewLength);};Timeline._Band.prototype.getCenterVisibleDate=function(){return this._ether.pixelOffsetToDate(this._viewLength/2);};Timeline._Band.prototype.setMinVisibleDate=function(date){if(!this._changing){this._moveEther(Math.round(-this._ether.dateToPixelOffset(date)));}};Timeline._Band.prototype.setMaxVisibleDate=function(date){if(!this._changing){this._moveEther(Math.round(this._viewLength-this._ether.dateToPixelOffset(date)));}};Timeline._Band.prototype.setCenterVisibleDate=function(date){if(!this._changing){this._moveEther(Math.round(this._viewLength/2-this._ether.dateToPixelOffset(date)));}};Timeline._Band.prototype.dateToPixelOffset=function(date){return this._ether.dateToPixelOffset(date)-this._viewOffset;};Timeline._Band.prototype.pixelOffsetToDate=function(pixels){return this._ether.pixelOffsetToDate(pixels+this._viewOffset);};Timeline._Band.prototype.createLayerDiv=function(zIndex){var div=this._timeline.getDocument().createElement("div");div.className="timeline-band-layer";div.style.zIndex=zIndex;this._innerDiv.appendChild(div);var innerDiv=this._timeline.getDocument().createElement("div");innerDiv.className="timeline-band-layer-inner";if(Timeline.Platform.browser.isIE){innerDiv.style.cursor="move";}else{innerDiv.style.cursor="-moz-grab";}
-div.appendChild(innerDiv);return innerDiv;};Timeline._Band.prototype.removeLayerDiv=function(div){this._innerDiv.removeChild(div.parentNode);};Timeline._Band.prototype.closeBubble=function(){if(this._bubble!=null){this._bubble.close();this._bubble=null;}};Timeline._Band.prototype.openBubbleForPoint=function(pageX,pageY,width,height){this.closeBubble();this._bubble=Timeline.Graphics.createBubbleForPoint(this._timeline.getDocument(),pageX,pageY,width,height);return this._bubble.content;};Timeline._Band.prototype.scrollToCenter=function(date){var pixelOffset=this._ether.dateToPixelOffset(date);if(pixelOffset<-this._viewLength/2){this.setCenterVisibleDate(this.pixelOffsetToDate(pixelOffset+this._viewLength));}else if(pixelOffset>3*this._viewLength/2){this.setCenterVisibleDate(this.pixelOffsetToDate(pixelOffset-this._viewLength));}
-this._autoScroll(Math.round(this._viewLength/2-this._ether.dateToPixelOffset(date)));};Timeline._Band.prototype._onMouseDown=function(innerFrame,evt,target){this.closeBubble();this._dragging=true;this._dragX=evt.clientX;this._dragY=evt.clientY;};Timeline._Band.prototype._onMouseMove=function(innerFrame,evt,target){if(this._dragging){var diffX=evt.clientX-this._dragX;var diffY=evt.clientY-this._dragY;this._dragX=evt.clientX;this._dragY=evt.clientY;this._moveEther(this._timeline.isHorizontal()?diffX:diffY);this._positionHighlight();}};Timeline._Band.prototype._onMouseUp=function(innerFrame,evt,target){this._dragging=false;this._keyboardInput.focus();};Timeline._Band.prototype._onMouseOut=function(innerFrame,evt,target){var coords=Timeline.DOM.getEventRelativeCoordinates(evt,innerFrame);coords.x+=this._viewOffset;if(coords.x<0||coords.x>innerFrame.offsetWidth||coords.y<0||coords.y>innerFrame.offsetHeight){this._dragging=false;}};Timeline._Band.prototype._onDblClick=function(innerFrame,evt,target){var coords=Timeline.DOM.getEventRelativeCoordinates(evt,innerFrame);var distance=coords.x-(this._viewLength/2-this._viewOffset);this._autoScroll(-distance);};Timeline._Band.prototype._onKeyDown=function(keyboardInput,evt,target){if(!this._dragging){switch(evt.keyCode){case 27:break;case 37:case 38:this._scrollSpeed=Math.min(50,Math.abs(this._scrollSpeed*1.05));this._moveEther(this._scrollSpeed);break;case 39:case 40:this._scrollSpeed=-Math.min(50,Math.abs(this._scrollSpeed*1.05));this._moveEther(this._scrollSpeed);break;default:return true;}
-this.closeBubble();Timeline.DOM.cancelEvent(evt);return false;}
-return true;};Timeline._Band.prototype._onKeyUp=function(keyboardInput,evt,target){if(!this._dragging){this._scrollSpeed=this._originalScrollSpeed;switch(evt.keyCode){case 35:this.setCenterVisibleDate(this._eventSource.getLatestDate());break;case 36:this.setCenterVisibleDate(this._eventSource.getEarliestDate());break;case 33:this._autoScroll(this._timeline.getPixelLength());break;case 34:this._autoScroll(-this._timeline.getPixelLength());break;default:return true;}
-this.closeBubble();Timeline.DOM.cancelEvent(evt);return false;}
-return true;};Timeline._Band.prototype._autoScroll=function(distance){var b=this;var a=Timeline.Graphics.createAnimation(function(abs,diff){b._moveEther(diff);},0,distance,1000);a.run();};Timeline._Band.prototype._moveEther=function(shift){this.closeBubble();this._viewOffset+=shift;this._ether.shiftPixels(-shift);if(this._timeline.isHorizontal()){this._div.style.left=this._viewOffset+"px";}else{this._div.style.top=this._viewOffset+"px";}
-if(this._viewOffset>-this._viewLength*0.5||this._viewOffset<-this._viewLength*(Timeline._Band.SCROLL_MULTIPLES-1.5)){this._recenterDiv();}else{this.softLayout();}
-this._onChanging();}
-Timeline._Band.prototype._onChanging=function(){this._changing=true;this._fireOnScroll();this._setSyncWithBandDate();this._changing=false;};Timeline._Band.prototype._fireOnScroll=function(){for(var i=0;i<this._onScrollListeners.length;i++){this._onScrollListeners[i](this);}};Timeline._Band.prototype._setSyncWithBandDate=function(){if(this._syncWithBand){var centerDate=this._ether.pixelOffsetToDate(this.getViewLength()/2);this._syncWithBand.setCenterVisibleDate(centerDate);}};Timeline._Band.prototype._onHighlightBandScroll=function(){if(this._syncWithBand){var centerDate=this._syncWithBand.getCenterVisibleDate();var centerPixelOffset=this._ether.dateToPixelOffset(centerDate);this._moveEther(Math.round(this._viewLength/2-centerPixelOffset));if(this._highlight){this._etherPainter.setHighlight(this._syncWithBand.getMinVisibleDate(),this._syncWithBand.getMaxVisibleDate());}}};Timeline._Band.prototype._onAddMany=function(){this._paintEvents();};Timeline._Band.prototype._onClear=function(){this._paintEvents();};Timeline._Band.prototype._positionHighlight=function(){if(this._syncWithBand){var startDate=this._syncWithBand.getMinVisibleDate();var endDate=this._syncWithBand.getMaxVisibleDate();if(this._highlight){this._etherPainter.setHighlight(startDate,endDate);}}};Timeline._Band.prototype._recenterDiv=function(){this._viewOffset=-this._viewLength*(Timeline._Band.SCROLL_MULTIPLES-1)/2;if(this._timeline.isHorizontal()){this._div.style.left=this._viewOffset+"px";this._div.style.width=(Timeline._Band.SCROLL_MULTIPLES*this._viewLength)+"px";}else{this._div.style.top=this._viewOffset+"px";this._div.style.height=(Timeline._Band.SCROLL_MULTIPLES*this._viewLength)+"px";}
-this.layout();};Timeline._Band.prototype._paintEvents=function(){this._eventPainter.paint();};Timeline._Band.prototype._softPaintEvents=function(){this._eventPainter.softPaint();};Timeline._Band.prototype._paintDecorators=function(){for(var i=0;i<this._decorators.length;i++){this._decorators[i].paint();}};Timeline._Band.prototype._softPaintDecorators=function(){for(var i=0;i<this._decorators.length;i++){this._decorators[i].softPaint();}};
-
-/* platform.js */
-
-Timeline.Platform.os={isMac:false,isWin:false,isWin32:false,isUnix:false};Timeline.Platform.browser={isIE:false,isNetscape:false,isMozilla:false,isFirefox:false,isOpera:false,isSafari:false,majorVersion:0,minorVersion:0};(function(){var an=navigator.appName.toLowerCase();var ua=navigator.userAgent.toLowerCase();Timeline.Platform.os.isMac=(ua.indexOf('mac')!=-1);Timeline.Platform.os.isWin=(ua.indexOf('win')!=-1);Timeline.Platform.os.isWin32=Timeline.Platform.isWin&&(ua.indexOf('95')!=-1||ua.indexOf('98')!=-1||ua.indexOf('nt')!=-1||ua.indexOf('win32')!=-1||ua.indexOf('32bit')!=-1);Timeline.Platform.os.isUnix=(ua.indexOf('x11')!=-1);Timeline.Platform.browser.isIE=(an.indexOf("microsoft")!=-1);Timeline.Platform.browser.isNetscape=(an.indexOf("netscape")!=-1);Timeline.Platform.browser.isMozilla=(ua.indexOf("mozilla")!=-1);Timeline.Platform.browser.isFirefox=(ua.indexOf("firefox")!=-1);Timeline.Platform.browser.isOpera=(an.indexOf("opera")!=-1);var parseVersionString=function(s){var a=s.split(".");Timeline.Platform.browser.majorVersion=parseInt(a[0]);Timeline.Platform.browser.minorVersion=parseInt(a[1]);};var indexOf=function(s,sub,start){var i=s.indexOf(sub,start);return i>=0?i:s.length;};if(Timeline.Platform.browser.isMozilla){var offset=ua.indexOf("mozilla/");if(offset>=0){parseVersionString(ua.substring(offset+8,indexOf(ua," ",offset)));}}
-if(Timeline.Platform.browser.isIE){var offset=ua.indexOf("msie ");if(offset>=0){parseVersionString(ua.substring(offset+5,indexOf(ua,";",offset)));}}
-if(Timeline.Platform.browser.isNetscape){var offset=ua.indexOf("rv:");if(offset>=0){parseVersionString(ua.substring(offset+3,indexOf(ua,")",offset)));}}
-if(Timeline.Platform.browser.isFirefox){var offset=ua.indexOf("firefox/");if(offset>=0){parseVersionString(ua.substring(offset+8,indexOf(ua," ",offset)));}}})();Timeline.Platform.getDefaultLocale=function(){return Timeline.Platform.clientLocale;};
-
-/* data-structure.js */
-
-Timeline.SortedArray=function(compare,initialArray){this._a=(initialArray instanceof Array)?initialArray:[];this._compare=compare;};Timeline.SortedArray.prototype.add=function(elmt){var sa=this;var index=this.find(function(elmt2){return sa._compare(elmt2,elmt);});if(index<this._a.length){this._a.splice(index,0,elmt);}else{this._a.push(elmt);}};Timeline.SortedArray.prototype.remove=function(elmt){var sa=this;var index=this.find(function(elmt2){return sa._compare(elmt2,elmt);});while(index<this._a.length&&this._compare(this._a[index],elmt)==0){if(this._a[index]==elmt){this._a.splice(index,1);return true;}else{index++;}}
-return false;};Timeline.SortedArray.prototype.removeAll=function(){this._a=[];};Timeline.SortedArray.prototype.elementAt=function(index){return this._a[index];};Timeline.SortedArray.prototype.length=function(){return this._a.length;};Timeline.SortedArray.prototype.find=function(compare){var a=0;var b=this._a.length;while(a<b){var mid=Math.floor((a+b)/2);var c=compare(this._a[mid]);if(mid==a){return c<0?a+1:a;}else if(c<0){a=mid;}else{b=mid;}}
-return a;};Timeline.SortedArray.prototype.getFirst=function(){return(this._a.length>0)?this._a[0]:null;};Timeline.SortedArray.prototype.getLast=function(){return(this._a.length>0)?this._a[this._a.length-1]:null;};Timeline.EventIndex=function(unit){var eventIndex=this;this._unit=(unit!=null)?unit:Timeline.NativeDateUnit;this._events=new Timeline.SortedArray(function(event1,event2){return eventIndex._unit.compare(event1.getStart(),event2.getStart());});this._indexed=true;};Timeline.EventIndex.prototype.getUnit=function(){return this._unit;};Timeline.EventIndex.prototype.add=function(evt){this._events.add(evt);this._indexed=false;};Timeline.EventIndex.prototype.removeAll=function(){this._events.removeAll();this._indexed=false;};Timeline.EventIndex.prototype.getCount=function(){return this._events.length();};Timeline.EventIndex.prototype.getIterator=function(startDate,endDate){if(!this._indexed){this._index();}
-return new Timeline.EventIndex._Iterator(this._events,startDate,endDate,this._unit);};Timeline.EventIndex.prototype.getAllIterator=function(){return new Timeline.EventIndex._AllIterator(this._events);};Timeline.EventIndex.prototype.getEarliestDate=function(){var evt=this._events.getFirst();return(evt==null)?null:evt.getStart();};Timeline.EventIndex.prototype.getLatestDate=function(){var evt=this._events.getLast();if(evt==null){return null;}
-if(!this._indexed){this._index();}
-var index=evt._earliestOverlapIndex;var date=this._events.elementAt(index).getEnd();for(var i=index+1;i<this._events.length();i++){date=this._unit.later(date,this._events.elementAt(i).getEnd());}
-return date;};Timeline.EventIndex.prototype._index=function(){var l=this._events.length();for(var i=0;i<l;i++){var evt=this._events.elementAt(i);evt._earliestOverlapIndex=i;}
-var toIndex=1;for(var i=0;i<l;i++){var evt=this._events.elementAt(i);var end=evt.getEnd();toIndex=Math.max(toIndex,i+1);while(toIndex<l){var evt2=this._events.elementAt(toIndex);var start2=evt2.getStart();if(this._unit.compare(start2,end)<0){evt2._earliestOverlapIndex=i;toIndex++;}else{break;}}}
-this._indexed=true;};Timeline.EventIndex._Iterator=function(events,startDate,endDate,unit){this._events=events;this._startDate=startDate;this._endDate=endDate;this._unit=unit;this._currentIndex=events.find(function(evt){return unit.compare(evt.getStart(),startDate);});if(this._currentIndex-1>=0){this._currentIndex=this._events.elementAt(this._currentIndex-1)._earliestOverlapIndex;}
-this._currentIndex--;this._maxIndex=events.find(function(evt){return unit.compare(evt.getStart(),endDate);});this._hasNext=false;this._next=null;this._findNext();};Timeline.EventIndex._Iterator.prototype={hasNext:function(){return this._hasNext;},next:function(){if(this._hasNext){var next=this._next;this._findNext();return next;}else{return null;}},_findNext:function(){var unit=this._unit;while((++this._currentIndex)<this._maxIndex){var evt=this._events.elementAt(this._currentIndex);if(unit.compare(evt.getStart(),this._endDate)<0&&unit.compare(evt.getEnd(),this._startDate)>0){this._next=evt;this._hasNext=true;return;}}
-this._next=null;this._hasNext=false;}};Timeline.EventIndex._AllIterator=function(events){this._events=events;this._index=0;};Timeline.EventIndex._AllIterator.prototype={hasNext:function(){return this._index<this._events.length();},next:function(){return this._index<this._events.length()?this._events.elementAt(this._index++):null;}};
-
-/* date-time.js */
-
-Timeline.DateTime=new Object();Timeline.DateTime.MILLISECOND=0;Timeline.DateTime.SECOND=1;Timeline.DateTime.MINUTE=2;Timeline.DateTime.HOUR=3;Timeline.DateTime.DAY=4;Timeline.DateTime.WEEK=5;Timeline.DateTime.MONTH=6;Timeline.DateTime.YEAR=7;Timeline.DateTime.DECADE=8;Timeline.DateTime.CENTURY=9;Timeline.DateTime.MILLENNIUM=10;Timeline.DateTime.EPOCH=-1;Timeline.DateTime.ERA=-2;Timeline.DateTime.gregorianUnitLengths=[];(function(){var d=Timeline.DateTime;var a=d.gregorianUnitLengths;a[d.MILLISECOND]=1;a[d.SECOND]=1000;a[d.MINUTE]=a[d.SECOND]*60;a[d.HOUR]=a[d.MINUTE]*60;a[d.DAY]=a[d.HOUR]*24;a[d.WEEK]=a[d.DAY]*7;a[d.MONTH]=a[d.DAY]*31;a[d.YEAR]=a[d.DAY]*365;a[d.DECADE]=a[d.YEAR]*10;a[d.CENTURY]=a[d.YEAR]*100;a[d.MILLENNIUM]=a[d.YEAR]*1000;})();Timeline.DateTime.parseGregorianDateTime=function(o){if(o==null){return null;}else if(o instanceof Date){return o;}
-var s=o.toString();if(s.length>0&&s.length<8){var space=s.indexOf(" ");if(space>0){var year=parseInt(s.substr(0,space));var suffix=s.substr(space+1);if(suffix.toLowerCase()=="bc"){year=1-year;}}else{var year=parseInt(s);}
-var d=new Date(0);d.setUTCFullYear(year);return d;}
-try{return new Date(Date.parse(s));}catch(e){return null;}};Timeline.DateTime._iso8601DateRegExp="^(-?)([0-9]{4})("+["(-?([0-9]{2})(-?([0-9]{2}))?)","(-?([0-9]{3}))","(-?W([0-9]{2})(-?([1-7]))?)"].join("|")+")?$";Timeline.DateTime.setIso8601Date=function(dateObject,string){var regexp=Timeline.DateTime._iso8601DateRegExp;var d=string.match(new RegExp(regexp));if(!d){throw new Error("Invalid date string: "+string);}
-var sign=(d[1]=="-")?-1:1;var year=sign*d[2];var month=d[5];var date=d[7];var dayofyear=d[9];var week=d[11];var dayofweek=(d[13])?d[13]:1;dateObject.setUTCFullYear(year);if(dayofyear){dateObject.setUTCMonth(0);dateObject.setUTCDate(Number(dayofyear));}else if(week){dateObject.setUTCMonth(0);dateObject.setUTCDate(1);var gd=dateObject.getUTCDay();var day=(gd)?gd:7;var offset=Number(dayofweek)+(7*Number(week));if(day<=4){dateObject.setUTCDate(offset+1-day);}else{dateObject.setUTCDate(offset+8-day);}}else{if(month){dateObject.setUTCDate(1);dateObject.setUTCMonth(month-1);}
-if(date){dateObject.setUTCDate(date);}}
-return dateObject;};Timeline.DateTime.setIso8601Time=function(dateObject,string){var timezone="Z|(([-+])([0-9]{2})(:?([0-9]{2}))?)$";var d=string.match(new RegExp(timezone));var offset=0;if(d){if(d[0]!='Z'){offset=(Number(d[3])*60)+Number(d[5]);offset*=((d[2]=='-')?1:-1);}
-string=string.substr(0,string.length-d[0].length);}
-var regexp="^([0-9]{2})(:?([0-9]{2})(:?([0-9]{2})(\.([0-9]+))?)?)?$";var d=string.match(new RegExp(regexp));if(!d){dojo.debug("invalid time string: "+string);return false;}
-var hours=d[1];var mins=Number((d[3])?d[3]:0);var secs=(d[5])?d[5]:0;var ms=d[7]?(Number("0."+d[7])*1000):0;dateObject.setUTCHours(hours);dateObject.setUTCMinutes(mins);dateObject.setUTCSeconds(secs);dateObject.setUTCMilliseconds(ms);return dateObject;};Timeline.DateTime.setIso8601=function(dateObject,string){var comps=(string.indexOf("T")==-1)?string.split(" "):string.split("T");Timeline.DateTime.setIso8601Date(dateObject,comps[0]);if(comps.length==2){Timeline.DateTime.setIso8601Time(dateObject,comps[1]);}
-return dateObject;};Timeline.DateTime.parseIso8601DateTime=function(string){try{return Timeline.DateTime.setIso8601(new Date(0),string);}catch(e){return null;}};Timeline.DateTime.roundDownToInterval=function(date,intervalUnit,timeZone,multiple,firstDayOfWeek){var timeShift=timeZone*Timeline.DateTime.gregorianUnitLengths[Timeline.DateTime.HOUR];var date2=new Date(date.getTime()+timeShift);var clearInDay=function(d){d.setUTCMilliseconds(0);d.setUTCSeconds(0);d.setUTCMinutes(0);d.setUTCHours(0);};var clearInYear=function(d){clearInDay(d);d.setUTCDate(1);d.setUTCMonth(0);};switch(intervalUnit){case Timeline.DateTime.MILLISECOND:var x=date2.getUTCMilliseconds();date2.setUTCMilliseconds(x-(x%multiple));break;case Timeline.DateTime.SECOND:date2.setUTCMilliseconds(0);var x=date2.getUTCSeconds();date2.setUTCSeconds(x-(x%multiple));break;case Timeline.DateTime.MINUTE:date2.setUTCMilliseconds(0);date2.setUTCSeconds(0);var x=date2.getUTCMinutes();date2.setTime(date2.getTime()-
-(x%multiple)*Timeline.DateTime.gregorianUnitLengths[Timeline.DateTime.MINUTE]);break;case Timeline.DateTime.HOUR:date2.setUTCMilliseconds(0);date2.setUTCSeconds(0);date2.setUTCMinutes(0);var x=date2.getUTCHours();date2.setUTCHours(x-(x%multiple));break;case Timeline.DateTime.DAY:clearInDay(date2);break;case Timeline.DateTime.WEEK:clearInDay(date2);var d=(date2.getUTCDay()+7-firstDayOfWeek)%7;date2.setTime(date2.getTime()-
-d*Timeline.DateTime.gregorianUnitLengths[Timeline.DateTime.DAY]);break;case Timeline.DateTime.MONTH:clearInDay(date2);date2.setUTCDate(1);var x=date2.getUTCMonth();date2.setUTCMonth(x-(x%multiple));break;case Timeline.DateTime.YEAR:clearInYear(date2);var x=date2.getUTCFullYear();date2.setUTCFullYear(x-(x%multiple));break;case Timeline.DateTime.DECADE:clearInYear(date2);date2.setUTCFullYear(Math.floor(date2.getUTCFullYear()/10)*10);break;case Timeline.DateTime.CENTURY:clearInYear(date2);date2.setUTCFullYear(Math.floor(date2.getUTCFullYear()/100)*100);break;case Timeline.DateTime.MILLENNIUM:clearInYear(date2);date2.setUTCFullYear(Math.floor(date2.getUTCFullYear()/1000)*1000);break;}
-date.setTime(date2.getTime()-timeShift);};Timeline.DateTime.roundUpToInterval=function(date,intervalUnit,timeZone,multiple,firstDayOfWeek){var originalTime=date.getTime();Timeline.DateTime.roundDownToInterval(date,intervalUnit,timeZone,multiple,firstDayOfWeek);if(date.getTime()<originalTime){date.setTime(date.getTime()+
-Timeline.DateTime.gregorianUnitLengths[intervalUnit]*multiple);}};Timeline.DateTime.incrementByInterval=function(date,intervalUnit){switch(intervalUnit){case Timeline.DateTime.MILLISECOND:date.setTime(date.getTime()+1)
-break;case Timeline.DateTime.SECOND:date.setTime(date.getTime()+1000);break;case Timeline.DateTime.MINUTE:date.setTime(date.getTime()+
-Timeline.DateTime.gregorianUnitLengths[Timeline.DateTime.MINUTE]);break;case Timeline.DateTime.HOUR:date.setTime(date.getTime()+
-Timeline.DateTime.gregorianUnitLengths[Timeline.DateTime.HOUR]);break;case Timeline.DateTime.DAY:date.setUTCDate(date.getUTCDate()+1);break;case Timeline.DateTime.WEEK:date.setUTCDate(date.getUTCDate()+7);break;case Timeline.DateTime.MONTH:date.setUTCMonth(date.getUTCMonth()+1);break;case Timeline.DateTime.YEAR:date.setUTCFullYear(date.getUTCFullYear()+1);break;case Timeline.DateTime.DECADE:date.setUTCFullYear(date.getUTCFullYear()+10);break;case Timeline.DateTime.CENTURY:date.setUTCFullYear(date.getUTCFullYear()+100);break;case Timeline.DateTime.MILLENNIUM:date.setUTCFullYear(date.getUTCFullYear()+1000);break;}};Timeline.DateTime.removeTimeZoneOffset=function(date,timeZone){return new Date(date.getTime()+
-timeZone*Timeline.DateTime.gregorianUnitLengths[Timeline.DateTime.HOUR]);};
-
-/* debug.js */
-
-Timeline.Debug=new Object();Timeline.Debug.log=function(msg){};Timeline.Debug.exception=function(e){alert("Caught exception: "+(Timeline.Platform.isIE?e.message:e));};
-
-/* dom.js */
-
-Timeline.DOM=new Object();Timeline.DOM.registerEventWithObject=function(elmt,eventName,obj,handler){Timeline.DOM.registerEvent(elmt,eventName,function(elmt2,evt,target){return handler.call(obj,elmt2,evt,target);});};Timeline.DOM.registerEvent=function(elmt,eventName,handler){var handler2=function(evt){evt=(evt)?evt:((event)?event:null);if(evt){var target=(evt.target)?evt.target:((evt.srcElement)?evt.srcElement:null);if(target){target=(target.nodeType==1||target.nodeType==9)?target:target.parentNode;}
-return handler(elmt,evt,target);}
-return true;}
-if(Timeline.Platform.browser.isIE){elmt.attachEvent("on"+eventName,handler2);}else{elmt.addEventListener(eventName,handler2,false);}};Timeline.DOM.getPageCoordinates=function(elmt){var left=0;var top=0;if(elmt.nodeType!=1){elmt=elmt.parentNode;}
-while(elmt!=null){left+=elmt.offsetLeft;top+=elmt.offsetTop;elmt=elmt.offsetParent;}
-return{left:left,top:top};};Timeline.DOM.getEventRelativeCoordinates=function(evt,elmt){if(Timeline.Platform.browser.isIE){return{x:evt.offsetX,y:evt.offsetY};}else{var coords=Timeline.DOM.getPageCoordinates(elmt);return{x:evt.pageX-coords.left,y:evt.pageY-coords.top};}};Timeline.DOM.cancelEvent=function(evt){evt.returnValue=false;evt.cancelBubble=true;if("preventDefault"in evt){evt.preventDefault();}};
-
-/* graphics.js */
-
-Timeline.Graphics=new Object();Timeline.Graphics.pngIsTranslucent=(!Timeline.Platform.browser.isIE)||(Timeline.Platform.browser.majorVersion>6);Timeline.Graphics.createTranslucentImage=function(doc,url,verticalAlign){var elmt;if(Timeline.Graphics.pngIsTranslucent){elmt=doc.createElement("img");elmt.setAttribute("src",url);}else{elmt=doc.createElement("img");elmt.style.display="inline";elmt.style.width="1px";elmt.style.height="1px";elmt.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+url+"', sizingMethod='image')";}
-elmt.style.verticalAlign=(verticalAlign!=null)?verticalAlign:"middle";return elmt;};Timeline.Graphics.setOpacity=function(elmt,opacity){if(Timeline.Platform.browser.isIE){elmt.style.filter="progid:DXImageTransform.Microsoft.Alpha(Style=0,Opacity="+opacity+")";}else{var o=(opacity/100).toString();elmt.style.opacity=o;elmt.style.MozOpacity=o;}};Timeline.Graphics._bubbleMargins={top:33,bottom:42,left:33,right:40}
-Timeline.Graphics._arrowOffsets={top:0,bottom:9,left:1,right:8}
-Timeline.Graphics._bubblePadding=15;Timeline.Graphics._bubblePointOffset=6;Timeline.Graphics._halfArrowWidth=18;Timeline.Graphics.createBubbleForPoint=function(doc,pageX,pageY,contentWidth,contentHeight){var bubble={_closed:false,_doc:doc,close:function(){if(!this._closed){this._doc.body.removeChild(this._div);this._doc=null;this._div=null;this._content=null;this._closed=true;}}};var docWidth=doc.body.offsetWidth;var docHeight=doc.body.offsetHeight;var margins=Timeline.Graphics._bubbleMargins;var bubbleWidth=margins.left+contentWidth+margins.right;var bubbleHeight=margins.top+contentHeight+margins.bottom;var pngIsTranslucent=Timeline.Graphics.pngIsTranslucent;var urlPrefix=Timeline.urlPrefix;var setImg=function(elmt,url,width,height){elmt.style.position="absolute";elmt.style.width=width+"px";elmt.style.height=height+"px";if(pngIsTranslucent){elmt.style.background="url("+url+")";}else{elmt.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+url+"', sizingMethod='crop')";}}
-var div=doc.createElement("div");div.style.width=bubbleWidth+"px";div.style.height=bubbleHeight+"px";div.style.position="absolute";div.style.zIndex=1000;bubble._div=div;var divInner=doc.createElement("div");divInner.style.width="100%";divInner.style.height="100%";divInner.style.position="relative";div.appendChild(divInner);var createImg=function(url,left,top,width,height){var divImg=doc.createElement("div");divImg.style.left=left+"px";divImg.style.top=top+"px";setImg(divImg,url,width,height);divInner.appendChild(divImg);}
-createImg(urlPrefix+"images/bubble-top-left.png",0,0,margins.left,margins.top);createImg(urlPrefix+"images/bubble-top.png",margins.left,0,contentWidth,margins.top);createImg(urlPrefix+"images/bubble-top-right.png",margins.left+contentWidth,0,margins.right,margins.top);createImg(urlPrefix+"images/bubble-left.png",0,margins.top,margins.left,contentHeight);createImg(urlPrefix+"images/bubble-right.png",margins.left+contentWidth,margins.top,margins.right,contentHeight);createImg(urlPrefix+"images/bubble-bottom-left.png",0,margins.top+contentHeight,margins.left,margins.bottom);createImg(urlPrefix+"images/bubble-bottom.png",margins.left,margins.top+contentHeight,contentWidth,margins.bottom);createImg(urlPrefix+"images/bubble-bottom-right.png",margins.left+contentWidth,margins.top+contentHeight,margins.right,margins.bottom);var divClose=doc.createElement("div");divClose.style.left=(bubbleWidth-margins.right+Timeline.Graphics._bubblePadding-16-2)+"px";divClose.style.top=(margins.top-Timeline.Graphics._bubblePadding+1)+"px";divClose.style.cursor="pointer";setImg(divClose,urlPrefix+"images/close-button.png",16,16);Timeline.DOM.registerEventWithObject(divClose,"click",bubble,bubble.close);divInner.appendChild(divClose);var divContent=doc.createElement("div");divContent.style.position="absolute";divContent.style.left=margins.left+"px";divContent.style.top=margins.top+"px";divContent.style.width=contentWidth+"px";divContent.style.height=contentHeight+"px";divContent.style.overflow="auto";divContent.style.background="white";divInner.appendChild(divContent);bubble.content=divContent;(function(){if(pageX-Timeline.Graphics._halfArrowWidth-Timeline.Graphics._bubblePadding>0&&pageX+Timeline.Graphics._halfArrowWidth+Timeline.Graphics._bubblePadding<docWidth){var left=pageX-Math.round(contentWidth/2)-margins.left;left=pageX<(docWidth/2)?Math.max(left,-(margins.left-Timeline.Graphics._bubblePadding)):Math.min(left,docWidth+(margins.right-Timeline.Graphics._bubblePadding)-bubbleWidth);if(pageY-Timeline.Graphics._bubblePointOffset-bubbleHeight>0){var divImg=doc.createElement("div");divImg.style.left=(pageX-Timeline.Graphics._halfArrowWidth-left)+"px";divImg.style.top=(margins.top+contentHeight)+"px";setImg(divImg,urlPrefix+"images/bubble-bottom-arrow.png",37,margins.bottom);divInner.appendChild(divImg);div.style.left=left+"px";div.style.top=(pageY-Timeline.Graphics._bubblePointOffset-bubbleHeight+
-Timeline.Graphics._arrowOffsets.bottom)+"px";return;}else if(pageY+Timeline.Graphics._bubblePointOffset+bubbleHeight<docHeight){var divImg=doc.createElement("div");divImg.style.left=(pageX-Timeline.Graphics._halfArrowWidth-left)+"px";divImg.style.top="0px";setImg(divImg,urlPrefix+"images/bubble-top-arrow.png",37,margins.top);divInner.appendChild(divImg);div.style.left=left+"px";div.style.top=(pageY+Timeline.Graphics._bubblePointOffset-
-Timeline.Graphics._arrowOffsets.top)+"px";return;}}
-var top=pageY-Math.round(contentHeight/2)-margins.top;top=pageY<(docHeight/2)?Math.max(top,-(margins.top-Timeline.Graphics._bubblePadding)):Math.min(top,docHeight+(margins.bottom-Timeline.Graphics._bubblePadding)-bubbleHeight);if(pageX-Timeline.Graphics._bubblePointOffset-bubbleWidth>0){var divImg=doc.createElement("div");divImg.style.left=(margins.left+contentWidth)+"px";divImg.style.top=(pageY-Timeline.Graphics._halfArrowWidth-top)+"px";setImg(divImg,urlPrefix+"images/bubble-right-arrow.png",margins.right,37);divInner.appendChild(divImg);div.style.left=(pageX-Timeline.Graphics._bubblePointOffset-bubbleWidth+
-Timeline.Graphics._arrowOffsets.right)+"px";div.style.top=top+"px";}else{var divImg=doc.createElement("div");divImg.style.left="0px";divImg.style.top=(pageY-Timeline.Graphics._halfArrowWidth-top)+"px";setImg(divImg,urlPrefix+"images/bubble-left-arrow.png",margins.left,37);divInner.appendChild(divImg);div.style.left=(pageX+Timeline.Graphics._bubblePointOffset-
-Timeline.Graphics._arrowOffsets.left)+"px";div.style.top=top+"px";}})();doc.body.appendChild(div);return bubble;};Timeline.Graphics.createMessageBubble=function(doc){var containerDiv=doc.createElement("div");if(Timeline.Graphics.pngIsTranslucent){var topDiv=doc.createElement("div");topDiv.style.height="33px";topDiv.style.background="url("+Timeline.urlPrefix+"images/message-top-left.png) top left no-repeat";topDiv.style.paddingLeft="44px";containerDiv.appendChild(topDiv);var topRightDiv=doc.createElement("div");topRightDiv.style.height="33px";topRightDiv.style.background="url("+Timeline.urlPrefix+"images/message-top-right.png) top right no-repeat";topDiv.appendChild(topRightDiv);var middleDiv=doc.createElement("div");middleDiv.style.background="url("+Timeline.urlPrefix+"images/message-left.png) top left repeat-y";middleDiv.style.paddingLeft="44px";containerDiv.appendChild(middleDiv);var middleRightDiv=doc.createElement("div");middleRightDiv.style.background="url("+Timeline.urlPrefix+"images/message-right.png) top right repeat-y";middleRightDiv.style.paddingRight="44px";middleDiv.appendChild(middleRightDiv);var contentDiv=doc.createElement("div");middleRightDiv.appendChild(contentDiv);var bottomDiv=doc.createElement("div");bottomDiv.style.height="55px";bottomDiv.style.background="url("+Timeline.urlPrefix+"images/message-bottom-left.png) bottom left no-repeat";bottomDiv.style.paddingLeft="44px";containerDiv.appendChild(bottomDiv);var bottomRightDiv=doc.createElement("div");bottomRightDiv.style.height="55px";bottomRightDiv.style.background="url("+Timeline.urlPrefix+"images/message-bottom-right.png) bottom right no-repeat";bottomDiv.appendChild(bottomRightDiv);}else{containerDiv.style.border="2px solid #7777AA";containerDiv.style.padding="20px";containerDiv.style.background="white";Timeline.Graphics.setOpacity(containerDiv,90);var contentDiv=doc.createElement("div");containerDiv.appendChild(contentDiv);}
-return{containerDiv:containerDiv,contentDiv:contentDiv};};Timeline.Graphics.createAnimation=function(f,from,to,duration){return new Timeline.Graphics._Animation(f,from,to,duration);};Timeline.Graphics._Animation=function(f,from,to,duration){this.f=f;this.from=from;this.to=to;this.current=from;this.duration=duration;this.start=new Date().getTime();this.timePassed=0;};Timeline.Graphics._Animation.prototype.run=function(){var a=this;window.setTimeout(function(){a.step();},100);};Timeline.Graphics._Animation.prototype.step=function(){this.timePassed+=100;var timePassedFraction=this.timePassed/this.duration;var parameterFraction=-Math.cos(timePassedFraction*Math.PI)/2+0.5;var current=parameterFraction*(this.to-this.from)+this.from;try{this.f(current,current-this.current);}catch(e){}
-this.current=current;if(this.timePassed<this.duration){this.run();}};
-
-/* html.js */
-
-Timeline.HTML=new Object();Timeline.HTML._e2uHash={};(function()
-
-/*
-	Modified by Ben for Zotero
-*/
-{var e2uHash=Timeline.HTML._e2uHash;
-
-
-
-	e2uHash['nbsp']='\u00A0[space]';e2uHash['iexcl']='\u00A1';e2uHash['cent']='\u00A2';e2uHash['pound']='\u00A3';e2uHash['curren']='\u00A4';e2uHash['yen']='\u00A5';e2uHash['brvbar']='\u00A6';e2uHash['sect']='\u00A7';e2uHash['uml']='\u00A8';e2uHash['copy']='\u00A9';e2uHash['ordf']='\u00AA';e2uHash['laquo']='\u00AB';e2uHash['not']='\u00AC';e2uHash['shy']='\u00AD';e2uHash['reg']='\u00AE';e2uHash['macr']='\u00AF';e2uHash['deg']='\u00B0';e2uHash['plusmn']='\u00B1';e2uHash['sup2']='\u00B2';e2uHash['sup3']='\u00B3';e2uHash['acute']='\u00B4';e2uHash['micro']='\u00B5';e2uHash['para']='\u00B6';e2uHash['middot']='\u00B7';e2uHash['cedil']='\u00B8';e2uHash['sup1']='\u00B9';e2uHash['ordm']='\u00BA';e2uHash['raquo']='\u00BB';e2uHash['frac14']='\u00BC';e2uHash['frac12']='\u00BD';e2uHash['frac34']='\u00BE';e2uHash['iquest']='\u00BF';e2uHash['Agrave']='\u00C0';e2uHash['Aacute']='\u00C1';e2uHash['Acirc']='\u00C2';e2uHash['Atilde']='\u00C3';e2uHash['Auml']='\u00C4';e2uHash['Aring']='\u00C5';e2uHash['AElig']='\u00C6';e2uHash['Ccedil']='\u00C7';e2uHash['Egrave']='\u00C8';e2uHash['Eacute']='\u00C9';e2uHash['Ecirc']='\u00CA';e2uHash['Euml']='\u00CB';e2uHash['Igrave']='\u00CC';e2uHash['Iacute']='\u00CD';e2uHash['Icirc']='\u00CE';e2uHash['Iuml']='\u00CF';e2uHash['ETH']='\u00D0';e2uHash['Ntilde']='\u00D1';e2uHash['Ograve']='\u00D2';e2uHash['Oacute']='\u00D3';e2uHash['Ocirc']='\u00D4';e2uHash['Otilde']='\u00D5';e2uHash['Ouml']='\u00D6';e2uHash['times']='\u00D7';e2uHash['Oslash']='\u00D8';e2uHash['Ugrave']='\u00D9';e2uHash['Uacute']='\u00DA';e2uHash['Ucirc']='\u00DB';e2uHash['Uuml']='\u00DC';e2uHash['Yacute']='\u00DD';e2uHash['THORN']='\u00DE';e2uHash['szlig']='\u00DF';e2uHash['agrave']='\u00E0';e2uHash['aacute']='\u00E1';e2uHash['acirc']='\u00E2';e2uHash['atilde']='\u00E3';e2uHash['auml']='\u00E4';e2uHash['aring']='\u00E5';e2uHash['aelig']='\u00E6';e2uHash['ccedil']='\u00E7';e2uHash['egrave']='\u00E8';e2uHash['eacute']='\u00E9';e2uHash['ecirc']='\u00EA';e2uHash['euml']='\u00EB';e2uHash['igrave']='\u00EC';e2uHash['iacute']='\u00ED';e2uHash['icirc']='\u00EE';e2uHash['iuml']='\u00EF';e2uHash['eth']='\u00F0';e2uHash['ntilde']='\u00F1';e2uHash['ograve']='\u00F2';e2uHash['oacute']='\u00F3';e2uHash['ocirc']='\u00F4';e2uHash['otilde']='\u00F5';e2uHash['ouml']='\u00F6';e2uHash['divide']='\u00F7';e2uHash['oslash']='\u00F8';e2uHash['ugrave']='\u00F9';e2uHash['uacute']='\u00FA';e2uHash['ucirc']='\u00FB';e2uHash['uuml']='\u00FC';e2uHash['yacute']='\u00FD';e2uHash['thorn']='\u00FE';e2uHash['yuml']='\u00FF';e2uHash['quot']='\u0022';e2uHash['amp']='\u0026';e2uHash['lt']='\u003C';e2uHash['gt']='\u003E';e2uHash['OElig']='';e2uHash['oelig']='\u0153';e2uHash['Scaron']='\u0160';e2uHash['scaron']='\u0161';e2uHash['Yuml']='\u0178';e2uHash['circ']='\u02C6';e2uHash['tilde']='\u02DC';e2uHash['ensp']='\u2002';e2uHash['emsp']='\u2003';e2uHash['thinsp']='\u2009';e2uHash['zwnj']='\u200C';e2uHash['zwj']='\u200D';e2uHash['lrm']='\u200E';e2uHash['rlm']='\u200F';e2uHash['ndash']='\u2013';e2uHash['mdash']='\u2014';e2uHash['lsquo']='\u2018';e2uHash['rsquo']='\u2019';e2uHash['sbquo']='\u201A';e2uHash['ldquo']='\u201C';e2uHash['rdquo']='\u201D';e2uHash['bdquo']='\u201E';e2uHash['dagger']='\u2020';e2uHash['Dagger']='\u2021';e2uHash['permil']='\u2030';e2uHash['lsaquo']='\u2039';e2uHash['rsaquo']='\u203A';e2uHash['euro']='\u20AC';e2uHash['fnof']='\u0192';e2uHash['Alpha']='\u0391';e2uHash['Beta']='\u0392';e2uHash['Gamma']='\u0393';e2uHash['Delta']='\u0394';e2uHash['Epsilon']='\u0395';e2uHash['Zeta']='\u0396';e2uHash['Eta']='\u0397';e2uHash['Theta']='\u0398';e2uHash['Iota']='\u0399';e2uHash['Kappa']='\u039A';e2uHash['Lambda']='\u039B';e2uHash['Mu']='\u039C';e2uHash['Nu']='\u039D';e2uHash['Xi']='\u039E';e2uHash['Omicron']='\u039F';e2uHash['Pi']='\u03A0';e2uHash['Rho']='\u03A1';e2uHash['Sigma']='\u03A3';e2uHash['Tau']='\u03A4';e2uHash['Upsilon']='\u03A5';e2uHash['Phi']='\u03A6';e2uHash['Chi']='\u03A7';e2uHash['Psi']='\u03A8';e2uHash['Omega']='\u03A9';e2uHash['alpha']='\u03B1';e2uHash['beta']='\u03B2';e2uHash['gamma']='\u03B3';e2uHash['delta']='\u03B4';e2uHash['epsilon']='\u03B5';e2uHash['zeta']='\u03B6';e2uHash['eta']='\u03B7';e2uHash['theta']='\u03B8';e2uHash['iota']='\u03B9';e2uHash['kappa']='\u03BA';e2uHash['lambda']='\u03BB';e2uHash['mu']='\u03BC';e2uHash['nu']='\u03BD';e2uHash['xi']='\u03BE';e2uHash['omicron']='\u03BF';e2uHash['pi']='\u03C0';e2uHash['rho']='\u03C1';e2uHash['sigmaf']='\u03C2';e2uHash['sigma']='\u03C3';e2uHash['tau']='\u03C4';e2uHash['upsilon']='\u03C5';e2uHash['phi']='\u03C6';e2uHash['chi']='\u03C7';e2uHash['psi']='\u03C8';e2uHash['omega']='\u03C9';e2uHash['thetasym']='\u03D1';e2uHash['upsih']='\u03D2';e2uHash['piv']='\u03D6';e2uHash['bull']='\u2022';e2uHash['hellip']='\u2026';e2uHash['prime']='\u2032';e2uHash['Prime']='\u2033';e2uHash['oline']='\u203E';e2uHash['frasl']='\u2044';e2uHash['weierp']='\u2118';e2uHash['image']='\u2111';e2uHash['real']='\u211C';e2uHash['trade']='\u2122';e2uHash['alefsym']='\u2135';e2uHash['larr']='\u2190';e2uHash['uarr']='\u2191';e2uHash['rarr']='\u2192';e2uHash['darr']='\u2193';e2uHash['harr']='\u2194';e2uHash['crarr']='\u21B5';e2uHash['lArr']='\u21D0';e2uHash['uArr']='\u21D1';e2uHash['rArr']='\u21D2';e2uHash['dArr']='\u21D3';e2uHash['hArr']='\u21D4';e2uHash['forall']='\u2200';e2uHash['part']='\u2202';e2uHash['exist']='\u2203';e2uHash['empty']='\u2205';e2uHash['nabla']='\u2207';e2uHash['isin']='\u2208';e2uHash['notin']='\u2209';e2uHash['ni']='\u220B';e2uHash['prod']='\u220F';e2uHash['sum']='\u2211';e2uHash['minus']='\u2212';e2uHash['lowast']='\u2217';e2uHash['radic']='\u221A';e2uHash['prop']='\u221D';e2uHash['infin']='\u221E';e2uHash['ang']='\u2220';e2uHash['and']='\u2227';e2uHash['or']='\u2228';e2uHash['cap']='\u2229';e2uHash['cup']='\u222A';e2uHash['int']='\u222B';e2uHash['there4']='\u2234';e2uHash['sim']='\u223C';e2uHash['cong']='\u2245';e2uHash['asymp']='\u2248';e2uHash['ne']='\u2260';e2uHash['equiv']='\u2261';e2uHash['le']='\u2264';e2uHash['ge']='\u2265';e2uHash['sub']='\u2282';e2uHash['sup']='\u2283';e2uHash['nsub']='\u2284';e2uHash['sube']='\u2286';e2uHash['supe']='\u2287';e2uHash['oplus']='\u2295';e2uHash['otimes']='\u2297';e2uHash['perp']='\u22A5';e2uHash['sdot']='\u22C5';e2uHash['lceil']='\u2308';e2uHash['rceil']='\u2309';e2uHash['lfloor']='\u230A';e2uHash['rfloor']='\u230B';e2uHash['lang']='\u2329';e2uHash['rang']='\u232A';e2uHash['loz']='\u25CA';e2uHash['spades']='\u2660';e2uHash['clubs']='\u2663';e2uHash['hearts']='\u2665';e2uHash['diams']='\u2666';})();
-
-/*
-	Modified by Ben for Zotero
-*/	
-Timeline.HTML.deEntify=function(s){var e2uHash=Timeline.HTML._e2uHash;
-	
-
-
-	var re=/&(\w+?);/;while(re.test(s)){var m=s.match(re);s=s.replace(re,e2uHash[m[1]]);}
-return s;};
-
-/* xmlhttp.js */
-
-Timeline.XmlHttp=new Object();Timeline.XmlHttp._onReadyStateChange=function(xmlhttp,fError,fDone){switch(xmlhttp.readyState){case 4:try{if(xmlhttp.status==0||xmlhttp.status==200){if(fDone){fDone(xmlhttp);}}else{if(fError){fError(xmlhttp.statusText,xmlhttp.status,xmlhttp);}}}catch(e){Timeline.Debug.exception(e);}
-break;}};Timeline.XmlHttp._createRequest=function(){if(Timeline.Platform.browser.isIE){var programIDs=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"];for(var i=0;i<programIDs.length;i++){try{var programID=programIDs[i];var f=function(){return new ActiveXObject(programID);};var o=f();Timeline.XmlHttp._createRequest=f;return o;}catch(e){}}
-throw new Error("Failed to create an XMLHttpRequest object");}else{try{var f=function(){return new XMLHttpRequest();};var o=f();Timeline.XmlHttp._createRequest=f;return o;}catch(e){throw new Error("Failed to create an XMLHttpRequest object");}}};Timeline.XmlHttp.get=function(url,fError,fDone){var xmlhttp=Timeline.XmlHttp._createRequest();xmlhttp.open("GET",url,true);xmlhttp.onreadystatechange=function(){Timeline.XmlHttp._onReadyStateChange(xmlhttp,fError,fDone);};xmlhttp.send(null);};Timeline.XmlHttp.post=function(url,body,fError,fDone){var xmlhttp=Timeline.XmlHttp._createRequest();xmlhttp.open("POST",url,true);xmlhttp.onreadystatechange=function(){Timeline.XmlHttp._onReadyStateChange(xmlhttp,fError,fDone);};xmlhttp.send(body);};Timeline.XmlHttp._forceXML=function(xmlhttp){try{xmlhttp.overrideMimeType("text/xml");}catch(e){xmlhttp.setrequestheader("Content-Type","text/xml");}};
-
-/* decorators.js */
-
-Timeline.SpanHighlightDecorator=function(params){this._unit=("unit"in params)?params.unit:Timeline.NativeDateUnit;this._startDate=(typeof params.startDate=="string")?this._unit.parseFromObject(params.startDate):params.startDate;this._endDate=(typeof params.endDate=="string")?this._unit.parseFromObject(params.endDate):params.endDate;this._startLabel=params.startLabel;this._endLabel=params.endLabel;this._color=params.color;this._opacity=("opacity"in params)?params.opacity:100;};Timeline.SpanHighlightDecorator.prototype.initialize=function(band,timeline){this._band=band;this._timeline=timeline;this._layerDiv=null;};Timeline.SpanHighlightDecorator.prototype.paint=function(){if(this._layerDiv!=null){this._band.removeLayerDiv(this._layerDiv);}
-this._layerDiv=this._band.createLayerDiv(10);this._layerDiv.setAttribute("name","span-highlight-decorator");this._layerDiv.style.display="none";var minDate=this._band.getMinDate();var maxDate=this._band.getMaxDate();if(this._unit.compare(this._startDate,maxDate)<0&&this._unit.compare(this._endDate,minDate)>0){minDate=this._unit.later(minDate,this._startDate);maxDate=this._unit.earlier(maxDate,this._endDate);var minPixel=this._band.dateToPixelOffset(minDate);var maxPixel=this._band.dateToPixelOffset(maxDate);var doc=this._timeline.getDocument();var createTable=function(){var table=doc.createElement("table");table.insertRow(0).insertCell(0);return table;};var div=doc.createElement("div");div.style.position="absolute";div.style.overflow="hidden";div.style.background=this._color;if(this._opacity<100){Timeline.Graphics.setOpacity(div,this._opacity);}
-this._layerDiv.appendChild(div);var tableStartLabel=createTable();tableStartLabel.style.position="absolute";tableStartLabel.style.overflow="hidden";tableStartLabel.style.fontSize="300%";tableStartLabel.style.fontWeight="bold";tableStartLabel.style.color=this._color;tableStartLabel.rows[0].cells[0].innerHTML=this._startLabel;this._layerDiv.appendChild(tableStartLabel);var tableEndLabel=createTable();tableEndLabel.style.position="absolute";tableEndLabel.style.overflow="hidden";tableEndLabel.style.fontSize="300%";tableEndLabel.style.fontWeight="bold";tableEndLabel.style.color=this._color;tableEndLabel.rows[0].cells[0].innerHTML=this._endLabel;this._layerDiv.appendChild(tableEndLabel);if(this._timeline.isHorizontal()){div.style.left=minPixel+"px";div.style.width=(maxPixel-minPixel)+"px";div.style.top="0px";div.style.height="100%";tableStartLabel.style.right=(this._band.getTotalViewLength()-minPixel)+"px";tableStartLabel.style.width=(this._startLabel.length)+"em";tableStartLabel.style.top="0px";tableStartLabel.style.height="100%";tableStartLabel.style.textAlign="right";tableEndLabel.style.left=maxPixel+"px";tableEndLabel.style.width=(this._endLabel.length)+"em";tableEndLabel.style.top="0px";tableEndLabel.style.height="100%";}else{div.style.top=minPixel+"px";div.style.height=(maxPixel-minPixel)+"px";div.style.left="0px";div.style.width="100%";tableStartLabel.style.bottom=minPixel+"px";tableStartLabel.style.height="1.5px";tableStartLabel.style.left="0px";tableStartLabel.style.width="100%";tableEndLabel.style.top=maxPixel+"px";tableEndLabel.style.height="1.5px";tableEndLabel.style.left="0px";tableEndLabel.style.width="100%";}}
-this._layerDiv.style.display="block";};Timeline.SpanHighlightDecorator.prototype.softPaint=function(){};Timeline.PointHighlightDecorator=function(params){this._unit=("unit"in params)?params.unit:Timeline.NativeDateUnit;this._date=(typeof params.date=="string")?this._unit.parseFromObject(params.date):params.date;this._width=("width"in params)?params.width:10;this._color=params.color;this._opacity=("opacity"in params)?params.opacity:100;};Timeline.PointHighlightDecorator.prototype.initialize=function(band,timeline){this._band=band;this._timeline=timeline;this._layerDiv=null;};Timeline.PointHighlightDecorator.prototype.paint=function(){if(this._layerDiv!=null){this._band.removeLayerDiv(this._layerDiv);}
-this._layerDiv=this._band.createLayerDiv(10);this._layerDiv.setAttribute("name","span-highlight-decorator");this._layerDiv.style.display="none";var minDate=this._band.getMinDate();var maxDate=this._band.getMaxDate();if(this._unit.compare(this._date,maxDate)<0&&this._unit.compare(this._date,minDate)>0){var pixel=this._band.dateToPixelOffset(this._date);var minPixel=pixel-Math.round(this._width/2);var doc=this._timeline.getDocument();var div=doc.createElement("div");div.style.position="absolute";div.style.overflow="hidden";div.style.background=this._color;if(this._opacity<100){Timeline.Graphics.setOpacity(div,this._opacity);}
-this._layerDiv.appendChild(div);if(this._timeline.isHorizontal()){div.style.left=minPixel+"px";div.style.width=this._width+"px";div.style.top="0px";div.style.height="100%";}else{div.style.top=minPixel+"px";div.style.height=this._width+"px";div.style.left="0px";div.style.width="100%";}}
-this._layerDiv.style.display="block";};Timeline.PointHighlightDecorator.prototype.softPaint=function(){};
-
-/* ether-painters.js */
-
-Timeline.GregorianEtherPainter=function(params){this._params=params;this._theme=params.theme;this._unit=params.unit;this._multiple=("multiple"in params)?params.multiple:1;};Timeline.GregorianEtherPainter.prototype.initialize=function(band,timeline){this._band=band;this._timeline=timeline;this._backgroundLayer=band.createLayerDiv(0);this._backgroundLayer.setAttribute("name","ether-background");this._backgroundLayer.style.background=this._theme.ether.backgroundColors[band.getIndex()];this._markerLayer=null;this._lineLayer=null;var align=("align"in this._params&&this._params.align!=undefined)?this._params.align:this._theme.ether.interval.marker[timeline.isHorizontal()?"hAlign":"vAlign"];var showLine=("showLine"in this._params)?this._params.showLine:this._theme.ether.interval.line.show;this._intervalMarkerLayout=new Timeline.EtherIntervalMarkerLayout(this._timeline,this._band,this._theme,align,showLine);this._highlight=new Timeline.EtherHighlight(this._timeline,this._band,this._theme,this._backgroundLayer);}
-Timeline.GregorianEtherPainter.prototype.setHighlight=function(startDate,endDate){this._highlight.position(startDate,endDate);}
-Timeline.GregorianEtherPainter.prototype.paint=function(){if(this._markerLayer){this._band.removeLayerDiv(this._markerLayer);}
-this._markerLayer=this._band.createLayerDiv(100);this._markerLayer.setAttribute("name","ether-markers");this._markerLayer.style.display="none";if(this._lineLayer){this._band.removeLayerDiv(this._lineLayer);}
-this._lineLayer=this._band.createLayerDiv(1);this._lineLayer.setAttribute("name","ether-lines");this._lineLayer.style.display="none";var minDate=this._band.getMinDate();var maxDate=this._band.getMaxDate();var timeZone=this._band.getTimeZone();var labeller=this._band.getLabeller();Timeline.DateTime.roundDownToInterval(minDate,this._unit,timeZone,1,this._theme.firstDayOfWeek);var p=this;var incrementDate=function(date){for(var i=0;i<p._multiple;i++){Timeline.DateTime.incrementByInterval(date,p._unit);}};while(minDate.getTime()<maxDate.getTime()){this._intervalMarkerLayout.createIntervalMarker(minDate,labeller,this._unit,this._markerLayer,this._lineLayer);incrementDate(minDate);}
-this._markerLayer.style.display="block";this._lineLayer.style.display="block";};Timeline.GregorianEtherPainter.prototype.softPaint=function(){};Timeline.HotZoneGregorianEtherPainter=function(params){this._params=params;this._theme=params.theme;this._zones=[{startTime:Number.NEGATIVE_INFINITY,endTime:Number.POSITIVE_INFINITY,unit:params.unit,multiple:1}];for(var i=0;i<params.zones.length;i++){var zone=params.zones[i];var zoneStart=Timeline.DateTime.parseGregorianDateTime(zone.start).getTime();var zoneEnd=Timeline.DateTime.parseGregorianDateTime(zone.end).getTime();for(var j=0;j<this._zones.length&&zoneEnd>zoneStart;j++){var zone2=this._zones[j];if(zoneStart<zone2.endTime){if(zoneStart>zone2.startTime){this._zones.splice(j,0,{startTime:zone2.startTime,endTime:zoneStart,unit:zone2.unit,multiple:zone2.multiple});j++;zone2.startTime=zoneStart;}
-if(zoneEnd<zone2.endTime){this._zones.splice(j,0,{startTime:zoneStart,endTime:zoneEnd,unit:zone.unit,multiple:(zone.multiple)?zone.multiple:1});j++;zone2.startTime=zoneEnd;zoneStart=zoneEnd;}else{zone2.multiple=zone.multiple;zone2.unit=zone.unit;zoneStart=zone2.endTime;}}}}};Timeline.HotZoneGregorianEtherPainter.prototype.initialize=function(band,timeline){this._band=band;this._timeline=timeline;this._backgroundLayer=band.createLayerDiv(0);this._backgroundLayer.setAttribute("name","ether-background");this._backgroundLayer.style.background=this._theme.ether.backgroundColors[band.getIndex()];this._markerLayer=null;this._lineLayer=null;var align=("align"in this._params&&this._params.align!=undefined)?this._params.align:this._theme.ether.interval.marker[timeline.isHorizontal()?"hAlign":"vAlign"];var showLine=("showLine"in this._params)?this._params.showLine:this._theme.ether.interval.line.show;this._intervalMarkerLayout=new Timeline.EtherIntervalMarkerLayout(this._timeline,this._band,this._theme,align,showLine);this._highlight=new Timeline.EtherHighlight(this._timeline,this._band,this._theme,this._backgroundLayer);}
-Timeline.HotZoneGregorianEtherPainter.prototype.setHighlight=function(startDate,endDate){this._highlight.position(startDate,endDate);}
-Timeline.HotZoneGregorianEtherPainter.prototype.paint=function(){if(this._markerLayer){this._band.removeLayerDiv(this._markerLayer);}
-this._markerLayer=this._band.createLayerDiv(100);this._markerLayer.setAttribute("name","ether-markers");this._markerLayer.style.display="none";if(this._lineLayer){this._band.removeLayerDiv(this._lineLayer);}
-this._lineLayer=this._band.createLayerDiv(1);this._lineLayer.setAttribute("name","ether-lines");this._lineLayer.style.display="none";var minDate=this._band.getMinDate();var maxDate=this._band.getMaxDate();var timeZone=this._band.getTimeZone();var labeller=this._band.getLabeller();var p=this;var incrementDate=function(date,zone){for(var i=0;i<zone.multiple;i++){Timeline.DateTime.incrementByInterval(date,zone.unit);}};var zStart=0;while(zStart<this._zones.length){if(minDate.getTime()<this._zones[zStart].endTime){break;}
-zStart++;}
-var zEnd=this._zones.length-1;while(zEnd>=0){if(maxDate.getTime()>this._zones[zEnd].startTime){break;}
-zEnd--;}
-for(var z=zStart;z<=zEnd;z++){var zone=this._zones[z];var minDate2=new Date(Math.max(minDate.getTime(),zone.startTime));var maxDate2=new Date(Math.min(maxDate.getTime(),zone.endTime));Timeline.DateTime.roundDownToInterval(minDate2,zone.unit,timeZone,zone.multiple,this._theme.firstDayOfWeek);Timeline.DateTime.roundUpToInterval(maxDate2,zone.unit,timeZone,zone.multiple,this._theme.firstDayOfWeek);while(minDate2.getTime()<maxDate2.getTime()){this._intervalMarkerLayout.createIntervalMarker(minDate2,labeller,zone.unit,this._markerLayer,this._lineLayer);incrementDate(minDate2,zone);}}
-this._markerLayer.style.display="block";this._lineLayer.style.display="block";};Timeline.HotZoneGregorianEtherPainter.prototype.softPaint=function(){};Timeline.YearCountEtherPainter=function(params){this._params=params;this._theme=params.theme;this._startDate=Timeline.DateTime.parseGregorianDateTime(params.startDate);this._multiple=("multiple"in params)?params.multiple:1;};Timeline.YearCountEtherPainter.prototype.initialize=function(band,timeline){this._band=band;this._timeline=timeline;this._backgroundLayer=band.createLayerDiv(0);this._backgroundLayer.setAttribute("name","ether-background");this._backgroundLayer.style.background=this._theme.ether.backgroundColors[band.getIndex()];this._markerLayer=null;this._lineLayer=null;var align=("align"in this._params)?this._params.align:this._theme.ether.interval.marker[timeline.isHorizontal()?"hAlign":"vAlign"];var showLine=("showLine"in this._params)?this._params.showLine:this._theme.ether.interval.line.show;this._intervalMarkerLayout=new Timeline.EtherIntervalMarkerLayout(this._timeline,this._band,this._theme,align,showLine);this._highlight=new Timeline.EtherHighlight(this._timeline,this._band,this._theme,this._backgroundLayer);};Timeline.YearCountEtherPainter.prototype.setHighlight=function(startDate,endDate){this._highlight.position(startDate,endDate);};Timeline.YearCountEtherPainter.prototype.paint=function(){if(this._markerLayer){this._band.removeLayerDiv(this._markerLayer);}
-this._markerLayer=this._band.createLayerDiv(100);this._markerLayer.setAttribute("name","ether-markers");this._markerLayer.style.display="none";if(this._lineLayer){this._band.removeLayerDiv(this._lineLayer);}
-this._lineLayer=this._band.createLayerDiv(1);this._lineLayer.setAttribute("name","ether-lines");this._lineLayer.style.display="none";var minDate=new Date(this._startDate.getTime());var maxDate=this._band.getMaxDate();var yearDiff=this._band.getMinDate().getUTCFullYear()-this._startDate.getUTCFullYear();minDate.setUTCFullYear(this._band.getMinDate().getUTCFullYear()-yearDiff%this._multiple);var p=this;var incrementDate=function(date){for(var i=0;i<p._multiple;i++){Timeline.DateTime.incrementByInterval(date,Timeline.DateTime.YEAR);}};var labeller={labelInterval:function(date,intervalUnit){var diff=date.getUTCFullYear()-p._startDate.getUTCFullYear();return{text:diff,emphasized:diff==0};}};while(minDate.getTime()<maxDate.getTime()){this._intervalMarkerLayout.createIntervalMarker(minDate,labeller,Timeline.DateTime.YEAR,this._markerLayer,this._lineLayer);incrementDate(minDate);}
-this._markerLayer.style.display="block";this._lineLayer.style.display="block";};Timeline.YearCountEtherPainter.prototype.softPaint=function(){};Timeline.QuarterlyEtherPainter=function(params){this._params=params;this._theme=params.theme;this._startDate=Timeline.DateTime.parseGregorianDateTime(params.startDate);};Timeline.QuarterlyEtherPainter.prototype.initialize=function(band,timeline){this._band=band;this._timeline=timeline;this._backgroundLayer=band.createLayerDiv(0);this._backgroundLayer.setAttribute("name","ether-background");this._backgroundLayer.style.background=this._theme.ether.backgroundColors[band.getIndex()];this._markerLayer=null;this._lineLayer=null;var align=("align"in this._params)?this._params.align:this._theme.ether.interval.marker[timeline.isHorizontal()?"hAlign":"vAlign"];var showLine=("showLine"in this._params)?this._params.showLine:this._theme.ether.interval.line.show;this._intervalMarkerLayout=new Timeline.EtherIntervalMarkerLayout(this._timeline,this._band,this._theme,align,showLine);this._highlight=new Timeline.EtherHighlight(this._timeline,this._band,this._theme,this._backgroundLayer);};Timeline.QuarterlyEtherPainter.prototype.setHighlight=function(startDate,endDate){this._highlight.position(startDate,endDate);};Timeline.QuarterlyEtherPainter.prototype.paint=function(){if(this._markerLayer){this._band.removeLayerDiv(this._markerLayer);}
-this._markerLayer=this._band.createLayerDiv(100);this._markerLayer.setAttribute("name","ether-markers");this._markerLayer.style.display="none";if(this._lineLayer){this._band.removeLayerDiv(this._lineLayer);}
-this._lineLayer=this._band.createLayerDiv(1);this._lineLayer.setAttribute("name","ether-lines");this._lineLayer.style.display="none";var minDate=new Date(0);var maxDate=this._band.getMaxDate();minDate.setUTCFullYear(Math.max(this._startDate.getUTCFullYear(),this._band.getMinDate().getUTCFullYear()));minDate.setUTCMonth(this._startDate.getUTCMonth());var p=this;var incrementDate=function(date){date.setUTCMonth(date.getUTCMonth()+3);};var labeller={labelInterval:function(date,intervalUnit){var quarters=(4+(date.getUTCMonth()-p._startDate.getUTCMonth())/3)%4;if(quarters!=0){return{text:"Q"+(quarters+1),emphasized:false};}else{return{text:"Y"+(date.getUTCFullYear()-p._startDate.getUTCFullYear()+1),emphasized:true};}}};while(minDate.getTime()<maxDate.getTime()){this._intervalMarkerLayout.createIntervalMarker(minDate,labeller,Timeline.DateTime.YEAR,this._markerLayer,this._lineLayer);incrementDate(minDate);}
-this._markerLayer.style.display="block";this._lineLayer.style.display="block";};Timeline.QuarterlyEtherPainter.prototype.softPaint=function(){};Timeline.EtherIntervalMarkerLayout=function(timeline,band,theme,align,showLine){var horizontal=timeline.isHorizontal();if(horizontal){if(align=="Top"){this.positionDiv=function(div,offset){div.style.left=offset+"px";div.style.top="0px";};}else{this.positionDiv=function(div,offset){div.style.left=offset+"px";div.style.bottom="0px";};}}else{if(align=="Left"){this.positionDiv=function(div,offset){div.style.top=offset+"px";div.style.left="0px";};}else{this.positionDiv=function(div,offset){div.style.top=offset+"px";div.style.right="0px";};}}
-var markerTheme=theme.ether.interval.marker;var lineTheme=theme.ether.interval.line;var weekendTheme=theme.ether.interval.weekend;var stylePrefix=(horizontal?"h":"v")+align;var labelStyler=markerTheme[stylePrefix+"Styler"];var emphasizedLabelStyler=markerTheme[stylePrefix+"EmphasizedStyler"];var day=Timeline.DateTime.gregorianUnitLengths[Timeline.DateTime.DAY];this.createIntervalMarker=function(date,labeller,unit,markerDiv,lineDiv){var offset=Math.round(band.dateToPixelOffset(date));if(showLine&&unit!=Timeline.DateTime.WEEK){var divLine=timeline.getDocument().createElement("div");divLine.style.position="absolute";if(lineTheme.opacity<100){Timeline.Graphics.setOpacity(divLine,lineTheme.opacity);}
-if(horizontal){divLine.style.borderLeft="1px solid "+lineTheme.color;divLine.style.left=offset+"px";divLine.style.width="1px";divLine.style.top="0px";divLine.style.height="100%";}else{divLine.style.borderTop="1px solid "+lineTheme.color;divLine.style.top=offset+"px";divLine.style.height="1px";divLine.style.left="0px";divLine.style.width="100%";}
-lineDiv.appendChild(divLine);}
-if(unit==Timeline.DateTime.WEEK){var firstDayOfWeek=theme.firstDayOfWeek;var saturday=new Date(date.getTime()+(6-firstDayOfWeek-7)*day);var monday=new Date(saturday.getTime()+2*day);var saturdayPixel=Math.round(band.dateToPixelOffset(saturday));var mondayPixel=Math.round(band.dateToPixelOffset(monday));var length=Math.max(1,mondayPixel-saturdayPixel);var divWeekend=timeline.getDocument().createElement("div");divWeekend.style.position="absolute";divWeekend.style.background=weekendTheme.color;if(weekendTheme.opacity<100){Timeline.Graphics.setOpacity(divWeekend,weekendTheme.opacity);}
-if(horizontal){divWeekend.style.left=saturdayPixel+"px";divWeekend.style.width=length+"px";divWeekend.style.top="0px";divWeekend.style.height="100%";}else{divWeekend.style.top=saturdayPixel+"px";divWeekend.style.height=length+"px";divWeekend.style.left="0px";divWeekend.style.width="100%";}
-lineDiv.appendChild(divWeekend);}
-var label=labeller.labelInterval(date,unit);var div=timeline.getDocument().createElement("div");div.innerHTML=label.text;div.style.position="absolute";(label.emphasized?emphasizedLabelStyler:labelStyler)(div);this.positionDiv(div,offset);markerDiv.appendChild(div);return div;};};Timeline.EtherHighlight=function(timeline,band,theme,backgroundLayer){var horizontal=timeline.isHorizontal();this._highlightDiv=null;this._createHighlightDiv=function(){if(this._highlightDiv==null){this._highlightDiv=timeline.getDocument().createElement("div");this._highlightDiv.setAttribute("name","ether-highlight");this._highlightDiv.style.position="absolute";this._highlightDiv.style.background=theme.ether.highlightColor;var opacity=theme.ether.highlightOpacity;if(opacity<100){Timeline.Graphics.setOpacity(this._highlightDiv,opacity);}
-backgroundLayer.appendChild(this._highlightDiv);}}
-this.position=function(startDate,endDate){this._createHighlightDiv();var startPixel=Math.round(band.dateToPixelOffset(startDate));var endPixel=Math.round(band.dateToPixelOffset(endDate));var length=Math.max(endPixel-startPixel,3);if(horizontal){this._highlightDiv.style.left=startPixel+"px";this._highlightDiv.style.width=length+"px";this._highlightDiv.style.top="2px";this._highlightDiv.style.height=(band.getViewWidth()-4)+"px";}else{this._highlightDiv.style.top=startPixel+"px";this._highlightDiv.style.height=length+"px";this._highlightDiv.style.left="2px";this._highlightDiv.style.width=(band.getViewWidth()-4)+"px";}}};
-
-/* ethers.js */
-
-Timeline.LinearEther=function(params){this._params=params;this._interval=params.interval;this._pixelsPerInterval=params.pixelsPerInterval;};Timeline.LinearEther.prototype.initialize=function(timeline){this._timeline=timeline;this._unit=timeline.getUnit();if("startsOn"in this._params){this._start=this._unit.parseFromObject(this._params.startsOn);}else if("endsOn"in this._params){this._start=this._unit.parseFromObject(this._params.endsOn);this.shiftPixels(-this._timeline.getPixelLength());}else if("centersOn"in this._params){this._start=this._unit.parseFromObject(this._params.centersOn);this.shiftPixels(-this._timeline.getPixelLength()/2);}else{this._start=this._unit.makeDefaultValue();this.shiftPixels(-this._timeline.getPixelLength()/2);}};Timeline.LinearEther.prototype.setDate=function(date){this._start=this._unit.cloneValue(date);};Timeline.LinearEther.prototype.shiftPixels=function(pixels){var numeric=this._interval*pixels/this._pixelsPerInterval;this._start=this._unit.change(this._start,numeric);};Timeline.LinearEther.prototype.dateToPixelOffset=function(date){var numeric=this._unit.compare(date,this._start);return this._pixelsPerInterval*numeric/this._interval;};Timeline.LinearEther.prototype.pixelOffsetToDate=function(pixels){var numeric=pixels*this._interval/this._pixelsPerInterval;return this._unit.change(this._start,numeric);};Timeline.HotZoneEther=function(params){this._params=params;this._interval=params.interval;this._pixelsPerInterval=params.pixelsPerInterval;};Timeline.HotZoneEther.prototype.initialize=function(timeline){this._timeline=timeline;this._unit=timeline.getUnit();this._zones=[{startTime:Number.NEGATIVE_INFINITY,endTime:Number.POSITIVE_INFINITY,magnify:1}];var params=this._params;for(var i=0;i<params.zones.length;i++){var zone=params.zones[i];var zoneStart=this._unit.parseFromObject(zone.start);var zoneEnd=this._unit.parseFromObject(zone.end);for(var j=0;j<this._zones.length&&this._unit.compare(zoneEnd,zoneStart)>0;j++){var zone2=this._zones[j];if(this._unit.compare(zoneStart,zone2.endTime)<0){if(this._unit.compare(zoneStart,zone2.startTime)>0){this._zones.splice(j,0,{startTime:zone2.startTime,endTime:zoneStart,magnify:zone2.magnify});j++;zone2.startTime=zoneStart;}
-if(this._unit.compare(zoneEnd,zone2.endTime)<0){this._zones.splice(j,0,{startTime:zoneStart,endTime:zoneEnd,magnify:zone.magnify*zone2.magnify});j++;zone2.startTime=zoneEnd;zoneStart=zoneEnd;}else{zone2.magnify*=zone.magnify;zoneStart=zone2.endTime;}}}}
-if("startsOn"in this._params){this._start=this._unit.parseFromObject(this._params.startsOn);}else if("endsOn"in this._params){this._start=this._unit.parseFromObject(this._params.endsOn);this.shiftPixels(-this._timeline.getPixelLength());}else if("centersOn"in this._params){this._start=this._unit.parseFromObject(this._params.centersOn);this.shiftPixels(-this._timeline.getPixelLength()/2);}else{this._start=this._unit.makeDefaultValue();this.shiftPixels(-this._timeline.getPixelLength()/2);}};Timeline.HotZoneEther.prototype.setDate=function(date){this._start=this._unit.cloneValue(date);};Timeline.HotZoneEther.prototype.shiftPixels=function(pixels){this._start=this.pixelOffsetToDate(pixels);};Timeline.HotZoneEther.prototype.dateToPixelOffset=function(date){return this._dateDiffToPixelOffset(this._start,date);};Timeline.HotZoneEther.prototype.pixelOffsetToDate=function(pixels){return this._pixelOffsetToDate(pixels,this._start);};Timeline.HotZoneEther.prototype._dateDiffToPixelOffset=function(fromDate,toDate){var scale=this._getScale();var fromTime=fromDate;var toTime=toDate;var pixels=0;if(this._unit.compare(fromTime,toTime)<0){var z=0;while(z<this._zones.length){if(this._unit.compare(fromTime,this._zones[z].endTime)<0){break;}
-z++;}
-while(this._unit.compare(fromTime,toTime)<0){var zone=this._zones[z];var toTime2=this._unit.earlier(toTime,zone.endTime);pixels+=(this._unit.compare(toTime2,fromTime)/(scale/zone.magnify));fromTime=toTime2;z++;}}else{var z=this._zones.length-1;while(z>=0){if(this._unit.compare(fromTime,this._zones[z].startTime)>0){break;}
-z--;}
-while(this._unit.compare(fromTime,toTime)>0){var zone=this._zones[z];var toTime2=this._unit.later(toTime,zone.startTime);pixels+=(this._unit.compare(toTime2,fromTime)/(scale/zone.magnify));fromTime=toTime2;z--;}}
-return pixels;};Timeline.HotZoneEther.prototype._pixelOffsetToDate=function(pixels,fromDate){var scale=this._getScale();var time=fromDate;if(pixels>0){var z=0;while(z<this._zones.length){if(this._unit.compare(time,this._zones[z].endTime)<0){break;}
-z++;}
-while(pixels>0){var zone=this._zones[z];var scale2=scale/zone.magnify;if(zone.endTime==Number.POSITIVE_INFINITY){time=this._unit.change(time,pixels*scale2);pixels=0;}else{var pixels2=this._unit.compare(zone.endTime,time)/scale2;if(pixels2>pixels){time=this._unit.change(time,pixels*scale2);pixels=0;}else{time=zone.endTime;pixels-=pixels2;}}
-z++;}}else{var z=this._zones.length-1;while(z>=0){if(this._unit.compare(time,this._zones[z].startTime)>0){break;}
-z--;}
-pixels=-pixels;while(pixels>0){var zone=this._zones[z];var scale2=scale/zone.magnify;if(zone.startTime==Number.NEGATIVE_INFINITY){time=this._unit.change(time,-pixels*scale2);pixels=0;}else{var pixels2=this._unit.compare(time,zone.startTime)/scale2;if(pixels2>pixels){time=this._unit.change(time,-pixels*scale2);pixels=0;}else{time=zone.startTime;pixels-=pixels2;}}
-z--;}}
-return time;};Timeline.HotZoneEther.prototype._getScale=function(){return this._interval/this._pixelsPerInterval;};
-
-/* labellers.js */
-
-Timeline.GregorianDateLabeller=function(locale,timeZone){this._locale=locale;this._timeZone=timeZone;};Timeline.GregorianDateLabeller.dayNames=[];Timeline.GregorianDateLabeller.labelIntervalFunctions=[];
-
-
-/*
-	Modified by Ben for Zotero
-*/
+Timeline.Debug = new Object;
+
+Timeline.Debug.log = function(msg) {};
+
+Timeline.Debug.exception = function(e) {
+    alert("Caught exception: " + (Timeline.Platform.isIE ? e.message : e));
+};
+
+Timeline.DOM = new Object;
+
+Timeline.DOM.registerEventWithObject = function(elmt, eventName, obj, handler) {
+    Timeline.DOM.registerEvent(elmt, eventName, function(elmt2, evt, target) {
+        return handler.call(obj, elmt2, evt, target);
+    });
+};
+
+Timeline.DOM.registerEvent = function(elmt, eventName, handler) {
+    var handler2 = function(evt) {
+        evt = evt ? evt : event ? event : null;
+        if (evt) {
+            var target = evt.target ? evt.target : evt.srcElement ? evt.srcElement : null;
+            target && (target = target.nodeType == 1 || target.nodeType == 9 ? target : target.parentNode);
+            return handler(elmt, evt, target);
+        }
+        return !0;
+    };
+    Timeline.Platform.browser.isIE ? elmt.attachEvent("on" + eventName, handler2) : elmt.addEventListener(eventName, handler2, !1);
+};
+
+Timeline.DOM.getPageCoordinates = function(elmt) {
+    var left = 0, top = 0;
+    elmt.nodeType != 1 && (elmt = elmt.parentNode);
+    while (elmt != null) {
+        left += elmt.offsetLeft;
+        top += elmt.offsetTop;
+        elmt = elmt.offsetParent;
+    }
+    return {
+        left: left,
+        top: top
+    };
+};
+
+Timeline.DOM.getEventRelativeCoordinates = function(evt, elmt) {
+    if (Timeline.Platform.browser.isIE) return {
+        x: evt.offsetX,
+        y: evt.offsetY
+    };
+    var coords = Timeline.DOM.getPageCoordinates(elmt);
+    return {
+        x: evt.pageX - coords.left,
+        y: evt.pageY - coords.top
+    };
+};
+
+Timeline.DOM.cancelEvent = function(evt) {
+    evt.returnValue = !1;
+    evt.cancelBubble = !0;
+    "preventDefault" in evt && evt.preventDefault();
+};
+
+Timeline.Graphics = new Object;
+
+Timeline.Graphics.pngIsTranslucent = !Timeline.Platform.browser.isIE || Timeline.Platform.browser.majorVersion > 6;
+
+Timeline.Graphics.createTranslucentImage = function(doc, url, verticalAlign) {
+    var elmt;
+    if (Timeline.Graphics.pngIsTranslucent) {
+        elmt = doc.createElement("img");
+        elmt.setAttribute("src", url);
+    } else {
+        elmt = doc.createElement("img");
+        elmt.style.display = "inline";
+        elmt.style.width = "1px";
+        elmt.style.height = "1px";
+        elmt.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + url + "', sizingMethod='image')";
+    }
+    elmt.style.verticalAlign = verticalAlign != null ? verticalAlign : "middle";
+    return elmt;
+};
+
+Timeline.Graphics.setOpacity = function(elmt, opacity) {
+    if (Timeline.Platform.browser.isIE) elmt.style.filter = "progid:DXImageTransform.Microsoft.Alpha(Style=0,Opacity=" + opacity + ")"; else {
+        var o = (opacity / 100).toString();
+        elmt.style.opacity = o;
+        elmt.style.MozOpacity = o;
+    }
+};
+
+Timeline.Graphics._bubbleMargins = {
+    top: 33,
+    bottom: 42,
+    left: 33,
+    right: 40
+};
+
+Timeline.Graphics._arrowOffsets = {
+    top: 0,
+    bottom: 9,
+    left: 1,
+    right: 8
+};
+
+Timeline.Graphics._bubblePadding = 15;
+
+Timeline.Graphics._bubblePointOffset = 6;
+
+Timeline.Graphics._halfArrowWidth = 18;
+
+Timeline.Graphics.createBubbleForPoint = function(doc, pageX, pageY, contentWidth, contentHeight) {
+    var bubble = {
+        _closed: !1,
+        _doc: doc,
+        close: function() {
+            if (!this._closed) {
+                this._doc.body.removeChild(this._div);
+                this._doc = null;
+                this._div = null;
+                this._content = null;
+                this._closed = !0;
+            }
+        }
+    }, docWidth = doc.body.offsetWidth, docHeight = doc.body.offsetHeight, margins = Timeline.Graphics._bubbleMargins, bubbleWidth = margins.left + contentWidth + margins.right, bubbleHeight = margins.top + contentHeight + margins.bottom, pngIsTranslucent = Timeline.Graphics.pngIsTranslucent, urlPrefix = Timeline.urlPrefix, setImg = function(elmt, url, width, height) {
+        elmt.style.position = "absolute";
+        elmt.style.width = width + "px";
+        elmt.style.height = height + "px";
+        pngIsTranslucent ? elmt.style.background = "url(" + url + ")" : elmt.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + url + "', sizingMethod='crop')";
+    }, div = doc.createElement("div");
+    div.style.width = bubbleWidth + "px";
+    div.style.height = bubbleHeight + "px";
+    div.style.position = "absolute";
+    div.style.zIndex = 1e3;
+    bubble._div = div;
+    var divInner = doc.createElement("div");
+    divInner.style.width = "100%";
+    divInner.style.height = "100%";
+    divInner.style.position = "relative";
+    div.appendChild(divInner);
+    var createImg = function(url, left, top, width, height) {
+        var divImg = doc.createElement("div");
+        divImg.style.left = left + "px";
+        divImg.style.top = top + "px";
+        setImg(divImg, url, width, height);
+        divInner.appendChild(divImg);
+    };
+    createImg(urlPrefix + "images/bubble-top-left.png", 0, 0, margins.left, margins.top);
+    createImg(urlPrefix + "images/bubble-top.png", margins.left, 0, contentWidth, margins.top);
+    createImg(urlPrefix + "images/bubble-top-right.png", margins.left + contentWidth, 0, margins.right, margins.top);
+    createImg(urlPrefix + "images/bubble-left.png", 0, margins.top, margins.left, contentHeight);
+    createImg(urlPrefix + "images/bubble-right.png", margins.left + contentWidth, margins.top, margins.right, contentHeight);
+    createImg(urlPrefix + "images/bubble-bottom-left.png", 0, margins.top + contentHeight, margins.left, margins.bottom);
+    createImg(urlPrefix + "images/bubble-bottom.png", margins.left, margins.top + contentHeight, contentWidth, margins.bottom);
+    createImg(urlPrefix + "images/bubble-bottom-right.png", margins.left + contentWidth, margins.top + contentHeight, margins.right, margins.bottom);
+    var divClose = doc.createElement("div");
+    divClose.style.left = bubbleWidth - margins.right + Timeline.Graphics._bubblePadding - 16 - 2 + "px";
+    divClose.style.top = margins.top - Timeline.Graphics._bubblePadding + 1 + "px";
+    divClose.style.cursor = "pointer";
+    setImg(divClose, urlPrefix + "images/close-button.png", 16, 16);
+    Timeline.DOM.registerEventWithObject(divClose, "click", bubble, bubble.close);
+    divInner.appendChild(divClose);
+    var divContent = doc.createElement("div");
+    divContent.style.position = "absolute";
+    divContent.style.left = margins.left + "px";
+    divContent.style.top = margins.top + "px";
+    divContent.style.width = contentWidth + "px";
+    divContent.style.height = contentHeight + "px";
+    divContent.style.overflow = "auto";
+    divContent.style.background = "white";
+    divInner.appendChild(divContent);
+    bubble.content = divContent;
+    (function() {
+        if (pageX - Timeline.Graphics._halfArrowWidth - Timeline.Graphics._bubblePadding > 0 && pageX + Timeline.Graphics._halfArrowWidth + Timeline.Graphics._bubblePadding < docWidth) {
+            var left = pageX - Math.round(contentWidth / 2) - margins.left;
+            left = pageX < docWidth / 2 ? Math.max(left, -(margins.left - Timeline.Graphics._bubblePadding)) : Math.min(left, docWidth + (margins.right - Timeline.Graphics._bubblePadding) - bubbleWidth);
+            if (pageY - Timeline.Graphics._bubblePointOffset - bubbleHeight > 0) {
+                var divImg = doc.createElement("div");
+                divImg.style.left = pageX - Timeline.Graphics._halfArrowWidth - left + "px";
+                divImg.style.top = margins.top + contentHeight + "px";
+                setImg(divImg, urlPrefix + "images/bubble-bottom-arrow.png", 37, margins.bottom);
+                divInner.appendChild(divImg);
+                div.style.left = left + "px";
+                div.style.top = pageY - Timeline.Graphics._bubblePointOffset - bubbleHeight + Timeline.Graphics._arrowOffsets.bottom + "px";
+                return;
+            }
+            if (pageY + Timeline.Graphics._bubblePointOffset + bubbleHeight < docHeight) {
+                var divImg = doc.createElement("div");
+                divImg.style.left = pageX - Timeline.Graphics._halfArrowWidth - left + "px";
+                divImg.style.top = "0px";
+                setImg(divImg, urlPrefix + "images/bubble-top-arrow.png", 37, margins.top);
+                divInner.appendChild(divImg);
+                div.style.left = left + "px";
+                div.style.top = pageY + Timeline.Graphics._bubblePointOffset - Timeline.Graphics._arrowOffsets.top + "px";
+                return;
+            }
+        }
+        var top = pageY - Math.round(contentHeight / 2) - margins.top;
+        top = pageY < docHeight / 2 ? Math.max(top, -(margins.top - Timeline.Graphics._bubblePadding)) : Math.min(top, docHeight + (margins.bottom - Timeline.Graphics._bubblePadding) - bubbleHeight);
+        if (pageX - Timeline.Graphics._bubblePointOffset - bubbleWidth > 0) {
+            var divImg = doc.createElement("div");
+            divImg.style.left = margins.left + contentWidth + "px";
+            divImg.style.top = pageY - Timeline.Graphics._halfArrowWidth - top + "px";
+            setImg(divImg, urlPrefix + "images/bubble-right-arrow.png", margins.right, 37);
+            divInner.appendChild(divImg);
+            div.style.left = pageX - Timeline.Graphics._bubblePointOffset - bubbleWidth + Timeline.Graphics._arrowOffsets.right + "px";
+            div.style.top = top + "px";
+        } else {
+            var divImg = doc.createElement("div");
+            divImg.style.left = "0px";
+            divImg.style.top = pageY - Timeline.Graphics._halfArrowWidth - top + "px";
+            setImg(divImg, urlPrefix + "images/bubble-left-arrow.png", margins.left, 37);
+            divInner.appendChild(divImg);
+            div.style.left = pageX + Timeline.Graphics._bubblePointOffset - Timeline.Graphics._arrowOffsets.left + "px";
+            div.style.top = top + "px";
+        }
+    })();
+    doc.body.appendChild(div);
+    return bubble;
+};
+
+Timeline.Graphics.createMessageBubble = function(doc) {
+    var containerDiv = doc.createElement("div");
+    if (Timeline.Graphics.pngIsTranslucent) {
+        var topDiv = doc.createElement("div");
+        topDiv.style.height = "33px";
+        topDiv.style.background = "url(" + Timeline.urlPrefix + "images/message-top-left.png) top left no-repeat";
+        topDiv.style.paddingLeft = "44px";
+        containerDiv.appendChild(topDiv);
+        var topRightDiv = doc.createElement("div");
+        topRightDiv.style.height = "33px";
+        topRightDiv.style.background = "url(" + Timeline.urlPrefix + "images/message-top-right.png) top right no-repeat";
+        topDiv.appendChild(topRightDiv);
+        var middleDiv = doc.createElement("div");
+        middleDiv.style.background = "url(" + Timeline.urlPrefix + "images/message-left.png) top left repeat-y";
+        middleDiv.style.paddingLeft = "44px";
+        containerDiv.appendChild(middleDiv);
+        var middleRightDiv = doc.createElement("div");
+        middleRightDiv.style.background = "url(" + Timeline.urlPrefix + "images/message-right.png) top right repeat-y";
+        middleRightDiv.style.paddingRight = "44px";
+        middleDiv.appendChild(middleRightDiv);
+        var contentDiv = doc.createElement("div");
+        middleRightDiv.appendChild(contentDiv);
+        var bottomDiv = doc.createElement("div");
+        bottomDiv.style.height = "55px";
+        bottomDiv.style.background = "url(" + Timeline.urlPrefix + "images/message-bottom-left.png) bottom left no-repeat";
+        bottomDiv.style.paddingLeft = "44px";
+        containerDiv.appendChild(bottomDiv);
+        var bottomRightDiv = doc.createElement("div");
+        bottomRightDiv.style.height = "55px";
+        bottomRightDiv.style.background = "url(" + Timeline.urlPrefix + "images/message-bottom-right.png) bottom right no-repeat";
+        bottomDiv.appendChild(bottomRightDiv);
+    } else {
+        containerDiv.style.border = "2px solid #7777AA";
+        containerDiv.style.padding = "20px";
+        containerDiv.style.background = "white";
+        Timeline.Graphics.setOpacity(containerDiv, 90);
+        var contentDiv = doc.createElement("div");
+        containerDiv.appendChild(contentDiv);
+    }
+    return {
+        containerDiv: containerDiv,
+        contentDiv: contentDiv
+    };
+};
+
+Timeline.Graphics.createAnimation = function(f, from, to, duration) {
+    return new Timeline.Graphics._Animation(f, from, to, duration);
+};
+
+Timeline.Graphics._Animation = function(f, from, to, duration) {
+    this.f = f;
+    this.from = from;
+    this.to = to;
+    this.current = from;
+    this.duration = duration;
+    this.start = (new Date).getTime();
+    this.timePassed = 0;
+};
+
+Timeline.Graphics._Animation.prototype.run = function() {
+    var a = this;
+    window.setTimeout(function() {
+        a.step();
+    }, 100);
+};
+
+Timeline.Graphics._Animation.prototype.step = function() {
+    this.timePassed += 100;
+    var timePassedFraction = this.timePassed / this.duration, parameterFraction = -Math.cos(timePassedFraction * Math.PI) / 2 + .5, current = parameterFraction * (this.to - this.from) + this.from;
+    try {
+        this.f(current, current - this.current);
+    } catch (e) {}
+    this.current = current;
+    this.timePassed < this.duration && this.run();
+};
+
+Timeline.HTML = new Object;
+
+Timeline.HTML._e2uHash = {};
+
+(function() {
+    var e2uHash = Timeline.HTML._e2uHash;
+    e2uHash.nbsp = " [space]";
+    e2uHash.iexcl = "¡";
+    e2uHash.cent = "¢";
+    e2uHash.pound = "£";
+    e2uHash.curren = "¤";
+    e2uHash.yen = "¥";
+    e2uHash.brvbar = "¦";
+    e2uHash.sect = "§";
+    e2uHash.uml = "¨";
+    e2uHash.copy = "©";
+    e2uHash.ordf = "ª";
+    e2uHash.laquo = "«";
+    e2uHash.not = "¬";
+    e2uHash.shy = "­";
+    e2uHash.reg = "®";
+    e2uHash.macr = "¯";
+    e2uHash.deg = "°";
+    e2uHash.plusmn = "±";
+    e2uHash.sup2 = "²";
+    e2uHash.sup3 = "³";
+    e2uHash.acute = "´";
+    e2uHash.micro = "µ";
+    e2uHash.para = "¶";
+    e2uHash.middot = "·";
+    e2uHash.cedil = "¸";
+    e2uHash.sup1 = "¹";
+    e2uHash.ordm = "º";
+    e2uHash.raquo = "»";
+    e2uHash.frac14 = "¼";
+    e2uHash.frac12 = "½";
+    e2uHash.frac34 = "¾";
+    e2uHash.iquest = "¿";
+    e2uHash.Agrave = "À";
+    e2uHash.Aacute = "Á";
+    e2uHash.Acirc = "Â";
+    e2uHash.Atilde = "Ã";
+    e2uHash.Auml = "Ä";
+    e2uHash.Aring = "Å";
+    e2uHash.AElig = "Æ";
+    e2uHash.Ccedil = "Ç";
+    e2uHash.Egrave = "È";
+    e2uHash.Eacute = "É";
+    e2uHash.Ecirc = "Ê";
+    e2uHash.Euml = "Ë";
+    e2uHash.Igrave = "Ì";
+    e2uHash.Iacute = "Í";
+    e2uHash.Icirc = "Î";
+    e2uHash.Iuml = "Ï";
+    e2uHash.ETH = "Ð";
+    e2uHash.Ntilde = "Ñ";
+    e2uHash.Ograve = "Ò";
+    e2uHash.Oacute = "Ó";
+    e2uHash.Ocirc = "Ô";
+    e2uHash.Otilde = "Õ";
+    e2uHash.Ouml = "Ö";
+    e2uHash.times = "×";
+    e2uHash.Oslash = "Ø";
+    e2uHash.Ugrave = "Ù";
+    e2uHash.Uacute = "Ú";
+    e2uHash.Ucirc = "Û";
+    e2uHash.Uuml = "Ü";
+    e2uHash.Yacute = "Ý";
+    e2uHash.THORN = "Þ";
+    e2uHash.szlig = "ß";
+    e2uHash.agrave = "à";
+    e2uHash.aacute = "á";
+    e2uHash.acirc = "â";
+    e2uHash.atilde = "ã";
+    e2uHash.auml = "ä";
+    e2uHash.aring = "å";
+    e2uHash.aelig = "æ";
+    e2uHash.ccedil = "ç";
+    e2uHash.egrave = "è";
+    e2uHash.eacute = "é";
+    e2uHash.ecirc = "ê";
+    e2uHash.euml = "ë";
+    e2uHash.igrave = "ì";
+    e2uHash.iacute = "í";
+    e2uHash.icirc = "î";
+    e2uHash.iuml = "ï";
+    e2uHash.eth = "ð";
+    e2uHash.ntilde = "ñ";
+    e2uHash.ograve = "ò";
+    e2uHash.oacute = "ó";
+    e2uHash.ocirc = "ô";
+    e2uHash.otilde = "õ";
+    e2uHash.ouml = "ö";
+    e2uHash.divide = "÷";
+    e2uHash.oslash = "ø";
+    e2uHash.ugrave = "ù";
+    e2uHash.uacute = "ú";
+    e2uHash.ucirc = "û";
+    e2uHash.uuml = "ü";
+    e2uHash.yacute = "ý";
+    e2uHash.thorn = "þ";
+    e2uHash.yuml = "ÿ";
+    e2uHash.quot = '"';
+    e2uHash.amp = "&";
+    e2uHash.lt = "<";
+    e2uHash.gt = ">";
+    e2uHash.OElig = "";
+    e2uHash.oelig = "œ";
+    e2uHash.Scaron = "Š";
+    e2uHash.scaron = "š";
+    e2uHash.Yuml = "Ÿ";
+    e2uHash.circ = "ˆ";
+    e2uHash.tilde = "˜";
+    e2uHash.ensp = " ";
+    e2uHash.emsp = " ";
+    e2uHash.thinsp = " ";
+    e2uHash.zwnj = "‌";
+    e2uHash.zwj = "‍";
+    e2uHash.lrm = "‎";
+    e2uHash.rlm = "‏";
+    e2uHash.ndash = "–";
+    e2uHash.mdash = "—";
+    e2uHash.lsquo = "‘";
+    e2uHash.rsquo = "’";
+    e2uHash.sbquo = "‚";
+    e2uHash.ldquo = "“";
+    e2uHash.rdquo = "”";
+    e2uHash.bdquo = "„";
+    e2uHash.dagger = "†";
+    e2uHash.Dagger = "‡";
+    e2uHash.permil = "‰";
+    e2uHash.lsaquo = "‹";
+    e2uHash.rsaquo = "›";
+    e2uHash.euro = "€";
+    e2uHash.fnof = "ƒ";
+    e2uHash.Alpha = "Α";
+    e2uHash.Beta = "Β";
+    e2uHash.Gamma = "Γ";
+    e2uHash.Delta = "Δ";
+    e2uHash.Epsilon = "Ε";
+    e2uHash.Zeta = "Ζ";
+    e2uHash.Eta = "Η";
+    e2uHash.Theta = "Θ";
+    e2uHash.Iota = "Ι";
+    e2uHash.Kappa = "Κ";
+    e2uHash.Lambda = "Λ";
+    e2uHash.Mu = "Μ";
+    e2uHash.Nu = "Ν";
+    e2uHash.Xi = "Ξ";
+    e2uHash.Omicron = "Ο";
+    e2uHash.Pi = "Π";
+    e2uHash.Rho = "Ρ";
+    e2uHash.Sigma = "Σ";
+    e2uHash.Tau = "Τ";
+    e2uHash.Upsilon = "Υ";
+    e2uHash.Phi = "Φ";
+    e2uHash.Chi = "Χ";
+    e2uHash.Psi = "Ψ";
+    e2uHash.Omega = "Ω";
+    e2uHash.alpha = "α";
+    e2uHash.beta = "β";
+    e2uHash.gamma = "γ";
+    e2uHash.delta = "δ";
+    e2uHash.epsilon = "ε";
+    e2uHash.zeta = "ζ";
+    e2uHash.eta = "η";
+    e2uHash.theta = "θ";
+    e2uHash.iota = "ι";
+    e2uHash.kappa = "κ";
+    e2uHash.lambda = "λ";
+    e2uHash.mu = "μ";
+    e2uHash.nu = "ν";
+    e2uHash.xi = "ξ";
+    e2uHash.omicron = "ο";
+    e2uHash.pi = "π";
+    e2uHash.rho = "ρ";
+    e2uHash.sigmaf = "ς";
+    e2uHash.sigma = "σ";
+    e2uHash.tau = "τ";
+    e2uHash.upsilon = "υ";
+    e2uHash.phi = "φ";
+    e2uHash.chi = "χ";
+    e2uHash.psi = "ψ";
+    e2uHash.omega = "ω";
+    e2uHash.thetasym = "ϑ";
+    e2uHash.upsih = "ϒ";
+    e2uHash.piv = "ϖ";
+    e2uHash.bull = "•";
+    e2uHash.hellip = "…";
+    e2uHash.prime = "′";
+    e2uHash.Prime = "″";
+    e2uHash.oline = "‾";
+    e2uHash.frasl = "⁄";
+    e2uHash.weierp = "℘";
+    e2uHash.image = "ℑ";
+    e2uHash.real = "ℜ";
+    e2uHash.trade = "™";
+    e2uHash.alefsym = "ℵ";
+    e2uHash.larr = "←";
+    e2uHash.uarr = "↑";
+    e2uHash.rarr = "→";
+    e2uHash.darr = "↓";
+    e2uHash.harr = "↔";
+    e2uHash.crarr = "↵";
+    e2uHash.lArr = "⇐";
+    e2uHash.uArr = "⇑";
+    e2uHash.rArr = "⇒";
+    e2uHash.dArr = "⇓";
+    e2uHash.hArr = "⇔";
+    e2uHash.forall = "∀";
+    e2uHash.part = "∂";
+    e2uHash.exist = "∃";
+    e2uHash.empty = "∅";
+    e2uHash.nabla = "∇";
+    e2uHash.isin = "∈";
+    e2uHash.notin = "∉";
+    e2uHash.ni = "∋";
+    e2uHash.prod = "∏";
+    e2uHash.sum = "∑";
+    e2uHash.minus = "−";
+    e2uHash.lowast = "∗";
+    e2uHash.radic = "√";
+    e2uHash.prop = "∝";
+    e2uHash.infin = "∞";
+    e2uHash.ang = "∠";
+    e2uHash.and = "∧";
+    e2uHash.or = "∨";
+    e2uHash.cap = "∩";
+    e2uHash.cup = "∪";
+    e2uHash["int"] = "∫";
+    e2uHash.there4 = "∴";
+    e2uHash.sim = "∼";
+    e2uHash.cong = "≅";
+    e2uHash.asymp = "≈";
+    e2uHash.ne = "≠";
+    e2uHash.equiv = "≡";
+    e2uHash.le = "≤";
+    e2uHash.ge = "≥";
+    e2uHash.sub = "⊂";
+    e2uHash.sup = "⊃";
+    e2uHash.nsub = "⊄";
+    e2uHash.sube = "⊆";
+    e2uHash.supe = "⊇";
+    e2uHash.oplus = "⊕";
+    e2uHash.otimes = "⊗";
+    e2uHash.perp = "⊥";
+    e2uHash.sdot = "⋅";
+    e2uHash.lceil = "⌈";
+    e2uHash.rceil = "⌉";
+    e2uHash.lfloor = "⌊";
+    e2uHash.rfloor = "⌋";
+    e2uHash.lang = "〈";
+    e2uHash.rang = "〉";
+    e2uHash.loz = "◊";
+    e2uHash.spades = "♠";
+    e2uHash.clubs = "♣";
+    e2uHash.hearts = "♥";
+    e2uHash.diams = "♦";
+})();
+
+Timeline.HTML.deEntify = function(s) {
+    var e2uHash = Timeline.HTML._e2uHash, re = /&(\w+?);/;
+    while (re.test(s)) {
+        var m = s.match(re);
+        s = s.replace(re, e2uHash[m[1]]);
+    }
+    return s;
+};
+
+Timeline.XmlHttp = new Object;
+
+Timeline.XmlHttp._onReadyStateChange = function(xmlhttp, fError, fDone) {
+    switch (xmlhttp.readyState) {
+      case 4:
+        try {
+            xmlhttp.status == 0 || xmlhttp.status == 200 ? fDone && fDone(xmlhttp) : fError && fError(xmlhttp.statusText, xmlhttp.status, xmlhttp);
+        } catch (e) {
+            Timeline.Debug.exception(e);
+        }
+    }
+};
+
+Timeline.XmlHttp._createRequest = function() {
+    if (Timeline.Platform.browser.isIE) {
+        var programIDs = [ "Msxml2.XMLHTTP", "Microsoft.XMLHTTP", "Msxml2.XMLHTTP.4.0" ];
+        for (var i = 0; i < programIDs.length; i++) try {
+            var programID = programIDs[i], f = function() {
+                return new ActiveXObject(programID);
+            }, o = f();
+            Timeline.XmlHttp._createRequest = f;
+            return o;
+        } catch (e) {}
+        throw new Error("Failed to create an XMLHttpRequest object");
+    }
+    try {
+        var f = function() {
+            return new XMLHttpRequest;
+        }, o = f();
+        Timeline.XmlHttp._createRequest = f;
+        return o;
+    } catch (e) {
+        throw new Error("Failed to create an XMLHttpRequest object");
+    }
+};
+
+Timeline.XmlHttp.get = function(url, fError, fDone) {
+    var xmlhttp = Timeline.XmlHttp._createRequest();
+    xmlhttp.open("GET", url, !0);
+    xmlhttp.onreadystatechange = function() {
+        Timeline.XmlHttp._onReadyStateChange(xmlhttp, fError, fDone);
+    };
+    xmlhttp.send(null);
+};
+
+Timeline.XmlHttp.post = function(url, body, fError, fDone) {
+    var xmlhttp = Timeline.XmlHttp._createRequest();
+    xmlhttp.open("POST", url, !0);
+    xmlhttp.onreadystatechange = function() {
+        Timeline.XmlHttp._onReadyStateChange(xmlhttp, fError, fDone);
+    };
+    xmlhttp.send(body);
+};
+
+Timeline.XmlHttp._forceXML = function(xmlhttp) {
+    try {
+        xmlhttp.overrideMimeType("text/xml");
+    } catch (e) {
+        xmlhttp.setrequestheader("Content-Type", "text/xml");
+    }
+};
+
+Timeline.SpanHighlightDecorator = function(params) {
+    this._unit = "unit" in params ? params.unit : Timeline.NativeDateUnit;
+    this._startDate = typeof params.startDate == "string" ? this._unit.parseFromObject(params.startDate) : params.startDate;
+    this._endDate = typeof params.endDate == "string" ? this._unit.parseFromObject(params.endDate) : params.endDate;
+    this._startLabel = params.startLabel;
+    this._endLabel = params.endLabel;
+    this._color = params.color;
+    this._opacity = "opacity" in params ? params.opacity : 100;
+};
+
+Timeline.SpanHighlightDecorator.prototype.initialize = function(band, timeline) {
+    this._band = band;
+    this._timeline = timeline;
+    this._layerDiv = null;
+};
+
+Timeline.SpanHighlightDecorator.prototype.paint = function() {
+    this._layerDiv != null && this._band.removeLayerDiv(this._layerDiv);
+    this._layerDiv = this._band.createLayerDiv(10);
+    this._layerDiv.setAttribute("name", "span-highlight-decorator");
+    this._layerDiv.style.display = "none";
+    var minDate = this._band.getMinDate(), maxDate = this._band.getMaxDate();
+    if (this._unit.compare(this._startDate, maxDate) < 0 && this._unit.compare(this._endDate, minDate) > 0) {
+        minDate = this._unit.later(minDate, this._startDate);
+        maxDate = this._unit.earlier(maxDate, this._endDate);
+        var minPixel = this._band.dateToPixelOffset(minDate), maxPixel = this._band.dateToPixelOffset(maxDate), doc = this._timeline.getDocument(), createTable = function() {
+            var table = doc.createElement("table");
+            table.insertRow(0).insertCell(0);
+            return table;
+        }, div = doc.createElement("div");
+        div.style.position = "absolute";
+        div.style.overflow = "hidden";
+        div.style.background = this._color;
+        this._opacity < 100 && Timeline.Graphics.setOpacity(div, this._opacity);
+        this._layerDiv.appendChild(div);
+        var tableStartLabel = createTable();
+        tableStartLabel.style.position = "absolute";
+        tableStartLabel.style.overflow = "hidden";
+        tableStartLabel.style.fontSize = "300%";
+        tableStartLabel.style.fontWeight = "bold";
+        tableStartLabel.style.color = this._color;
+        tableStartLabel.rows[0].cells[0].innerHTML = this._startLabel;
+        this._layerDiv.appendChild(tableStartLabel);
+        var tableEndLabel = createTable();
+        tableEndLabel.style.position = "absolute";
+        tableEndLabel.style.overflow = "hidden";
+        tableEndLabel.style.fontSize = "300%";
+        tableEndLabel.style.fontWeight = "bold";
+        tableEndLabel.style.color = this._color;
+        tableEndLabel.rows[0].cells[0].innerHTML = this._endLabel;
+        this._layerDiv.appendChild(tableEndLabel);
+        if (this._timeline.isHorizontal()) {
+            div.style.left = minPixel + "px";
+            div.style.width = maxPixel - minPixel + "px";
+            div.style.top = "0px";
+            div.style.height = "100%";
+            tableStartLabel.style.right = this._band.getTotalViewLength() - minPixel + "px";
+            tableStartLabel.style.width = this._startLabel.length + "em";
+            tableStartLabel.style.top = "0px";
+            tableStartLabel.style.height = "100%";
+            tableStartLabel.style.textAlign = "right";
+            tableEndLabel.style.left = maxPixel + "px";
+            tableEndLabel.style.width = this._endLabel.length + "em";
+            tableEndLabel.style.top = "0px";
+            tableEndLabel.style.height = "100%";
+        } else {
+            div.style.top = minPixel + "px";
+            div.style.height = maxPixel - minPixel + "px";
+            div.style.left = "0px";
+            div.style.width = "100%";
+            tableStartLabel.style.bottom = minPixel + "px";
+            tableStartLabel.style.height = "1.5px";
+            tableStartLabel.style.left = "0px";
+            tableStartLabel.style.width = "100%";
+            tableEndLabel.style.top = maxPixel + "px";
+            tableEndLabel.style.height = "1.5px";
+            tableEndLabel.style.left = "0px";
+            tableEndLabel.style.width = "100%";
+        }
+    }
+    this._layerDiv.style.display = "block";
+};
+
+Timeline.SpanHighlightDecorator.prototype.softPaint = function() {};
+
+Timeline.PointHighlightDecorator = function(params) {
+    this._unit = "unit" in params ? params.unit : Timeline.NativeDateUnit;
+    this._date = typeof params.date == "string" ? this._unit.parseFromObject(params.date) : params.date;
+    this._width = "width" in params ? params.width : 10;
+    this._color = params.color;
+    this._opacity = "opacity" in params ? params.opacity : 100;
+};
+
+Timeline.PointHighlightDecorator.prototype.initialize = function(band, timeline) {
+    this._band = band;
+    this._timeline = timeline;
+    this._layerDiv = null;
+};
+
+Timeline.PointHighlightDecorator.prototype.paint = function() {
+    this._layerDiv != null && this._band.removeLayerDiv(this._layerDiv);
+    this._layerDiv = this._band.createLayerDiv(10);
+    this._layerDiv.setAttribute("name", "span-highlight-decorator");
+    this._layerDiv.style.display = "none";
+    var minDate = this._band.getMinDate(), maxDate = this._band.getMaxDate();
+    if (this._unit.compare(this._date, maxDate) < 0 && this._unit.compare(this._date, minDate) > 0) {
+        var pixel = this._band.dateToPixelOffset(this._date), minPixel = pixel - Math.round(this._width / 2), doc = this._timeline.getDocument(), div = doc.createElement("div");
+        div.style.position = "absolute";
+        div.style.overflow = "hidden";
+        div.style.background = this._color;
+        this._opacity < 100 && Timeline.Graphics.setOpacity(div, this._opacity);
+        this._layerDiv.appendChild(div);
+        if (this._timeline.isHorizontal()) {
+            div.style.left = minPixel + "px";
+            div.style.width = this._width + "px";
+            div.style.top = "0px";
+            div.style.height = "100%";
+        } else {
+            div.style.top = minPixel + "px";
+            div.style.height = this._width + "px";
+            div.style.left = "0px";
+            div.style.width = "100%";
+        }
+    }
+    this._layerDiv.style.display = "block";
+};
+
+Timeline.PointHighlightDecorator.prototype.softPaint = function() {};
+
+Timeline.GregorianEtherPainter = function(params) {
+    this._params = params;
+    this._theme = params.theme;
+    this._unit = params.unit;
+    this._multiple = "multiple" in params ? params.multiple : 1;
+};
+
+Timeline.GregorianEtherPainter.prototype.initialize = function(band, timeline) {
+    this._band = band;
+    this._timeline = timeline;
+    this._backgroundLayer = band.createLayerDiv(0);
+    this._backgroundLayer.setAttribute("name", "ether-background");
+    this._backgroundLayer.style.background = this._theme.ether.backgroundColors[band.getIndex()];
+    this._markerLayer = null;
+    this._lineLayer = null;
+    var align = "align" in this._params && this._params.align != undefined ? this._params.align : this._theme.ether.interval.marker[timeline.isHorizontal() ? "hAlign" : "vAlign"], showLine = "showLine" in this._params ? this._params.showLine : this._theme.ether.interval.line.show;
+    this._intervalMarkerLayout = new Timeline.EtherIntervalMarkerLayout(this._timeline, this._band, this._theme, align, showLine);
+    this._highlight = new Timeline.EtherHighlight(this._timeline, this._band, this._theme, this._backgroundLayer);
+};
+
+Timeline.GregorianEtherPainter.prototype.setHighlight = function(startDate, endDate) {
+    this._highlight.position(startDate, endDate);
+};
+
+Timeline.GregorianEtherPainter.prototype.paint = function() {
+    this._markerLayer && this._band.removeLayerDiv(this._markerLayer);
+    this._markerLayer = this._band.createLayerDiv(100);
+    this._markerLayer.setAttribute("name", "ether-markers");
+    this._markerLayer.style.display = "none";
+    this._lineLayer && this._band.removeLayerDiv(this._lineLayer);
+    this._lineLayer = this._band.createLayerDiv(1);
+    this._lineLayer.setAttribute("name", "ether-lines");
+    this._lineLayer.style.display = "none";
+    var minDate = this._band.getMinDate(), maxDate = this._band.getMaxDate(), timeZone = this._band.getTimeZone(), labeller = this._band.getLabeller();
+    Timeline.DateTime.roundDownToInterval(minDate, this._unit, timeZone, 1, this._theme.firstDayOfWeek);
+    var p = this, incrementDate = function(date) {
+        for (var i = 0; i < p._multiple; i++) Timeline.DateTime.incrementByInterval(date, p._unit);
+    };
+    while (minDate.getTime() < maxDate.getTime()) {
+        this._intervalMarkerLayout.createIntervalMarker(minDate, labeller, this._unit, this._markerLayer, this._lineLayer);
+        incrementDate(minDate);
+    }
+    this._markerLayer.style.display = "block";
+    this._lineLayer.style.display = "block";
+};
+
+Timeline.GregorianEtherPainter.prototype.softPaint = function() {};
+
+Timeline.HotZoneGregorianEtherPainter = function(params) {
+    this._params = params;
+    this._theme = params.theme;
+    this._zones = [ {
+        startTime: Number.NEGATIVE_INFINITY,
+        endTime: Number.POSITIVE_INFINITY,
+        unit: params.unit,
+        multiple: 1
+    } ];
+    for (var i = 0; i < params.zones.length; i++) {
+        var zone = params.zones[i], zoneStart = Timeline.DateTime.parseGregorianDateTime(zone.start).getTime(), zoneEnd = Timeline.DateTime.parseGregorianDateTime(zone.end).getTime();
+        for (var j = 0; j < this._zones.length && zoneEnd > zoneStart; j++) {
+            var zone2 = this._zones[j];
+            if (zoneStart < zone2.endTime) {
+                if (zoneStart > zone2.startTime) {
+                    this._zones.splice(j, 0, {
+                        startTime: zone2.startTime,
+                        endTime: zoneStart,
+                        unit: zone2.unit,
+                        multiple: zone2.multiple
+                    });
+                    j++;
+                    zone2.startTime = zoneStart;
+                }
+                if (zoneEnd < zone2.endTime) {
+                    this._zones.splice(j, 0, {
+                        startTime: zoneStart,
+                        endTime: zoneEnd,
+                        unit: zone.unit,
+                        multiple: zone.multiple ? zone.multiple : 1
+                    });
+                    j++;
+                    zone2.startTime = zoneEnd;
+                    zoneStart = zoneEnd;
+                } else {
+                    zone2.multiple = zone.multiple;
+                    zone2.unit = zone.unit;
+                    zoneStart = zone2.endTime;
+                }
+            }
+        }
+    }
+};
+
+Timeline.HotZoneGregorianEtherPainter.prototype.initialize = function(band, timeline) {
+    this._band = band;
+    this._timeline = timeline;
+    this._backgroundLayer = band.createLayerDiv(0);
+    this._backgroundLayer.setAttribute("name", "ether-background");
+    this._backgroundLayer.style.background = this._theme.ether.backgroundColors[band.getIndex()];
+    this._markerLayer = null;
+    this._lineLayer = null;
+    var align = "align" in this._params && this._params.align != undefined ? this._params.align : this._theme.ether.interval.marker[timeline.isHorizontal() ? "hAlign" : "vAlign"], showLine = "showLine" in this._params ? this._params.showLine : this._theme.ether.interval.line.show;
+    this._intervalMarkerLayout = new Timeline.EtherIntervalMarkerLayout(this._timeline, this._band, this._theme, align, showLine);
+    this._highlight = new Timeline.EtherHighlight(this._timeline, this._band, this._theme, this._backgroundLayer);
+};
+
+Timeline.HotZoneGregorianEtherPainter.prototype.setHighlight = function(startDate, endDate) {
+    this._highlight.position(startDate, endDate);
+};
+
+Timeline.HotZoneGregorianEtherPainter.prototype.paint = function() {
+    this._markerLayer && this._band.removeLayerDiv(this._markerLayer);
+    this._markerLayer = this._band.createLayerDiv(100);
+    this._markerLayer.setAttribute("name", "ether-markers");
+    this._markerLayer.style.display = "none";
+    this._lineLayer && this._band.removeLayerDiv(this._lineLayer);
+    this._lineLayer = this._band.createLayerDiv(1);
+    this._lineLayer.setAttribute("name", "ether-lines");
+    this._lineLayer.style.display = "none";
+    var minDate = this._band.getMinDate(), maxDate = this._band.getMaxDate(), timeZone = this._band.getTimeZone(), labeller = this._band.getLabeller(), p = this, incrementDate = function(date, zone) {
+        for (var i = 0; i < zone.multiple; i++) Timeline.DateTime.incrementByInterval(date, zone.unit);
+    }, zStart = 0;
+    while (zStart < this._zones.length) {
+        if (minDate.getTime() < this._zones[zStart].endTime) break;
+        zStart++;
+    }
+    var zEnd = this._zones.length - 1;
+    while (zEnd >= 0) {
+        if (maxDate.getTime() > this._zones[zEnd].startTime) break;
+        zEnd--;
+    }
+    for (var z = zStart; z <= zEnd; z++) {
+        var zone = this._zones[z], minDate2 = new Date(Math.max(minDate.getTime(), zone.startTime)), maxDate2 = new Date(Math.min(maxDate.getTime(), zone.endTime));
+        Timeline.DateTime.roundDownToInterval(minDate2, zone.unit, timeZone, zone.multiple, this._theme.firstDayOfWeek);
+        Timeline.DateTime.roundUpToInterval(maxDate2, zone.unit, timeZone, zone.multiple, this._theme.firstDayOfWeek);
+        while (minDate2.getTime() < maxDate2.getTime()) {
+            this._intervalMarkerLayout.createIntervalMarker(minDate2, labeller, zone.unit, this._markerLayer, this._lineLayer);
+            incrementDate(minDate2, zone);
+        }
+    }
+    this._markerLayer.style.display = "block";
+    this._lineLayer.style.display = "block";
+};
+
+Timeline.HotZoneGregorianEtherPainter.prototype.softPaint = function() {};
+
+Timeline.YearCountEtherPainter = function(params) {
+    this._params = params;
+    this._theme = params.theme;
+    this._startDate = Timeline.DateTime.parseGregorianDateTime(params.startDate);
+    this._multiple = "multiple" in params ? params.multiple : 1;
+};
+
+Timeline.YearCountEtherPainter.prototype.initialize = function(band, timeline) {
+    this._band = band;
+    this._timeline = timeline;
+    this._backgroundLayer = band.createLayerDiv(0);
+    this._backgroundLayer.setAttribute("name", "ether-background");
+    this._backgroundLayer.style.background = this._theme.ether.backgroundColors[band.getIndex()];
+    this._markerLayer = null;
+    this._lineLayer = null;
+    var align = "align" in this._params ? this._params.align : this._theme.ether.interval.marker[timeline.isHorizontal() ? "hAlign" : "vAlign"], showLine = "showLine" in this._params ? this._params.showLine : this._theme.ether.interval.line.show;
+    this._intervalMarkerLayout = new Timeline.EtherIntervalMarkerLayout(this._timeline, this._band, this._theme, align, showLine);
+    this._highlight = new Timeline.EtherHighlight(this._timeline, this._band, this._theme, this._backgroundLayer);
+};
+
+Timeline.YearCountEtherPainter.prototype.setHighlight = function(startDate, endDate) {
+    this._highlight.position(startDate, endDate);
+};
+
+Timeline.YearCountEtherPainter.prototype.paint = function() {
+    this._markerLayer && this._band.removeLayerDiv(this._markerLayer);
+    this._markerLayer = this._band.createLayerDiv(100);
+    this._markerLayer.setAttribute("name", "ether-markers");
+    this._markerLayer.style.display = "none";
+    this._lineLayer && this._band.removeLayerDiv(this._lineLayer);
+    this._lineLayer = this._band.createLayerDiv(1);
+    this._lineLayer.setAttribute("name", "ether-lines");
+    this._lineLayer.style.display = "none";
+    var minDate = new Date(this._startDate.getTime()), maxDate = this._band.getMaxDate(), yearDiff = this._band.getMinDate().getUTCFullYear() - this._startDate.getUTCFullYear();
+    minDate.setUTCFullYear(this._band.getMinDate().getUTCFullYear() - yearDiff % this._multiple);
+    var p = this, incrementDate = function(date) {
+        for (var i = 0; i < p._multiple; i++) Timeline.DateTime.incrementByInterval(date, Timeline.DateTime.YEAR);
+    }, labeller = {
+        labelInterval: function(date, intervalUnit) {
+            var diff = date.getUTCFullYear() - p._startDate.getUTCFullYear();
+            return {
+                text: diff,
+                emphasized: diff == 0
+            };
+        }
+    };
+    while (minDate.getTime() < maxDate.getTime()) {
+        this._intervalMarkerLayout.createIntervalMarker(minDate, labeller, Timeline.DateTime.YEAR, this._markerLayer, this._lineLayer);
+        incrementDate(minDate);
+    }
+    this._markerLayer.style.display = "block";
+    this._lineLayer.style.display = "block";
+};
+
+Timeline.YearCountEtherPainter.prototype.softPaint = function() {};
+
+Timeline.QuarterlyEtherPainter = function(params) {
+    this._params = params;
+    this._theme = params.theme;
+    this._startDate = Timeline.DateTime.parseGregorianDateTime(params.startDate);
+};
+
+Timeline.QuarterlyEtherPainter.prototype.initialize = function(band, timeline) {
+    this._band = band;
+    this._timeline = timeline;
+    this._backgroundLayer = band.createLayerDiv(0);
+    this._backgroundLayer.setAttribute("name", "ether-background");
+    this._backgroundLayer.style.background = this._theme.ether.backgroundColors[band.getIndex()];
+    this._markerLayer = null;
+    this._lineLayer = null;
+    var align = "align" in this._params ? this._params.align : this._theme.ether.interval.marker[timeline.isHorizontal() ? "hAlign" : "vAlign"], showLine = "showLine" in this._params ? this._params.showLine : this._theme.ether.interval.line.show;
+    this._intervalMarkerLayout = new Timeline.EtherIntervalMarkerLayout(this._timeline, this._band, this._theme, align, showLine);
+    this._highlight = new Timeline.EtherHighlight(this._timeline, this._band, this._theme, this._backgroundLayer);
+};
+
+Timeline.QuarterlyEtherPainter.prototype.setHighlight = function(startDate, endDate) {
+    this._highlight.position(startDate, endDate);
+};
+
+Timeline.QuarterlyEtherPainter.prototype.paint = function() {
+    this._markerLayer && this._band.removeLayerDiv(this._markerLayer);
+    this._markerLayer = this._band.createLayerDiv(100);
+    this._markerLayer.setAttribute("name", "ether-markers");
+    this._markerLayer.style.display = "none";
+    this._lineLayer && this._band.removeLayerDiv(this._lineLayer);
+    this._lineLayer = this._band.createLayerDiv(1);
+    this._lineLayer.setAttribute("name", "ether-lines");
+    this._lineLayer.style.display = "none";
+    var minDate = new Date(0), maxDate = this._band.getMaxDate();
+    minDate.setUTCFullYear(Math.max(this._startDate.getUTCFullYear(), this._band.getMinDate().getUTCFullYear()));
+    minDate.setUTCMonth(this._startDate.getUTCMonth());
+    var p = this, incrementDate = function(date) {
+        date.setUTCMonth(date.getUTCMonth() + 3);
+    }, labeller = {
+        labelInterval: function(date, intervalUnit) {
+            var quarters = (4 + (date.getUTCMonth() - p._startDate.getUTCMonth()) / 3) % 4;
+            return quarters != 0 ? {
+                text: "Q" + (quarters + 1),
+                emphasized: !1
+            } : {
+                text: "Y" + (date.getUTCFullYear() - p._startDate.getUTCFullYear() + 1),
+                emphasized: !0
+            };
+        }
+    };
+    while (minDate.getTime() < maxDate.getTime()) {
+        this._intervalMarkerLayout.createIntervalMarker(minDate, labeller, Timeline.DateTime.YEAR, this._markerLayer, this._lineLayer);
+        incrementDate(minDate);
+    }
+    this._markerLayer.style.display = "block";
+    this._lineLayer.style.display = "block";
+};
+
+Timeline.QuarterlyEtherPainter.prototype.softPaint = function() {};
+
+Timeline.EtherIntervalMarkerLayout = function(timeline, band, theme, align, showLine) {
+    var horizontal = timeline.isHorizontal();
+    horizontal ? align == "Top" ? this.positionDiv = function(div, offset) {
+        div.style.left = offset + "px";
+        div.style.top = "0px";
+    } : this.positionDiv = function(div, offset) {
+        div.style.left = offset + "px";
+        div.style.bottom = "0px";
+    } : align == "Left" ? this.positionDiv = function(div, offset) {
+        div.style.top = offset + "px";
+        div.style.left = "0px";
+    } : this.positionDiv = function(div, offset) {
+        div.style.top = offset + "px";
+        div.style.right = "0px";
+    };
+    var markerTheme = theme.ether.interval.marker, lineTheme = theme.ether.interval.line, weekendTheme = theme.ether.interval.weekend, stylePrefix = (horizontal ? "h" : "v") + align, labelStyler = markerTheme[stylePrefix + "Styler"], emphasizedLabelStyler = markerTheme[stylePrefix + "EmphasizedStyler"], day = Timeline.DateTime.gregorianUnitLengths[Timeline.DateTime.DAY];
+    this.createIntervalMarker = function(date, labeller, unit, markerDiv, lineDiv) {
+        var offset = Math.round(band.dateToPixelOffset(date));
+        if (showLine && unit != Timeline.DateTime.WEEK) {
+            var divLine = timeline.getDocument().createElement("div");
+            divLine.style.position = "absolute";
+            lineTheme.opacity < 100 && Timeline.Graphics.setOpacity(divLine, lineTheme.opacity);
+            if (horizontal) {
+                divLine.style.borderLeft = "1px solid " + lineTheme.color;
+                divLine.style.left = offset + "px";
+                divLine.style.width = "1px";
+                divLine.style.top = "0px";
+                divLine.style.height = "100%";
+            } else {
+                divLine.style.borderTop = "1px solid " + lineTheme.color;
+                divLine.style.top = offset + "px";
+                divLine.style.height = "1px";
+                divLine.style.left = "0px";
+                divLine.style.width = "100%";
+            }
+            lineDiv.appendChild(divLine);
+        }
+        if (unit == Timeline.DateTime.WEEK) {
+            var firstDayOfWeek = theme.firstDayOfWeek, saturday = new Date(date.getTime() + (6 - firstDayOfWeek - 7) * day), monday = new Date(saturday.getTime() + 2 * day), saturdayPixel = Math.round(band.dateToPixelOffset(saturday)), mondayPixel = Math.round(band.dateToPixelOffset(monday)), length = Math.max(1, mondayPixel - saturdayPixel), divWeekend = timeline.getDocument().createElement("div");
+            divWeekend.style.position = "absolute";
+            divWeekend.style.background = weekendTheme.color;
+            weekendTheme.opacity < 100 && Timeline.Graphics.setOpacity(divWeekend, weekendTheme.opacity);
+            if (horizontal) {
+                divWeekend.style.left = saturdayPixel + "px";
+                divWeekend.style.width = length + "px";
+                divWeekend.style.top = "0px";
+                divWeekend.style.height = "100%";
+            } else {
+                divWeekend.style.top = saturdayPixel + "px";
+                divWeekend.style.height = length + "px";
+                divWeekend.style.left = "0px";
+                divWeekend.style.width = "100%";
+            }
+            lineDiv.appendChild(divWeekend);
+        }
+        var label = labeller.labelInterval(date, unit), div = timeline.getDocument().createElement("div");
+        div.innerHTML = label.text;
+        div.style.position = "absolute";
+        (label.emphasized ? emphasizedLabelStyler : labelStyler)(div);
+        this.positionDiv(div, offset);
+        markerDiv.appendChild(div);
+        return div;
+    };
+};
+
+Timeline.EtherHighlight = function(timeline, band, theme, backgroundLayer) {
+    var horizontal = timeline.isHorizontal();
+    this._highlightDiv = null;
+    this._createHighlightDiv = function() {
+        if (this._highlightDiv == null) {
+            this._highlightDiv = timeline.getDocument().createElement("div");
+            this._highlightDiv.setAttribute("name", "ether-highlight");
+            this._highlightDiv.style.position = "absolute";
+            this._highlightDiv.style.background = theme.ether.highlightColor;
+            var opacity = theme.ether.highlightOpacity;
+            opacity < 100 && Timeline.Graphics.setOpacity(this._highlightDiv, opacity);
+            backgroundLayer.appendChild(this._highlightDiv);
+        }
+    };
+    this.position = function(startDate, endDate) {
+        this._createHighlightDiv();
+        var startPixel = Math.round(band.dateToPixelOffset(startDate)), endPixel = Math.round(band.dateToPixelOffset(endDate)), length = Math.max(endPixel - startPixel, 3);
+        if (horizontal) {
+            this._highlightDiv.style.left = startPixel + "px";
+            this._highlightDiv.style.width = length + "px";
+            this._highlightDiv.style.top = "2px";
+            this._highlightDiv.style.height = band.getViewWidth() - 4 + "px";
+        } else {
+            this._highlightDiv.style.top = startPixel + "px";
+            this._highlightDiv.style.height = length + "px";
+            this._highlightDiv.style.left = "2px";
+            this._highlightDiv.style.width = band.getViewWidth() - 4 + "px";
+        }
+    };
+};
+
+Timeline.LinearEther = function(params) {
+    this._params = params;
+    this._interval = params.interval;
+    this._pixelsPerInterval = params.pixelsPerInterval;
+};
+
+Timeline.LinearEther.prototype.initialize = function(timeline) {
+    this._timeline = timeline;
+    this._unit = timeline.getUnit();
+    if ("startsOn" in this._params) this._start = this._unit.parseFromObject(this._params.startsOn); else if ("endsOn" in this._params) {
+        this._start = this._unit.parseFromObject(this._params.endsOn);
+        this.shiftPixels(-this._timeline.getPixelLength());
+    } else if ("centersOn" in this._params) {
+        this._start = this._unit.parseFromObject(this._params.centersOn);
+        this.shiftPixels(-this._timeline.getPixelLength() / 2);
+    } else {
+        this._start = this._unit.makeDefaultValue();
+        this.shiftPixels(-this._timeline.getPixelLength() / 2);
+    }
+};
+
+Timeline.LinearEther.prototype.setDate = function(date) {
+    this._start = this._unit.cloneValue(date);
+};
+
+Timeline.LinearEther.prototype.shiftPixels = function(pixels) {
+    var numeric = this._interval * pixels / this._pixelsPerInterval;
+    this._start = this._unit.change(this._start, numeric);
+};
+
+Timeline.LinearEther.prototype.dateToPixelOffset = function(date) {
+    var numeric = this._unit.compare(date, this._start);
+    return this._pixelsPerInterval * numeric / this._interval;
+};
+
+Timeline.LinearEther.prototype.pixelOffsetToDate = function(pixels) {
+    var numeric = pixels * this._interval / this._pixelsPerInterval;
+    return this._unit.change(this._start, numeric);
+};
+
+Timeline.HotZoneEther = function(params) {
+    this._params = params;
+    this._interval = params.interval;
+    this._pixelsPerInterval = params.pixelsPerInterval;
+};
+
+Timeline.HotZoneEther.prototype.initialize = function(timeline) {
+    this._timeline = timeline;
+    this._unit = timeline.getUnit();
+    this._zones = [ {
+        startTime: Number.NEGATIVE_INFINITY,
+        endTime: Number.POSITIVE_INFINITY,
+        magnify: 1
+    } ];
+    var params = this._params;
+    for (var i = 0; i < params.zones.length; i++) {
+        var zone = params.zones[i], zoneStart = this._unit.parseFromObject(zone.start), zoneEnd = this._unit.parseFromObject(zone.end);
+        for (var j = 0; j < this._zones.length && this._unit.compare(zoneEnd, zoneStart) > 0; j++) {
+            var zone2 = this._zones[j];
+            if (this._unit.compare(zoneStart, zone2.endTime) < 0) {
+                if (this._unit.compare(zoneStart, zone2.startTime) > 0) {
+                    this._zones.splice(j, 0, {
+                        startTime: zone2.startTime,
+                        endTime: zoneStart,
+                        magnify: zone2.magnify
+                    });
+                    j++;
+                    zone2.startTime = zoneStart;
+                }
+                if (this._unit.compare(zoneEnd, zone2.endTime) < 0) {
+                    this._zones.splice(j, 0, {
+                        startTime: zoneStart,
+                        endTime: zoneEnd,
+                        magnify: zone.magnify * zone2.magnify
+                    });
+                    j++;
+                    zone2.startTime = zoneEnd;
+                    zoneStart = zoneEnd;
+                } else {
+                    zone2.magnify *= zone.magnify;
+                    zoneStart = zone2.endTime;
+                }
+            }
+        }
+    }
+    if ("startsOn" in this._params) this._start = this._unit.parseFromObject(this._params.startsOn); else if ("endsOn" in this._params) {
+        this._start = this._unit.parseFromObject(this._params.endsOn);
+        this.shiftPixels(-this._timeline.getPixelLength());
+    } else if ("centersOn" in this._params) {
+        this._start = this._unit.parseFromObject(this._params.centersOn);
+        this.shiftPixels(-this._timeline.getPixelLength() / 2);
+    } else {
+        this._start = this._unit.makeDefaultValue();
+        this.shiftPixels(-this._timeline.getPixelLength() / 2);
+    }
+};
+
+Timeline.HotZoneEther.prototype.setDate = function(date) {
+    this._start = this._unit.cloneValue(date);
+};
+
+Timeline.HotZoneEther.prototype.shiftPixels = function(pixels) {
+    this._start = this.pixelOffsetToDate(pixels);
+};
+
+Timeline.HotZoneEther.prototype.dateToPixelOffset = function(date) {
+    return this._dateDiffToPixelOffset(this._start, date);
+};
+
+Timeline.HotZoneEther.prototype.pixelOffsetToDate = function(pixels) {
+    return this._pixelOffsetToDate(pixels, this._start);
+};
+
+Timeline.HotZoneEther.prototype._dateDiffToPixelOffset = function(fromDate, toDate) {
+    var scale = this._getScale(), fromTime = fromDate, toTime = toDate, pixels = 0;
+    if (this._unit.compare(fromTime, toTime) < 0) {
+        var z = 0;
+        while (z < this._zones.length) {
+            if (this._unit.compare(fromTime, this._zones[z].endTime) < 0) break;
+            z++;
+        }
+        while (this._unit.compare(fromTime, toTime) < 0) {
+            var zone = this._zones[z], toTime2 = this._unit.earlier(toTime, zone.endTime);
+            pixels += this._unit.compare(toTime2, fromTime) / (scale / zone.magnify);
+            fromTime = toTime2;
+            z++;
+        }
+    } else {
+        var z = this._zones.length - 1;
+        while (z >= 0) {
+            if (this._unit.compare(fromTime, this._zones[z].startTime) > 0) break;
+            z--;
+        }
+        while (this._unit.compare(fromTime, toTime) > 0) {
+            var zone = this._zones[z], toTime2 = this._unit.later(toTime, zone.startTime);
+            pixels += this._unit.compare(toTime2, fromTime) / (scale / zone.magnify);
+            fromTime = toTime2;
+            z--;
+        }
+    }
+    return pixels;
+};
+
+Timeline.HotZoneEther.prototype._pixelOffsetToDate = function(pixels, fromDate) {
+    var scale = this._getScale(), time = fromDate;
+    if (pixels > 0) {
+        var z = 0;
+        while (z < this._zones.length) {
+            if (this._unit.compare(time, this._zones[z].endTime) < 0) break;
+            z++;
+        }
+        while (pixels > 0) {
+            var zone = this._zones[z], scale2 = scale / zone.magnify;
+            if (zone.endTime == Number.POSITIVE_INFINITY) {
+                time = this._unit.change(time, pixels * scale2);
+                pixels = 0;
+            } else {
+                var pixels2 = this._unit.compare(zone.endTime, time) / scale2;
+                if (pixels2 > pixels) {
+                    time = this._unit.change(time, pixels * scale2);
+                    pixels = 0;
+                } else {
+                    time = zone.endTime;
+                    pixels -= pixels2;
+                }
+            }
+            z++;
+        }
+    } else {
+        var z = this._zones.length - 1;
+        while (z >= 0) {
+            if (this._unit.compare(time, this._zones[z].startTime) > 0) break;
+            z--;
+        }
+        pixels = -pixels;
+        while (pixels > 0) {
+            var zone = this._zones[z], scale2 = scale / zone.magnify;
+            if (zone.startTime == Number.NEGATIVE_INFINITY) {
+                time = this._unit.change(time, -pixels * scale2);
+                pixels = 0;
+            } else {
+                var pixels2 = this._unit.compare(time, zone.startTime) / scale2;
+                if (pixels2 > pixels) {
+                    time = this._unit.change(time, -pixels * scale2);
+                    pixels = 0;
+                } else {
+                    time = zone.startTime;
+                    pixels -= pixels2;
+                }
+            }
+            z--;
+        }
+    }
+    return time;
+};
+
+Timeline.HotZoneEther.prototype._getScale = function() {
+    return this._interval / this._pixelsPerInterval;
+};
+
+Timeline.GregorianDateLabeller = function(locale, timeZone) {
+    this._locale = locale;
+    this._timeZone = timeZone;
+};
+
+Timeline.GregorianDateLabeller.dayNames = [];
+
+Timeline.GregorianDateLabeller.labelIntervalFunctions = [];
 
 Timeline.GregorianDateLabeller.monthNames = Zotero.Date.getMonths().short;
-Timeline.GregorianDateLabeller.getMonthName=function(month,locale) {
-	return Timeline.GregorianDateLabeller.monthNames[month];
+
+Timeline.GregorianDateLabeller.getMonthName = function(month, locale) {
+    return Timeline.GregorianDateLabeller.monthNames[month];
+};
+
+Timeline.GregorianDateLabeller.prototype.labelInterval = function(date, intervalUnit) {
+    var f = Timeline.GregorianDateLabeller.labelIntervalFunctions[this._locale];
+    f == null && (f = Timeline.GregorianDateLabeller.prototype.defaultLabelInterval);
+    return f.call(this, date, intervalUnit);
+};
+
+Timeline.GregorianDateLabeller.prototype.labelPrecise = function(date) {
+    return Timeline.DateTime.removeTimeZoneOffset(date, this._timeZone).toUTCString();
+};
+
+Timeline.GregorianDateLabeller.prototype.defaultLabelInterval = function(date, intervalUnit) {
+    var text, emphasized = !1;
+    date = Timeline.DateTime.removeTimeZoneOffset(date, this._timeZone);
+    switch (intervalUnit) {
+      case Timeline.DateTime.MILLISECOND:
+        text = date.getUTCMilliseconds();
+        break;
+      case Timeline.DateTime.SECOND:
+        text = date.getUTCSeconds();
+        break;
+      case Timeline.DateTime.MINUTE:
+        var m = date.getUTCMinutes();
+        if (m == 0) {
+            text = date.getUTCHours() + ":00";
+            emphasized = !0;
+        } else text = m;
+        break;
+      case Timeline.DateTime.HOUR:
+        text = date.getUTCHours() + "hr";
+        break;
+      case Timeline.DateTime.DAY:
+        text = Timeline.GregorianDateLabeller.getMonthName(date.getUTCMonth(), this._locale) + " " + date.getUTCDate();
+        break;
+      case Timeline.DateTime.WEEK:
+        text = Timeline.GregorianDateLabeller.getMonthName(date.getUTCMonth(), this._locale) + " " + date.getUTCDate();
+        break;
+      case Timeline.DateTime.MONTH:
+        var m = date.getUTCMonth();
+        if (m != 0) {
+            text = Timeline.GregorianDateLabeller.getMonthName(m, this._locale);
+            break;
+        }
+      case Timeline.DateTime.YEAR:
+      case Timeline.DateTime.DECADE:
+      case Timeline.DateTime.CENTURY:
+      case Timeline.DateTime.MILLENNIUM:
+        var y = date.getUTCFullYear();
+        y > 0 ? text = date.getUTCFullYear() : text = 1 - y + "BC";
+        emphasized = intervalUnit == Timeline.DateTime.MONTH || intervalUnit == Timeline.DateTime.DECADE && y % 100 == 0 || intervalUnit == Timeline.DateTime.CENTURY && y % 1e3 == 0;
+        break;
+      default:
+        text = date.toUTCString();
+    }
+    return {
+        text: text,
+        emphasized: emphasized
+    };
+};
+
+Timeline.StaticTrackBasedLayout = function(params) {
+    this._eventSource = params.eventSource;
+    this._ether = params.ether;
+    this._theme = params.theme;
+    this._showText = "showText" in params ? params.showText : !0;
+    this._laidout = !1;
+    var layout = this;
+    this._eventSource != null && this._eventSource.addListener({
+        onAddMany: function() {
+            layout._laidout = !1;
+        }
+    });
+};
+
+Timeline.StaticTrackBasedLayout.prototype.initialize = function(timeline) {
+    this._timeline = timeline;
+};
+
+Timeline.StaticTrackBasedLayout.prototype.getTrack = function(evt) {
+    if (!this._laidout) {
+        this._tracks = [];
+        this._layout();
+        this._laidout = !0;
+    }
+    return this._tracks[evt.getID()];
 };
 
+Timeline.StaticTrackBasedLayout.prototype.getTrackCount = function() {
+    if (!this._laidout) {
+        this._tracks = [];
+        this._layout();
+        this._laidout = !0;
+    }
+    return this._trackCount;
+};
+
+Timeline.StaticTrackBasedLayout.prototype._layout = function() {
+    if (this._eventSource == null) return;
+    var streams = [ Number.NEGATIVE_INFINITY ], layout = this, showText = this._showText, theme = this._theme, eventTheme = theme.event, layoutInstant = function(evt, startPixel, endPixel, streamOffset) {
+        var finalPixel = startPixel - 1;
+        evt.isImprecise() && (finalPixel = endPixel);
+        showText && (finalPixel = Math.max(finalPixel, startPixel + eventTheme.label.width));
+        return finalPixel;
+    }, layoutDuration = function(evt, startPixel, endPixel, streamOffset) {
+        if (evt.isImprecise()) var startDate = evt.getStart(), endDate = evt.getEnd(), startPixel2 = Math.round(layout._ether.dateToPixelOffset(startDate)), endPixel2 = Math.round(layout._ether.dateToPixelOffset(endDate)); else var startPixel2 = startPixel, endPixel2 = endPixel;
+        var finalPixel = endPixel2, length = Math.max(endPixel2 - startPixel2, 1);
+        showText && length < eventTheme.label.width && (finalPixel = endPixel2 + eventTheme.label.width);
+        return finalPixel;
+    }, layoutEvent = function(evt) {
+        var startDate = evt.getStart(), endDate = evt.getEnd(), startPixel = Math.round(layout._ether.dateToPixelOffset(startDate)), endPixel = Math.round(layout._ether.dateToPixelOffset(endDate)), streamIndex = 0;
+        for (; streamIndex < streams.length; streamIndex++) if (streams[streamIndex] < startPixel) break;
+        streamIndex >= streams.length && streams.push(Number.NEGATIVE_INFINITY);
+        var streamOffset = eventTheme.track.offset + streamIndex * (eventTheme.track.height + eventTheme.track.gap) + "em";
+        layout._tracks[evt.getID()] = streamIndex;
+        evt.isInstant() ? streams[streamIndex] = layoutInstant(evt, startPixel, endPixel, streamOffset) : streams[streamIndex] = layoutDuration(evt, startPixel, endPixel, streamOffset);
+    }, iterator = this._eventSource.getAllEventIterator();
+    while (iterator.hasNext()) {
+        var evt = iterator.next();
+        layoutEvent(evt);
+    }
+    this._trackCount = streams.length;
+};
+
+Timeline.DurationEventPainter = function(params) {
+    this._params = params;
+    this._theme = params.theme;
+    this._layout = params.layout;
+    this._showText = params.showText;
+    this._showLineForNoText = "showLineForNoText" in params ? params.showLineForNoText : params.theme.event.instant.showLineForNoText;
+    this._filterMatcher = null;
+    this._highlightMatcher = null;
+};
+
+Timeline.DurationEventPainter.prototype.initialize = function(band, timeline) {
+    this._band = band;
+    this._timeline = timeline;
+    this._layout.initialize(band, timeline);
+    this._eventLayer = null;
+    this._highlightLayer = null;
+};
+
+Timeline.DurationEventPainter.prototype.getLayout = function() {
+    return this._layout;
+};
+
+Timeline.DurationEventPainter.prototype.setLayout = function(layout) {
+    this._layout = layout;
+};
+
+Timeline.DurationEventPainter.prototype.getFilterMatcher = function() {
+    return this._filterMatcher;
+};
+
+Timeline.DurationEventPainter.prototype.setFilterMatcher = function(filterMatcher) {
+    this._filterMatcher = filterMatcher;
+};
 
+Timeline.DurationEventPainter.prototype.getHighlightMatcher = function() {
+    return this._highlightMatcher;
+};
+
+Timeline.DurationEventPainter.prototype.setHighlightMatcher = function(highlightMatcher) {
+    this._highlightMatcher = highlightMatcher;
+};
+
+Timeline.DurationEventPainter.prototype.paint = function() {
+    var eventSource = this._band.getEventSource();
+    if (eventSource == null) return;
+    this._highlightLayer != null && this._band.removeLayerDiv(this._highlightLayer);
+    this._highlightLayer = this._band.createLayerDiv(105);
+    this._highlightLayer.setAttribute("name", "event-highlights");
+    this._highlightLayer.style.display = "none";
+    this._eventLayer != null && this._band.removeLayerDiv(this._eventLayer);
+    this._eventLayer = this._band.createLayerDiv(110);
+    this._eventLayer.setAttribute("name", "events");
+    this._eventLayer.style.display = "none";
+    var minDate = this._band.getMinDate(), maxDate = this._band.getMaxDate(), doc = this._timeline.getDocument(), p = this, eventLayer = this._eventLayer, highlightLayer = this._highlightLayer, showText = this._showText, theme = this._params.theme, eventTheme = theme.event, trackOffset = eventTheme.track.offset, trackHeight = "trackHeight" in this._params ? this._params.trackHeight : eventTheme.track.height, trackGap = "trackGap" in this._params ? this._params.trackGap : eventTheme.track.gap, appendIcon = function(evt, div) {
+        var icon = evt.getIcon(), img = Timeline.Graphics.createTranslucentImage(doc, icon != null ? icon : eventTheme.instant.icon);
+        div.appendChild(img);
+        div.style.cursor = "pointer";
+        Timeline.DOM.registerEvent(div, "mousedown", function(elmt, domEvt, target) {
+            p._onClickInstantEvent(img, domEvt, evt);
+        });
+    }, createHighlightDiv = function(highlightIndex, startPixel, length, highlightOffset, highlightWidth) {
+        if (highlightIndex >= 0) {
+            var color = eventTheme.highlightColors[Math.min(highlightIndex, eventTheme.highlightColors.length - 1)], div = doc.createElement("div");
+            div.style.position = "absolute";
+            div.style.overflow = "hidden";
+            div.style.left = startPixel - 3 + "px";
+            div.style.width = length + 6 + "px";
+            div.style.top = highlightOffset + "em";
+            div.style.height = highlightWidth + "em";
+            div.style.background = color;
+            highlightLayer.appendChild(div);
+        }
+    }, createInstantDiv = function(evt, startPixel, endPixel, streamOffset, highlightIndex, highlightOffset, highlightWidth) {
+        if (evt.isImprecise()) {
+            var length = Math.max(endPixel - startPixel, 1), divImprecise = doc.createElement("div");
+            divImprecise.style.position = "absolute";
+            divImprecise.style.overflow = "hidden";
+            divImprecise.style.top = streamOffset;
+            divImprecise.style.height = trackHeight + "em";
+            divImprecise.style.left = startPixel + "px";
+            divImprecise.style.width = length + "px";
+            divImprecise.style.background = eventTheme.instant.impreciseColor;
+            eventTheme.instant.impreciseOpacity < 100 && Timeline.Graphics.setOpacity(divImprecise, eventTheme.instant.impreciseOpacity);
+            eventLayer.appendChild(divImprecise);
+        }
+        var div = doc.createElement("div");
+        div.style.position = "absolute";
+        div.style.overflow = "hidden";
+        eventLayer.appendChild(div);
+        var foreground = evt.getTextColor(), background = evt.getColor(), realign = -8, length = 16;
+        if (showText) {
+            div.style.width = eventTheme.label.width + "px";
+            div.style.color = foreground != null ? foreground : eventTheme.label.outsideColor;
+            appendIcon(evt, div);
+            div.appendChild(doc.createTextNode(evt.getText()));
+        } else if (p._showLineForNoText) {
+            div.style.width = "1px";
+            div.style.borderLeft = "1px solid " + (background != null ? background : eventTheme.instant.lineColor);
+            realign = 0;
+            length = 1;
+        } else appendIcon(evt, div);
+        div.style.top = streamOffset;
+        div.style.height = trackHeight + "em";
+        div.style.left = startPixel + realign + "px";
+        createHighlightDiv(highlightIndex, startPixel + realign, length, highlightOffset, highlightWidth);
+    }, createDurationDiv = function(evt, startPixel, endPixel, streamOffset, highlightIndex, highlightOffset, highlightWidth) {
+        var attachClickEvent = function(elmt) {
+            elmt.style.cursor = "pointer";
+            Timeline.DOM.registerEvent(elmt, "mousedown", function(elmt, domEvt, target) {
+                p._onClickDurationEvent(domEvt, evt, target);
+            });
+        }, length = Math.max(endPixel - startPixel, 1);
+        if (evt.isImprecise()) {
+            var div = doc.createElement("div");
+            div.style.position = "absolute";
+            div.style.overflow = "hidden";
+            div.style.top = streamOffset;
+            div.style.height = trackHeight + "em";
+            div.style.left = startPixel + "px";
+            div.style.width = length + "px";
+            div.style.background = eventTheme.duration.impreciseColor;
+            eventTheme.duration.impreciseOpacity < 100 && Timeline.Graphics.setOpacity(div, eventTheme.duration.impreciseOpacity);
+            eventLayer.appendChild(div);
+            var startDate = evt.getLatestStart(), endDate = evt.getEarliestEnd(), startPixel2 = Math.round(p._band.dateToPixelOffset(startDate)), endPixel2 = Math.round(p._band.dateToPixelOffset(endDate));
+        } else var startPixel2 = startPixel, endPixel2 = endPixel;
+        var foreground = evt.getTextColor(), outside = !0;
+        if (startPixel2 <= endPixel2) {
+            length = Math.max(endPixel2 - startPixel2, 1);
+            outside = !(length > eventTheme.label.width);
+            div = doc.createElement("div");
+            div.style.position = "absolute";
+            div.style.overflow = "hidden";
+            div.style.top = streamOffset;
+            div.style.height = trackHeight + "em";
+            div.style.left = startPixel2 + "px";
+            div.style.width = length + "px";
+            var background = evt.getColor();
+            div.style.background = background != null ? background : eventTheme.duration.color;
+            eventTheme.duration.opacity < 100 && Timeline.Graphics.setOpacity(div, eventTheme.duration.opacity);
+            eventLayer.appendChild(div);
+        } else {
+            var temp = startPixel2;
+            startPixel2 = endPixel2;
+            endPixel2 = temp;
+        }
+        div == null && console.log(evt);
+        attachClickEvent(div);
+        if (showText) {
+            var divLabel = doc.createElement("div");
+            divLabel.style.position = "absolute";
+            divLabel.style.top = streamOffset;
+            divLabel.style.height = trackHeight + "em";
+            divLabel.style.left = (length > eventTheme.label.width ? startPixel2 : endPixel2) + "px";
+            divLabel.style.width = eventTheme.label.width + "px";
+            divLabel.style.color = foreground != null ? foreground : outside ? eventTheme.label.outsideColor : eventTheme.label.insideColor;
+            divLabel.style.overflow = "hidden";
+            divLabel.appendChild(doc.createTextNode(evt.getText()));
+            eventLayer.appendChild(divLabel);
+            attachClickEvent(divLabel);
+        }
+        createHighlightDiv(highlightIndex, startPixel, endPixel - startPixel, highlightOffset, highlightWidth);
+    }, createEventDiv = function(evt, highlightIndex) {
+        var startDate = evt.getStart(), endDate = evt.getEnd(), startPixel = Math.round(p._band.dateToPixelOffset(startDate)), endPixel = Math.round(p._band.dateToPixelOffset(endDate)), streamOffset = trackOffset + p._layout.getTrack(evt) * (trackHeight + trackGap);
+        evt.isInstant() ? createInstantDiv(evt, startPixel, endPixel, streamOffset + "em", highlightIndex, streamOffset - trackGap, trackHeight + 2 * trackGap) : createDurationDiv(evt, startPixel, endPixel, streamOffset + "em", highlightIndex, streamOffset - trackGap, trackHeight + 2 * trackGap);
+    }, filterMatcher = this._filterMatcher != null ? this._filterMatcher : function(evt) {
+        return !0;
+    }, highlightMatcher = this._highlightMatcher != null ? this._highlightMatcher : function(evt) {
+        return -1;
+    }, iterator = eventSource.getEventIterator(minDate, maxDate);
+    while (iterator.hasNext()) {
+        var evt = iterator.next();
+        filterMatcher(evt) && createEventDiv(evt, highlightMatcher(evt));
+    }
+    this._highlightLayer.style.display = "block";
+    this._eventLayer.style.display = "block";
+};
+
+Timeline.DurationEventPainter.prototype.softPaint = function() {};
+
+Timeline.DurationEventPainter.prototype._onClickInstantEvent = function(icon, domEvt, evt) {
+    domEvt.cancelBubble = !0;
+    var c = Timeline.DOM.getPageCoordinates(icon);
+    this._showBubble(c.left + Math.ceil(icon.offsetWidth / 2), c.top + Math.ceil(icon.offsetHeight / 2), evt);
+};
+
+Timeline.DurationEventPainter.prototype._onClickDurationEvent = function(domEvt, evt, target) {
+    domEvt.cancelBubble = !0;
+    if ("pageX" in domEvt) var x = domEvt.pageX, y = domEvt.pageY; else var c = Timeline.DOM.getPageCoordinates(target), x = domEvt.offsetX + c.left, y = domEvt.offsetY + c.top;
+    this._showBubble(x, y, evt);
+};
+
+Timeline.DurationEventPainter.prototype._showBubble = function(x, y, evt) {
+    var div = this._band.openBubbleForPoint(x, y, this._theme.event.bubble.width, this._theme.event.bubble.height);
+    evt.fillInfoBubble(div, this._theme, this._band.getLabeller());
+};
+
+Timeline.DefaultEventSource = function(eventIndex) {
+    this._events = eventIndex instanceof Object ? eventIndex : new Timeline.EventIndex;
+    this._listeners = [];
+};
+
+Timeline.DefaultEventSource.prototype.addListener = function(listener) {
+    this._listeners.push(listener);
+};
+
+Timeline.DefaultEventSource.prototype.removeListener = function(listener) {
+    for (var i = 0; i < this._listeners.length; i++) if (this._listeners[i] == listener) {
+        this._listeners.splice(i, 1);
+        break;
+    }
+};
+
+Timeline.DefaultEventSource.prototype.loadXML = function(xml, url) {
+    var base = this._getBaseURL(url), wikiURL = xml.documentElement.getAttribute("wiki-url"), wikiSection = xml.documentElement.getAttribute("wiki-section"), dateTimeFormat = xml.documentElement.getAttribute("date-time-format"), parseDateTimeFunction = this._events.getUnit().getParser(dateTimeFormat), node = xml.documentElement.firstChild, added = !1;
+    while (node != null) {
+        if (node.nodeType == 1) {
+            var description = "";
+            node.firstChild != null && node.firstChild.nodeType == 3 && (description = node.firstChild.nodeValue);
+            var evt = new Timeline.DefaultEventSource.Event(parseDateTimeFunction(node.getAttribute("start")), parseDateTimeFunction(node.getAttribute("end")), parseDateTimeFunction(node.getAttribute("latestStart")), parseDateTimeFunction(node.getAttribute("earliestEnd")), node.getAttribute("isDuration") != "true", node.getAttribute("title"), description, this._resolveRelativeURL(node.getAttribute("image"), base), this._resolveRelativeURL(node.getAttribute("link"), base), this._resolveRelativeURL(node.getAttribute("icon"), base), node.getAttribute("color"), node.getAttribute("textColor"));
+            evt._node = node;
+            evt.getProperty = function(name) {
+                return this._node.getAttribute(name);
+            };
+            evt.setWikiInfo(wikiURL, wikiSection);
+            this._events.add(evt);
+            added = !0;
+        }
+        node = node.nextSibling;
+    }
+    added && this._fire("onAddMany", []);
+};
+
+Timeline.DefaultEventSource.prototype.loadJSON = function(data, url) {
+    var base = this._getBaseURL(url), added = !1;
+    if (data && data.events) {
+        var wikiURL = "wikiURL" in data ? data.wikiURL : null, wikiSection = "wikiSection" in data ? data.wikiSection : null, dateTimeFormat = "dateTimeFormat" in data ? data.dateTimeFormat : null, parseDateTimeFunction = this._events.getUnit().getParser(dateTimeFormat);
+        for (var i = 0; i < data.events.length; i++) {
+            var event = data.events[i], evt = new Timeline.DefaultEventSource.Event(parseDateTimeFunction(event.start), parseDateTimeFunction(event.end), parseDateTimeFunction(event.latestStart), parseDateTimeFunction(event.earliestEnd), event.isDuration || !1, event.title, event.description, this._resolveRelativeURL(event.image, base), this._resolveRelativeURL(event.link, base), this._resolveRelativeURL(event.icon, base), event.color, event.textColor);
+            evt._obj = event;
+            evt.getProperty = function(name) {
+                return this._obj[name];
+            };
+            evt.setWikiInfo(wikiURL, wikiSection);
+            this._events.add(evt);
+            added = !0;
+        }
+    }
+    added && this._fire("onAddMany", []);
+};
+
+Timeline.DefaultEventSource.prototype.loadSPARQL = function(xml, url) {
+    var base = this._getBaseURL(url), dateTimeFormat = "iso8601", parseDateTimeFunction = this._events.getUnit().getParser(dateTimeFormat);
+    if (xml == null) return;
+    var node = xml.documentElement.firstChild;
+    while (node != null && (node.nodeType != 1 || node.nodeName != "results")) node = node.nextSibling;
+    var wikiURL = null, wikiSection = null;
+    if (node != null) {
+        wikiURL = node.getAttribute("wiki-url");
+        wikiSection = node.getAttribute("wiki-section");
+        node = node.firstChild;
+    }
+    var added = !1;
+    while (node != null) {
+        if (node.nodeType == 1) {
+            var bindings = {}, binding = node.firstChild;
+            while (binding != null) {
+                binding.nodeType == 1 && binding.firstChild != null && binding.firstChild.nodeType == 1 && binding.firstChild.firstChild != null && binding.firstChild.firstChild.nodeType == 3 && (bindings[binding.getAttribute("name")] = binding.firstChild.firstChild.nodeValue);
+                binding = binding.nextSibling;
+            }
+            bindings["start"] == null && bindings["date"] != null && (bindings.start = bindings.date);
+            var evt = new Timeline.DefaultEventSource.Event(parseDateTimeFunction(bindings.start), parseDateTimeFunction(bindings.end), parseDateTimeFunction(bindings.latestStart), parseDateTimeFunction(bindings.earliestEnd), bindings["isDuration"] != "true", bindings.title, bindings.description, this._resolveRelativeURL(bindings.image, base), this._resolveRelativeURL(bindings.link, base), this._resolveRelativeURL(bindings.icon, base), bindings.color, bindings.textColor);
+            evt._bindings = bindings;
+            evt.getProperty = function(name) {
+                return this._bindings[name];
+            };
+            evt.setWikiInfo(wikiURL, wikiSection);
+            this._events.add(evt);
+            added = !0;
+        }
+        node = node.nextSibling;
+    }
+    added && this._fire("onAddMany", []);
+};
+
+Timeline.DefaultEventSource.prototype.add = function(evt) {
+    this._events.add(evt);
+    this._fire("onAddOne", [ evt ]);
+};
+
+Timeline.DefaultEventSource.prototype.addMany = function(events) {
+    for (var i = 0; i < events.length; i++) this._events.add(events[i]);
+    this._fire("onAddMany", []);
+};
+
+Timeline.DefaultEventSource.prototype.clear = function() {
+    this._events.removeAll();
+    this._fire("onClear", []);
+};
+
+Timeline.DefaultEventSource.prototype.getEventIterator = function(startDate, endDate) {
+    return this._events.getIterator(startDate, endDate);
+};
+
+Timeline.DefaultEventSource.prototype.getAllEventIterator = function() {
+    return this._events.getAllIterator();
+};
+
+Timeline.DefaultEventSource.prototype.getCount = function() {
+    return this._events.getCount();
+};
+
+Timeline.DefaultEventSource.prototype.getEarliestDate = function() {
+    return this._events.getEarliestDate();
+};
+
+Timeline.DefaultEventSource.prototype.getLatestDate = function() {
+    return this._events.getLatestDate();
+};
+
+Timeline.DefaultEventSource.prototype._fire = function(handlerName, args) {
+    for (var i = 0; i < this._listeners.length; i++) {
+        var listener = this._listeners[i];
+        if (handlerName in listener) try {
+            listener[handlerName].apply(listener, args);
+        } catch (e) {
+            Timeline.Debug.exception(e);
+        }
+    }
+};
+
+Timeline.DefaultEventSource.prototype._getBaseURL = function(url) {
+    if (url.indexOf("://") < 0) {
+        var url2 = this._getBaseURL(document.location.href);
+        url.substr(0, 1) == "/" ? url = url2.substr(0, url2.indexOf("/", url2.indexOf("://") + 3)) + url : url = url2 + url;
+    }
+    var i = url.lastIndexOf("/");
+    return i < 0 ? "" : url.substr(0, i + 1);
+};
+
+Timeline.DefaultEventSource.prototype._resolveRelativeURL = function(url, base) {
+    return url == null || url == "" ? url : url.indexOf("://") > 0 ? url : url.substr(0, 1) == "/" ? base.substr(0, base.indexOf("/", base.indexOf("://") + 3)) + url : base + url;
+};
+
+Timeline.DefaultEventSource.Event = function(start, end, latestStart, earliestEnd, instant, text, description, image, link, icon, color, textColor) {
+    this._id = "e" + Math.floor(Math.random() * 1e6);
+    this._instant = instant || end == null;
+    this._start = start;
+    this._end = end != null ? end : start;
+    this._latestStart = latestStart != null ? latestStart : instant ? this._end : this._start;
+    this._earliestEnd = earliestEnd != null ? earliestEnd : instant ? this._start : this._end;
+    this._text = Timeline.HTML.deEntify(text);
+    this._description = Timeline.HTML.deEntify(description);
+    this._image = image != null && image != "" ? image : null;
+    this._link = link != null && link != "" ? link : null;
+    this._icon = icon != null && icon != "" ? icon : null;
+    this._color = color != null && color != "" ? color : null;
+    this._textColor = textColor != null && textColor != "" ? textColor : null;
+    this._wikiURL = null;
+    this._wikiSection = null;
+};
+
+Timeline.DefaultEventSource.Event.prototype = {
+    getID: function() {
+        return this._id;
+    },
+    isInstant: function() {
+        return this._instant;
+    },
+    isImprecise: function() {
+        return this._start != this._latestStart || this._end != this._earliestEnd;
+    },
+    getStart: function() {
+        return this._start;
+    },
+    getEnd: function() {
+        return this._end;
+    },
+    getLatestStart: function() {
+        return this._latestStart;
+    },
+    getEarliestEnd: function() {
+        return this._earliestEnd;
+    },
+    getText: function() {
+        return this._text;
+    },
+    getDescription: function() {
+        return this._description;
+    },
+    getImage: function() {
+        return this._image;
+    },
+    getLink: function() {
+        return this._link;
+    },
+    getIcon: function() {
+        return this._icon;
+    },
+    getColor: function() {
+        return this._color;
+    },
+    getTextColor: function() {
+        return this._textColor;
+    },
+    getProperty: function(name) {
+        return null;
+    },
+    getWikiURL: function() {
+        return this._wikiURL;
+    },
+    getWikiSection: function() {
+        return this._wikiSection;
+    },
+    setWikiInfo: function(wikiURL, wikiSection) {
+        this._wikiURL = wikiURL;
+        this._wikiSection = wikiSection;
+    },
+    fillDescription: function(elmt) {
+        elmt.innerHTML = this._description;
+    },
+    fillWikiInfo: function(elmt) {
+        if (this._wikiURL != null && this._wikiSection != null) {
+            var wikiID = this.getProperty("wikiID");
+            if (wikiID == null || wikiID.length == 0) wikiID = this.getText();
+            wikiID = wikiID.replace(/\s/g, "_");
+            var url = this._wikiURL + this._wikiSection.replace(/\s/g, "_") + "/" + wikiID, a = document.createElement("a");
+            a.href = url;
+            a.target = "new";
+            a.innerHTML = Timeline.strings[Timeline.Platform.clientLocale].wikiLinkLabel;
+            elmt.appendChild(document.createTextNode("["));
+            elmt.appendChild(a);
+            elmt.appendChild(document.createTextNode("]"));
+        } else elmt.style.display = "none";
+    },
+    fillTime: function(elmt, labeller) {
+        if (this._instant) if (this.isImprecise()) {
+            elmt.appendChild(elmt.ownerDocument.createTextNode(labeller.labelPrecise(this._start)));
+            elmt.appendChild(elmt.ownerDocument.createElement("br"));
+            elmt.appendChild(elmt.ownerDocument.createTextNode(labeller.labelPrecise(this._end)));
+        } else elmt.appendChild(elmt.ownerDocument.createTextNode(labeller.labelPrecise(this._start))); else if (this.isImprecise()) {
+            elmt.appendChild(elmt.ownerDocument.createTextNode(labeller.labelPrecise(this._start) + " ~ " + labeller.labelPrecise(this._latestStart)));
+            elmt.appendChild(elmt.ownerDocument.createElement("br"));
+            elmt.appendChild(elmt.ownerDocument.createTextNode(labeller.labelPrecise(this._earliestEnd) + " ~ " + labeller.labelPrecise(this._end)));
+        } else {
+            elmt.appendChild(elmt.ownerDocument.createTextNode(labeller.labelPrecise(this._start)));
+            elmt.appendChild(elmt.ownerDocument.createElement("br"));
+            elmt.appendChild(elmt.ownerDocument.createTextNode(labeller.labelPrecise(this._end)));
+        }
+    },
+    fillInfoBubble: function(elmt, theme, labeller) {
+        var doc = elmt.ownerDocument, title = this.getText(), link = this.getLink(), image = this.getImage();
+        if (image != null) {
+            var img = doc.createElement("img");
+            img.src = image;
+            theme.event.bubble.imageStyler(img);
+            elmt.appendChild(img);
+        }
+        var divTitle = doc.createElement("div"), textTitle = doc.createTextNode(title);
+        if (link != null) {
+            var a = doc.createElement("a");
+            a.href = link;
+            a.appendChild(textTitle);
+            divTitle.appendChild(a);
+        } else divTitle.appendChild(textTitle);
+        theme.event.bubble.titleStyler(divTitle);
+        elmt.appendChild(divTitle);
+        var divBody = doc.createElement("div");
+        this.fillDescription(divBody);
+        theme.event.bubble.bodyStyler(divBody);
+        elmt.appendChild(divBody);
+        var divTime = doc.createElement("div");
+        this.fillTime(divTime, labeller);
+        theme.event.bubble.timeStyler(divTime);
+        elmt.appendChild(divTime);
+        var divWiki = doc.createElement("div");
+        this.fillWikiInfo(divWiki);
+        theme.event.bubble.wikiStyler(divWiki);
+        elmt.appendChild(divWiki);
+    }
+};
+
+Timeline.ClassicTheme = new Object;
+
+Timeline.ClassicTheme.implementations = [];
+
+Timeline.ClassicTheme.create = function(locale) {
+    locale == null && (locale = Timeline.Platform.getDefaultLocale());
+    var f = Timeline.ClassicTheme.implementations[locale];
+    f == null && (f = Timeline.ClassicTheme._Impl);
+    return new f;
+};
+
+Timeline.ClassicTheme._Impl = function() {
+    this.firstDayOfWeek = 0;
+    this.ether = {
+        backgroundColors: [ "#EEE", "#DDD", "#CCC", "#AAA" ],
+        highlightColor: "white",
+        highlightOpacity: 50,
+        interval: {
+            line: {
+                show: !0,
+                color: "#aaa",
+                opacity: 25
+            },
+            weekend: {
+                color: "#FFFFE0",
+                opacity: 30
+            },
+            marker: {
+                hAlign: "Bottom",
+                hBottomStyler: function(elmt) {
+                    elmt.className = "timeline-ether-marker-bottom";
+                },
+                hBottomEmphasizedStyler: function(elmt) {
+                    elmt.className = "timeline-ether-marker-bottom-emphasized";
+                },
+                hTopStyler: function(elmt) {
+                    elmt.className = "timeline-ether-marker-top";
+                },
+                hTopEmphasizedStyler: function(elmt) {
+                    elmt.className = "timeline-ether-marker-top-emphasized";
+                },
+                vAlign: "Right",
+                vRightStyler: function(elmt) {
+                    elmt.className = "timeline-ether-marker-right";
+                },
+                vRightEmphasizedStyler: function(elmt) {
+                    elmt.className = "timeline-ether-marker-right-emphasized";
+                },
+                vLeftStyler: function(elmt) {
+                    elmt.className = "timeline-ether-marker-left";
+                },
+                vLeftEmphasizedStyler: function(elmt) {
+                    elmt.className = "timeline-ether-marker-left-emphasized";
+                }
+            }
+        }
+    };
+    this.event = {
+        track: {
+            offset: .5,
+            height: 1.5,
+            gap: .5
+        },
+        instant: {
+            icon: Timeline.urlPrefix + "images/dull-blue-circle.png",
+            lineColor: "#58A0DC",
+            impreciseColor: "#58A0DC",
+            impreciseOpacity: 20,
+            showLineForNoText: !0
+        },
+        duration: {
+            color: "#58A0DC",
+            opacity: 100,
+            impreciseColor: "#58A0DC",
+            impreciseOpacity: 20
+        },
+        label: {
+            insideColor: "white",
+            outsideColor: "black",
+            width: 200
+        },
+        highlightColors: [ "#FFFF00", "#FFC000", "#FF0000", "#0000FF" ],
+        bubble: {
+            width: 250,
+            height: 125,
+            titleStyler: function(elmt) {
+                elmt.className = "timeline-event-bubble-title";
+            },
+            bodyStyler: function(elmt) {
+                elmt.className = "timeline-event-bubble-body";
+            },
+            imageStyler: function(elmt) {
+                elmt.className = "timeline-event-bubble-image";
+            },
+            wikiStyler: function(elmt) {
+                elmt.className = "timeline-event-bubble-wiki";
+            },
+            timeStyler: function(elmt) {
+                elmt.className = "timeline-event-bubble-time";
+            }
+        }
+    };
+};
+
+Timeline.NativeDateUnit = new Object;
+
+Timeline.NativeDateUnit.createLabeller = function(locale, timeZone) {
+    return new Timeline.GregorianDateLabeller(locale, timeZone);
+};
+
+Timeline.NativeDateUnit.makeDefaultValue = function() {
+    return new Date;
+};
+
+Timeline.NativeDateUnit.cloneValue = function(v) {
+    return new Date(v.getTime());
+};
+
+Timeline.NativeDateUnit.getParser = function(format) {
+    typeof format == "string" && (format = format.toLowerCase());
+    return format == "iso8601" || format == "iso 8601" ? Timeline.DateTime.parseIso8601DateTime : Timeline.DateTime.parseGregorianDateTime;
+};
+
+Timeline.NativeDateUnit.parseFromObject = function(o) {
+    return Timeline.DateTime.parseGregorianDateTime(o);
+};
+
+Timeline.NativeDateUnit.toNumber = function(v) {
+    return v.getTime();
+};
+
+Timeline.NativeDateUnit.fromNumber = function(n) {
+    return new Date(n);
+};
+
+Timeline.NativeDateUnit.compare = function(v1, v2) {
+    var n1, n2;
+    typeof v1 == "object" ? n1 = v1.getTime() : n1 = Number(v1);
+    typeof v2 == "object" ? n2 = v2.getTime() : n2 = Number(v2);
+    return n1 - n2;
+};
+
+Timeline.NativeDateUnit.earlier = function(v1, v2) {
+    return Timeline.NativeDateUnit.compare(v1, v2) < 0 ? v1 : v2;
+};
+
+Timeline.NativeDateUnit.later = function(v1, v2) {
+    return Timeline.NativeDateUnit.compare(v1, v2) > 0 ? v1 : v2;
+};
 
-Timeline.GregorianDateLabeller.prototype.labelInterval=function(date,intervalUnit){var f=Timeline.GregorianDateLabeller.labelIntervalFunctions[this._locale];if(f==null){f=Timeline.GregorianDateLabeller.prototype.defaultLabelInterval;}
-return f.call(this,date,intervalUnit);};Timeline.GregorianDateLabeller.prototype.labelPrecise=function(date){return Timeline.DateTime.removeTimeZoneOffset(date,this._timeZone).toUTCString();};Timeline.GregorianDateLabeller.prototype.defaultLabelInterval=function(date,intervalUnit){var text;var emphasized=false;date=Timeline.DateTime.removeTimeZoneOffset(date,this._timeZone);switch(intervalUnit){case Timeline.DateTime.MILLISECOND:text=date.getUTCMilliseconds();break;case Timeline.DateTime.SECOND:text=date.getUTCSeconds();break;case Timeline.DateTime.MINUTE:var m=date.getUTCMinutes();if(m==0){text=date.getUTCHours()+":00";emphasized=true;}else{text=m;}
-break;case Timeline.DateTime.HOUR:text=date.getUTCHours()+"hr";break;case Timeline.DateTime.DAY:text=Timeline.GregorianDateLabeller.getMonthName(date.getUTCMonth(),this._locale)+" "+date.getUTCDate();break;case Timeline.DateTime.WEEK:text=Timeline.GregorianDateLabeller.getMonthName(date.getUTCMonth(),this._locale)+" "+date.getUTCDate();break;case Timeline.DateTime.MONTH:var m=date.getUTCMonth();if(m!=0){text=Timeline.GregorianDateLabeller.getMonthName(m,this._locale);break;}
-case Timeline.DateTime.YEAR:case Timeline.DateTime.DECADE:case Timeline.DateTime.CENTURY:case Timeline.DateTime.MILLENNIUM:var y=date.getUTCFullYear();if(y>0){text=date.getUTCFullYear();}else{text=(1-y)+"BC";}
-emphasized=(intervalUnit==Timeline.DateTime.MONTH)||(intervalUnit==Timeline.DateTime.DECADE&&y%100==0)||(intervalUnit==Timeline.DateTime.CENTURY&&y%1000==0);break;default:text=date.toUTCString();}
-return{text:text,emphasized:emphasized};}
-
-/* layouts.js */
-
-Timeline.StaticTrackBasedLayout=function(params){this._eventSource=params.eventSource;this._ether=params.ether;this._theme=params.theme;this._showText=("showText"in params)?params.showText:true;this._laidout=false;var layout=this;if(this._eventSource!=null){this._eventSource.addListener({onAddMany:function(){layout._laidout=false;}});}};Timeline.StaticTrackBasedLayout.prototype.initialize=function(timeline){this._timeline=timeline;};Timeline.StaticTrackBasedLayout.prototype.getTrack=function(evt){if(!this._laidout){this._tracks=[];this._layout();this._laidout=true;}
-return this._tracks[evt.getID()];};Timeline.StaticTrackBasedLayout.prototype.getTrackCount=function(){if(!this._laidout){this._tracks=[];this._layout();this._laidout=true;}
-return this._trackCount;};Timeline.StaticTrackBasedLayout.prototype._layout=function(){if(this._eventSource==null){return;}
-var streams=[Number.NEGATIVE_INFINITY];var layout=this;var showText=this._showText;var theme=this._theme;var eventTheme=theme.event;var layoutInstant=function(evt,startPixel,endPixel,streamOffset){var finalPixel=startPixel-1;if(evt.isImprecise()){finalPixel=endPixel;}
-if(showText){finalPixel=Math.max(finalPixel,startPixel+eventTheme.label.width);}
-return finalPixel;};var layoutDuration=function(evt,startPixel,endPixel,streamOffset){if(evt.isImprecise()){var startDate=evt.getStart();var endDate=evt.getEnd();var startPixel2=Math.round(layout._ether.dateToPixelOffset(startDate));var endPixel2=Math.round(layout._ether.dateToPixelOffset(endDate));}else{var startPixel2=startPixel;var endPixel2=endPixel;}
-var finalPixel=endPixel2;var length=Math.max(endPixel2-startPixel2,1);if(showText){if(length<eventTheme.label.width){finalPixel=endPixel2+eventTheme.label.width;}}
-return finalPixel;};var layoutEvent=function(evt){var startDate=evt.getStart();var endDate=evt.getEnd();var startPixel=Math.round(layout._ether.dateToPixelOffset(startDate));var endPixel=Math.round(layout._ether.dateToPixelOffset(endDate));var streamIndex=0;for(;streamIndex<streams.length;streamIndex++){if(streams[streamIndex]<startPixel){break;}}
-if(streamIndex>=streams.length){streams.push(Number.NEGATIVE_INFINITY);}
-var streamOffset=(eventTheme.track.offset+
-streamIndex*(eventTheme.track.height+eventTheme.track.gap))+"em";layout._tracks[evt.getID()]=streamIndex;if(evt.isInstant()){streams[streamIndex]=layoutInstant(evt,startPixel,endPixel,streamOffset);}else{streams[streamIndex]=layoutDuration(evt,startPixel,endPixel,streamOffset);}};var iterator=this._eventSource.getAllEventIterator();while(iterator.hasNext()){var evt=iterator.next();layoutEvent(evt);}
-this._trackCount=streams.length;};
-
-/* painters.js */
-
-Timeline.DurationEventPainter=function(params){this._params=params;this._theme=params.theme;this._layout=params.layout;this._showText=params.showText;this._showLineForNoText=("showLineForNoText"in params)?params.showLineForNoText:params.theme.event.instant.showLineForNoText;this._filterMatcher=null;this._highlightMatcher=null;};Timeline.DurationEventPainter.prototype.initialize=function(band,timeline){this._band=band;this._timeline=timeline;this._layout.initialize(band,timeline);this._eventLayer=null;this._highlightLayer=null;};Timeline.DurationEventPainter.prototype.getLayout=function(){return this._layout;};Timeline.DurationEventPainter.prototype.setLayout=function(layout){this._layout=layout;};Timeline.DurationEventPainter.prototype.getFilterMatcher=function(){return this._filterMatcher;};Timeline.DurationEventPainter.prototype.setFilterMatcher=function(filterMatcher){this._filterMatcher=filterMatcher;};Timeline.DurationEventPainter.prototype.getHighlightMatcher=function(){return this._highlightMatcher;};Timeline.DurationEventPainter.prototype.setHighlightMatcher=function(highlightMatcher){this._highlightMatcher=highlightMatcher;};Timeline.DurationEventPainter.prototype.paint=function(){var eventSource=this._band.getEventSource();if(eventSource==null){return;}
-if(this._highlightLayer!=null){this._band.removeLayerDiv(this._highlightLayer);}
-this._highlightLayer=this._band.createLayerDiv(105);this._highlightLayer.setAttribute("name","event-highlights");this._highlightLayer.style.display="none";if(this._eventLayer!=null){this._band.removeLayerDiv(this._eventLayer);}
-this._eventLayer=this._band.createLayerDiv(110);this._eventLayer.setAttribute("name","events");this._eventLayer.style.display="none";var minDate=this._band.getMinDate();var maxDate=this._band.getMaxDate();var doc=this._timeline.getDocument();var p=this;var eventLayer=this._eventLayer;var highlightLayer=this._highlightLayer;var showText=this._showText;var theme=this._params.theme;var eventTheme=theme.event;var trackOffset=eventTheme.track.offset;var trackHeight=("trackHeight"in this._params)?this._params.trackHeight:eventTheme.track.height;var trackGap=("trackGap"in this._params)?this._params.trackGap:eventTheme.track.gap;var appendIcon=function(evt,div){var icon=evt.getIcon();var img=Timeline.Graphics.createTranslucentImage(doc,icon!=null?icon:eventTheme.instant.icon);div.appendChild(img);div.style.cursor="pointer";Timeline.DOM.registerEvent(div,"mousedown",function(elmt,domEvt,target){p._onClickInstantEvent(img,domEvt,evt);});};var createHighlightDiv=function(highlightIndex,startPixel,length,highlightOffset,highlightWidth){if(highlightIndex>=0){var color=eventTheme.highlightColors[Math.min(highlightIndex,eventTheme.highlightColors.length-1)];var div=doc.createElement("div");div.style.position="absolute";div.style.overflow="hidden";div.style.left=(startPixel-3)+"px";div.style.width=(length+6)+"px";div.style.top=highlightOffset+"em";div.style.height=highlightWidth+"em";div.style.background=color;highlightLayer.appendChild(div);}};var createInstantDiv=function(evt,startPixel,endPixel,streamOffset,highlightIndex,highlightOffset,highlightWidth){if(evt.isImprecise()){var length=Math.max(endPixel-startPixel,1);var divImprecise=doc.createElement("div");divImprecise.style.position="absolute";divImprecise.style.overflow="hidden";divImprecise.style.top=streamOffset;divImprecise.style.height=trackHeight+"em";divImprecise.style.left=startPixel+"px";divImprecise.style.width=length+"px";divImprecise.style.background=eventTheme.instant.impreciseColor;if(eventTheme.instant.impreciseOpacity<100){Timeline.Graphics.setOpacity(divImprecise,eventTheme.instant.impreciseOpacity);}
-eventLayer.appendChild(divImprecise);}
-var div=doc.createElement("div");div.style.position="absolute";div.style.overflow="hidden";eventLayer.appendChild(div);var foreground=evt.getTextColor();var background=evt.getColor();var realign=-8;var length=16;if(showText){div.style.width=eventTheme.label.width+"px";div.style.color=foreground!=null?foreground:eventTheme.label.outsideColor;appendIcon(evt,div);div.appendChild(doc.createTextNode(evt.getText()));}else{if(p._showLineForNoText){div.style.width="1px";div.style.borderLeft="1px solid "+(background!=null?background:eventTheme.instant.lineColor);realign=0;length=1;}else{appendIcon(evt,div);}}
-div.style.top=streamOffset;div.style.height=trackHeight+"em";div.style.left=(startPixel+realign)+"px";createHighlightDiv(highlightIndex,(startPixel+realign),length,highlightOffset,highlightWidth);};var createDurationDiv=function(evt,startPixel,endPixel,streamOffset,highlightIndex,highlightOffset,highlightWidth){var attachClickEvent=function(elmt){elmt.style.cursor="pointer";Timeline.DOM.registerEvent(elmt,"mousedown",function(elmt,domEvt,target){p._onClickDurationEvent(domEvt,evt,target);});};var length=Math.max(endPixel-startPixel,1);if(evt.isImprecise()){var div=doc.createElement("div");div.style.position="absolute";div.style.overflow="hidden";div.style.top=streamOffset;div.style.height=trackHeight+"em";div.style.left=startPixel+"px";div.style.width=length+"px";div.style.background=eventTheme.duration.impreciseColor;if(eventTheme.duration.impreciseOpacity<100){Timeline.Graphics.setOpacity(div,eventTheme.duration.impreciseOpacity);}
-eventLayer.appendChild(div);var startDate=evt.getLatestStart();var endDate=evt.getEarliestEnd();var startPixel2=Math.round(p._band.dateToPixelOffset(startDate));var endPixel2=Math.round(p._band.dateToPixelOffset(endDate));}else{var startPixel2=startPixel;var endPixel2=endPixel;}
-var foreground=evt.getTextColor();var outside=true;if(startPixel2<=endPixel2){length=Math.max(endPixel2-startPixel2,1);outside=!(length>eventTheme.label.width);div=doc.createElement("div");div.style.position="absolute";div.style.overflow="hidden";div.style.top=streamOffset;div.style.height=trackHeight+"em";div.style.left=startPixel2+"px";div.style.width=length+"px";var background=evt.getColor();div.style.background=background!=null?background:eventTheme.duration.color;if(eventTheme.duration.opacity<100){Timeline.Graphics.setOpacity(div,eventTheme.duration.opacity);}
-eventLayer.appendChild(div);}else{var temp=startPixel2;startPixel2=endPixel2;endPixel2=temp;}
-if(div==null){console.log(evt);}
-attachClickEvent(div);if(showText){var divLabel=doc.createElement("div");divLabel.style.position="absolute";divLabel.style.top=streamOffset;divLabel.style.height=trackHeight+"em";divLabel.style.left=((length>eventTheme.label.width)?startPixel2:endPixel2)+"px";divLabel.style.width=eventTheme.label.width+"px";divLabel.style.color=foreground!=null?foreground:(outside?eventTheme.label.outsideColor:eventTheme.label.insideColor);divLabel.style.overflow="hidden";divLabel.appendChild(doc.createTextNode(evt.getText()));eventLayer.appendChild(divLabel);attachClickEvent(divLabel);}
-createHighlightDiv(highlightIndex,startPixel,endPixel-startPixel,highlightOffset,highlightWidth);};var createEventDiv=function(evt,highlightIndex){var startDate=evt.getStart();var endDate=evt.getEnd();var startPixel=Math.round(p._band.dateToPixelOffset(startDate));var endPixel=Math.round(p._band.dateToPixelOffset(endDate));var streamOffset=(trackOffset+
-p._layout.getTrack(evt)*(trackHeight+trackGap));if(evt.isInstant()){createInstantDiv(evt,startPixel,endPixel,streamOffset+"em",highlightIndex,streamOffset-trackGap,trackHeight+2*trackGap);}else{createDurationDiv(evt,startPixel,endPixel,streamOffset+"em",highlightIndex,streamOffset-trackGap,trackHeight+2*trackGap);}};var filterMatcher=(this._filterMatcher!=null)?this._filterMatcher:function(evt){return true;};var highlightMatcher=(this._highlightMatcher!=null)?this._highlightMatcher:function(evt){return-1;};var iterator=eventSource.getEventIterator(minDate,maxDate);while(iterator.hasNext()){var evt=iterator.next();if(filterMatcher(evt)){createEventDiv(evt,highlightMatcher(evt));}}
-this._highlightLayer.style.display="block";this._eventLayer.style.display="block";};Timeline.DurationEventPainter.prototype.softPaint=function(){};Timeline.DurationEventPainter.prototype._onClickInstantEvent=function(icon,domEvt,evt){domEvt.cancelBubble=true;var c=Timeline.DOM.getPageCoordinates(icon);this._showBubble(c.left+Math.ceil(icon.offsetWidth/2),c.top+Math.ceil(icon.offsetHeight/2),evt);};Timeline.DurationEventPainter.prototype._onClickDurationEvent=function(domEvt,evt,target){domEvt.cancelBubble=true;if("pageX"in domEvt){var x=domEvt.pageX;var y=domEvt.pageY;}else{var c=Timeline.DOM.getPageCoordinates(target);var x=domEvt.offsetX+c.left;var y=domEvt.offsetY+c.top;}
-this._showBubble(x,y,evt);};Timeline.DurationEventPainter.prototype._showBubble=function(x,y,evt){var div=this._band.openBubbleForPoint(x,y,this._theme.event.bubble.width,this._theme.event.bubble.height);evt.fillInfoBubble(div,this._theme,this._band.getLabeller());};
-
-/* sources.js */
-
-Timeline.DefaultEventSource=function(eventIndex){this._events=(eventIndex instanceof Object)?eventIndex:new Timeline.EventIndex();this._listeners=[];};Timeline.DefaultEventSource.prototype.addListener=function(listener){this._listeners.push(listener);};Timeline.DefaultEventSource.prototype.removeListener=function(listener){for(var i=0;i<this._listeners.length;i++){if(this._listeners[i]==listener){this._listeners.splice(i,1);break;}}};Timeline.DefaultEventSource.prototype.loadXML=function(xml,url){var base=this._getBaseURL(url);var wikiURL=xml.documentElement.getAttribute("wiki-url");var wikiSection=xml.documentElement.getAttribute("wiki-section");var dateTimeFormat=xml.documentElement.getAttribute("date-time-format");var parseDateTimeFunction=this._events.getUnit().getParser(dateTimeFormat);var node=xml.documentElement.firstChild;var added=false;while(node!=null){if(node.nodeType==1){var description="";if(node.firstChild!=null&&node.firstChild.nodeType==3){description=node.firstChild.nodeValue;}
-var evt=new Timeline.DefaultEventSource.Event(parseDateTimeFunction(node.getAttribute("start")),parseDateTimeFunction(node.getAttribute("end")),parseDateTimeFunction(node.getAttribute("latestStart")),parseDateTimeFunction(node.getAttribute("earliestEnd")),node.getAttribute("isDuration")!="true",node.getAttribute("title"),description,this._resolveRelativeURL(node.getAttribute("image"),base),this._resolveRelativeURL(node.getAttribute("link"),base),this._resolveRelativeURL(node.getAttribute("icon"),base),node.getAttribute("color"),node.getAttribute("textColor"));evt._node=node;evt.getProperty=function(name){return this._node.getAttribute(name);};evt.setWikiInfo(wikiURL,wikiSection);this._events.add(evt);added=true;}
-node=node.nextSibling;}
-if(added){this._fire("onAddMany",[]);}};Timeline.DefaultEventSource.prototype.loadJSON=function(data,url){var base=this._getBaseURL(url);var added=false;if(data&&data.events){var wikiURL=("wikiURL"in data)?data.wikiURL:null;var wikiSection=("wikiSection"in data)?data.wikiSection:null;var dateTimeFormat=("dateTimeFormat"in data)?data.dateTimeFormat:null;var parseDateTimeFunction=this._events.getUnit().getParser(dateTimeFormat);for(var i=0;i<data.events.length;i++){var event=data.events[i];var evt=new Timeline.DefaultEventSource.Event(parseDateTimeFunction(event.start),parseDateTimeFunction(event.end),parseDateTimeFunction(event.latestStart),parseDateTimeFunction(event.earliestEnd),event.isDuration||false,event.title,event.description,this._resolveRelativeURL(event.image,base),this._resolveRelativeURL(event.link,base),this._resolveRelativeURL(event.icon,base),event.color,event.textColor);evt._obj=event;evt.getProperty=function(name){return this._obj[name];};evt.setWikiInfo(wikiURL,wikiSection);this._events.add(evt);added=true;}}
-if(added){this._fire("onAddMany",[]);}};Timeline.DefaultEventSource.prototype.loadSPARQL=function(xml,url){var base=this._getBaseURL(url);var dateTimeFormat='iso8601';var parseDateTimeFunction=this._events.getUnit().getParser(dateTimeFormat);if(xml==null){return;}
-var node=xml.documentElement.firstChild;while(node!=null&&(node.nodeType!=1||node.nodeName!='results')){node=node.nextSibling;}
-var wikiURL=null;var wikiSection=null;if(node!=null){wikiURL=node.getAttribute("wiki-url");wikiSection=node.getAttribute("wiki-section");node=node.firstChild;}
-var added=false;while(node!=null){if(node.nodeType==1){var bindings={};var binding=node.firstChild;while(binding!=null){if(binding.nodeType==1&&binding.firstChild!=null&&binding.firstChild.nodeType==1&&binding.firstChild.firstChild!=null&&binding.firstChild.firstChild.nodeType==3){bindings[binding.getAttribute('name')]=binding.firstChild.firstChild.nodeValue;}
-binding=binding.nextSibling;}
-if(bindings["start"]==null&&bindings["date"]!=null){bindings["start"]=bindings["date"];}
-var evt=new Timeline.DefaultEventSource.Event(parseDateTimeFunction(bindings["start"]),parseDateTimeFunction(bindings["end"]),parseDateTimeFunction(bindings["latestStart"]),parseDateTimeFunction(bindings["earliestEnd"]),bindings["isDuration"]!="true",bindings["title"],bindings["description"],this._resolveRelativeURL(bindings["image"],base),this._resolveRelativeURL(bindings["link"],base),this._resolveRelativeURL(bindings["icon"],base),bindings["color"],bindings["textColor"]);evt._bindings=bindings;evt.getProperty=function(name){return this._bindings[name];};evt.setWikiInfo(wikiURL,wikiSection);this._events.add(evt);added=true;}
-node=node.nextSibling;}
-if(added){this._fire("onAddMany",[]);}};Timeline.DefaultEventSource.prototype.add=function(evt){this._events.add(evt);this._fire("onAddOne",[evt]);};Timeline.DefaultEventSource.prototype.addMany=function(events){for(var i=0;i<events.length;i++){this._events.add(events[i]);}
-this._fire("onAddMany",[]);};Timeline.DefaultEventSource.prototype.clear=function(){this._events.removeAll();this._fire("onClear",[]);};Timeline.DefaultEventSource.prototype.getEventIterator=function(startDate,endDate){return this._events.getIterator(startDate,endDate);};Timeline.DefaultEventSource.prototype.getAllEventIterator=function(){return this._events.getAllIterator();};Timeline.DefaultEventSource.prototype.getCount=function(){return this._events.getCount();};Timeline.DefaultEventSource.prototype.getEarliestDate=function(){return this._events.getEarliestDate();};Timeline.DefaultEventSource.prototype.getLatestDate=function(){return this._events.getLatestDate();};Timeline.DefaultEventSource.prototype._fire=function(handlerName,args){for(var i=0;i<this._listeners.length;i++){var listener=this._listeners[i];if(handlerName in listener){try{listener[handlerName].apply(listener,args);}catch(e){Timeline.Debug.exception(e);}}}};Timeline.DefaultEventSource.prototype._getBaseURL=function(url){if(url.indexOf("://")<0){var url2=this._getBaseURL(document.location.href);if(url.substr(0,1)=="/"){url=url2.substr(0,url2.indexOf("/",url2.indexOf("://")+3))+url;}else{url=url2+url;}}
-var i=url.lastIndexOf("/");if(i<0){return"";}else{return url.substr(0,i+1);}};Timeline.DefaultEventSource.prototype._resolveRelativeURL=function(url,base){if(url==null||url==""){return url;}else if(url.indexOf("://")>0){return url;}else if(url.substr(0,1)=="/"){return base.substr(0,base.indexOf("/",base.indexOf("://")+3))+url;}else{return base+url;}};Timeline.DefaultEventSource.Event=function(start,end,latestStart,earliestEnd,instant,text,description,image,link,icon,color,textColor){this._id="e"+Math.floor(Math.random()*1000000);this._instant=instant||(end==null);this._start=start;this._end=(end!=null)?end:start;this._latestStart=(latestStart!=null)?latestStart:(instant?this._end:this._start);this._earliestEnd=(earliestEnd!=null)?earliestEnd:(instant?this._start:this._end);this._text=Timeline.HTML.deEntify(text);this._description=Timeline.HTML.deEntify(description);this._image=(image!=null&&image!="")?image:null;this._link=(link!=null&&link!="")?link:null;this._icon=(icon!=null&&icon!="")?icon:null;this._color=(color!=null&&color!="")?color:null;this._textColor=(textColor!=null&&textColor!="")?textColor:null;this._wikiURL=null;this._wikiSection=null;};Timeline.DefaultEventSource.Event.prototype={getID:function(){return this._id;},isInstant:function(){return this._instant;},isImprecise:function(){return this._start!=this._latestStart||this._end!=this._earliestEnd;},getStart:function(){return this._start;},getEnd:function(){return this._end;},getLatestStart:function(){return this._latestStart;},getEarliestEnd:function(){return this._earliestEnd;},getText:function(){return this._text;},getDescription:function(){return this._description;},getImage:function(){return this._image;},getLink:function(){return this._link;},getIcon:function(){return this._icon;},getColor:function(){return this._color;},getTextColor:function(){return this._textColor;},getProperty:function(name){return null;},getWikiURL:function(){return this._wikiURL;},getWikiSection:function(){return this._wikiSection;},setWikiInfo:function(wikiURL,wikiSection){this._wikiURL=wikiURL;this._wikiSection=wikiSection;},fillDescription:function(elmt){elmt.innerHTML=this._description;},fillWikiInfo:function(elmt){if(this._wikiURL!=null&&this._wikiSection!=null){var wikiID=this.getProperty("wikiID");if(wikiID==null||wikiID.length==0){wikiID=this.getText();}
-wikiID=wikiID.replace(/\s/g,"_");var url=this._wikiURL+this._wikiSection.replace(/\s/g,"_")+"/"+wikiID;var a=document.createElement("a");a.href=url;a.target="new";a.innerHTML=Timeline.strings[Timeline.Platform.clientLocale].wikiLinkLabel;elmt.appendChild(document.createTextNode("["));elmt.appendChild(a);elmt.appendChild(document.createTextNode("]"));}else{elmt.style.display="none";}},fillTime:function(elmt,labeller){if(this._instant){if(this.isImprecise()){elmt.appendChild(elmt.ownerDocument.createTextNode(labeller.labelPrecise(this._start)));elmt.appendChild(elmt.ownerDocument.createElement("br"));elmt.appendChild(elmt.ownerDocument.createTextNode(labeller.labelPrecise(this._end)));}else{elmt.appendChild(elmt.ownerDocument.createTextNode(labeller.labelPrecise(this._start)));}}else{if(this.isImprecise()){elmt.appendChild(elmt.ownerDocument.createTextNode(labeller.labelPrecise(this._start)+" ~ "+labeller.labelPrecise(this._latestStart)));elmt.appendChild(elmt.ownerDocument.createElement("br"));elmt.appendChild(elmt.ownerDocument.createTextNode(labeller.labelPrecise(this._earliestEnd)+" ~ "+labeller.labelPrecise(this._end)));}else{elmt.appendChild(elmt.ownerDocument.createTextNode(labeller.labelPrecise(this._start)));elmt.appendChild(elmt.ownerDocument.createElement("br"));elmt.appendChild(elmt.ownerDocument.createTextNode(labeller.labelPrecise(this._end)));}}},fillInfoBubble:function(elmt,theme,labeller){var doc=elmt.ownerDocument;var title=this.getText();var link=this.getLink();var image=this.getImage();if(image!=null){var img=doc.createElement("img");img.src=image;theme.event.bubble.imageStyler(img);elmt.appendChild(img);}
-var divTitle=doc.createElement("div");var textTitle=doc.createTextNode(title);if(link!=null){var a=doc.createElement("a");a.href=link;a.appendChild(textTitle);divTitle.appendChild(a);}else{divTitle.appendChild(textTitle);}
-theme.event.bubble.titleStyler(divTitle);elmt.appendChild(divTitle);var divBody=doc.createElement("div");this.fillDescription(divBody);theme.event.bubble.bodyStyler(divBody);elmt.appendChild(divBody);var divTime=doc.createElement("div");this.fillTime(divTime,labeller);theme.event.bubble.timeStyler(divTime);elmt.appendChild(divTime);var divWiki=doc.createElement("div");this.fillWikiInfo(divWiki);theme.event.bubble.wikiStyler(divWiki);elmt.appendChild(divWiki);}};
-
-/* themes.js */
-
-Timeline.ClassicTheme=new Object();Timeline.ClassicTheme.implementations=[];Timeline.ClassicTheme.create=function(locale){if(locale==null){locale=Timeline.Platform.getDefaultLocale();}
-var f=Timeline.ClassicTheme.implementations[locale];if(f==null){f=Timeline.ClassicTheme._Impl;}
-return new f();};Timeline.ClassicTheme._Impl=function(){this.firstDayOfWeek=0;this.ether={backgroundColors:["#EEE","#DDD","#CCC","#AAA"],highlightColor:"white",highlightOpacity:50,interval:{line:{show:true,color:"#aaa",opacity:25},weekend:{color:"#FFFFE0",opacity:30},marker:{hAlign:"Bottom",hBottomStyler:function(elmt){elmt.className="timeline-ether-marker-bottom";},hBottomEmphasizedStyler:function(elmt){elmt.className="timeline-ether-marker-bottom-emphasized";},hTopStyler:function(elmt){elmt.className="timeline-ether-marker-top";},hTopEmphasizedStyler:function(elmt){elmt.className="timeline-ether-marker-top-emphasized";},vAlign:"Right",vRightStyler:function(elmt){elmt.className="timeline-ether-marker-right";},vRightEmphasizedStyler:function(elmt){elmt.className="timeline-ether-marker-right-emphasized";},vLeftStyler:function(elmt){elmt.className="timeline-ether-marker-left";},vLeftEmphasizedStyler:function(elmt){elmt.className="timeline-ether-marker-left-emphasized";}}}};this.event={track:{offset:0.5,height:1.5,gap:0.5},instant:{icon:Timeline.urlPrefix+"images/dull-blue-circle.png",lineColor:"#58A0DC",impreciseColor:"#58A0DC",impreciseOpacity:20,showLineForNoText:true},duration:{color:"#58A0DC",opacity:100,impreciseColor:"#58A0DC",impreciseOpacity:20},label:{insideColor:"white",outsideColor:"black",width:200},highlightColors:["#FFFF00","#FFC000","#FF0000","#0000FF"],bubble:{width:250,height:125,titleStyler:function(elmt){elmt.className="timeline-event-bubble-title";},bodyStyler:function(elmt){elmt.className="timeline-event-bubble-body";},imageStyler:function(elmt){elmt.className="timeline-event-bubble-image";},wikiStyler:function(elmt){elmt.className="timeline-event-bubble-wiki";},timeStyler:function(elmt){elmt.className="timeline-event-bubble-time";}}};};
-
-/* units.js */
-
-Timeline.NativeDateUnit=new Object();Timeline.NativeDateUnit.createLabeller=function(locale,timeZone){return new Timeline.GregorianDateLabeller(locale,timeZone);};Timeline.NativeDateUnit.makeDefaultValue=function(){return new Date();};Timeline.NativeDateUnit.cloneValue=function(v){return new Date(v.getTime());};Timeline.NativeDateUnit.getParser=function(format){if(typeof format=="string"){format=format.toLowerCase();}
-return(format=="iso8601"||format=="iso 8601")?Timeline.DateTime.parseIso8601DateTime:Timeline.DateTime.parseGregorianDateTime;};Timeline.NativeDateUnit.parseFromObject=function(o){return Timeline.DateTime.parseGregorianDateTime(o);};Timeline.NativeDateUnit.toNumber=function(v){return v.getTime();};Timeline.NativeDateUnit.fromNumber=function(n){return new Date(n);};Timeline.NativeDateUnit.compare=function(v1,v2){var n1,n2;if(typeof v1=="object"){n1=v1.getTime();}else{n1=Number(v1);}
-if(typeof v2=="object"){n2=v2.getTime();}else{n2=Number(v2);}
-return n1-n2;};Timeline.NativeDateUnit.earlier=function(v1,v2){return Timeline.NativeDateUnit.compare(v1,v2)<0?v1:v2;};Timeline.NativeDateUnit.later=function(v1,v2){return Timeline.NativeDateUnit.compare(v1,v2)>0?v1:v2;};Timeline.NativeDateUnit.change=function(v,n){return new Date(v.getTime()+n);};
\ No newline at end of file
+Timeline.NativeDateUnit.change = function(v, n) {
+    return new Date(v.getTime() + n);
+};
\ No newline at end of file
--- a/chrome/zotero.jar!/content/zotero/xpcom/connector/typeSchemaData.js
+++ b/chrome/zotero.jar!/content/zotero/xpcom/connector/typeSchemaData.js
@@ -1 +1,259 @@
-Zotero.Connector_Types.schema = {"itemTypes":{"1":["note","Note",[false],[],{},"treeitem-note.png"],"2":["book","Book",[1,2,3,5,4],[110,90,3,30,4,45,6,7,8,14,118,87,11,116,1,27,123,19,62,18,2,22],{},"treeitem-book.png"],"3":["bookSection","Book Section",[1,29,2,3,5,4],[110,90,115,3,30,4,45,6,7,8,14,10,87,11,116,1,27,123,19,62,18,2,22],{"115":12},"treeitem-bookSection.png"],"4":["journalArticle","Journal Article",[1,2,3,27,4],[110,90,12,4,5,10,14,3,28,29,25,87,26,13,116,1,27,123,19,62,18,2,22],{},"treeitem-journalArticle.png"],"5":["magazineArticle","Magazine Article",[1,2,27,4],[110,90,12,4,5,14,10,87,13,116,1,27,123,19,62,18,2,22],{},"treeitem-magazineArticle.png"],"6":["newspaperArticle","Newspaper Article",[1,2,27,4],[110,90,12,7,6,14,15,10,87,116,13,1,27,123,19,62,18,2,22],{},"treeitem-newspaperArticle.png"],"7":["thesis","Thesis",[1,2],[110,90,69,89,7,14,118,87,116,1,27,123,19,62,18,2,22],{"69":108,"89":8},"treeitem-thesis.png"],"8":["letter","Letter",[1,2,16],[110,90,65,14,87,116,1,27,123,19,62,18,2,22],{"65":108},"treeitem-letter.png"],"9":["manuscript","Manuscript",[1,2,4],[110,90,66,7,14,118,87,116,1,27,123,19,62,18,2,22],{"66":108},"treeitem-manuscript.png"],"10":["interview","Interview",[6,2,7,4],[110,90,14,64,87,116,1,27,123,19,62,18,2,22],{"64":109},"treeitem-interview.png"],"11":["film","Film",[8,2,10,9],[110,90,21,14,122,63,77,87,116,1,27,123,19,62,18,2,22],{"21":8,"122":108,"63":109},"treeitem-film.png"],"12":["artwork","Artwork",[22,2],[110,90,59,61,14,87,116,123,19,62,18,1,27,2,22],{"59":109},"treeitem-artwork.png"],"13":["webpage","Web Page",[1,2,4],[110,90,91,70,14,116,1,27,87,2,22],{"91":12,"70":108},"treeitem-webpage.png"],"14":["attachment","Attachment",[false],[110,27,1],{},"treeitem.png"],"15":["report","Report",[1,2,5,4],[110,90,92,32,28,7,31,14,10,87,116,1,27,123,19,62,18,2,22],{"92":60,"32":108,"31":8},"treeitem-report.png"],"16":["bill","Bill",[12,2,28],[110,90,93,36,94,15,95,41,40,42,14,87,1,27,116,2,22],{"93":60,"94":4,"95":10},"treeitem.png"],"17":["case","Case",[1,2,13],[111,90,43,97,44,117,98,42,96,87,116,1,27,2,22],{"111":110,"97":4,"117":60,"98":10,"96":14},"treeitem.png"],"18":["hearing","Hearing",[2],[110,90,46,7,8,45,99,10,41,40,42,14,87,116,1,27,2,22],{"99":60},"treeitem.png"],"19":["patent","Patent",[14,15,2],[110,90,7,102,48,120,50,121,10,103,51,52,53,54,87,116,1,27,2,22],{"50":60,"52":14},"treeitem.png"],"20":["statute","Statute",[1,2],[112,90,36,55,101,100,10,15,40,42,87,116,1,27,2,22],{"112":110,"101":60,"100":14},"treeitem.png"],"21":["email","E-mail",[1,2,16],[113,90,14,116,1,27,87,2,22],{"113":110},"treeitem-email.png"],"22":["map","Map",[20,2,5],[110,90,67,68,28,6,7,8,14,87,11,116,1,27,123,19,62,18,2,22],{"67":108},"treeitem-map.png"],"23":["blogPost","Blog Post",[1,23,2],[110,90,107,70,14,1,27,87,116,2,22],{"107":12,"70":108},"treeitem-blogPost.png"],"24":["instantMessage","Instant Message",[1,2,16],[110,90,14,87,116,1,27,2,22],{},"treeitem.png"],"25":["forumPost","Forum Post",[1,2],[110,90,104,79,14,87,116,1,27,2,22],{"104":12,"79":108},"treeitem-forumPost.png"],"26":["audioRecording","Audio Recording",[17,18,2,19],[110,90,71,28,4,45,7,72,14,77,87,11,116,123,19,62,18,1,27,2,22],{"71":109,"72":8},"treeitem-audioRecording.png"],"27":["presentation","Presentation",[24,2],[110,90,74,14,7,75,1,27,87,116,2,22],{"74":108},"treeitem.png"],"28":["videoRecording","Video Recording",[8,11,2,10,9],[110,90,63,28,4,45,7,76,14,77,87,11,116,1,27,123,19,62,18,2,22],{"63":109,"76":8},"treeitem-videoRecording.png"],"29":["tvBroadcast","TV Broadcast",[8,11,2,25,10,9],[110,90,119,105,63,7,78,14,77,87,116,1,27,123,19,62,18,2,22],{"119":12,"105":60,"63":109,"78":8},"treeitem-tvBroadcast.png"],"30":["radioBroadcast","Radio Broadcast",[8,11,2,25,10,9],[110,90,119,105,71,7,78,14,77,87,116,1,27,123,19,62,18,2,22],{"119":12,"105":60,"71":109,"78":8},"treeitem-radioBroadcast.png"],"31":["podcast","Podcast",[26,2,25],[110,90,28,105,80,77,1,27,87,116,2,22],{"105":60,"80":109},"treeitem-podcast.png"],"32":["computerProgram","Computer Program",[21,2],[110,90,28,81,14,82,7,83,88,11,116,1,2,123,19,62,18,27,22],{"83":8},"treeitem-computerProgram.png"],"33":["conferencePaper","Conference Paper",[1,2,3,5,4],[110,90,14,114,84,7,8,4,10,3,87,26,11,116,1,27,123,19,62,18,2,22],{"114":12},"treeitem-conferencePaper.png"],"34":["document","Document",[1,2,3,27,4],[110,90,8,14,87,116,1,27,123,19,62,18,2,22],{},"treeitem.png"],"35":["encyclopediaArticle","Encyclopedia Article",[1,2,3,5,4],[110,90,85,3,30,4,45,6,7,8,14,10,11,116,1,27,87,123,19,62,18,2,22],{"85":12},"treeitem.png"],"36":["dictionaryEntry","Dictionary Entry",[1,2,3,5,4],[110,90,86,3,30,4,45,6,7,8,14,10,87,11,116,1,27,123,19,62,18,2,22],{"86":12},"treeitem.png"]},"creatorTypes":{"1":["author","Author"],"2":["contributor","Contributor"],"3":["editor","Editor"],"4":["translator","Translator"],"5":["seriesEditor","Series Editor"],"6":["interviewee","Interview With"],"7":["interviewer","Interviewer"],"8":["director","Director"],"9":["scriptwriter","Scriptwriter"],"10":["producer","Producer"],"11":["castMember","Cast Member"],"12":["sponsor","Sponsor"],"13":["counsel","Counsel"],"14":["inventor","Inventor"],"15":["attorneyAgent","Attorney/Agent"],"16":["recipient","Recipient"],"17":["performer","Performer"],"18":["composer","Composer"],"19":["wordsBy","Words By"],"20":["cartographer","Cartographer"],"21":["programmer","Programmer"],"22":["artist","Artist"],"23":["commenter","Commenter"],"24":["presenter","Presenter"],"25":["guest","Guest"],"26":["podcaster","Podcaster"],"27":["reviewedAuthor","Reviewed Author"],"28":["cosponsor","Cosponsor"],"29":["bookAuthor","Book Author"]},"fields":{"1":["url"],"2":["rights"],"3":["series"],"4":["volume"],"5":["issue"],"6":["edition"],"7":["place"],"8":["publisher"],"10":["pages"],"11":["ISBN"],"12":["publicationTitle"],"13":["ISSN"],"14":["date"],"15":["section"],"18":["callNumber"],"19":["archiveLocation"],"21":["distributor"],"22":["extra"],"25":["journalAbbreviation"],"26":["DOI"],"27":["accessDate"],"28":["seriesTitle"],"29":["seriesText"],"30":["seriesNumber"],"31":["institution"],"32":["reportType"],"36":["code"],"40":["session"],"41":["legislativeBody"],"42":["history"],"43":["reporter"],"44":["court"],"45":["numberOfVolumes"],"46":["committee"],"48":["assignee"],"50":["patentNumber"],"51":["priorityNumbers"],"52":["issueDate"],"53":["references"],"54":["legalStatus"],"55":["codeNumber"],"59":["artworkMedium"],"60":["number"],"61":["artworkSize"],"62":["libraryCatalog"],"63":["videoRecordingFormat"],"64":["interviewMedium"],"65":["letterType"],"66":["manuscriptType"],"67":["mapType"],"68":["scale"],"69":["thesisType"],"70":["websiteType"],"71":["audioRecordingFormat"],"72":["label"],"74":["presentationType"],"75":["meetingName"],"76":["studio"],"77":["runningTime"],"78":["network"],"79":["postType"],"80":["audioFileType"],"81":["version"],"82":["system"],"83":["company"],"84":["conferenceName"],"85":["encyclopediaTitle"],"86":["dictionaryTitle"],"87":["language"],"88":["programmingLanguage"],"89":["university"],"90":["abstractNote"],"91":["websiteTitle"],"92":["reportNumber"],"93":["billNumber"],"94":["codeVolume"],"95":["codePages"],"96":["dateDecided"],"97":["reporterVolume"],"98":["firstPage"],"99":["documentNumber"],"100":["dateEnacted"],"101":["publicLawNumber"],"102":["country"],"103":["applicationNumber"],"104":["forumTitle"],"105":["episodeNumber"],"107":["blogTitle"],"108":["type"],"109":["medium"],"110":["title"],"111":["caseName"],"112":["nameOfAct"],"113":["subject"],"114":["proceedingsTitle"],"115":["bookTitle"],"116":["shortTitle"],"117":["docketNumber"],"118":["numPages"],"119":["programTitle"],"120":["issuingAuthority"],"121":["filingDate"],"122":["genre"],"123":["archive"]}}
\ No newline at end of file
+Zotero.Connector_Types.schema = {
+    itemTypes: {
+        "1": [ "note", "Note", [ !1 ], [], {}, "treeitem-note.png" ],
+        "2": [ "book", "Book", [ 1, 2, 3, 5, 4 ], [ 110, 90, 3, 30, 4, 45, 6, 7, 8, 14, 118, 87, 11, 116, 1, 27, 123, 19, 62, 18, 2, 22 ], {}, "treeitem-book.png" ],
+        "3": [ "bookSection", "Book Section", [ 1, 29, 2, 3, 5, 4 ], [ 110, 90, 115, 3, 30, 4, 45, 6, 7, 8, 14, 10, 87, 11, 116, 1, 27, 123, 19, 62, 18, 2, 22 ], {
+            "115": 12
+        }, "treeitem-bookSection.png" ],
+        "4": [ "journalArticle", "Journal Article", [ 1, 2, 3, 27, 4 ], [ 110, 90, 12, 4, 5, 10, 14, 3, 28, 29, 25, 87, 26, 13, 116, 1, 27, 123, 19, 62, 18, 2, 22 ], {}, "treeitem-journalArticle.png" ],
+        "5": [ "magazineArticle", "Magazine Article", [ 1, 2, 27, 4 ], [ 110, 90, 12, 4, 5, 14, 10, 87, 13, 116, 1, 27, 123, 19, 62, 18, 2, 22 ], {}, "treeitem-magazineArticle.png" ],
+        "6": [ "newspaperArticle", "Newspaper Article", [ 1, 2, 27, 4 ], [ 110, 90, 12, 7, 6, 14, 15, 10, 87, 116, 13, 1, 27, 123, 19, 62, 18, 2, 22 ], {}, "treeitem-newspaperArticle.png" ],
+        "7": [ "thesis", "Thesis", [ 1, 2 ], [ 110, 90, 69, 89, 7, 14, 118, 87, 116, 1, 27, 123, 19, 62, 18, 2, 22 ], {
+            "69": 108,
+            "89": 8
+        }, "treeitem-thesis.png" ],
+        "8": [ "letter", "Letter", [ 1, 2, 16 ], [ 110, 90, 65, 14, 87, 116, 1, 27, 123, 19, 62, 18, 2, 22 ], {
+            "65": 108
+        }, "treeitem-letter.png" ],
+        "9": [ "manuscript", "Manuscript", [ 1, 2, 4 ], [ 110, 90, 66, 7, 14, 118, 87, 116, 1, 27, 123, 19, 62, 18, 2, 22 ], {
+            "66": 108
+        }, "treeitem-manuscript.png" ],
+        "10": [ "interview", "Interview", [ 6, 2, 7, 4 ], [ 110, 90, 14, 64, 87, 116, 1, 27, 123, 19, 62, 18, 2, 22 ], {
+            "64": 109
+        }, "treeitem-interview.png" ],
+        "11": [ "film", "Film", [ 8, 2, 10, 9 ], [ 110, 90, 21, 14, 122, 63, 77, 87, 116, 1, 27, 123, 19, 62, 18, 2, 22 ], {
+            "21": 8,
+            "122": 108,
+            "63": 109
+        }, "treeitem-film.png" ],
+        "12": [ "artwork", "Artwork", [ 22, 2 ], [ 110, 90, 59, 61, 14, 87, 116, 123, 19, 62, 18, 1, 27, 2, 22 ], {
+            "59": 109
+        }, "treeitem-artwork.png" ],
+        "13": [ "webpage", "Web Page", [ 1, 2, 4 ], [ 110, 90, 91, 70, 14, 116, 1, 27, 87, 2, 22 ], {
+            "91": 12,
+            "70": 108
+        }, "treeitem-webpage.png" ],
+        "14": [ "attachment", "Attachment", [ !1 ], [ 110, 27, 1 ], {}, "treeitem.png" ],
+        "15": [ "report", "Report", [ 1, 2, 5, 4 ], [ 110, 90, 92, 32, 28, 7, 31, 14, 10, 87, 116, 1, 27, 123, 19, 62, 18, 2, 22 ], {
+            "92": 60,
+            "32": 108,
+            "31": 8
+        }, "treeitem-report.png" ],
+        "16": [ "bill", "Bill", [ 12, 2, 28 ], [ 110, 90, 93, 36, 94, 15, 95, 41, 40, 42, 14, 87, 1, 27, 116, 2, 22 ], {
+            "93": 60,
+            "94": 4,
+            "95": 10
+        }, "treeitem.png" ],
+        "17": [ "case", "Case", [ 1, 2, 13 ], [ 111, 90, 43, 97, 44, 117, 98, 42, 96, 87, 116, 1, 27, 2, 22 ], {
+            "111": 110,
+            "97": 4,
+            "117": 60,
+            "98": 10,
+            "96": 14
+        }, "treeitem.png" ],
+        "18": [ "hearing", "Hearing", [ 2 ], [ 110, 90, 46, 7, 8, 45, 99, 10, 41, 40, 42, 14, 87, 116, 1, 27, 2, 22 ], {
+            "99": 60
+        }, "treeitem.png" ],
+        "19": [ "patent", "Patent", [ 14, 15, 2 ], [ 110, 90, 7, 102, 48, 120, 50, 121, 10, 103, 51, 52, 53, 54, 87, 116, 1, 27, 2, 22 ], {
+            "50": 60,
+            "52": 14
+        }, "treeitem.png" ],
+        "20": [ "statute", "Statute", [ 1, 2 ], [ 112, 90, 36, 55, 101, 100, 10, 15, 40, 42, 87, 116, 1, 27, 2, 22 ], {
+            "112": 110,
+            "101": 60,
+            "100": 14
+        }, "treeitem.png" ],
+        "21": [ "email", "E-mail", [ 1, 2, 16 ], [ 113, 90, 14, 116, 1, 27, 87, 2, 22 ], {
+            "113": 110
+        }, "treeitem-email.png" ],
+        "22": [ "map", "Map", [ 20, 2, 5 ], [ 110, 90, 67, 68, 28, 6, 7, 8, 14, 87, 11, 116, 1, 27, 123, 19, 62, 18, 2, 22 ], {
+            "67": 108
+        }, "treeitem-map.png" ],
+        "23": [ "blogPost", "Blog Post", [ 1, 23, 2 ], [ 110, 90, 107, 70, 14, 1, 27, 87, 116, 2, 22 ], {
+            "107": 12,
+            "70": 108
+        }, "treeitem-blogPost.png" ],
+        "24": [ "instantMessage", "Instant Message", [ 1, 2, 16 ], [ 110, 90, 14, 87, 116, 1, 27, 2, 22 ], {}, "treeitem.png" ],
+        "25": [ "forumPost", "Forum Post", [ 1, 2 ], [ 110, 90, 104, 79, 14, 87, 116, 1, 27, 2, 22 ], {
+            "104": 12,
+            "79": 108
+        }, "treeitem-forumPost.png" ],
+        "26": [ "audioRecording", "Audio Recording", [ 17, 18, 2, 19 ], [ 110, 90, 71, 28, 4, 45, 7, 72, 14, 77, 87, 11, 116, 123, 19, 62, 18, 1, 27, 2, 22 ], {
+            "71": 109,
+            "72": 8
+        }, "treeitem-audioRecording.png" ],
+        "27": [ "presentation", "Presentation", [ 24, 2 ], [ 110, 90, 74, 14, 7, 75, 1, 27, 87, 116, 2, 22 ], {
+            "74": 108
+        }, "treeitem.png" ],
+        "28": [ "videoRecording", "Video Recording", [ 8, 11, 2, 10, 9 ], [ 110, 90, 63, 28, 4, 45, 7, 76, 14, 77, 87, 11, 116, 1, 27, 123, 19, 62, 18, 2, 22 ], {
+            "63": 109,
+            "76": 8
+        }, "treeitem-videoRecording.png" ],
+        "29": [ "tvBroadcast", "TV Broadcast", [ 8, 11, 2, 25, 10, 9 ], [ 110, 90, 119, 105, 63, 7, 78, 14, 77, 87, 116, 1, 27, 123, 19, 62, 18, 2, 22 ], {
+            "119": 12,
+            "105": 60,
+            "63": 109,
+            "78": 8
+        }, "treeitem-tvBroadcast.png" ],
+        "30": [ "radioBroadcast", "Radio Broadcast", [ 8, 11, 2, 25, 10, 9 ], [ 110, 90, 119, 105, 71, 7, 78, 14, 77, 87, 116, 1, 27, 123, 19, 62, 18, 2, 22 ], {
+            "119": 12,
+            "105": 60,
+            "71": 109,
+            "78": 8
+        }, "treeitem-radioBroadcast.png" ],
+        "31": [ "podcast", "Podcast", [ 26, 2, 25 ], [ 110, 90, 28, 105, 80, 77, 1, 27, 87, 116, 2, 22 ], {
+            "105": 60,
+            "80": 109
+        }, "treeitem-podcast.png" ],
+        "32": [ "computerProgram", "Computer Program", [ 21, 2 ], [ 110, 90, 28, 81, 14, 82, 7, 83, 88, 11, 116, 1, 2, 123, 19, 62, 18, 27, 22 ], {
+            "83": 8
+        }, "treeitem-computerProgram.png" ],
+        "33": [ "conferencePaper", "Conference Paper", [ 1, 2, 3, 5, 4 ], [ 110, 90, 14, 114, 84, 7, 8, 4, 10, 3, 87, 26, 11, 116, 1, 27, 123, 19, 62, 18, 2, 22 ], {
+            "114": 12
+        }, "treeitem-conferencePaper.png" ],
+        "34": [ "document", "Document", [ 1, 2, 3, 27, 4 ], [ 110, 90, 8, 14, 87, 116, 1, 27, 123, 19, 62, 18, 2, 22 ], {}, "treeitem.png" ],
+        "35": [ "encyclopediaArticle", "Encyclopedia Article", [ 1, 2, 3, 5, 4 ], [ 110, 90, 85, 3, 30, 4, 45, 6, 7, 8, 14, 10, 11, 116, 1, 27, 87, 123, 19, 62, 18, 2, 22 ], {
+            "85": 12
+        }, "treeitem.png" ],
+        "36": [ "dictionaryEntry", "Dictionary Entry", [ 1, 2, 3, 5, 4 ], [ 110, 90, 86, 3, 30, 4, 45, 6, 7, 8, 14, 10, 87, 11, 116, 1, 27, 123, 19, 62, 18, 2, 22 ], {
+            "86": 12
+        }, "treeitem.png" ]
+    },
+    creatorTypes: {
+        "1": [ "author", "Author" ],
+        "2": [ "contributor", "Contributor" ],
+        "3": [ "editor", "Editor" ],
+        "4": [ "translator", "Translator" ],
+        "5": [ "seriesEditor", "Series Editor" ],
+        "6": [ "interviewee", "Interview With" ],
+        "7": [ "interviewer", "Interviewer" ],
+        "8": [ "director", "Director" ],
+        "9": [ "scriptwriter", "Scriptwriter" ],
+        "10": [ "producer", "Producer" ],
+        "11": [ "castMember", "Cast Member" ],
+        "12": [ "sponsor", "Sponsor" ],
+        "13": [ "counsel", "Counsel" ],
+        "14": [ "inventor", "Inventor" ],
+        "15": [ "attorneyAgent", "Attorney/Agent" ],
+        "16": [ "recipient", "Recipient" ],
+        "17": [ "performer", "Performer" ],
+        "18": [ "composer", "Composer" ],
+        "19": [ "wordsBy", "Words By" ],
+        "20": [ "cartographer", "Cartographer" ],
+        "21": [ "programmer", "Programmer" ],
+        "22": [ "artist", "Artist" ],
+        "23": [ "commenter", "Commenter" ],
+        "24": [ "presenter", "Presenter" ],
+        "25": [ "guest", "Guest" ],
+        "26": [ "podcaster", "Podcaster" ],
+        "27": [ "reviewedAuthor", "Reviewed Author" ],
+        "28": [ "cosponsor", "Cosponsor" ],
+        "29": [ "bookAuthor", "Book Author" ]
+    },
+    fields: {
+        "1": [ "url" ],
+        "2": [ "rights" ],
+        "3": [ "series" ],
+        "4": [ "volume" ],
+        "5": [ "issue" ],
+        "6": [ "edition" ],
+        "7": [ "place" ],
+        "8": [ "publisher" ],
+        "10": [ "pages" ],
+        "11": [ "ISBN" ],
+        "12": [ "publicationTitle" ],
+        "13": [ "ISSN" ],
+        "14": [ "date" ],
+        "15": [ "section" ],
+        "18": [ "callNumber" ],
+        "19": [ "archiveLocation" ],
+        "21": [ "distributor" ],
+        "22": [ "extra" ],
+        "25": [ "journalAbbreviation" ],
+        "26": [ "DOI" ],
+        "27": [ "accessDate" ],
+        "28": [ "seriesTitle" ],
+        "29": [ "seriesText" ],
+        "30": [ "seriesNumber" ],
+        "31": [ "institution" ],
+        "32": [ "reportType" ],
+        "36": [ "code" ],
+        "40": [ "session" ],
+        "41": [ "legislativeBody" ],
+        "42": [ "history" ],
+        "43": [ "reporter" ],
+        "44": [ "court" ],
+        "45": [ "numberOfVolumes" ],
+        "46": [ "committee" ],
+        "48": [ "assignee" ],
+        "50": [ "patentNumber" ],
+        "51": [ "priorityNumbers" ],
+        "52": [ "issueDate" ],
+        "53": [ "references" ],
+        "54": [ "legalStatus" ],
+        "55": [ "codeNumber" ],
+        "59": [ "artworkMedium" ],
+        "60": [ "number" ],
+        "61": [ "artworkSize" ],
+        "62": [ "libraryCatalog" ],
+        "63": [ "videoRecordingFormat" ],
+        "64": [ "interviewMedium" ],
+        "65": [ "letterType" ],
+        "66": [ "manuscriptType" ],
+        "67": [ "mapType" ],
+        "68": [ "scale" ],
+        "69": [ "thesisType" ],
+        "70": [ "websiteType" ],
+        "71": [ "audioRecordingFormat" ],
+        "72": [ "label" ],
+        "74": [ "presentationType" ],
+        "75": [ "meetingName" ],
+        "76": [ "studio" ],
+        "77": [ "runningTime" ],
+        "78": [ "network" ],
+        "79": [ "postType" ],
+        "80": [ "audioFileType" ],
+        "81": [ "version" ],
+        "82": [ "system" ],
+        "83": [ "company" ],
+        "84": [ "conferenceName" ],
+        "85": [ "encyclopediaTitle" ],
+        "86": [ "dictionaryTitle" ],
+        "87": [ "language" ],
+        "88": [ "programmingLanguage" ],
+        "89": [ "university" ],
+        "90": [ "abstractNote" ],
+        "91": [ "websiteTitle" ],
+        "92": [ "reportNumber" ],
+        "93": [ "billNumber" ],
+        "94": [ "codeVolume" ],
+        "95": [ "codePages" ],
+        "96": [ "dateDecided" ],
+        "97": [ "reporterVolume" ],
+        "98": [ "firstPage" ],
+        "99": [ "documentNumber" ],
+        "100": [ "dateEnacted" ],
+        "101": [ "publicLawNumber" ],
+        "102": [ "country" ],
+        "103": [ "applicationNumber" ],
+        "104": [ "forumTitle" ],
+        "105": [ "episodeNumber" ],
+        "107": [ "blogTitle" ],
+        "108": [ "type" ],
+        "109": [ "medium" ],
+        "110": [ "title" ],
+        "111": [ "caseName" ],
+        "112": [ "nameOfAct" ],
+        "113": [ "subject" ],
+        "114": [ "proceedingsTitle" ],
+        "115": [ "bookTitle" ],
+        "116": [ "shortTitle" ],
+        "117": [ "docketNumber" ],
+        "118": [ "numPages" ],
+        "119": [ "programTitle" ],
+        "120": [ "issuingAuthority" ],
+        "121": [ "filingDate" ],
+        "122": [ "genre" ],
+        "123": [ "archive" ]
+    }
+};
\ No newline at end of file
