2009-12-20 06:35:29 +00:00
/* band.js */
Timeline . _Band = function ( B , G , C ) { if ( B . autoWidth && typeof G . width == "string" ) { G . width = G . width . indexOf ( "%" ) > - 1 ? 0 : parseInt ( G . width ) ;
} this . _timeline = B ;
this . _bandInfo = G ;
this . _index = C ;
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 B . getUnit ( ) ) ? B . 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 E = this . _timeline . getDocument ( ) . createElement ( "div" ) ;
E . className = "timeline-band-input" ;
this . _timeline . addDiv ( E ) ;
this . _keyboardInput = document . createElement ( "input" ) ;
this . _keyboardInput . type = "text" ;
E . 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-" + C ;
this . _div . className = "timeline-band timeline-band-" + C ;
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" ) ;
2013-04-14 04:50:57 +00:00
//added by Kartik starts
SimileAjax . DOM . registerEventWithObject ( this . _div , "touchstart" , this , "_onTouchStart" ) ;
SimileAjax . DOM . registerEventWithObject ( this . _div , "touchmove" , this , "_onTouchMove" ) ;
Timeline . _Band . prototype . _onTouchStart = function ( D , A , E )
{
if ( A . touches . length == 1 )
{
var touch = A . changedTouches [ 0 ] ;
this . _dragX = touch . clientX ;
this . _dragY = touch . clientY ;
}
}
Timeline . _Band . prototype . _onTouchMove = function ( D , A , E )
{
if ( A . touches . length == 1 )
{
A . preventDefault ( ) ;
var touch = A . changedTouches [ 0 ] ;
var C = touch . clientX - this . _dragX ;
var B = touch . clientY - this . _dragY ;
this . _dragX = touch . clientX ;
this . _dragY = touch . clientY ;
this . _moveEther ( this . _timeline . isHorizontal ( ) ? C : B ) ;
this . _positionHighlight ( ) ;
this . _fireOnScroll ( ) ;
this . _setSyncWithBandDate ( ) ;
}
} ;
//added by Kartik ends
2009-12-20 06:35:29 +00:00
var F = this . _theme != null ? this . _theme . mouseWheel : "scroll" ;
if ( F === "zoom" || F === "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 , B ) ;
this . _etherPainter = G . etherPainter ;
G . etherPainter . initialize ( this , B ) ;
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 , B ) ;
this . _decorators = ( "decorators" in G ) ? G . decorators : [ ] ;
for ( var D = 0 ;
D < this . _decorators . length ;
D ++ ) { this . _decorators [ D ] . initialize ( this , B ) ;
} } ;
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 ( A , B ) { this . _eventTrackIncrement = B ;
if ( A > this . _eventTracksNeeded ) { this . _eventTracksNeeded = A ;
} } ;
Timeline . _Band . prototype . checkAutoWidth = function ( ) { if ( ! this . _timeline . autoWidth ) { return ;
} var C = this . _eventPainter . getType ( ) == "overview" ;
var A = C ? this . _theme . event . overviewTrack . autoWidthMargin : this . _theme . event . track . autoWidthMargin ;
var B = Math . ceil ( ( this . _eventTracksNeeded + A ) * this . _eventTrackIncrement ) ;
B += C ? 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 . getMinVisibleDateAfterDelta = function ( A ) { return this . _ether . pixelOffsetToDate ( A ) ;
} ;
Timeline . _Band . prototype . getMaxVisibleDate = function ( ) { return this . _ether . pixelOffsetToDate ( this . _viewLength ) ;
} ;
Timeline . _Band . prototype . getMaxVisibleDateAfterDelta = function ( A ) { return this . _ether . pixelOffsetToDate ( this . _viewLength + A ) ;
} ;
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 ( C , A ) { var D = this . _timeline . getDocument ( ) . createElement ( "div" ) ;
D . className = "timeline-band-layer" + ( typeof A == "string" ? ( " " + A ) : "" ) ;
D . style . zIndex = C ;
this . _innerDiv . appendChild ( D ) ;
var B = this . _timeline . getDocument ( ) . createElement ( "div" ) ;
B . className = "timeline-band-layer-inner" ;
if ( SimileAjax . Platform . browser . isIE ) { B . style . cursor = "move" ;
} else { B . style . cursor = "-moz-grab" ;
} D . appendChild ( B ) ;
return B ;
} ;
Timeline . _Band . prototype . removeLayerDiv = function ( A ) { this . _innerDiv . removeChild ( A . parentNode ) ;
} ;
Timeline . _Band . prototype . scrollToCenter = function ( A , C ) { var B = this . _ether . dateToPixelOffset ( A ) ;
if ( B < - this . _viewLength / 2 ) { this . setCenterVisibleDate ( this . pixelOffsetToDate ( B + this . _viewLength ) ) ;
} else { if ( B > 3 * this . _viewLength / 2 ) { this . setCenterVisibleDate ( this . pixelOffsetToDate ( B - this . _viewLength ) ) ;
} } this . _autoScroll ( Math . round ( this . _viewLength / 2 - this . _ether . dateToPixelOffset ( A ) ) , 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 ( C , A , F , E ) { if ( ! this . _zoomSteps ) { return ;
} A += this . _viewOffset ;
var D = this . _ether . pixelOffsetToDate ( A ) ;
var B = this . _ether . zoom ( C ) ;
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 ( ) ;
2013-04-14 04:50:57 +00:00
2009-12-20 06:35:29 +00:00
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 ( ) ;
} } ;
2013-04-14 04:50:57 +00:00
Timeline . _Band . prototype . _onMouseUp = function ( B , A , C ) {
this . _dragging = false ;
//console.log("mouse up");
//this._keyboardInput.focus();
2009-12-20 06:35:29 +00:00
} ;
Timeline . _Band . prototype . _onMouseOut = function ( C , B , D ) { var A = SimileAjax . DOM . getEventRelativeCoordinates ( B , C ) ;
A . x += this . _viewOffset ;
if ( A . x < 0 || A . x > C . offsetWidth || A . y < 0 || A . y > C . offsetHeight ) { this . _dragging = false ;
} } ;
2013-04-14 04:50:57 +00:00
Timeline . _Band . prototype . _onMouseScroll = function ( G , H , B ) { var A = new Date ( ) ;
2009-12-20 06:35:29 +00:00
A = A . getTime ( ) ;
if ( ! this . _lastScrollTime || ( ( A - this . _lastScrollTime ) > 50 ) ) { this . _lastScrollTime = A ;
var I = 0 ;
if ( H . wheelDelta ) { I = H . wheelDelta / 120 ;
} else { if ( H . detail ) { I = - H . detail / 3 ;
} } var F = this . _theme . mouseWheel ;
if ( this . _zoomSteps || F === "zoom" ) { var E = SimileAjax . DOM . getEventRelativeCoordinates ( H , G ) ;
if ( I != 0 ) { var D ;
if ( I > 0 ) { D = true ;
} if ( I < 0 ) { D = false ;
} this . _timeline . zoom ( D , E . x , E . y , G ) ;
} } else { if ( F === "scroll" ) { var C = 50 * ( I < 0 ? - 1 : 1 ) ;
this . _moveEther ( C ) ;
} } } if ( H . stopPropagation ) { H . stopPropagation ( ) ;
} H . cancelBubble = true ;
if ( H . preventDefault ) { H . preventDefault ( ) ;
} H . returnValue = false ;
} ;
Timeline . _Band . prototype . _onDblClick = function ( C , B , E ) { var A = SimileAjax . DOM . getEventRelativeCoordinates ( B , C ) ;
var D = A . x - ( this . _viewLength / 2 - this . _viewOffset ) ;
this . _autoScroll ( - D ) ;
} ;
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 ( ) ;
if ( ! this . _timeline . shiftOK ( this . _index , A ) ) { return ;
} 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 . busy = function ( ) { return ( this . _changing ) ;
} ;
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 ( ) ;
} ;
2013-04-14 04:50:57 +00:00
//added by kartik
//
2009-12-20 06:35:29 +00:00
/* compact-painter.js */
Timeline . CompactEventPainter = function ( A ) { this . _params = A ;
this . _onSelectListeners = [ ] ;
this . _filterMatcher = null ;
this . _highlightMatcher = null ;
this . _frc = null ;
this . _eventIdToElmt = { } ;
} ;
Timeline . CompactEventPainter . prototype . initialize = function ( B , A ) { this . _band = B ;
this . _timeline = A ;
this . _backLayer = null ;
this . _eventLayer = null ;
this . _lineLayer = null ;
this . _highlightLayer = null ;
this . _eventIdToElmt = null ;
} ;
Timeline . CompactEventPainter . prototype . addOnSelectListener = function ( A ) { this . _onSelectListeners . push ( A ) ;
} ;
Timeline . CompactEventPainter . prototype . removeOnSelectListener = function ( B ) { for ( var A = 0 ;
A < this . _onSelectListeners . length ;
A ++ ) { if ( this . _onSelectListeners [ A ] == B ) { this . _onSelectListeners . splice ( A , 1 ) ;
break ;
} } } ;
Timeline . CompactEventPainter . prototype . getFilterMatcher = function ( ) { return this . _filterMatcher ;
} ;
Timeline . CompactEventPainter . prototype . setFilterMatcher = function ( A ) { this . _filterMatcher = A ;
} ;
Timeline . CompactEventPainter . prototype . getHighlightMatcher = function ( ) { return this . _highlightMatcher ;
} ;
Timeline . CompactEventPainter . prototype . setHighlightMatcher = function ( A ) { this . _highlightMatcher = A ;
} ;
Timeline . CompactEventPainter . prototype . paint = function ( ) { var N = this . _band . getEventSource ( ) ;
if ( N == null ) { return ;
} this . _eventIdToElmt = { } ;
this . _prepareForPainting ( ) ;
var O = this . _params . theme ;
var L = O . event ;
var G = { trackOffset : "trackOffset" in this . _params ? this . _params . trackOffset : 10 , trackHeight : "trackHeight" in this . _params ? this . _params . trackHeight : 10 , tapeHeight : O . event . tape . height , tapeBottomMargin : "tapeBottomMargin" in this . _params ? this . _params . tapeBottomMargin : 2 , labelBottomMargin : "labelBottomMargin" in this . _params ? this . _params . labelBottomMargin : 5 , labelRightMargin : "labelRightMargin" in this . _params ? this . _params . labelRightMargin : 5 , defaultIcon : L . instant . icon , defaultIconWidth : L . instant . iconWidth , defaultIconHeight : L . instant . iconHeight , customIconWidth : "iconWidth" in this . _params ? this . _params . iconWidth : L . instant . iconWidth , customIconHeight : "iconHeight" in this . _params ? this . _params . iconHeight : L . instant . iconHeight , iconLabelGap : "iconLabelGap" in this . _params ? this . _params . iconLabelGap : 2 , iconBottomMargin : "iconBottomMargin" in this . _params ? this . _params . iconBottomMargin : 2 } ;
if ( "compositeIcon" in this . _params ) { G . compositeIcon = this . _params . compositeIcon ;
G . compositeIconWidth = this . _params . compositeIconWidth || G . customIconWidth ;
G . compositeIconHeight = this . _params . compositeIconHeight || G . customIconHeight ;
} else { G . compositeIcon = G . defaultIcon ;
G . compositeIconWidth = G . defaultIconWidth ;
G . compositeIconHeight = G . defaultIconHeight ;
} G . defaultStackIcon = "icon" in this . _params . stackConcurrentPreciseInstantEvents ? this . _params . stackConcurrentPreciseInstantEvents . icon : G . defaultIcon ;
G . defaultStackIconWidth = "iconWidth" in this . _params . stackConcurrentPreciseInstantEvents ? this . _params . stackConcurrentPreciseInstantEvents . iconWidth : G . defaultIconWidth ;
G . defaultStackIconHeight = "iconHeight" in this . _params . stackConcurrentPreciseInstantEvents ? this . _params . stackConcurrentPreciseInstantEvents . iconHeight : G . defaultIconHeight ;
var B = this . _band . getMinDate ( ) ;
var D = this . _band . getMaxDate ( ) ;
var R = ( this . _filterMatcher != null ) ? this . _filterMatcher : function ( S ) { return true ;
} ;
var Q = ( this . _highlightMatcher != null ) ? this . _highlightMatcher : function ( S ) { return - 1 ;
} ;
var F = N . getEventIterator ( B , D ) ;
var H = "stackConcurrentPreciseInstantEvents" in this . _params && typeof this . _params . stackConcurrentPreciseInstantEvents == "object" ;
var P = "collapseConcurrentPreciseInstantEvents" in this . _params && this . _params . collapseConcurrentPreciseInstantEvents ;
if ( P || H ) { var M = [ ] ;
var A = null ;
while ( F . hasNext ( ) ) { var E = F . next ( ) ;
if ( R ( E ) ) { if ( ! E . isInstant ( ) || E . isImprecise ( ) ) { this . paintEvent ( E , G , this . _params . theme , Q ( E ) ) ;
} else { if ( A != null && A . getStart ( ) . getTime ( ) == E . getStart ( ) . getTime ( ) ) { M [ M . length - 1 ] . push ( E ) ;
} else { M . push ( [ E ] ) ;
A = E ;
} } } } for ( var J = 0 ;
J < M . length ;
J ++ ) { var K = M [ J ] ;
if ( K . length == 1 ) { this . paintEvent ( K [ 0 ] , G , this . _params . theme , Q ( E ) ) ;
} else { var C = - 1 ;
for ( var I = 0 ;
C < 0 && I < K . length ;
I ++ ) { C = Q ( K [ I ] ) ;
} if ( H ) { this . paintStackedPreciseInstantEvents ( K , G , this . _params . theme , C ) ;
} else { this . paintCompositePreciseInstantEvents ( K , G , this . _params . theme , C ) ;
} } } } else { while ( F . hasNext ( ) ) { var E = F . next ( ) ;
if ( R ( E ) ) { this . paintEvent ( E , G , this . _params . theme , Q ( E ) ) ;
} } } this . _highlightLayer . style . display = "block" ;
this . _lineLayer . style . display = "block" ;
this . _eventLayer . style . display = "block" ;
} ;
Timeline . CompactEventPainter . prototype . softPaint = function ( ) { } ;
Timeline . CompactEventPainter . prototype . _prepareForPainting = function ( ) { var B = this . _band ;
if ( this . _backLayer == null ) { this . _backLayer = this . _band . createLayerDiv ( 0 , "timeline-band-events" ) ;
this . _backLayer . style . visibility = "hidden" ;
var A = document . createElement ( "span" ) ;
A . className = "timeline-event-label" ;
this . _backLayer . appendChild ( A ) ;
this . _frc = SimileAjax . Graphics . getFontRenderingContext ( A ) ;
} this . _frc . update ( ) ;
this . _tracks = [ ] ;
if ( this . _highlightLayer != null ) { B . removeLayerDiv ( this . _highlightLayer ) ;
} this . _highlightLayer = B . createLayerDiv ( 105 , "timeline-band-highlights" ) ;
this . _highlightLayer . style . display = "none" ;
if ( this . _lineLayer != null ) { B . removeLayerDiv ( this . _lineLayer ) ;
} this . _lineLayer = B . createLayerDiv ( 110 , "timeline-band-lines" ) ;
this . _lineLayer . style . display = "none" ;
if ( this . _eventLayer != null ) { B . removeLayerDiv ( this . _eventLayer ) ;
} this . _eventLayer = B . createLayerDiv ( 115 , "timeline-band-events" ) ;
this . _eventLayer . style . display = "none" ;
} ;
Timeline . CompactEventPainter . prototype . paintEvent = function ( B , C , D , A ) { if ( B . isInstant ( ) ) { this . paintInstantEvent ( B , C , D , A ) ;
} else { this . paintDurationEvent ( B , C , D , A ) ;
} } ;
Timeline . CompactEventPainter . prototype . paintInstantEvent = function ( B , C , D , A ) { if ( B . isImprecise ( ) ) { this . paintImpreciseInstantEvent ( B , C , D , A ) ;
} else { this . paintPreciseInstantEvent ( B , C , D , A ) ;
} } ;
Timeline . CompactEventPainter . prototype . paintDurationEvent = function ( B , C , D , A ) { if ( B . isImprecise ( ) ) { this . paintImpreciseDurationEvent ( B , C , D , A ) ;
} else { this . paintPreciseDurationEvent ( B , C , D , A ) ;
} } ;
Timeline . CompactEventPainter . prototype . paintPreciseInstantEvent = function ( H , F , B , A ) { var C = { tooltip : H . getProperty ( "tooltip" ) || H . getText ( ) } ;
var E = { url : H . getIcon ( ) } ;
if ( E . url == null ) { E . url = F . defaultIcon ;
E . width = F . defaultIconWidth ;
E . height = F . defaultIconHeight ;
E . className = "timeline-event-icon-default" ;
} else { E . width = H . getProperty ( "iconWidth" ) || F . customIconWidth ;
E . height = H . getProperty ( "iconHeight" ) || F . customIconHeight ;
} var J = { text : H . getText ( ) , color : H . getTextColor ( ) || H . getColor ( ) , className : H . getClassName ( ) } ;
var G = this . paintTapeIconLabel ( H . getStart ( ) , C , null , E , J , F , B , A ) ;
var I = this ;
var D = function ( L , K , M ) { return I . _onClickInstantEvent ( G . iconElmtData . elmt , K , H ) ;
} ;
SimileAjax . DOM . registerEvent ( G . iconElmtData . elmt , "mousedown" , D ) ;
SimileAjax . DOM . registerEvent ( G . labelElmtData . elmt , "mousedown" , D ) ;
this . _eventIdToElmt [ H . getID ( ) ] = G . iconElmtData . elmt ;
} ;
Timeline . CompactEventPainter . prototype . paintCompositePreciseInstantEvents = function ( J , H , D , B ) { var K = J [ 0 ] ;
var A = [ ] ;
for ( var C = 0 ;
C < J . length ;
C ++ ) { A . push ( J [ C ] . getProperty ( "tooltip" ) || J [ C ] . getText ( ) ) ;
} var E = { tooltip : A . join ( "; " ) } ;
var G = { url : H . compositeIcon , width : H . compositeIconWidth , height : H . compositeIconHeight , className : "timeline-event-icon-composite" } ;
var M = { text : String . substitute ( this . _params . compositeEventLabelTemplate , [ J . length ] ) } ;
var I = this . paintTapeIconLabel ( K . getStart ( ) , E , null , G , M , H , D , B ) ;
var L = this ;
var F = function ( O , N , P ) { return L . _onClickMultiplePreciseInstantEvent ( I . iconElmtData . elmt , N , J ) ;
} ;
SimileAjax . DOM . registerEvent ( I . iconElmtData . elmt , "mousedown" , F ) ;
SimileAjax . DOM . registerEvent ( I . labelElmtData . elmt , "mousedown" , F ) ;
for ( var C = 0 ;
C < J . length ;
C ++ ) { this . _eventIdToElmt [ J [ C ] . getID ( ) ] = I . iconElmtData . elmt ;
} } ;
Timeline . CompactEventPainter . prototype . paintStackedPreciseInstantEvents = function ( T , j , c , E ) { var S = "limit" in this . _params . stackConcurrentPreciseInstantEvents ? this . _params . stackConcurrentPreciseInstantEvents . limit : 10 ;
var G = "moreMessageTemplate" in this . _params . stackConcurrentPreciseInstantEvents ? this . _params . stackConcurrentPreciseInstantEvents . moreMessageTemplate : "%0 More Events" ;
var Q = S <= T . length - 2 ;
var B = this . _band ;
var L = function ( i ) { return Math . round ( B . dateToPixelOffset ( i ) ) ;
} ;
var O = function ( i ) { var r = { url : i . getIcon ( ) } ;
if ( r . url == null ) { r . url = j . defaultStackIcon ;
r . width = j . defaultStackIconWidth ;
r . height = j . defaultStackIconHeight ;
r . className = "timeline-event-icon-stack timeline-event-icon-default" ;
} else { r . width = i . getProperty ( "iconWidth" ) || j . customIconWidth ;
r . height = i . getProperty ( "iconHeight" ) || j . customIconHeight ;
r . className = "timeline-event-icon-stack" ;
} return r ;
} ;
var C = O ( T [ 0 ] ) ;
var V = 5 ;
var D = 0 ;
var g = 0 ;
var p = 0 ;
var U = 0 ;
var l = [ ] ;
for ( var n = 0 ;
n < T . length && ( ! Q || n < S ) ;
n ++ ) { var b = T [ n ] ;
var a = b . getText ( ) ;
var X = O ( b ) ;
var W = this . _frc . computeSize ( a ) ;
var K = { text : a , iconData : X , labelSize : W , iconLeft : C . width + n * V - X . width } ;
K . labelLeft = C . width + n * V + j . iconLabelGap ;
K . top = p ;
l . push ( K ) ;
D = Math . min ( D , K . iconLeft ) ;
p += W . height ;
g = Math . max ( g , K . labelLeft + W . width ) ;
U = Math . max ( U , K . top + X . height ) ;
} if ( Q ) { var e = String . substitute ( G , [ T . length - S ] ) ;
var H = this . _frc . computeSize ( e ) ;
var J = C . width + ( S - 1 ) * V + j . iconLabelGap ;
var m = p ;
p += H . height ;
g = Math . max ( g , J + H . width ) ;
} g += j . labelRightMargin ;
p += j . labelBottomMargin ;
U += j . iconBottomMargin ;
var F = L ( T [ 0 ] . getStart ( ) ) ;
var Y = [ ] ;
var N = Math . ceil ( Math . max ( U , p ) / j . trackHeight ) ;
var M = C . width + ( T . length - 1 ) * V ;
for ( var n = 0 ;
n < N ;
n ++ ) { Y . push ( { start : D , end : M } ) ;
} var f = Math . ceil ( p / j . trackHeight ) ;
for ( var n = 0 ;
n < f ;
n ++ ) { var P = Y [ n ] ;
P . end = Math . max ( P . end , g ) ;
} var k = this . _fitTracks ( F , Y ) ;
var Z = k * j . trackHeight + j . trackOffset ;
var q = this . _timeline . getDocument ( ) . createElement ( "div" ) ;
q . className = "timeline-event-icon-stack" ;
q . style . position = "absolute" ;
q . style . overflow = "visible" ;
q . style . left = F + "px" ;
q . style . top = Z + "px" ;
q . style . width = M + "px" ;
q . style . height = U + "px" ;
q . innerHTML = "<div style='position: relative'></div>" ;
this . _eventLayer . appendChild ( q ) ;
var I = this ;
var R = function ( r ) { try { var w = parseInt ( this . getAttribute ( "index" ) ) ;
var u = q . firstChild . childNodes ;
for ( var s = 0 ;
s < u . length ;
s ++ ) { var v = u [ s ] ;
if ( s == w ) { v . style . zIndex = u . length ;
} else { v . style . zIndex = u . length - s ;
} } } catch ( t ) { } } ;
var d = function ( u ) { var w = l [ u ] ;
var r = T [ u ] ;
var i = r . getProperty ( "tooltip" ) || r . getText ( ) ;
var v = I . _paintEventLabel ( { tooltip : i } , { text : w . text } , F + w . labelLeft , Z + w . top , w . labelSize . width , w . labelSize . height , c ) ;
v . elmt . setAttribute ( "index" , u ) ;
v . elmt . onmouseover = R ;
var t = SimileAjax . Graphics . createTranslucentImage ( w . iconData . url ) ;
var s = I . _timeline . getDocument ( ) . createElement ( "div" ) ;
s . className = "timeline-event-icon" + ( "className" in w . iconData ? ( " " + w . iconData . className ) : "" ) ;
s . style . left = w . iconLeft + "px" ;
s . style . top = w . top + "px" ;
s . style . zIndex = ( l . length - u ) ;
s . appendChild ( t ) ;
s . setAttribute ( "index" , u ) ;
s . onmouseover = R ;
q . firstChild . appendChild ( s ) ;
var x = function ( z , y , AA ) { return I . _onClickInstantEvent ( v . elmt , y , r ) ;
} ;
SimileAjax . DOM . registerEvent ( s , "mousedown" , x ) ;
SimileAjax . DOM . registerEvent ( v . elmt , "mousedown" , x ) ;
I . _eventIdToElmt [ r . getID ( ) ] = s ;
} ;
for ( var n = 0 ;
n < l . length ;
n ++ ) { d ( n ) ;
} if ( Q ) { var o = T . slice ( S ) ;
var A = this . _paintEventLabel ( { tooltip : e } , { text : e } , F + J , Z + m , H . width , H . height , c ) ;
var h = function ( r , i , s ) { return I . _onClickMultiplePreciseInstantEvent ( A . elmt , i , o ) ;
} ;
SimileAjax . DOM . registerEvent ( A . elmt , "mousedown" , h ) ;
for ( var n = 0 ;
n < o . length ;
n ++ ) { this . _eventIdToElmt [ o [ n ] . getID ( ) ] = A . elmt ;
} } } ;
Timeline . CompactEventPainter . prototype . paintImpreciseInstantEvent = function ( I , G , B , A ) { var C = { tooltip : I . getProperty ( "tooltip" ) || I . getText ( ) } ;
var E = { start : I . getStart ( ) , end : I . getEnd ( ) , latestStart : I . getLatestStart ( ) , earliestEnd : I . getEarliestEnd ( ) , isInstant : true } ;
var F = { url : I . getIcon ( ) } ;
if ( F . url == null ) { F = null ;
} else { F . width = I . getProperty ( "iconWidth" ) || G . customIconWidth ;
F . height = I . getProperty ( "iconHeight" ) || G . customIconHeight ;
} var K = { text : I . getText ( ) , color : I . getTextColor ( ) || I . getColor ( ) , className : I . getClassName ( ) } ;
var H = this . paintTapeIconLabel ( I . getStart ( ) , C , E , F , K , G , B , A ) ;
var J = this ;
var D = F != null ? function ( M , L , N ) { return J . _onClickInstantEvent ( H . iconElmtData . elmt , L , I ) ;
} : function ( M , L , N ) { return J . _onClickInstantEvent ( H . labelElmtData . elmt , L , I ) ;
} ;
SimileAjax . DOM . registerEvent ( H . labelElmtData . elmt , "mousedown" , D ) ;
SimileAjax . DOM . registerEvent ( H . impreciseTapeElmtData . elmt , "mousedown" , D ) ;
if ( F != null ) { SimileAjax . DOM . registerEvent ( H . iconElmtData . elmt , "mousedown" , D ) ;
this . _eventIdToElmt [ I . getID ( ) ] = H . iconElmtData . elmt ;
} else { this . _eventIdToElmt [ I . getID ( ) ] = H . labelElmtData . elmt ;
} } ;
Timeline . CompactEventPainter . prototype . paintPreciseDurationEvent = function ( I , G , B , A ) { var C = { tooltip : I . getProperty ( "tooltip" ) || I . getText ( ) } ;
var E = { start : I . getStart ( ) , end : I . getEnd ( ) , isInstant : false } ;
var F = { url : I . getIcon ( ) } ;
if ( F . url == null ) { F = null ;
} else { F . width = I . getProperty ( "iconWidth" ) || G . customIconWidth ;
F . height = I . getProperty ( "iconHeight" ) || G . customIconHeight ;
} var K = { text : I . getText ( ) , color : I . getTextColor ( ) || I . getColor ( ) , className : I . getClassName ( ) } ;
var H = this . paintTapeIconLabel ( I . getLatestStart ( ) , C , E , F , K , G , B , A ) ;
var J = this ;
var D = F != null ? function ( M , L , N ) { return J . _onClickInstantEvent ( H . iconElmtData . elmt , L , I ) ;
} : function ( M , L , N ) { return J . _onClickInstantEvent ( H . labelElmtData . elmt , L , I ) ;
} ;
SimileAjax . DOM . registerEvent ( H . labelElmtData . elmt , "mousedown" , D ) ;
SimileAjax . DOM . registerEvent ( H . tapeElmtData . elmt , "mousedown" , D ) ;
if ( F != null ) { SimileAjax . DOM . registerEvent ( H . iconElmtData . elmt , "mousedown" , D ) ;
this . _eventIdToElmt [ I . getID ( ) ] = H . iconElmtData . elmt ;
} else { this . _eventIdToElmt [ I . getID ( ) ] = H . labelElmtData . elmt ;
} } ;
Timeline . CompactEventPainter . prototype . paintImpreciseDurationEvent = function ( I , G , B , A ) { var C = { tooltip : I . getProperty ( "tooltip" ) || I . getText ( ) } ;
var E = { start : I . getStart ( ) , end : I . getEnd ( ) , latestStart : I . getLatestStart ( ) , earliestEnd : I . getEarliestEnd ( ) , isInstant : false } ;
var F = { url : I . getIcon ( ) } ;
if ( F . url == null ) { F = null ;
} else { F . width = I . getProperty ( "iconWidth" ) || G . customIconWidth ;
F . height = I . getProperty ( "iconHeight" ) || G . customIconHeight ;
} var K = { text : I . getText ( ) , color : I . getTextColor ( ) || I . getColor ( ) , className : I . getClassName ( ) } ;
var H = this . paintTapeIconLabel ( I . getLatestStart ( ) , C , E , F , K , G , B , A ) ;
var J = this ;
var D = F != null ? function ( M , L , N ) { return J . _onClickInstantEvent ( H . iconElmtData . elmt , L , I ) ;
} : function ( M , L , N ) { return J . _onClickInstantEvent ( H . labelElmtData . elmt , L , I ) ;
} ;
SimileAjax . DOM . registerEvent ( H . labelElmtData . elmt , "mousedown" , D ) ;
SimileAjax . DOM . registerEvent ( H . tapeElmtData . elmt , "mousedown" , D ) ;
if ( F != null ) { SimileAjax . DOM . registerEvent ( H . iconElmtData . elmt , "mousedown" , D ) ;
this . _eventIdToElmt [ I . getID ( ) ] = H . iconElmtData . elmt ;
} else { this . _eventIdToElmt [ I . getID ( ) ] = H . labelElmtData . elmt ;
} } ;
Timeline . CompactEventPainter . prototype . paintTapeIconLabel = function ( V , O , S , I , a , X , c , Z ) { var R = this . _band ;
var F = function ( e ) { return Math . round ( R . dateToPixelOffset ( e ) ) ;
} ;
var d = F ( V ) ;
var W = [ ] ;
var b = 0 ;
var B = 0 ;
var C = 0 ;
if ( S != null ) { b = X . tapeHeight + X . tapeBottomMargin ;
B = Math . ceil ( X . tapeHeight / X . trackHeight ) ;
var A = F ( S . end ) - d ;
var L = F ( S . start ) - d ;
for ( var Q = 0 ;
Q < B ;
Q ++ ) { W . push ( { start : L , end : A } ) ;
} C = X . trackHeight - ( b % X . tapeHeight ) ;
} var N = 0 ;
var U = 0 ;
if ( I != null ) { if ( "iconAlign" in I && I . iconAlign == "center" ) { N = - Math . floor ( I . width / 2 ) ;
} U = N + I . width + X . iconLabelGap ;
if ( B > 0 ) { W [ B - 1 ] . end = Math . max ( W [ B - 1 ] . end , U ) ;
} var E = I . height + X . iconBottomMargin + C ;
while ( E > 0 ) { W . push ( { start : N , end : U } ) ;
E -= X . trackHeight ;
} } var P = a . text ;
var H = this . _frc . computeSize ( P ) ;
var M = H . height + X . labelBottomMargin + C ;
var J = U + H . width + X . labelRightMargin ;
if ( B > 0 ) { W [ B - 1 ] . end = Math . max ( W [ B - 1 ] . end , J ) ;
} for ( var Y = 0 ;
M > 0 ;
Y ++ ) { if ( B + Y < W . length ) { var T = W [ B + Y ] ;
T . end = J ;
} else { W . push ( { start : 0 , end : J } ) ;
} M -= X . trackHeight ;
} var G = this . _fitTracks ( d , W ) ;
var K = G * X . trackHeight + X . trackOffset ;
var D = { } ;
D . labelElmtData = this . _paintEventLabel ( O , a , d + U , K + b , H . width , H . height , c ) ;
if ( S != null ) { if ( "latestStart" in S || "earliestEnd" in S ) { D . impreciseTapeElmtData = this . _paintEventTape ( O , S , X . tapeHeight , K , F ( S . start ) , F ( S . end ) , c . event . duration . impreciseColor , c . event . duration . impreciseOpacity , X , c ) ;
} if ( ! S . isInstant && "start" in S && "end" in S ) { D . tapeElmtData = this . _paintEventTape ( O , S , X . tapeHeight , K , d , F ( "earliestEnd" in S ? S . earliestEnd : S . end ) , S . color , 100 , X , c ) ;
} } if ( I != null ) { D . iconElmtData = this . _paintEventIcon ( O , I , K + b , d + N , X , c ) ;
} return D ;
} ;
Timeline . CompactEventPainter . prototype . _fitTracks = function ( F , C ) { var H ;
for ( H = 0 ;
H < this . _tracks . length ;
H ++ ) { var E = true ;
for ( var B = 0 ;
B < C . length && ( H + B ) < this . _tracks . length ;
B ++ ) { var G = this . _tracks [ H + B ] ;
var A = C [ B ] ;
if ( F + A . start < G ) { E = false ;
break ;
} } if ( E ) { break ;
} } for ( var D = 0 ;
D < C . length ;
D ++ ) { this . _tracks [ H + D ] = F + C [ D ] . end ;
} return H ;
} ;
Timeline . CompactEventPainter . prototype . _paintEventIcon = function ( C , D , H , G , E , F ) { var B = SimileAjax . Graphics . createTranslucentImage ( D . url ) ;
var A = this . _timeline . getDocument ( ) . createElement ( "div" ) ;
A . className = "timeline-event-icon" + ( "className" in D ? ( " " + D . className ) : "" ) ;
A . style . left = G + "px" ;
A . style . top = H + "px" ;
A . appendChild ( B ) ;
if ( "tooltip" in C && typeof C . tooltip == "string" ) { A . title = C . tooltip ;
} this . _eventLayer . appendChild ( A ) ;
return { left : G , top : H , width : E . iconWidth , height : E . iconHeight , elmt : A } ;
} ;
Timeline . CompactEventPainter . prototype . _paintEventLabel = function ( E , I , C , F , A , G , D ) { var H = this . _timeline . getDocument ( ) ;
var B = H . createElement ( "div" ) ;
B . className = "timeline-event-label" ;
B . style . left = C + "px" ;
B . style . width = ( A + 1 ) + "px" ;
B . style . top = F + "px" ;
B . innerHTML = I . text ;
if ( "tooltip" in E && typeof E . tooltip == "string" ) { B . title = E . tooltip ;
} if ( "color" in I && typeof I . color == "string" ) { B . style . color = I . color ;
} if ( "className" in I && typeof I . className == "string" ) { B . className += " " + I . className ;
} this . _eventLayer . appendChild ( B ) ;
return { left : C , top : F , width : A , height : G , elmt : B } ;
} ;
Timeline . CompactEventPainter . prototype . _paintEventTape = function ( G , H , K , J , D , A , E , C , I , F ) { var B = A - D ;
var L = this . _timeline . getDocument ( ) . createElement ( "div" ) ;
L . className = "timeline-event-tape" ;
L . style . left = D + "px" ;
L . style . top = J + "px" ;
L . style . width = B + "px" ;
L . style . height = K + "px" ;
if ( "tooltip" in G && typeof G . tooltip == "string" ) { L . title = G . tooltip ;
} if ( E != null && typeof H . color == "string" ) { L . style . backgroundColor = E ;
} if ( "backgroundImage" in H && typeof H . backgroundImage == "string" ) { L . style . backgroundImage = "url(" + backgroundImage + ")" ;
L . style . backgroundRepeat = ( "backgroundRepeat" in H && typeof H . backgroundRepeat == "string" ) ? H . backgroundRepeat : "repeat" ;
} SimileAjax . Graphics . setOpacity ( L , C ) ;
if ( "className" in H && typeof H . className == "string" ) { L . className += " " + H . className ;
} this . _eventLayer . appendChild ( L ) ;
return { left : D , top : J , width : B , height : K , elmt : L } ;
} ;
Timeline . CompactEventPainter . 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 ) ;
} } ;
Timeline . CompactEventPainter . prototype . _onClickMultiplePreciseInstantEvent = function ( E , A , B ) { var F = SimileAjax . DOM . getPageCoordinates ( E ) ;
this . _showBubble ( F . left + Math . ceil ( E . offsetWidth / 2 ) , F . top + Math . ceil ( E . offsetHeight / 2 ) , B ) ;
var D = [ ] ;
for ( var C = 0 ;
C < B . length ;
C ++ ) { D . push ( B [ C ] . getID ( ) ) ;
} this . _fireOnSelect ( D ) ;
A . cancelBubble = true ;
SimileAjax . DOM . cancelEvent ( A ) ;
return false ;
} ;
Timeline . CompactEventPainter . prototype . _onClickInstantEvent = function ( C , A , B ) { var D = SimileAjax . DOM . getPageCoordinates ( C ) ;
this . _showBubble ( D . left + Math . ceil ( C . offsetWidth / 2 ) , D . top + Math . ceil ( C . offsetHeight / 2 ) , [ B ] ) ;
this . _fireOnSelect ( [ B . getID ( ) ] ) ;
A . cancelBubble = true ;
SimileAjax . DOM . cancelEvent ( A ) ;
return false ;
} ;
Timeline . CompactEventPainter . prototype . _onClickDurationEvent = function ( F , B , C ) { if ( "pageX" in B ) { var A = B . pageX ;
var E = B . pageY ;
} else { var D = SimileAjax . DOM . getPageCoordinates ( F ) ;
var A = B . offsetX + D . left ;
var E = B . offsetY + D . top ;
} this . _showBubble ( A , E , [ C ] ) ;
this . _fireOnSelect ( [ C . getID ( ) ] ) ;
B . cancelBubble = true ;
SimileAjax . DOM . cancelEvent ( B ) ;
return false ;
} ;
Timeline . CompactEventPainter . prototype . showBubble = function ( A ) { var B = this . _eventIdToElmt [ A . getID ( ) ] ;
if ( B ) { var C = SimileAjax . DOM . getPageCoordinates ( B ) ;
this . _showBubble ( C . left + B . offsetWidth / 2 , C . top + B . offsetHeight / 2 , [ A ] ) ;
} } ;
Timeline . CompactEventPainter . prototype . _showBubble = function ( A , F , B ) { var E = document . createElement ( "div" ) ;
B = ( "fillInfoBubble" in B ) ? [ B ] : B ;
for ( var D = 0 ;
D < B . length ;
D ++ ) { var C = document . createElement ( "div" ) ;
E . appendChild ( C ) ;
B [ D ] . fillInfoBubble ( C , this . _params . theme , this . _band . getLabeller ( ) ) ;
} SimileAjax . WindowManager . cancelPopups ( ) ;
SimileAjax . Graphics . createBubbleForContentAndPoint ( E , A , F , this . _params . theme . event . bubble . width ) ;
} ;
Timeline . CompactEventPainter . prototype . _fireOnSelect = function ( B ) { for ( var A = 0 ;
A < this . _onSelectListeners . length ;
A ++ ) { this . _onSelectListeners [ A ] ( B ) ;
} } ;
/* decorators.js */
Timeline . SpanHighlightDecorator = function ( A ) { this . _unit = A . unit != null ? A . unit : SimileAjax . NativeDateUnit ;
this . _startDate = ( typeof A . startDate == "string" ) ? this . _unit . parseFromObject ( A . startDate ) : A . startDate ;
this . _endDate = ( typeof A . endDate == "string" ) ? this . _unit . parseFromObject ( A . endDate ) : A . endDate ;
this . _startLabel = A . startLabel != null ? A . startLabel : "" ;
this . _endLabel = A . endLabel != null ? A . endLabel : "" ;
this . _color = A . color ;
this . _cssClass = A . cssClass != null ? A . cssClass : null ;
this . _opacity = A . opacity != null ? A . opacity : 100 ;
this . _zIndex = ( A . inFront != null && A . inFront ) ? 113 : 10 ;
} ;
Timeline . SpanHighlightDecorator . prototype . initialize = function ( B , A ) { this . _band = B ;
this . _timeline = A ;
this . _layerDiv = null ;
} ;
Timeline . SpanHighlightDecorator . prototype . paint = function ( ) { if ( this . _layerDiv != null ) { this . _band . removeLayerDiv ( this . _layerDiv ) ;
} this . _layerDiv = this . _band . createLayerDiv ( this . _zIndex ) ;
this . _layerDiv . setAttribute ( "name" , "span-highlight-decorator" ) ;
this . _layerDiv . style . display = "none" ;
var E = this . _band . getMinDate ( ) ;
var A = this . _band . getMaxDate ( ) ;
if ( this . _unit . compare ( this . _startDate , A ) < 0 && this . _unit . compare ( this . _endDate , E ) > 0 ) { E = this . _unit . later ( E , this . _startDate ) ;
A = this . _unit . earlier ( A , this . _endDate ) ;
var F = this . _band . dateToPixelOffset ( E ) ;
var I = this . _band . dateToPixelOffset ( A ) ;
var H = this . _timeline . getDocument ( ) ;
var K = function ( ) { var L = H . createElement ( "table" ) ;
L . insertRow ( 0 ) . insertCell ( 0 ) ;
return L ;
} ;
var B = H . createElement ( "div" ) ;
B . className = "timeline-highlight-decorator" ;
if ( this . _cssClass ) { B . className += " " + this . _cssClass ;
} if ( this . _color != null ) { B . style . backgroundColor = this . _color ;
} if ( this . _opacity < 100 ) { SimileAjax . Graphics . setOpacity ( B , this . _opacity ) ;
} this . _layerDiv . appendChild ( B ) ;
var J = K ( ) ;
J . className = "timeline-highlight-label timeline-highlight-label-start" ;
var C = J . rows [ 0 ] . cells [ 0 ] ;
C . innerHTML = this . _startLabel ;
if ( this . _cssClass ) { C . className = "label_" + this . _cssClass ;
} this . _layerDiv . appendChild ( J ) ;
var G = K ( ) ;
G . className = "timeline-highlight-label timeline-highlight-label-end" ;
var D = G . rows [ 0 ] . cells [ 0 ] ;
D . innerHTML = this . _endLabel ;
if ( this . _cssClass ) { D . className = "label_" + this . _cssClass ;
} this . _layerDiv . appendChild ( G ) ;
if ( this . _timeline . isHorizontal ( ) ) { B . style . left = F + "px" ;
B . style . width = ( I - F ) + "px" ;
J . style . right = ( this . _band . getTotalViewLength ( ) - F ) + "px" ;
J . style . width = ( this . _startLabel . length ) + "em" ;
G . style . left = I + "px" ;
G . style . width = ( this . _endLabel . length ) + "em" ;
} else { B . style . top = F + "px" ;
B . style . height = ( I - F ) + "px" ;
J . style . bottom = F + "px" ;
J . style . height = "1.5px" ;
G . style . top = I + "px" ;
G . style . height = "1.5px" ;
} } this . _layerDiv . style . display = "block" ;
} ;
Timeline . SpanHighlightDecorator . prototype . softPaint = function ( ) { } ;
Timeline . PointHighlightDecorator = function ( A ) { this . _unit = A . unit != null ? A . unit : SimileAjax . NativeDateUnit ;
this . _date = ( typeof A . date == "string" ) ? this . _unit . parseFromObject ( A . date ) : A . date ;
this . _width = A . width != null ? A . width : 10 ;
this . _color = A . color ;
this . _cssClass = A . cssClass != null ? A . cssClass : "" ;
this . _opacity = A . opacity != null ? A . opacity : 100 ;
} ;
Timeline . PointHighlightDecorator . prototype . initialize = function ( B , A ) { this . _band = B ;
this . _timeline = A ;
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 C = this . _band . getMinDate ( ) ;
var E = this . _band . getMaxDate ( ) ;
if ( this . _unit . compare ( this . _date , E ) < 0 && this . _unit . compare ( this . _date , C ) > 0 ) { var A = this . _band . dateToPixelOffset ( this . _date ) ;
var B = A - Math . round ( this . _width / 2 ) ;
var D = this . _timeline . getDocument ( ) ;
var F = D . createElement ( "div" ) ;
F . className = "timeline-highlight-point-decorator" ;
F . className += " " + this . _cssClass ;
if ( this . _color != null ) { F . style . backgroundColor = this . _color ;
} if ( this . _opacity < 100 ) { SimileAjax . Graphics . setOpacity ( F , this . _opacity ) ;
} this . _layerDiv . appendChild ( F ) ;
if ( this . _timeline . isHorizontal ( ) ) { F . style . left = B + "px" ;
F . style . width = this . _width ;
} else { F . style . top = B + "px" ;
F . style . height = this . _width ;
} } this . _layerDiv . style . display = "block" ;
} ;
Timeline . PointHighlightDecorator . prototype . softPaint = function ( ) { } ;
/* detailed-painter.js */
Timeline . DetailedEventPainter = function ( A ) { this . _params = A ;
this . _onSelectListeners = [ ] ;
this . _filterMatcher = null ;
this . _highlightMatcher = null ;
this . _frc = null ;
this . _eventIdToElmt = { } ;
} ;
Timeline . DetailedEventPainter . prototype . initialize = function ( B , A ) { this . _band = B ;
this . _timeline = A ;
this . _backLayer = null ;
this . _eventLayer = null ;
this . _lineLayer = null ;
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 ;
A < this . _onSelectListeners . length ;
A ++ ) { if ( this . _onSelectListeners [ A ] == B ) { this . _onSelectListeners . splice ( A , 1 ) ;
break ;
} } } ;
Timeline . DetailedEventPainter . prototype . getFilterMatcher = function ( ) { return this . _filterMatcher ;
} ;
Timeline . DetailedEventPainter . prototype . setFilterMatcher = function ( A ) { this . _filterMatcher = A ;
} ;
Timeline . DetailedEventPainter . prototype . getHighlightMatcher = function ( ) { return this . _highlightMatcher ;
} ;
Timeline . DetailedEventPainter . prototype . setHighlightMatcher = function ( A ) { this . _highlightMatcher = A ;
} ;
Timeline . DetailedEventPainter . prototype . paint = function ( ) { var C = this . _band . getEventSource ( ) ;
if ( C == null ) { return ;
} this . _eventIdToElmt = { } ;
this . _prepareForPainting ( ) ;
var I = this . _params . theme . event ;
var G = Math . max ( I . track . height , this . _frc . getLineHeight ( ) ) ;
var F = { trackOffset : Math . round ( this . _band . getViewWidth ( ) / 2 - G / 2 ) , 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 D = this . _band . getMinDate ( ) ;
var B = this . _band . getMaxDate ( ) ;
var J = ( this . _filterMatcher != null ) ? this . _filterMatcher : function ( K ) { return true ;
} ;
var A = ( this . _highlightMatcher != null ) ? this . _highlightMatcher : function ( K ) { return - 1 ;
} ;
var E = C . getEventReverseIterator ( D , B ) ;
while ( E . hasNext ( ) ) { var H = E . next ( ) ;
if ( J ( H ) ) { this . paintEvent ( H , F , this . _params . theme , A ( H ) ) ;
} } 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 ;
if ( this . _backLayer == null ) { this . _backLayer = this . _band . createLayerDiv ( 0 , "timeline-band-events" ) ;
this . _backLayer . style . visibility = "hidden" ;
var A = document . createElement ( "span" ) ;
A . className = "timeline-event-label" ;
this . _backLayer . appendChild ( A ) ;
this . _frc = SimileAjax . Graphics . getFontRenderingContext ( A ) ;
} this . _frc . update ( ) ;
this . _lowerTracks = [ ] ;
this . _upperTracks = [ ] ;
if ( this . _highlightLayer != null ) { B . removeLayerDiv ( this . _highlightLayer ) ;
} this . _highlightLayer = B . createLayerDiv ( 105 , "timeline-band-highlights" ) ;
this . _highlightLayer . style . display = "none" ;
if ( this . _lineLayer != null ) { B . removeLayerDiv ( this . _lineLayer ) ;
} this . _lineLayer = B . createLayerDiv ( 110 , "timeline-band-lines" ) ;
this . _lineLayer . style . display = "none" ;
if ( this . _eventLayer != null ) { B . removeLayerDiv ( this . _eventLayer ) ;
} this . _eventLayer = B . createLayerDiv ( 110 , "timeline-band-events" ) ;
this . _eventLayer . style . display = "none" ;
} ;
Timeline . DetailedEventPainter . prototype . paintEvent = function ( B , C , D , A ) { if ( B . isInstant ( ) ) { this . paintInstantEvent ( B , C , D , A ) ;
} else { this . paintDurationEvent ( B , C , D , A ) ;
} } ;
Timeline . DetailedEventPainter . prototype . paintInstantEvent = function ( B , C , D , A ) { if ( B . isImprecise ( ) ) { this . paintImpreciseInstantEvent ( B , C , D , A ) ;
} else { this . paintPreciseInstantEvent ( B , C , D , A ) ;
} } ;
Timeline . DetailedEventPainter . prototype . paintDurationEvent = function ( B , C , D , A ) { if ( B . isImprecise ( ) ) { this . paintImpreciseDurationEvent ( B , C , D , A ) ;
} else { this . paintPreciseDurationEvent ( B , C , D , A ) ;
} } ;
Timeline . DetailedEventPainter . prototype . paintPreciseInstantEvent = function ( L , P , S , Q ) { var T = this . _timeline . getDocument ( ) ;
var J = L . getText ( ) ;
var G = L . getStart ( ) ;
var H = Math . round ( this . _band . dateToPixelOffset ( G ) ) ;
var A = Math . round ( H + P . iconWidth / 2 ) ;
var C = Math . round ( H - P . iconWidth / 2 ) ;
var E = this . _frc . computeSize ( J ) ;
var F = this . _findFreeTrackForSolid ( A , H ) ;
var B = this . _paintEventIcon ( L , F , C , P , S ) ;
var K = A + S . event . label . offsetFromLine ;
var O = F ;
var D = this . _getTrackData ( F ) ;
if ( Math . min ( D . solid , D . text ) >= K + E . width ) { D . solid = C ;
D . text = K ;
} else { D . solid = C ;
K = H + S . event . label . offsetFromLine ;
O = this . _findFreeTrackForText ( F , K + E . width , function ( U ) { U . line = H - 2 ;
} ) ;
this . _getTrackData ( O ) . text = C ;
this . _paintEventLine ( L , H , F , O , P , S ) ;
} var N = Math . round ( P . trackOffset + O * P . trackIncrement + P . trackHeight / 2 - E . height / 2 ) ;
var R = this . _paintEventLabel ( L , J , K , N , E . width , E . height , S ) ;
var M = this ;
var I = function ( V , U , W ) { return M . _onClickInstantEvent ( B . elmt , U , L ) ;
} ;
SimileAjax . DOM . registerEvent ( B . elmt , "mousedown" , I ) ;
SimileAjax . DOM . registerEvent ( R . elmt , "mousedown" , I ) ;
this . _createHighlightDiv ( Q , B , S ) ;
this . _eventIdToElmt [ L . getID ( ) ] = B . elmt ;
} ;
Timeline . DetailedEventPainter . prototype . paintImpreciseInstantEvent = function ( O , S , W , T ) { var X = this . _timeline . getDocument ( ) ;
var M = O . getText ( ) ;
var I = O . getStart ( ) ;
var U = O . getEnd ( ) ;
var K = Math . round ( this . _band . dateToPixelOffset ( I ) ) ;
var B = Math . round ( this . _band . dateToPixelOffset ( U ) ) ;
var A = Math . round ( K + S . iconWidth / 2 ) ;
var D = Math . round ( K - S . iconWidth / 2 ) ;
var G = this . _frc . computeSize ( M ) ;
var H = this . _findFreeTrackForSolid ( B , K ) ;
var E = this . _paintEventTape ( O , H , K , B , W . event . instant . impreciseColor , W . event . instant . impreciseOpacity , S , W ) ;
var C = this . _paintEventIcon ( O , H , D , S , W ) ;
var F = this . _getTrackData ( H ) ;
F . solid = D ;
var N = A + W . event . label . offsetFromLine ;
var J = N + G . width ;
var R ;
if ( J < B ) { R = H ;
} else { N = K + W . event . label . offsetFromLine ;
J = N + G . width ;
R = this . _findFreeTrackForText ( H , J , function ( Y ) { Y . line = K - 2 ;
} ) ;
this . _getTrackData ( R ) . text = D ;
this . _paintEventLine ( O , K , H , R , S , W ) ;
} var Q = Math . round ( S . trackOffset + R * S . trackIncrement + S . trackHeight / 2 - G . height / 2 ) ;
var V = this . _paintEventLabel ( O , M , N , Q , G . width , G . height , W ) ;
var P = this ;
var L = function ( Z , Y , a ) { return P . _onClickInstantEvent ( C . elmt , Y , O ) ;
} ;
SimileAjax . DOM . registerEvent ( C . elmt , "mousedown" , L ) ;
SimileAjax . DOM . registerEvent ( E . elmt , "mousedown" , L ) ;
SimileAjax . DOM . registerEvent ( V . elmt , "mousedown" , L ) ;
this . _createHighlightDiv ( T , C , W ) ;
this . _eventIdToElmt [ O . getID ( ) ] = C . elmt ;
} ;
Timeline . DetailedEventPainter . prototype . paintPreciseDurationEvent = function ( K , O , T , Q ) { var U = this . _timeline . getDocument ( ) ;
var I = K . getText ( ) ;
var E = K . getStart ( ) ;
var R = K . getEnd ( ) ;
var F = Math . round ( this . _band . dateToPixelOffset ( E ) ) ;
var A = Math . round ( this . _band . dateToPixelOffset ( R ) ) ;
var C = this . _frc . computeSize ( I ) ;
var D = this . _findFreeTrackForSolid ( A ) ;
var P = K . getColor ( ) ;
P = P != null ? P : T . event . duration . color ;
var B = this . _paintEventTape ( K , D , F , A , P , 100 , O , T ) ;
var H = this . _getTrackData ( D ) ;
H . solid = F ;
var J = F + T . event . label . offsetFromLine ;
var N = this . _findFreeTrackForText ( D , J + C . width , function ( V ) { V . line = F - 2 ;
} ) ;
this . _getTrackData ( N ) . text = F - 2 ;
this . _paintEventLine ( K , F , D , N , O , T ) ;
var M = Math . round ( O . trackOffset + N * O . trackIncrement + O . trackHeight / 2 - C . height / 2 ) ;
var S = this . _paintEventLabel ( K , I , J , M , C . width , C . height , T ) ;
var L = this ;
var G = function ( W , V , X ) { return L . _onClickDurationEvent ( B . elmt , V , K ) ;
} ;
SimileAjax . DOM . registerEvent ( B . elmt , "mousedown" , G ) ;
SimileAjax . DOM . registerEvent ( S . elmt , "mousedown" , G ) ;
this . _createHighlightDiv ( Q , B , T ) ;
this . _eventIdToElmt [ K . getID ( ) ] = B . elmt ;
} ;
Timeline . DetailedEventPainter . prototype . paintImpreciseDurationEvent = function ( M , T , Y , V ) { var Z = this . _timeline . getDocument ( ) ;
var K = M . getText ( ) ;
var G = M . getStart ( ) ;
var S = M . getLatestStart ( ) ;
var W = M . getEnd ( ) ;
var O = M . getEarliestEnd ( ) ;
var H = Math . round ( this . _band . dateToPixelOffset ( G ) ) ;
var E = Math . round ( this . _band . dateToPixelOffset ( S ) ) ;
var A = Math . round ( this . _band . dateToPixelOffset ( W ) ) ;
var F = Math . round ( this . _band . dateToPixelOffset ( O ) ) ;
var C = this . _frc . computeSize ( K ) ;
var D = this . _findFreeTrackForSolid ( A ) ;
var U = M . getColor ( ) ;
U = U != null ? U : Y . event . duration . color ;
var R = this . _paintEventTape ( M , D , H , A , Y . event . duration . impreciseColor , Y . event . duration . impreciseOpacity , T , Y ) ;
var B = this . _paintEventTape ( M , D , E , F , U , 100 , T , Y ) ;
var J = this . _getTrackData ( D ) ;
J . solid = H ;
var L = E + Y . event . label . offsetFromLine ;
var Q = this . _findFreeTrackForText ( D , L + C . width , function ( a ) { a . line = E - 2 ;
} ) ;
this . _getTrackData ( Q ) . text = E - 2 ;
this . _paintEventLine ( M , E , D , Q , T , Y ) ;
var P = Math . round ( T . trackOffset + Q * T . trackIncrement + T . trackHeight / 2 - C . height / 2 ) ;
var X = this . _paintEventLabel ( M , K , L , P , C . width , C . height , Y ) ;
var N = this ;
var I = function ( b , a , c ) { return N . _onClickDurationEvent ( B . elmt , a , M ) ;
} ;
SimileAjax . DOM . registerEvent ( B . elmt , "mousedown" , I ) ;
SimileAjax . DOM . registerEvent ( X . elmt , "mousedown" , I ) ;
this . _createHighlightDiv ( V , B , Y ) ;
this . _eventIdToElmt [ M . getID ( ) ] = B . elmt ;
} ;
Timeline . DetailedEventPainter . prototype . _findFreeTrackForSolid = function ( D , A ) { for ( var C = 0 ;
true ;
C ++ ) { if ( C < this . _lowerTracks . length ) { var B = this . _lowerTracks [ C ] ;
if ( Math . min ( B . solid , B . text ) > D && ( ! ( A ) || B . line > A ) ) { return C ;
} } else { this . _lowerTracks . push ( { solid : Number . POSITIVE _INFINITY , text : Number . POSITIVE _INFINITY , line : Number . POSITIVE _INFINITY } ) ;
return C ;
} if ( C < this . _upperTracks . length ) { var B = this . _upperTracks [ C ] ;
if ( Math . min ( B . solid , B . text ) > D && ( ! ( A ) || B . line > A ) ) { return - 1 - C ;
} } else { this . _upperTracks . push ( { solid : Number . POSITIVE _INFINITY , text : Number . POSITIVE _INFINITY , line : Number . POSITIVE _INFINITY } ) ;
return - 1 - C ;
} } } ;
Timeline . DetailedEventPainter . prototype . _findFreeTrackForText = function ( C , A , I ) { var B ;
var E ;
var F ;
var H ;
if ( C < 0 ) { B = true ;
F = - C ;
E = this . _findFreeUpperTrackForText ( F , A ) ;
H = - 1 - E ;
} else { if ( C > 0 ) { B = false ;
F = C + 1 ;
E = this . _findFreeLowerTrackForText ( F , A ) ;
H = E ;
} else { var G = this . _findFreeUpperTrackForText ( 0 , A ) ;
var J = this . _findFreeLowerTrackForText ( 1 , A ) ;
if ( J - 1 <= G ) { B = false ;
F = 1 ;
E = J ;
H = E ;
} else { B = true ;
F = 0 ;
E = G ;
H = - 1 - E ;
} } } if ( B ) { if ( E == this . _upperTracks . length ) { this . _upperTracks . push ( { solid : Number . POSITIVE _INFINITY , text : Number . POSITIVE _INFINITY , line : Number . POSITIVE _INFINITY } ) ;
} for ( var D = F ;
D < E ;
D ++ ) { I ( this . _upperTracks [ D ] ) ;
} } else { if ( E == this . _lowerTracks . length ) { this . _lowerTracks . push ( { solid : Number . POSITIVE _INFINITY , text : Number . POSITIVE _INFINITY , line : Number . POSITIVE _INFINITY } ) ;
} for ( var D = F ;
D < E ;
D ++ ) { I ( this . _lowerTracks [ D ] ) ;
} } return H ;
} ;
Timeline . DetailedEventPainter . prototype . _findFreeLowerTrackForText = function ( A , C ) { for ( ;
A < this . _lowerTracks . length ;
A ++ ) { var B = this . _lowerTracks [ A ] ;
if ( Math . min ( B . solid , B . text ) >= C ) { break ;
} } return A ;
} ;
Timeline . DetailedEventPainter . prototype . _findFreeUpperTrackForText = function ( A , C ) { for ( ;
A < this . _upperTracks . length ;
A ++ ) { var B = this . _upperTracks [ A ] ;
if ( Math . min ( B . solid , B . text ) >= C ) { break ;
} } return A ;
} ;
Timeline . DetailedEventPainter . prototype . _getTrackData = function ( A ) { return ( A < 0 ) ? this . _upperTracks [ - A - 1 ] : this . _lowerTracks [ A ] ;
} ;
Timeline . DetailedEventPainter . prototype . _paintEventLine = function ( J , E , D , A , G , F ) { var H = Math . round ( G . trackOffset + D * G . trackIncrement + G . trackHeight / 2 ) ;
var I = Math . round ( Math . abs ( A - D ) * G . trackIncrement ) ;
var C = "1px solid " + F . event . label . lineColor ;
var B = this . _timeline . getDocument ( ) . createElement ( "div" ) ;
B . style . position = "absolute" ;
B . style . left = E + "px" ;
B . style . width = F . event . label . offsetFromLine + "px" ;
B . style . height = I + "px" ;
if ( D > A ) { B . style . top = ( H - I ) + "px" ;
B . style . borderTop = C ;
} else { B . style . top = H + "px" ;
B . style . borderBottom = C ;
} B . style . borderLeft = C ;
this . _lineLayer . appendChild ( B ) ;
} ;
Timeline . DetailedEventPainter . prototype . _paintEventIcon = function ( J , B , C , F , E ) { var H = J . getIcon ( ) ;
H = H != null ? H : F . icon ;
var G = F . trackOffset + B * F . trackIncrement + F . trackHeight / 2 ;
var I = Math . round ( G - F . iconHeight / 2 ) ;
var D = SimileAjax . Graphics . createTranslucentImage ( H ) ;
var A = this . _timeline . getDocument ( ) . createElement ( "div" ) ;
A . style . position = "absolute" ;
A . style . left = C + "px" ;
A . style . top = I + "px" ;
A . appendChild ( D ) ;
A . style . cursor = "pointer" ;
if ( J . _title != null ) { A . title = J . _title ;
} this . _eventLayer . appendChild ( A ) ;
return { left : C , top : I , width : F . iconWidth , height : F . iconHeight , elmt : A } ;
} ;
Timeline . DetailedEventPainter . prototype . _paintEventLabel = function ( I , J , C , F , A , G , E ) { var H = this . _timeline . getDocument ( ) ;
var K = H . createElement ( "div" ) ;
K . style . position = "absolute" ;
K . style . left = C + "px" ;
K . style . width = A + "px" ;
K . style . top = F + "px" ;
K . style . height = G + "px" ;
K . style . backgroundColor = E . event . label . backgroundColor ;
SimileAjax . Graphics . setOpacity ( K , E . event . label . backgroundOpacity ) ;
this . _eventLayer . appendChild ( K ) ;
var B = H . createElement ( "div" ) ;
B . style . position = "absolute" ;
B . style . left = C + "px" ;
B . style . width = A + "px" ;
B . style . top = F + "px" ;
B . innerHTML = J ;
B . style . cursor = "pointer" ;
if ( I . _title != null ) { B . title = I . _title ;
} var D = I . getTextColor ( ) ;
if ( D == null ) { D = I . getColor ( ) ;
} if ( D != null ) { B . style . color = D ;
} this . _eventLayer . appendChild ( B ) ;
return { left : C , top : F , width : A , height : G , elmt : B } ;
} ;
Timeline . DetailedEventPainter . prototype . _paintEventTape = function ( L , B , D , A , G , C , I , H ) { var F = A - D ;
var E = H . event . tape . height ;
var K = I . trackOffset + B * I . trackIncrement + I . trackHeight / 2 ;
var J = Math . round ( K - E / 2 ) ;
var M = this . _timeline . getDocument ( ) . createElement ( "div" ) ;
M . style . position = "absolute" ;
M . style . left = D + "px" ;
M . style . width = F + "px" ;
M . style . top = J + "px" ;
M . style . height = E + "px" ;
M . style . backgroundColor = G ;
M . style . overflow = "hidden" ;
M . style . cursor = "pointer" ;
if ( L . _title != null ) { M . title = L . _title ;
} SimileAjax . Graphics . setOpacity ( M , C ) ;
this . _eventLayer . appendChild ( M ) ;
return { left : D , top : J , width : F , height : E , elmt : M } ;
} ;
Timeline . DetailedEventPainter . 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" ;
F . style . background = B ;
this . _highlightLayer . appendChild ( F ) ;
} } ;
Timeline . DetailedEventPainter . prototype . _onClickInstantEvent = function ( C , A , B ) { var D = SimileAjax . DOM . getPageCoordinates ( C ) ;
this . _showBubble ( D . left + Math . ceil ( C . offsetWidth / 2 ) , D . top + Math . ceil ( C . offsetHeight / 2 ) , B ) ;
this . _fireOnSelect ( B . getID ( ) ) ;
A . cancelBubble = true ;
SimileAjax . DOM . cancelEvent ( A ) ;
return false ;
} ;
Timeline . DetailedEventPainter . prototype . _onClickDurationEvent = function ( F , B , C ) { if ( "pageX" in B ) { var A = B . pageX ;
var E = B . pageY ;
} else { var D = SimileAjax . DOM . getPageCoordinates ( F ) ;
var A = B . offsetX + D . left ;
var E = B . offsetY + D . top ;
} this . _showBubble ( A , E , C ) ;
this . _fireOnSelect ( C . getID ( ) ) ;
B . cancelBubble = true ;
SimileAjax . DOM . cancelEvent ( B ) ;
return false ;
} ;
Timeline . DetailedEventPainter . prototype . showBubble = function ( A ) { var B = this . _eventIdToElmt [ A . getID ( ) ] ;
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 ( B , E , C ) { var D = document . createElement ( "div" ) ;
var A = this . _params . theme . event . bubble ;
C . fillInfoBubble ( D , this . _params . theme , this . _band . getLabeller ( ) ) ;
SimileAjax . WindowManager . cancelPopups ( ) ;
SimileAjax . Graphics . createBubbleForContentAndPoint ( D , B , E , A . width , null , A . maxHeight ) ;
} ;
Timeline . DetailedEventPainter . prototype . _fireOnSelect = function ( A ) { for ( var B = 0 ;
B < this . _onSelectListeners . length ;
B ++ ) { this . _onSelectListeners [ B ] ( A ) ;
} } ;
/* ether-painters.js */
Timeline . GregorianEtherPainter = function ( A ) { this . _params = A ;
this . _theme = A . theme ;
this . _unit = A . unit ;
this . _multiple = ( "multiple" in A ) ? A . multiple : 1 ;
} ;
Timeline . GregorianEtherPainter . prototype . initialize = function ( C , B ) { this . _band = C ;
this . _timeline = B ;
this . _backgroundLayer = C . createLayerDiv ( 0 ) ;
this . _backgroundLayer . setAttribute ( "name" , "ether-background" ) ;
this . _backgroundLayer . className = "timeline-ether-bg" ;
this . _markerLayer = null ;
this . _lineLayer = null ;
var D = ( "align" in this . _params && this . _params . align != undefined ) ? this . _params . align : this . _theme . ether . interval . marker [ B . isHorizontal ( ) ? "hAlign" : "vAlign" ] ;
var A = ( "showLine" in this . _params ) ? this . _params . showLine : this . _theme . ether . interval . line . show ;
this . _intervalMarkerLayout = new Timeline . EtherIntervalMarkerLayout ( this . _timeline , this . _band , this . _theme , D , A ) ;
this . _highlight = new Timeline . EtherHighlight ( this . _timeline , this . _band , this . _theme , this . _backgroundLayer ) ;
} ;
Timeline . GregorianEtherPainter . prototype . setHighlight = function ( A , B ) { this . _highlight . position ( A , B ) ;
} ;
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 C = this . _band . getMinDate ( ) ;
var F = this . _band . getMaxDate ( ) ;
var A = this . _band . getTimeZone ( ) ;
var E = this . _band . getLabeller ( ) ;
SimileAjax . DateTime . roundDownToInterval ( C , this . _unit , A , this . _multiple , this . _theme . firstDayOfWeek ) ;
var D = this ;
var B = function ( G ) { for ( var H = 0 ;
H < D . _multiple ;
H ++ ) { SimileAjax . DateTime . incrementByInterval ( G , D . _unit ) ;
} } ;
while ( C . getTime ( ) < F . getTime ( ) ) { this . _intervalMarkerLayout . createIntervalMarker ( C , E , this . _unit , this . _markerLayer , this . _lineLayer ) ;
B ( C ) ;
} this . _markerLayer . style . display = "block" ;
this . _lineLayer . style . display = "block" ;
} ;
Timeline . GregorianEtherPainter . prototype . softPaint = function ( ) { } ;
Timeline . GregorianEtherPainter . prototype . zoom = function ( A ) { if ( A != 0 ) { this . _unit += A ;
} } ;
Timeline . HotZoneGregorianEtherPainter = function ( G ) { this . _params = G ;
this . _theme = G . theme ;
this . _zones = [ { startTime : Number . NEGATIVE _INFINITY , endTime : Number . POSITIVE _INFINITY , unit : G . unit , multiple : 1 } ] ;
for ( var F = 0 ;
F < G . zones . length ;
F ++ ) { var C = G . zones [ F ] ;
var E = SimileAjax . DateTime . parseGregorianDateTime ( C . start ) . getTime ( ) ;
var B = SimileAjax . DateTime . parseGregorianDateTime ( C . end ) . getTime ( ) ;
for ( var D = 0 ;
D < this . _zones . length && B > E ;
D ++ ) { var A = this . _zones [ D ] ;
if ( E < A . endTime ) { if ( E > A . startTime ) { this . _zones . splice ( D , 0 , { startTime : A . startTime , endTime : E , unit : A . unit , multiple : A . multiple } ) ;
D ++ ;
A . startTime = E ;
} if ( B < A . endTime ) { this . _zones . splice ( D , 0 , { startTime : E , endTime : B , unit : C . unit , multiple : ( C . multiple ) ? C . multiple : 1 } ) ;
D ++ ;
A . startTime = B ;
E = B ;
} else { A . multiple = C . multiple ;
A . unit = C . unit ;
E = A . endTime ;
} } } } } ;
Timeline . HotZoneGregorianEtherPainter . prototype . initialize = function ( C , B ) { this . _band = C ;
this . _timeline = B ;
this . _backgroundLayer = C . createLayerDiv ( 0 ) ;
this . _backgroundLayer . setAttribute ( "name" , "ether-background" ) ;
this . _backgroundLayer . className = "timeline-ether-bg" ;
this . _markerLayer = null ;
this . _lineLayer = null ;
var D = ( "align" in this . _params && this . _params . align != undefined ) ? this . _params . align : this . _theme . ether . interval . marker [ B . isHorizontal ( ) ? "hAlign" : "vAlign" ] ;
var A = ( "showLine" in this . _params ) ? this . _params . showLine : this . _theme . ether . interval . line . show ;
this . _intervalMarkerLayout = new Timeline . EtherIntervalMarkerLayout ( this . _timeline , this . _band , this . _theme , D , A ) ;
this . _highlight = new Timeline . EtherHighlight ( this . _timeline , this . _band , this . _theme , this . _backgroundLayer ) ;
} ;
Timeline . HotZoneGregorianEtherPainter . prototype . setHighlight = function ( A , B ) { this . _highlight . position ( A , B ) ;
} ;
Timeline . HotZoneGregorianEtherPainter . prototype . paint = function ( ) { if ( this . _markerLayer ) { this . _band . removeLayerDiv ( this . _markerLayer ) ;
} this . _markerLayer = this . _band . createLayerDiv ( 100 ) ;
this . _markerLayer . setAttribute ( "name" , "ether-markers" ) ;
this . _markerLayer . style . display = "none" ;
if ( this . _lineLayer ) { this . _band . removeLayerDiv ( this . _lineLayer ) ;
} this . _lineLayer = this . _band . createLayerDiv ( 1 ) ;
this . _lineLayer . setAttribute ( "name" , "ether-lines" ) ;
this . _lineLayer . style . display = "none" ;
var C = this . _band . getMinDate ( ) ;
var A = this . _band . getMaxDate ( ) ;
var I = this . _band . getTimeZone ( ) ;
var L = this . _band . getLabeller ( ) ;
var B = this ;
var J = function ( N , M ) { for ( var O = 0 ;
O < M . multiple ;
O ++ ) { SimileAjax . DateTime . incrementByInterval ( N , M . unit ) ;
} } ;
var D = 0 ;
while ( D < this . _zones . length ) { if ( C . getTime ( ) < this . _zones [ D ] . endTime ) { break ;
} D ++ ;
} var E = this . _zones . length - 1 ;
while ( E >= 0 ) { if ( A . getTime ( ) > this . _zones [ E ] . startTime ) { break ;
} E -- ;
} for ( var H = D ;
H <= E ;
H ++ ) { var G = this . _zones [ H ] ;
var K = new Date ( Math . max ( C . getTime ( ) , G . startTime ) ) ;
var F = new Date ( Math . min ( A . getTime ( ) , G . endTime ) ) ;
SimileAjax . DateTime . roundDownToInterval ( K , G . unit , I , G . multiple , this . _theme . firstDayOfWeek ) ;
SimileAjax . DateTime . roundUpToInterval ( F , G . unit , I , G . multiple , this . _theme . firstDayOfWeek ) ;
while ( K . getTime ( ) < F . getTime ( ) ) { this . _intervalMarkerLayout . createIntervalMarker ( K , L , G . unit , this . _markerLayer , this . _lineLayer ) ;
J ( K , G ) ;
} } this . _markerLayer . style . display = "block" ;
this . _lineLayer . style . display = "block" ;
} ;
Timeline . HotZoneGregorianEtherPainter . prototype . softPaint = function ( ) { } ;
Timeline . HotZoneGregorianEtherPainter . prototype . zoom = function ( A ) { if ( A != 0 ) { for ( var B = 0 ;
B < this . _zones . length ;
++ B ) { if ( this . _zones [ B ] ) { this . _zones [ B ] . unit += A ;
} } } } ;
Timeline . YearCountEtherPainter = function ( A ) { this . _params = A ;
this . _theme = A . theme ;
this . _startDate = SimileAjax . DateTime . parseGregorianDateTime ( A . startDate ) ;
this . _multiple = ( "multiple" in A ) ? A . multiple : 1 ;
} ;
Timeline . YearCountEtherPainter . prototype . initialize = function ( C , B ) { this . _band = C ;
this . _timeline = B ;
this . _backgroundLayer = C . createLayerDiv ( 0 ) ;
this . _backgroundLayer . setAttribute ( "name" , "ether-background" ) ;
this . _backgroundLayer . className = "timeline-ether-bg" ;
this . _markerLayer = null ;
this . _lineLayer = null ;
var D = ( "align" in this . _params ) ? this . _params . align : this . _theme . ether . interval . marker [ B . isHorizontal ( ) ? "hAlign" : "vAlign" ] ;
var A = ( "showLine" in this . _params ) ? this . _params . showLine : this . _theme . ether . interval . line . show ;
this . _intervalMarkerLayout = new Timeline . EtherIntervalMarkerLayout ( this . _timeline , this . _band , this . _theme , D , A ) ;
this . _highlight = new Timeline . EtherHighlight ( this . _timeline , this . _band , this . _theme , this . _backgroundLayer ) ;
} ;
Timeline . YearCountEtherPainter . prototype . setHighlight = function ( A , B ) { this . _highlight . position ( A , B ) ;
} ;
Timeline . YearCountEtherPainter . prototype . paint = function ( ) { if ( this . _markerLayer ) { this . _band . removeLayerDiv ( this . _markerLayer ) ;
} this . _markerLayer = this . _band . createLayerDiv ( 100 ) ;
this . _markerLayer . setAttribute ( "name" , "ether-markers" ) ;
this . _markerLayer . style . display = "none" ;
if ( this . _lineLayer ) { this . _band . removeLayerDiv ( this . _lineLayer ) ;
} this . _lineLayer = this . _band . createLayerDiv ( 1 ) ;
this . _lineLayer . setAttribute ( "name" , "ether-lines" ) ;
this . _lineLayer . style . display = "none" ;
var B = new Date ( this . _startDate . getTime ( ) ) ;
var F = this . _band . getMaxDate ( ) ;
var E = this . _band . getMinDate ( ) . getUTCFullYear ( ) - this . _startDate . getUTCFullYear ( ) ;
B . setUTCFullYear ( this . _band . getMinDate ( ) . getUTCFullYear ( ) - E % this . _multiple ) ;
var C = this ;
var A = function ( G ) { for ( var H = 0 ;
H < C . _multiple ;
H ++ ) { SimileAjax . DateTime . incrementByInterval ( G , SimileAjax . DateTime . YEAR ) ;
} } ;
var D = { labelInterval : function ( G , I ) { var H = G . getUTCFullYear ( ) - C . _startDate . getUTCFullYear ( ) ;
return { text : H , emphasized : H == 0 } ;
} } ;
while ( B . getTime ( ) < F . getTime ( ) ) { this . _intervalMarkerLayout . createIntervalMarker ( B , D , SimileAjax . DateTime . YEAR , this . _markerLayer , this . _lineLayer ) ;
A ( B ) ;
} this . _markerLayer . style . display = "block" ;
this . _lineLayer . style . display = "block" ;
} ;
Timeline . YearCountEtherPainter . prototype . softPaint = function ( ) { } ;
Timeline . QuarterlyEtherPainter = function ( A ) { this . _params = A ;
this . _theme = A . theme ;
this . _startDate = SimileAjax . DateTime . parseGregorianDateTime ( A . startDate ) ;
} ;
Timeline . QuarterlyEtherPainter . prototype . initialize = function ( C , B ) { this . _band = C ;
this . _timeline = B ;
this . _backgroundLayer = C . createLayerDiv ( 0 ) ;
this . _backgroundLayer . setAttribute ( "name" , "ether-background" ) ;
this . _backgroundLayer . className = "timeline-ether-bg" ;
this . _markerLayer = null ;
this . _lineLayer = null ;
var D = ( "align" in this . _params ) ? this . _params . align : this . _theme . ether . interval . marker [ B . isHorizontal ( ) ? "hAlign" : "vAlign" ] ;
var A = ( "showLine" in this . _params ) ? this . _params . showLine : this . _theme . ether . interval . line . show ;
this . _intervalMarkerLayout = new Timeline . EtherIntervalMarkerLayout ( this . _timeline , this . _band , this . _theme , D , A ) ;
this . _highlight = new Timeline . EtherHighlight ( this . _timeline , this . _band , this . _theme , this . _backgroundLayer ) ;
} ;
Timeline . QuarterlyEtherPainter . prototype . setHighlight = function ( A , B ) { this . _highlight . position ( A , B ) ;
} ;
Timeline . QuarterlyEtherPainter . prototype . paint = function ( ) { if ( this . _markerLayer ) { this . _band . removeLayerDiv ( this . _markerLayer ) ;
} this . _markerLayer = this . _band . createLayerDiv ( 100 ) ;
this . _markerLayer . setAttribute ( "name" , "ether-markers" ) ;
this . _markerLayer . style . display = "none" ;
if ( this . _lineLayer ) { this . _band . removeLayerDiv ( this . _lineLayer ) ;
} this . _lineLayer = this . _band . createLayerDiv ( 1 ) ;
this . _lineLayer . setAttribute ( "name" , "ether-lines" ) ;
this . _lineLayer . style . display = "none" ;
var B = new Date ( 0 ) ;
var E = this . _band . getMaxDate ( ) ;
B . setUTCFullYear ( Math . max ( this . _startDate . getUTCFullYear ( ) , this . _band . getMinDate ( ) . getUTCFullYear ( ) ) ) ;
B . setUTCMonth ( this . _startDate . getUTCMonth ( ) ) ;
var C = this ;
var A = function ( F ) { F . setUTCMonth ( F . getUTCMonth ( ) + 3 ) ;
} ;
var D = { labelInterval : function ( G , H ) { var F = ( 4 + ( G . getUTCMonth ( ) - C . _startDate . getUTCMonth ( ) ) / 3 ) % 4 ;
if ( F != 0 ) { return { text : "Q" + ( F + 1 ) , emphasized : false } ;
} else { return { text : "Y" + ( G . getUTCFullYear ( ) - C . _startDate . getUTCFullYear ( ) + 1 ) , emphasized : true } ;
} } } ;
while ( B . getTime ( ) < E . getTime ( ) ) { this . _intervalMarkerLayout . createIntervalMarker ( B , D , SimileAjax . DateTime . YEAR , this . _markerLayer , this . _lineLayer ) ;
A ( B ) ;
} this . _markerLayer . style . display = "block" ;
this . _lineLayer . style . display = "block" ;
} ;
Timeline . QuarterlyEtherPainter . prototype . softPaint = function ( ) { } ;
Timeline . EtherIntervalMarkerLayout = function ( I , L , C , E , M ) { var A = I . isHorizontal ( ) ;
if ( A ) { if ( E == "Top" ) { this . positionDiv = function ( O , N ) { O . style . left = N + "px" ;
O . style . top = "0px" ;
} ;
} else { this . positionDiv = function ( O , N ) { O . style . left = N + "px" ;
O . style . bottom = "0px" ;
} ;
} } else { if ( E == "Left" ) { this . positionDiv = function ( O , N ) { O . style . top = N + "px" ;
O . style . left = "0px" ;
} ;
} else { this . positionDiv = function ( O , N ) { O . style . top = N + "px" ;
O . style . right = "0px" ;
} ;
} } var D = C . ether . interval . marker ;
var K = C . ether . interval . line ;
var B = C . ether . interval . weekend ;
var H = ( A ? "h" : "v" ) + E ;
var G = D [ H + "Styler" ] ;
var J = D [ H + "EmphasizedStyler" ] ;
var F = SimileAjax . DateTime . gregorianUnitLengths [ SimileAjax . DateTime . DAY ] ;
this . createIntervalMarker = function ( T , c , a , Y , P ) { var U = Math . round ( L . dateToPixelOffset ( T ) ) ;
if ( M && a != SimileAjax . DateTime . WEEK ) { var V = I . getDocument ( ) . createElement ( "div" ) ;
V . className = "timeline-ether-lines" ;
if ( K . opacity < 100 ) { SimileAjax . Graphics . setOpacity ( V , K . opacity ) ;
} if ( A ) { V . style . left = U + "px" ;
} else { V . style . top = U + "px" ;
} P . appendChild ( V ) ;
} if ( a == SimileAjax . DateTime . WEEK ) { var N = C . firstDayOfWeek ;
var R = new Date ( T . getTime ( ) + ( 6 - N - 7 ) * F ) ;
var b = new Date ( R . getTime ( ) + 2 * F ) ;
var Q = Math . round ( L . dateToPixelOffset ( R ) ) ;
var S = Math . round ( L . dateToPixelOffset ( b ) ) ;
var W = Math . max ( 1 , S - Q ) ;
var X = I . getDocument ( ) . createElement ( "div" ) ;
X . className = "timeline-ether-weekends" ;
if ( B . opacity < 100 ) { SimileAjax . Graphics . setOpacity ( X , B . opacity ) ;
} if ( A ) { X . style . left = Q + "px" ;
X . style . width = W + "px" ;
} else { X . style . top = Q + "px" ;
X . style . height = W + "px" ;
} P . appendChild ( X ) ;
} var Z = c . labelInterval ( T , a ) ;
var O = I . getDocument ( ) . createElement ( "div" ) ;
O . innerHTML = Z . text ;
O . className = "timeline-date-label" ;
if ( Z . emphasized ) { O . className += " timeline-date-label-em" ;
} this . positionDiv ( O , U ) ;
Y . appendChild ( O ) ;
return O ;
} ;
} ;
Timeline . EtherHighlight = function ( B , E , D , C ) { var A = B . isHorizontal ( ) ;
this . _highlightDiv = null ;
this . _createHighlightDiv = function ( ) { if ( this . _highlightDiv == null ) { this . _highlightDiv = B . getDocument ( ) . createElement ( "div" ) ;
this . _highlightDiv . setAttribute ( "name" , "ether-highlight" ) ;
this . _highlightDiv . className = "timeline-ether-highlight" ;
var F = D . ether . highlightOpacity ;
if ( F < 100 ) { SimileAjax . Graphics . setOpacity ( this . _highlightDiv , F ) ;
} C . appendChild ( this . _highlightDiv ) ;
} } ;
this . position = function ( H , J ) { this . _createHighlightDiv ( ) ;
var I = Math . round ( E . dateToPixelOffset ( H ) ) ;
var G = Math . round ( E . dateToPixelOffset ( J ) ) ;
var F = Math . max ( G - I , 3 ) ;
if ( A ) { this . _highlightDiv . style . left = I + "px" ;
this . _highlightDiv . style . width = F + "px" ;
this . _highlightDiv . style . height = ( E . getViewWidth ( ) - 4 ) + "px" ;
} else { this . _highlightDiv . style . top = I + "px" ;
this . _highlightDiv . style . height = F + "px" ;
this . _highlightDiv . style . width = ( E . getViewWidth ( ) - 4 ) + "px" ;
} } ;
} ;
/* ethers.js */
Timeline . LinearEther = function ( A ) { this . _params = A ;
this . _interval = A . interval ;
this . _pixelsPerInterval = A . pixelsPerInterval ;
} ;
Timeline . LinearEther . prototype . initialize = function ( B , A ) { this . _band = B ;
this . _timeline = A ;
this . _unit = A . getUnit ( ) ;
if ( "startsOn" in this . _params ) { this . _start = this . _unit . parseFromObject ( this . _params . startsOn ) ;
} else { if ( "endsOn" in this . _params ) { this . _start = this . _unit . parseFromObject ( this . _params . endsOn ) ;
this . shiftPixels ( - this . _timeline . getPixelLength ( ) ) ;
} else { if ( "centersOn" in this . _params ) { this . _start = this . _unit . parseFromObject ( this . _params . centersOn ) ;
this . shiftPixels ( - this . _timeline . getPixelLength ( ) / 2 ) ;
} else { this . _start = this . _unit . makeDefaultValue ( ) ;
this . shiftPixels ( - this . _timeline . getPixelLength ( ) / 2 ) ;
} } } } ;
Timeline . LinearEther . prototype . setDate = function ( A ) { this . _start = this . _unit . cloneValue ( A ) ;
} ;
Timeline . LinearEther . prototype . shiftPixels = function ( B ) { var A = this . _interval * B / this . _pixelsPerInterval ;
this . _start = this . _unit . change ( this . _start , A ) ;
} ;
Timeline . LinearEther . prototype . dateToPixelOffset = function ( B ) { var A = this . _unit . compare ( B , this . _start ) ;
return this . _pixelsPerInterval * A / this . _interval ;
} ;
Timeline . LinearEther . prototype . pixelOffsetToDate = function ( B ) { var A = B * this . _interval / this . _pixelsPerInterval ;
return this . _unit . change ( this . _start , A ) ;
} ;
Timeline . LinearEther . prototype . zoom = function ( D ) { var A = 0 ;
var B = this . _band . _zoomIndex ;
var C = B ;
if ( D && ( B > 0 ) ) { C = B - 1 ;
} if ( ! D && ( B < ( this . _band . _zoomSteps . length - 1 ) ) ) { C = B + 1 ;
} this . _band . _zoomIndex = C ;
this . _interval = SimileAjax . DateTime . gregorianUnitLengths [ this . _band . _zoomSteps [ C ] . unit ] ;
this . _pixelsPerInterval = this . _band . _zoomSteps [ C ] . pixelsPerInterval ;
A = this . _band . _zoomSteps [ C ] . unit - this . _band . _zoomSteps [ B ] . unit ;
return A ;
} ;
Timeline . HotZoneEther = function ( A ) { this . _params = A ;
this . _interval = A . interval ;
this . _pixelsPerInterval = A . pixelsPerInterval ;
this . _theme = A . theme ;
} ;
Timeline . HotZoneEther . prototype . initialize = function ( I , H ) { this . _band = I ;
this . _timeline = H ;
this . _unit = H . getUnit ( ) ;
this . _zones = [ { startTime : Number . NEGATIVE _INFINITY , endTime : Number . POSITIVE _INFINITY , magnify : 1 } ] ;
var D = this . _params ;
for ( var E = 0 ;
E < D . zones . length ;
E ++ ) { var G = D . zones [ E ] ;
var F = this . _unit . parseFromObject ( G . start ) ;
var B = this . _unit . parseFromObject ( G . end ) ;
for ( var C = 0 ;
C < this . _zones . length && this . _unit . compare ( B , F ) > 0 ;
C ++ ) { var A = this . _zones [ C ] ;
if ( this . _unit . compare ( F , A . endTime ) < 0 ) { if ( this . _unit . compare ( F , A . startTime ) > 0 ) { this . _zones . splice ( C , 0 , { startTime : A . startTime , endTime : F , magnify : A . magnify } ) ;
C ++ ;
A . startTime = F ;
} if ( this . _unit . compare ( B , A . endTime ) < 0 ) { this . _zones . splice ( C , 0 , { startTime : F , endTime : B , magnify : G . magnify * A . magnify } ) ;
C ++ ;
A . startTime = B ;
F = B ;
} else { A . magnify *= G . magnify ;
F = A . 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 ( A ) { this . _start = this . _unit . cloneValue ( A ) ;
} ;
Timeline . HotZoneEther . prototype . shiftPixels = function ( A ) { this . _start = this . pixelOffsetToDate ( A ) ;
} ;
Timeline . HotZoneEther . prototype . dateToPixelOffset = function ( A ) { return this . _dateDiffToPixelOffset ( this . _start , A ) ;
} ;
Timeline . HotZoneEther . prototype . pixelOffsetToDate = function ( A ) { return this . _pixelOffsetToDate ( A , this . _start ) ;
} ;
Timeline . HotZoneEther . prototype . zoom = function ( D ) { var A = 0 ;
var B = this . _band . _zoomIndex ;
var C = B ;
if ( D && ( B > 0 ) ) { C = B - 1 ;
} if ( ! D && ( B < ( this . _band . _zoomSteps . length - 1 ) ) ) { C = B + 1 ;
} this . _band . _zoomIndex = C ;
this . _interval = SimileAjax . DateTime . gregorianUnitLengths [ this . _band . _zoomSteps [ C ] . unit ] ;
this . _pixelsPerInterval = this . _band . _zoomSteps [ C ] . pixelsPerInterval ;
A = this . _band . _zoomSteps [ C ] . unit - this . _band . _zoomSteps [ B ] . unit ;
return A ;
} ;
Timeline . HotZoneEther . prototype . _dateDiffToPixelOffset = function ( H , C ) { var D = this . _getScale ( ) ;
var I = H ;
var B = C ;
var E = 0 ;
if ( this . _unit . compare ( I , B ) < 0 ) { var G = 0 ;
while ( G < this . _zones . length ) { if ( this . _unit . compare ( I , this . _zones [ G ] . endTime ) < 0 ) { break ;
} G ++ ;
} while ( this . _unit . compare ( I , B ) < 0 ) { var F = this . _zones [ G ] ;
var A = this . _unit . earlier ( B , F . endTime ) ;
E += ( this . _unit . compare ( A , I ) / ( D / F . magnify ) ) ;
I = A ;
G ++ ;
} } else { var G = this . _zones . length - 1 ;
while ( G >= 0 ) { if ( this . _unit . compare ( I , this . _zones [ G ] . startTime ) > 0 ) { break ;
} G -- ;
} while ( this . _unit . compare ( I , B ) > 0 ) { var F = this . _zones [ G ] ;
var A = this . _unit . later ( B , F . startTime ) ;
E += ( this . _unit . compare ( A , I ) / ( D / F . magnify ) ) ;
I = A ;
G -- ;
} } return E ;
} ;
Timeline . HotZoneEther . prototype . _pixelOffsetToDate = function ( E , B ) { var G = this . _getScale ( ) ;
var D = B ;
if ( E > 0 ) { var F = 0 ;
while ( F < this . _zones . length ) { if ( this . _unit . compare ( D , this . _zones [ F ] . endTime ) < 0 ) { break ;
} F ++ ;
} while ( E > 0 ) { var A = this . _zones [ F ] ;
var H = G / A . magnify ;
if ( A . endTime == Number . POSITIVE _INFINITY ) { D = this . _unit . change ( D , E * H ) ;
E = 0 ;
} else { var C = this . _unit . compare ( A . endTime , D ) / H ;
if ( C > E ) { D = this . _unit . change ( D , E * H ) ;
E = 0 ;
} else { D = A . endTime ;
E -= C ;
} } F ++ ;
} } else { var F = this . _zones . length - 1 ;
while ( F >= 0 ) { if ( this . _unit . compare ( D , this . _zones [ F ] . startTime ) > 0 ) { break ;
} F -- ;
} E = - E ;
while ( E > 0 ) { var A = this . _zones [ F ] ;
var H = G / A . magnify ;
if ( A . startTime == Number . NEGATIVE _INFINITY ) { D = this . _unit . change ( D , - E * H ) ;
E = 0 ;
} else { var C = this . _unit . compare ( D , A . startTime ) / H ;
if ( C > E ) { D = this . _unit . change ( D , - E * H ) ;
E = 0 ;
} else { D = A . startTime ;
E -= C ;
} } F -- ;
} } return D ;
} ;
Timeline . HotZoneEther . prototype . _getScale = function ( ) { return this . _interval / this . _pixelsPerInterval ;
} ;
/* 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 ( C ) { var D = C . split ( "-" ) ;
if ( D [ 1 ] != "tl" ) { alert ( "Internal Timeline problem 101, please consult support" ) ;
return { band : null , evt : null } ;
} var B = Timeline . getTimelineFromID ( D [ 2 ] ) ;
var E = B . getBand ( D [ 3 ] ) ;
var A = E . getEventSource . getEvent ( D [ 4 ] ) ;
return { band : E , evt : A } ;
} ;
Timeline . EventUtils . encodeEventElID = function ( B , D , C , A ) { return C + "-tl-" + B . timelineID + "-" + D . getIndex ( ) + "-" + A . getID ( ) ;
} ;
/* labellers.js */
Timeline . GregorianDateLabeller = function ( B , A ) { this . _locale = B ;
this . _timeZone = A ;
} ;
Timeline . GregorianDateLabeller . monthNames = [ ] ;
Timeline . GregorianDateLabeller . dayNames = [ ] ;
Timeline . GregorianDateLabeller . labelIntervalFunctions = [ ] ;
Timeline . GregorianDateLabeller . getMonthName = function ( B , A ) { return Timeline . GregorianDateLabeller . monthNames [ A ] [ B ] ;
} ;
Timeline . GregorianDateLabeller . prototype . labelInterval = function ( A , C ) { var B = Timeline . GregorianDateLabeller . labelIntervalFunctions [ this . _locale ] ;
if ( B == null ) { B = Timeline . GregorianDateLabeller . prototype . defaultLabelInterval ;
} return B . call ( this , A , C ) ;
} ;
Timeline . GregorianDateLabeller . prototype . labelPrecise = function ( A ) { return SimileAjax . DateTime . removeTimeZoneOffset ( A , this . _timeZone ) . toUTCString ( ) ;
} ;
Timeline . GregorianDateLabeller . prototype . defaultLabelInterval = function ( B , C ) { var D ;
var F = false ;
B = SimileAjax . DateTime . removeTimeZoneOffset ( B , this . _timeZone ) ;
switch ( C ) { case SimileAjax . DateTime . MILLISECOND : D = B . getUTCMilliseconds ( ) ;
break ;
case SimileAjax . DateTime . SECOND : D = B . getUTCSeconds ( ) ;
break ;
case SimileAjax . DateTime . MINUTE : var A = B . getUTCMinutes ( ) ;
if ( A == 0 ) { D = B . getUTCHours ( ) + ":00" ;
F = true ;
} else { D = A ;
} break ;
case SimileAjax . DateTime . HOUR : D = B . getUTCHours ( ) + "hr" ;
break ;
case SimileAjax . DateTime . DAY : D = Timeline . GregorianDateLabeller . getMonthName ( B . getUTCMonth ( ) , this . _locale ) + " " + B . getUTCDate ( ) ;
break ;
case SimileAjax . DateTime . WEEK : D = Timeline . GregorianDateLabeller . getMonthName ( B . getUTCMonth ( ) , this . _locale ) + " " + B . getUTCDate ( ) ;
break ;
case SimileAjax . DateTime . MONTH : var A = B . getUTCMonth ( ) ;
if ( A != 0 ) { D = Timeline . GregorianDateLabeller . getMonthName ( A , this . _locale ) ;
break ;
} case SimileAjax . DateTime . YEAR : case SimileAjax . DateTime . DECADE : case SimileAjax . DateTime . CENTURY : case SimileAjax . DateTime . MILLENNIUM : var E = B . getUTCFullYear ( ) ;
if ( E > 0 ) { D = B . getUTCFullYear ( ) ;
} else { D = ( 1 - E ) + "BC" ;
} F = ( C == SimileAjax . DateTime . MONTH ) || ( C == SimileAjax . DateTime . DECADE && E % 100 == 0 ) || ( C == SimileAjax . DateTime . CENTURY && E % 1000 == 0 ) ;
break ;
default : D = B . toUTCString ( ) ;
} return { text : D , emphasized : F } ;
} ;
/* original-painter.js */
Timeline . OriginalEventPainter = function ( A ) { this . _params = A ;
this . _onSelectListeners = [ ] ;
this . _eventPaintListeners = [ ] ;
this . _filterMatcher = null ;
this . _highlightMatcher = null ;
this . _frc = null ;
this . _eventIdToElmt = { } ;
} ;
Timeline . OriginalEventPainter . prototype . initialize = function ( B , A ) { this . _band = B ;
this . _timeline = A ;
this . _backLayer = null ;
this . _eventLayer = null ;
this . _lineLayer = null ;
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 ;
A < this . _onSelectListeners . length ;
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 ;
} ;
Timeline . OriginalEventPainter . prototype . getHighlightMatcher = function ( ) { return this . _highlightMatcher ;
} ;
Timeline . OriginalEventPainter . prototype . setHighlightMatcher = function ( A ) { this . _highlightMatcher = A ;
} ;
Timeline . OriginalEventPainter . prototype . paint = function ( ) { var C = this . _band . getEventSource ( ) ;
if ( C == 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 . 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 D = this . _band . getMinDate ( ) ;
var B = this . _band . getMaxDate ( ) ;
var J = ( this . _filterMatcher != null ) ? this . _filterMatcher : function ( K ) { return true ;
} ;
var A = ( this . _highlightMatcher != null ) ? this . _highlightMatcher : function ( K ) { return - 1 ;
} ;
var E = C . getEventReverseIterator ( D , B ) ;
while ( E . hasNext ( ) ) { var H = E . next ( ) ;
if ( J ( H ) ) { this . paintEvent ( H , F , this . _params . theme , A ( H ) ) ;
} } 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 ;
if ( this . _backLayer == null ) { this . _backLayer = this . _band . createLayerDiv ( 0 , "timeline-band-events" ) ;
this . _backLayer . style . visibility = "hidden" ;
var A = document . createElement ( "span" ) ;
A . className = "timeline-event-label" ;
this . _backLayer . appendChild ( A ) ;
this . _frc = SimileAjax . Graphics . getFontRenderingContext ( A ) ;
} this . _frc . update ( ) ;
this . _tracks = [ ] ;
if ( this . _highlightLayer != null ) { B . removeLayerDiv ( this . _highlightLayer ) ;
} this . _highlightLayer = B . createLayerDiv ( 105 , "timeline-band-highlights" ) ;
this . _highlightLayer . style . display = "none" ;
if ( this . _lineLayer != null ) { B . removeLayerDiv ( this . _lineLayer ) ;
} this . _lineLayer = B . createLayerDiv ( 110 , "timeline-band-lines" ) ;
this . _lineLayer . style . display = "none" ;
if ( this . _eventLayer != null ) { B . removeLayerDiv ( this . _eventLayer ) ;
} this . _eventLayer = B . createLayerDiv ( 115 , "timeline-band-events" ) ;
this . _eventLayer . style . display = "none" ;
} ;
Timeline . OriginalEventPainter . prototype . paintEvent = function ( B , C , D , A ) { if ( B . isInstant ( ) ) { this . paintInstantEvent ( B , C , D , A ) ;
} else { this . paintDurationEvent ( B , C , D , A ) ;
} } ;
Timeline . OriginalEventPainter . prototype . paintInstantEvent = function ( B , C , D , A ) { if ( B . isImprecise ( ) ) { this . paintImpreciseInstantEvent ( B , C , D , A ) ;
} else { this . paintPreciseInstantEvent ( B , C , D , A ) ;
} } ;
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 ( N , S , V , T ) { var W = this . _timeline . getDocument ( ) ;
var L = N . getText ( ) ;
var H = N . getStart ( ) ;
var I = Math . round ( this . _band . dateToPixelOffset ( H ) ) ;
var A = Math . round ( I + S . iconWidth / 2 ) ;
var C = Math . round ( I - S . iconWidth / 2 ) ;
var F = this . _getLabelDivClassName ( N ) ;
var D = this . _frc . computeSize ( L , F ) ;
var M = A + V . event . label . offsetFromLine ;
var J = M + D . width ;
var Q = J ;
var P = this . _findFreeTrack ( N , Q ) ;
var R = Math . round ( S . trackOffset + P * S . trackIncrement + S . trackHeight / 2 - D . height / 2 ) ;
var B = this . _paintEventIcon ( N , P , C , S , V , 0 ) ;
var U = this . _paintEventLabel ( N , L , M , R , D . width , D . height , V , F , T ) ;
var E = [ B . elmt , U . elmt ] ;
var O = this ;
var K = function ( Y , X , Z ) { return O . _onClickInstantEvent ( B . elmt , X , N ) ;
} ;
SimileAjax . DOM . registerEvent ( B . elmt , "mousedown" , K ) ;
SimileAjax . DOM . registerEvent ( U . elmt , "mousedown" , K ) ;
var G = this . _createHighlightDiv ( T , B , V , N ) ;
if ( G != null ) { E . push ( G ) ;
} this . _fireEventPaintListeners ( "paintedEvent" , N , E ) ;
this . _eventIdToElmt [ N . getID ( ) ] = B . elmt ;
this . _tracks [ P ] = C ;
} ;
Timeline . OriginalEventPainter . prototype . paintImpreciseInstantEvent = function ( P , U , Z , W ) { var b = this . _timeline . getDocument ( ) ;
var N = P . getText ( ) ;
var J = P . getStart ( ) ;
var X = P . getEnd ( ) ;
var K = Math . round ( this . _band . dateToPixelOffset ( J ) ) ;
var B = Math . round ( this . _band . dateToPixelOffset ( X ) ) ;
var A = Math . round ( K + U . iconWidth / 2 ) ;
var D = Math . round ( K - U . iconWidth / 2 ) ;
var H = this . _getLabelDivClassName ( P ) ;
var F = this . _frc . computeSize ( N , H ) ;
var O = A + Z . event . label . offsetFromLine ;
var L = O + F . width ;
var S = Math . max ( L , B ) ;
var R = this . _findFreeTrack ( P , S ) ;
var a = Z . event . tape . height ;
var T = Math . round ( U . trackOffset + R * U . trackIncrement + a ) ;
var C = this . _paintEventIcon ( P , R , D , U , Z , a ) ;
var Y = this . _paintEventLabel ( P , N , O , T , F . width , F . height , Z , H , W ) ;
var V = P . getColor ( ) ;
V = V != null ? V : Z . event . instant . impreciseColor ;
var E = this . _paintEventTape ( P , R , K , B , V , Z . event . instant . impreciseOpacity , U , Z , 0 ) ;
var G = [ C . elmt , Y . elmt , E . elmt ] ;
var Q = this ;
var M = function ( d , c , e ) { return Q . _onClickInstantEvent ( C . elmt , c , P ) ;
} ;
SimileAjax . DOM . registerEvent ( C . elmt , "mousedown" , M ) ;
SimileAjax . DOM . registerEvent ( E . elmt , "mousedown" , M ) ;
SimileAjax . DOM . registerEvent ( Y . elmt , "mousedown" , M ) ;
var I = this . _createHighlightDiv ( W , C , Z , P ) ;
if ( I != null ) { G . push ( I ) ;
} this . _fireEventPaintListeners ( "paintedEvent" , P , G ) ;
this . _eventIdToElmt [ P . getID ( ) ] = C . elmt ;
this . _tracks [ R ] = D ;
} ;
Timeline . OriginalEventPainter . prototype . paintPreciseDurationEvent = function ( M , R , W , T ) { var X = this . _timeline . getDocument ( ) ;
var K = M . getText ( ) ;
var G = M . getStart ( ) ;
var U = M . getEnd ( ) ;
var H = Math . round ( this . _band . dateToPixelOffset ( G ) ) ;
var A = Math . round ( this . _band . dateToPixelOffset ( U ) ) ;
var E = this . _getLabelDivClassName ( M ) ;
var C = this . _frc . computeSize ( K , E ) ;
var L = H ;
var I = L + C . width ;
var P = Math . max ( I , A ) ;
var O = this . _findFreeTrack ( M , P ) ;
var Q = Math . round ( R . trackOffset + O * R . trackIncrement + W . event . tape . height ) ;
var S = M . getColor ( ) ;
S = S != null ? S : W . event . duration . color ;
var B = this . _paintEventTape ( M , O , H , A , S , 100 , R , W , 0 ) ;
var V = this . _paintEventLabel ( M , K , L , Q , C . width , C . height , W , E , T ) ;
var D = [ B . elmt , V . elmt ] ;
var N = this ;
var J = function ( Z , Y , a ) { return N . _onClickDurationEvent ( B . elmt , Y , M ) ;
} ;
SimileAjax . DOM . registerEvent ( B . elmt , "mousedown" , J ) ;
SimileAjax . DOM . registerEvent ( V . elmt , "mousedown" , J ) ;
var F = this . _createHighlightDiv ( T , B , W , M ) ;
if ( F != null ) { D . push ( F ) ;
} this . _fireEventPaintListeners ( "paintedEvent" , M , D ) ;
this . _eventIdToElmt [ M . getID ( ) ] = B . elmt ;
this . _tracks [ O ] = H ;
} ;
Timeline . OriginalEventPainter . prototype . paintImpreciseDurationEvent = function ( O , W , b , Y ) { var c = this . _timeline . getDocument ( ) ;
var M = O . getText ( ) ;
var I = O . getStart ( ) ;
var V = O . getLatestStart ( ) ;
var Z = O . getEnd ( ) ;
var Q = O . getEarliestEnd ( ) ;
var K = Math . round ( this . _band . dateToPixelOffset ( I ) ) ;
var F = Math . round ( this . _band . dateToPixelOffset ( V ) ) ;
var A = Math . round ( this . _band . dateToPixelOffset ( Z ) ) ;
var G = Math . round ( this . _band . dateToPixelOffset ( Q ) ) ;
var E = this . _getLabelDivClassName ( O ) ;
var C = this . _frc . computeSize ( M , E ) ;
var N = F ;
var J = N + C . width ;
var S = Math . max ( J , A ) ;
var R = this . _findFreeTrack ( O , S ) ;
var T = Math . round ( W . trackOffset + R * W . trackIncrement + b . event . tape . height ) ;
var X = O . getColor ( ) ;
X = X != null ? X : b . event . duration . color ;
var U = this . _paintEventTape ( O , R , K , A , b . event . duration . impreciseColor , b . event . duration . impreciseOpacity , W , b , 0 ) ;
var B = this . _paintEventTape ( O , R , F , G , X , 100 , W , b , 1 ) ;
var a = this . _paintEventLabel ( O , M , N , T , C . width , C . height , b , E , Y ) ;
var D = [ U . elmt , B . elmt , a . elmt ] ;
var P = this ;
var L = function ( e , d , f ) { return P . _onClickDurationEvent ( B . elmt , d , O ) ;
} ;
SimileAjax . DOM . registerEvent ( B . elmt , "mousedown" , L ) ;
SimileAjax . DOM . registerEvent ( a . elmt , "mousedown" , L ) ;
var H = this . _createHighlightDiv ( Y , B , b , O ) ;
if ( H != null ) { D . push ( H ) ;
} this . _fireEventPaintListeners ( "paintedEvent" , O , D ) ;
this . _eventIdToElmt [ O . getID ( ) ] = B . elmt ;
this . _tracks [ R ] = K ;
} ;
Timeline . OriginalEventPainter . prototype . _encodeEventElID = function ( B , A ) { return Timeline . EventUtils . encodeEventElID ( this . _timeline , this . _band , B , A ) ;
} ;
Timeline . OriginalEventPainter . prototype . _findFreeTrack = function ( E , D ) { var A = E . getTrackNum ( ) ;
if ( A != null ) { return A ;
} for ( var C = 0 ;
C < this . _tracks . length ;
C ++ ) { var B = this . _tracks [ C ] ;
if ( B > D ) { break ;
} } return C ;
} ;
Timeline . OriginalEventPainter . prototype . _paintEventIcon = function ( K , B , C , G , F , D ) { var I = K . getIcon ( ) ;
I = I != null ? I : G . icon ;
var J ;
if ( D > 0 ) { J = G . trackOffset + B * G . trackIncrement + D + G . impreciseIconMargin ;
} else { var H = G . trackOffset + B * G . trackIncrement + G . trackHeight / 2 ;
J = Math . round ( H - G . iconHeight / 2 ) ;
} var E = SimileAjax . Graphics . createTranslucentImage ( I ) ;
var A = this . _timeline . getDocument ( ) . createElement ( "div" ) ;
A . className = this . _getElClassName ( "timeline-event-icon" , K , "icon" ) ;
A . id = this . _encodeEventElID ( "icon" , K ) ;
A . style . left = C + "px" ;
A . style . top = J + "px" ;
A . appendChild ( E ) ;
if ( K . _title != null ) { A . title = K . _title ;
} this . _eventLayer . appendChild ( A ) ;
return { left : C , top : J , width : G . iconWidth , height : G . iconHeight , elmt : A } ;
} ;
Timeline . OriginalEventPainter . prototype . _paintEventLabel = function ( K , L , D , H , A , J , G , E , C ) { var I = this . _timeline . getDocument ( ) ;
var B = I . createElement ( "div" ) ;
B . className = E ;
B . id = this . _encodeEventElID ( "label" , K ) ;
B . style . left = D + "px" ;
B . style . width = A + "px" ;
B . style . top = H + "px" ;
B . innerHTML = L ;
if ( K . _title != null ) { B . title = K . _title ;
} var F = K . getTextColor ( ) ;
if ( F == null ) { F = K . getColor ( ) ;
} if ( F != null ) { B . style . color = F ;
} if ( G . event . highlightLabelBackground && C >= 0 ) { B . style . background = this . _getHighlightColor ( C , G ) ;
} this . _eventLayer . appendChild ( B ) ;
return { left : D , top : H , width : A , height : J , elmt : B } ;
} ;
Timeline . OriginalEventPainter . prototype . _paintEventTape = function ( N , B , D , A , G , C , J , I , M ) { var F = A - D ;
var E = I . event . tape . height ;
var K = J . trackOffset + B * J . trackIncrement ;
var O = this . _timeline . getDocument ( ) . createElement ( "div" ) ;
O . className = this . _getElClassName ( "timeline-event-tape" , N , "tape" ) ;
O . id = this . _encodeEventElID ( "tape" + M , N ) ;
O . style . left = D + "px" ;
O . style . width = F + "px" ;
O . style . height = E + "px" ;
O . style . top = K + "px" ;
if ( N . _title != null ) { O . title = N . _title ;
} if ( G != null ) { O . style . backgroundColor = G ;
} var L = N . getTapeImage ( ) ;
var H = N . getTapeRepeat ( ) ;
H = H != null ? H : "repeat" ;
if ( L != null ) { O . style . backgroundImage = "url(" + L + ")" ;
O . style . backgroundRepeat = H ;
} SimileAjax . Graphics . setOpacity ( O , C ) ;
this . _eventLayer . appendChild ( O ) ;
return { left : D , top : K , width : F , height : E , elmt : O } ;
} ;
Timeline . OriginalEventPainter . prototype . _getLabelDivClassName = function ( A ) { return this . _getElClassName ( "timeline-event-label" , A , "label" ) ;
} ;
Timeline . OriginalEventPainter . prototype . _getElClassName = function ( D , C , A ) { var E = C . getClassName ( ) , B = [ ] ;
if ( E ) { if ( A ) { B . push ( A + "-" + E + " " ) ;
} B . push ( E + " " ) ;
} B . push ( D ) ;
return ( B . join ( "" ) ) ;
} ;
Timeline . OriginalEventPainter . prototype . _getHighlightColor = function ( A , B ) { var C = B . event . highlightColors ;
return C [ Math . min ( A , C . 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 , "highlight" ) ;
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 ( C , A , B ) { var D = SimileAjax . DOM . getPageCoordinates ( C ) ;
this . _showBubble ( D . left + Math . ceil ( C . offsetWidth / 2 ) , D . top + Math . ceil ( C . offsetHeight / 2 ) , B ) ;
this . _fireOnSelect ( B . getID ( ) ) ;
A . cancelBubble = true ;
SimileAjax . DOM . cancelEvent ( A ) ;
return false ;
} ;
Timeline . OriginalEventPainter . prototype . _onClickDurationEvent = function ( F , B , C ) { if ( "pageX" in B ) { var A = B . pageX ;
var E = B . pageY ;
} else { var D = SimileAjax . DOM . getPageCoordinates ( F ) ;
var A = B . offsetX + D . left ;
var E = B . offsetY + D . top ;
} this . _showBubble ( A , E , C ) ;
this . _fireOnSelect ( C . getID ( ) ) ;
B . cancelBubble = true ;
SimileAjax . DOM . cancelEvent ( B ) ;
return false ;
} ;
Timeline . OriginalEventPainter . prototype . showBubble = function ( A ) { var B = this . _eventIdToElmt [ A . getID ( ) ] ;
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 ( B , E , C ) { var D = document . createElement ( "div" ) ;
var A = this . _params . theme . event . bubble ;
C . fillInfoBubble ( D , this . _params . theme , this . _band . getLabeller ( ) ) ;
SimileAjax . WindowManager . cancelPopups ( ) ;
SimileAjax . Graphics . createBubbleForContentAndPoint ( D , B , E , A . width , null , A . maxHeight ) ;
} ;
Timeline . OriginalEventPainter . prototype . _fireOnSelect = function ( A ) { for ( var B = 0 ;
B < this . _onSelectListeners . length ;
B ++ ) { this . _onSelectListeners [ B ] ( A ) ;
} } ;
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 */
Timeline . OverviewEventPainter = function ( A ) { this . _params = A ;
this . _onSelectListeners = [ ] ;
this . _filterMatcher = null ;
this . _highlightMatcher = null ;
} ;
Timeline . OverviewEventPainter . prototype . initialize = function ( B , A ) { this . _band = B ;
this . _timeline = A ;
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 ;
A < this . _onSelectListeners . length ;
A ++ ) { if ( this . _onSelectListeners [ A ] == B ) { this . _onSelectListeners . splice ( A , 1 ) ;
break ;
} } } ;
Timeline . OverviewEventPainter . prototype . getFilterMatcher = function ( ) { return this . _filterMatcher ;
} ;
Timeline . OverviewEventPainter . prototype . setFilterMatcher = function ( A ) { this . _filterMatcher = A ;
} ;
Timeline . OverviewEventPainter . prototype . getHighlightMatcher = function ( ) { return this . _highlightMatcher ;
} ;
Timeline . OverviewEventPainter . prototype . setHighlightMatcher = function ( A ) { this . _highlightMatcher = A ;
} ;
Timeline . OverviewEventPainter . prototype . paint = function ( ) { var C = this . _band . getEventSource ( ) ;
if ( C == null ) { return ;
} this . _prepareForPainting ( ) ;
var H = this . _params . theme . event ;
var F = { trackOffset : H . overviewTrack . offset , trackHeight : H . overviewTrack . height , trackGap : H . overviewTrack . gap , trackIncrement : H . overviewTrack . height + H . overviewTrack . gap } ;
var D = this . _band . getMinDate ( ) ;
var B = this . _band . getMaxDate ( ) ;
var I = ( this . _filterMatcher != null ) ? this . _filterMatcher : function ( J ) { return true ;
} ;
var A = ( this . _highlightMatcher != null ) ? this . _highlightMatcher : function ( J ) { return - 1 ;
} ;
var E = C . getEventReverseIterator ( D , B ) ;
while ( E . hasNext ( ) ) { var G = E . next ( ) ;
if ( I ( G ) ) { this . paintEvent ( G , F , this . _params . theme , A ( 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 ;
this . _tracks = [ ] ;
if ( this . _highlightLayer != null ) { A . removeLayerDiv ( this . _highlightLayer ) ;
} this . _highlightLayer = A . createLayerDiv ( 105 , "timeline-band-highlights" ) ;
this . _highlightLayer . style . display = "none" ;
if ( this . _eventLayer != null ) { A . removeLayerDiv ( this . _eventLayer ) ;
} this . _eventLayer = A . createLayerDiv ( 110 , "timeline-band-events" ) ;
this . _eventLayer . style . display = "none" ;
} ;
Timeline . OverviewEventPainter . prototype . paintEvent = function ( B , C , D , A ) { if ( B . isInstant ( ) ) { this . paintInstantEvent ( B , C , D , A ) ;
} else { this . paintDurationEvent ( B , C , D , A ) ;
} } ;
Timeline . OverviewEventPainter . prototype . paintInstantEvent = function ( I , H , E , A ) { var F = I . getStart ( ) ;
var B = Math . round ( this . _band . dateToPixelOffset ( F ) ) ;
var C = I . getColor ( ) , D = I . getClassName ( ) ;
if ( D ) { C = null ;
} else { C = C != null ? C : E . event . duration . color ;
} var G = this . _paintEventTick ( I , B , C , 100 , H , E ) ;
this . _createHighlightDiv ( A , G , E ) ;
} ;
Timeline . OverviewEventPainter . prototype . paintDurationEvent = function ( L , K , H , B ) { var A = L . getLatestStart ( ) ;
var I = L . getEarliestEnd ( ) ;
var J = Math . round ( this . _band . dateToPixelOffset ( A ) ) ;
var C = Math . round ( this . _band . dateToPixelOffset ( I ) ) ;
var F = 0 ;
for ( ;
F < this . _tracks . length ;
F ++ ) { if ( C < this . _tracks [ F ] ) { break ;
} } this . _tracks [ F ] = C ;
var E = L . getColor ( ) , G = L . getClassName ( ) ;
if ( G ) { E = null ;
} else { E = E != null ? E : H . event . duration . color ;
} var D = this . _paintEventTape ( L , F , J , C , E , 100 , K , H , G ) ;
this . _createHighlightDiv ( B , D , H ) ;
} ;
Timeline . OverviewEventPainter . prototype . _paintEventTape = function ( K , B , D , L , E , C , H , G , F ) { var I = H . trackOffset + B * H . trackIncrement ;
var A = L - D ;
var J = H . trackHeight ;
var M = this . _timeline . getDocument ( ) . createElement ( "div" ) ;
M . className = "timeline-small-event-tape" ;
if ( F ) { M . className += " small-" + F ;
} M . style . left = D + "px" ;
M . style . width = A + "px" ;
M . style . top = I + "px" ;
M . style . height = J + "px" ;
if ( E ) { M . style . backgroundColor = E ;
} if ( C < 100 ) { SimileAjax . Graphics . setOpacity ( M , C ) ;
} this . _eventLayer . appendChild ( M ) ;
return { left : D , top : I , width : A , height : J , elmt : M } ;
} ;
Timeline . OverviewEventPainter . prototype . _paintEventTick = function ( J , C , D , B , G , F ) { var I = F . event . overviewTrack . tickHeight ;
var H = G . trackOffset - I ;
var A = 1 ;
var K = this . _timeline . getDocument ( ) . createElement ( "div" ) ;
K . className = "timeline-small-event-icon" ;
K . style . left = C + "px" ;
K . style . top = H + "px" ;
var E = J . getClassName ( ) ;
if ( E ) { K . className += " small-" + E ;
} if ( B < 100 ) { SimileAjax . Graphics . setOpacity ( K , B ) ;
} this . _eventLayer . appendChild ( K ) ;
return { left : C , top : H , width : A , height : I , elmt : K } ;
} ;
Timeline . OverviewEventPainter . 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 - 1 ) + "px" ;
F . style . width = ( C . width + 2 ) + "px" ;
F . style . top = ( C . top - 1 ) + "px" ;
F . style . height = ( C . height + 2 ) + "px" ;
F . style . background = B ;
this . _highlightLayer . appendChild ( F ) ;
} } ;
Timeline . OverviewEventPainter . prototype . showBubble = function ( A ) { } ;
/* sources.js */
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 ) ;
} ;
Timeline . DefaultEventSource . prototype . removeListener = function ( B ) { for ( var A = 0 ;
A < this . _listeners . length ;
A ++ ) { if ( this . _listeners [ A ] == B ) { this . _listeners . splice ( A , 1 ) ;
break ;
} } } ;
Timeline . DefaultEventSource . prototype . loadXML = function ( G , A ) { var C = this . _getBaseURL ( A ) ;
var H = G . documentElement . getAttribute ( "wiki-url" ) ;
var J = G . documentElement . getAttribute ( "wiki-section" ) ;
var F = G . documentElement . getAttribute ( "date-time-format" ) ;
var E = this . _events . getUnit ( ) . getParser ( F ) ;
var D = G . documentElement . firstChild ;
var I = false ;
while ( D != null ) { if ( D . nodeType == 1 ) { var L = "" ;
if ( D . firstChild != null && D . firstChild . nodeType == 3 ) { L = D . firstChild . nodeValue ;
} var B = ( D . getAttribute ( "isDuration" ) === null && D . getAttribute ( "durationEvent" ) === null ) || D . getAttribute ( "isDuration" ) == "false" || D . getAttribute ( "durationEvent" ) == "false" ;
var K = new Timeline . DefaultEventSource . Event ( { id : D . getAttribute ( "id" ) , start : E ( D . getAttribute ( "start" ) ) , end : E ( D . getAttribute ( "end" ) ) , latestStart : E ( D . getAttribute ( "latestStart" ) ) , earliestEnd : E ( D . getAttribute ( "earliestEnd" ) ) , instant : B , text : D . getAttribute ( "title" ) , description : L , 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" ) } ) ;
K . _node = D ;
K . getProperty = function ( M ) { return this . _node . getAttribute ( M ) ;
} ;
K . setWikiInfo ( H , J ) ;
this . _events . add ( K ) ;
I = true ;
} D = D . nextSibling ;
} if ( I ) { this . _fire ( "onAddMany" , [ ] ) ;
} } ;
Timeline . DefaultEventSource . prototype . loadJSON = function ( H , B ) { var D = this . _getBaseURL ( B ) ;
var J = false ;
if ( H && H . events ) { var I = ( "wikiURL" in H ) ? H . wikiURL : null ;
var K = ( "wikiSection" in H ) ? H . wikiSection : null ;
var F = ( "dateTimeFormat" in H ) ? H . dateTimeFormat : null ;
var E = this . _events . getUnit ( ) . getParser ( F ) ;
for ( var G = 0 ;
G < H . events . length ;
G ++ ) { var A = H . events [ G ] ;
var C = A . isDuration || ( A . durationEvent != null && ! A . durationEvent ) ;
var L = new Timeline . DefaultEventSource . Event ( { id : ( "id" in A ) ? A . id : undefined , start : E ( A . start ) , end : E ( A . end ) , latestStart : E ( A . latestStart ) , earliestEnd : E ( 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 } ) ;
L . _obj = A ;
L . getProperty = function ( M ) { return this . _obj [ M ] ;
} ;
L . setWikiInfo ( I , K ) ;
this . _events . add ( L ) ;
J = true ;
} } if ( J ) { this . _fire ( "onAddMany" , [ ] ) ;
} } ;
Timeline . DefaultEventSource . prototype . loadSPARQL = function ( I , B ) { var E = this . _getBaseURL ( B ) ;
var H = "iso8601" ;
var G = this . _events . getUnit ( ) . getParser ( H ) ;
if ( I == null ) { return ;
} var F = I . documentElement . firstChild ;
while ( F != null && ( F . nodeType != 1 || F . nodeName != "results" ) ) { F = F . nextSibling ;
} var J = null ;
var L = null ;
if ( F != null ) { J = F . getAttribute ( "wiki-url" ) ;
L = F . getAttribute ( "wiki-section" ) ;
F = F . firstChild ;
} var K = false ;
while ( F != null ) { if ( F . nodeType == 1 ) { var D = { } ;
var A = F . firstChild ;
while ( A != null ) { if ( A . nodeType == 1 && A . firstChild != null && A . firstChild . nodeType == 1 && A . firstChild . firstChild != null && A . firstChild . firstChild . nodeType == 3 ) { D [ A . getAttribute ( "name" ) ] = A . firstChild . firstChild . nodeValue ;
} A = A . nextSibling ;
} if ( D [ "start" ] == null && D [ "date" ] != null ) { D [ "start" ] = D [ "date" ] ;
} var C = ( D [ "isDuration" ] === null && D [ "durationEvent" ] === null ) || D [ "isDuration" ] == "false" || D [ "durationEvent" ] == "false" ;
var M = new Timeline . DefaultEventSource . Event ( { id : D [ "id" ] , start : G ( D [ "start" ] ) , end : G ( D [ "end" ] ) , latestStart : G ( D [ "latestStart" ] ) , earliestEnd : G ( D [ "earliestEnd" ] ) , instant : C , text : D [ "title" ] , description : D [ "description" ] , image : this . _resolveRelativeURL ( D [ "image" ] , E ) , link : this . _resolveRelativeURL ( D [ "link" ] , E ) , icon : this . _resolveRelativeURL ( D [ "icon" ] , E ) , color : D [ "color" ] , textColor : D [ "textColor" ] , hoverText : D [ "hoverText" ] , caption : D [ "caption" ] , classname : D [ "classname" ] , tapeImage : D [ "tapeImage" ] , tapeRepeat : D [ "tapeRepeat" ] , eventID : D [ "eventID" ] , trackNum : D [ "trackNum" ] } ) ;
M . _bindings = D ;
M . getProperty = function ( N ) { return this . _bindings [ N ] ;
} ;
M . setWikiInfo ( J , L ) ;
this . _events . add ( M ) ;
K = true ;
} F = F . nextSibling ;
} if ( K ) { this . _fire ( "onAddMany" , [ ] ) ;
} } ;
Timeline . DefaultEventSource . prototype . add = function ( A ) { this . _events . add ( A ) ;
this . _fire ( "onAddOne" , [ A ] ) ;
} ;
Timeline . DefaultEventSource . prototype . addMany = function ( A ) { for ( var B = 0 ;
B < A . length ;
B ++ ) { this . _events . add ( A [ B ] ) ;
} this . _fire ( "onAddMany" , [ ] ) ;
} ;
Timeline . DefaultEventSource . prototype . clear = function ( ) { this . _events . removeAll ( ) ;
this . _fire ( "onClear" , [ ] ) ;
} ;
Timeline . DefaultEventSource . prototype . getEvent = function ( A ) { return this . _events . getEvent ( A ) ;
} ;
Timeline . DefaultEventSource . prototype . getEventIterator = function ( A , B ) { return this . _events . getIterator ( A , B ) ;
} ;
Timeline . DefaultEventSource . prototype . getEventReverseIterator = function ( A , B ) { return this . _events . getReverseIterator ( A , B ) ;
} ;
Timeline . DefaultEventSource . prototype . getAllEventIterator = function ( ) { return this . _events . getAllIterator ( ) ;
} ;
Timeline . DefaultEventSource . prototype . getCount = function ( ) { return this . _events . getCount ( ) ;
} ;
Timeline . DefaultEventSource . prototype . getEarliestDate = function ( ) { return this . _events . getEarliestDate ( ) ;
} ;
Timeline . DefaultEventSource . prototype . getLatestDate = function ( ) { return this . _events . getLatestDate ( ) ;
} ;
Timeline . DefaultEventSource . prototype . _fire = function ( B , A ) { for ( var C = 0 ;
C < this . _listeners . length ;
C ++ ) { var D = this . _listeners [ C ] ;
if ( B in D ) { try { D [ B ] . apply ( D , A ) ;
} catch ( E ) { SimileAjax . Debug . exception ( E ) ;
} } } } ;
Timeline . DefaultEventSource . prototype . _getBaseURL = function ( A ) { if ( A . indexOf ( "://" ) < 0 ) { var C = this . _getBaseURL ( document . location . href ) ;
if ( A . substr ( 0 , 1 ) == "/" ) { A = C . substr ( 0 , C . indexOf ( "/" , C . indexOf ( "://" ) + 3 ) ) + A ;
} else { A = C + A ;
} } var B = A . lastIndexOf ( "/" ) ;
if ( B < 0 ) { return "" ;
} else { return A . substr ( 0 , B + 1 ) ;
} } ;
Timeline . DefaultEventSource . prototype . _resolveRelativeURL = function ( A , B ) { if ( A == null || A == "" ) { return A ;
} else { if ( A . indexOf ( "://" ) > 0 ) { return A ;
} 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 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 : 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 ) : "" ;
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 ;
} , 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 ;
} , getEventID : function ( ) { return this . _eventID ;
} , 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 ;
} , 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 ;
} , setWikiInfo : function ( B , A ) { this . _wikiURL = B ;
this . _wikiSection = A ;
} , fillDescription : function ( A ) { A . innerHTML = this . _description ;
} , fillWikiInfo : function ( D ) { D . style . display = "none" ;
if ( this . _wikiURL == null || this . _wikiSection == null ) { return ;
} var C = this . getProperty ( "wikiID" ) ;
if ( C == null || C . length == 0 ) { C = this . getText ( ) ;
} if ( C == null || C . length == 0 ) { return ;
} D . style . display = "inline" ;
C = C . replace ( /\s/g , "_" ) ;
var B = this . _wikiURL + this . _wikiSection . replace ( /\s/g , "_" ) + "/" + C ;
var A = document . createElement ( "a" ) ;
A . href = B ;
A . target = "new" ;
A . innerHTML = Timeline . strings [ Timeline . clientLocale ] . wikiLinkLabel ;
D . appendChild ( document . createTextNode ( "[" ) ) ;
D . appendChild ( A ) ;
D . appendChild ( document . createTextNode ( "]" ) ) ;
} , fillTime : function ( A , B ) { if ( this . _instant ) { if ( this . isImprecise ( ) ) { A . appendChild ( A . ownerDocument . createTextNode ( B . labelPrecise ( this . _start ) ) ) ;
A . appendChild ( A . ownerDocument . createElement ( "br" ) ) ;
A . appendChild ( A . ownerDocument . createTextNode ( B . labelPrecise ( this . _end ) ) ) ;
} else { A . appendChild ( A . ownerDocument . createTextNode ( B . labelPrecise ( this . _start ) ) ) ;
} } else { if ( this . isImprecise ( ) ) { A . appendChild ( A . ownerDocument . createTextNode ( B . labelPrecise ( this . _start ) + " ~ " + B . labelPrecise ( this . _latestStart ) ) ) ;
A . appendChild ( A . ownerDocument . createElement ( "br" ) ) ;
A . appendChild ( A . ownerDocument . createTextNode ( B . labelPrecise ( this . _earliestEnd ) + " ~ " + B . labelPrecise ( this . _end ) ) ) ;
} else { A . appendChild ( A . ownerDocument . createTextNode ( B . labelPrecise ( this . _start ) ) ) ;
A . appendChild ( A . ownerDocument . createElement ( "br" ) ) ;
A . appendChild ( A . ownerDocument . createTextNode ( B . labelPrecise ( this . _end ) ) ) ;
} } } , fillInfoBubble : function ( A , E , M ) { var K = A . ownerDocument ;
var J = this . getText ( ) ;
var H = this . getLink ( ) ;
var B = this . getImage ( ) ;
if ( B != null ) { var D = K . createElement ( "img" ) ;
D . src = B ;
E . event . bubble . imageStyler ( D ) ;
A . appendChild ( D ) ;
} var L = K . createElement ( "div" ) ;
var C = K . createTextNode ( J ) ;
if ( H != null ) { var I = K . createElement ( "a" ) ;
I . href = H ;
I . appendChild ( C ) ;
L . appendChild ( I ) ;
} else { L . appendChild ( C ) ;
} E . event . bubble . titleStyler ( L ) ;
A . appendChild ( L ) ;
var N = K . createElement ( "div" ) ;
this . fillDescription ( N ) ;
E . event . bubble . bodyStyler ( N ) ;
A . appendChild ( N ) ;
var G = K . createElement ( "div" ) ;
this . fillTime ( G , M ) ;
E . event . bubble . timeStyler ( G ) ;
A . appendChild ( G ) ;
var F = K . createElement ( "div" ) ;
this . fillWikiInfo ( F ) ;
E . event . bubble . wikiStyler ( F ) ;
A . appendChild ( F ) ;
} } ;
/* themes.js */
Timeline . ClassicTheme = new Object ( ) ;
Timeline . ClassicTheme . implementations = [ ] ;
Timeline . ClassicTheme . create = function ( B ) { if ( B == null ) { B = Timeline . getDefaultLocale ( ) ;
} var A = Timeline . ClassicTheme . implementations [ B ] ;
if ( A == null ) { A = Timeline . ClassicTheme . _Impl ;
} return new A ( ) ;
} ;
Timeline . ClassicTheme . _Impl = function ( ) { this . firstDayOfWeek = 0 ;
this . autoWidth = false ;
this . autoWidthAnimationTime = 500 ;
this . timeline _start = null ;
this . timeline _stop = null ;
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 , offset : 2 , autoWidthMargin : 1.5 } , overviewTrack : { offset : 20 , tickHeight : 6 , height : 2 , gap : 1 , autoWidthMargin : 5 } , tape : { height : 4 } , instant : { icon : Timeline . urlPrefix + "images/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" ;
} , timeStyler : function ( A ) { A . className = "timeline-event-bubble-time" ;
} } } ;
this . mouseWheel = "scroll" ;
} ;
/* timeline.js */
Timeline . version = "2.3.0" ;
Timeline . ajax _lib _version = SimileAjax . version ;
Timeline . display _version = Timeline . version + " (with Ajax lib " + Timeline . ajax _lib _version + ")" ;
Timeline . strings = { } ;
Timeline . HORIZONTAL = 0 ;
Timeline . VERTICAL = 1 ;
Timeline . _defaultTheme = null ;
Timeline . getDefaultLocale = function ( ) { return Timeline . clientLocale ;
} ;
Timeline . create = function ( D , C , E , F ) { if ( Timeline . timelines == null ) { Timeline . timelines = [ ] ;
} var B = Timeline . timelines . length ;
Timeline . timelines [ B ] = null ;
var A = new Timeline . _Impl ( D , C , E , F , B ) ;
Timeline . timelines [ B ] = A ;
return A ;
} ;
Timeline . createBandInfo = function ( F ) { var G = ( "theme" in F ) ? F . theme : Timeline . getDefaultTheme ( ) ;
var D = ( "eventSource" in F ) ? F . eventSource : null ;
var H = new Timeline . LinearEther ( { centersOn : ( "date" in F ) ? F . date : new Date ( ) , interval : SimileAjax . DateTime . gregorianUnitLengths [ F . intervalUnit ] , pixelsPerInterval : F . intervalPixels , theme : G } ) ;
var C = new Timeline . GregorianEtherPainter ( { unit : F . intervalUnit , multiple : ( "multiple" in F ) ? F . multiple : 1 , theme : G , align : ( "align" in F ) ? F . align : undefined } ) ;
var I = { showText : ( "showEventText" in F ) ? F . showEventText : true , theme : G } ;
if ( "eventPainterParams" in F ) { for ( var A in F . eventPainterParams ) { I [ A ] = F . eventPainterParams [ A ] ;
} } if ( "trackHeight" in F ) { I . trackHeight = F . trackHeight ;
} if ( "trackGap" in F ) { I . trackGap = F . trackGap ;
} var B = ( "overview" in F && F . overview ) ? "overview" : ( "layout" in F ? F . layout : "original" ) ;
var E ;
if ( "eventPainter" in F ) { E = new F . eventPainter ( I ) ;
} else { switch ( B ) { case "overview" : E = new Timeline . OverviewEventPainter ( I ) ;
break ;
case "detailed" : E = new Timeline . DetailedEventPainter ( I ) ;
break ;
default : E = new Timeline . OriginalEventPainter ( I ) ;
} } return { width : F . width , eventSource : D , timeZone : ( "timeZone" in F ) ? F . timeZone : 0 , ether : H , etherPainter : C , eventPainter : E , theme : G , zoomIndex : ( "zoomIndex" in F ) ? F . zoomIndex : 0 , zoomSteps : ( "zoomSteps" in F ) ? F . zoomSteps : null } ;
} ;
Timeline . createHotZoneBandInfo = function ( F ) { var G = ( "theme" in F ) ? F . theme : Timeline . getDefaultTheme ( ) ;
var D = ( "eventSource" in F ) ? F . eventSource : null ;
var H = new Timeline . HotZoneEther ( { centersOn : ( "date" in F ) ? F . date : new Date ( ) , interval : SimileAjax . DateTime . gregorianUnitLengths [ F . intervalUnit ] , pixelsPerInterval : F . intervalPixels , zones : F . zones , theme : G } ) ;
var C = new Timeline . HotZoneGregorianEtherPainter ( { unit : F . intervalUnit , zones : F . zones , theme : G , align : ( "align" in F ) ? F . align : undefined } ) ;
var I = { showText : ( "showEventText" in F ) ? F . showEventText : true , theme : G } ;
if ( "eventPainterParams" in F ) { for ( var A in F . eventPainterParams ) { I [ A ] = F . eventPainterParams [ A ] ;
} } if ( "trackHeight" in F ) { I . trackHeight = F . trackHeight ;
} if ( "trackGap" in F ) { I . trackGap = F . trackGap ;
} var B = ( "overview" in F && F . overview ) ? "overview" : ( "layout" in F ? F . layout : "original" ) ;
var E ;
if ( "eventPainter" in F ) { E = new F . eventPainter ( I ) ;
} else { switch ( B ) { case "overview" : E = new Timeline . OverviewEventPainter ( I ) ;
break ;
case "detailed" : E = new Timeline . DetailedEventPainter ( I ) ;
break ;
default : E = new Timeline . OriginalEventPainter ( I ) ;
} } return { width : F . width , eventSource : D , timeZone : ( "timeZone" in F ) ? F . timeZone : 0 , ether : H , etherPainter : C , eventPainter : E , theme : G , zoomIndex : ( "zoomIndex" in F ) ? F . zoomIndex : 0 , zoomSteps : ( "zoomSteps" in F ) ? F . zoomSteps : null } ;
} ;
Timeline . getDefaultTheme = function ( ) { if ( Timeline . _defaultTheme == null ) { Timeline . _defaultTheme = Timeline . ClassicTheme . create ( Timeline . getDefaultLocale ( ) ) ;
} return Timeline . _defaultTheme ;
} ;
Timeline . setDefaultTheme = function ( A ) { Timeline . _defaultTheme = A ;
} ;
Timeline . loadXML = function ( A , C ) { var D = function ( G , F , E ) { alert ( "Failed to load data xml from " + A + "\n" + G ) ;
} ;
var B = function ( F ) { var E = F . responseXML ;
if ( ! E . documentElement && F . responseStream ) { E . load ( F . responseStream ) ;
} C ( E , A ) ;
} ;
SimileAjax . XmlHttp . get ( A , D , B ) ;
} ;
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 . getTimelineFromID = function ( A ) { return Timeline . timelines [ A ] ;
} ;
Timeline . writeVersion = function ( A ) { document . getElementById ( A ) . innerHTML = this . display _version ;
} ;
Timeline . _Impl = function ( C , B , D , E , A ) { SimileAjax . WindowManager . initialize ( ) ;
this . _containerDiv = C ;
this . _bandInfos = B ;
this . _orientation = D == null ? Timeline . HORIZONTAL : D ;
this . _unit = ( E != null ) ? E : SimileAjax . NativeDateUnit ;
this . _starting = true ;
this . _autoResizing = false ;
this . autoWidth = B && B [ 0 ] && B [ 0 ] . theme && B [ 0 ] . theme . autoWidth ;
this . autoWidthAnimationTime = B && B [ 0 ] && B [ 0 ] . theme && B [ 0 ] . theme . autoWidthAnimationTime ;
this . timelineID = A ;
this . timeline _start = B && B [ 0 ] && B [ 0 ] . theme && B [ 0 ] . theme . timeline _start ;
this . timeline _stop = B && B [ 0 ] && B [ 0 ] . theme && B [ 0 ] . theme . timeline _stop ;
this . timeline _at _start = false ;
this . timeline _at _stop = false ;
this . _initialize ( ) ;
} ;
Timeline . _Impl . prototype . dispose = function ( ) { for ( var A = 0 ;
A < this . _bands . length ;
A ++ ) { this . _bands [ A ] . dispose ( ) ;
} 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 . 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 ;
A ++ ) { this . _bands [ A ] . paint ( ) ;
} } ;
Timeline . _Impl . prototype . getDocument = function ( ) { return this . _containerDiv . ownerDocument ;
} ;
Timeline . _Impl . prototype . addDiv = function ( A ) { this . _containerDiv . appendChild ( A ) ;
} ;
Timeline . _Impl . prototype . removeDiv = function ( A ) { this . _containerDiv . removeChild ( A ) ;
} ;
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 . getWidthStyle = function ( ) { return this . _orientation == Timeline . HORIZONTAL ? "height" : "width" ;
} ;
Timeline . _Impl . prototype . loadXML = function ( B , D ) { var A = this ;
var E = function ( H , G , F ) { alert ( "Failed to load data xml from " + B + "\n" + H ) ;
A . hideLoadingMessage ( ) ;
} ;
var C = function ( G ) { try { var F = G . responseXML ;
if ( ! F . documentElement && G . responseStream ) { F . load ( G . responseStream ) ;
} D ( F , B ) ;
} finally { A . hideLoadingMessage ( ) ;
} } ;
this . showLoadingMessage ( ) ;
window . setTimeout ( function ( ) { SimileAjax . XmlHttp . get ( B , E , C ) ;
} , 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 . _autoWidthScrollListener = function ( A ) { A . getTimeline ( ) . _autoWidthCheck ( false ) ;
} ;
Timeline . _Impl . prototype . _autoWidthCheck = function ( C ) { var A = this ;
var B = A . _starting ;
var D = 0 ;
function E ( ) { var G = A . getWidthStyle ( ) ;
if ( B ) { A . _containerDiv . style [ G ] = D + "px" ;
} else { A . _autoResizing = true ;
var H = { } ;
H [ G ] = D + "px" ;
SimileAjax . jQuery ( A . _containerDiv ) . animate ( H , A . autoWidthAnimationTime , "linear" , function ( ) { A . _autoResizing = false ;
} ) ;
} } function F ( ) { var H = 0 ;
var G = A . getPixelWidth ( ) ;
if ( A . _autoResizing ) { return ;
} for ( var I = 0 ;
I < A . _bands . length ;
I ++ ) { A . _bands [ I ] . checkAutoWidth ( ) ;
H += A . _bandInfos [ I ] . width ;
} if ( H > G || C ) { D = H ;
E ( ) ;
A . _distributeWidths ( ) ;
} } if ( ! A . 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 C = ( this . isHorizontal ( ) ) ? "horizontal" : "vertical" ;
H . className += " timeline-" + C ;
while ( H . firstChild ) { H . removeChild ( H . firstChild ) ;
} var A = SimileAjax . Graphics . createTranslucentImage ( Timeline . urlPrefix + ( this . isHorizontal ( ) ? "images/copyright-vertical.png" : "images/copyright.png" ) ) ;
A . className = "timeline-copyright" ;
A . title = "Timeline copyright SIMILE - www.code.google.com/p/simile-widgets/" ;
SimileAjax . DOM . registerEvent ( A , "click" , function ( ) { window . location = "http://code.google.com/p/simile-widgets/" ;
} ) ;
H . appendChild ( A ) ;
this . _bands = [ ] ;
for ( var B = 0 ;
B < this . _bandInfos . length ;
B ++ ) { var G = new Timeline . _Band ( this , this . _bandInfos [ B ] , B ) ;
this . _bands . push ( G ) ;
} this . _distributeWidths ( ) ;
for ( var B = 0 ;
B < this . _bandInfos . length ;
B ++ ) { var F = this . _bandInfos [ B ] ;
if ( "syncWith" in F ) { this . _bands [ B ] . setSyncWithBand ( this . _bands [ F . syncWith ] , ( "highlight" in F ) ? F . highlight : false ) ;
} } if ( this . autoWidth ) { for ( var B = 0 ;
B < this . _bands . length ;
B ++ ) { this . _bands [ B ] . 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 + "images/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 G = this . getPixelLength ( ) ;
var B = this . getPixelWidth ( ) ;
var C = 0 ;
for ( var F = 0 ;
F < this . _bands . length ;
F ++ ) { var J = this . _bands [ F ] ;
var I = this . _bandInfos [ F ] ;
var E = I . width ;
var D ;
if ( typeof E == "string" ) { var H = E . indexOf ( "%" ) ;
if ( H > 0 ) { var A = parseInt ( E . substr ( 0 , H ) ) ;
D = Math . round ( A * B / 100 ) ;
} else { D = parseInt ( E ) ;
} } else { D = E ;
} J . setBandShiftAndWidth ( C , D ) ;
J . setViewLength ( G ) ;
C += D ;
} } ;
Timeline . _Impl . prototype . shiftOK = function ( C , B ) { var F = B > 0 , A = B < 0 ;
if ( ( F && this . timeline _start == null ) || ( A && this . timeline _stop == null ) || ( B == 0 ) ) { return ( true ) ;
} var H = false ;
for ( var E = 0 ;
E < this . _bands . length && ! H ;
E ++ ) { H = this . _bands [ E ] . busy ( ) ;
} if ( H ) { return ( true ) ;
} if ( ( F && this . timeline _at _start ) || ( A && this . timeline _at _stop ) ) { return ( false ) ;
} var D = false ;
for ( var E = 0 ;
E < this . _bands . length && ! D ;
E ++ ) { var G = this . _bands [ E ] ;
if ( F ) { D = ( E == C ? G . getMinVisibleDateAfterDelta ( B ) : G . getMinVisibleDate ( ) ) >= this . timeline _start ;
} else { D = ( E == C ? G . getMaxVisibleDateAfterDelta ( B ) : G . getMaxVisibleDate ( ) ) <= this . timeline _stop ;
} } if ( F ) { this . timeline _at _start = ! D ;
this . timeline _at _stop = false ;
} else { this . timeline _at _stop = ! D ;
this . timeline _at _start = false ;
} return ( D ) ;
} ;
Timeline . _Impl . prototype . zoom = function ( D , A , G , F ) { var C = new RegExp ( "^timeline-band-([0-9]+)$" ) ;
var E = null ;
var B = C . exec ( F . id ) ;
if ( B ) { E = parseInt ( B [ 1 ] ) ;
} if ( E != null ) { this . _bands [ E ] . zoom ( D , A , G , F ) ;
} this . paint ( ) ;
} ;
/* units.js */
Timeline . NativeDateUnit = new Object ( ) ;
Timeline . NativeDateUnit . createLabeller = function ( B , A ) { return new Timeline . GregorianDateLabeller ( B , A ) ;
} ;
Timeline . NativeDateUnit . makeDefaultValue = function ( ) { return new Date ( ) ;
} ;
Timeline . NativeDateUnit . cloneValue = function ( A ) { return new Date ( A . getTime ( ) ) ;
} ;
Timeline . NativeDateUnit . getParser = function ( A ) { if ( typeof A == "string" ) { A = A . toLowerCase ( ) ;
} return ( A == "iso8601" || A == "iso 8601" ) ? Timeline . DateTime . parseIso8601DateTime : Timeline . DateTime . parseGregorianDateTime ;
} ;
Timeline . NativeDateUnit . parseFromObject = function ( A ) { return Timeline . DateTime . parseGregorianDateTime ( A ) ;
} ;
Timeline . NativeDateUnit . toNumber = function ( A ) { return A . getTime ( ) ;
} ;
Timeline . NativeDateUnit . fromNumber = function ( A ) { return new Date ( A ) ;
} ;
Timeline . NativeDateUnit . compare = function ( D , C ) { var B , A ;
if ( typeof D == "object" ) { B = D . getTime ( ) ;
} else { B = Number ( D ) ;
} if ( typeof C == "object" ) { A = C . getTime ( ) ;
} else { A = Number ( C ) ;
} return B - A ;
} ;
Timeline . NativeDateUnit . earlier = function ( B , A ) { return Timeline . NativeDateUnit . compare ( B , A ) < 0 ? B : A ;
} ;
Timeline . NativeDateUnit . later = function ( B , A ) { return Timeline . NativeDateUnit . compare ( B , A ) > 0 ? B : A ;
} ;
Timeline . NativeDateUnit . change = function ( A , B ) { return new Date ( A . getTime ( ) + B ) ;
2013-04-14 04:50:57 +00:00
} ;