/* timeline.js */
Timeline.strings={};
Timeline.create=function(elmt,bandInfos,orientation,unit){
window.__simile_api_state = "used";
return new Timeline._Impl(elmt,bandInfos,orientation,unit);
};
Timeline.HORIZONTAL=0;
Timeline.VERTICAL=1;
Timeline._defaultTheme=null;
Timeline.createBandInfo=function(params){
var theme=("theme"in params)?params.theme:Timeline.getDefaultTheme();
var eventSource=("eventSource"in params)?params.eventSource:null;
var ether=new Timeline.LinearEther({
centersOn:("date"in params)?params.date:new Date(),
interval:Timeline.DateTime.gregorianUnitLengths[params.intervalUnit],
pixelsPerInterval:params.intervalPixels
});
var etherPainter=new Timeline.GregorianEtherPainter({
unit:params.intervalUnit,
multiple:("multiple"in params)?params.multiple:1,
theme:theme,
align:("align"in params)?params.align:undefined
});
var layout=new Timeline.StaticTrackBasedLayout({
eventSource:eventSource,
ether:ether,
showText:("showEventText"in params)?params.showEventText:true,
theme:theme
});
var eventPainterParams={
showText:("showEventText"in params)?params.showEventText:true,
layout:layout,
theme:theme
};
if("trackHeight"in params){
eventPainterParams.trackHeight=params.trackHeight;
}
if("trackGap"in params){
eventPainterParams.trackGap=params.trackGap;
}
var eventPainter=new Timeline.DurationEventPainter(eventPainterParams);
return{
width:params.width,
eventSource:eventSource,
timeZone:("timeZone"in params)?params.timeZone:0,
ether:ether,
etherPainter:etherPainter,
eventPainter:eventPainter
};
};
Timeline.createHotZoneBandInfo=function(params){
var theme=("theme"in params)?params.theme:Timeline.getDefaultTheme();
var eventSource=("eventSource"in params)?params.eventSource:null;
var ether=new Timeline.HotZoneEther({
centersOn:("date"in params)?params.date:new Date(),
interval:Timeline.DateTime.gregorianUnitLengths[params.intervalUnit],
pixelsPerInterval:params.intervalPixels,
zones:params.zones
});
var etherPainter=new Timeline.HotZoneGregorianEtherPainter({
unit:params.intervalUnit,
zones:params.zones,
theme:theme,
align:("align"in params)?params.align:undefined
});
var layout=new Timeline.StaticTrackBasedLayout({
eventSource:eventSource,
ether:ether,
theme:theme
});
var eventPainterParams={
showText:("showEventText"in params)?params.showEventText:true,
layout:layout,
theme:theme
};
if("trackHeight"in params){
eventPainterParams.trackHeight=params.trackHeight;
}
if("trackGap"in params){
eventPainterParams.trackGap=params.trackGap;
}
var eventPainter=new Timeline.DurationEventPainter(eventPainterParams);
return{
width:params.width,
eventSource:eventSource,
timeZone:("timeZone"in params)?params.timeZone:0,
ether:ether,
etherPainter:etherPainter,
eventPainter:eventPainter
};
};
Timeline.getDefaultTheme=function(){
if(Timeline._defaultTheme==null){
Timeline._defaultTheme=Timeline.ClassicTheme.create(Timeline.Platform.getDefaultLocale());
}
return Timeline._defaultTheme;
};
Timeline.setDefaultTheme=function(theme){
Timeline._defaultTheme=theme;
};
Timeline.loadXML=function(url,f){
var fError=function(statusText,status,xmlhttp){
alert("Failed to load data xml from "+url+"\n"+statusText);
};
var fDone=function(xmlhttp){
var xml=xmlhttp.responseXML;
if(!xml.documentElement&&xmlhttp.responseStream){
xml.load(xmlhttp.responseStream);
}
f(xml,url);
};
Timeline.XmlHttp.get(url,fError,fDone);
};
Timeline.loadJSON=function(url,f){
var fError=function(statusText,status,xmlhttp){
alert("Failed to load json data from "+url+"\n"+statusText);
};
var fDone=function(xmlhttp){
f(eval('('+xmlhttp.responseText+')'),url);
};
Timeline.XmlHttp.get(url,fError,fDone);
};
Timeline._Impl=function(elmt,bandInfos,orientation,unit){
this._containerDiv=elmt;
this._bandInfos=bandInfos;
this._orientation=orientation==null?Timeline.HORIZONTAL:orientation;
this._unit=(unit!=null)?unit:Timeline.NativeDateUnit;
this._initialize();
};
Timeline._Impl.prototype.dispose=function(){
for(var i=0;i 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;i0){
var percent=parseInt(widthString.substr(0,x));
var bandWidth=percent*width/100;
}else{
var bandWidth=parseInt(widthString);
}
band.setBandShiftAndWidth(cumulativeWidth,bandWidth);
band.setViewLength(length);
cumulativeWidth+=bandWidth;
}
};
Timeline._Band=function(timeline,bandInfo,index){
this._timeline=timeline;
this._bandInfo=bandInfo;
this._index=index;
this._locale=("locale"in bandInfo)?bandInfo.locale:Timeline.Platform.getDefaultLocale();
this._timeZone=("timeZone"in bandInfo)?bandInfo.timeZone:0;
this._labeller=("labeller"in bandInfo)?bandInfo.labeller:
timeline.getUnit().createLabeller(this._locale,this._timeZone);
this._dragging=false;
this._changing=false;
this._originalScrollSpeed=5;
this._scrollSpeed=this._originalScrollSpeed;
this._onScrollListeners=[];
var b=this;
this._syncWithBand=null;
this._syncWithBandHandler=function(band){
b._onHighlightBandScroll();
};
this._selectorListener=function(band){
b._onHighlightBandScroll();
};
var inputDiv=this._timeline.getDocument().createElement("div");
inputDiv.className="timeline-band-input";
this._timeline.addDiv(inputDiv);
this._keyboardInput=document.createElement("input");
this._keyboardInput.type="text";
inputDiv.appendChild(this._keyboardInput);
Timeline.DOM.registerEventWithObject(this._keyboardInput,"keydown",this,this._onKeyDown);
Timeline.DOM.registerEventWithObject(this._keyboardInput,"keyup",this,this._onKeyUp);
this._div=this._timeline.getDocument().createElement("div");
this._div.className="timeline-band";
this._timeline.addDiv(this._div);
Timeline.DOM.registerEventWithObject(this._div,"mousedown",this,this._onMouseDown);
Timeline.DOM.registerEventWithObject(this._div,"mousemove",this,this._onMouseMove);
Timeline.DOM.registerEventWithObject(this._div,"mouseup",this,this._onMouseUp);
Timeline.DOM.registerEventWithObject(this._div,"mouseout",this,this._onMouseOut);
Timeline.DOM.registerEventWithObject(this._div,"dblclick",this,this._onDblClick);
this._innerDiv=this._timeline.getDocument().createElement("div");
this._innerDiv.className="timeline-band-inner";
this._div.appendChild(this._innerDiv);
this._ether=bandInfo.ether;
bandInfo.ether.initialize(timeline);
this._etherPainter=bandInfo.etherPainter;
bandInfo.etherPainter.initialize(this,timeline);
this._eventSource=bandInfo.eventSource;
if(this._eventSource){
this._eventListener={
onAddMany:function(){b._onAddMany();},
onClear:function(){b._onClear();}
}
this._eventSource.addListener(this._eventListener);
}
this._eventPainter=bandInfo.eventPainter;
bandInfo.eventPainter.initialize(this,timeline);
this._decorators=("decorators"in bandInfo)?bandInfo.decorators:[];
for(var i=0;i3*this._viewLength/2){
this.setCenterVisibleDate(this.pixelOffsetToDate(pixelOffset-this._viewLength));
}
this._autoScroll(Math.round(this._viewLength/2-this._ether.dateToPixelOffset(date)));
};
Timeline._Band.prototype._onMouseDown=function(innerFrame,evt,target){
this.closeBubble();
this._dragging=true;
this._dragX=evt.clientX;
this._dragY=evt.clientY;
};
Timeline._Band.prototype._onMouseMove=function(innerFrame,evt,target){
if(this._dragging){
var diffX=evt.clientX-this._dragX;
var diffY=evt.clientY-this._dragY;
this._dragX=evt.clientX;
this._dragY=evt.clientY;
this._moveEther(this._timeline.isHorizontal()?diffX:diffY);
this._positionHighlight();
}
};
Timeline._Band.prototype._onMouseUp=function(innerFrame,evt,target){
this._dragging=false;
this._keyboardInput.focus();
};
Timeline._Band.prototype._onMouseOut=function(innerFrame,evt,target){
var coords=Timeline.DOM.getEventRelativeCoordinates(evt,innerFrame);
coords.x+=this._viewOffset;
if(coords.x<0||coords.x>innerFrame.offsetWidth||
coords.y<0||coords.y>innerFrame.offsetHeight){
this._dragging=false;
}
};
Timeline._Band.prototype._onDblClick=function(innerFrame,evt,target){
var coords=Timeline.DOM.getEventRelativeCoordinates(evt,innerFrame);
var distance=coords.x-(this._viewLength/2-this._viewOffset);
this._autoScroll(-distance);
};
Timeline._Band.prototype._onKeyDown=function(keyboardInput,evt,target){
if(!this._dragging){
switch(evt.keyCode){
case 27:
break;
case 37:
case 38:
this._scrollSpeed=Math.min(50,Math.abs(this._scrollSpeed*1.05));
this._moveEther(this._scrollSpeed);
break;
case 39:
case 40:
this._scrollSpeed=-Math.min(50,Math.abs(this._scrollSpeed*1.05));
this._moveEther(this._scrollSpeed);
break;
default:
return true;
}
this.closeBubble();
Timeline.DOM.cancelEvent(evt);
return false;
}
return true;
};
Timeline._Band.prototype._onKeyUp=function(keyboardInput,evt,target){
if(!this._dragging){
this._scrollSpeed=this._originalScrollSpeed;
switch(evt.keyCode){
case 35:
this.setCenterVisibleDate(this._eventSource.getLatestDate());
break;
case 36:
this.setCenterVisibleDate(this._eventSource.getEarliestDate());
break;
case 33:
this._autoScroll(this._timeline.getPixelLength());
break;
case 34:
this._autoScroll(-this._timeline.getPixelLength());
break;
default:
return true;
}
this.closeBubble();
Timeline.DOM.cancelEvent(evt);
return false;
}
return true;
};
Timeline._Band.prototype._autoScroll=function(distance){
var b=this;
var a=Timeline.Graphics.createAnimation(function(abs,diff){
b._moveEther(diff);
},0,distance,1000);
a.run();
};
Timeline._Band.prototype._moveEther=function(shift){
this.closeBubble();
this._viewOffset+=shift;
this._ether.shiftPixels(-shift);
if(this._timeline.isHorizontal()){
this._div.style.left=this._viewOffset+"px";
}else{
this._div.style.top=this._viewOffset+"px";
}
if(this._viewOffset>-this._viewLength*0.5||
this._viewOffset<-this._viewLength*(Timeline._Band.SCROLL_MULTIPLES-1.5)){
this._recenterDiv();
}else{
this.softLayout();
}
this._onChanging();
}
Timeline._Band.prototype._onChanging=function(){
this._changing=true;
this._fireOnScroll();
this._setSyncWithBandDate();
this._changing=false;
};
Timeline._Band.prototype._fireOnScroll=function(){
for(var i=0;i=0?i:s.length;
};
if(Timeline.Platform.browser.isMozilla){
var offset=ua.indexOf("mozilla/");
if(offset>=0){
parseVersionString(ua.substring(offset+8,indexOf(ua," ",offset)));
}
}
if(Timeline.Platform.browser.isIE){
var offset=ua.indexOf("msie ");
if(offset>=0){
parseVersionString(ua.substring(offset+5,indexOf(ua,";",offset)));
}
}
if(Timeline.Platform.browser.isNetscape){
var offset=ua.indexOf("rv:");
if(offset>=0){
parseVersionString(ua.substring(offset+3,indexOf(ua,")",offset)));
}
}
if(Timeline.Platform.browser.isFirefox){
var offset=ua.indexOf("firefox/");
if(offset>=0){
parseVersionString(ua.substring(offset+8,indexOf(ua," ",offset)));
}
}
})();
Timeline.Platform.getDefaultLocale=function(){
return Timeline.Platform.clientLocale;
};
/* data-structure.js */
Timeline.SortedArray=function(compare,initialArray){
this._a=(initialArray instanceof Array)?initialArray:[];
this._compare=compare;
};
Timeline.SortedArray.prototype.add=function(elmt){
var sa=this;
var index=this.find(function(elmt2){
return sa._compare(elmt2,elmt);
});
if(index0)?this._a[0]:null;
};
Timeline.SortedArray.prototype.getLast=function(){
return(this._a.length>0)?this._a[this._a.length-1]:null;
};
Timeline.EventIndex=function(unit){
var eventIndex=this;
this._unit=(unit!=null)?unit:Timeline.NativeDateUnit;
this._events=new Timeline.SortedArray(
function(event1,event2){
return eventIndex._unit.compare(event1.getStart(),event2.getStart());
}
);
this._indexed=true;
};
Timeline.EventIndex.prototype.getUnit=function(){
return this._unit;
};
Timeline.EventIndex.prototype.add=function(evt){
this._events.add(evt);
this._indexed=false;
};
Timeline.EventIndex.prototype.removeAll=function(){
this._events.removeAll();
this._indexed=false;
};
Timeline.EventIndex.prototype.getCount=function(){
return this._events.length();
};
Timeline.EventIndex.prototype.getIterator=function(startDate,endDate){
if(!this._indexed){
this._index();
}
return new Timeline.EventIndex._Iterator(this._events,startDate,endDate,this._unit);
};
Timeline.EventIndex.prototype.getAllIterator=function(){
return new Timeline.EventIndex._AllIterator(this._events);
};
Timeline.EventIndex.prototype.getEarliestDate=function(){
var evt=this._events.getFirst();
return(evt==null)?null:evt.getStart();
};
Timeline.EventIndex.prototype.getLatestDate=function(){
var evt=this._events.getLast();
if(evt==null){
return null;
}
if(!this._indexed){
this._index();
}
var index=evt._earliestOverlapIndex;
var date=this._events.elementAt(index).getEnd();
for(var i=index+1;i=0){
this._currentIndex=this._events.elementAt(this._currentIndex-1)._earliestOverlapIndex;
}
this._currentIndex--;
this._maxIndex=events.find(function(evt){
return unit.compare(evt.getStart(),endDate);
});
this._hasNext=false;
this._next=null;
this._findNext();
};
Timeline.EventIndex._Iterator.prototype={
hasNext:function(){return this._hasNext;},
next:function(){
if(this._hasNext){
var next=this._next;
this._findNext();
return next;
}else{
return null;
}
},
_findNext:function(){
var unit=this._unit;
while((++this._currentIndex)0){
this._next=evt;
this._hasNext=true;
return;
}
}
this._next=null;
this._hasNext=false;
}
};
Timeline.EventIndex._AllIterator=function(events){
this._events=events;
this._index=0;
};
Timeline.EventIndex._AllIterator.prototype={
hasNext:function(){
return this._index0&&s.length<8){
var space=s.indexOf(" ");
if(space>0){
var year=parseInt(s.substr(0,space));
var suffix=s.substr(space+1);
if(suffix.toLowerCase()=="bc"){
year=1-year;
}
}else{
var year=parseInt(s);
}
var d=new Date(0);
d.setUTCFullYear(year);
return d;
}
try{
return new Date(Date.parse(s));
}catch(e){
return null;
}
};
Timeline.DateTime._iso8601DateRegExp="^(-?)([0-9]{4})("+[
"(-?([0-9]{2})(-?([0-9]{2}))?)",
"(-?([0-9]{3}))",
"(-?W([0-9]{2})(-?([1-7]))?)"
].join("|")+")?$";
Timeline.DateTime.setIso8601Date=function(dateObject,string){
var regexp=Timeline.DateTime._iso8601DateRegExp;
var d=string.match(new RegExp(regexp));
if(!d){
throw new Error("Invalid date string: "+string);
}
var sign=(d[1]=="-")?-1:1;
var year=sign*d[2];
var month=d[5];
var date=d[7];
var dayofyear=d[9];
var week=d[11];
var dayofweek=(d[13])?d[13]:1;
dateObject.setUTCFullYear(year);
if(dayofyear){
dateObject.setUTCMonth(0);
dateObject.setUTCDate(Number(dayofyear));
}else if(week){
dateObject.setUTCMonth(0);
dateObject.setUTCDate(1);
var gd=dateObject.getUTCDay();
var day=(gd)?gd:7;
var offset=Number(dayofweek)+(7*Number(week));
if(day<=4){
dateObject.setUTCDate(offset+1-day);
}else{
dateObject.setUTCDate(offset+8-day);
}
}else{
if(month){
dateObject.setUTCDate(1);
dateObject.setUTCMonth(month-1);
}
if(date){
dateObject.setUTCDate(date);
}
}
return dateObject;
};
Timeline.DateTime.setIso8601Time=function(dateObject,string){
var timezone="Z|(([-+])([0-9]{2})(:?([0-9]{2}))?)$";
var d=string.match(new RegExp(timezone));
var offset=0;
if(d){
if(d[0]!='Z'){
offset=(Number(d[3])*60)+Number(d[5]);
offset*=((d[2]=='-')?1:-1);
}
string=string.substr(0,string.length-d[0].length);
}
var regexp="^([0-9]{2})(:?([0-9]{2})(:?([0-9]{2})(\.([0-9]+))?)?)?$";
var d=string.match(new RegExp(regexp));
if(!d){
dojo.debug("invalid time string: "+string);
return false;
}
var hours=d[1];
var mins=Number((d[3])?d[3]:0);
var secs=(d[5])?d[5]:0;
var ms=d[7]?(Number("0."+d[7])*1000):0;
dateObject.setUTCHours(hours);
dateObject.setUTCMinutes(mins);
dateObject.setUTCSeconds(secs);
dateObject.setUTCMilliseconds(ms);
return dateObject;
};
Timeline.DateTime.setIso8601=function(dateObject,string){
var comps=(string.indexOf("T")==-1)?string.split(" "):string.split("T");
Timeline.DateTime.setIso8601Date(dateObject,comps[0]);
if(comps.length==2){
Timeline.DateTime.setIso8601Time(dateObject,comps[1]);
}
return dateObject;
};
Timeline.DateTime.parseIso8601DateTime=function(string){
try{
return Timeline.DateTime.setIso8601(new Date(0),string);
}catch(e){
return null;
}
};
Timeline.DateTime.roundDownToInterval=function(date,intervalUnit,timeZone,multiple,firstDayOfWeek){
var timeShift=timeZone*
Timeline.DateTime.gregorianUnitLengths[Timeline.DateTime.HOUR];
var date2=new Date(date.getTime()+timeShift);
var clearInDay=function(d){
d.setUTCMilliseconds(0);
d.setUTCSeconds(0);
d.setUTCMinutes(0);
d.setUTCHours(0);
};
var clearInYear=function(d){
clearInDay(d);
d.setUTCDate(1);
d.setUTCMonth(0);
};
switch(intervalUnit){
case Timeline.DateTime.MILLISECOND:
var x=date2.getUTCMilliseconds();
date2.setUTCMilliseconds(x-(x%multiple));
break;
case Timeline.DateTime.SECOND:
date2.setUTCMilliseconds(0);
var x=date2.getUTCSeconds();
date2.setUTCSeconds(x-(x%multiple));
break;
case Timeline.DateTime.MINUTE:
date2.setUTCMilliseconds(0);
date2.setUTCSeconds(0);
var x=date2.getUTCMinutes();
date2.setTime(date2.getTime()-
(x%multiple)*Timeline.DateTime.gregorianUnitLengths[Timeline.DateTime.MINUTE]);
break;
case Timeline.DateTime.HOUR:
date2.setUTCMilliseconds(0);
date2.setUTCSeconds(0);
date2.setUTCMinutes(0);
var x=date2.getUTCHours();
date2.setUTCHours(x-(x%multiple));
break;
case Timeline.DateTime.DAY:
clearInDay(date2);
break;
case Timeline.DateTime.WEEK:
clearInDay(date2);
var d=(date2.getUTCDay()+7-firstDayOfWeek)%7;
date2.setTime(date2.getTime()-
d*Timeline.DateTime.gregorianUnitLengths[Timeline.DateTime.DAY]);
break;
case Timeline.DateTime.MONTH:
clearInDay(date2);
date2.setUTCDate(1);
var x=date2.getUTCMonth();
date2.setUTCMonth(x-(x%multiple));
break;
case Timeline.DateTime.YEAR:
clearInYear(date2);
var x=date2.getUTCFullYear();
date2.setUTCFullYear(x-(x%multiple));
break;
case Timeline.DateTime.DECADE:
clearInYear(date2);
date2.setUTCFullYear(Math.floor(date2.getUTCFullYear()/10)*10);
break;
case Timeline.DateTime.CENTURY:
clearInYear(date2);
date2.setUTCFullYear(Math.floor(date2.getUTCFullYear()/100)*100);
break;
case Timeline.DateTime.MILLENNIUM:
clearInYear(date2);
date2.setUTCFullYear(Math.floor(date2.getUTCFullYear()/1000)*1000);
break;
}
date.setTime(date2.getTime()-timeShift);
};
Timeline.DateTime.roundUpToInterval=function(date,intervalUnit,timeZone,multiple,firstDayOfWeek){
var originalTime=date.getTime();
Timeline.DateTime.roundDownToInterval(date,intervalUnit,timeZone,multiple,firstDayOfWeek);
if(date.getTime()6);
Timeline.Graphics.createTranslucentImage=function(doc,url,verticalAlign){
var elmt;
if(Timeline.Graphics.pngIsTranslucent){
elmt=doc.createElement("img");
elmt.setAttribute("src",url);
}else{
elmt=doc.createElement("img");
elmt.style.display="inline";
elmt.style.width="1px";
elmt.style.height="1px";
elmt.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+url+"', sizingMethod='image')";
}
elmt.style.verticalAlign=(verticalAlign!=null)?verticalAlign:"middle";
return elmt;
};
Timeline.Graphics.setOpacity=function(elmt,opacity){
if(Timeline.Platform.browser.isIE){
elmt.style.filter="progid:DXImageTransform.Microsoft.Alpha(Style=0,Opacity="+opacity+")";
}else{
var o=(opacity/100).toString();
elmt.style.opacity=o;
elmt.style.MozOpacity=o;
}
};
Timeline.Graphics._bubbleMargins={
top:33,
bottom:42,
left:33,
right:40
}
Timeline.Graphics._arrowOffsets={
top:0,
bottom:9,
left:1,
right:8
}
Timeline.Graphics._bubblePadding=15;
Timeline.Graphics._bubblePointOffset=6;
Timeline.Graphics._halfArrowWidth=18;
Timeline.Graphics.createBubbleForPoint=function(doc,pageX,pageY,contentWidth,contentHeight){
function getWindowDims(){
if(typeof window.innerWidth=='number'){
return{w:window.innerWidth,h:window.innerHeight};
}else if(document.documentElement&&document.documentElement.clientWidth){
return{
w:document.documentElement.clientWidth,
h:document.documentElement.clientHeight
};
}else if(document.body&&document.body.clientWidth){
return{
w:document.body.clientWidth,
h:document.body.clientHeight
};
}
}
var bubble={
_closed:false,
_doc:doc,
close:function(){
if(!this._closed){
this._doc.body.removeChild(this._div);
this._doc=null;
this._div=null;
this._content=null;
this._closed=true;
}
}
};
var dims=getWindowDims();
var docWidth=dims.w;
var docHeight=dims.h;
var margins=Timeline.Graphics._bubbleMargins;
contentWidth=parseInt(contentWidth,10);
contentHeight=parseInt(contentHeight,10);
var bubbleWidth=margins.left+contentWidth+margins.right;
var bubbleHeight=margins.top+contentHeight+margins.bottom;
var pngIsTranslucent=Timeline.Graphics.pngIsTranslucent;
var urlPrefix=Timeline.urlPrefix;
var setImg=function(elmt,url,width,height){
elmt.style.position="absolute";
elmt.style.width=width+"px";
elmt.style.height=height+"px";
if(pngIsTranslucent){
elmt.style.background="url("+url+")";
}else{
elmt.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+url+"', sizingMethod='crop')";
}
}
var div=doc.createElement("div");
div.style.width=bubbleWidth+"px";
div.style.height=bubbleHeight+"px";
div.style.position="absolute";
div.style.zIndex=1000;
bubble._div=div;
var divInner=doc.createElement("div");
divInner.style.width="100%";
divInner.style.height="100%";
divInner.style.position="relative";
div.appendChild(divInner);
var createImg=function(url,left,top,width,height){
var divImg=doc.createElement("div");
divImg.style.left=left+"px";
divImg.style.top=top+"px";
setImg(divImg,url,width,height);
divInner.appendChild(divImg);
}
createImg(urlPrefix+"images/bubble-top-left.png",0,0,margins.left,margins.top);
createImg(urlPrefix+"images/bubble-top.png",margins.left,0,contentWidth,margins.top);
createImg(urlPrefix+"images/bubble-top-right.png",margins.left+contentWidth,0,margins.right,margins.top);
createImg(urlPrefix+"images/bubble-left.png",0,margins.top,margins.left,contentHeight);
createImg(urlPrefix+"images/bubble-right.png",margins.left+contentWidth,margins.top,margins.right,contentHeight);
createImg(urlPrefix+"images/bubble-bottom-left.png",0,margins.top+contentHeight,margins.left,margins.bottom);
createImg(urlPrefix+"images/bubble-bottom.png",margins.left,margins.top+contentHeight,contentWidth,margins.bottom);
createImg(urlPrefix+"images/bubble-bottom-right.png",margins.left+contentWidth,margins.top+contentHeight,margins.right,margins.bottom);
var divClose=doc.createElement("div");
divClose.style.left=(bubbleWidth-margins.right+Timeline.Graphics._bubblePadding-16-2)+"px";
divClose.style.top=(margins.top-Timeline.Graphics._bubblePadding+1)+"px";
divClose.style.cursor="pointer";
setImg(divClose,urlPrefix+"images/close-button.png",16,16);
Timeline.DOM.registerEventWithObject(divClose,"click",bubble,bubble.close);
divInner.appendChild(divClose);
var divContent=doc.createElement("div");
divContent.style.position="absolute";
divContent.style.left=margins.left+"px";
divContent.style.top=margins.top+"px";
divContent.style.width=contentWidth+"px";
divContent.style.height=contentHeight+"px";
divContent.style.overflow="auto";
divContent.style.background="white";
divInner.appendChild(divContent);
bubble.content=divContent;
(function(){
if(pageX-Timeline.Graphics._halfArrowWidth-Timeline.Graphics._bubblePadding>0&&
pageX+Timeline.Graphics._halfArrowWidth+Timeline.Graphics._bubblePadding0){
var divImg=doc.createElement("div");
divImg.style.left=(pageX-Timeline.Graphics._halfArrowWidth-left)+"px";
divImg.style.top=(margins.top+contentHeight)+"px";
setImg(divImg,urlPrefix+"images/bubble-bottom-arrow.png",37,margins.bottom);
divInner.appendChild(divImg);
div.style.left=left+"px";
div.style.top=(pageY-Timeline.Graphics._bubblePointOffset-bubbleHeight+
Timeline.Graphics._arrowOffsets.bottom)+"px";
return;
}else if(pageY+Timeline.Graphics._bubblePointOffset+bubbleHeight0){
var divImg=doc.createElement("div");
divImg.style.left=(margins.left+contentWidth)+"px";
divImg.style.top=(pageY-Timeline.Graphics._halfArrowWidth-top)+"px";
setImg(divImg,urlPrefix+"images/bubble-right-arrow.png",margins.right,37);
divInner.appendChild(divImg);
div.style.left=(pageX-Timeline.Graphics._bubblePointOffset-bubbleWidth+
Timeline.Graphics._arrowOffsets.right)+"px";
div.style.top=top+"px";
}else{
var divImg=doc.createElement("div");
divImg.style.left="0px";
divImg.style.top=(pageY-Timeline.Graphics._halfArrowWidth-top)+"px";
setImg(divImg,urlPrefix+"images/bubble-left-arrow.png",margins.left,37);
divInner.appendChild(divImg);
div.style.left=(pageX+Timeline.Graphics._bubblePointOffset-
Timeline.Graphics._arrowOffsets.left)+"px";
div.style.top=top+"px";
}
})();
doc.body.appendChild(div);
return bubble;
};
Timeline.Graphics.createMessageBubble=function(doc){
var containerDiv=doc.createElement("div");
if(Timeline.Graphics.pngIsTranslucent){
var topDiv=doc.createElement("div");
topDiv.style.height="33px";
topDiv.style.background="url("+Timeline.urlPrefix+"images/message-top-left.png) top left no-repeat";
topDiv.style.paddingLeft="44px";
containerDiv.appendChild(topDiv);
var topRightDiv=doc.createElement("div");
topRightDiv.style.height="33px";
topRightDiv.style.background="url("+Timeline.urlPrefix+"images/message-top-right.png) top right no-repeat";
topDiv.appendChild(topRightDiv);
var middleDiv=doc.createElement("div");
middleDiv.style.background="url("+Timeline.urlPrefix+"images/message-left.png) top left repeat-y";
middleDiv.style.paddingLeft="44px";
containerDiv.appendChild(middleDiv);
var middleRightDiv=doc.createElement("div");
middleRightDiv.style.background="url("+Timeline.urlPrefix+"images/message-right.png) top right repeat-y";
middleRightDiv.style.paddingRight="44px";
middleDiv.appendChild(middleRightDiv);
var contentDiv=doc.createElement("div");
middleRightDiv.appendChild(contentDiv);
var bottomDiv=doc.createElement("div");
bottomDiv.style.height="55px";
bottomDiv.style.background="url("+Timeline.urlPrefix+"images/message-bottom-left.png) bottom left no-repeat";
bottomDiv.style.paddingLeft="44px";
containerDiv.appendChild(bottomDiv);
var bottomRightDiv=doc.createElement("div");
bottomRightDiv.style.height="55px";
bottomRightDiv.style.background="url("+Timeline.urlPrefix+"images/message-bottom-right.png) bottom right no-repeat";
bottomDiv.appendChild(bottomRightDiv);
}else{
containerDiv.style.border="2px solid #7777AA";
containerDiv.style.padding="20px";
containerDiv.style.background="white";
Timeline.Graphics.setOpacity(containerDiv,90);
var contentDiv=doc.createElement("div");
containerDiv.appendChild(contentDiv);
}
return{
containerDiv:containerDiv,
contentDiv:contentDiv
};
};
Timeline.Graphics.createAnimation=function(f,from,to,duration){
return new Timeline.Graphics._Animation(f,from,to,duration);
};
Timeline.Graphics._Animation=function(f,from,to,duration){
this.f=f;
this.from=from;
this.to=to;
this.current=from;
this.duration=duration;
this.start=new Date().getTime();
this.timePassed=0;
};
Timeline.Graphics._Animation.prototype.run=function(){
var a=this;
window.setTimeout(function(){a.step();},100);
};
Timeline.Graphics._Animation.prototype.step=function(){
this.timePassed+=100;
var timePassedFraction=this.timePassed/this.duration;
var parameterFraction=-Math.cos(timePassedFraction*Math.PI)/2+0.5;
var current=parameterFraction*(this.to-this.from)+this.from;
try{
this.f(current,current-this.current);
}catch(e){
}
this.current=current;
if(this.timePassed0){
minDate=this._unit.later(minDate,this._startDate);
maxDate=this._unit.earlier(maxDate,this._endDate);
var minPixel=this._band.dateToPixelOffset(minDate);
var maxPixel=this._band.dateToPixelOffset(maxDate);
var doc=this._timeline.getDocument();
var createTable=function(){
var table=doc.createElement("table");
table.insertRow(0).insertCell(0);
return table;
};
var div=doc.createElement("div");
div.style.position="absolute";
div.style.overflow="hidden";
div.style.background=this._color;
if(this._opacity<100){
Timeline.Graphics.setOpacity(div,this._opacity);
}
this._layerDiv.appendChild(div);
var tableStartLabel=createTable();
tableStartLabel.style.position="absolute";
tableStartLabel.style.overflow="hidden";
tableStartLabel.style.fontSize="300%";
tableStartLabel.style.fontWeight="bold";
tableStartLabel.style.color=this._color;
tableStartLabel.rows[0].cells[0].innerHTML=this._startLabel;
this._layerDiv.appendChild(tableStartLabel);
var tableEndLabel=createTable();
tableEndLabel.style.position="absolute";
tableEndLabel.style.overflow="hidden";
tableEndLabel.style.fontSize="300%";
tableEndLabel.style.fontWeight="bold";
tableEndLabel.style.color=this._color;
tableEndLabel.rows[0].cells[0].innerHTML=this._endLabel;
this._layerDiv.appendChild(tableEndLabel);
if(this._timeline.isHorizontal()){
div.style.left=minPixel+"px";
div.style.width=(maxPixel-minPixel)+"px";
div.style.top="0px";
div.style.height="100%";
tableStartLabel.style.right=(this._band.getTotalViewLength()-minPixel)+"px";
tableStartLabel.style.width=(this._startLabel.length)+"em";
tableStartLabel.style.top="0px";
tableStartLabel.style.height="100%";
tableStartLabel.style.textAlign="right";
tableEndLabel.style.left=maxPixel+"px";
tableEndLabel.style.width=(this._endLabel.length)+"em";
tableEndLabel.style.top="0px";
tableEndLabel.style.height="100%";
}else{
div.style.top=minPixel+"px";
div.style.height=(maxPixel-minPixel)+"px";
div.style.left="0px";
div.style.width="100%";
tableStartLabel.style.bottom=minPixel+"px";
tableStartLabel.style.height="1.5px";
tableStartLabel.style.left="0px";
tableStartLabel.style.width="100%";
tableEndLabel.style.top=maxPixel+"px";
tableEndLabel.style.height="1.5px";
tableEndLabel.style.left="0px";
tableEndLabel.style.width="100%";
}
}
this._layerDiv.style.display="block";
};
Timeline.SpanHighlightDecorator.prototype.softPaint=function(){
};
Timeline.PointHighlightDecorator=function(params){
this._unit=("unit"in params)?params.unit:Timeline.NativeDateUnit;
this._date=(typeof params.date=="string")?
this._unit.parseFromObject(params.date):params.date;
this._width=("width"in params)?params.width:10;
this._color=params.color;
this._opacity=("opacity"in params)?params.opacity:100;
};
Timeline.PointHighlightDecorator.prototype.initialize=function(band,timeline){
this._band=band;
this._timeline=timeline;
this._layerDiv=null;
};
Timeline.PointHighlightDecorator.prototype.paint=function(){
if(this._layerDiv!=null){
this._band.removeLayerDiv(this._layerDiv);
}
this._layerDiv=this._band.createLayerDiv(10);
this._layerDiv.setAttribute("name","span-highlight-decorator");
this._layerDiv.style.display="none";
var minDate=this._band.getMinDate();
var maxDate=this._band.getMaxDate();
if(this._unit.compare(this._date,maxDate)<0&&
this._unit.compare(this._date,minDate)>0){
var pixel=this._band.dateToPixelOffset(this._date);
var minPixel=pixel-Math.round(this._width/2);
var doc=this._timeline.getDocument();
var div=doc.createElement("div");
div.style.position="absolute";
div.style.overflow="hidden";
div.style.background=this._color;
if(this._opacity<100){
Timeline.Graphics.setOpacity(div,this._opacity);
}
this._layerDiv.appendChild(div);
if(this._timeline.isHorizontal()){
div.style.left=minPixel+"px";
div.style.width=this._width+"px";
div.style.top="0px";
div.style.height="100%";
}else{
div.style.top=minPixel+"px";
div.style.height=this._width+"px";
div.style.left="0px";
div.style.width="100%";
}
}
this._layerDiv.style.display="block";
};
Timeline.PointHighlightDecorator.prototype.softPaint=function(){
};
/* ether-painters.js */
Timeline.GregorianEtherPainter=function(params){
this._params=params;
this._theme=params.theme;
this._unit=params.unit;
this._multiple=("multiple"in params)?params.multiple:1;
};
Timeline.GregorianEtherPainter.prototype.initialize=function(band,timeline){
this._band=band;
this._timeline=timeline;
this._backgroundLayer=band.createLayerDiv(0);
this._backgroundLayer.setAttribute("name","ether-background");
this._backgroundLayer.style.background=this._theme.ether.backgroundColors[band.getIndex()];
this._markerLayer=null;
this._lineLayer=null;
var align=("align"in this._params&&this._params.align!=undefined)?this._params.align:
this._theme.ether.interval.marker[timeline.isHorizontal()?"hAlign":"vAlign"];
var showLine=("showLine"in this._params)?this._params.showLine:
this._theme.ether.interval.line.show;
this._intervalMarkerLayout=new Timeline.EtherIntervalMarkerLayout(
this._timeline,this._band,this._theme,align,showLine);
this._highlight=new Timeline.EtherHighlight(
this._timeline,this._band,this._theme,this._backgroundLayer);
}
Timeline.GregorianEtherPainter.prototype.setHighlight=function(startDate,endDate){
this._highlight.position(startDate,endDate);
}
Timeline.GregorianEtherPainter.prototype.paint=function(){
if(this._markerLayer){
this._band.removeLayerDiv(this._markerLayer);
}
this._markerLayer=this._band.createLayerDiv(100);
this._markerLayer.setAttribute("name","ether-markers");
this._markerLayer.style.display="none";
if(this._lineLayer){
this._band.removeLayerDiv(this._lineLayer);
}
this._lineLayer=this._band.createLayerDiv(1);
this._lineLayer.setAttribute("name","ether-lines");
this._lineLayer.style.display="none";
var minDate=this._band.getMinDate();
var maxDate=this._band.getMaxDate();
var timeZone=this._band.getTimeZone();
var labeller=this._band.getLabeller();
Timeline.DateTime.roundDownToInterval(minDate,this._unit,timeZone,this._multiple,this._theme.firstDayOfWeek);
var p=this;
var incrementDate=function(date){
for(var i=0;izoneStart;j++){
var zone2=this._zones[j];
if(zoneStartzone2.startTime){
this._zones.splice(j,0,{
startTime:zone2.startTime,
endTime:zoneStart,
unit:zone2.unit,
multiple:zone2.multiple
});
j++;
zone2.startTime=zoneStart;
}
if(zoneEnd=0){
if(maxDate.getTime()>this._zones[zEnd].startTime){
break;
}
zEnd--;
}
for(var z=zStart;z<=zEnd;z++){
var zone=this._zones[z];
var minDate2=new Date(Math.max(minDate.getTime(),zone.startTime));
var maxDate2=new Date(Math.min(maxDate.getTime(),zone.endTime));
Timeline.DateTime.roundDownToInterval(minDate2,zone.unit,timeZone,zone.multiple,this._theme.firstDayOfWeek);
Timeline.DateTime.roundUpToInterval(maxDate2,zone.unit,timeZone,zone.multiple,this._theme.firstDayOfWeek);
while(minDate2.getTime()0;j++){
var zone2=this._zones[j];
if(this._unit.compare(zoneStart,zone2.endTime)<0){
if(this._unit.compare(zoneStart,zone2.startTime)>0){
this._zones.splice(j,0,{
startTime:zone2.startTime,
endTime:zoneStart,
magnify:zone2.magnify
});
j++;
zone2.startTime=zoneStart;
}
if(this._unit.compare(zoneEnd,zone2.endTime)<0){
this._zones.splice(j,0,{
startTime:zoneStart,
endTime:zoneEnd,
magnify:zone.magnify*zone2.magnify
});
j++;
zone2.startTime=zoneEnd;
zoneStart=zoneEnd;
}else{
zone2.magnify*=zone.magnify;
zoneStart=zone2.endTime;
}
}
}
}
if("startsOn"in this._params){
this._start=this._unit.parseFromObject(this._params.startsOn);
}else if("endsOn"in this._params){
this._start=this._unit.parseFromObject(this._params.endsOn);
this.shiftPixels(-this._timeline.getPixelLength());
}else if("centersOn"in this._params){
this._start=this._unit.parseFromObject(this._params.centersOn);
this.shiftPixels(-this._timeline.getPixelLength()/2);
}else{
this._start=this._unit.makeDefaultValue();
this.shiftPixels(-this._timeline.getPixelLength()/2);
}
};
Timeline.HotZoneEther.prototype.setDate=function(date){
this._start=this._unit.cloneValue(date);
};
Timeline.HotZoneEther.prototype.shiftPixels=function(pixels){
this._start=this.pixelOffsetToDate(pixels);
};
Timeline.HotZoneEther.prototype.dateToPixelOffset=function(date){
return this._dateDiffToPixelOffset(this._start,date);
};
Timeline.HotZoneEther.prototype.pixelOffsetToDate=function(pixels){
return this._pixelOffsetToDate(pixels,this._start);
};
Timeline.HotZoneEther.prototype._dateDiffToPixelOffset=function(fromDate,toDate){
var scale=this._getScale();
var fromTime=fromDate;
var toTime=toDate;
var pixels=0;
if(this._unit.compare(fromTime,toTime)<0){
var z=0;
while(z=0){
if(this._unit.compare(fromTime,this._zones[z].startTime)>0){
break;
}
z--;
}
while(this._unit.compare(fromTime,toTime)>0){
var zone=this._zones[z];
var toTime2=this._unit.later(toTime,zone.startTime);
pixels+=(this._unit.compare(toTime2,fromTime)/(scale/zone.magnify));
fromTime=toTime2;
z--;
}
}
return pixels;
};
Timeline.HotZoneEther.prototype._pixelOffsetToDate=function(pixels,fromDate){
var scale=this._getScale();
var time=fromDate;
if(pixels>0){
var z=0;
while(z0){
var zone=this._zones[z];
var scale2=scale/zone.magnify;
if(zone.endTime==Number.POSITIVE_INFINITY){
time=this._unit.change(time,pixels*scale2);
pixels=0;
}else{
var pixels2=this._unit.compare(zone.endTime,time)/scale2;
if(pixels2>pixels){
time=this._unit.change(time,pixels*scale2);
pixels=0;
}else{
time=zone.endTime;
pixels-=pixels2;
}
}
z++;
}
}else{
var z=this._zones.length-1;
while(z>=0){
if(this._unit.compare(time,this._zones[z].startTime)>0){
break;
}
z--;
}
pixels=-pixels;
while(pixels>0){
var zone=this._zones[z];
var scale2=scale/zone.magnify;
if(zone.startTime==Number.NEGATIVE_INFINITY){
time=this._unit.change(time,-pixels*scale2);
pixels=0;
}else{
var pixels2=this._unit.compare(time,zone.startTime)/scale2;
if(pixels2>pixels){
time=this._unit.change(time,-pixels*scale2);
pixels=0;
}else{
time=zone.startTime;
pixels-=pixels2;
}
}
z--;
}
}
return time;
};
Timeline.HotZoneEther.prototype._getScale=function(){
return this._interval/this._pixelsPerInterval;
};
/* labellers.js */
Timeline.GregorianDateLabeller=function(locale,timeZone){
this._locale=locale;
this._timeZone=timeZone;
};
Timeline.GregorianDateLabeller.monthNames=[];
Timeline.GregorianDateLabeller.dayNames=[];
Timeline.GregorianDateLabeller.labelIntervalFunctions=[];
Timeline.GregorianDateLabeller.getMonthName=function(month,locale){
return Timeline.GregorianDateLabeller.monthNames[locale][month];
};
Timeline.GregorianDateLabeller.prototype.labelInterval=function(date,intervalUnit){
var f=Timeline.GregorianDateLabeller.labelIntervalFunctions[this._locale];
if(f==null){
f=Timeline.GregorianDateLabeller.prototype.defaultLabelInterval;
}
return f.call(this,date,intervalUnit);
};
Timeline.GregorianDateLabeller.prototype.labelPrecise=function(date){
return Timeline.DateTime.removeTimeZoneOffset(
date,
this._timeZone
).toUTCString();
};
Timeline.GregorianDateLabeller.prototype.defaultLabelInterval=function(date,intervalUnit){
var text;
var emphasized=false;
date=Timeline.DateTime.removeTimeZoneOffset(date,this._timeZone);
switch(intervalUnit){
case Timeline.DateTime.MILLISECOND:
text=date.getUTCMilliseconds();
break;
case Timeline.DateTime.SECOND:
text=date.getUTCSeconds();
break;
case Timeline.DateTime.MINUTE:
var m=date.getUTCMinutes();
if(m==0){
text=date.getUTCHours()+":00";
emphasized=true;
}else{
text=m;
}
break;
case Timeline.DateTime.HOUR:
text=date.getUTCHours()+"hr";
break;
case Timeline.DateTime.DAY:
text=Timeline.GregorianDateLabeller.getMonthName(date.getUTCMonth(),this._locale)+" "+date.getUTCDate();
break;
case Timeline.DateTime.WEEK:
text=Timeline.GregorianDateLabeller.getMonthName(date.getUTCMonth(),this._locale)+" "+date.getUTCDate();
break;
case Timeline.DateTime.MONTH:
var m=date.getUTCMonth();
if(m!=0){
text=Timeline.GregorianDateLabeller.getMonthName(m,this._locale);
break;
}
case Timeline.DateTime.YEAR:
case Timeline.DateTime.DECADE:
case Timeline.DateTime.CENTURY:
case Timeline.DateTime.MILLENNIUM:
var y=date.getUTCFullYear();
if(y>0){
text=date.getUTCFullYear();
}else{
text=(1-y)+"BC";
}
emphasized=
(intervalUnit==Timeline.DateTime.MONTH)||
(intervalUnit==Timeline.DateTime.DECADE&&y%100==0)||
(intervalUnit==Timeline.DateTime.CENTURY&&y%1000==0);
break;
default:
text=date.toUTCString();
}
return{text:text,emphasized:emphasized};
}
/* layouts.js */
Timeline.StaticTrackBasedLayout=function(params){
this._eventSource=params.eventSource;
this._ether=params.ether;
this._theme=params.theme;
this._showText=("showText"in params)?params.showText:true;
this._laidout=false;
var layout=this;
if(this._eventSource!=null){
this._eventSource.addListener({
onAddMany:function(){
layout._laidout=false;
}
});
}
};
Timeline.StaticTrackBasedLayout.prototype.initialize=function(timeline){
this._timeline=timeline;
};
Timeline.StaticTrackBasedLayout.prototype.getTrack=function(evt){
if(!this._laidout){
this._tracks=[];
this._layout();
this._laidout=true;
}
return this._tracks[evt.getID()];
};
Timeline.StaticTrackBasedLayout.prototype.getTrackCount=function(){
if(!this._laidout){
this._tracks=[];
this._layout();
this._laidout=true;
}
return this._trackCount;
};
Timeline.StaticTrackBasedLayout.prototype._layout=function(){
if(this._eventSource==null){
return;
}
var streams=[Number.NEGATIVE_INFINITY];
var layout=this;
var showText=this._showText;
var theme=this._theme;
var eventTheme=theme.event;
var layoutInstant=function(evt,startPixel,endPixel,streamOffset){
var finalPixel=startPixel-1;
if(evt.isImprecise()){
finalPixel=endPixel;
}
if(showText){
finalPixel=Math.max(finalPixel,startPixel+eventTheme.label.width);
}
return finalPixel;
};
var layoutDuration=function(evt,startPixel,endPixel,streamOffset){
if(evt.isImprecise()){
var startDate=evt.getStart();
var endDate=evt.getEnd();
var startPixel2=Math.round(layout._ether.dateToPixelOffset(startDate));
var endPixel2=Math.round(layout._ether.dateToPixelOffset(endDate));
}else{
var startPixel2=startPixel;
var endPixel2=endPixel;
}
var finalPixel=endPixel2;
var length=Math.max(endPixel2-startPixel2,1);
if(showText){
if(length=streams.length){
streams.push(Number.NEGATIVE_INFINITY);
}
var streamOffset=(eventTheme.track.offset+
streamIndex*(eventTheme.track.height+eventTheme.track.gap))+"em";
layout._tracks[evt.getID()]=streamIndex;
if(evt.isInstant()){
streams[streamIndex]=layoutInstant(evt,startPixel,endPixel,streamOffset);
}else{
streams[streamIndex]=layoutDuration(evt,startPixel,endPixel,streamOffset);
}
};
var iterator=this._eventSource.getAllEventIterator();
while(iterator.hasNext()){
var evt=iterator.next();
layoutEvent(evt);
}
this._trackCount=streams.length;
};
/* painters.js */
Timeline.DurationEventPainter=function(params){
this._params=params;
this._theme=params.theme;
this._layout=params.layout;
this._showText=params.showText;
this._showLineForNoText=("showLineForNoText"in params)?
params.showLineForNoText:params.theme.event.instant.showLineForNoText;
this._filterMatcher=null;
this._highlightMatcher=null;
};
Timeline.DurationEventPainter.prototype.initialize=function(band,timeline){
this._band=band;
this._timeline=timeline;
this._layout.initialize(band,timeline);
this._eventLayer=null;
this._highlightLayer=null;
};
Timeline.DurationEventPainter.prototype.getLayout=function(){
return this._layout;
};
Timeline.DurationEventPainter.prototype.setLayout=function(layout){
this._layout=layout;
};
Timeline.DurationEventPainter.prototype.getFilterMatcher=function(){
return this._filterMatcher;
};
Timeline.DurationEventPainter.prototype.setFilterMatcher=function(filterMatcher){
this._filterMatcher=filterMatcher;
};
Timeline.DurationEventPainter.prototype.getHighlightMatcher=function(){
return this._highlightMatcher;
};
Timeline.DurationEventPainter.prototype.setHighlightMatcher=function(highlightMatcher){
this._highlightMatcher=highlightMatcher;
};
Timeline.DurationEventPainter.prototype.paint=function(){
var eventSource=this._band.getEventSource();
if(eventSource==null){
return;
}
if(this._highlightLayer!=null){
this._band.removeLayerDiv(this._highlightLayer);
}
this._highlightLayer=this._band.createLayerDiv(105);
this._highlightLayer.setAttribute("name","event-highlights");
this._highlightLayer.style.display="none";
if(this._eventLayer!=null){
this._band.removeLayerDiv(this._eventLayer);
}
this._eventLayer=this._band.createLayerDiv(110);
this._eventLayer.setAttribute("name","events");
this._eventLayer.style.display="none";
var minDate=this._band.getMinDate();
var maxDate=this._band.getMaxDate();
var doc=this._timeline.getDocument();
var p=this;
var eventLayer=this._eventLayer;
var highlightLayer=this._highlightLayer;
var showText=this._showText;
var theme=this._params.theme;
var eventTheme=theme.event;
var trackOffset=eventTheme.track.offset;
var trackHeight=("trackHeight"in this._params)?this._params.trackHeight:eventTheme.track.height;
var trackGap=("trackGap"in this._params)?this._params.trackGap:eventTheme.track.gap;
var appendIcon=function(evt,div){
var icon=evt.getIcon();
var img=Timeline.Graphics.createTranslucentImage(
doc,icon!=null?icon:eventTheme.instant.icon
);
div.appendChild(img);
div.style.cursor="pointer";
Timeline.DOM.registerEvent(div,"mousedown",function(elmt,domEvt,target){
p._onClickInstantEvent(img,domEvt,evt);
});
};
var createHighlightDiv=function(highlightIndex,startPixel,length,highlightOffset,highlightWidth){
if(highlightIndex>=0){
var color=eventTheme.highlightColors[Math.min(highlightIndex,eventTheme.highlightColors.length-1)];
var div=doc.createElement("div");
div.style.position="absolute";
div.style.overflow="hidden";
div.style.left=(startPixel-3)+"px";
div.style.width=(length+6)+"px";
div.style.top=highlightOffset+"em";
div.style.height=highlightWidth+"em";
div.style.background=color;
highlightLayer.appendChild(div);
}
};
var createInstantDiv=function(evt,startPixel,endPixel,streamOffset,highlightIndex,highlightOffset,highlightWidth){
if(evt.isImprecise()){
var length=Math.max(endPixel-startPixel,1);
var divImprecise=doc.createElement("div");
divImprecise.style.position="absolute";
divImprecise.style.overflow="hidden";
divImprecise.style.top=streamOffset;
divImprecise.style.height=trackHeight+"em";
divImprecise.style.left=startPixel+"px";
divImprecise.style.width=length+"px";
divImprecise.style.background=eventTheme.instant.impreciseColor;
if(eventTheme.instant.impreciseOpacity<100){
Timeline.Graphics.setOpacity(divImprecise,eventTheme.instant.impreciseOpacity);
}
eventLayer.appendChild(divImprecise);
}
var div=doc.createElement("div");
div.style.position="absolute";
div.style.overflow="hidden";
eventLayer.appendChild(div);
var foreground=evt.getTextColor();
var background=evt.getColor();
var realign=-8;
var length=16;
if(showText){
div.style.width=eventTheme.label.width+"px";
div.style.color=foreground!=null?foreground:eventTheme.label.outsideColor;
appendIcon(evt,div);
div.appendChild(doc.createTextNode(evt.getText()));
}else{
if(p._showLineForNoText){
div.style.width="10px";
div.style.borderLeft="10px solid "+(background!=null?background:eventTheme.instant.lineColor);
realign=0;
length=1;
}else{
appendIcon(evt,div);
}
}
div.style.top=streamOffset;
div.style.height=trackHeight+"em";
div.style.left=(startPixel+realign)+"px";
createHighlightDiv(highlightIndex,(startPixel+realign),length,highlightOffset,highlightWidth);
};
var createDurationDiv=function(evt,startPixel,endPixel,streamOffset,highlightIndex,highlightOffset,highlightWidth){
var attachClickEvent=function(elmt){
elmt.style.cursor="pointer";
Timeline.DOM.registerEvent(elmt,"mousedown",function(elmt,domEvt,target){
p._onClickDurationEvent(domEvt,evt,target);
});
};
var length=Math.max(endPixel-startPixel,1);
if(evt.isImprecise()){
var div=doc.createElement("div");
div.style.position="absolute";
div.style.overflow="hidden";
div.style.top=streamOffset;
div.style.height=trackHeight+"em";
div.style.left=startPixel+"px";
div.style.width=length+"px";
div.style.background=eventTheme.duration.impreciseColor;
if(eventTheme.duration.impreciseOpacity<100){
Timeline.Graphics.setOpacity(div,eventTheme.duration.impreciseOpacity);
}
eventLayer.appendChild(div);
var startDate=evt.getLatestStart();
var endDate=evt.getEarliestEnd();
var startPixel2=Math.round(p._band.dateToPixelOffset(startDate));
var endPixel2=Math.round(p._band.dateToPixelOffset(endDate));
}else{
var startPixel2=startPixel;
var endPixel2=endPixel;
}
var foreground=evt.getTextColor();
var outside=true;
if(startPixel2<=endPixel2){
length=Math.max(endPixel2-startPixel2,1);
outside=!(length>eventTheme.label.width);
div=doc.createElement("div");
div.style.position="absolute";
div.style.overflow="hidden";
div.style.top=streamOffset;
div.style.height=trackHeight+"em";
div.style.left=startPixel2+"px";
div.style.width=length+"px";
var background=evt.getColor();
div.style.background=background!=null?background:eventTheme.duration.color;
if(eventTheme.duration.opacity<100){
Timeline.Graphics.setOpacity(div,eventTheme.duration.opacity);
}
eventLayer.appendChild(div);
}else{
var temp=startPixel2;
startPixel2=endPixel2;
endPixel2=temp;
}
if(div==null){
console.log(evt);
}
attachClickEvent(div);
if(showText){
var divLabel=doc.createElement("div");
divLabel.style.position="absolute";
divLabel.style.top=streamOffset;
divLabel.style.height=trackHeight+"em";
divLabel.style.left=((length>eventTheme.label.width)?startPixel2:endPixel2)+"px";
divLabel.style.width=eventTheme.label.width+"px";
divLabel.style.color=foreground!=null?foreground:(outside?eventTheme.label.outsideColor:eventTheme.label.insideColor);
divLabel.style.overflow="hidden";
divLabel.appendChild(doc.createTextNode(evt.getText()));
eventLayer.appendChild(divLabel);
attachClickEvent(divLabel);
}
createHighlightDiv(highlightIndex,startPixel,endPixel-startPixel,highlightOffset,highlightWidth);
};
var createEventDiv=function(evt,highlightIndex){
var startDate=evt.getStart();
var endDate=evt.getEnd();
var startPixel=Math.round(p._band.dateToPixelOffset(startDate));
var endPixel=Math.round(p._band.dateToPixelOffset(endDate));
var streamOffset=(trackOffset+
p._layout.getTrack(evt)*(trackHeight+trackGap));
if(evt.isInstant()){
createInstantDiv(evt,startPixel,endPixel,streamOffset+"em",
highlightIndex,streamOffset-trackGap,trackHeight+2*trackGap);
}else{
createDurationDiv(evt,startPixel,endPixel,streamOffset+"em",
highlightIndex,streamOffset-trackGap,trackHeight+2*trackGap);
}
};
var filterMatcher=(this._filterMatcher!=null)?
this._filterMatcher:
function(evt){return true;};
var highlightMatcher=(this._highlightMatcher!=null)?
this._highlightMatcher:
function(evt){return-1;};
var iterator=eventSource.getEventIterator(minDate,maxDate);
while(iterator.hasNext()){
var evt=iterator.next();
if(filterMatcher(evt)){
createEventDiv(evt,highlightMatcher(evt));
}
}
this._highlightLayer.style.display="block";
this._eventLayer.style.display="block";
};
Timeline.DurationEventPainter.prototype.softPaint=function(){
};
Timeline.DurationEventPainter.prototype._onClickInstantEvent=function(icon,domEvt,evt){
domEvt.cancelBubble=true;
var c=Timeline.DOM.getPageCoordinates(icon);
this._showBubble(
c.left+Math.ceil(icon.offsetWidth/2),
c.top+Math.ceil(icon.offsetHeight/2),
evt
);
};
Timeline.DurationEventPainter.prototype._onClickDurationEvent=function(domEvt,evt,target){
domEvt.cancelBubble=true;
if("pageX"in domEvt){
var x=domEvt.pageX;
var y=domEvt.pageY;
}else{
var c=Timeline.DOM.getPageCoordinates(target);
var x=domEvt.offsetX+c.left;
var y=domEvt.offsetY+c.top;
}
this._showBubble(x,y,evt);
};
Timeline.DurationEventPainter.prototype._showBubble=function(x,y,evt){
var div=this._band.openBubbleForPoint(
x,y,
this._theme.event.bubble.width,
this._theme.event.bubble.height
);
evt.fillInfoBubble(div,this._theme,this._band.getLabeller());
};
/* sources.js */
Timeline.DefaultEventSource=function(eventIndex){
this._events=(eventIndex instanceof Object)?eventIndex:new Timeline.EventIndex();
this._listeners=[];
};
Timeline.DefaultEventSource.prototype.addListener=function(listener){
this._listeners.push(listener);
};
Timeline.DefaultEventSource.prototype.removeListener=function(listener){
for(var i=0;i0){
return url;
}else if(url.substr(0,1)=="/"){
return base.substr(0,base.indexOf("/",base.indexOf("://")+3))+url;
}else{
return base+url;
}
};
Timeline.DefaultEventSource.Event=function(
start,end,latestStart,earliestEnd,instant,
text,description,image,link,
icon,color,textColor){
this._id="e"+Math.floor(Math.random()*1000000);
this._instant=instant||(end==null);
this._start=start;
this._end=(end!=null)?end:start;
this._latestStart=(latestStart!=null)?latestStart:(instant?this._end:this._start);
this._earliestEnd=(earliestEnd!=null)?earliestEnd:(instant?this._start:this._end);
this._text=Timeline.HTML.deEntify(text);
this._description=Timeline.HTML.deEntify(description);
this._image=(image!=null&&image!="")?image:null;
this._link=(link!=null&&link!="")?link:null;
this._icon=(icon!=null&&icon!="")?icon:null;
this._color=(color!=null&&color!="")?color:null;
this._textColor=(textColor!=null&&textColor!="")?textColor:null;
this._wikiURL=null;
this._wikiSection=null;
};
Timeline.DefaultEventSource.Event.prototype={
getID:function(){return this._id;},
isInstant:function(){return this._instant;},
isImprecise:function(){return this._start!=this._latestStart||this._end!=this._earliestEnd;},
getStart:function(){return this._start;},
getEnd:function(){return this._end;},
getLatestStart:function(){return this._latestStart;},
getEarliestEnd:function(){return this._earliestEnd;},
getText:function(){return this._text;},
getDescription:function(){return this._description;},
getImage:function(){return this._image;},
getLink:function(){return this._link;},
getIcon:function(){return this._icon;},
getColor:function(){return this._color;},
getTextColor:function(){return this._textColor;},
getProperty:function(name){return null;},
getWikiURL:function(){return this._wikiURL;},
getWikiSection:function(){return this._wikiSection;},
setWikiInfo:function(wikiURL,wikiSection){
this._wikiURL=wikiURL;
this._wikiSection=wikiSection;
},
fillDescription:function(elmt){
elmt.innerHTML=this._description;
},
fillWikiInfo:function(elmt){
if(this._wikiURL!=null&&this._wikiSection!=null){
var wikiID=this.getProperty("wikiID");
if(wikiID==null||wikiID.length==0){
wikiID=this.getText();
}
wikiID=wikiID.replace(/\s/g,"_");
var url=this._wikiURL+this._wikiSection.replace(/\s/g,"_")+"/"+wikiID;
var a=document.createElement("a");
a.href=url;
a.target="new";
a.innerHTML=Timeline.strings[Timeline.Platform.clientLocale].wikiLinkLabel;
elmt.appendChild(document.createTextNode("["));
elmt.appendChild(a);
elmt.appendChild(document.createTextNode("]"));
}else{
elmt.style.display="none";
}
},
fillTime:function(elmt,labeller){
if(this._instant){
if(this.isImprecise()){
elmt.appendChild(elmt.ownerDocument.createTextNode(labeller.labelPrecise(this._start)));
elmt.appendChild(elmt.ownerDocument.createElement("br"));
elmt.appendChild(elmt.ownerDocument.createTextNode(labeller.labelPrecise(this._end)));
}else{
elmt.appendChild(elmt.ownerDocument.createTextNode(labeller.labelPrecise(this._start)));
}
}else{
if(this.isImprecise()){
elmt.appendChild(elmt.ownerDocument.createTextNode(
labeller.labelPrecise(this._start)+" ~ "+labeller.labelPrecise(this._latestStart)));
elmt.appendChild(elmt.ownerDocument.createElement("br"));
elmt.appendChild(elmt.ownerDocument.createTextNode(
labeller.labelPrecise(this._earliestEnd)+" ~ "+labeller.labelPrecise(this._end)));
}else{
elmt.appendChild(elmt.ownerDocument.createTextNode(labeller.labelPrecise(this._start)));
elmt.appendChild(elmt.ownerDocument.createElement("br"));
elmt.appendChild(elmt.ownerDocument.createTextNode(labeller.labelPrecise(this._end)));
}
}
},
fillInfoBubble:function(elmt,theme,labeller){
var doc=elmt.ownerDocument;
var title=this.getText();
var link=this.getLink();
var image=this.getImage();
if(image!=null){
var img=doc.createElement("img");
img.src=image;
theme.event.bubble.imageStyler(img);
elmt.appendChild(img);
}
var divTitle=doc.createElement("div");
var textTitle=doc.createTextNode(title);
if(link!=null){
var a=doc.createElement("a");
a.href=link;
a.appendChild(textTitle);
divTitle.appendChild(a);
}else{
divTitle.appendChild(textTitle);
}
theme.event.bubble.titleStyler(divTitle);
elmt.appendChild(divTitle);
var divBody=doc.createElement("div");
this.fillDescription(divBody);
theme.event.bubble.bodyStyler(divBody);
elmt.appendChild(divBody);
var divTime=doc.createElement("div");
this.fillTime(divTime,labeller);
theme.event.bubble.timeStyler(divTime);
elmt.appendChild(divTime);
var divWiki=doc.createElement("div");
this.fillWikiInfo(divWiki);
theme.event.bubble.wikiStyler(divWiki);
elmt.appendChild(divWiki);
}
};
/* themes.js */
Timeline.ClassicTheme=new Object();
Timeline.ClassicTheme.implementations=[];
Timeline.ClassicTheme.create=function(locale){
if(locale==null){
locale=Timeline.Platform.getDefaultLocale();
}
var f=Timeline.ClassicTheme.implementations[locale];
if(f==null){
f=Timeline.ClassicTheme._Impl;
}
return new f();
};
Timeline.ClassicTheme._Impl=function(){
this.firstDayOfWeek=0;
this.ether={
backgroundColors:[
"#fff",
"#daecf2",
"#82cee7",
"#fe3ef"
],
highlightColor:"white",
highlightOpacity:50,
interval:{
line:{
show:true,
color:"#aaa",
opacity:25
},
weekend:{
color:"#FFFFE0",
opacity:30
},
marker:{
hAlign:"Bottom",
hBottomStyler:function(elmt){
elmt.className="timeline-ether-marker-bottom";
},
hBottomEmphasizedStyler:function(elmt){
elmt.className="timeline-ether-marker-bottom-emphasized";
},
hTopStyler:function(elmt){
elmt.className="timeline-ether-marker-top";
},
hTopEmphasizedStyler:function(elmt){
elmt.className="timeline-ether-marker-top-emphasized";
},
vAlign:"Right",
vRightStyler:function(elmt){
elmt.className="timeline-ether-marker-right";
},
vRightEmphasizedStyler:function(elmt){
elmt.className="timeline-ether-marker-right-emphasized";
},
vLeftStyler:function(elmt){
elmt.className="timeline-ether-marker-left";
},
vLeftEmphasizedStyler:function(elmt){
elmt.className="timeline-ether-marker-left-emphasized";
}
}
}
};
this.event={
track:{
offset:0.5,
height:1.5,
gap:0.5
},
instant:{
icon:Timeline.urlPrefix+"images/dull-blue-circle.png",
lineColor:"#00AFE9",
impreciseColor:"#00AFE9",
impreciseOpacity:20,
showLineForNoText:true
},
duration:{
color:"#00AFE9",
opacity:100,
impreciseColor:"#00AFE9",
impreciseOpacity:20
},
label:{
insideColor:"white",
outsideColor:"#00AFE9",
width:500
},
highlightColors:[
"#FFFF00",
"#FFC000",
"#FF0000",
"#0000FF"
],
bubble:{
width:250,
height:200,
titleStyler:function(elmt){
elmt.className="timeline-event-bubble-title";
},
bodyStyler:function(elmt){
elmt.className="timeline-event-bubble-body";
},
imageStyler:function(elmt){
elmt.className="timeline-event-bubble-image";
},
wikiStyler:function(elmt){
elmt.className="timeline-event-bubble-wiki";
},
timeStyler:function(elmt){
elmt.className="timeline-event-bubble-time";
}
}
};
};
/* units.js */
Timeline.NativeDateUnit=new Object();
Timeline.NativeDateUnit.createLabeller=function(locale,timeZone){
return new Timeline.GregorianDateLabeller(locale,timeZone);
};
Timeline.NativeDateUnit.makeDefaultValue=function(){
return new Date();
};
Timeline.NativeDateUnit.cloneValue=function(v){
return new Date(v.getTime());
};
Timeline.NativeDateUnit.getParser=function(format){
if(typeof format=="string"){
format=format.toLowerCase();
}
return(format=="iso8601"||format=="iso 8601")?
Timeline.DateTime.parseIso8601DateTime:
Timeline.DateTime.parseGregorianDateTime;
};
Timeline.NativeDateUnit.parseFromObject=function(o){
return Timeline.DateTime.parseGregorianDateTime(o);
};
Timeline.NativeDateUnit.toNumber=function(v){
return v.getTime();
};
Timeline.NativeDateUnit.fromNumber=function(n){
return new Date(n);
};
Timeline.NativeDateUnit.compare=function(v1,v2){
var n1,n2;
if(typeof v1=="object"){
n1=v1.getTime();
}else{
n1=Number(v1);
}
if(typeof v2=="object"){
n2=v2.getTime();
}else{
n2=Number(v2);
}
return n1-n2;
};
Timeline.NativeDateUnit.earlier=function(v1,v2){
return Timeline.NativeDateUnit.compare(v1,v2)<0?v1:v2;
};
Timeline.NativeDateUnit.later=function(v1,v2){
return Timeline.NativeDateUnit.compare(v1,v2)>0?v1:v2;
};
Timeline.NativeDateUnit.change=function(v,n){
return new Date(v.getTime()+n);
};