// Source code Copyright © vanAnnies.  All Rights Reserved.
// Contact GetTheGhost.com for Licensing
function vanGhostPath() { } vanGhostPath.arc = function(st,r1,r2,t1,t2,xo,yo) { if(!st) st = 360; if(!r1) r1 = 1.0; if(!r2) r2 = r1; if(!t1) t1 = 0; if(!t2) t2 = 360; if(!xo) xo = 0; if(!yo) yo = 0; if(t2 == t1) t2 = t1 + 360; r1 = Math.abs(r1); r2 = Math.abs(r2); t1 = t1 * Math.PI / 180; t2 = t2 * Math.PI / 180; var delta = (t2 - t1) / st; var a = new Array(); for(i = 0; i < st; i++) { var t = t1 + (delta * i); var c = Math.cos(t); var s = Math.sin(t); var csign = 1; var ssign = 1; if(c != 0) csign = c / Math.abs(c); if(s != 0) ssign = s / Math.abs(s); var x = csign * Math.sqrt(Math.abs(r1*r1 - s*s*r1*r1)); var y = ssign * Math.sqrt(Math.abs(r2*r2 - c*c*r2*r2)); x = Math.round(x) + xo; y = Math.round(y) + yo; a[i] = new Array(x,y); } return a; }; vanGhostPath.sine = function(st,w,h,c,ty,xo,yo) { if(!st) st = 360; if(!w) w = 100; if(!h) h = 100; if(!c) c = 1; if(!ty) ty = 'normal'; if(!xo) xo = 0; if(!yo) yo = 0; var a = new Array(); if(c <= 0) return a; var s = (st-0) / c; var inc = 2 * Math.PI / s; for(var i = 0; i < s*c; i++) { x = i * inc; y = Math.sin(x); x = x*w / (2 * Math.PI); y = y*h; if(ty == 'hop') y = -Math.abs(y); else if(ty == 'dip') y = Math.abs(y); x = Math.round(x) + xo; y = Math.round(y) + yo; a[a.length] = new Array(x,y); } /* x = Math.round(c*w + xo); y = Math.round(yo); a[a.length] = new Array(x,y); */ return a; }; vanGhostPath.espiral = function(st,xo,yo,r,a,b) { if(!st) st = 50; if(!r) r = 3; if(!a) a = 10; if(!b) b = 0.1; if(!xo) xo = 0; if(!yo) yo = 0; var z = r * 2 * Math.PI; var inc = z / st; var t = 0; var pnts = new Array(); for(i = 0; i < st; i++) { var e = a * Math.pow(Math.E, b * t); var x = Math.round(e * Math.cos(t)); var y = Math.round(e * Math.sin(t)); var L = pnts.length; pnts[L] = new Array(xo+x,yo+y); t += inc; } return pnts; }; vanGhostPath.poly = function(st,p,w) { var a = new Array(); if(!st || !p || !p.length) return a; if(p.length == 1) return p; if(w == undefined) w = true; var c = new Array(); if(w) { var fl = 0; var ll = new Array(); for(j = 0; j < p.length-1; j++) { p1 = p[j]; p2 = p[j+1]; dx = Math.abs(p2[0] - p1[0]); dy = Math.abs(p2[1] - p1[1]); l = Math.sqrt(dx*dx + dy*dy); ll[j] = l; fl += l; } var sc = 0; for(j = 0; j < p.length-1; j++) { if(j == p.length-2) s = st - sc - 1; else s = Math.round(st * (ll[j] / fl)); sc += s; c[j] = s; } } else { var cnt = Math.floor((st - p.length) / (p.length - 1)) + 1; var spr = st - 1 - (cnt * (p.length - 1)); for(j = 0; j < p.length-1; j++) { if(j < spr) c[j] = cnt + 1; else c[j] = cnt; } } for(j = 0; j < p.length-1; j++) { p1 = p[j]; p2 = p[j+1]; for(i = 0; i < c[j]; i++) { dx = (p2[0] - p1[0]) / (c[j]); dy = (p2[1] - p1[1]) / (c[j]); x = p1[0] + dx * i; y = p1[1] + dy * i; a[a.length] = new Array(x,y); } } a[a.length] = p[p.length-1]; return a; }; vanGhostPath.draw = function(l,p,s,c) { if(!s) s = 1; if(!c) c = '#000000'; var l = document.getElementById(l); for(i = 0; i < p.length; i++) { var pnt = p[i]; l.innerHTML += '<div style="position: absolute; top: ' + pnt[1] + 'px; left: ' + pnt[0] + 'px; width: '+s+'px; height: '+s+'px; overflow: hidden; background-color: '+c+';"></div>'; } }; vanGhostPath.stamp = function(l,p,t,s) { if(!s) s = ''; if(!c) c = '#000000'; var l = document.getElementById(l); for(i = 0; i < p.length; i++) { var pnt = p[i]; l.innerHTML += '<div style="position: absolute; top: ' + pnt[1] + 'px; left: ' + pnt[0] + 'px; '+s+'">'+t+'</div>'; } }; 
