/lenasys/trunk

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/lenasys/trunk
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
1
/********************************************************************************
2
3
   Mouse coordinate and canvas globals
4
   
5
   Handles both Touch and Mouse/Keyboard input at the same time
6
   
7
*********************************************************************************/
8
9
		// Mouse coordinate globals
11.4.4 by mattman-03
bugg fixed, Code standard fixed
10
		var gridx, gridy;
11
		var clickstate = 0;
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
12
		var acanvas;
13
		var context;
14
15
/********************************************************************************
16
17
   Canvas Setup and Click Handling Code
18
   
19
   Handles both Touch and Mouse/Keyboard input at the same time and executes 
20
   handler callbacks.
21
   Also declares canvas globals
22
23
*********************************************************************************/
11.4.4 by mattman-03
bugg fixed, Code standard fixed
24
		function setupCanvas() {
25
			acanvas = document.getElementById( 'a' );
26
			context = acanvas.getContext( "2d" );
27
			setTimeout( "foo();", 50 );
28
			setupClickHandling();
29
		}
30
		
31
		function setupClickHandling() {
32
			// Mouse and Keyboard Events
33
			acanvas.addEventListener( 'mousemove', ev_mousemove, false );
34
			acanvas.addEventListener( 'mouseup', ev_mouseup, false );
35
			acanvas.addEventListener( 'mousedown', ev_mousedown, false );
36
			// Touch Events
37
			acanvas.addEventListener( 'touchstart', ev_touchstart, false);
38
			acanvas.addEventListener( 'touchend', ev_touchend, false);
39
			acanvas.addEventListener( 'touchmove', ev_touchmove, false);		
40
		}
41
		
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
42
		// Keyboard/Mouse Mouse Up Handler
11.4.4 by mattman-03
bugg fixed, Code standard fixed
43
		function evMouseup(ev) {
44
			handlerMouseup();
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
45
		}
46
		
47
		// Keyboard/Mouse Mouse Down Handler
11.4.4 by mattman-03
bugg fixed, Code standard fixed
48
		function evMousedown(ev) {
49
			handlerMousedown(ev);		
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
50
		}
51
52
		// Keyboard/Mouse Mouse Move Handler
11.4.4 by mattman-03
bugg fixed, Code standard fixed
53
		function evMouseMove(ev) {
54
			var cx, cy = 0;
55
			// Firefox
56
			if( ev.layerX || ev.layerX == 0 ) { 
57
				cx = ev.layerX - acanvas.offsetLeft;
58
				cy = ev.layerY - acanvas.offsetTop;
59
			// Opera
60
			} else if( ev.offsetX || ev.offsetX == 0 ) { 
61
				cx = ev.offsetX - acanvas.offsetLeft;
62
				cy = ev.offsetY - acanvas.offsetTop;
63
			}
64
			coord = findPos(acanvas);
65
			cx = cx - coord.x;
66
			cy = cy - coord.y;
67
			handler_mousemove( cx, cy );
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
68
		}		
69
70
		// Touch start event
11.4.4 by mattman-03
bugg fixed, Code standard fixed
71
		function evTouchStart( event ) {  
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
72
    		event.preventDefault();  
73
     		var numtouch = event.touches.length;  
11.4.4 by mattman-03
bugg fixed, Code standard fixed
74
			targetEvent =  event.touches.item( 0 );
75
			var cx = targetEvent.pageX;
76
			var cy = targetEvent.pageY;
77
			gridx = cx;
78
			gridy = cy;
79
			handlerMouseDown();
80
		}
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
81
82
		// Touch end event
11.4.4 by mattman-03
bugg fixed, Code standard fixed
83
		function evTouchEnd( event ) {  
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
84
    		event.preventDefault();  
11.4.4 by mattman-03
bugg fixed, Code standard fixed
85
     		var numtouch = event.touches.length;
86
 			handlerMouseUp();
87
		}  
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
88
		
89
		// Touch move event
11.4.4 by mattman-03
bugg fixed, Code standard fixed
90
		function evTouchMove( event ) {
91
    		event.preventDefault();
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
92
     		var numtouch = event.touches.length;  
11.4.4 by mattman-03
bugg fixed, Code standard fixed
93
			targetEvent =  event.touches.item( 0 );
94
			var cx = targetEvent.pageX;
95
			var cy = targetEvent.pageY;
96
			handlerMouseMove( cx, cy );				
97
		}  
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
98
99
		// Fix scrolling on touch devices
11.4.4 by mattman-03
bugg fixed, Code standard fixed
100
		var scrollFix = function(elem) {
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
101
		    // Variables to track inputs
102
		    var startY, startTopScroll;
11.4.4 by mattman-03
bugg fixed, Code standard fixed
103
		    elem = elem || document.querySelector( elem );
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
104
		    // If there is no element, then do nothing  
11.4.4 by mattman-03
bugg fixed, Code standard fixed
105
		    if( !elem ){
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
106
		        return;
11.4.4 by mattman-03
bugg fixed, Code standard fixed
107
			}
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
108
		    // Handle the start of interactions
11.4.4 by mattman-03
bugg fixed, Code standard fixed
109
		    elem.addEventListener( 'touchstart', function( event ) {
110
		        startY = event.touches[ 0 ].pageY;
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
111
		        startTopScroll = elem.scrollTop;
11.4.4 by mattman-03
bugg fixed, Code standard fixed
112
		        if( startTopScroll <= 0 ) {
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
113
		            elem.scrollTop = 1;
11.4.4 by mattman-03
bugg fixed, Code standard fixed
114
				}
115
		        if( startTopScroll + elem.offsetHeight >= elem.scrollHeight ) {
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
116
		            elem.scrollTop = elem.scrollHeight - elem.offsetHeight - 1;
11.4.4 by mattman-03
bugg fixed, Code standard fixed
117
				}
118
		    }, false );
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
119
		};
120
121
/********************************************************************************
122
123
   Canvas Diagram Drawing Code
124
125
*********************************************************************************/
126
127
		// Draws a stroked rectangle of certain thicknes and color
11.4.4 by mattman-03
bugg fixed, Code standard fixed
128
		function drawrect( x1, y1, x2, y2, color ) {
129
			context.lineWidth = 1.5;
130
			context.strokeStyle = color;
131
			context.strokeRect( x1, y1, x2 - x1, y2 - y1 );
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
132
		}
133
		
134
		// Draws a perfect round circle
11.4.4 by mattman-03
bugg fixed, Code standard fixed
135
		function drawcircle( radius, color ) {
136
			context.lineWidth = 1.5;
137
			context.strokeStyle = color;
138
			context.arc( 0, 0, radius, 0 , 2 * Math.PI, false );
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
139
		}
140
141
		// Draws 90 degree arc
11.4.4 by mattman-03
bugg fixed, Code standard fixed
142
		function drawellipse( x1, y1, x2, y2 ) {
143
			var rx = ( x2 - x1 ) * 0.5;
144
			var ry = ( y2 - y1 ) * 0.5;
145
			context.beginPath();					
146
			context.moveTo( x1, y1 + ry );
147
			context.quadraticCurveTo( x1, y1, x1 + rx, y1);
148
			context.quadraticCurveTo( x2, y1, x2, y1 + ry);
149
			context.quadraticCurveTo( x2, y2, x2 - rx, y2);
150
			context.quadraticCurveTo( x1, y2, x1, y1 + ry);
151
			context.stroke();
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
152
		}	
153
		
154
		// Draw a point		
11.4.4 by mattman-03
bugg fixed, Code standard fixed
155
		function point( x, y, col ) {
156
			context.strokeStyle = "#000";
157
			context.lineWidth = 1;
158
			context.fillStyle = col;
159
			context.fillRect( x - 4, y - 4, 8, 8 );		
160
			context.strokeRect( x - 4, y - 4, 8, 8 );
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
161
		}
162
		
163
		// Draw a box around a point to indicate highlight
11.4.4 by mattman-03
bugg fixed, Code standard fixed
164
		function highlight( px, py ) {
165
			context.strokeStyle = "#aaa";
166
			context.lineWidth = 1;
167
			context.strokeRect( px - 8, py - 8, 16, 16 );
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
168
		}
169
		
170
		// Draw a line using current context
11.4.4 by mattman-03
bugg fixed, Code standard fixed
171
		function drawline( x1, y1, x2, y2, strokestyle, linewidth ) {
172
			context.strokeStyle = strokestyle;
173
			context.lineWidth = linewidth;
174
			context.beginPath();
175
			context.moveTo( x1, y1 );
176
			context.lineTo( x2, y2 );
177
			context.stroke();							
178
		}
179
		
180
		function fourpoints( x1, y1, x2, y2, x3, y3, x4, y4, col ) {
181
			point( x1, y1, col );
182
			point( x2, y2, col );
183
			point( x3, y3, col );
184
			point( x4, y4, col );				
185
		}
186
		
187
		function drawdiamond( x1, y1, x2, y2 ) {
188
			var rx = ( x2 - x1 ) * 0.5;
189
			var ry = ( y2 - y1 ) * 0.5;
190
			context.beginPath();					
191
			context.moveTo( x1, y1 + ry);
192
			context.lineTo( x1 + rx, y2);
193
			context.lineTo( x2, y1 + ry);
194
			context.lineTo( x1 + rx, y1);
195
			context.lineTo( x1, y1 + ry);
196
			context.stroke();
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
197
		}
198
		
199
		// Dashed Line in Segments of given size
11.4.4 by mattman-03
bugg fixed, Code standard fixed
200
		function dashedline( sx, sy, ex, ey, dashlen, linewidth, col ) {
201
			var dx = ex - sx;
202
			var dy = ey - sy;
203
			len = Math.sqrt(( dx * dx ) + ( dy * dy ));
204
			notimes = Math.round( len / dashlen );
205
			dx = dx / notimes;
206
			dy = dy / notimes;
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
207
			context.lineWidth = linewidth;
11.4.4 by mattman-03
bugg fixed, Code standard fixed
208
			context.strokeStyle = col;
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
209
			context.beginPath();
11.4.4 by mattman-03
bugg fixed, Code standard fixed
210
			var xk, yk;
211
			xk = sx;
212
			yk = sy;
213
			xh = dx / 2.0;
214
			yh = dy / 2.0;
215
			for( var i = 0; i < notimes; i++ ) {
216
				context.moveTo( xk, yk );				
217
				context.lineTo( xk + xh, yk + yh );
218
				xk += dx;
219
				yk += dy;
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
220
			}
11.4.4 by mattman-03
bugg fixed, Code standard fixed
221
			context.stroke();	
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
222
		}
223
		
11.4.4 by mattman-03
bugg fixed, Code standard fixed
224
		// Arcto only works if both x1 and y2 are on circle border		
225
		function arcTo( x0, y0, x1, y1, x2, y2 ) {
226
			var r = Math.sqrt(( x1 - x0 ) * ( x1 - x0 ) + ( y1 - y0 ) * ( y1 - y0 ));
227
			var x = x0 - r;
228
			var y = y0 - r;
229
			var startAngle = ( 180 / Math.PI * Math.atan2( y1 - y0, x1 - x0 ));
230
			var endAngle = ( 180 / Math.PI * Math.atan2( y2 - y0, x2 - x0 ));
231
			context.arc( x0, y0, r, 0, Math.PI * 2.0, 1.0);
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
232
		}
233
234
		// Draws 90 degree arc
11.4.4 by mattman-03
bugg fixed, Code standard fixed
235
		function arcDeg( x1, y1, x2, y2, x3, y3) {
236
			// First quadrant positive positive			
237
			dashedline( x1, y1, x2, y2, 8, 1.0, "#999" );
238
			dashedline( x3, y3, x2, y2, 8, 1.0, "#999" );					
239
			point( x1, y1, "#ff5");
240
			point( x2, y2, "#f55");
241
			point( x3, y3, "#f55");
242
			k = ( y3 - y1 ) / ( x3 - x1);
243
			yk = y1 + (( x2 - x1 ) * k );
244
			rx = x3 - x1;
245
			ry = y3 - y1;
246
			point( x2, yk, "#f5f" );
247
			context.strokeStyle = '#49f';
248
			context.lineWidth = 1.0;					
249
			context.beginPath();					
250
			context.moveTo( x1, y1 );
251
			for( i = 0; i < 48; i++ ) {
252
				if( y3 >= y1 ) {
253
					if( yk >= y2 ) {
254
						context.lineTo( x1 + ( Math.sin((( Math.PI / 96.0 ) * -i ) + ( Math.PI * 1.0 )) * rx ), y3 + ( Math.cos((( Math.PI / 96.0 ) * -i ) + ( Math.PI * 1.0 )) * ry ));
255
					} else {
256
						context.lineTo( x3 + ( Math.sin((( Math.PI/96.0) * i ) + ( Math.PI * 1.5 )) * rx ), y1 + ( Math.cos((( Math.PI / 96.0 ) * i ) + ( Math.PI * 1.5 )) * ry));
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
257
					}
11.4.4 by mattman-03
bugg fixed, Code standard fixed
258
				} else {
259
					if( yk <= y2 ) {
260
						context.lineTo( x1 + ( Math.sin((( Math.PI / 96.0 ) * -i ) + ( Math.PI * 1.0 )) * rx ), y3 + ( Math.cos((( Math.PI / 96.0) * -i ) + ( Math.PI * 1.0)) * ry ));
261
					} else {
262
						context.lineTo( x3 + ( Math.sin((( Math.PI / 96.0) * i ) + ( Math.PI * 1.5 )) * rx ), y1 + ( Math.cos((( Math.PI / 96.0) * i ) + ( Math.PI * 1.5 )) * ry ));
263
					}							
264
				}
265
			}
266
			context.stroke();
267
		}
268
		
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
269
		// function that draws one part of the sun	
11.4.4 by mattman-03
bugg fixed, Code standard fixed
270
		function sunDial( radius, angle, scale ) {
271
			cosv = Math.cos(angle);
272
			sinv = Math.sin(angle);
273
			yaddx = scale * cosv;
274
			yaddy = scale * sinv;
275
			xaddx = -scale * sinv;
276
			xaddy = scale * cosv;
277
			xk = cosv * radius;
278
			yk = sinv * radius;
279
			context.bezierCurveTo(( -1.5 * xaddx ) + ( yaddx * 1.5 ) + xk, ( -1.5 * xaddy ) + ( yaddy * 1.5 ) + yk, xaddx + ( yaddx * 2.0 ) + xk, xaddy + ( yaddy * 2.0 ) + yk, xaddx + ( yaddx * 3.0 ) + xk, xaddy + ( yaddy * 3.0 ) + yk );
280
			context.bezierCurveTo( xaddx + yaddx + xk, xaddy + yaddy + yk, ( 1.5 * xaddx ) + yaddx + xk, ( 1.5 * xaddy ) + yaddy + yk, ( 3.0 * xaddx ) + xk, ( 3.0 * xaddy ) + yk );
281
		}
282
283
		// function that draws the sun
284
		function drawSun() {
285
			context.fillStyle = "#fe9";
286
			context.strokeStyle = "#d82";
287
			context.lineWidth = 1.5;
288
			context.beginPath();
289
			context.moveTo( 30, 0 );
290
			for( i = 0.0; i < 360.0; i += 22.5 ) {
291
				angle = ( i / 360.0 ) * 2 * Math.PI;
292
				sundial( 30, angle, 3 );
293
			}
294
			context.stroke();
295
			context.fill();															
296
		}
297
298
		// Draws the ball (used in various examples)
299
		function drawball( cx, cy, radie, innerradie, ballradie, col1, inangle, inangleadd ) {
300
			angleadd = ( inangleadd / 360.0 ) * 2 * Math.PI;
301
			context.fillStyle = col1;
302
			for( i = 0; i < 360; i += inangle ) {
303
				angle = ( i / 360.0 ) * 2 * Math.PI;
304
				angle2 = angle + angleadd;
305
				angle3 = angle + ( angleadd * 2.0 );
306
				angle4 = angle - angleadd;
307
				cosv = Math.cos( angle );
308
				sinv = Math.sin( angle );
309
				cosv2 = Math.cos( angle2 );
310
				sinv2 = Math.sin( angle2 );
311
				cosv4 = Math.cos( angle4 );
312
				sinv4 = Math.sin( angle4 );
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
313
				context.beginPath();
11.4.4 by mattman-03
bugg fixed, Code standard fixed
314
				context.moveTo( cx, cy );
315
				context.quadraticCurveTo( cx + ( cosv * innerradie ), cy + ( sinv * innerradie ), cx + ( cosv2 * radie ), cy + ( sinv2 * radie ));
316
				context.arc( cx, cy, radie, angle2, angle, 1.0 );
317
				context.quadraticCurveTo( cx + ( cosv4 * innerradie ), cy + ( sinv4 * innerradie ), cx, cy );
318
				context.fill();
319
			}
320
			context.beginPath();
321
			context.arc( cx, cy, radie, 0, Math.PI * 2.0, 1.0 );
322
			context.stroke();
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
323
		}
324
		
325
		// Draws underlined/dashed underlined text clipped inside a rectangle, a quadratic curve ellipsis or a diamond
11.4.4 by mattman-03
bugg fixed, Code standard fixed
326
		function cliptext(x1,y1,x2,y2,tex,font,align,edgeoffs,baseline,color,clipkind,underlinekind) {
327
			var rx = ( x2 - x1 ) * 0.5;
328
			var ry = ( y2 - y1 ) * 0.5;
329
			var tx = x1;
330
			if( clipkind != 0 ) {
331
				context.save();
332
				context.beginPath();				
333
			}
334
			// Make Rectangle / Ellipse / Diamond Clipping Paths
335
			if( clipkind == 1 ) {
336
				context.moveTo( x1, y1 );
337
				context.lineTo( x1, y2 );
338
				context.lineTo( x2 - edgeoffs, y2 );
339
				context.lineTo( x2 - edgeoffs, y1 );
340
				context.lineTo( x1, y1 );
341
			} else if( clipkind == 2 ) {
342
				context.moveTo( x1, y1 + ry );
343
				context.quadraticCurveTo( x1 + edgeoffs, y1 + edgeoffs, x1 + edgeoffs + rx, y1 + edgeoffs);
344
				context.quadraticCurveTo( x2 - edgeoffs, y1 + edgeoffs, x2 - edgeoffs, y1 + ry + edgeoffs);
345
				context.quadraticCurveTo( x2 - edgeoffs, y2 - edgeoffs, x2 - rx - edgeoffs, y2 - edgeoffs);
346
				context.quadraticCurveTo( x1 + edgeoffs, y2 - edgeoffs, x1 + edgeoffs, y1 + ry + edgeoffs);
347
			} else if( clipkind == 3 ) {
348
				context.moveTo( x1, y1 + ry );
349
				context.lineTo( x1 + rx, y2 );
350
				context.lineTo( x2, y1 + ry );
351
				context.lineTo( x1 + rx, y1 );
352
				context.lineTo( x1, y1 + ry );			
353
			}
354
			if( clipkind != 0 ) {
355
				context.clip();				
356
			}
357
			context.font = font;
358
			context.textAlign = "left";
359
			context.fillStyle = color;
360
			var metrics = context.measureText( tex );
361
			var hwidth = metrics.width * 0.5;
362
			// Compute left-justified centered coordinate    		
363
			if(( rx - hwidth - edgeoffs ) < 0 ) {
364
				tx = x1 + edgeoffs;
365
			} else {
366
				tx = x1 + rx - hwidth;
367
			}
368
			context.fillText( tex, tx, y2 - ry + baseline );
369
			// Draw underlining - can handle dashed underline!
370
			if( underlinekind == 1 ) {
371
				drawline( tx, y2 - ry + baseline + 5.0, tx + ( hwidth * 2 ), y2 - ry + baseline + 5.0, "#000", 2.0 );
372
			}
373
			if(clipkind != 0 ) {
374
				context.restore();
375
			}
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
376
		}
11.4.4 by mattman-03
bugg fixed, Code standard fixed
377
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
378
		// Draws cardinality at a certain offset from a coordinate
11.4.4 by mattman-03
bugg fixed, Code standard fixed
379
		function drawcardinality( x, y, side, tex, xoffs, yoffs, font, baseline, sign, color ) {
380
			// Xoffs is along line
381
			xoffs = 0;
382
			// Yoffs is distance from line
383
			yoffs = 10;
384
			var metrics = context.measureText( tex );
385
			var twidth = metrics.width;
386
			var theight = 12;
387
			point( x, y, "#f8f" );
388
			context.font = font;
389
			context.textAlign = "left";
390
			context.fillStyle = color;
391
			if( side == 1 && sign == 1 ) {
392
				context.fillText( tex, x - twidth - xoffs, y - yoffs );
393
				drawrect( x - twidth - xoffs, y - yoffs, x - xoffs, y - yoffs - theight);
394
			} else if( side == 2 && sign == 1 ) {
395
				context.fillText( tex, x + yoffs, y + xoffs + theight );					
396
				drawrect( x + yoffs, y + xoffs + theight, x + yoffs + twidth, y + xoffs);
397
			} else if( side == 3 && sign == 1 ) {
398
				context.fillText( tex, x + xoffs, y - yoffs );
399
			} else if( side == 4 && sign == 1 ) {
400
				context.fillText( tex, x + yoffs, y - xoffs );					
401
			} else if( side == 1 && sign == 2 ) {
402
				context.fillText( tex, x - twidth - xoffs, y + theight + yoffs );					
403
				drawrect( x - twidth - xoffs, y + yoffs, x - xoffs, y + theight + yoffs);
404
			} else if( side == 2 && sign == 2 ) {
405
				context.fillText( tex, x - yoffs - twidth, y + xoffs + theight );					
406
				drawrect( x - yoffs - twidth, y + xoffs, x - yoffs, y + xoffs + theight );
407
			} else if( side == 3 && sign == 2 ) {
408
				context.fillText( tex, x + xoffs, y + theight + yoffs);
409
			} else if( side == 4 && sign == 2 ) {
410
				context.fillText( tex, x - yoffs - twidth, y - xoffs);					
411
			}
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
412
		}
413
414
		
415
/********************************************************************************
416
417
   Canvas and Diagram Measuring Functions
418
   
419
	These functions allow us to measure pixels in diagram and other apps
420
421
*********************************************************************************/
422
		
423
		
424
		// Recursive Pos of div in document - should work in most browsers
11.4.4 by mattman-03
bugg fixed, Code standard fixed
425
		function findPos( obj ){
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
426
			var curleft = curtop = 0;
11.4.4 by mattman-03
bugg fixed, Code standard fixed
427
			if( obj.offsetParent ) {
428
				curleft = obj.offsetLeft;
429
				curtop = obj.offsetTop;
430
				while( obj = obj.offsetParent ) {
431
					curleft += obj.offsetLeft;
432
					curtop += obj.offsetTop;
433
				}
434
			}
435
			return{
436
				x:curleft, y:curtop;
437
			}
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
438
		}
439
		
440
		// Make side coordinates for drawing Model
441
		function makeside(side,x1,y1,x2,y2,perc){
11.4.4 by mattman-03
bugg fixed, Code standard fixed
442
			var xk = 0;
443
			var yk = 0;
444
			if( side == 1 ) {
445
				xk = x1;
446
				yk = y1 + (( y2-y1 ) * perc );
447
			}else if( side == 2 ) {
448
				xk = x1 + (( x2 - x1 ) * perc );
449
				yk = y2;
450
			}else if( side == 3 ) {
451
				xk = x2;
452
				yk = y1 + (( y2 - y1 ) * perc );
453
			}else if( side == 4 ) {
454
				xk = x1 + (( x2 - x1 ) * perc );
455
				yk = y1;
456
			}
457
			return{
458
			x:xk, y:yk;
459
			}
460
		}
461
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
462
		// Computes side identifier for a mouse coordinate and object coordinates
11.4.4 by mattman-03
bugg fixed, Code standard fixed
463
		function computeside( x, y, x1, y1, x2, y2, sidetol ) {
464
			var obj_sidentifier = "None";
465
			var obj_sideperc = 0;
466
			var obj_centerdist = 0;
467
			// Left Side
468
			if( x > x1 - sidetol && x < x1 + sidetol && y > y1 - sidetol && y < y2 + sidetol ) {
469
				obj_sidentifier = 1;
470
				obj_sideperc = makesideperc( y, y1, y2 );
471
				obj_centerdist = centerdist( y, y1, y2 );
472
			}
473
			// Bottom Not Including Left Side or Right Side
474
			if( x > x1 + sidetol && x < x2 - sidetol && y > y2 - sidetol && y < y2 + sidetol ) {
475
				obj_sidentifier = 2;
476
				obj_sideperc = makesideperc( x, x1, x2 );
477
				obj_centerdist = centerdist( x, x1, x2 );
478
			}
479
			// Right Side
480
			if( x > x2 - sidetol && x < x2 + sidetol && y > y1 - sidetol && y < y2 + sidetol ) {
481
				obj_sidentifier = 3;
482
				obj_sideperc = makesideperc( y, y1, y2 );
483
				obj_centerdist = centerdist( y, y1, y2 );
484
			}
485
			// Top Not Including Left Side or Right Side
486
			if( x > x1 + sidetol && x < x2 - sidetol && y > y1 - sidetol && y < y1 + sidetol ) {
487
				obj_sidentifier = 4;
488
				obj_sideperc = makesideperc( x, x1, x2 );
489
				obj_centerdist = centerdist( x, x1, x2 );
490
			}
491
			return {
492
				side:obj_sidentifier, perc:obj_sideperc, dist:obj_centerdist;
493
			}
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
494
		}		
11.4.4 by mattman-03
bugg fixed, Code standard fixed
495
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
496
		// Make side perc for ER model
11.4.4 by mattman-03
bugg fixed, Code standard fixed
497
		function makeSidePerc( x, x1, x2 ) {
498
			r = x2 - x1;
499
			perc = ( x - x1 ) / r;
500
			if( perc > 1.0 ) {
501
				perc = 1.0;
502
			}
503
			if( perc < 0.0 ) {
504
				perc = 0.0;
505
			}
506
			return perc;
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
507
		}
508
		
11.4.4 by mattman-03
bugg fixed, Code standard fixed
509
		function centerDist( x, x1, x2 ) {
510
			r = x1 + (( x2 - x1 ) * 0.5 );	
511
			return( x - r );
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
512
		}
513
		
514
		// Euclidian distance - Yo!
11.4.4 by mattman-03
bugg fixed, Code standard fixed
515
		function distance( x1, y1, x2, y2 ) {
516
			var dist = Math.sqrt((( y2 - y1 ) * ( y2 - y1 )) + (( x2 - x1 ) * ( x2 - x1 )));
517
			return dist;
518
		}
9.5.1 by galaxyAbstractor
Moved shared js, css and php, updated all paths in DuggaSys.
519
		
520
		// Are we over a line or not.
11.4.4 by mattman-03
bugg fixed, Code standard fixed
521
		function overline( x, y, x1, y1, x2, y2, tolerance ) {
522
			var distance = 10000;
523
			dx = x2 - x1;
524
			dy = y2 - y1;
525
			straighttolerance = 2.0;
526
			var box1, boy1, box2, boy2;
527
			if( x1 > x2 ) {
528
				box1 = x2;
529
				box2 = x1;
530
			} else {
531
				box1 = x1;
532
				box2 = x2;				
533
			}
534
			if( y1 > y2 ) {
535
				boy1 = y2;
536
				boy2 = y1;
537
			} else {
538
				boy1 = y1;
539
				boy2 = y2;				
540
			}
541
			//drawrect(box1-tolerance,boy1-tolerance,box2+tolerance,boy2+tolerance,"#aaa");
542
			if(( x > ( box1 - tolerance )) && ( x < ( box2 + tolerance )) && ( y > ( boy1 - tolerance )) && ( y < ( boy2 + tolerance ))) {
543
				// Straight X, Straight Y or Positive or Negative Incline
544
				if( Math.abs( dx ) < straighttolerance ) {
545
					if( y1 < y2 ) {
546
						if( y > y1 - tolerance && y < y2 + tolerance ) {
547
							distance = Math.abs( x1 - x );
548
						}
549
					} else {
550
						if( y > y2 - tolerance && y < y1 + tolerance ) {
551
							distance = Math.abs( x1 - x );
552
						}						
553
					}
554
				} else if( Math.abs( dy ) < straighttolerance ) {
555
					if( x1 < x2 ) {
556
						if( x > x1 - tolerance && x < x2 + tolerance ) {
557
							distance = Math.abs( y1 - y );
558
						}
559
					} else {
560
						if( x > x2 - tolerance && x < x1 + tolerance ) {
561
							distance = Math.abs( y1 - y );
562
						}
563
					}
564
				} else if( Math.abs( dx ) >= Math.abs( dy )) {
565
					k = dy / dx;
566
					yk = y1 + (( x - x1 ) * k );
567
					distance = Math.abs( yk - y );
568
				} else {
569
					k = dx / dy;
570
					xk = x1 + (( y - y1 ) * k );
571
					distance = Math.abs( xk - x );
572
				}
573
			}
574
		return distance;
575
	}