web/data/cubicweb.timeline-bundle.js
changeset 67 60a291fe7965
parent 0 b97547f5f1fa
child 68 c0a4be863a7d
--- a/web/data/cubicweb.timeline-bundle.js	Thu Nov 13 14:34:16 2008 +0100
+++ b/web/data/cubicweb.timeline-bundle.js	Thu Nov 13 15:54:24 2008 +0100
@@ -60,1076 +60,15 @@
 
 
 SimileAjax.Platform = new Object();
-
 SimileAjax.urlPrefix = baseuri();
 
-/* jquery-1.2.6.js */
-(function(){var _jQuery=window.jQuery,_$=window.$;
-var jQuery=window.jQuery=window.$=function(selector,context){return new jQuery.fn.init(selector,context);
-};
-var quickExpr=/^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/,isSimple=/^.[^:#\[\.]*$/,undefined;
-jQuery.fn=jQuery.prototype={init:function(selector,context){selector=selector||document;
-if(selector.nodeType){this[0]=selector;
-this.length=1;
-return this;
-}if(typeof selector=="string"){var match=quickExpr.exec(selector);
-if(match&&(match[1]||!context)){if(match[1]){selector=jQuery.clean([match[1]],context);
-}else{var elem=document.getElementById(match[3]);
-if(elem){if(elem.id!=match[3]){return jQuery().find(selector);
-}return jQuery(elem);
-}selector=[];
-}}else{return jQuery(context).find(selector);
-}}else{if(jQuery.isFunction(selector)){return jQuery(document)[jQuery.fn.ready?"ready":"load"](selector);
-}}return this.setArray(jQuery.makeArray(selector));
-},jquery:"1.2.6",size:function(){return this.length;
-},length:0,get:function(num){return num==undefined?jQuery.makeArray(this):this[num];
-},pushStack:function(elems){var ret=jQuery(elems);
-ret.prevObject=this;
-return ret;
-},setArray:function(elems){this.length=0;
-Array.prototype.push.apply(this,elems);
-return this;
-},each:function(callback,args){return jQuery.each(this,callback,args);
-},index:function(elem){var ret=-1;
-return jQuery.inArray(elem&&elem.jquery?elem[0]:elem,this);
-},attr:function(name,value,type){var options=name;
-if(name.constructor==String){if(value===undefined){return this[0]&&jQuery[type||"attr"](this[0],name);
-}else{options={};
-options[name]=value;
-}}return this.each(function(i){for(name in options){jQuery.attr(type?this.style:this,name,jQuery.prop(this,options[name],type,i,name));
-}});
-},css:function(key,value){if((key=="width"||key=="height")&&parseFloat(value)<0){value=undefined;
-}return this.attr(key,value,"curCSS");
-},text:function(text){if(typeof text!="object"&&text!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(text));
-}var ret="";
-jQuery.each(text||this,function(){jQuery.each(this.childNodes,function(){if(this.nodeType!=8){ret+=this.nodeType!=1?this.nodeValue:jQuery.fn.text([this]);
-}});
-});
-return ret;
-},wrapAll:function(html){if(this[0]){jQuery(html,this[0].ownerDocument).clone().insertBefore(this[0]).map(function(){var elem=this;
-while(elem.firstChild){elem=elem.firstChild;
-}return elem;
-}).append(this);
-}return this;
-},wrapInner:function(html){return this.each(function(){jQuery(this).contents().wrapAll(html);
-});
-},wrap:function(html){return this.each(function(){jQuery(this).wrapAll(html);
-});
-},append:function(){return this.domManip(arguments,true,false,function(elem){if(this.nodeType==1){this.appendChild(elem);
-}});
-},prepend:function(){return this.domManip(arguments,true,true,function(elem){if(this.nodeType==1){this.insertBefore(elem,this.firstChild);
-}});
-},before:function(){return this.domManip(arguments,false,false,function(elem){this.parentNode.insertBefore(elem,this);
-});
-},after:function(){return this.domManip(arguments,false,true,function(elem){this.parentNode.insertBefore(elem,this.nextSibling);
-});
-},end:function(){return this.prevObject||jQuery([]);
-},find:function(selector){var elems=jQuery.map(this,function(elem){return jQuery.find(selector,elem);
-});
-return this.pushStack(/[^+>] [^+>]/.test(selector)||selector.indexOf("..")>-1?jQuery.unique(elems):elems);
-},clone:function(events){var ret=this.map(function(){if(jQuery.browser.msie&&!jQuery.isXMLDoc(this)){var clone=this.cloneNode(true),container=document.createElement("div");
-container.appendChild(clone);
-return jQuery.clean([container.innerHTML])[0];
-}else{return this.cloneNode(true);
-}});
-var clone=ret.find("*").andSelf().each(function(){if(this[expando]!=undefined){this[expando]=null;
-}});
-if(events===true){this.find("*").andSelf().each(function(i){if(this.nodeType==3){return ;
-}var events=jQuery.data(this,"events");
-for(var type in events){for(var handler in events[type]){jQuery.event.add(clone[i],type,events[type][handler],events[type][handler].data);
-}}});
-}return ret;
-},filter:function(selector){return this.pushStack(jQuery.isFunction(selector)&&jQuery.grep(this,function(elem,i){return selector.call(elem,i);
-})||jQuery.multiFilter(selector,this));
-},not:function(selector){if(selector.constructor==String){if(isSimple.test(selector)){return this.pushStack(jQuery.multiFilter(selector,this,true));
-}else{selector=jQuery.multiFilter(selector,this);
-}}var isArrayLike=selector.length&&selector[selector.length-1]!==undefined&&!selector.nodeType;
-return this.filter(function(){return isArrayLike?jQuery.inArray(this,selector)<0:this!=selector;
-});
-},add:function(selector){return this.pushStack(jQuery.unique(jQuery.merge(this.get(),typeof selector=="string"?jQuery(selector):jQuery.makeArray(selector))));
-},is:function(selector){return !!selector&&jQuery.multiFilter(selector,this).length>0;
-},hasClass:function(selector){return this.is("."+selector);
-},val:function(value){if(value==undefined){if(this.length){var elem=this[0];
-if(jQuery.nodeName(elem,"select")){var index=elem.selectedIndex,values=[],options=elem.options,one=elem.type=="select-one";
-if(index<0){return null;
-}for(var i=one?index:0,max=one?index+1:options.length;
-i<max;
-i++){var option=options[i];
-if(option.selected){value=jQuery.browser.msie&&!option.attributes.value.specified?option.text:option.value;
-if(one){return value;
-}values.push(value);
-}}return values;
-}else{return(this[0].value||"").replace(/\r/g,"");
-}}return undefined;
-}if(value.constructor==Number){value+="";
-}return this.each(function(){if(this.nodeType!=1){return ;
-}if(value.constructor==Array&&/radio|checkbox/.test(this.type)){this.checked=(jQuery.inArray(this.value,value)>=0||jQuery.inArray(this.name,value)>=0);
-}else{if(jQuery.nodeName(this,"select")){var values=jQuery.makeArray(value);
-jQuery("option",this).each(function(){this.selected=(jQuery.inArray(this.value,values)>=0||jQuery.inArray(this.text,values)>=0);
-});
-if(!values.length){this.selectedIndex=-1;
-}}else{this.value=value;
-}}});
-},html:function(value){return value==undefined?(this[0]?this[0].innerHTML:null):this.empty().append(value);
-},replaceWith:function(value){return this.after(value).remove();
-},eq:function(i){return this.slice(i,i+1);
-},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments));
-},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem);
-}));
-},andSelf:function(){return this.add(this.prevObject);
-},data:function(key,value){var parts=key.split(".");
-parts[1]=parts[1]?"."+parts[1]:"";
-if(value===undefined){var data=this.triggerHandler("getData"+parts[1]+"!",[parts[0]]);
-if(data===undefined&&this.length){data=jQuery.data(this[0],key);
-}return data===undefined&&parts[1]?this.data(parts[0]):data;
-}else{return this.trigger("setData"+parts[1]+"!",[parts[0],value]).each(function(){jQuery.data(this,key,value);
-});
-}},removeData:function(key){return this.each(function(){jQuery.removeData(this,key);
-});
-},domManip:function(args,table,reverse,callback){var clone=this.length>1,elems;
-return this.each(function(){if(!elems){elems=jQuery.clean(args,this.ownerDocument);
-if(reverse){elems.reverse();
-}}var obj=this;
-if(table&&jQuery.nodeName(this,"table")&&jQuery.nodeName(elems[0],"tr")){obj=this.getElementsByTagName("tbody")[0]||this.appendChild(this.ownerDocument.createElement("tbody"));
-}var scripts=jQuery([]);
-jQuery.each(elems,function(){var elem=clone?jQuery(this).clone(true)[0]:this;
-if(jQuery.nodeName(elem,"script")){scripts=scripts.add(elem);
-}else{if(elem.nodeType==1){scripts=scripts.add(jQuery("script",elem).remove());
-}callback.call(obj,elem);
-}});
-scripts.each(evalScript);
-});
-}};
-jQuery.fn.init.prototype=jQuery.fn;
-function evalScript(i,elem){if(elem.src){jQuery.ajax({url:elem.src,async:false,dataType:"script"});
-}else{jQuery.globalEval(elem.text||elem.textContent||elem.innerHTML||"");
-}if(elem.parentNode){elem.parentNode.removeChild(elem);
-}}function now(){return +new Date;
-}jQuery.extend=jQuery.fn.extend=function(){var target=arguments[0]||{},i=1,length=arguments.length,deep=false,options;
-if(target.constructor==Boolean){deep=target;
-target=arguments[1]||{};
-i=2;
-}if(typeof target!="object"&&typeof target!="function"){target={};
-}if(length==i){target=this;
---i;
-}for(;
-i<length;
-i++){if((options=arguments[i])!=null){for(var name in options){var src=target[name],copy=options[name];
-if(target===copy){continue;
-}if(deep&&copy&&typeof copy=="object"&&!copy.nodeType){target[name]=jQuery.extend(deep,src||(copy.length!=null?[]:{}),copy);
-}else{if(copy!==undefined){target[name]=copy;
-}}}}}return target;
-};
-var expando="jQuery"+now(),uuid=0,windowData={},exclude=/z-?index|font-?weight|opacity|zoom|line-?height/i,defaultView=document.defaultView||{};
-jQuery.extend({noConflict:function(deep){window.$=_$;
-if(deep){window.jQuery=_jQuery;
-}return jQuery;
-},isFunction:function(fn){return !!fn&&typeof fn!="string"&&!fn.nodeName&&fn.constructor!=Array&&/^[\s[]?function/.test(fn+"");
-},isXMLDoc:function(elem){return elem.documentElement&&!elem.body||elem.tagName&&elem.ownerDocument&&!elem.ownerDocument.body;
-},globalEval:function(data){data=jQuery.trim(data);
-if(data){var head=document.getElementsByTagName("head")[0]||document.documentElement,script=document.createElement("script");
-script.type="text/javascript";
-if(jQuery.browser.msie){script.text=data;
-}else{script.appendChild(document.createTextNode(data));
-}head.insertBefore(script,head.firstChild);
-head.removeChild(script);
-}},nodeName:function(elem,name){return elem.nodeName&&elem.nodeName.toUpperCase()==name.toUpperCase();
-},cache:{},data:function(elem,name,data){elem=elem==window?windowData:elem;
-var id=elem[expando];
-if(!id){id=elem[expando]=++uuid;
-}if(name&&!jQuery.cache[id]){jQuery.cache[id]={};
-}if(data!==undefined){jQuery.cache[id][name]=data;
-}return name?jQuery.cache[id][name]:id;
-},removeData:function(elem,name){elem=elem==window?windowData:elem;
-var id=elem[expando];
-if(name){if(jQuery.cache[id]){delete jQuery.cache[id][name];
-name="";
-for(name in jQuery.cache[id]){break;
-}if(!name){jQuery.removeData(elem);
-}}}else{try{delete elem[expando];
-}catch(e){if(elem.removeAttribute){elem.removeAttribute(expando);
-}}delete jQuery.cache[id];
-}},each:function(object,callback,args){var name,i=0,length=object.length;
-if(args){if(length==undefined){for(name in object){if(callback.apply(object[name],args)===false){break;
-}}}else{for(;
-i<length;
-){if(callback.apply(object[i++],args)===false){break;
-}}}}else{if(length==undefined){for(name in object){if(callback.call(object[name],name,object[name])===false){break;
-}}}else{for(var value=object[0];
-i<length&&callback.call(value,i,value)!==false;
-value=object[++i]){}}}return object;
-},prop:function(elem,value,type,i,name){if(jQuery.isFunction(value)){value=value.call(elem,i);
-}return value&&value.constructor==Number&&type=="curCSS"&&!exclude.test(name)?value+"px":value;
-},className:{add:function(elem,classNames){jQuery.each((classNames||"").split(/\s+/),function(i,className){if(elem.nodeType==1&&!jQuery.className.has(elem.className,className)){elem.className+=(elem.className?" ":"")+className;
-}});
-},remove:function(elem,classNames){if(elem.nodeType==1){elem.className=classNames!=undefined?jQuery.grep(elem.className.split(/\s+/),function(className){return !jQuery.className.has(classNames,className);
-}).join(" "):"";
-}},has:function(elem,className){return jQuery.inArray(className,(elem.className||elem).toString().split(/\s+/))>-1;
-}},swap:function(elem,options,callback){var old={};
-for(var name in options){old[name]=elem.style[name];
-elem.style[name]=options[name];
-}callback.call(elem);
-for(var name in options){elem.style[name]=old[name];
-}},css:function(elem,name,force){if(name=="width"||name=="height"){var val,props={position:"absolute",visibility:"hidden",display:"block"},which=name=="width"?["Left","Right"]:["Top","Bottom"];
-function getWH(){val=name=="width"?elem.offsetWidth:elem.offsetHeight;
-var padding=0,border=0;
-jQuery.each(which,function(){padding+=parseFloat(jQuery.curCSS(elem,"padding"+this,true))||0;
-border+=parseFloat(jQuery.curCSS(elem,"border"+this+"Width",true))||0;
-});
-val-=Math.round(padding+border);
-}if(jQuery(elem).is(":visible")){getWH();
-}else{jQuery.swap(elem,props,getWH);
-}return Math.max(0,val);
-}return jQuery.curCSS(elem,name,force);
-},curCSS:function(elem,name,force){var ret,style=elem.style;
-function color(elem){if(!jQuery.browser.safari){return false;
-}var ret=defaultView.getComputedStyle(elem,null);
-return !ret||ret.getPropertyValue("color")=="";
-}if(name=="opacity"&&jQuery.browser.msie){ret=jQuery.attr(style,"opacity");
-return ret==""?"1":ret;
-}if(jQuery.browser.opera&&name=="display"){var save=style.outline;
-style.outline="0 solid black";
-style.outline=save;
-}if(name.match(/float/i)){name=styleFloat;
-}if(!force&&style&&style[name]){ret=style[name];
-}else{if(defaultView.getComputedStyle){if(name.match(/float/i)){name="float";
-}name=name.replace(/([A-Z])/g,"-$1").toLowerCase();
-var computedStyle=defaultView.getComputedStyle(elem,null);
-if(computedStyle&&!color(elem)){ret=computedStyle.getPropertyValue(name);
-}else{var swap=[],stack=[],a=elem,i=0;
-for(;
-a&&color(a);
-a=a.parentNode){stack.unshift(a);
-}for(;
-i<stack.length;
-i++){if(color(stack[i])){swap[i]=stack[i].style.display;
-stack[i].style.display="block";
-}}ret=name=="display"&&swap[stack.length-1]!=null?"none":(computedStyle&&computedStyle.getPropertyValue(name))||"";
-for(i=0;
-i<swap.length;
-i++){if(swap[i]!=null){stack[i].style.display=swap[i];
-}}}if(name=="opacity"&&ret==""){ret="1";
-}}else{if(elem.currentStyle){var camelCase=name.replace(/\-(\w)/g,function(all,letter){return letter.toUpperCase();
-});
-ret=elem.currentStyle[name]||elem.currentStyle[camelCase];
-if(!/^\d+(px)?$/i.test(ret)&&/^\d/.test(ret)){var left=style.left,rsLeft=elem.runtimeStyle.left;
-elem.runtimeStyle.left=elem.currentStyle.left;
-style.left=ret||0;
-ret=style.pixelLeft+"px";
-style.left=left;
-elem.runtimeStyle.left=rsLeft;
-}}}}return ret;
-},clean:function(elems,context){var ret=[];
-context=context||document;
-if(typeof context.createElement=="undefined"){context=context.ownerDocument||context[0]&&context[0].ownerDocument||document;
-}jQuery.each(elems,function(i,elem){if(!elem){return ;
-}if(elem.constructor==Number){elem+="";
-}if(typeof elem=="string"){elem=elem.replace(/(<(\w+)[^>]*?)\/>/g,function(all,front,tag){return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?all:front+"></"+tag+">";
-});
-var tags=jQuery.trim(elem).toLowerCase(),div=context.createElement("div");
-var wrap=!tags.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!tags.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||tags.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!tags.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!tags.indexOf("<td")||!tags.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!tags.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||jQuery.browser.msie&&[1,"div<div>","</div>"]||[0,"",""];
-div.innerHTML=wrap[1]+elem+wrap[2];
-while(wrap[0]--){div=div.lastChild;
-}if(jQuery.browser.msie){var tbody=!tags.indexOf("<table")&&tags.indexOf("<tbody")<0?div.firstChild&&div.firstChild.childNodes:wrap[1]=="<table>"&&tags.indexOf("<tbody")<0?div.childNodes:[];
-for(var j=tbody.length-1;
-j>=0;
---j){if(jQuery.nodeName(tbody[j],"tbody")&&!tbody[j].childNodes.length){tbody[j].parentNode.removeChild(tbody[j]);
-}}if(/^\s/.test(elem)){div.insertBefore(context.createTextNode(elem.match(/^\s*/)[0]),div.firstChild);
-}}elem=jQuery.makeArray(div.childNodes);
-}if(elem.length===0&&(!jQuery.nodeName(elem,"form")&&!jQuery.nodeName(elem,"select"))){return ;
-}if(elem[0]==undefined||jQuery.nodeName(elem,"form")||elem.options){ret.push(elem);
-}else{ret=jQuery.merge(ret,elem);
-}});
-return ret;
-},attr:function(elem,name,value){if(!elem||elem.nodeType==3||elem.nodeType==8){return undefined;
-}var notxml=!jQuery.isXMLDoc(elem),set=value!==undefined,msie=jQuery.browser.msie;
-name=notxml&&jQuery.props[name]||name;
-if(elem.tagName){var special=/href|src|style/.test(name);
-if(name=="selected"&&jQuery.browser.safari){elem.parentNode.selectedIndex;
-}if(name in elem&&notxml&&!special){if(set){if(name=="type"&&jQuery.nodeName(elem,"input")&&elem.parentNode){throw"type property can't be changed";
-}elem[name]=value;
-}if(jQuery.nodeName(elem,"form")&&elem.getAttributeNode(name)){return elem.getAttributeNode(name).nodeValue;
-}return elem[name];
-}if(msie&&notxml&&name=="style"){return jQuery.attr(elem.style,"cssText",value);
-}if(set){elem.setAttribute(name,""+value);
-}var attr=msie&&notxml&&special?elem.getAttribute(name,2):elem.getAttribute(name);
-return attr===null?undefined:attr;
-}if(msie&&name=="opacity"){if(set){elem.zoom=1;
-elem.filter=(elem.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(value)+""=="NaN"?"":"alpha(opacity="+value*100+")");
-}return elem.filter&&elem.filter.indexOf("opacity=")>=0?(parseFloat(elem.filter.match(/opacity=([^)]*)/)[1])/100)+"":"";
-}name=name.replace(/-([a-z])/ig,function(all,letter){return letter.toUpperCase();
-});
-if(set){elem[name]=value;
-}return elem[name];
-},trim:function(text){return(text||"").replace(/^\s+|\s+$/g,"");
-},makeArray:function(array){var ret=[];
-if(array!=null){var i=array.length;
-if(i==null||array.split||array.setInterval||array.call){ret[0]=array;
-}else{while(i){ret[--i]=array[i];
-}}}return ret;
-},inArray:function(elem,array){for(var i=0,length=array.length;
-i<length;
-i++){if(array[i]===elem){return i;
-}}return -1;
-},merge:function(first,second){var i=0,elem,pos=first.length;
-if(jQuery.browser.msie){while(elem=second[i++]){if(elem.nodeType!=8){first[pos++]=elem;
-}}}else{while(elem=second[i++]){first[pos++]=elem;
-}}return first;
-},unique:function(array){var ret=[],done={};
-try{for(var i=0,length=array.length;
-i<length;
-i++){var id=jQuery.data(array[i]);
-if(!done[id]){done[id]=true;
-ret.push(array[i]);
-}}}catch(e){ret=array;
-}return ret;
-},grep:function(elems,callback,inv){var ret=[];
-for(var i=0,length=elems.length;
-i<length;
-i++){if(!inv!=!callback(elems[i],i)){ret.push(elems[i]);
-}}return ret;
-},map:function(elems,callback){var ret=[];
-for(var i=0,length=elems.length;
-i<length;
-i++){var value=callback(elems[i],i);
-if(value!=null){ret[ret.length]=value;
-}}return ret.concat.apply([],ret);
-}});
-var userAgent=navigator.userAgent.toLowerCase();
-jQuery.browser={version:(userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[])[1],safari:/webkit/.test(userAgent),opera:/opera/.test(userAgent),msie:/msie/.test(userAgent)&&!/opera/.test(userAgent),mozilla:/mozilla/.test(userAgent)&&!/(compatible|webkit)/.test(userAgent)};
-var styleFloat=jQuery.browser.msie?"styleFloat":"cssFloat";
-jQuery.extend({boxModel:!jQuery.browser.msie||document.compatMode=="CSS1Compat",props:{"for":"htmlFor","class":"className","float":styleFloat,cssFloat:styleFloat,styleFloat:styleFloat,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing"}});
-jQuery.each({parent:function(elem){return elem.parentNode;
-},parents:function(elem){return jQuery.dir(elem,"parentNode");
-},next:function(elem){return jQuery.nth(elem,2,"nextSibling");
-},prev:function(elem){return jQuery.nth(elem,2,"previousSibling");
-},nextAll:function(elem){return jQuery.dir(elem,"nextSibling");
-},prevAll:function(elem){return jQuery.dir(elem,"previousSibling");
-},siblings:function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);
-},children:function(elem){return jQuery.sibling(elem.firstChild);
-},contents:function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);
-}},function(name,fn){jQuery.fn[name]=function(selector){var ret=jQuery.map(this,fn);
-if(selector&&typeof selector=="string"){ret=jQuery.multiFilter(selector,ret);
-}return this.pushStack(jQuery.unique(ret));
-};
-});
-jQuery.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(name,original){jQuery.fn[name]=function(){var args=arguments;
-return this.each(function(){for(var i=0,length=args.length;
-i<length;
-i++){jQuery(args[i])[original](this);
-}});
-};
-});
-jQuery.each({removeAttr:function(name){jQuery.attr(this,name,"");
-if(this.nodeType==1){this.removeAttribute(name);
-}},addClass:function(classNames){jQuery.className.add(this,classNames);
-},removeClass:function(classNames){jQuery.className.remove(this,classNames);
-},toggleClass:function(classNames){jQuery.className[jQuery.className.has(this,classNames)?"remove":"add"](this,classNames);
-},remove:function(selector){if(!selector||jQuery.filter(selector,[this]).r.length){jQuery("*",this).add(this).each(function(){jQuery.event.remove(this);
-jQuery.removeData(this);
-});
-if(this.parentNode){this.parentNode.removeChild(this);
-}}},empty:function(){jQuery(">*",this).remove();
-while(this.firstChild){this.removeChild(this.firstChild);
-}}},function(name,fn){jQuery.fn[name]=function(){return this.each(fn,arguments);
-};
-});
-jQuery.each(["Height","Width"],function(i,name){var type=name.toLowerCase();
-jQuery.fn[type]=function(size){return this[0]==window?jQuery.browser.opera&&document.body["client"+name]||jQuery.browser.safari&&window["inner"+name]||document.compatMode=="CSS1Compat"&&document.documentElement["client"+name]||document.body["client"+name]:this[0]==document?Math.max(Math.max(document.body["scroll"+name],document.documentElement["scroll"+name]),Math.max(document.body["offset"+name],document.documentElement["offset"+name])):size==undefined?(this.length?jQuery.css(this[0],type):null):this.css(type,size.constructor==String?size:size+"px");
-};
-});
-function num(elem,prop){return elem[0]&&parseInt(jQuery.curCSS(elem[0],prop,true),10)||0;
-}var chars=jQuery.browser.safari&&parseInt(jQuery.browser.version)<417?"(?:[\\w*_-]|\\\\.)":"(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",quickChild=new RegExp("^>\\s*("+chars+"+)"),quickID=new RegExp("^("+chars+"+)(#)("+chars+"+)"),quickClass=new RegExp("^([#.]?)("+chars+"*)");
-jQuery.extend({expr:{"":function(a,i,m){return m[2]=="*"||jQuery.nodeName(a,m[2]);
-},"#":function(a,i,m){return a.getAttribute("id")==m[2];
-},":":{lt:function(a,i,m){return i<m[3]-0;
-},gt:function(a,i,m){return i>m[3]-0;
-},nth:function(a,i,m){return m[3]-0==i;
-},eq:function(a,i,m){return m[3]-0==i;
-},first:function(a,i){return i==0;
-},last:function(a,i,m,r){return i==r.length-1;
-},even:function(a,i){return i%2==0;
-},odd:function(a,i){return i%2;
-},"first-child":function(a){return a.parentNode.getElementsByTagName("*")[0]==a;
-},"last-child":function(a){return jQuery.nth(a.parentNode.lastChild,1,"previousSibling")==a;
-},"only-child":function(a){return !jQuery.nth(a.parentNode.lastChild,2,"previousSibling");
-},parent:function(a){return a.firstChild;
-},empty:function(a){return !a.firstChild;
-},contains:function(a,i,m){return(a.textContent||a.innerText||jQuery(a).text()||"").indexOf(m[3])>=0;
-},visible:function(a){return"hidden"!=a.type&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden";
-},hidden:function(a){return"hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden";
-},enabled:function(a){return !a.disabled;
-},disabled:function(a){return a.disabled;
-},checked:function(a){return a.checked;
-},selected:function(a){return a.selected||jQuery.attr(a,"selected");
-},text:function(a){return"text"==a.type;
-},radio:function(a){return"radio"==a.type;
-},checkbox:function(a){return"checkbox"==a.type;
-},file:function(a){return"file"==a.type;
-},password:function(a){return"password"==a.type;
-},submit:function(a){return"submit"==a.type;
-},image:function(a){return"image"==a.type;
-},reset:function(a){return"reset"==a.type;
-},button:function(a){return"button"==a.type||jQuery.nodeName(a,"button");
-},input:function(a){return/input|select|textarea|button/i.test(a.nodeName);
-},has:function(a,i,m){return jQuery.find(m[3],a).length;
-},header:function(a){return/h\d/i.test(a.nodeName);
-},animated:function(a){return jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;
-}).length;
-}}},parse:[/^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,/^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,new RegExp("^([:.#]*)("+chars+"+)")],multiFilter:function(expr,elems,not){var old,cur=[];
-while(expr&&expr!=old){old=expr;
-var f=jQuery.filter(expr,elems,not);
-expr=f.t.replace(/^\s*,\s*/,"");
-cur=not?elems=f.r:jQuery.merge(cur,f.r);
-}return cur;
-},find:function(t,context){if(typeof t!="string"){return[t];
-}if(context&&context.nodeType!=1&&context.nodeType!=9){return[];
-}context=context||document;
-var ret=[context],done=[],last,nodeName;
-while(t&&last!=t){var r=[];
-last=t;
-t=jQuery.trim(t);
-var foundToken=false,re=quickChild,m=re.exec(t);
-if(m){nodeName=m[1].toUpperCase();
-for(var i=0;
-ret[i];
-i++){for(var c=ret[i].firstChild;
-c;
-c=c.nextSibling){if(c.nodeType==1&&(nodeName=="*"||c.nodeName.toUpperCase()==nodeName)){r.push(c);
-}}}ret=r;
-t=t.replace(re,"");
-if(t.indexOf(" ")==0){continue;
-}foundToken=true;
-}else{re=/^([>+~])\s*(\w*)/i;
-if((m=re.exec(t))!=null){r=[];
-var merge={};
-nodeName=m[2].toUpperCase();
-m=m[1];
-for(var j=0,rl=ret.length;
-j<rl;
-j++){var n=m=="~"||m=="+"?ret[j].nextSibling:ret[j].firstChild;
-for(;
-n;
-n=n.nextSibling){if(n.nodeType==1){var id=jQuery.data(n);
-if(m=="~"&&merge[id]){break;
-}if(!nodeName||n.nodeName.toUpperCase()==nodeName){if(m=="~"){merge[id]=true;
-}r.push(n);
-}if(m=="+"){break;
-}}}}ret=r;
-t=jQuery.trim(t.replace(re,""));
-foundToken=true;
-}}if(t&&!foundToken){if(!t.indexOf(",")){if(context==ret[0]){ret.shift();
-}done=jQuery.merge(done,ret);
-r=ret=[context];
-t=" "+t.substr(1,t.length);
-}else{var re2=quickID;
-var m=re2.exec(t);
-if(m){m=[0,m[2],m[3],m[1]];
-}else{re2=quickClass;
-m=re2.exec(t);
-}m[2]=m[2].replace(/\\/g,"");
-var elem=ret[ret.length-1];
-if(m[1]=="#"&&elem&&elem.getElementById&&!jQuery.isXMLDoc(elem)){var oid=elem.getElementById(m[2]);
-if((jQuery.browser.msie||jQuery.browser.opera)&&oid&&typeof oid.id=="string"&&oid.id!=m[2]){oid=jQuery('[@id="'+m[2]+'"]',elem)[0];
-}ret=r=oid&&(!m[3]||jQuery.nodeName(oid,m[3]))?[oid]:[];
-}else{for(var i=0;
-ret[i];
-i++){var tag=m[1]=="#"&&m[3]?m[3]:m[1]!=""||m[0]==""?"*":m[2];
-if(tag=="*"&&ret[i].nodeName.toLowerCase()=="object"){tag="param";
-}r=jQuery.merge(r,ret[i].getElementsByTagName(tag));
-}if(m[1]=="."){r=jQuery.classFilter(r,m[2]);
-}if(m[1]=="#"){var tmp=[];
-for(var i=0;
-r[i];
-i++){if(r[i].getAttribute("id")==m[2]){tmp=[r[i]];
-break;
-}}r=tmp;
-}ret=r;
-}t=t.replace(re2,"");
-}}if(t){var val=jQuery.filter(t,r);
-ret=r=val.r;
-t=jQuery.trim(val.t);
-}}if(t){ret=[];
-}if(ret&&context==ret[0]){ret.shift();
-}done=jQuery.merge(done,ret);
-return done;
-},classFilter:function(r,m,not){m=" "+m+" ";
-var tmp=[];
-for(var i=0;
-r[i];
-i++){var pass=(" "+r[i].className+" ").indexOf(m)>=0;
-if(!not&&pass||not&&!pass){tmp.push(r[i]);
-}}return tmp;
-},filter:function(t,r,not){var last;
-while(t&&t!=last){last=t;
-var p=jQuery.parse,m;
-for(var i=0;
-p[i];
-i++){m=p[i].exec(t);
-if(m){t=t.substring(m[0].length);
-m[2]=m[2].replace(/\\/g,"");
-break;
-}}if(!m){break;
-}if(m[1]==":"&&m[2]=="not"){r=isSimple.test(m[3])?jQuery.filter(m[3],r,true).r:jQuery(r).not(m[3]);
-}else{if(m[1]=="."){r=jQuery.classFilter(r,m[2],not);
-}else{if(m[1]=="["){var tmp=[],type=m[3];
-for(var i=0,rl=r.length;
-i<rl;
-i++){var a=r[i],z=a[jQuery.props[m[2]]||m[2]];
-if(z==null||/href|src|selected/.test(m[2])){z=jQuery.attr(a,m[2])||"";
-}if((type==""&&!!z||type=="="&&z==m[5]||type=="!="&&z!=m[5]||type=="^="&&z&&!z.indexOf(m[5])||type=="$="&&z.substr(z.length-m[5].length)==m[5]||(type=="*="||type=="~=")&&z.indexOf(m[5])>=0)^not){tmp.push(a);
-}}r=tmp;
-}else{if(m[1]==":"&&m[2]=="nth-child"){var merge={},tmp=[],test=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(m[3]=="even"&&"2n"||m[3]=="odd"&&"2n+1"||!/\D/.test(m[3])&&"0n+"+m[3]||m[3]),first=(test[1]+(test[2]||1))-0,last=test[3]-0;
-for(var i=0,rl=r.length;
-i<rl;
-i++){var node=r[i],parentNode=node.parentNode,id=jQuery.data(parentNode);
-if(!merge[id]){var c=1;
-for(var n=parentNode.firstChild;
-n;
-n=n.nextSibling){if(n.nodeType==1){n.nodeIndex=c++;
-}}merge[id]=true;
-}var add=false;
-if(first==0){if(node.nodeIndex==last){add=true;
-}}else{if((node.nodeIndex-last)%first==0&&(node.nodeIndex-last)/first>=0){add=true;
-}}if(add^not){tmp.push(node);
-}}r=tmp;
-}else{var fn=jQuery.expr[m[1]];
-if(typeof fn=="object"){fn=fn[m[2]];
-}if(typeof fn=="string"){fn=eval("false||function(a,i){return "+fn+";}");
-}r=jQuery.grep(r,function(elem,i){return fn(elem,i,m,r);
-},not);
-}}}}}return{r:r,t:t};
-},dir:function(elem,dir){var matched=[],cur=elem[dir];
-while(cur&&cur!=document){if(cur.nodeType==1){matched.push(cur);
-}cur=cur[dir];
-}return matched;
-},nth:function(cur,result,dir,elem){result=result||1;
-var num=0;
-for(;
-cur;
-cur=cur[dir]){if(cur.nodeType==1&&++num==result){break;
-}}return cur;
-},sibling:function(n,elem){var r=[];
-for(;
-n;
-n=n.nextSibling){if(n.nodeType==1&&n!=elem){r.push(n);
-}}return r;
-}});
-jQuery.event={add:function(elem,types,handler,data){if(elem.nodeType==3||elem.nodeType==8){return ;
-}if(jQuery.browser.msie&&elem.setInterval){elem=window;
-}if(!handler.guid){handler.guid=this.guid++;
-}if(data!=undefined){var fn=handler;
-handler=this.proxy(fn,function(){return fn.apply(this,arguments);
-});
-handler.data=data;
-}var events=jQuery.data(elem,"events")||jQuery.data(elem,"events",{}),handle=jQuery.data(elem,"handle")||jQuery.data(elem,"handle",function(){if(typeof jQuery!="undefined"&&!jQuery.event.triggered){return jQuery.event.handle.apply(arguments.callee.elem,arguments);
-}});
-handle.elem=elem;
-jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");
-type=parts[0];
-handler.type=parts[1];
-var handlers=events[type];
-if(!handlers){handlers=events[type]={};
-if(!jQuery.event.special[type]||jQuery.event.special[type].setup.call(elem)===false){if(elem.addEventListener){elem.addEventListener(type,handle,false);
-}else{if(elem.attachEvent){elem.attachEvent("on"+type,handle);
-}}}}handlers[handler.guid]=handler;
-jQuery.event.global[type]=true;
-});
-elem=null;
-},guid:1,global:{},remove:function(elem,types,handler){if(elem.nodeType==3||elem.nodeType==8){return ;
-}var events=jQuery.data(elem,"events"),ret,index;
-if(events){if(types==undefined||(typeof types=="string"&&types.charAt(0)==".")){for(var type in events){this.remove(elem,type+(types||""));
-}}else{if(types.type){handler=types.handler;
-types=types.type;
-}jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");
-type=parts[0];
-if(events[type]){if(handler){delete events[type][handler.guid];
-}else{for(handler in events[type]){if(!parts[1]||events[type][handler].type==parts[1]){delete events[type][handler];
-}}}for(ret in events[type]){break;
-}if(!ret){if(!jQuery.event.special[type]||jQuery.event.special[type].teardown.call(elem)===false){if(elem.removeEventListener){elem.removeEventListener(type,jQuery.data(elem,"handle"),false);
-}else{if(elem.detachEvent){elem.detachEvent("on"+type,jQuery.data(elem,"handle"));
-}}}ret=null;
-delete events[type];
-}}});
-}for(ret in events){break;
-}if(!ret){var handle=jQuery.data(elem,"handle");
-if(handle){handle.elem=null;
-}jQuery.removeData(elem,"events");
-jQuery.removeData(elem,"handle");
-}}},trigger:function(type,data,elem,donative,extra){data=jQuery.makeArray(data);
-if(type.indexOf("!")>=0){type=type.slice(0,-1);
-var exclusive=true;
-}if(!elem){if(this.global[type]){jQuery("*").add([window,document]).trigger(type,data);
-}}else{if(elem.nodeType==3||elem.nodeType==8){return undefined;
-}var val,ret,fn=jQuery.isFunction(elem[type]||null),event=!data[0]||!data[0].preventDefault;
-if(event){data.unshift({type:type,target:elem,preventDefault:function(){},stopPropagation:function(){},timeStamp:now()});
-data[0][expando]=true;
-}data[0].type=type;
-if(exclusive){data[0].exclusive=true;
-}var handle=jQuery.data(elem,"handle");
-if(handle){val=handle.apply(elem,data);
-}if((!fn||(jQuery.nodeName(elem,"a")&&type=="click"))&&elem["on"+type]&&elem["on"+type].apply(elem,data)===false){val=false;
-}if(event){data.shift();
-}if(extra&&jQuery.isFunction(extra)){ret=extra.apply(elem,val==null?data:data.concat(val));
-if(ret!==undefined){val=ret;
-}}if(fn&&donative!==false&&val!==false&&!(jQuery.nodeName(elem,"a")&&type=="click")){this.triggered=true;
-try{elem[type]();
-}catch(e){}}this.triggered=false;
-}return val;
-},handle:function(event){var val,ret,namespace,all,handlers;
-event=arguments[0]=jQuery.event.fix(event||window.event);
-namespace=event.type.split(".");
-event.type=namespace[0];
-namespace=namespace[1];
-all=!namespace&&!event.exclusive;
-handlers=(jQuery.data(this,"events")||{})[event.type];
-for(var j in handlers){var handler=handlers[j];
-if(all||handler.type==namespace){event.handler=handler;
-event.data=handler.data;
-ret=handler.apply(this,arguments);
-if(val!==false){val=ret;
-}if(ret===false){event.preventDefault();
-event.stopPropagation();
-}}}return val;
-},fix:function(event){if(event[expando]==true){return event;
-}var originalEvent=event;
-event={originalEvent:originalEvent};
-var props="altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target timeStamp toElement type view wheelDelta which".split(" ");
-for(var i=props.length;
-i;
-i--){event[props[i]]=originalEvent[props[i]];
-}event[expando]=true;
-event.preventDefault=function(){if(originalEvent.preventDefault){originalEvent.preventDefault();
-}originalEvent.returnValue=false;
-};
-event.stopPropagation=function(){if(originalEvent.stopPropagation){originalEvent.stopPropagation();
-}originalEvent.cancelBubble=true;
-};
-event.timeStamp=event.timeStamp||now();
-if(!event.target){event.target=event.srcElement||document;
-}if(event.target.nodeType==3){event.target=event.target.parentNode;
-}if(!event.relatedTarget&&event.fromElement){event.relatedTarget=event.fromElement==event.target?event.toElement:event.fromElement;
-}if(event.pageX==null&&event.clientX!=null){var doc=document.documentElement,body=document.body;
-event.pageX=event.clientX+(doc&&doc.scrollLeft||body&&body.scrollLeft||0)-(doc.clientLeft||0);
-event.pageY=event.clientY+(doc&&doc.scrollTop||body&&body.scrollTop||0)-(doc.clientTop||0);
-}if(!event.which&&((event.charCode||event.charCode===0)?event.charCode:event.keyCode)){event.which=event.charCode||event.keyCode;
-}if(!event.metaKey&&event.ctrlKey){event.metaKey=event.ctrlKey;
-}if(!event.which&&event.button){event.which=(event.button&1?1:(event.button&2?3:(event.button&4?2:0)));
-}return event;
-},proxy:function(fn,proxy){proxy.guid=fn.guid=fn.guid||proxy.guid||this.guid++;
-return proxy;
-},special:{ready:{setup:function(){bindReady();
-return ;
-},teardown:function(){return ;
-}},mouseenter:{setup:function(){if(jQuery.browser.msie){return false;
-}jQuery(this).bind("mouseover",jQuery.event.special.mouseenter.handler);
-return true;
-},teardown:function(){if(jQuery.browser.msie){return false;
-}jQuery(this).unbind("mouseover",jQuery.event.special.mouseenter.handler);
-return true;
-},handler:function(event){if(withinElement(event,this)){return true;
-}event.type="mouseenter";
-return jQuery.event.handle.apply(this,arguments);
-}},mouseleave:{setup:function(){if(jQuery.browser.msie){return false;
-}jQuery(this).bind("mouseout",jQuery.event.special.mouseleave.handler);
-return true;
-},teardown:function(){if(jQuery.browser.msie){return false;
-}jQuery(this).unbind("mouseout",jQuery.event.special.mouseleave.handler);
-return true;
-},handler:function(event){if(withinElement(event,this)){return true;
-}event.type="mouseleave";
-return jQuery.event.handle.apply(this,arguments);
-}}}};
-jQuery.fn.extend({bind:function(type,data,fn){return type=="unload"?this.one(type,data,fn):this.each(function(){jQuery.event.add(this,type,fn||data,fn&&data);
-});
-},one:function(type,data,fn){var one=jQuery.event.proxy(fn||data,function(event){jQuery(this).unbind(event,one);
-return(fn||data).apply(this,arguments);
-});
-return this.each(function(){jQuery.event.add(this,type,one,fn&&data);
-});
-},unbind:function(type,fn){return this.each(function(){jQuery.event.remove(this,type,fn);
-});
-},trigger:function(type,data,fn){return this.each(function(){jQuery.event.trigger(type,data,this,true,fn);
-});
-},triggerHandler:function(type,data,fn){return this[0]&&jQuery.event.trigger(type,data,this[0],false,fn);
-},toggle:function(fn){var args=arguments,i=1;
-while(i<args.length){jQuery.event.proxy(fn,args[i++]);
-}return this.click(jQuery.event.proxy(fn,function(event){this.lastToggle=(this.lastToggle||0)%i;
-event.preventDefault();
-return args[this.lastToggle++].apply(this,arguments)||false;
-}));
-},hover:function(fnOver,fnOut){return this.bind("mouseenter",fnOver).bind("mouseleave",fnOut);
-},ready:function(fn){bindReady();
-if(jQuery.isReady){fn.call(document,jQuery);
-}else{jQuery.readyList.push(function(){return fn.call(this,jQuery);
-});
-}return this;
-}});
-jQuery.extend({isReady:false,readyList:[],ready:function(){if(!jQuery.isReady){jQuery.isReady=true;
-if(jQuery.readyList){jQuery.each(jQuery.readyList,function(){this.call(document);
-});
-jQuery.readyList=null;
-}jQuery(document).triggerHandler("ready");
-}}});
-var readyBound=false;
-function bindReady(){if(readyBound){return ;
-}readyBound=true;
-if(document.addEventListener&&!jQuery.browser.opera){document.addEventListener("DOMContentLoaded",jQuery.ready,false);
-}if(jQuery.browser.msie&&window==top){(function(){if(jQuery.isReady){return ;
-}try{document.documentElement.doScroll("left");
-}catch(error){setTimeout(arguments.callee,0);
-return ;
-}jQuery.ready();
-})();
-}if(jQuery.browser.opera){document.addEventListener("DOMContentLoaded",function(){if(jQuery.isReady){return ;
-}for(var i=0;
-i<document.styleSheets.length;
-i++){if(document.styleSheets[i].disabled){setTimeout(arguments.callee,0);
-return ;
-}}jQuery.ready();
-},false);
-}if(jQuery.browser.safari){var numStyles;
-(function(){if(jQuery.isReady){return ;
-}if(document.readyState!="loaded"&&document.readyState!="complete"){setTimeout(arguments.callee,0);
-return ;
-}if(numStyles===undefined){numStyles=jQuery("style, link[rel=stylesheet]").length;
-}if(document.styleSheets.length!=numStyles){setTimeout(arguments.callee,0);
-return ;
-}jQuery.ready();
-})();
-}jQuery.event.add(window,"load",jQuery.ready);
-}jQuery.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,change,select,submit,keydown,keypress,keyup,error").split(","),function(i,name){jQuery.fn[name]=function(fn){return fn?this.bind(name,fn):this.trigger(name);
-};
-});
-var withinElement=function(event,elem){var parent=event.relatedTarget;
-while(parent&&parent!=elem){try{parent=parent.parentNode;
-}catch(error){parent=elem;
-}}return parent==elem;
-};
-jQuery(window).bind("unload",function(){jQuery("*").add(document).unbind();
-});
-jQuery.fn.extend({_load:jQuery.fn.load,load:function(url,params,callback){if(typeof url!="string"){return this._load(url);
-}var off=url.indexOf(" ");
-if(off>=0){var selector=url.slice(off,url.length);
-url=url.slice(0,off);
-}callback=callback||function(){};
-var type="GET";
-if(params){if(jQuery.isFunction(params)){callback=params;
-params=null;
-}else{params=jQuery.param(params);
-type="POST";
-}}var self=this;
-jQuery.ajax({url:url,type:type,dataType:"html",data:params,complete:function(res,status){if(status=="success"||status=="notmodified"){self.html(selector?jQuery("<div/>").append(res.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(selector):res.responseText);
-}self.each(callback,[res.responseText,status,res]);
-}});
-return this;
-},serialize:function(){return jQuery.param(this.serializeArray());
-},serializeArray:function(){return this.map(function(){return jQuery.nodeName(this,"form")?jQuery.makeArray(this.elements):this;
-}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password/i.test(this.type));
-}).map(function(i,elem){var val=jQuery(this).val();
-return val==null?null:val.constructor==Array?jQuery.map(val,function(val,i){return{name:elem.name,value:val};
-}):{name:elem.name,value:val};
-}).get();
-}});
-jQuery.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(i,o){jQuery.fn[o]=function(f){return this.bind(o,f);
-};
-});
-var jsc=now();
-jQuery.extend({get:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;
-data=null;
-}return jQuery.ajax({type:"GET",url:url,data:data,success:callback,dataType:type});
-},getScript:function(url,callback){return jQuery.get(url,null,callback,"script");
-},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json");
-},post:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;
-data={};
-}return jQuery.ajax({type:"POST",url:url,data:data,success:callback,dataType:type});
-},ajaxSetup:function(settings){jQuery.extend(jQuery.ajaxSettings,settings);
-},ajaxSettings:{url:location.href,global:true,type:"GET",timeout:0,contentType:"application/x-www-form-urlencoded",processData:true,async:true,data:null,username:null,password:null,accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(s){s=jQuery.extend(true,s,jQuery.extend(true,{},jQuery.ajaxSettings,s));
-var jsonp,jsre=/=\?(&|$)/g,status,data,type=s.type.toUpperCase();
-if(s.data&&s.processData&&typeof s.data!="string"){s.data=jQuery.param(s.data);
-}if(s.dataType=="jsonp"){if(type=="GET"){if(!s.url.match(jsre)){s.url+=(s.url.match(/\?/)?"&":"?")+(s.jsonp||"callback")+"=?";
-}}else{if(!s.data||!s.data.match(jsre)){s.data=(s.data?s.data+"&":"")+(s.jsonp||"callback")+"=?";
-}}s.dataType="json";
-}if(s.dataType=="json"&&(s.data&&s.data.match(jsre)||s.url.match(jsre))){jsonp="jsonp"+jsc++;
-if(s.data){s.data=(s.data+"").replace(jsre,"="+jsonp+"$1");
-}s.url=s.url.replace(jsre,"="+jsonp+"$1");
-s.dataType="script";
-window[jsonp]=function(tmp){data=tmp;
-success();
-complete();
-window[jsonp]=undefined;
-try{delete window[jsonp];
-}catch(e){}if(head){head.removeChild(script);
-}};
-}if(s.dataType=="script"&&s.cache==null){s.cache=false;
-}if(s.cache===false&&type=="GET"){var ts=now();
-var ret=s.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+ts+"$2");
-s.url=ret+((ret==s.url)?(s.url.match(/\?/)?"&":"?")+"_="+ts:"");
-}if(s.data&&type=="GET"){s.url+=(s.url.match(/\?/)?"&":"?")+s.data;
-s.data=null;
-}if(s.global&&!jQuery.active++){jQuery.event.trigger("ajaxStart");
-}var remote=/^(?:\w+:)?\/\/([^\/?#]+)/;
-if(s.dataType=="script"&&type=="GET"&&remote.test(s.url)&&remote.exec(s.url)[1]!=location.host){var head=document.getElementsByTagName("head")[0];
-var script=document.createElement("script");
-script.src=s.url;
-if(s.scriptCharset){script.charset=s.scriptCharset;
-}if(!jsonp){var done=false;
-script.onload=script.onreadystatechange=function(){if(!done&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){done=true;
-success();
-complete();
-head.removeChild(script);
-}};
-}head.appendChild(script);
-return undefined;
-}var requestDone=false;
-var xhr=window.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest();
-if(s.username){xhr.open(type,s.url,s.async,s.username,s.password);
-}else{xhr.open(type,s.url,s.async);
-}try{if(s.data){xhr.setRequestHeader("Content-Type",s.contentType);
-}if(s.ifModified){xhr.setRequestHeader("If-Modified-Since",jQuery.lastModified[s.url]||"Thu, 01 Jan 1970 00:00:00 GMT");
-}xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");
-xhr.setRequestHeader("Accept",s.dataType&&s.accepts[s.dataType]?s.accepts[s.dataType]+", */*":s.accepts._default);
-}catch(e){}if(s.beforeSend&&s.beforeSend(xhr,s)===false){s.global&&jQuery.active--;
-xhr.abort();
-return false;
-}if(s.global){jQuery.event.trigger("ajaxSend",[xhr,s]);
-}var onreadystatechange=function(isTimeout){if(!requestDone&&xhr&&(xhr.readyState==4||isTimeout=="timeout")){requestDone=true;
-if(ival){clearInterval(ival);
-ival=null;
-}status=isTimeout=="timeout"&&"timeout"||!jQuery.httpSuccess(xhr)&&"error"||s.ifModified&&jQuery.httpNotModified(xhr,s.url)&&"notmodified"||"success";
-if(status=="success"){try{data=jQuery.httpData(xhr,s.dataType,s.dataFilter);
-}catch(e){status="parsererror";
-}}if(status=="success"){var modRes;
-try{modRes=xhr.getResponseHeader("Last-Modified");
-}catch(e){}if(s.ifModified&&modRes){jQuery.lastModified[s.url]=modRes;
-}if(!jsonp){success();
-}}else{jQuery.handleError(s,xhr,status);
-}complete();
-if(s.async){xhr=null;
-}}};
-if(s.async){var ival=setInterval(onreadystatechange,13);
-if(s.timeout>0){setTimeout(function(){if(xhr){xhr.abort();
-if(!requestDone){onreadystatechange("timeout");
-}}},s.timeout);
-}}try{xhr.send(s.data);
-}catch(e){jQuery.handleError(s,xhr,null,e);
-}if(!s.async){onreadystatechange();
-}function success(){if(s.success){s.success(data,status);
-}if(s.global){jQuery.event.trigger("ajaxSuccess",[xhr,s]);
-}}function complete(){if(s.complete){s.complete(xhr,status);
-}if(s.global){jQuery.event.trigger("ajaxComplete",[xhr,s]);
-}if(s.global&&!--jQuery.active){jQuery.event.trigger("ajaxStop");
-}}return xhr;
-},handleError:function(s,xhr,status,e){if(s.error){s.error(xhr,status,e);
-}if(s.global){jQuery.event.trigger("ajaxError",[xhr,s,e]);
-}},active:0,httpSuccess:function(xhr){try{return !xhr.status&&location.protocol=="file:"||(xhr.status>=200&&xhr.status<300)||xhr.status==304||xhr.status==1223||jQuery.browser.safari&&xhr.status==undefined;
-}catch(e){}return false;
-},httpNotModified:function(xhr,url){try{var xhrRes=xhr.getResponseHeader("Last-Modified");
-return xhr.status==304||xhrRes==jQuery.lastModified[url]||jQuery.browser.safari&&xhr.status==undefined;
-}catch(e){}return false;
-},httpData:function(xhr,type,filter){var ct=xhr.getResponseHeader("content-type"),xml=type=="xml"||!type&&ct&&ct.indexOf("xml")>=0,data=xml?xhr.responseXML:xhr.responseText;
-if(xml&&data.documentElement.tagName=="parsererror"){throw"parsererror";
-}if(filter){data=filter(data,type);
-}if(type=="script"){jQuery.globalEval(data);
-}if(type=="json"){data=eval("("+data+")");
-}return data;
-},param:function(a){var s=[];
-if(a.constructor==Array||a.jquery){jQuery.each(a,function(){s.push(encodeURIComponent(this.name)+"="+encodeURIComponent(this.value));
-});
-}else{for(var j in a){if(a[j]&&a[j].constructor==Array){jQuery.each(a[j],function(){s.push(encodeURIComponent(j)+"="+encodeURIComponent(this));
-});
-}else{s.push(encodeURIComponent(j)+"="+encodeURIComponent(jQuery.isFunction(a[j])?a[j]():a[j]));
-}}}return s.join("&").replace(/%20/g,"+");
-}});
-jQuery.fn.extend({show:function(speed,callback){return speed?this.animate({height:"show",width:"show",opacity:"show"},speed,callback):this.filter(":hidden").each(function(){this.style.display=this.oldblock||"";
-if(jQuery.css(this,"display")=="none"){var elem=jQuery("<"+this.tagName+" />").appendTo("body");
-this.style.display=elem.css("display");
-if(this.style.display=="none"){this.style.display="block";
-}elem.remove();
-}}).end();
-},hide:function(speed,callback){return speed?this.animate({height:"hide",width:"hide",opacity:"hide"},speed,callback):this.filter(":visible").each(function(){this.oldblock=this.oldblock||jQuery.css(this,"display");
-this.style.display="none";
-}).end();
-},_toggle:jQuery.fn.toggle,toggle:function(fn,fn2){return jQuery.isFunction(fn)&&jQuery.isFunction(fn2)?this._toggle.apply(this,arguments):fn?this.animate({height:"toggle",width:"toggle",opacity:"toggle"},fn,fn2):this.each(function(){jQuery(this)[jQuery(this).is(":hidden")?"show":"hide"]();
-});
-},slideDown:function(speed,callback){return this.animate({height:"show"},speed,callback);
-},slideUp:function(speed,callback){return this.animate({height:"hide"},speed,callback);
-},slideToggle:function(speed,callback){return this.animate({height:"toggle"},speed,callback);
-},fadeIn:function(speed,callback){return this.animate({opacity:"show"},speed,callback);
-},fadeOut:function(speed,callback){return this.animate({opacity:"hide"},speed,callback);
-},fadeTo:function(speed,to,callback){return this.animate({opacity:to},speed,callback);
-},animate:function(prop,speed,easing,callback){var optall=jQuery.speed(speed,easing,callback);
-return this[optall.queue===false?"each":"queue"](function(){if(this.nodeType!=1){return false;
-}var opt=jQuery.extend({},optall),p,hidden=jQuery(this).is(":hidden"),self=this;
-for(p in prop){if(prop[p]=="hide"&&hidden||prop[p]=="show"&&!hidden){return opt.complete.call(this);
-}if(p=="height"||p=="width"){opt.display=jQuery.css(this,"display");
-opt.overflow=this.style.overflow;
-}}if(opt.overflow!=null){this.style.overflow="hidden";
-}opt.curAnim=jQuery.extend({},prop);
-jQuery.each(prop,function(name,val){var e=new jQuery.fx(self,opt,name);
-if(/toggle|show|hide/.test(val)){e[val=="toggle"?hidden?"show":"hide":val](prop);
-}else{var parts=val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),start=e.cur(true)||0;
-if(parts){var end=parseFloat(parts[2]),unit=parts[3]||"px";
-if(unit!="px"){self.style[name]=(end||1)+unit;
-start=((end||1)/e.cur(true))*start;
-self.style[name]=start+unit;
-}if(parts[1]){end=((parts[1]=="-="?-1:1)*end)+start;
-}e.custom(start,end,unit);
-}else{e.custom(start,val,"");
-}}});
-return true;
-});
-},queue:function(type,fn){if(jQuery.isFunction(type)||(type&&type.constructor==Array)){fn=type;
-type="fx";
-}if(!type||(typeof type=="string"&&!fn)){return queue(this[0],type);
-}return this.each(function(){if(fn.constructor==Array){queue(this,type,fn);
-}else{queue(this,type).push(fn);
-if(queue(this,type).length==1){fn.call(this);
-}}});
-},stop:function(clearQueue,gotoEnd){var timers=jQuery.timers;
-if(clearQueue){this.queue([]);
-}this.each(function(){for(var i=timers.length-1;
-i>=0;
-i--){if(timers[i].elem==this){if(gotoEnd){timers[i](true);
-}timers.splice(i,1);
-}}});
-if(!gotoEnd){this.dequeue();
-}return this;
-}});
-var queue=function(elem,type,array){if(elem){type=type||"fx";
-var q=jQuery.data(elem,type+"queue");
-if(!q||array){q=jQuery.data(elem,type+"queue",jQuery.makeArray(array));
-}}return q;
-};
-jQuery.fn.dequeue=function(type){type=type||"fx";
-return this.each(function(){var q=queue(this,type);
-q.shift();
-if(q.length){q[0].call(this);
-}});
-};
-jQuery.extend({speed:function(speed,easing,fn){var opt=speed&&speed.constructor==Object?speed:{complete:fn||!fn&&easing||jQuery.isFunction(speed)&&speed,duration:speed,easing:fn&&easing||easing&&easing.constructor!=Function&&easing};
-opt.duration=(opt.duration&&opt.duration.constructor==Number?opt.duration:jQuery.fx.speeds[opt.duration])||jQuery.fx.speeds.def;
-opt.old=opt.complete;
-opt.complete=function(){if(opt.queue!==false){jQuery(this).dequeue();
-}if(jQuery.isFunction(opt.old)){opt.old.call(this);
-}};
-return opt;
-},easing:{linear:function(p,n,firstNum,diff){return firstNum+diff*p;
-},swing:function(p,n,firstNum,diff){return((-Math.cos(p*Math.PI)/2)+0.5)*diff+firstNum;
-}},timers:[],timerId:null,fx:function(elem,options,prop){this.options=options;
-this.elem=elem;
-this.prop=prop;
-if(!options.orig){options.orig={};
-}}});
-jQuery.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this);
-}(jQuery.fx.step[this.prop]||jQuery.fx.step._default)(this);
-if(this.prop=="height"||this.prop=="width"){this.elem.style.display="block";
-}},cur:function(force){if(this.elem[this.prop]!=null&&this.elem.style[this.prop]==null){return this.elem[this.prop];
-}var r=parseFloat(jQuery.css(this.elem,this.prop,force));
-return r&&r>-10000?r:parseFloat(jQuery.curCSS(this.elem,this.prop))||0;
-},custom:function(from,to,unit){this.startTime=now();
-this.start=from;
-this.end=to;
-this.unit=unit||this.unit||"px";
-this.now=this.start;
-this.pos=this.state=0;
-this.update();
-var self=this;
-function t(gotoEnd){return self.step(gotoEnd);
-}t.elem=this.elem;
-jQuery.timers.push(t);
-if(jQuery.timerId==null){jQuery.timerId=setInterval(function(){var timers=jQuery.timers;
-for(var i=0;
-i<timers.length;
-i++){if(!timers[i]()){timers.splice(i--,1);
-}}if(!timers.length){clearInterval(jQuery.timerId);
-jQuery.timerId=null;
-}},13);
-}},show:function(){this.options.orig[this.prop]=jQuery.attr(this.elem.style,this.prop);
-this.options.show=true;
-this.custom(0,this.cur());
-if(this.prop=="width"||this.prop=="height"){this.elem.style[this.prop]="1px";
-}jQuery(this.elem).show();
-},hide:function(){this.options.orig[this.prop]=jQuery.attr(this.elem.style,this.prop);
-this.options.hide=true;
-this.custom(this.cur(),0);
-},step:function(gotoEnd){var t=now();
-if(gotoEnd||t>this.options.duration+this.startTime){this.now=this.end;
-this.pos=this.state=1;
-this.update();
-this.options.curAnim[this.prop]=true;
-var done=true;
-for(var i in this.options.curAnim){if(this.options.curAnim[i]!==true){done=false;
-}}if(done){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;
-this.elem.style.display=this.options.display;
-if(jQuery.css(this.elem,"display")=="none"){this.elem.style.display="block";
-}}if(this.options.hide){this.elem.style.display="none";
-}if(this.options.hide||this.options.show){for(var p in this.options.curAnim){jQuery.attr(this.elem.style,p,this.options.orig[p]);
-}}}if(done){this.options.complete.call(this.elem);
-}return false;
-}else{var n=t-this.startTime;
-this.state=n/this.options.duration;
-this.pos=jQuery.easing[this.options.easing||(jQuery.easing.swing?"swing":"linear")](this.state,n,0,1,this.options.duration);
-this.now=this.start+((this.end-this.start)*this.pos);
-this.update();
-}return true;
-}};
-jQuery.extend(jQuery.fx,{speeds:{slow:600,fast:200,def:400},step:{scrollLeft:function(fx){fx.elem.scrollLeft=fx.now;
-},scrollTop:function(fx){fx.elem.scrollTop=fx.now;
-},opacity:function(fx){jQuery.attr(fx.elem.style,"opacity",fx.now);
-},_default:function(fx){fx.elem.style[fx.prop]=fx.now+fx.unit;
-}}});
-jQuery.fn.offset=function(){var left=0,top=0,elem=this[0],results;
-if(elem){with(jQuery.browser){var parent=elem.parentNode,offsetChild=elem,offsetParent=elem.offsetParent,doc=elem.ownerDocument,safari2=safari&&parseInt(version)<522&&!/adobeair/i.test(userAgent),css=jQuery.curCSS,fixed=css(elem,"position")=="fixed";
-if(elem.getBoundingClientRect){var box=elem.getBoundingClientRect();
-add(box.left+Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),box.top+Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));
-add(-doc.documentElement.clientLeft,-doc.documentElement.clientTop);
-}else{add(elem.offsetLeft,elem.offsetTop);
-while(offsetParent){add(offsetParent.offsetLeft,offsetParent.offsetTop);
-if(mozilla&&!/^t(able|d|h)$/i.test(offsetParent.tagName)||safari&&!safari2){border(offsetParent);
-}if(!fixed&&css(offsetParent,"position")=="fixed"){fixed=true;
-}offsetChild=/^body$/i.test(offsetParent.tagName)?offsetChild:offsetParent;
-offsetParent=offsetParent.offsetParent;
-}while(parent&&parent.tagName&&!/^body|html$/i.test(parent.tagName)){if(!/^inline|table.*$/i.test(css(parent,"display"))){add(-parent.scrollLeft,-parent.scrollTop);
-}if(mozilla&&css(parent,"overflow")!="visible"){border(parent);
-}parent=parent.parentNode;
-}if((safari2&&(fixed||css(offsetChild,"position")=="absolute"))||(mozilla&&css(offsetChild,"position")!="absolute")){add(-doc.body.offsetLeft,-doc.body.offsetTop);
-}if(fixed){add(Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));
-}}results={top:top,left:left};
-}}function border(elem){add(jQuery.curCSS(elem,"borderLeftWidth",true),jQuery.curCSS(elem,"borderTopWidth",true));
-}function add(l,t){left+=parseInt(l,10)||0;
-top+=parseInt(t,10)||0;
-}return results;
-};
-jQuery.fn.extend({position:function(){var left=0,top=0,results;
-if(this[0]){var offsetParent=this.offsetParent(),offset=this.offset(),parentOffset=/^body|html$/i.test(offsetParent[0].tagName)?{top:0,left:0}:offsetParent.offset();
-offset.top-=num(this,"marginTop");
-offset.left-=num(this,"marginLeft");
-parentOffset.top+=num(offsetParent,"borderTopWidth");
-parentOffset.left+=num(offsetParent,"borderLeftWidth");
-results={top:offset.top-parentOffset.top,left:offset.left-parentOffset.left};
-}return results;
-},offsetParent:function(){var offsetParent=this[0].offsetParent;
-while(offsetParent&&(!/^body|html$/i.test(offsetParent.tagName)&&jQuery.css(offsetParent,"position")=="static")){offsetParent=offsetParent.offsetParent;
-}return jQuery(offsetParent);
-}});
-jQuery.each(["Left","Top"],function(i,name){var method="scroll"+name;
-jQuery.fn[method]=function(val){if(!this[0]){return ;
-}return val!=undefined?this.each(function(){this==window||this==document?window.scrollTo(!i?val:jQuery(window).scrollLeft(),i?val:jQuery(window).scrollTop()):this[method]=val;
-}):this[0]==window||this[0]==document?self[i?"pageYOffset":"pageXOffset"]||jQuery.boxModel&&document.documentElement[method]||document.body[method]:this[0][method];
-};
-});
-jQuery.each(["Height","Width"],function(i,name){var tl=i?"Left":"Top",br=i?"Right":"Bottom";
-jQuery.fn["inner"+name]=function(){return this[name.toLowerCase()]()+num(this,"padding"+tl)+num(this,"padding"+br);
-};
-jQuery.fn["outer"+name]=function(margin){return this["inner"+name]()+num(this,"border"+tl+"Width")+num(this,"border"+br+"Width")+(margin?num(this,"margin"+tl)+num(this,"margin"+br):0);
-};
-});
-})();
-
+window.Timeline = new Object();
+Timeline.urlPrefix = baseuri();
+window.Timeline.DateTime = window.SimileAjax.DateTime; // for backward compatibility
 
 /* platform.js */
-SimileAjax.jQuery=jQuery.noConflict(true);
+SimileAjax.jQuery = jQuery;
+// SimileAjax.jQuery=jQuery.noConflict(true);
 if(typeof window["$"]=="undefined"){window.$=SimileAjax.jQuery;
 }SimileAjax.Platform.os={isMac:false,isWin:false,isWin32:false,isUnix:false};
 SimileAjax.Platform.browser={isIE:false,isNetscape:false,isMozilla:false,isFirefox:false,isOpera:false,isSafari:false,majorVersion:0,minorVersion:0};
@@ -1802,22 +741,31 @@
 SimileAjax.Graphics._bubblePadding=15;
 SimileAjax.Graphics._bubblePointOffset=6;
 SimileAjax.Graphics._halfArrowWidth=18;
-SimileAjax.Graphics.createBubbleForContentAndPoint=function(E,D,C,A,B){if(typeof A!="number"){A=300;
-}E.style.position="absolute";
-E.style.left="-5000px";
-E.style.top="0px";
-E.style.width=A+"px";
-document.body.appendChild(E);
-window.setTimeout(function(){var H=E.scrollWidth+10;
-var F=E.scrollHeight+10;
-var G=SimileAjax.Graphics.createBubbleForPoint(D,C,H,F,B);
-document.body.removeChild(E);
-E.style.position="static";
-E.style.left="";
-E.style.top="";
-E.style.width=H+"px";
-G.content.appendChild(E);
-},200);
+SimileAjax.Graphics.createBubbleForContentAndPoint=function(F,D,C,A,B,E){if(typeof A!="number"){A=300;
+}if(typeof E!="number"){E=0;
+}F.style.position="absolute";
+F.style.left="-5000px";
+F.style.top="0px";
+F.style.width=A+"px";
+document.body.appendChild(F);
+window.setTimeout(function(){var J=F.scrollWidth+10;
+var G=F.scrollHeight+10;
+var I=0;
+if(E>0&&G>E){G=E;
+I=J-25;
+}var H=SimileAjax.Graphics.createBubbleForPoint(D,C,J,G,B);
+document.body.removeChild(F);
+F.style.position="static";
+F.style.left="";
+F.style.top="";
+if(I>0){var K=document.createElement("div");
+F.style.width="";
+K.style.width=I+"px";
+K.appendChild(F);
+H.content.appendChild(K);
+}else{F.style.width=J+"px";
+H.content.appendChild(F);
+}},200);
 };
 SimileAjax.Graphics.createBubbleForPoint=function(C,B,N,R,F){function T(){if(typeof window.innerHeight=="number"){return{w:window.innerWidth,h:window.innerHeight};
 }else{if(document.documentElement&&document.documentElement.clientHeight){return{w:document.documentElement.clientWidth,h:document.documentElement.clientHeight};
@@ -2012,6 +960,14 @@
 }};
 return G;
 };
+SimileAjax.Graphics.getWidthHeight=function(C){var A,B;
+if(C.getBoundingClientRect==null){A=C.offsetWidth;
+B=C.offsetHeight;
+}else{var D=C.getBoundingClientRect();
+A=Math.ceil(D.right-D.left);
+B=Math.ceil(D.bottom-D.top);
+}return{width:A,height:B};
+};
 SimileAjax.Graphics.getFontRenderingContext=function(A,B){return new SimileAjax.Graphics._FontRenderingContext(A,B);
 };
 SimileAjax.Graphics._FontRenderingContext=function(A,B){this._elmt=A;
@@ -2024,8 +980,12 @@
 SimileAjax.Graphics._FontRenderingContext.prototype.update=function(){this._elmt.innerHTML="A";
 this._lineHeight=this._elmt.offsetHeight;
 };
-SimileAjax.Graphics._FontRenderingContext.prototype.computeSize=function(A){this._elmt.innerHTML=A;
-return{width:this._elmt.offsetWidth,height:this._elmt.offsetHeight};
+SimileAjax.Graphics._FontRenderingContext.prototype.computeSize=function(D,C){var B=this._elmt;
+B.innerHTML=D;
+B.className=C===undefined?"":C;
+var A=SimileAjax.Graphics.getWidthHeight(B);
+B.className="";
+return A;
 };
 SimileAjax.Graphics._FontRenderingContext.prototype.getLineHeight=function(){return this._lineHeight;
 };
@@ -2690,10 +1650,354 @@
 }catch(B){A.setrequestheader("Content-Type","text/xml");
 }};
 
+/******** end of simile-ajax-bundle.js ********/
 
-window.Timeline = new Object();
-Timeline.urlPrefix = baseuri();
-window.Timeline.DateTime = window.SimileAjax.DateTime; // for backward compatibility
+/******** start of simile-timeline-bundle.js ********/
+
+/* band.js */
+Timeline._Band=function(B,C,A){if(B!==undefined){this.initialize(B,C,A);
+}};
+Timeline._Band.prototype.initialize=function(F,G,B){if(F.autoWidth&&typeof G.width=="string"){G.width=G.width.indexOf("%")>-1?0:parseInt(G.width);
+}this._timeline=F;
+this._bandInfo=G;
+this._index=B;
+this._locale=("locale" in G)?G.locale:Timeline.getDefaultLocale();
+this._timeZone=("timeZone" in G)?G.timeZone:0;
+this._labeller=("labeller" in G)?G.labeller:(("createLabeller" in F.getUnit())?F.getUnit().createLabeller(this._locale,this._timeZone):new Timeline.GregorianDateLabeller(this._locale,this._timeZone));
+this._theme=G.theme;
+this._zoomIndex=("zoomIndex" in G)?G.zoomIndex:0;
+this._zoomSteps=("zoomSteps" in G)?G.zoomSteps:null;
+this._dragging=false;
+this._changing=false;
+this._originalScrollSpeed=5;
+this._scrollSpeed=this._originalScrollSpeed;
+this._onScrollListeners=[];
+var A=this;
+this._syncWithBand=null;
+this._syncWithBandHandler=function(H){A._onHighlightBandScroll();
+};
+this._selectorListener=function(H){A._onHighlightBandScroll();
+};
+var D=this._timeline.getDocument().createElement("div");
+D.className="timeline-band-input";
+this._timeline.addDiv(D);
+this._keyboardInput=document.createElement("input");
+this._keyboardInput.type="text";
+D.appendChild(this._keyboardInput);
+SimileAjax.DOM.registerEventWithObject(this._keyboardInput,"keydown",this,"_onKeyDown");
+SimileAjax.DOM.registerEventWithObject(this._keyboardInput,"keyup",this,"_onKeyUp");
+this._div=this._timeline.getDocument().createElement("div");
+this._div.id="timeline-band-"+B;
+this._div.className="timeline-band timeline-band-"+B;
+this._timeline.addDiv(this._div);
+SimileAjax.DOM.registerEventWithObject(this._div,"mousedown",this,"_onMouseDown");
+SimileAjax.DOM.registerEventWithObject(this._div,"mousemove",this,"_onMouseMove");
+SimileAjax.DOM.registerEventWithObject(this._div,"mouseup",this,"_onMouseUp");
+SimileAjax.DOM.registerEventWithObject(this._div,"mouseout",this,"_onMouseOut");
+SimileAjax.DOM.registerEventWithObject(this._div,"dblclick",this,"_onDblClick");
+var E=this._theme!=null?this._theme.mouseWheel:"scroll";
+if(E==="zoom"||E==="scroll"||this._zoomSteps){if(SimileAjax.Platform.browser.isFirefox){SimileAjax.DOM.registerEventWithObject(this._div,"DOMMouseScroll",this,"_onMouseScroll");
+}else{SimileAjax.DOM.registerEventWithObject(this._div,"mousewheel",this,"_onMouseScroll");
+}}this._innerDiv=this._timeline.getDocument().createElement("div");
+this._innerDiv.className="timeline-band-inner";
+this._div.appendChild(this._innerDiv);
+this._ether=G.ether;
+G.ether.initialize(this,F);
+this._etherPainter=G.etherPainter;
+G.etherPainter.initialize(this,F);
+this._eventSource=G.eventSource;
+if(this._eventSource){this._eventListener={onAddMany:function(){A._onAddMany();
+},onClear:function(){A._onClear();
+}};
+this._eventSource.addListener(this._eventListener);
+}this._eventPainter=G.eventPainter;
+this._eventTracksNeeded=0;
+this._eventTrackIncrement=0;
+G.eventPainter.initialize(this,F);
+this._decorators=("decorators" in G)?G.decorators:[];
+for(var C=0;
+C<this._decorators.length;
+C++){this._decorators[C].initialize(this,F);
+}};
+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;
+};
+Timeline._Band.prototype.addOnScrollListener=function(A){this._onScrollListeners.push(A);
+};
+Timeline._Band.prototype.removeOnScrollListener=function(B){for(var A=0;
+A<this._onScrollListeners.length;
+A++){if(this._onScrollListeners[A]==B){this._onScrollListeners.splice(A,1);
+break;
+}}};
+Timeline._Band.prototype.setSyncWithBand=function(B,A){if(this._syncWithBand){this._syncWithBand.removeOnScrollListener(this._syncWithBandHandler);
+}this._syncWithBand=B;
+this._syncWithBand.addOnScrollListener(this._syncWithBandHandler);
+this._highlight=A;
+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.getTimeline=function(){return this._timeline;
+};
+Timeline._Band.prototype.updateEventTrackInfo=function(B,A){this._eventTrackIncrement=A;
+if(B>this._eventTracksNeeded){this._eventTracksNeeded=B;
+}};
+Timeline._Band.prototype.checkAutoWidth=function(){if(!this._timeline.autoWidth){return ;
+}var A=this._eventPainter.getType()=="overview";
+var C=A?this._theme.event.overviewTrack.autoWidthMargin:this._theme.event.track.autoWidthMargin;
+var B=Math.ceil((this._eventTracksNeeded+C)*this._eventTrackIncrement);
+B+=A?this._theme.event.overviewTrack.offset:this._theme.event.track.offset;
+var D=this._bandInfo;
+if(B!=D.width){D.width=B;
+}};
+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(A,D){var C=this._keyboardInput.parentNode;
+var B=A+Math.floor(D/2);
+if(this._timeline.isHorizontal()){this._div.style.top=A+"px";
+this._div.style.height=D+"px";
+C.style.top=B+"px";
+C.style.left="-1em";
+}else{this._div.style.left=A+"px";
+this._div.style.width=D+"px";
+C.style.left=B+"px";
+C.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(A){this._viewLength=A;
+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(A){if(!this._changing){this._moveEther(Math.round(-this._ether.dateToPixelOffset(A)));
+}};
+Timeline._Band.prototype.setMaxVisibleDate=function(A){if(!this._changing){this._moveEther(Math.round(this._viewLength-this._ether.dateToPixelOffset(A)));
+}};
+Timeline._Band.prototype.setCenterVisibleDate=function(A){if(!this._changing){this._moveEther(Math.round(this._viewLength/2-this._ether.dateToPixelOffset(A)));
+}};
+Timeline._Band.prototype.dateToPixelOffset=function(A){return this._ether.dateToPixelOffset(A)-this._viewOffset;
+};
+Timeline._Band.prototype.pixelOffsetToDate=function(A){return this._ether.pixelOffsetToDate(A+this._viewOffset);
+};
+Timeline._Band.prototype.createLayerDiv=function(D,B){var C=this._timeline.getDocument().createElement("div");
+C.className="timeline-band-layer"+(typeof B=="string"?(" "+B):"");
+C.style.zIndex=D;
+this._innerDiv.appendChild(C);
+var A=this._timeline.getDocument().createElement("div");
+A.className="timeline-band-layer-inner";
+if(SimileAjax.Platform.browser.isIE){A.style.cursor="move";
+}else{A.style.cursor="-moz-grab";
+}C.appendChild(A);
+return A;
+};
+Timeline._Band.prototype.removeLayerDiv=function(A){this._innerDiv.removeChild(A.parentNode);
+};
+Timeline._Band.prototype.scrollToCenter=function(B,C){var A=this._ether.dateToPixelOffset(B);
+if(A<-this._viewLength/2){this.setCenterVisibleDate(this.pixelOffsetToDate(A+this._viewLength));
+}else{if(A>3*this._viewLength/2){this.setCenterVisibleDate(this.pixelOffsetToDate(A-this._viewLength));
+}}this._autoScroll(Math.round(this._viewLength/2-this._ether.dateToPixelOffset(B)),C);
+};
+Timeline._Band.prototype.showBubbleForEvent=function(C){var A=this.getEventSource().getEvent(C);
+if(A){var B=this;
+this.scrollToCenter(A.getStart(),function(){B._eventPainter.showBubble(A);
+});
+}};
+Timeline._Band.prototype.zoom=function(F,A,E,C){if(!this._zoomSteps){return ;
+}A+=this._viewOffset;
+var D=this._ether.pixelOffsetToDate(A);
+var B=this._ether.zoom(F);
+this._etherPainter.zoom(B);
+this._moveEther(Math.round(-this._ether.dateToPixelOffset(D)));
+this._moveEther(A);
+};
+Timeline._Band.prototype._onMouseDown=function(B,A,C){this.closeBubble();
+this._dragging=true;
+this._dragX=A.clientX;
+this._dragY=A.clientY;
+};
+Timeline._Band.prototype._onMouseMove=function(D,A,E){if(this._dragging){var C=A.clientX-this._dragX;
+var B=A.clientY-this._dragY;
+this._dragX=A.clientX;
+this._dragY=A.clientY;
+this._moveEther(this._timeline.isHorizontal()?C:B);
+this._positionHighlight();
+}};
+Timeline._Band.prototype._onMouseUp=function(B,A,C){this._dragging=false;
+this._keyboardInput.focus();
+};
+Timeline._Band.prototype._onMouseOut=function(B,A,D){var C=SimileAjax.DOM.getEventRelativeCoordinates(A,B);
+C.x+=this._viewOffset;
+if(C.x<0||C.x>B.offsetWidth||C.y<0||C.y>B.offsetHeight){this._dragging=false;
+}};
+Timeline._Band.prototype._onMouseScroll=function(G,I,E){var A=new Date();
+A=A.getTime();
+if(!this._lastScrollTime||((A-this._lastScrollTime)>50)){this._lastScrollTime=A;
+var H=0;
+if(I.wheelDelta){H=I.wheelDelta/120;
+}else{if(I.detail){H=-I.detail/3;
+}}var F=this._theme.mouseWheel;
+if(this._zoomSteps||F==="zoom"){var D=SimileAjax.DOM.getEventRelativeCoordinates(I,G);
+if(H!=0){var C;
+if(H>0){C=true;
+}if(H<0){C=false;
+}this._timeline.zoom(C,D.x,D.y,G);
+}}else{if(F==="scroll"){var B=50*(H<0?-1:1);
+this._moveEther(B);
+}}}if(I.stopPropagation){I.stopPropagation();
+}I.cancelBubble=true;
+if(I.preventDefault){I.preventDefault();
+}I.returnValue=false;
+};
+Timeline._Band.prototype._onDblClick=function(B,A,D){var C=SimileAjax.DOM.getEventRelativeCoordinates(A,B);
+var E=C.x-(this._viewLength/2-this._viewOffset);
+this._autoScroll(-E);
+};
+Timeline._Band.prototype._onKeyDown=function(B,A,C){if(!this._dragging){switch(A.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();
+SimileAjax.DOM.cancelEvent(A);
+return false;
+}return true;
+};
+Timeline._Band.prototype._onKeyUp=function(B,A,C){if(!this._dragging){this._scrollSpeed=this._originalScrollSpeed;
+switch(A.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();
+SimileAjax.DOM.cancelEvent(A);
+return false;
+}return true;
+};
+Timeline._Band.prototype._autoScroll=function(D,C){var A=this;
+var B=SimileAjax.Graphics.createAnimation(function(E,F){A._moveEther(F);
+},0,D,1000,C);
+B.run();
+};
+Timeline._Band.prototype._moveEther=function(A){this.closeBubble();
+this._viewOffset+=A;
+this._ether.shiftPixels(-A);
+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 A=0;
+A<this._onScrollListeners.length;
+A++){this._onScrollListeners[A](this);
+}};
+Timeline._Band.prototype._setSyncWithBandDate=function(){if(this._syncWithBand){var A=this._ether.pixelOffsetToDate(this.getViewLength()/2);
+this._syncWithBand.setCenterVisibleDate(A);
+}};
+Timeline._Band.prototype._onHighlightBandScroll=function(){if(this._syncWithBand){var A=this._syncWithBand.getCenterVisibleDate();
+var B=this._ether.dateToPixelOffset(A);
+this._moveEther(Math.round(this._viewLength/2-B));
+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 A=this._syncWithBand.getMinVisibleDate();
+var B=this._syncWithBand.getMaxVisibleDate();
+if(this._highlight){this._etherPainter.setHighlight(A,B);
+}}};
+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 A=0;
+A<this._decorators.length;
+A++){this._decorators[A].paint();
+}};
+Timeline._Band.prototype._softPaintDecorators=function(){for(var A=0;
+A<this._decorators.length;
+A++){this._decorators[A].softPaint();
+}};
+Timeline._Band.prototype.closeBubble=function(){SimileAjax.WindowManager.cancelPopups();
+};
+
 
 /* decorators.js */
 Timeline.SpanHighlightDecorator=function(A){this._unit=("unit" in A)?A.unit:SimileAjax.NativeDateUnit;
@@ -2804,6 +2108,8 @@
 this._highlightLayer=null;
 this._eventIdToElmt=null;
 };
+Timeline.DetailedEventPainter.prototype.getType=function(){return"detailed";
+};
 Timeline.DetailedEventPainter.prototype.addOnSelectListener=function(A){this._onSelectListeners.push(A);
 };
 Timeline.DetailedEventPainter.prototype.removeOnSelectListener=function(B){for(var A=0;
@@ -2838,6 +2144,7 @@
 }}this._highlightLayer.style.display="block";
 this._lineLayer.style.display="block";
 this._eventLayer.style.display="block";
+this._band.updateEventTrackInfo(this._lowerTracks.length+this._upperTracks.length,F.trackIncrement);
 };
 Timeline.DetailedEventPainter.prototype.softPaint=function(){};
 Timeline.DetailedEventPainter.prototype._prepareForPainting=function(){var B=this._band;
@@ -3159,10 +2466,11 @@
 if(B){var C=SimileAjax.DOM.getPageCoordinates(B);
 this._showBubble(C.left+B.offsetWidth/2,C.top+B.offsetHeight/2,A);
 }};
-Timeline.DetailedEventPainter.prototype._showBubble=function(A,D,B){var C=document.createElement("div");
-B.fillInfoBubble(C,this._params.theme,this._band.getLabeller());
+Timeline.DetailedEventPainter.prototype._showBubble=function(A,E,B){var D=document.createElement("div");
+var C=this._params.theme.event.bubble;
+B.fillInfoBubble(D,this._params.theme,this._band.getLabeller());
 SimileAjax.WindowManager.cancelPopups();
-SimileAjax.Graphics.createBubbleForContentAndPoint(C,A,D,this._params.theme.event.bubble.width);
+SimileAjax.Graphics.createBubbleForContentAndPoint(D,A,E,C.width,null,C.maxHeight);
 };
 Timeline.DetailedEventPainter.prototype._fireOnSelect=function(B){for(var A=0;
 A<this._onSelectListeners.length;
@@ -3603,6 +2911,24 @@
 };
 
 
+/* event-utils.js */
+Timeline.EventUtils={};
+Timeline.EventUtils.getNewEventID=function(){if(this._lastEventID==null){this._lastEventID=0;
+}this._lastEventID+=1;
+return"e"+this._lastEventID;
+};
+Timeline.EventUtils.decodeEventElID=function(B){var D=B.split("-");
+if(D[1]!="tl"){alert("Internal Timeline problem 101, please consult support");
+return{band:null,evt:null};
+}var C=Timeline.getTimelineFromID(D[2]);
+var E=C.getBand(D[3]);
+var A=E.getEventSource.getEvent(D[4]);
+return{band:E,evt:A};
+};
+Timeline.EventUtils.encodeEventElID=function(C,D,B,A){return B+"-tl-"+C.timelineID+"-"+D.getIndex()+"-"+A.getID();
+};
+
+
 /* labellers.js */
 Timeline.GregorianDateLabeller=function(A,B){this._locale=A;
 this._timeZone=B;
@@ -3652,6 +2978,7 @@
 /* original-painter.js */
 Timeline.OriginalEventPainter=function(A){this._params=A;
 this._onSelectListeners=[];
+this._eventPaintListeners=[];
 this._filterMatcher=null;
 this._highlightMatcher=null;
 this._frc=null;
@@ -3665,6 +2992,8 @@
 this._highlightLayer=null;
 this._eventIdToElmt=null;
 };
+Timeline.OriginalEventPainter.prototype.getType=function(){return"original";
+};
 Timeline.OriginalEventPainter.prototype.addOnSelectListener=function(A){this._onSelectListeners.push(A);
 };
 Timeline.OriginalEventPainter.prototype.removeOnSelectListener=function(B){for(var A=0;
@@ -3672,6 +3001,13 @@
 A++){if(this._onSelectListeners[A]==B){this._onSelectListeners.splice(A,1);
 break;
 }}};
+Timeline.OriginalEventPainter.prototype.addEventPaintListener=function(A){this._eventPaintListeners.push(A);
+};
+Timeline.OriginalEventPainter.prototype.removeEventPaintListener=function(B){for(var A=0;
+A<this._eventPaintListeners.length;
+A++){if(this._eventPaintListeners[A]==B){this._eventPaintListeners.splice(A,1);
+break;
+}}};
 Timeline.OriginalEventPainter.prototype.getFilterMatcher=function(){return this._filterMatcher;
 };
 Timeline.OriginalEventPainter.prototype.setFilterMatcher=function(A){this._filterMatcher=A;
@@ -3683,10 +3019,11 @@
 Timeline.OriginalEventPainter.prototype.paint=function(){var B=this._band.getEventSource();
 if(B==null){return ;
 }this._eventIdToElmt={};
+this._fireEventPaintListeners("paintStarting",null,null);
 this._prepareForPainting();
 var I=this._params.theme.event;
 var G=Math.max(I.track.height,I.tape.height+this._frc.getLineHeight());
-var F={trackOffset:I.track.gap,trackHeight:G,trackGap:I.track.gap,trackIncrement:G+I.track.gap,icon:I.instant.icon,iconWidth:I.instant.iconWidth,iconHeight:I.instant.iconHeight,labelWidth:I.label.width};
+var F={trackOffset:I.track.offset,trackHeight:G,trackGap:I.track.gap,trackIncrement:G+I.track.gap,icon:I.instant.icon,iconWidth:I.instant.iconWidth,iconHeight:I.instant.iconHeight,labelWidth:I.label.width,maxLabelChar:I.label.maxLabelChar,impreciseIconMargin:I.instant.impreciseIconMargin};
 var C=this._band.getMinDate();
 var A=this._band.getMaxDate();
 var J=(this._filterMatcher!=null)?this._filterMatcher:function(K){return true;
@@ -3699,6 +3036,8 @@
 }}this._highlightLayer.style.display="block";
 this._lineLayer.style.display="block";
 this._eventLayer.style.display="block";
+this._band.updateEventTrackInfo(this._tracks.length,F.trackIncrement);
+this._fireEventPaintListeners("paintEnded",null,null);
 };
 Timeline.OriginalEventPainter.prototype.softPaint=function(){};
 Timeline.OriginalEventPainter.prototype._prepareForPainting=function(){var B=this._band;
@@ -3729,183 +3068,218 @@
 Timeline.OriginalEventPainter.prototype.paintDurationEvent=function(B,C,D,A){if(B.isImprecise()){this.paintImpreciseDurationEvent(B,C,D,A);
 }else{this.paintPreciseDurationEvent(B,C,D,A);
 }};
-Timeline.OriginalEventPainter.prototype.paintPreciseInstantEvent=function(J,N,P,O){var S=this._timeline.getDocument();
-var I=J.getText();
-var E=J.getStart();
+Timeline.OriginalEventPainter.prototype.paintPreciseInstantEvent=function(M,Q,S,R){var V=this._timeline.getDocument();
+var L=M.getText();
+var E=M.getStart();
 var C=Math.round(this._band.dateToPixelOffset(E));
-var A=Math.round(C+N.iconWidth/2);
-var H=Math.round(C-N.iconWidth/2);
-var F=this._frc.computeSize(I);
-var T=A+P.event.label.offsetFromLine;
-var D=T+F.width;
-var R=D;
-var L=this._findFreeTrack(R);
-var Q=Math.round(N.trackOffset+L*N.trackIncrement+N.trackHeight/2-F.height/2);
-var B=this._paintEventIcon(J,L,H,N,P);
-var M=this._paintEventLabel(J,I,T,Q,F.width,F.height,P);
-var K=this;
-var G=function(U,V,W){return K._onClickInstantEvent(B.elmt,V,J);
-};
-SimileAjax.DOM.registerEvent(B.elmt,"mousedown",G);
-SimileAjax.DOM.registerEvent(M.elmt,"mousedown",G);
-this._createHighlightDiv(O,B,P);
-this._eventIdToElmt[J.getID()]=B.elmt;
-this._tracks[L]=H;
-};
-Timeline.OriginalEventPainter.prototype.paintImpreciseInstantEvent=function(L,P,U,R){var W=this._timeline.getDocument();
+var A=Math.round(C+Q.iconWidth/2);
+var K=Math.round(C-Q.iconWidth/2);
+var H=this._getLabelDivClassName(M);
+var I=this._frc.computeSize(L,H);
+var W=A+S.event.label.offsetFromLine;
+var D=W+I.width;
+var U=D;
+var O=this._findFreeTrack(M,U);
+var T=Math.round(Q.trackOffset+O*Q.trackIncrement+Q.trackHeight/2-I.height/2);
+var B=this._paintEventIcon(M,O,K,Q,S,0);
+var P=this._paintEventLabel(M,L,W,T,I.width,I.height,S,H,R);
+var F=[B.elmt,P.elmt];
+var N=this;
+var J=function(X,Y,Z){return N._onClickInstantEvent(B.elmt,Y,M);
+};
+SimileAjax.DOM.registerEvent(B.elmt,"mousedown",J);
+SimileAjax.DOM.registerEvent(P.elmt,"mousedown",J);
+var G=this._createHighlightDiv(R,B,S,M);
+if(G!=null){F.push(G);
+}this._fireEventPaintListeners("paintedEvent",M,F);
+this._eventIdToElmt[M.getID()]=B.elmt;
+this._tracks[O]=K;
+};
+Timeline.OriginalEventPainter.prototype.paintImpreciseInstantEvent=function(P,T,Y,V){var a=this._timeline.getDocument();
+var N=P.getText();
+var G=P.getStart();
+var W=P.getEnd();
+var D=Math.round(this._band.dateToPixelOffset(G));
+var B=Math.round(this._band.dateToPixelOffset(W));
+var A=Math.round(D+T.iconWidth/2);
+var M=Math.round(D-T.iconWidth/2);
+var J=this._getLabelDivClassName(P);
+var K=this._frc.computeSize(N,J);
+var b=A+Y.event.label.offsetFromLine;
+var E=b+K.width;
+var Z=Math.max(E,B);
+var R=this._findFreeTrack(P,Z);
+var O=Y.event.tape.height;
+var X=Math.round(T.trackOffset+R*T.trackIncrement+O);
+var C=this._paintEventIcon(P,R,M,T,Y,O);
+var S=this._paintEventLabel(P,N,b,X,K.width,K.height,Y,J,V);
+var U=P.getColor();
+U=U!=null?U:Y.event.instant.impreciseColor;
+var F=this._paintEventTape(P,R,D,B,U,Y.event.instant.impreciseOpacity,T,Y,0);
+var H=[C.elmt,S.elmt,F.elmt];
+var Q=this;
+var L=function(c,d,e){return Q._onClickInstantEvent(C.elmt,d,P);
+};
+SimileAjax.DOM.registerEvent(C.elmt,"mousedown",L);
+SimileAjax.DOM.registerEvent(F.elmt,"mousedown",L);
+SimileAjax.DOM.registerEvent(S.elmt,"mousedown",L);
+var I=this._createHighlightDiv(V,C,Y,P);
+if(I!=null){H.push(I);
+}this._fireEventPaintListeners("paintedEvent",P,H);
+this._eventIdToElmt[P.getID()]=C.elmt;
+this._tracks[R]=M;
+};
+Timeline.OriginalEventPainter.prototype.paintPreciseDurationEvent=function(L,P,T,R){var W=this._timeline.getDocument();
 var K=L.getText();
-var G=L.getStart();
+var E=L.getStart();
 var S=L.getEnd();
-var D=Math.round(this._band.dateToPixelOffset(G));
-var B=Math.round(this._band.dateToPixelOffset(S));
-var A=Math.round(D+P.iconWidth/2);
-var J=Math.round(D-P.iconWidth/2);
-var H=this._frc.computeSize(K);
-var X=A+U.event.label.offsetFromLine;
-var E=X+H.width;
-var V=Math.max(E,B);
-var N=this._findFreeTrack(V);
-var T=Math.round(P.trackOffset+N*P.trackIncrement+P.trackHeight/2-H.height/2);
-var C=this._paintEventIcon(L,N,J,P,U);
-var O=this._paintEventLabel(L,K,X,T,H.width,H.height,U);
+var B=Math.round(this._band.dateToPixelOffset(E));
+var A=Math.round(this._band.dateToPixelOffset(S));
+var H=this._getLabelDivClassName(L);
+var I=this._frc.computeSize(K,H);
+var X=B;
+var C=X+I.width;
+var V=Math.max(C,A);
+var N=this._findFreeTrack(L,V);
+var U=Math.round(P.trackOffset+N*P.trackIncrement+T.event.tape.height);
 var Q=L.getColor();
-Q=Q!=null?Q:U.event.instant.impreciseColor;
-var F=this._paintEventTape(L,N,D,B,Q,U.event.instant.impreciseOpacity,P,U);
+Q=Q!=null?Q:T.event.duration.color;
+var D=this._paintEventTape(L,N,B,A,Q,100,P,T,0);
+var O=this._paintEventLabel(L,K,X,U,I.width,I.height,T,H,R);
+var F=[D.elmt,O.elmt];
 var M=this;
-var I=function(Y,Z,a){return M._onClickInstantEvent(C.elmt,Z,L);
-};
-SimileAjax.DOM.registerEvent(C.elmt,"mousedown",I);
-SimileAjax.DOM.registerEvent(F.elmt,"mousedown",I);
-SimileAjax.DOM.registerEvent(O.elmt,"mousedown",I);
-this._createHighlightDiv(R,C,U);
-this._eventIdToElmt[L.getID()]=C.elmt;
-this._tracks[N]=J;
-};
-Timeline.OriginalEventPainter.prototype.paintPreciseDurationEvent=function(I,M,Q,O){var T=this._timeline.getDocument();
-var H=I.getText();
-var E=I.getStart();
-var P=I.getEnd();
-var B=Math.round(this._band.dateToPixelOffset(E));
-var A=Math.round(this._band.dateToPixelOffset(P));
-var F=this._frc.computeSize(H);
-var U=B;
-var C=U+F.width;
-var S=Math.max(C,A);
-var K=this._findFreeTrack(S);
-var R=Math.round(M.trackOffset+K*M.trackIncrement+Q.event.tape.height);
-var N=I.getColor();
-N=N!=null?N:Q.event.duration.color;
-var D=this._paintEventTape(I,K,B,A,N,100,M,Q);
-var L=this._paintEventLabel(I,H,U,R,F.width,F.height,Q);
-var J=this;
-var G=function(V,W,X){return J._onClickDurationEvent(D.elmt,W,I);
-};
-SimileAjax.DOM.registerEvent(D.elmt,"mousedown",G);
-SimileAjax.DOM.registerEvent(L.elmt,"mousedown",G);
-this._createHighlightDiv(O,D,Q);
-this._eventIdToElmt[I.getID()]=D.elmt;
-this._tracks[K]=B;
-};
-Timeline.OriginalEventPainter.prototype.paintImpreciseDurationEvent=function(K,P,V,S){var Y=this._timeline.getDocument();
-var J=K.getText();
-var E=K.getStart();
-var Q=K.getLatestStart();
-var T=K.getEnd();
-var X=K.getEarliestEnd();
-var B=Math.round(this._band.dateToPixelOffset(E));
-var F=Math.round(this._band.dateToPixelOffset(Q));
-var A=Math.round(this._band.dateToPixelOffset(T));
-var G=Math.round(this._band.dateToPixelOffset(X));
-var H=this._frc.computeSize(J);
-var Z=F;
-var C=Z+H.width;
-var W=Math.max(C,A);
-var M=this._findFreeTrack(W);
-var U=Math.round(P.trackOffset+M*P.trackIncrement+V.event.tape.height);
-var R=K.getColor();
-R=R!=null?R:V.event.duration.color;
-var O=this._paintEventTape(K,M,B,A,V.event.duration.impreciseColor,V.event.duration.impreciseOpacity,P,V);
-var D=this._paintEventTape(K,M,F,G,R,100,P,V);
-var N=this._paintEventLabel(K,J,Z,U,H.width,H.height,V);
-var L=this;
-var I=function(a,b,c){return L._onClickDurationEvent(D.elmt,b,K);
-};
-SimileAjax.DOM.registerEvent(D.elmt,"mousedown",I);
-SimileAjax.DOM.registerEvent(N.elmt,"mousedown",I);
-this._createHighlightDiv(S,D,V);
-this._eventIdToElmt[K.getID()]=D.elmt;
-this._tracks[M]=B;
-};
-Timeline.OriginalEventPainter.prototype._findFreeTrack=function(A){for(var C=0;
+var J=function(Y,Z,a){return M._onClickDurationEvent(D.elmt,Z,L);
+};
+SimileAjax.DOM.registerEvent(D.elmt,"mousedown",J);
+SimileAjax.DOM.registerEvent(O.elmt,"mousedown",J);
+var G=this._createHighlightDiv(R,D,T,L);
+if(G!=null){F.push(G);
+}this._fireEventPaintListeners("paintedEvent",L,F);
+this._eventIdToElmt[L.getID()]=D.elmt;
+this._tracks[N]=B;
+};
+Timeline.OriginalEventPainter.prototype.paintImpreciseDurationEvent=function(N,S,Y,V){var b=this._timeline.getDocument();
+var M=N.getText();
+var E=N.getStart();
+var T=N.getLatestStart();
+var W=N.getEnd();
+var a=N.getEarliestEnd();
+var C=Math.round(this._band.dateToPixelOffset(E));
+var G=Math.round(this._band.dateToPixelOffset(T));
+var A=Math.round(this._band.dateToPixelOffset(W));
+var H=Math.round(this._band.dateToPixelOffset(a));
+var J=this._getLabelDivClassName(N);
+var K=this._frc.computeSize(M,J);
+var c=G;
+var B=c+K.width;
+var Z=Math.max(B,A);
+var P=this._findFreeTrack(N,Z);
+var X=Math.round(S.trackOffset+P*S.trackIncrement+Y.event.tape.height);
+var U=N.getColor();
+U=U!=null?U:Y.event.duration.color;
+var R=this._paintEventTape(N,P,C,A,Y.event.duration.impreciseColor,Y.event.duration.impreciseOpacity,S,Y,0);
+var D=this._paintEventTape(N,P,G,H,U,100,S,Y,1);
+var Q=this._paintEventLabel(N,M,c,X,K.width,K.height,Y,J,V);
+var F=[R.elmt,D.elmt,Q.elmt];
+var O=this;
+var L=function(d,e,f){return O._onClickDurationEvent(D.elmt,e,N);
+};
+SimileAjax.DOM.registerEvent(D.elmt,"mousedown",L);
+SimileAjax.DOM.registerEvent(Q.elmt,"mousedown",L);
+var I=this._createHighlightDiv(V,D,Y,N);
+if(I!=null){F.push(I);
+}this._fireEventPaintListeners("paintedEvent",N,F);
+this._eventIdToElmt[N.getID()]=D.elmt;
+this._tracks[P]=C;
+};
+Timeline.OriginalEventPainter.prototype._encodeEventElID=function(B,A){return Timeline.EventUtils.encodeEventElID(this._timeline,this._band,B,A);
+};
+Timeline.OriginalEventPainter.prototype._findFreeTrack=function(E,A){var D=E.getTrackNum();
+if(D!=null){return D;
+}for(var C=0;
 C<this._tracks.length;
 C++){var B=this._tracks[C];
 if(B>A){break;
 }}return C;
 };
-Timeline.OriginalEventPainter.prototype._paintEventIcon=function(I,E,B,F,D){var H=I.getIcon();
-H=H!=null?H:F.icon;
-var J=F.trackOffset+E*F.trackIncrement+F.trackHeight/2;
-var G=Math.round(J-F.iconHeight/2);
-var C=SimileAjax.Graphics.createTranslucentImage(H);
+Timeline.OriginalEventPainter.prototype._paintEventIcon=function(J,F,B,G,E,C){var I=J.getIcon();
+I=I!=null?I:G.icon;
+var H;
+if(C>0){H=G.trackOffset+F*G.trackIncrement+C+G.impreciseIconMargin;
+}else{var K=G.trackOffset+F*G.trackIncrement+G.trackHeight/2;
+H=Math.round(K-G.iconHeight/2);
+}var D=SimileAjax.Graphics.createTranslucentImage(I);
 var A=this._timeline.getDocument().createElement("div");
-A.className="timeline-event-icon";
+A.className=this._getElClassName("timeline-event-icon",J);
+A.id=this._encodeEventElID("icon",J);
 A.style.left=B+"px";
-A.style.top=G+"px";
-A.appendChild(C);
-if(I._title!=null){A.title=I._title;
+A.style.top=H+"px";
+A.appendChild(D);
+if(J._title!=null){A.title=J._title;
 }this._eventLayer.appendChild(A);
-return{left:B,top:G,width:F.iconWidth,height:F.iconHeight,elmt:A};
-};
-Timeline.OriginalEventPainter.prototype._paintEventLabel=function(I,J,B,G,A,K,E){var H=this._timeline.getDocument();
-var F=H.createElement("div");
-F.className="timeline-event-label";
-F.style.left=B+"px";
-F.style.width=A+"px";
-F.style.top=G+"px";
-F.innerHTML=J;
-if(I._title!=null){F.title=I._title;
-}var D=I.getTextColor();
-if(D==null){D=I.getColor();
-}if(D!=null){F.style.color=D;
-}var C=I.getClassName();
-if(C!=null){F.className+=" "+C;
-}this._eventLayer.appendChild(F);
-return{left:B,top:G,width:A,height:K,elmt:F};
-};
-Timeline.OriginalEventPainter.prototype._paintEventTape=function(O,J,G,A,D,I,K,H){var C=A-G;
-var F=H.event.tape.height;
-var L=K.trackOffset+J*K.trackIncrement;
-var N=this._timeline.getDocument().createElement("div");
-N.className="timeline-event-tape";
-N.style.left=G+"px";
-N.style.width=C+"px";
-N.style.height=F+"px";
-N.style.top=L+"px";
-if(O._title!=null){N.title=O._title;
-}if(D!=null){N.style.backgroundColor=D;
-}var M=O.getTapeImage();
-var E=O.getTapeRepeat();
-E=E!=null?E:"repeat";
-if(M!=null){N.style.backgroundImage="url("+M+")";
-N.style.backgroundRepeat=E;
-}SimileAjax.Graphics.setOpacity(N,I);
-var B=O.getClassName();
-if(B!=null){N.className+=" "+B;
-}this._eventLayer.appendChild(N);
-return{left:G,top:L,width:C,height:F,elmt:N};
-};
-Timeline.OriginalEventPainter.prototype._createHighlightDiv=function(A,C,E){if(A>=0){var D=this._timeline.getDocument();
-var G=E.event;
-var B=G.highlightColors[Math.min(A,G.highlightColors.length-1)];
-var F=D.createElement("div");
-F.style.position="absolute";
-F.style.overflow="hidden";
-F.style.left=(C.left-2)+"px";
-F.style.width=(C.width+4)+"px";
-F.style.top=(C.top-2)+"px";
-F.style.height=(C.height+4)+"px";
-this._highlightLayer.appendChild(F);
-}};
+return{left:B,top:H,width:G.iconWidth,height:G.iconHeight,elmt:A};
+};
+Timeline.OriginalEventPainter.prototype._paintEventLabel=function(J,K,C,H,A,L,E,F,B){var I=this._timeline.getDocument();
+var G=I.createElement("div");
+G.className=F;
+G.id=this._encodeEventElID("label",J);
+G.style.left=C+"px";
+G.style.width=A+"px";
+G.style.top=H+"px";
+G.innerHTML=K;
+if(J._title!=null){G.title=J._title;
+}var D=J.getTextColor();
+if(D==null){D=J.getColor();
+}if(D!=null){G.style.color=D;
+}if(E.event.highlightLabelBackground&&B>=0){G.style.background=this._getHighlightColor(B,E);
+}this._eventLayer.appendChild(G);
+return{left:C,top:H,width:A,height:L,elmt:G};
+};
+Timeline.OriginalEventPainter.prototype._paintEventTape=function(N,I,F,A,C,H,J,G,O){var B=A-F;
+var E=G.event.tape.height;
+var K=J.trackOffset+I*J.trackIncrement;
+var M=this._timeline.getDocument().createElement("div");
+M.className=this._getElClassName("timeline-event-tape",N);
+M.id=this._encodeEventElID("tape"+O,N);
+M.style.left=F+"px";
+M.style.width=B+"px";
+M.style.height=E+"px";
+M.style.top=K+"px";
+if(N._title!=null){M.title=N._title;
+}if(C!=null){M.style.backgroundColor=C;
+}var L=N.getTapeImage();
+var D=N.getTapeRepeat();
+D=D!=null?D:"repeat";
+if(L!=null){M.style.backgroundImage="url("+L+")";
+M.style.backgroundRepeat=D;
+}SimileAjax.Graphics.setOpacity(M,H);
+this._eventLayer.appendChild(M);
+return{left:F,top:K,width:B,height:E,elmt:M};
+};
+Timeline.OriginalEventPainter.prototype._getLabelDivClassName=function(A){return this._getElClassName("timeline-event-label",A);
+};
+Timeline.OriginalEventPainter.prototype._getElClassName=function(B,A){var C=A.getClassName();
+return B+(C!=null?(" "+C):"");
+};
+Timeline.OriginalEventPainter.prototype._getHighlightColor=function(A,C){var B=C.event.highlightColors;
+return B[Math.min(A,B.length-1)];
+};
+Timeline.OriginalEventPainter.prototype._createHighlightDiv=function(A,D,F,B){var G=null;
+if(A>=0){var E=this._timeline.getDocument();
+var C=this._getHighlightColor(A,F);
+G=E.createElement("div");
+G.className=this._getElClassName("timeline-event-highlight",B);
+G.id=this._encodeEventElID("highlight0",B);
+G.style.position="absolute";
+G.style.overflow="hidden";
+G.style.left=(D.left-2)+"px";
+G.style.width=(D.width+4)+"px";
+G.style.top=(D.top-2)+"px";
+G.style.height=(D.height+4)+"px";
+G.style.background=C;
+this._highlightLayer.appendChild(G);
+}return G;
+};
 Timeline.OriginalEventPainter.prototype._onClickInstantEvent=function(B,C,A){var D=SimileAjax.DOM.getPageCoordinates(B);
 this._showBubble(D.left+Math.ceil(B.offsetWidth/2),D.top+Math.ceil(B.offsetHeight/2),A);
 this._fireOnSelect(A.getID());
@@ -3928,15 +3302,20 @@
 if(B){var C=SimileAjax.DOM.getPageCoordinates(B);
 this._showBubble(C.left+B.offsetWidth/2,C.top+B.offsetHeight/2,A);
 }};
-Timeline.OriginalEventPainter.prototype._showBubble=function(A,D,B){var C=document.createElement("div");
-B.fillInfoBubble(C,this._params.theme,this._band.getLabeller());
+Timeline.OriginalEventPainter.prototype._showBubble=function(A,E,B){var D=document.createElement("div");
+var C=this._params.theme.event.bubble;
+B.fillInfoBubble(D,this._params.theme,this._band.getLabeller());
 SimileAjax.WindowManager.cancelPopups();
-SimileAjax.Graphics.createBubbleForContentAndPoint(C,A,D,this._params.theme.event.bubble.width);
+SimileAjax.Graphics.createBubbleForContentAndPoint(D,A,E,C.width,null,C.maxHeight);
 };
 Timeline.OriginalEventPainter.prototype._fireOnSelect=function(B){for(var A=0;
 A<this._onSelectListeners.length;
 A++){this._onSelectListeners[A](B);
 }};
+Timeline.OriginalEventPainter.prototype._fireEventPaintListeners=function(D,A,C){for(var B=0;
+B<this._eventPaintListeners.length;
+B++){this._eventPaintListeners[B](this._band,D,A,C);
+}};
 
 
 /* overview-painter.js */
@@ -3950,6 +3329,8 @@
 this._eventLayer=null;
 this._highlightLayer=null;
 };
+Timeline.OverviewEventPainter.prototype.getType=function(){return"overview";
+};
 Timeline.OverviewEventPainter.prototype.addOnSelectListener=function(A){this._onSelectListeners.push(A);
 };
 Timeline.OverviewEventPainter.prototype.removeOnSelectListener=function(B){for(var A=0;
@@ -3981,6 +3362,7 @@
 if(I(G)){this.paintEvent(G,F,this._params.theme,E(G));
 }}this._highlightLayer.style.display="block";
 this._eventLayer.style.display="block";
+this._band.updateEventTrackInfo(this._tracks.length,F.trackIncrement);
 };
 Timeline.OverviewEventPainter.prototype.softPaint=function(){};
 Timeline.OverviewEventPainter.prototype._prepareForPainting=function(){var A=this._band;
@@ -4024,7 +3406,9 @@
 I.style.left=C+"px";
 I.style.width=A+"px";
 I.style.top=H+"px";
-if(F<100){SimileAjax.Graphics.setOpacity(I,F);
+I.style.height=L+"px";
+if(D!=null){I.style.backgroundColor=D;
+}if(F<100){SimileAjax.Graphics.setOpacity(I,F);
 }this._eventLayer.appendChild(I);
 return{left:C,top:H,width:A,height:L,elmt:I};
 };
@@ -4058,9 +3442,8 @@
 
 
 /* sources.js */
-Timeline.DefaultEventSource=function(A){
-    this._events=(A instanceof Object)?A:new SimileAjax.EventIndex();
-    this._listeners=[];
+Timeline.DefaultEventSource=function(A){this._events=(A instanceof Object)?A:new SimileAjax.EventIndex();
+this._listeners=[];
 };
 Timeline.DefaultEventSource.prototype.addListener=function(A){this._listeners.push(A);
 };
@@ -4069,69 +3452,72 @@
 A++){if(this._listeners[A]==B){this._listeners.splice(A,1);
 break;
 }}};
-Timeline.DefaultEventSource.prototype.loadXML=function(F,A){var B=this._getBaseURL(A);
-var G=F.documentElement.getAttribute("wiki-url");
-var K=F.documentElement.getAttribute("wiki-section");
-var D=F.documentElement.getAttribute("date-time-format");
-var E=this._events.getUnit().getParser(D);
-var C=F.documentElement.firstChild;
-var H=false;
-while(C!=null){if(C.nodeType==1){var J="";
-if(C.firstChild!=null&&C.firstChild.nodeType==3){J=C.firstChild.nodeValue;
-}var I=new Timeline.DefaultEventSource.Event({id:C.getAttribute("id"),start:E(C.getAttribute("start")),end:E(C.getAttribute("end")),latestStart:E(C.getAttribute("latestStart")),earliestEnd:E(C.getAttribute("earliestEnd")),instant:C.getAttribute("isDuration")!="true",text:C.getAttribute("title"),description:J,image:this._resolveRelativeURL(C.getAttribute("image"),B),link:this._resolveRelativeURL(C.getAttribute("link"),B),icon:this._resolveRelativeURL(C.getAttribute("icon"),B),color:C.getAttribute("color"),textColor:C.getAttribute("textColor"),hoverText:C.getAttribute("hoverText"),classname:C.getAttribute("classname"),tapeImage:C.getAttribute("tapeImage"),tapeRepeat:C.getAttribute("tapeRepeat"),caption:C.getAttribute("caption"),eventID:C.getAttribute("eventID")});
-I._node=C;
-I.getProperty=function(L){return this._node.getAttribute(L);
-};
-I.setWikiInfo(G,K);
-this._events.add(I);
-H=true;
-}C=C.nextSibling;
-}if(H){this._fire("onAddMany",[]);
-}};
-Timeline.DefaultEventSource.prototype.loadJSON=function(F,B){var C=this._getBaseURL(B);
+Timeline.DefaultEventSource.prototype.loadXML=function(G,A){var C=this._getBaseURL(A);
+var H=G.documentElement.getAttribute("wiki-url");
+var L=G.documentElement.getAttribute("wiki-section");
+var E=G.documentElement.getAttribute("date-time-format");
+var F=this._events.getUnit().getParser(E);
+var D=G.documentElement.firstChild;
 var I=false;
-if(F&&F.events){var H=("wikiURL" in F)?F.wikiURL:null;
-var K=("wikiSection" in F)?F.wikiSection:null;
-var D=("dateTimeFormat" in F)?F.dateTimeFormat:null;
-var G=this._events.getUnit().getParser(D);
-for(var E=0;
-E<F.events.length;
-E++){var A=F.events[E];
-var J=new Timeline.DefaultEventSource.Event({id:("id" in A)?A.id:undefined,start:G(A.start),end:G(A.end),latestStart:G(A.latestStart),earliestEnd:G(A.earliestEnd),instant:A.isDuration||false,text:A.title,description:A.description,image:this._resolveRelativeURL(A.image,C),link:this._resolveRelativeURL(A.link,C),icon:this._resolveRelativeURL(A.icon,C),color:A.color,textColor:A.textColor,hoverText:A.hoverText,classname:A.classname,tapeImage:A.tapeImage,tapeRepeat:A.tapeRepeat,caption:A.caption,eventID:A.eventID});
-J._obj=A;
-J.getProperty=function(L){return this._obj[L];
-};
-J.setWikiInfo(H,K);
+while(D!=null){if(D.nodeType==1){var K="";
+if(D.firstChild!=null&&D.firstChild.nodeType==3){K=D.firstChild.nodeValue;
+}var B=(D.getAttribute("isDuration")===null&&D.getAttribute("durationEvent")===null)||D.getAttribute("isDuration")=="false"||D.getAttribute("durationEvent")=="false";
+var J=new Timeline.DefaultEventSource.Event({id:D.getAttribute("id"),start:F(D.getAttribute("start")),end:F(D.getAttribute("end")),latestStart:F(D.getAttribute("latestStart")),earliestEnd:F(D.getAttribute("earliestEnd")),instant:B,text:D.getAttribute("title"),description:K,image:this._resolveRelativeURL(D.getAttribute("image"),C),link:this._resolveRelativeURL(D.getAttribute("link"),C),icon:this._resolveRelativeURL(D.getAttribute("icon"),C),color:D.getAttribute("color"),textColor:D.getAttribute("textColor"),hoverText:D.getAttribute("hoverText"),classname:D.getAttribute("classname"),tapeImage:D.getAttribute("tapeImage"),tapeRepeat:D.getAttribute("tapeRepeat"),caption:D.getAttribute("caption"),eventID:D.getAttribute("eventID"),trackNum:D.getAttribute("trackNum")});
+J._node=D;
+J.getProperty=function(M){return this._node.getAttribute(M);
+};
+J.setWikiInfo(H,L);
 this._events.add(J);
 I=true;
-}}if(I){this._fire("onAddMany",[]);
+}D=D.nextSibling;
+}if(I){this._fire("onAddMany",[]);
 }};
-Timeline.DefaultEventSource.prototype.loadSPARQL=function(G,A){var C=this._getBaseURL(A);
-var E="iso8601";
-var F=this._events.getUnit().getParser(E);
-if(G==null){return ;
-}var D=G.documentElement.firstChild;
-while(D!=null&&(D.nodeType!=1||D.nodeName!="results")){D=D.nextSibling;
-}var I=null;
-var L=null;
-if(D!=null){I=D.getAttribute("wiki-url");
-L=D.getAttribute("wiki-section");
-D=D.firstChild;
-}var J=false;
-while(D!=null){if(D.nodeType==1){var B={};
-var H=D.firstChild;
-while(H!=null){if(H.nodeType==1&&H.firstChild!=null&&H.firstChild.nodeType==1&&H.firstChild.firstChild!=null&&H.firstChild.firstChild.nodeType==3){B[H.getAttribute("name")]=H.firstChild.firstChild.nodeValue;
-}H=H.nextSibling;
-}if(B["start"]==null&&B["date"]!=null){B["start"]=B["date"];
-}var K=new Timeline.DefaultEventSource.Event({id:B["id"],start:F(B["start"]),end:F(B["end"]),latestStart:F(B["latestStart"]),earliestEnd:F(B["earliestEnd"]),instant:B["isDuration"]!="true",text:B["title"],description:B["description"],image:this._resolveRelativeURL(B["image"],C),link:this._resolveRelativeURL(B["link"],C),icon:this._resolveRelativeURL(B["icon"],C),color:B["color"],textColor:B["textColor"],hoverText:B["hoverText"],caption:B["caption"],classname:B["classname"],tapeImage:B["tapeImage"],tapeRepeat:B["tapeRepeat"],eventID:B["eventID"]});
-K._bindings=B;
-K.getProperty=function(M){return this._bindings[M];
+Timeline.DefaultEventSource.prototype.loadJSON=function(G,B){var D=this._getBaseURL(B);
+var J=false;
+if(G&&G.events){var I=("wikiURL" in G)?G.wikiURL:null;
+var L=("wikiSection" in G)?G.wikiSection:null;
+var E=("dateTimeFormat" in G)?G.dateTimeFormat:null;
+var H=this._events.getUnit().getParser(E);
+for(var F=0;
+F<G.events.length;
+F++){var A=G.events[F];
+var C=A.isDuration||(A.durationEvent!=null&&!A.durationEvent);
+var K=new Timeline.DefaultEventSource.Event({id:("id" in A)?A.id:undefined,start:H(A.start),end:H(A.end),latestStart:H(A.latestStart),earliestEnd:H(A.earliestEnd),instant:C,text:A.title,description:A.description,image:this._resolveRelativeURL(A.image,D),link:this._resolveRelativeURL(A.link,D),icon:this._resolveRelativeURL(A.icon,D),color:A.color,textColor:A.textColor,hoverText:A.hoverText,classname:A.classname,tapeImage:A.tapeImage,tapeRepeat:A.tapeRepeat,caption:A.caption,eventID:A.eventID,trackNum:A.trackNum});
+K._obj=A;
+K.getProperty=function(M){return this._obj[M];
 };
 K.setWikiInfo(I,L);
 this._events.add(K);
 J=true;
-}D=D.nextSibling;
-}if(J){this._fire("onAddMany",[]);
+}}if(J){this._fire("onAddMany",[]);
+}};
+Timeline.DefaultEventSource.prototype.loadSPARQL=function(H,A){var D=this._getBaseURL(A);
+var F="iso8601";
+var G=this._events.getUnit().getParser(F);
+if(H==null){return ;
+}var E=H.documentElement.firstChild;
+while(E!=null&&(E.nodeType!=1||E.nodeName!="results")){E=E.nextSibling;
+}var J=null;
+var M=null;
+if(E!=null){J=E.getAttribute("wiki-url");
+M=E.getAttribute("wiki-section");
+E=E.firstChild;
+}var K=false;
+while(E!=null){if(E.nodeType==1){var C={};
+var I=E.firstChild;
+while(I!=null){if(I.nodeType==1&&I.firstChild!=null&&I.firstChild.nodeType==1&&I.firstChild.firstChild!=null&&I.firstChild.firstChild.nodeType==3){C[I.getAttribute("name")]=I.firstChild.firstChild.nodeValue;
+}I=I.nextSibling;
+}if(C["start"]==null&&C["date"]!=null){C["start"]=C["date"];
+}var B=(C["isDuration"]===null&&C["durationEvent"]===null)||C["isDuration"]=="false"||C["durationEvent"]=="false";
+var L=new Timeline.DefaultEventSource.Event({id:C["id"],start:G(C["start"]),end:G(C["end"]),latestStart:G(C["latestStart"]),earliestEnd:G(C["earliestEnd"]),instant:B,text:C["title"],description:C["description"],image:this._resolveRelativeURL(C["image"],D),link:this._resolveRelativeURL(C["link"],D),icon:this._resolveRelativeURL(C["icon"],D),color:C["color"],textColor:C["textColor"],hoverText:C["hoverText"],caption:C["caption"],classname:C["classname"],tapeImage:C["tapeImage"],tapeRepeat:C["tapeRepeat"],eventID:C["eventID"],trackNum:C["trackNum"]});
+L._bindings=C;
+L.getProperty=function(N){return this._bindings[N];
+};
+L.setWikiInfo(J,M);
+this._events.add(L);
+K=true;
+}E=E.nextSibling;
+}if(K){this._fire("onAddMany",[]);
 }};
 Timeline.DefaultEventSource.prototype.add=function(A){this._events.add(A);
 this._fire("onAddOne",[A]);
@@ -4176,28 +3562,44 @@
 }else{if(A.substr(0,1)=="/"){return B.substr(0,B.indexOf("/",B.indexOf("://")+3))+A;
 }else{return B+A;
 }}}};
-Timeline.DefaultEventSource.Event=function(A){function C(D){return(A[D]!=null&&A[D]!="")?A[D]:null;
-}var B=(A.id)?A.id.trim():"";
-this._id=B.length>0?B:("e"+Math.floor(Math.random()*1000000));
+Timeline.DefaultEventSource.Event=function(A){function D(E){return(A[E]!=null&&A[E]!="")?A[E]:null;
+}var C=A.id?A.id.trim():"";
+this._id=C.length>0?C:Timeline.EventUtils.getNewEventID();
 this._instant=A.instant||(A.end==null);
 this._start=A.start;
 this._end=(A.end!=null)?A.end:A.start;
 this._latestStart=(A.latestStart!=null)?A.latestStart:(A.instant?this._end:this._start);
-this._earliestEnd=(A.earliestEnd!=null)?A.earliestEnd:(A.instant?this._start:this._end);
-this._eventID=C("eventID");
+this._earliestEnd=(A.earliestEnd!=null)?A.earliestEnd:this._end;
+var B=[];
+if(this._start>this._latestStart){this._latestStart=this._start;
+B.push("start is > latestStart");
+}if(this._start>this._earliestEnd){this._earliestEnd=this._latestStart;
+B.push("start is > earliestEnd");
+}if(this._start>this._end){this._end=this._earliestEnd;
+B.push("start is > end");
+}if(this._latestStart>this._earliestEnd){this._earliestEnd=this._latestStart;
+B.push("latestStart is > earliestEnd");
+}if(this._latestStart>this._end){this._end=this._earliestEnd;
+B.push("latestStart is > end");
+}if(this._earliestEnd>this._end){this._end=this._earliestEnd;
+B.push("earliestEnd is > end");
+}this._eventID=D("eventID");
 this._text=(A.text!=null)?SimileAjax.HTML.deEntify(A.text):"";
-this._description=SimileAjax.HTML.deEntify(A.description);
-this._image=C("image");
-this._link=C("link");
-this._title=C("hoverText");
-this._title=C("caption");
-this._icon=C("icon");
-this._color=C("color");
-this._textColor=C("textColor");
-this._classname=C("classname");
-this._tapeImage=C("tapeImage");
-this._tapeRepeat=C("tapeRepeat");
-this._wikiURL=null;
+if(B.length>0){this._text+=" PROBLEM: "+B.join(", ");
+}this._description=SimileAjax.HTML.deEntify(A.description);
+this._image=D("image");
+this._link=D("link");
+this._title=D("hoverText");
+this._title=D("caption");
+this._icon=D("icon");
+this._color=D("color");
+this._textColor=D("textColor");
+this._classname=D("classname");
+this._tapeImage=D("tapeImage");
+this._tapeRepeat=D("tapeRepeat");
+this._trackNum=D("trackNum");
+if(this._trackNum!=null){this._trackNum=parseInt(this._trackNum);
+}this._wikiURL=null;
 this._wikiSection=null;
 };
 Timeline.DefaultEventSource.Event.prototype={getID:function(){return this._id;
@@ -4218,6 +3620,7 @@
 },getClassName:function(){return this._classname;
 },getTapeImage:function(){return this._tapeImage;
 },getTapeRepeat:function(){return this._tapeRepeat;
+},getTrackNum:function(){return this._trackNum;
 },getProperty:function(A){return null;
 },getWikiURL:function(){return this._wikiURL;
 },getWikiSection:function(){return this._wikiSection;
@@ -4290,8 +3693,10 @@
 }return new B();
 };
 Timeline.ClassicTheme._Impl=function(){this.firstDayOfWeek=0;
+this.autoWidth=false;
+this.autoWidthAnimationTime=1000;
 this.ether={backgroundColors:[],highlightOpacity:50,interval:{line:{show:true,opacity:25},weekend:{opacity:30},marker:{hAlign:"Bottom",vAlign:"Right"}}};
-this.event={track:{height:10,gap:2},overviewTrack:{offset:20,tickHeight:6,height:2,gap:1},tape:{height:4},instant:{icon:Timeline.urlPrefix+"data/timeline/dull-blue-circle.png",iconWidth:10,iconHeight:10,impreciseOpacity:20},duration:{impreciseOpacity:20},label:{backgroundOpacity:50,offsetFromLine:3},highlightColors:[],bubble:{width:250,height:125,titleStyler:function(A){A.className="timeline-event-bubble-title";
+this.event={track:{height:10,gap:2,offset:2,autoWidthMargin:1.5},overviewTrack:{offset:20,tickHeight:6,height:2,gap:1,autoWidthMargin:5},tape:{height:4},instant:{icon:Timeline.urlPrefix+"data/timeline/dull-blue-circle.png",iconWidth:10,iconHeight:10,impreciseOpacity:20,impreciseIconMargin:3},duration:{impreciseOpacity:20},label:{backgroundOpacity:50,offsetFromLine:3},highlightColors:["#FFFF00","#FFC000","#FF0000","#0000FF"],highlightLabelBackground:false,bubble:{width:250,maxHeight:0,titleStyler:function(A){A.className="timeline-event-bubble-title";
 },bodyStyler:function(A){A.className="timeline-event-bubble-body";
 },imageStyler:function(A){A.className="timeline-event-bubble-image";
 },wikiStyler:function(A){A.className="timeline-event-bubble-wiki";
@@ -4303,35 +3708,35 @@
 
 /* timeline.js */
 Timeline.strings={};
-Timeline.getDefaultLocale=function(){return Timeline.clientLocale;
-};
-Timeline.create=function(C,B,A,D){return new Timeline._Impl(C,B,A,D);
-};
 Timeline.HORIZONTAL=0;
 Timeline.VERTICAL=1;
 Timeline._defaultTheme=null;
+Timeline.getDefaultLocale=function(){return Timeline.clientLocale;
+};
+Timeline.create=function(D,C,B,F){if(Timeline.timelines==null){Timeline.timelines=[];
+}var A=Timeline.timelines.length;
+Timeline.timelines[A]=null;
+var E=new Timeline._Impl(D,C,B,F,A);
+Timeline.timelines[A]=E;
+return E;
+};
 Timeline.createBandInfo=function(D){var E=("theme" in D)?D.theme:Timeline.getDefaultTheme();
 var B=("eventSource" in D)?D.eventSource:null;
-var F={interval:SimileAjax.DateTime.gregorianUnitLengths[D.intervalUnit],pixelsPerInterval:D.intervalPixels};
-if("startsOn" in D||"endsOn" in D){if("startsOn" in D){F.startsOn=D.startsOn;
-}if("endsOn" in D){F.endsOn=D.endsOn;
-}}else{if("date" in D){F.centersOn=D.date;
-}else{F.centersOn=new Date();
-}}var G=new Timeline.LinearEther(F);
-var H=new Timeline.GregorianEtherPainter({unit:D.intervalUnit,multiple:("multiple" in D)?D.multiple:1,theme:E,align:("align" in D)?D.align:undefined});
-var J={showText:("showEventText" in D)?D.showEventText:true,theme:E};
-if("eventPainterParams" in D){for(var A in D.eventPainterParams){J[A]=D.eventPainterParams[A];
-}}if("trackHeight" in D){J.trackHeight=D.trackHeight;
-}if("trackGap" in D){J.trackGap=D.trackGap;
-}var I=("overview" in D&&D.overview)?"overview":("layout" in D?D.layout:"original");
+var F=new Timeline.LinearEther({centersOn:("date" in D)?D.date:new Date(),interval:SimileAjax.DateTime.gregorianUnitLengths[D.intervalUnit],pixelsPerInterval:D.intervalPixels,theme:E});
+var G=new Timeline.GregorianEtherPainter({unit:D.intervalUnit,multiple:("multiple" in D)?D.multiple:1,theme:E,align:("align" in D)?D.align:undefined});
+var I={showText:("showEventText" in D)?D.showEventText:true,theme:E};
+if("eventPainterParams" in D){for(var A in D.eventPainterParams){I[A]=D.eventPainterParams[A];
+}}if("trackHeight" in D){I.trackHeight=D.trackHeight;
+}if("trackGap" in D){I.trackGap=D.trackGap;
+}var H=("overview" in D&&D.overview)?"overview":("layout" in D?D.layout:"original");
 var C;
-if("eventPainter" in D){C=new D.eventPainter(J);
-}else{switch(I){case"overview":C=new Timeline.OverviewEventPainter(J);
+if("eventPainter" in D){C=new D.eventPainter(I);
+}else{switch(H){case"overview":C=new Timeline.OverviewEventPainter(I);
 break;
-case"detailed":C=new Timeline.DetailedEventPainter(J);
+case"detailed":C=new Timeline.DetailedEventPainter(I);
 break;
-default:C=new Timeline.OriginalEventPainter(J);
-}}return{width:D.width,eventSource:B,timeZone:("timeZone" in D)?D.timeZone:0,ether:G,etherPainter:H,eventPainter:C,theme:E,zoomIndex:("zoomIndex" in D)?D.zoomIndex:0,zoomSteps:("zoomSteps" in D)?D.zoomSteps:null};
+default:C=new Timeline.OriginalEventPainter(I);
+}}return{width:D.width,eventSource:B,timeZone:("timeZone" in D)?D.timeZone:0,ether:F,etherPainter:G,eventPainter:C,theme:E,zoomIndex:("zoomIndex" in D)?D.zoomIndex:0,zoomSteps:("zoomSteps" in D)?D.zoomSteps:null};
 };
 Timeline.createHotZoneBandInfo=function(D){var E=("theme" in D)?D.theme:Timeline.getDefaultTheme();
 var B=("eventSource" in D)?D.eventSource:null;
@@ -4370,11 +3775,18 @@
 };
 SimileAjax.XmlHttp.get(url,fError,fDone);
 };
-Timeline._Impl=function(C,B,A,D){SimileAjax.WindowManager.initialize();
-this._containerDiv=C;
-this._bandInfos=B;
-this._orientation=A==null?Timeline.HORIZONTAL:A;
-this._unit=(D!=null)?D:SimileAjax.NativeDateUnit;
+Timeline.getTimelineFromID=function(A){return Timeline.timelines[A];
+};
+Timeline._Impl=function(D,C,B,E,A){SimileAjax.WindowManager.initialize();
+this._containerDiv=D;
+this._bandInfos=C;
+this._orientation=B==null?Timeline.HORIZONTAL:B;
+this._unit=(E!=null)?E:SimileAjax.NativeDateUnit;
+this._starting=true;
+this._autoResizing=false;
+this.autoWidth=C&&C[0]&&C[0].theme&&C[0].theme.autoWidth;
+this.autoWidthAnimationTime=C&&C[0]&&C[0].theme&&C[0].theme.autoWidthAnimationTime;
+this.timelineID=A;
 this._initialize();
 };
 Timeline._Impl.prototype.dispose=function(){for(var A=0;
@@ -4383,12 +3795,17 @@
 }this._bands=null;
 this._bandInfos=null;
 this._containerDiv.innerHTML="";
+Timeline.timelines[this.timelineID]=null;
 };
 Timeline._Impl.prototype.getBandCount=function(){return this._bands.length;
 };
 Timeline._Impl.prototype.getBand=function(A){return this._bands[A];
 };
-Timeline._Impl.prototype.layout=function(){this._distributeWidths();
+Timeline._Impl.prototype.finishedEventLoading=function(){this._autoWidthCheck(true);
+this._starting=false;
+};
+Timeline._Impl.prototype.layout=function(){this._autoWidthCheck(true);
+this._distributeWidths();
 };
 Timeline._Impl.prototype.paint=function(){for(var A=0;
 A<this._bands.length;
@@ -4410,6 +3827,8 @@
 };
 Timeline._Impl.prototype.getUnit=function(){return this._unit;
 };
+Timeline._Impl.prototype.getWidthStyle=function(){return this._orientation==Timeline.HORIZONTAL?"height":"width";
+};
 Timeline._Impl.prototype.loadXML=function(B,D){var A=this;
 var E=function(H,F,G){alert("Failed to load data xml from "+B+"\n"+H);
 A.hideLoadingMessage();
@@ -4434,55 +3853,83 @@
 window.setTimeout(function(){SimileAjax.XmlHttp.get(url,fError,fDone);
 },0);
 };
-Timeline._Impl.prototype._initialize=function(){var E=this._containerDiv;
-var G=E.ownerDocument;
-E.className=E.className.split(" ").concat("timeline-container").join(" ");
-var A=(this.isHorizontal())?"horizontal":"vertical";
-E.className+=" timeline-"+A;
-while(E.firstChild){E.removeChild(E.firstChild);
-}var B=SimileAjax.Graphics.createTranslucentImage(Timeline.urlPrefix+(this.isHorizontal()?"data/timeline/copyright-vertical.png":"data/timeline/copyright.png"));
-B.className="timeline-copyright";
-B.title="Timeline (c) SIMILE - http://simile.mit.edu/timeline/";
-SimileAjax.DOM.registerEvent(B,"click",function(){window.location="http://simile.mit.edu/timeline/";
+Timeline._Impl.prototype._autoWidthScrollListener=function(A){A.getTimeline()._autoWidthCheck(false);
+};
+Timeline._Impl.prototype._autoWidthCheck=function(C){var E=this;
+var B=E._starting;
+var D=0;
+function A(){var H=E.getWidthStyle();
+if(B){E._containerDiv.style[H]=D+"px";
+}else{E._autoResizing=true;
+var G={};
+G[H]=D+"px";
+SimileAjax.jQuery(E._containerDiv).animate(G,E.autoWidthAnimationTime,"linear",function(){E._autoResizing=false;
 });
-E.appendChild(B);
+}}function F(){var I=0;
+var G=E.getPixelWidth();
+if(E._autoResizing){return ;
+}for(var H=0;
+H<E._bands.length;
+H++){E._bands[H].checkAutoWidth();
+I+=E._bandInfos[H].width;
+}if(I>G||C){D=I;
+A();
+E._distributeWidths();
+}}if(!E.autoWidth){return ;
+}F();
+};
+Timeline._Impl.prototype._initialize=function(){var H=this._containerDiv;
+var E=H.ownerDocument;
+H.className=H.className.split(" ").concat("timeline-container").join(" ");
+var B=(this.isHorizontal())?"horizontal":"vertical";
+H.className+=" timeline-"+B;
+while(H.firstChild){H.removeChild(H.firstChild);
+}var A=SimileAjax.Graphics.createTranslucentImage(Timeline.urlPrefix+(this.isHorizontal()?"data/timeline/copyright-vertical.png":"data/timeline/copyright.png"));
+A.className="timeline-copyright";
+A.title="Timeline &copy; SIMILE - http://simile.mit.edu/timeline/";
+SimileAjax.DOM.registerEvent(A,"click",function(){window.location="http://simile.mit.edu/timeline/";
+});
+H.appendChild(A);
 this._bands=[];
 for(var C=0;
 C<this._bandInfos.length;
-C++){var F=this._bandInfos[C];
-var D=F.bandClass||Timeline._Band;
-var H=new D(this,F,C);
-this._bands.push(H);
+C++){var G=new Timeline._Band(this,this._bandInfos[C],C);
+this._bands.push(G);
 }this._distributeWidths();
 for(var C=0;
 C<this._bandInfos.length;
 C++){var F=this._bandInfos[C];
 if("syncWith" in F){this._bands[C].setSyncWithBand(this._bands[F.syncWith],("highlight" in F)?F.highlight:false);
-}}var I=SimileAjax.Graphics.createMessageBubble(G);
-I.containerDiv.className="timeline-message-container";
-E.appendChild(I.containerDiv);
-I.contentDiv.className="timeline-message";
-I.contentDiv.innerHTML="<img src='"+Timeline.urlPrefix+"data/timeline/progress-running.gif' /> Loading...";
-this.showLoadingMessage=function(){I.containerDiv.style.display="block";
-};
-this.hideLoadingMessage=function(){I.containerDiv.style.display="none";
+}}if(this.autoWidth){for(var C=0;
+C<this._bands.length;
+C++){this._bands[C].addOnScrollListener(this._autoWidthScrollListener);
+}}var D=SimileAjax.Graphics.createMessageBubble(E);
+D.containerDiv.className="timeline-message-container";
+H.appendChild(D.containerDiv);
+D.contentDiv.className="timeline-message";
+D.contentDiv.innerHTML="<img src='"+Timeline.urlPrefix+"data/timeline/progress-running.gif' /> Loading...";
+this.showLoadingMessage=function(){D.containerDiv.style.display="block";
+};
+this.hideLoadingMessage=function(){D.containerDiv.style.display="none";
 };
 };
 Timeline._Impl.prototype._distributeWidths=function(){var B=this.getPixelLength();
 var A=this.getPixelWidth();
-var D=0;
+var C=0;
 for(var E=0;
 E<this._bands.length;
 E++){var I=this._bands[E];
 var J=this._bandInfos[E];
 var F=J.width;
-var H=F.indexOf("%");
+var D;
+if(typeof F=="string"){var H=F.indexOf("%");
 if(H>0){var G=parseInt(F.substr(0,H));
-var C=G*A/100;
-}else{var C=parseInt(F);
-}I.setBandShiftAndWidth(D,C);
+D=Math.round(G*A/100);
+}else{D=parseInt(F);
+}}else{D=F;
+}I.setBandShiftAndWidth(C,D);
 I.setViewLength(B);
-D+=C;
+C+=D;
 }};
 Timeline._Impl.prototype.zoom=function(G,B,F,D){var C=new RegExp("^timeline-band-([0-9]+)$");
 var E=null;
@@ -4491,332 +3938,6 @@
 }if(E!=null){this._bands[E].zoom(G,B,F,D);
 }this.paint();
 };
-Timeline._Band=function(B,C,A){if(B!==undefined){this.initialize(B,C,A);
-}};
-Timeline._Band.prototype.initialize=function(F,G,B){this._timeline=F;
-this._bandInfo=G;
-this._index=B;
-this._locale=("locale" in G)?G.locale:Timeline.getDefaultLocale();
-this._timeZone=("timeZone" in G)?G.timeZone:0;
-this._labeller=("labeller" in G)?G.labeller:(("createLabeller" in F.getUnit())?F.getUnit().createLabeller(this._locale,this._timeZone):new Timeline.GregorianDateLabeller(this._locale,this._timeZone));
-this._theme=G.theme;
-this._zoomIndex=("zoomIndex" in G)?G.zoomIndex:0;
-this._zoomSteps=("zoomSteps" in G)?G.zoomSteps:null;
-this._dragging=false;
-this._changing=false;
-this._originalScrollSpeed=5;
-this._scrollSpeed=this._originalScrollSpeed;
-this._onScrollListeners=[];
-var A=this;
-this._syncWithBand=null;
-this._syncWithBandHandler=function(H){A._onHighlightBandScroll();
-};
-this._selectorListener=function(H){A._onHighlightBandScroll();
-};
-var D=this._timeline.getDocument().createElement("div");
-D.className="timeline-band-input";
-this._timeline.addDiv(D);
-this._keyboardInput=document.createElement("input");
-this._keyboardInput.type="text";
-D.appendChild(this._keyboardInput);
-SimileAjax.DOM.registerEventWithObject(this._keyboardInput,"keydown",this,"_onKeyDown");
-SimileAjax.DOM.registerEventWithObject(this._keyboardInput,"keyup",this,"_onKeyUp");
-this._div=this._timeline.getDocument().createElement("div");
-this._div.id="timeline-band-"+B;
-this._div.className="timeline-band timeline-band-"+B;
-this._timeline.addDiv(this._div);
-SimileAjax.DOM.registerEventWithObject(this._div,"mousedown",this,"_onMouseDown");
-SimileAjax.DOM.registerEventWithObject(this._div,"mousemove",this,"_onMouseMove");
-SimileAjax.DOM.registerEventWithObject(this._div,"mouseup",this,"_onMouseUp");
-SimileAjax.DOM.registerEventWithObject(this._div,"mouseout",this,"_onMouseOut");
-SimileAjax.DOM.registerEventWithObject(this._div,"dblclick",this,"_onDblClick");
-var E=this._theme!=null?this._theme.mouseWheel:"scroll";
-if(E==="zoom"||E==="scroll"||this._zoomSteps){if(SimileAjax.Platform.browser.isFirefox){SimileAjax.DOM.registerEventWithObject(this._div,"DOMMouseScroll",this,"_onMouseScroll");
-}else{SimileAjax.DOM.registerEventWithObject(this._div,"mousewheel",this,"_onMouseScroll");
-}}this._innerDiv=this._timeline.getDocument().createElement("div");
-this._innerDiv.className="timeline-band-inner";
-this._div.appendChild(this._innerDiv);
-this._ether=G.ether;
-G.ether.initialize(this,F);
-this._etherPainter=G.etherPainter;
-G.etherPainter.initialize(this,F);
-this._eventSource=G.eventSource;
-if(this._eventSource){this._eventListener={onAddMany:function(){A._onAddMany();
-},onClear:function(){A._onClear();
-}};
-this._eventSource.addListener(this._eventListener);
-}this._eventPainter=G.eventPainter;
-G.eventPainter.initialize(this,F);
-this._decorators=("decorators" in G)?G.decorators:[];
-for(var C=0;
-C<this._decorators.length;
-C++){this._decorators[C].initialize(this,F);
-}};
-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;
-};
-Timeline._Band.prototype.addOnScrollListener=function(A){this._onScrollListeners.push(A);
-};
-Timeline._Band.prototype.removeOnScrollListener=function(B){for(var A=0;
-A<this._onScrollListeners.length;
-A++){if(this._onScrollListeners[A]==B){this._onScrollListeners.splice(A,1);
-break;
-}}};
-Timeline._Band.prototype.setSyncWithBand=function(B,A){if(this._syncWithBand){this._syncWithBand.removeOnScrollListener(this._syncWithBandHandler);
-}this._syncWithBand=B;
-this._syncWithBand.addOnScrollListener(this._syncWithBandHandler);
-this._highlight=A;
-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(A,D){var C=this._keyboardInput.parentNode;
-var B=A+Math.floor(D/2);
-if(this._timeline.isHorizontal()){this._div.style.top=A+"px";
-this._div.style.height=D+"px";
-C.style.top=B+"px";
-C.style.left="-1em";
-}else{this._div.style.left=A+"px";
-this._div.style.width=D+"px";
-C.style.left=B+"px";
-C.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(A){this._viewLength=A;
-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(A){if(!this._changing){this._moveEther(Math.round(-this._ether.dateToPixelOffset(A)));
-}};
-Timeline._Band.prototype.setMaxVisibleDate=function(A){if(!this._changing){this._moveEther(Math.round(this._viewLength-this._ether.dateToPixelOffset(A)));
-}};
-Timeline._Band.prototype.setCenterVisibleDate=function(A){if(!this._changing){this._moveEther(Math.round(this._viewLength/2-this._ether.dateToPixelOffset(A)));
-}};
-Timeline._Band.prototype.dateToPixelOffset=function(A){return this._ether.dateToPixelOffset(A)-this._viewOffset;
-};
-Timeline._Band.prototype.pixelOffsetToDate=function(A){return this._ether.pixelOffsetToDate(A+this._viewOffset);
-};
-Timeline._Band.prototype.createLayerDiv=function(D,B){var C=this._timeline.getDocument().createElement("div");
-C.className="timeline-band-layer"+(typeof B=="string"?(" "+B):"");
-C.style.zIndex=D;
-this._innerDiv.appendChild(C);
-var A=this._timeline.getDocument().createElement("div");
-A.className="timeline-band-layer-inner";
-if(SimileAjax.Platform.browser.isIE){A.style.cursor="move";
-}else{A.style.cursor="-moz-grab";
-}C.appendChild(A);
-return A;
-};
-Timeline._Band.prototype.removeLayerDiv=function(A){this._innerDiv.removeChild(A.parentNode);
-};
-Timeline._Band.prototype.scrollToCenter=function(B,C){var A=this._ether.dateToPixelOffset(B);
-if(A<-this._viewLength/2){this.setCenterVisibleDate(this.pixelOffsetToDate(A+this._viewLength));
-}else{if(A>3*this._viewLength/2){this.setCenterVisibleDate(this.pixelOffsetToDate(A-this._viewLength));
-}}this._autoScroll(Math.round(this._viewLength/2-this._ether.dateToPixelOffset(B)),C);
-};
-Timeline._Band.prototype.showBubbleForEvent=function(C){var A=this.getEventSource().getEvent(C);
-if(A){var B=this;
-this.scrollToCenter(A.getStart(),function(){B._eventPainter.showBubble(A);
-});
-}};
-Timeline._Band.prototype.zoom=function(F,A,E,C){if(!this._zoomSteps){return ;
-}A+=this._viewOffset;
-var D=this._ether.pixelOffsetToDate(A);
-var B=this._ether.zoom(F);
-this._etherPainter.zoom(B);
-this._moveEther(Math.round(-this._ether.dateToPixelOffset(D)));
-this._moveEther(A);
-};
-Timeline._Band.prototype._onMouseDown=function(B,A,C){this.closeBubble();
-this._dragging=true;
-this._dragX=A.clientX;
-this._dragY=A.clientY;
-};
-Timeline._Band.prototype._onMouseMove=function(D,A,E){if(this._dragging){var C=A.clientX-this._dragX;
-var B=A.clientY-this._dragY;
-this._dragX=A.clientX;
-this._dragY=A.clientY;
-this._moveEther(this._timeline.isHorizontal()?C:B);
-this._positionHighlight();
-}};
-Timeline._Band.prototype._onMouseUp=function(B,A,C){this._dragging=false;
-this._keyboardInput.focus();
-};
-Timeline._Band.prototype._onMouseOut=function(B,A,D){var C=SimileAjax.DOM.getEventRelativeCoordinates(A,B);
-C.x+=this._viewOffset;
-if(C.x<0||C.x>B.offsetWidth||C.y<0||C.y>B.offsetHeight){this._dragging=false;
-}};
-Timeline._Band.prototype._onMouseScroll=function(G,I,E){var A=new Date();
-A=A.getTime();
-if(!this._lastScrollTime||((A-this._lastScrollTime)>50)){this._lastScrollTime=A;
-var H=0;
-if(I.wheelDelta){H=I.wheelDelta/120;
-}else{if(I.detail){H=-I.detail/3;
-}}var F=this._theme.mouseWheel;
-if(this._zoomSteps||F==="zoom"){var D=SimileAjax.DOM.getEventRelativeCoordinates(I,G);
-if(H!=0){var C;
-if(H>0){C=true;
-}if(H<0){C=false;
-}this._timeline.zoom(C,D.x,D.y,G);
-}}else{if(F==="scroll"){var B=50*(H<0?-1:1);
-this._moveEther(B);
-}}}if(I.stopPropagation){I.stopPropagation();
-}I.cancelBubble=true;
-if(I.preventDefault){I.preventDefault();
-}I.returnValue=false;
-};
-Timeline._Band.prototype._onDblClick=function(B,A,D){var C=SimileAjax.DOM.getEventRelativeCoordinates(A,B);
-var E=C.x-(this._viewLength/2-this._viewOffset);
-this._autoScroll(-E);
-};
-Timeline._Band.prototype._onKeyDown=function(B,A,C){if(!this._dragging){switch(A.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();
-SimileAjax.DOM.cancelEvent(A);
-return false;
-}return true;
-};
-Timeline._Band.prototype._onKeyUp=function(B,A,C){if(!this._dragging){this._scrollSpeed=this._originalScrollSpeed;
-switch(A.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();
-SimileAjax.DOM.cancelEvent(A);
-return false;
-}return true;
-};
-Timeline._Band.prototype._autoScroll=function(D,C){var A=this;
-var B=SimileAjax.Graphics.createAnimation(function(E,F){A._moveEther(F);
-},0,D,1000,C);
-B.run();
-};
-Timeline._Band.prototype._moveEther=function(A){this.closeBubble();
-this._viewOffset+=A;
-this._ether.shiftPixels(-A);
-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 A=0;
-A<this._onScrollListeners.length;
-A++){this._onScrollListeners[A](this);
-}};
-Timeline._Band.prototype._setSyncWithBandDate=function(){if(this._syncWithBand){var A=this._ether.pixelOffsetToDate(this.getViewLength()/2);
-this._syncWithBand.setCenterVisibleDate(A);
-}};
-Timeline._Band.prototype._onHighlightBandScroll=function(){if(this._syncWithBand){var A=this._syncWithBand.getCenterVisibleDate();
-var B=this._ether.dateToPixelOffset(A);
-this._moveEther(Math.round(this._viewLength/2-B));
-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 A=this._syncWithBand.getMinVisibleDate();
-var B=this._syncWithBand.getMaxVisibleDate();
-if(this._highlight){this._etherPainter.setHighlight(A,B);
-}}};
-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 A=0;
-A<this._decorators.length;
-A++){this._decorators[A].paint();
-}};
-Timeline._Band.prototype._softPaintDecorators=function(){for(var A=0;
-A<this._decorators.length;
-A++){this._decorators[A].softPaint();
-}};
-Timeline._Band.prototype.closeBubble=function(){SimileAjax.WindowManager.cancelPopups();
-};
 
 
 /* units.js */
@@ -4849,1071 +3970,5 @@
 };
 Timeline.NativeDateUnit.change=function(A,B){return new Date(A.getTime()+B);
 };
-/*==================================================
- *  Timeline
- *==================================================
- */
 
-Timeline.strings = {}; // localization string tables
-
-Timeline.getDefaultLocale = function() {
-    return Timeline.clientLocale;
-};
-
-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 etherParams = {
-        interval:           SimileAjax.DateTime.gregorianUnitLengths[params.intervalUnit],
-        pixelsPerInterval:  params.intervalPixels
-    };
-    if ('startsOn' in params || 'endsOn' in params) {
-      if ('startsOn' in params) {
-	etherParams.startsOn = params.startsOn;
-      }
-      if ('endsOn' in params) {
-	etherParams.endsOn = params.endsOn;
-      }
-    } else {
-      if ('date' in params) {
-	etherParams.centersOn = params.date;
-      } else {
-	etherParams.centersOn = new Date();
-      }
-    }
-    var ether = new Timeline.LinearEther(etherParams);
-
-    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 eventPainterParams = {
-        showText:   ("showEventText" in params) ? params.showEventText : true,
-        theme:      theme
-    };
-    // pass in custom parameters for the event painter
-    if ("eventPainterParams" in params) {
-        for (var prop in params.eventPainterParams) {
-            eventPainterParams[prop] = params.eventPainterParams[prop];
-        }
-    }
-
-    if ("trackHeight" in params) {
-        eventPainterParams.trackHeight = params.trackHeight;
-    }
-    if ("trackGap" in params) {
-        eventPainterParams.trackGap = params.trackGap;
-    }
-
-    var layout = ("overview" in params && params.overview) ? "overview" : ("layout" in params ? params.layout : "original");
-    var eventPainter;
-    if ("eventPainter" in params) {
-        eventPainter = new params.eventPainter(eventPainterParams);
-    } else {
-        switch (layout) {
-            case "overview" :
-                eventPainter = new Timeline.OverviewEventPainter(eventPainterParams);
-                break;
-            case "detailed" :
-                eventPainter = new Timeline.DetailedEventPainter(eventPainterParams);
-                break;
-            default:
-                eventPainter = new Timeline.OriginalEventPainter(eventPainterParams);
-        }
-    }
-
-    return {
-        width:          params.width,
-        eventSource:    eventSource,
-        timeZone:       ("timeZone" in params) ? params.timeZone : 0,
-        ether:          ether,
-        etherPainter:   etherPainter,
-        eventPainter:   eventPainter,
-        theme:          theme,
-        zoomIndex:      ("zoomIndex" in params) ? params.zoomIndex : 0,
-        zoomSteps:      ("zoomSteps" in params) ? params.zoomSteps : null
-    };
-};
-
-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:           SimileAjax.DateTime.gregorianUnitLengths[params.intervalUnit],
-        pixelsPerInterval:  params.intervalPixels,
-        zones:              params.zones,
-        theme:              theme
-    });
-
-    var etherPainter = new Timeline.HotZoneGregorianEtherPainter({
-        unit:       params.intervalUnit,
-        zones:      params.zones,
-        theme:      theme,
-        align:      ("align" in params) ? params.align : undefined
-    });
-
-    var eventPainterParams = {
-        showText:   ("showEventText" in params) ? params.showEventText : true,
-        theme:      theme
-    };
-    // pass in custom parameters for the event painter
-    if ("eventPainterParams" in params) {
-        for (var prop in params.eventPainterParams) {
-            eventPainterParams[prop] = params.eventPainterParams[prop];
-        }
-    }
-    if ("trackHeight" in params) {
-        eventPainterParams.trackHeight = params.trackHeight;
-    }
-    if ("trackGap" in params) {
-        eventPainterParams.trackGap = params.trackGap;
-    }
-
-    var layout = ("overview" in params && params.overview) ? "overview" : ("layout" in params ? params.layout : "original");
-    var eventPainter;
-    if ("eventPainter" in params) {
-        eventPainter = new params.eventPainter(eventPainterParams);
-    } else {
-        switch (layout) {
-            case "overview" :
-                eventPainter = new Timeline.OverviewEventPainter(eventPainterParams);
-                break;
-            case "detailed" :
-                eventPainter = new Timeline.DetailedEventPainter(eventPainterParams);
-                break;
-            default:
-                eventPainter = new Timeline.OriginalEventPainter(eventPainterParams);
-        }
-    }
-    return {
-        width:          params.width,
-        eventSource:    eventSource,
-        timeZone:       ("timeZone" in params) ? params.timeZone : 0,
-        ether:          ether,
-        etherPainter:   etherPainter,
-        eventPainter:   eventPainter,
-        theme:          theme,
-        zoomIndex:      ("zoomIndex" in params) ? params.zoomIndex : 0,
-        zoomSteps:      ("zoomSteps" in params) ? params.zoomSteps : null
-    };
-};
-
-Timeline.getDefaultTheme = function() {
-    if (Timeline._defaultTheme == null) {
-        Timeline._defaultTheme = Timeline.ClassicTheme.create(Timeline.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);
-    };
-    SimileAjax.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) {
-        f(eval('(' + xmlhttp.responseText + ')'), url);
-    };
-    SimileAjax.XmlHttp.get(url, fError, fDone);
-};
-
-
-Timeline._Impl = function(elmt, bandInfos, orientation, unit) {
-    SimileAjax.WindowManager.initialize();
-
-    this._containerDiv = elmt;
-
-    this._bandInfos = bandInfos;
-    this._orientation = orientation == null ? Timeline.HORIZONTAL : orientation;
-    this._unit = (unit != null) ? unit : SimileAjax.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() { SimileAjax.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 {
-            f(eval('(' + xmlhttp.responseText + ')'), url);
-        } finally {
-            tl.hideLoadingMessage();
-        }
-    };
-
-    this.showLoadingMessage();
-    window.setTimeout(function() { SimileAjax.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(" ");
-
-	/*
-	 * Set css-class on container div that will define orientation
-	 */
-	var orientation = (this.isHorizontal()) ? 'horizontal' : 'vertical'
-	containerDiv.className +=' timeline-'+orientation;
-
-
-    while (containerDiv.firstChild) {
-        containerDiv.removeChild(containerDiv.firstChild);
-    }
-
-    /*
-     *  inserting copyright and link to simile
-     */
-    var elmtCopyright = SimileAjax.Graphics.createTranslucentImage(Timeline.urlPrefix + (this.isHorizontal() ? "data/timeline/copyright-vertical.png" : "data/timeline/copyright.png"));
-    elmtCopyright.className = "timeline-copyright";
-    elmtCopyright.title = "Timeline (c) SIMILE - http://simile.mit.edu/timeline/";
-    SimileAjax.DOM.registerEvent(elmtCopyright, "click", function() { window.location = "http://simile.mit.edu/timeline/"; });
-    containerDiv.appendChild(elmtCopyright);
-
-    /*
-     *  creating bands
-     */
-    this._bands = [];
-    for (var i = 0; i < this._bandInfos.length; i++) {
-        var bandInfo = this._bandInfos[i];
-        var bandClass = bandInfo.bandClass || Timeline._Band;
-        var band = new bandClass(this, bandInfo, i);
-        this._bands.push(band);
-    }
-    this._distributeWidths();
-
-    /*
-     *  sync'ing bands
-     */
-    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
-            );
-        }
-    }
-
-    /*
-     *  creating loading UI
-     */
-    var message = SimileAjax.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 + "data/timeline/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._Impl.prototype.zoom = function (zoomIn, x, y, target) {
-  var matcher = new RegExp("^timeline-band-([0-9]+)$");
-  var bandIndex = null;
-
-  var result = matcher.exec(target.id);
-  if (result) {
-    bandIndex = parseInt(result[1]);
-  }
-
-  if (bandIndex != null) {
-    this._bands[bandIndex].zoom(zoomIn, x, y, target);
-  }
-
-  this.paint();
-};
-
-/*==================================================
- *  Band
- *==================================================
- */
-Timeline._Band = function(timeline, bandInfo, index) {
-    // hack for easier subclassing
-    if (timeline !== undefined) {
-        this.initialize(timeline, bandInfo, index);
-    }
-};
-
-Timeline._Band.prototype.initialize = function(timeline, bandInfo, index) {
-    this._timeline = timeline;
-    this._bandInfo = bandInfo;
-    this._index = index;
-
-    this._locale = ("locale" in bandInfo) ? bandInfo.locale : Timeline.getDefaultLocale();
-    this._timeZone = ("timeZone" in bandInfo) ? bandInfo.timeZone : 0;
-    this._labeller = ("labeller" in bandInfo) ? bandInfo.labeller :
-        (("createLabeller" in timeline.getUnit()) ?
-            timeline.getUnit().createLabeller(this._locale, this._timeZone) :
-            new Timeline.GregorianDateLabeller(this._locale, this._timeZone));
-    this._theme = bandInfo.theme;
-    this._zoomIndex = ("zoomIndex" in bandInfo) ? bandInfo.zoomIndex : 0;
-    this._zoomSteps = ("zoomSteps" in bandInfo) ? bandInfo.zoomSteps : null;
-
-    this._dragging = false;
-    this._changing = false;
-    this._originalScrollSpeed = 5; // pixels
-    this._scrollSpeed = this._originalScrollSpeed;
-    this._onScrollListeners = [];
-
-    var b = this;
-    this._syncWithBand = null;
-    this._syncWithBandHandler = function(band) {
-        b._onHighlightBandScroll();
-    };
-    this._selectorListener = function(band) {
-        b._onHighlightBandScroll();
-    };
-
-    /*
-     *  Install a textbox to capture keyboard events
-     */
-    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);
-    SimileAjax.DOM.registerEventWithObject(this._keyboardInput, "keydown", this, "_onKeyDown");
-    SimileAjax.DOM.registerEventWithObject(this._keyboardInput, "keyup", this, "_onKeyUp");
-
-    /*
-     *  The band's outer most div that slides with respect to the timeline's div
-     */
-    this._div = this._timeline.getDocument().createElement("div");
-    this._div.id = "timeline-band-" + index;
-    this._div.className = "timeline-band timeline-band-" + index;
-    this._timeline.addDiv(this._div);
-
-    SimileAjax.DOM.registerEventWithObject(this._div, "mousedown", this, "_onMouseDown");
-    SimileAjax.DOM.registerEventWithObject(this._div, "mousemove", this, "_onMouseMove");
-    SimileAjax.DOM.registerEventWithObject(this._div, "mouseup", this, "_onMouseUp");
-    SimileAjax.DOM.registerEventWithObject(this._div, "mouseout", this, "_onMouseOut");
-    SimileAjax.DOM.registerEventWithObject(this._div, "dblclick", this, "_onDblClick");
-
-    var mouseWheel = this._theme!= null ? this._theme.mouseWheel : 'scroll'; // theme is not always defined
-    if (mouseWheel === 'zoom' || mouseWheel === 'scroll' || this._zoomSteps) {
-    	// capture mouse scroll
-      if (SimileAjax.Platform.browser.isFirefox) {
-        SimileAjax.DOM.registerEventWithObject(this._div, "DOMMouseScroll", this, "_onMouseScroll");
-      } else {
-        SimileAjax.DOM.registerEventWithObject(this._div, "mousewheel", this, "_onMouseScroll");
-      }
-    }
-
-    /*
-     *  The inner div that contains layers
-     */
-    this._innerDiv = this._timeline.getDocument().createElement("div");
-    this._innerDiv.className = "timeline-band-inner";
-    this._div.appendChild(this._innerDiv);
-
-    /*
-     *  Initialize parts of the band
-     */
-    this._ether = bandInfo.ether;
-    bandInfo.ether.initialize(this, 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);
-    }
-};
-
-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;
-};
-
-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, className) {
-    var div = this._timeline.getDocument().createElement("div");
-    div.className = "timeline-band-layer" + (typeof className == "string" ? (" " + className) : "");
-    div.style.zIndex = zIndex;
-    this._innerDiv.appendChild(div);
-
-    var innerDiv = this._timeline.getDocument().createElement("div");
-    innerDiv.className = "timeline-band-layer-inner";
-    if (SimileAjax.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.scrollToCenter = function(date, f) {
-    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)), f);
-};
-
-Timeline._Band.prototype.showBubbleForEvent = function(eventID) {
-    var evt = this.getEventSource().getEvent(eventID);
-    if (evt) {
-        var self = this;
-        this.scrollToCenter(evt.getStart(), function() {
-            self._eventPainter.showBubble(evt);
-        });
-    }
-};
-
-Timeline._Band.prototype.zoom = function(zoomIn, x, y, target) {
-  if (!this._zoomSteps) {
-    // zoom disabled
-    return;
-  }
-
-  // shift the x value by our offset
-  x += this._viewOffset;
-
-  var zoomDate = this._ether.pixelOffsetToDate(x);
-  var netIntervalChange = this._ether.zoom(zoomIn);
-  this._etherPainter.zoom(netIntervalChange);
-
-  // shift our zoom date to the far left
-  this._moveEther(Math.round(-this._ether.dateToPixelOffset(zoomDate)));
-  // then shift it back to where the mouse was
-  this._moveEther(x);
-};
-
-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 = SimileAjax.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._onMouseScroll = function(innerFrame, evt, target) {
-  var now = new Date();
-  now = now.getTime();
-
-  if (!this._lastScrollTime || ((now - this._lastScrollTime) > 50)) {
-    // limit 1 scroll per 200ms due to FF3 sending multiple events back to back
-    this._lastScrollTime = now;
-
-    var delta = 0;
-    if (evt.wheelDelta) {
-      delta = evt.wheelDelta/120;
-    } else if (evt.detail) {
-      delta = -evt.detail/3;
-    }
-
-    // either scroll or zoom
-    var mouseWheel = this._theme.mouseWheel;
-
-    if (this._zoomSteps || mouseWheel === 'zoom') {
-      var loc = SimileAjax.DOM.getEventRelativeCoordinates(evt, innerFrame);
-      if (delta != 0) {
-        var zoomIn;
-        if (delta > 0)
-          zoomIn = true;
-        if (delta < 0)
-          zoomIn = false;
-        // call zoom on the timeline so we could zoom multiple bands if desired
-        this._timeline.zoom(zoomIn, loc.x, loc.y, innerFrame);
-      }
-    }
-    else if (mouseWheel === 'scroll') {
-    	var move_amt = 50 * (delta < 0 ? -1 : 1);
-      this._moveEther(move_amt);
-    }
-  }
-
-  // prevent bubble
-  if (evt.stopPropagation) {
-    evt.stopPropagation();
-  }
-  evt.cancelBubble = true;
-
-  // prevent the default action
-  if (evt.preventDefault) {
-    evt.preventDefault();
-  }
-  evt.returnValue = false;
-};
-
-Timeline._Band.prototype._onDblClick = function(innerFrame, evt, target) {
-    var coords = SimileAjax.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: // ESC
-            break;
-        case 37: // left arrow
-        case 38: // up arrow
-            this._scrollSpeed = Math.min(50, Math.abs(this._scrollSpeed * 1.05));
-            this._moveEther(this._scrollSpeed);
-            break;
-        case 39: // right arrow
-        case 40: // down arrow
-            this._scrollSpeed = -Math.min(50, Math.abs(this._scrollSpeed * 1.05));
-            this._moveEther(this._scrollSpeed);
-            break;
-        default:
-            return true;
-        }
-        this.closeBubble();
-
-        SimileAjax.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: // end
-            this.setCenterVisibleDate(this._eventSource.getLatestDate());
-            break;
-        case 36: // home
-            this.setCenterVisibleDate(this._eventSource.getEarliestDate());
-            break;
-        case 33: // page up
-            this._autoScroll(this._timeline.getPixelLength());
-            break;
-        case 34: // page down
-            this._autoScroll(-this._timeline.getPixelLength());
-            break;
-        default:
-            return true;
-        }
-
-        this.closeBubble();
-
-        SimileAjax.DOM.cancelEvent(evt);
-        return false;
-    }
-    return true;
-};
-
-Timeline._Band.prototype._autoScroll = function(distance, f) {
-    var b = this;
-    var a = SimileAjax.Graphics.createAnimation(
-        function(abs, diff) {
-            b._moveEther(diff);
-        },
-        0,
-        distance,
-        1000,
-        f
-    );
-    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();
-    }
-};
-
-Timeline._Band.prototype.closeBubble = function() {
-    SimileAjax.WindowManager.cancelPopups();
-};
+/******** end of simile-timeline-bundle.js ********/