diff war/scripts/sti/timeplot-modify.js @ 3:cf06b77a8bbd

Committed branch of the e4D repos sti-gwt branch 16384. git-svn-id: http://dev.dariah.eu/svn/repos/eu.dariah.de/ap1/sti-gwt-dariah-geobrowser@36 f2b5be40-def6-11e0-8a09-b3c1cc336c6b
author StefanFunk <StefanFunk@f2b5be40-def6-11e0-8a09-b3c1cc336c6b>
date Tue, 17 Jul 2012 13:34:40 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/war/scripts/sti/timeplot-modify.js	Tue Jul 17 13:34:40 2012 +0000
@@ -0,0 +1,669 @@
+Timeplot.DefaultEventSource.prototype.loadData = function(events){
+
+    this._events.maxValues = new Array();
+    this._events.removeAll();
+    for (var i = 0; i < events.length; i++) {
+        var event = events[i];
+        var numericEvent = new Timeplot.DefaultEventSource.NumericEvent(event.date, event.value);
+        this._events.add(numericEvent);
+    }
+    this._fire("onAddMany", []);
+    
+};
+
+Timeplot._Impl.prototype.resetPlots = function(plotInfos){
+
+    this._plotInfos = plotInfos;
+    this._painters = {
+        background: [],
+        foreground: []
+    };
+    this._painter = null;
+    
+    var timeplot = this;
+    var painter = {
+        onAddMany: function(){
+            timeplot.update();
+        },
+        onClear: function(){
+            timeplot.update();
+        }
+    }
+    
+    for (i = this._plots.length; i > 0; i--) {
+        this._plots[i-1].opacityPlot.removeChild( this._plots[i-1]._opacityCanvas );
+        this._plots[i - 1].dispose();
+        if (document.addEventListener) {
+            this._containerDiv.removeEventListener("mousemove", this._plots[i - 1].mousemove, false);
+            this._containerDiv.removeEventListener("mouseover", this._plots[i - 1].mouseover, false);
+        }
+        else 
+            if (document.attachEvent) {
+                this._containerDiv.detachEvent("onmousemove", this._plots[i - 1].mousemove);
+                this._containerDiv.detachEvent("onmouseover", this._plots[i - 1].mouseover);
+            }
+        delete this._plots[i - 1];
+    }
+    
+    this._plots = [];
+    
+    for (i = 0; i < this._plotInfos.length; i++) {
+        var plot = new Timeplot.Plot(this, this._plotInfos[i]);
+        var dataSource = plot.getDataSource();
+        if (dataSource) {
+            dataSource.addListener(painter);
+        }
+        this.addPainter("background", {
+            context: plot.getTimeGeometry(),
+            action: plot.getTimeGeometry().paint
+        });
+        this.addPainter("background", {
+            context: plot.getValueGeometry(),
+            action: plot.getValueGeometry().paint
+        });
+        this.addPainter("foreground", {
+            context: plot,
+            action: plot.paint
+        });
+        this._plots.push(plot);
+        plot.initialize();
+    }
+    
+};
+
+Timeplot.DefaultTimeGeometry.prototype._calculateGrid = function() {
+    var grid = [];
+    
+    var time = SimileAjax.DateTime;
+    var u = this._unit;
+    var p = this._period;
+
+    if (p == 0) 
+        return grid;
+    
+    var periodUnit = -1;
+    do {
+        periodUnit++;
+    }
+    while (time.gregorianUnitLengths[periodUnit] < p);
+    
+    var unit;
+    if (periodUnit < time.HALFMINUTE) {
+		unit = time.SECOND;
+    }
+    else if (periodUnit < time.WEEK) {
+    	unit = periodUnit - 2;
+    }
+    else {
+        unit = periodUnit - 3;
+    }
+    
+    if( unit < this._granularity ){
+    	unit = this._granularity;
+    }
+    
+    var t = u.cloneValue(this._earliestDate);
+    var timeZone;
+   	do {
+		time.roundDownToInterval(t, unit, timeZone, 1, 0);
+       	var x = this.toScreen(u.toNumber(t));
+       	var l = SimileAjax.DateTime.getTimeLabel(unit,t);
+        if (x > 0) { 
+           	grid.push({ x: x, label: l });
+        }
+        time.incrementByInterval(t, unit, timeZone);
+	} while (t.getTime() < this._latestDate.getTime());
+
+    return grid;
+    
+};
+
+//modified function to prevent from drawing left and right axis
+Timeplot.DefaultValueGeometry.prototype.paint = function() {
+        if (this._timeplot) {
+            var ctx = this._canvas.getContext('2d');
+    
+            ctx.lineJoin = 'miter';
+    
+            // paint grid
+            if (this._gridColor) {        
+                var gridGradient = ctx.createLinearGradient(0,0,0,this._canvas.height);
+                gridGradient.addColorStop(0, this._gridColor.toHexString());
+                gridGradient.addColorStop(0.3, this._gridColor.toHexString());
+                gridGradient.addColorStop(1, "rgba(255,255,255,0.5)");
+
+                ctx.lineWidth = this._gridLineWidth;
+                ctx.strokeStyle = gridGradient;
+    
+                for (var i = 0; i < this._grid.length; i++) {
+                    var tick = this._grid[i];
+                    var y = Math.floor(tick.y) + 0.5;
+                    if (typeof tick.label != "undefined") {
+                        if (this._axisLabelsPlacement == "left") {
+                            var div = this._timeplot.putText(this._id + "-" + i, tick.label,"timeplot-grid-label",{
+                                left: 4,
+                                bottom: y + 2,
+                                color: this._gridColor.toHexString(),
+                                visibility: "hidden"
+                            });
+                            this._labels.push(div);
+                        } else if (this._axisLabelsPlacement == "right") {
+                            var div = this._timeplot.putText(this._id + "-" + i, tick.label, "timeplot-grid-label",{
+                                right: 4,
+                                bottom: y + 2,
+                                color: this._gridColor.toHexString(),
+                                visibility: "hidden"
+                            });
+                            this._labels.push(div);
+                        }
+                        if (y + div.clientHeight < this._canvas.height + 10) {
+                            div.style.visibility = "visible"; // avoid the labels that would overflow
+                        }
+                    }
+
+                    // draw grid
+                    ctx.beginPath();
+                    if (this._gridType == "long" || tick.label == 0) {
+                        ctx.moveTo(0, y);
+                        ctx.lineTo(this._canvas.width, y);
+                    } else if (this._gridType == "short") {
+                        if (this._axisLabelsPlacement == "left") {
+                            ctx.moveTo(0, y);
+                            ctx.lineTo(this._gridShortSize, y);
+                        } else if (this._axisLabelsPlacement == "right") {
+                            ctx.moveTo(this._canvas.width, y);
+                            ctx.lineTo(this._canvas.width - this._gridShortSize, y);
+                        }                       
+                    }
+                    ctx.stroke();
+                }
+            }
+        }
+    };
+    
+//modified function to prevent from drawing hidden labels
+Timeplot.DefaultTimeGeometry.prototype.paint = function() {
+        if (this._canvas) {
+            var unit = this._unit;
+            var ctx = this._canvas.getContext('2d');
+    
+            var gradient = ctx.createLinearGradient(0,0,0,this._canvas.height);
+    
+            ctx.strokeStyle = gradient;
+            ctx.lineWidth = this._gridLineWidth;
+            ctx.lineJoin = 'miter';
+    
+            // paint grid
+            if (this._gridColor) {        
+                gradient.addColorStop(0, this._gridColor.toString());
+                gradient.addColorStop(1, "rgba(255,255,255,0.9)");
+                for (var i = 0; i < this._grid.length; i++) {
+                    var tick = this._grid[i];
+                    var x = Math.floor(tick.x) + 0.5;
+                    if (this._axisLabelsPlacement == "top") {
+                        var div = this._timeplot.putText(this._id + "-" + i, tick.label,"timeplot-grid-label",{
+                            left: x + 4,
+                            top: 2,
+                            visibility: "hidden"
+                        });
+                        this._labels.push(div);
+                    } else if (this._axisLabelsPlacement == "bottom") {
+                        var div = this._timeplot.putText(this._id + "-" + i, tick.label, "timeplot-grid-label",{
+                            left: x + 4,
+                            bottom: 2,
+                            visibility: "hidden"
+                        });
+                        this._labels.push(div);
+                    }
+                    if (!this._hideLabels && x + div.clientWidth < this._canvas.width + 10) {
+                        div.style.visibility = "visible"; // avoid the labels that would overflow
+                    }
+
+                    // draw separator
+                    ctx.beginPath();
+                    ctx.moveTo(x,0);
+                    ctx.lineTo(x,this._canvas.height);
+                    ctx.stroke();
+                }
+            }
+    
+            // paint axis
+            gradient.addColorStop(0, this._axisColor.toString());
+            gradient.addColorStop(1, "rgba(255,255,255,0.5)");
+            
+            ctx.lineWidth = 1;
+            gradient.addColorStop(0, this._axisColor.toString());
+    
+            ctx.beginPath();
+            ctx.moveTo(0,0);
+            ctx.lineTo(this._canvas.width,0);
+            ctx.stroke();
+        }
+    };    
+
+    Timeplot.Plot.prototype.initialize = function(){
+        if (this._dataSource && this._dataSource.getValue) {
+            this._timeFlag = this._timeplot.putDiv("timeflag", "timeplot-timeflag");
+            this._valueFlag = this._timeplot.putDiv(this._id + "valueflag", "timeplot-valueflag");
+            this._valueFlagLineLeft = this._timeplot.putDiv(this._id + "valueflagLineLeft", "timeplot-valueflag-line");
+            this._valueFlagLineRight = this._timeplot.putDiv(this._id + "valueflagLineRight", "timeplot-valueflag-line");
+            if (!this._valueFlagLineLeft.firstChild) {
+                this._valueFlagLineLeft.appendChild(SimileAjax.Graphics.createTranslucentImage(Timeplot.urlPrefix + "images/line_left.png"));
+                this._valueFlagLineRight.appendChild(SimileAjax.Graphics.createTranslucentImage(Timeplot.urlPrefix + "images/line_right.png"));
+            }
+            this._valueFlagPole = this._timeplot.putDiv(this._id + "valuepole", "timeplot-valueflag-pole");
+            
+            var opacity = this._plotInfo.valuesOpacity;
+            
+            SimileAjax.Graphics.setOpacity(this._timeFlag, opacity);
+            SimileAjax.Graphics.setOpacity(this._valueFlag, opacity);
+            SimileAjax.Graphics.setOpacity(this._valueFlagLineLeft, opacity);
+            SimileAjax.Graphics.setOpacity(this._valueFlagLineRight, opacity);
+            SimileAjax.Graphics.setOpacity(this._valueFlagPole, opacity);
+            
+            var plot = this;
+            
+            var mouseOverHandler = function(elmt, evt, target){
+                plot._timeFlag.style.visibility = "visible";
+                plot._valueFlag.style.visibility = "visible";
+                plot._valueFlagLineLeft.style.visibility = "visible";
+                plot._valueFlagLineRight.style.visibility = "visible";
+                plot._valueFlagPole.style.visibility = "visible";
+                if (plot._plotInfo.showValues) {
+                    plot._valueFlag.style.display = "block";
+                    mouseMoveHandler(elmt, evt, target);
+                }
+            }
+            
+            var mouseOutHandler = function(elmt, evt, target){
+                plot._timeFlag.style.visibility = "hidden";
+                plot._valueFlag.style.visibility = "hidden";
+                plot._valueFlagLineLeft.style.visibility = "hidden";
+                plot._valueFlagLineRight.style.visibility = "hidden";
+                plot._valueFlagPole.style.visibility = "hidden";
+            }
+            
+            var day = 24 * 60 * 60 * 1000;
+            var month = 30 * day;
+            
+            var mouseMoveHandler = function(elmt, evt, target){
+                if (typeof SimileAjax != "undefined" && plot._plotInfo.showValues) {
+                    var c = plot._canvas;
+                    var x = Math.round(SimileAjax.DOM.getEventRelativeCoordinates(evt, plot._canvas).x);
+                    if (x > c.width) 
+                        x = c.width;
+                    if (isNaN(x) || x < 0) 
+                        x = 0;
+                    var t = plot._timeGeometry.fromScreen(x);
+                    if (t == 0) { // something is wrong
+                        plot._valueFlag.style.display = "none";
+                        return;
+                    }
+                    
+                    var validTime = plot._dataSource.getClosestValidTime(t);
+                    x = plot._timeGeometry.toScreen(validTime);
+                    var v = plot._dataSource.getValue(validTime);
+                    if (plot._plotInfo.roundValues) 
+                        v = Math.round(v);
+                    plot._valueFlag.innerHTML = v;
+                    
+                    var t = new Date(validTime);
+                    var unit = plot._timeGeometry.extendedDataSource.unit;
+                    var time = SimileAjax.DateTime;
+       				var l = SimileAjax.DateTime.getTimeLabel(unit,t);
+                    
+                    plot._timeFlag.innerHTML = l;
+                    
+                    var tw = plot._timeFlag.clientWidth;
+                    var th = plot._timeFlag.clientHeight;
+                    var tdw = Math.round(tw / 2);
+                    var vw = plot._valueFlag.clientWidth;
+                    var vh = plot._valueFlag.clientHeight;
+                    var y = plot._valueGeometry.toScreen(v);
+                    
+                    if (x + tdw > c.width) {
+                        var tx = c.width - tdw;
+                    }
+                    else 
+                        if (x - tdw < 0) {
+                            var tx = tdw;
+                        }
+                        else {
+                            var tx = x;
+                        }
+                    
+                    if (plot._timeGeometry._timeValuePosition == "top") {
+                        plot._timeplot.placeDiv(plot._valueFlagPole, {
+                            left: x,
+                            top: th - 5,
+                            height: c.height - y - th + 6,
+                            display: "block"
+                        });
+                        plot._timeplot.placeDiv(plot._timeFlag, {
+                            left: tx - tdw,
+                            top: -6,
+                            display: "block"
+                        });
+                    }
+                    else {
+                        plot._timeplot.placeDiv(plot._valueFlagPole, {
+                            left: x,
+                            bottom: 0,
+                            height: c.height,
+                            display: "block"
+                        });
+                        plot._timeplot.placeDiv(plot._timeFlag, {
+                            left: tx - tdw,
+                            bottom: 0,
+                            display: "block"
+                        });
+                    }
+                    
+                    if (x + vw + 14 > c.width && y + vh + 4 > c.height) {
+                        plot._valueFlagLineLeft.style.display = "none";
+                        plot._timeplot.placeDiv(plot._valueFlagLineRight, {
+                            left: x - 14,
+                            bottom: y - 14,
+                            display: "block"
+                        });
+                        plot._timeplot.placeDiv(plot._valueFlag, {
+                            left: x - vw - 13,
+                            bottom: y - vh - 13,
+                            display: "block"
+                        });
+                    }
+                    else 
+                        if (x + vw + 14 > c.width && y + vh + 4 < c.height) {
+                            plot._valueFlagLineRight.style.display = "none";
+                            plot._timeplot.placeDiv(plot._valueFlagLineLeft, {
+                                left: x - 14,
+                                bottom: y,
+                                display: "block"
+                            });
+                            plot._timeplot.placeDiv(plot._valueFlag, {
+                                left: x - vw - 13,
+                                bottom: y + 13,
+                                display: "block"
+                            });
+                        }
+                        else 
+                            if (x + vw + 14 < c.width && y + vh + 4 > c.height) {
+                                plot._valueFlagLineRight.style.display = "none";
+                                plot._timeplot.placeDiv(plot._valueFlagLineLeft, {
+                                    left: x,
+                                    bottom: y - 13,
+                                    display: "block"
+                                });
+                                plot._timeplot.placeDiv(plot._valueFlag, {
+                                    left: x + 13,
+                                    bottom: y - 13,
+                                    display: "block"
+                                });
+                            }
+                            else {
+                                plot._valueFlagLineLeft.style.display = "none";
+                                plot._timeplot.placeDiv(plot._valueFlagLineRight, {
+                                    left: x,
+                                    bottom: y,
+                                    display: "block"
+                                });
+                                plot._timeplot.placeDiv(plot._valueFlag, {
+                                    left: x + 13,
+                                    bottom: y + 13,
+                                    display: "block"
+                                });
+                            }
+                }
+            }
+            
+            var timeplotElement = this._timeplot.getElement();
+            this.mouseover = SimileAjax.DOM.registerPlotEvent(timeplotElement, "mouseover", mouseOverHandler);
+            this.mouseout = SimileAjax.DOM.registerPlotEvent(timeplotElement, "mouseout", mouseOutHandler);
+            this.mousemove = SimileAjax.DOM.registerPlotEvent(timeplotElement, "mousemove", mouseMoveHandler);
+            
+            this.opacityPlot = this._timeplot.putDiv( "opacityPlot"+this._timeplot._plots.length, "opacityPlot" );
+            SimileAjax.Graphics.setOpacity(this.opacityPlot, 50 );
+//		this.opacityPlot.style.zIndex = this._timeplot._plots.length;
+            this._timeplot.placeDiv( this.opacityPlot, { left: 0, bottom: 0, width: this._canvas.width, height: this._canvas.height });
+            this._opacityCanvas = document.createElement("canvas");
+            this.opacityPlot.appendChild(this._opacityCanvas);
+            if(!this._opacityCanvas.getContext && G_vmlCanvasManager)
+                this._opacityCanvas = G_vmlCanvasManager.initElement(this._opacityCanvas);
+  		    this._opacityCanvas.width = this._canvas.width;
+            this._opacityCanvas.height = this._canvas.height;
+			this.opacityPlot.style.visibility = "hidden";
+			
+        }
+    };
+
+    SimileAjax.DOM.registerPlotEvent = function(elmt, eventName, handler){
+        var handler2 = function(evt){
+            evt = (evt) ? evt : ((event) ? event : null);
+            if (evt) {
+                var target = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
+                if (target) {
+                    target = (target.nodeType == 1 || target.nodeType == 9) ? target : target.parentNode;
+                }
+                
+                return handler(elmt, evt, target);
+            }
+            return true;
+        }
+        
+        if (SimileAjax.Platform.browser.isIE) {
+            elmt.attachEvent("on" + eventName, handler2);
+        }
+        else {
+            elmt.addEventListener(eventName, handler2, false);
+        }
+        
+        return handler2;
+    };
+    
+SimileAjax.DOM.getEventRelativeCoordinates = function(evt, elmt) {
+    if (SimileAjax.Platform.browser.isIE) {
+        var coords = SimileAjax.DOM.getPageCoordinates(elmt);
+        return {
+          x: evt.clientX - coords.left, 
+          y: evt.clientY - coords.top
+        };        
+    } else {
+        var coords = SimileAjax.DOM.getPageCoordinates(elmt);
+
+        if ((evt.type == "DOMMouseScroll") &&
+          SimileAjax.Platform.browser.isFirefox &&
+          (SimileAjax.Platform.browser.majorVersion == 2)) {
+          // Due to: https://bugzilla.mozilla.org/show_bug.cgi?id=352179                  
+
+          return {
+            x: evt.screenX - coords.left,
+            y: evt.screenY - coords.top 
+          };
+        } else {
+          return {
+              x: evt.pageX - coords.left,
+              y: evt.pageY - coords.top
+          };
+        }
+    }
+};	
+
+SimileAjax.Graphics.setOpacity = function(elmt, opacity) {
+    if (SimileAjax.Platform.browser.isIE) {
+        elmt.style.filter = "alpha(opacity = " + opacity + ")";
+    } else {
+        var o = (opacity / 100).toString();
+        elmt.style.opacity = o;
+        elmt.style.MozOpacity = o;
+    }
+};
+
+	Timeplot.Plot.prototype.fullOpacityPlot = function( left, right, lp, rp, lft, rft, pixel, c ) {
+
+        var ctx = this._opacityCanvas.getContext('2d');
+
+        ctx.clearRect(0,0,this._canvas.width,this._canvas.height);
+        ctx.lineWidth = this._plotInfo.lineWidth;
+        ctx.lineJoin = 'miter';
+
+        var h = this._canvas.height;
+        ctx.fillStyle = this._plotInfo.lineColor.toString();
+		
+       	var data = this._dataSource.getData();
+       	var times = data.times;
+       	var values = data.values;
+		var first;
+
+		if( lft != null && lft.getTime() != left.getTime() ){
+			var gradient = ctx.createLinearGradient(lp-pixel, 0, lp, 0);
+        	gradient.addColorStop(0, 'rgba('+c.r1+','+c.g1+','+c.b1+',0)');
+        	gradient.addColorStop(1, 'rgba('+c.r1+','+c.g1+','+c.b1+',1)');
+			first = true;
+	        ctx.beginPath();
+       		for (var t = 0; t < times.length; t++){
+				var x = this._timeGeometry.toScreen(times[t]);
+				var y = this._valueGeometry.toScreen(values[t]);
+				if( times[t].getTime() == left.getTime() ){
+					ctx.lineTo(x, h - y);
+        			ctx.lineTo(x, h);
+        			ctx.fillStyle = gradient;
+					ctx.fill();
+					break;
+				}
+				else if ( times[t].getTime() >= lft.getTime() ) {
+					if (first) {
+						ctx.moveTo(x, h);
+						first = false;
+					}
+					ctx.lineTo(x, h - y);	
+				}
+			}			
+		}
+		
+		if( rft != null && rft.getTime() != right.getTime() ){
+			var gradient = ctx.createLinearGradient(rp, 0, rp+pixel, 0);
+        	gradient.addColorStop(0, 'rgba('+c.r1+','+c.g1+','+c.b1+',1)');
+        	gradient.addColorStop(1, 'rgba('+c.r1+','+c.g1+','+c.b1+',0)');
+			first = true;
+	        ctx.beginPath();
+       		for (var t = 0; t < times.length; t++){
+				var x = this._timeGeometry.toScreen(times[t]);
+				var y = this._valueGeometry.toScreen(values[t]);
+				if( times[t].getTime() == rft.getTime() ){
+					ctx.lineTo(x, h - y);
+					ctx.lineTo(x, h);
+        			ctx.fillStyle = gradient;
+					ctx.fill();
+					break;
+				}
+				else if ( times[t].getTime() >= right.getTime() ) {
+					if (first) {
+						ctx.moveTo(x, h);
+						first = false;
+					}
+					ctx.lineTo(x, h - y);	
+				}
+			}			
+		}
+
+		first = true;
+        ctx.beginPath();
+        ctx.fillStyle = this._plotInfo.lineColor.toString();
+       	for (var t = 0; t < times.length; t++)
+			if (!(times[t].getTime() < left.getTime() || times[t].getTime() > right.getTime())) {
+				var x = this._timeGeometry.toScreen(times[t]);
+				var y = this._valueGeometry.toScreen(values[t]);
+				if (first) {
+					ctx.moveTo(x, h);
+					first = false;
+				}
+				ctx.lineTo(x, h - y);
+				if (times[t].getTime() == right.getTime() || t == times.length - 1 ) 
+					ctx.lineTo(x, h);
+			}
+		ctx.fill();
+
+    };
+    
+    Timeplot._Impl.prototype.regularGrid = function(){
+    
+    	var canvas = this.getCanvas();
+        var ctx = canvas.getContext('2d');
+		var gradient = ctx.createLinearGradient(0,0,0,canvas.height);
+		gradient.addColorStop(0, "rgb(0,0,0)");
+		gradient.addColorStop(1, "rgba(255,255,255,0.9)");
+		ctx.strokeStyle = gradient;
+		ctx.lineWidth = 0.5;
+		ctx.lineJoin = 'miter';
+
+		var xDist = canvas.width / 9;
+		var positions = [];
+		for( var i=1; i<9; i++ ){
+			var x = i*xDist;
+			ctx.beginPath();
+			ctx.moveTo(x,0);
+			ctx.lineTo(x,canvas.height);
+			ctx.stroke();
+			positions.push({ label: '', x: x });
+		}
+		return positions; 
+    	
+    };
+
+    Timeplot.Plot.prototype._plot = function(f) {
+    	var ctx = this._canvas.getContext('2d');
+    	f = function(x,y,draw) {
+			if( draw ){
+				ctx.lineTo(x,y);
+			}
+			else {
+				ctx.moveTo(x,y);
+			}			
+        };
+        var data = this._dataSource.getData();
+        if (data) {
+            var times = data.times;
+            var values = data.values;
+            var T = times.length;
+			ctx.moveTo(0,0);
+            for (var t = 0; t < T; t++) {
+                var x = this._timeGeometry.toScreen(times[t]);
+                var y = this._valueGeometry.toScreen(values[t]);
+                var draw = false;
+                if( t > 0 && ( values[t-1] > 0 || values[t] > 0 ) ){
+                	draw = true;
+                }
+                if( t == 0 ){
+                	draw = true;
+                }
+                f(x,y,draw);
+            }
+        }
+    };
+    
+SimileAjax.DOM.registerEvent = function(elmt, eventName, handler) {
+    var handler2 = function(evt) {
+        evt = (evt) ? evt : ((event) ? event : null);
+        if (evt) {
+            var target = (evt.target) ? 
+                evt.target : ((evt.srcElement) ? evt.srcElement : null);
+            if (target) {
+                target = (target.nodeType == 1 || target.nodeType == 9) ? 
+                    target : target.parentNode;
+            }
+            
+            return handler(elmt, evt, target);
+        }
+        return true;
+    }
+    
+    if (SimileAjax.Platform.browser.isIE) {
+        elmt.attachEvent("on" + eventName, handler2);
+    } else {    
+    	if( eventName == "mousewheel" ){
+    		eventName = "DOMMouseScroll";
+    	}
+        elmt.addEventListener(eventName, handler2, false);
+    }
+};
+    
\ No newline at end of file