/*
    Copyright 2008,2009
        Matthias Ehmann,
        Michael Gerhaeuser,
        Carsten Miller,
        Bianca Valentin,
        Alfred Wassermann,
        Peter Wilfahrt

    This file is part of JSXGraph.

    JSXGraph is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    JSXGraph is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with JSXGraph.  If not, see <http://www.gnu.org/licenses/>.
*/
    var JXG={};JXG.countDrawings=0;JXG.countTime=0;JXG.require=function(a){};JXG.rendererFiles=[];JXG.rendererFiles.svg="SVGRenderer";JXG.rendererFiles.vml="VMLRenderer";JXG.baseFiles=null;JXG.requirePath="";for(var i=0;i<document.getElementsByTagName("script").length;i++){var s=document.getElementsByTagName("script")[i];if(s.src&&s.src.match(/loadjsxgraphInOneFile\.js(\?.*)?$/)){JXG.requirePath=s.src.replace(/loadjsxgraphInOneFile\.js(\?.*)?$/,"")}}JXG.serverBase=JXG.requirePath+"server/";JXG.Math=new Object();JXG.Math.eps=0.000001;JXG.Math.Vector=function(b){this.length=0;if((typeof b!=undefined)&&(b!=null)){for(var a=0;a<b.length;a++){this.push(b[a])}}};JXG.Math.Vector.prototype=new Array();JXG.Math.Vector.prototype.n=function(){return this.length};JXG.Math.Vector.prototype.exchange=function(d,b){var a=this[d];this[d]=this[b];this[b]=a};JXG.Math.Matrix=function(f){this.length=0;var d=0;var e=false;if((typeof f!=undefined)&&(f!=null)){for(var b=0;b<f.length;b++){this.push(new Array());if(e){if(d!=f[b].length){this.length=0;throw new JXG.DimensionMismatchException("Your array contains arrays with different lengths.")}}for(var a=0;a<f[b].length;a++){this[b].push(f[b][a])}d=f[b].length;e=true}}};JXG.Math.Matrix.prototype=new Array();JXG.Math.Matrix.prototype.m=function(){return this.length};JXG.Math.Matrix.prototype.n=function(){if(this.length>0){return this[0].length}else{return 0}};JXG.Math.Matrix.prototype.exchangeRows=function(d,b){var a=this[d];this[d]=this[b];this[b]=a};JXG.DimensionMismatchException=function(a){if((typeof a!=undefined)&&(a!=null)){this.message=a}else{this.message=null}};JXG.DimensionMismatchException.prototype.what=function(){var a="Matrix has incorrect dimensions";if(this.message!=null){return a+": "+this.message+"."}else{return a+"."}};JXG.SingularMatrixException=function(a){if((typeof a!=undefined)&&(a!=null)){this.message=a}else{this.message=null}};JXG.SingularMatrixException.prototype.what=function(){var a="Matrix is singular";if(this.message!=null){return a+": "+this.message+"."}else{return a+"."}};JXG.memoizer=function(b){if(b.memo){return b.memo}var a={},d=Array.prototype.join;return(b.memo=function(){var e=d.call(arguments);return(e in a)?a[e]:a[e]=b.apply(this,arguments)})};JXG.Math.factorial=JXG.memoizer(function(a){if(a<0){return NaN}if(a==0||a==1){return 1}return a*arguments.callee(a-1)});JXG.Math.binomial=JXG.memoizer(function(f,d){if(d>f||d<0){return 0}if(d==0||d==f){return 1}var a=1;for(var e=0;e<d;e++){a*=(f-e);a/=(e+1)}return a});JXG.Math.round=function(a,e){var d=a-Math.ceil(a);var b=d.toString();if(d<0){b=b.substr(0,e+3)}else{b=b.substr(0,e+2)}d=parseFloat(b);t=parseInt(a.toString());return t+d};JXG.Math.Numerics={};JXG.Math.Numerics.INT_TRAPEZ=1;JXG.Math.Numerics.INT_SIMPSON=2;JXG.Math.Numerics.INT_MILNE=3;JXG.Math.Numerics.number_of_nodes=28;JXG.Math.Numerics.integration_type=JXG.INT_MILNE;JXG.Math.Numerics.backwardSolve=function(g,d){var a=d,f,e;for(f=g.m()-1;f>=0;f--){for(e=g.n()-1;e>f;e--){a[f]-=g[f][e]*a[e]}a[f]/=g[f][f]}return a};JXG.Math.Numerics.Gauss=function(a,o){var u=1e-12,f,e,d,g,q,h;g=new JXG.Math.Vector();for(f=0;f<a.n();f++){g.push(f)}for(e=0;e<a.n();e++){for(f=a.n()-1;f>e;f--){if(Math.abs(a[f][e])>JXG.Math.eps){if(Math.abs(a[e][e])<JXG.Math.eps){a.exchangeRows(f,e);o.exchange(f,e);g.exchange(f,e)}else{a[f][e]/=a[e][e];o[f]-=a[f][e]*o[e];for(d=e+1;d<a.n();d++){a[f][d]-=a[f][e]*a[e][d]}}}if(Math.abs(a[e][e])<JXG.Math.eps){throw new SingularMatrixException()}}}h=JXG.Math.Numerics.backwardSolve(a,o);q=new JXG.Math.Vector();for(f=0;f<h.n();f++){q.push(h[g[f]])}return q};JXG.Math.Numerics.QR=function(d,a){};JXG.Math.Numerics.NewtonCotes=function(e,h){var b=0,a=(e[1]-e[0])/this.number_of_nodes,j,g,d;switch(this.integration_type){case JXG.INT_TRAPEZ:b=(h(e[0])+h(e[1]))*0.5;j=e[0];for(g=0;g<this.number_of_nodes-1;g++){j+=a;b+=h(j)}b*=a;break;case JXG.INT_SIMPSON:if(this.number_of_nodes%2>0){throw"Error: INT_SIMPSONS requires Algebra.number_of_nodes dividable by 2."}d=this.number_of_nodes/2;b=h(e[0])+h(e[1]);j=e[0];for(g=0;g<d-1;g++){j+=2*a;b+=2*h(j)}j=e[0]-a;for(g=0;g<d;g++){j+=2*a;b+=4*h(j)}b*=a/3;break;default:if(this.number_of_nodes%4>0){throw"Error in INT_MILNE: Algebra.number_of_nodes must be a multiple of 4"}d=this.number_of_nodes*0.25;b=7*(h(e[0])+h(e[1]));j=e[0];for(g=0;g<d-1;g++){j+=4*a;b+=14*h(j)}j=e[0]-3*a;for(g=0;g<d;g++){j+=4*a;b+=32*(h(j)+h(j+2*a))}j=e[0]-2*a;for(g=0;g<d;g++){j+=4*a;b+=12*h(j)}b*=2*a/45}return b};JXG.Math.Numerics.splineDef=function(k,j){var a=k.length,d,f,g,h,b,e=new Array(),u=[],o=[],q;if(k.length!=j.length){throw"Error in JXG.Math.Numerics.splineDef: Input vector dimensions do not match."}for(f=0;f<a;f++){d={X:k[f],Y:j[f]};e.push(d)}e.sort(function(w,v){return w.X-v.X});for(f=0;f<a;f++){k[f]=e[f].X;j[f]=e[f].Y}for(f=0;f<a-1;f++){u.push(k[f+1]-k[f])}for(f=0;f<a-2;f++){o.push(6*(j[f+2]-j[f+1])/(u[f+1])-6*(j[f+1]-j[f])/(u[f]))}g=new Array();h=new Array();g.push(2*(u[0]+u[1]));h.push(o[0]);for(f=0;f<a-3;f++){b=u[f+1]/g[f];g.push(2*(u[f+1]+u[f+2])-b*u[f+1]);h.push(o[f+1]-b*h[f])}q=new Array();q[a-3]=h[a-3]/g[a-3];for(f=a-4;f>=0;f--){q[f]=(h[f]-(u[f+1]*q[f+1]))/g[f]}for(f=a-3;f>=0;f--){q[f+1]=q[f]}q[0]=0;q[a-1]=0;return q};JXG.Math.Numerics.splineEval=function(f,B,z,D){var g=B.length,k=1,h=false,C,q,o,A,w,v,u,e;if(g!=z.length){throw"Error in JXG.Math.Numerics.splineEval: Defining vector dimensions do not match."}if(JXG.IsArray(f)){k=f.length;h=true}else{f=[f]}C=new Array();for(q=0;q<k;q++){if((f[q]<B[0])||(B[q]>B[g-1])){return"NaN"}o;for(o=1;o<g;o++){if(f[q]<=B[o]){break}}o--;A=z[o];w=(z[o+1]-z[o])/(B[o+1]-B[o])-(B[o+1]-B[o])/6*(D[o+1]+2*D[o]);v=D[o]/2;u=(D[o+1]-D[o])/(6*(B[o+1]-B[o]));e=f[q]-B[o];C.push(A+(w+(v+u*e)*e)*e)}if(h){return C}else{return C[0]}};JXG.Math.Numerics.lagrangePolynomial=function(a){return function(b){var f,d,e,h=0,g=[];for(f=0;f<a.length;f++){g[f]=a[f].X()}for(f=0;f<a.length;f++){e=a[f].Y();for(d=0;d<a.length;d++){if(d!=f){e*=(b-g[d])/(g[f]-g[d])}}h+=e}return h}};JXG.Math.Numerics.neville=function(a){return[function(f){var e,d,b,g=0;for(e=0;e<a.length;e++){b=a[e].X();for(d=0;d<a.length;d++){if(d!=e){b*=(f-d)/(e-d)}}g+=b}return g},function(f){var e,d,b,g=0;for(e=0;e<a.length;e++){b=a[e].Y();for(d=0;d<a.length;d++){if(d!=e){b*=(f-d)/(e-d)}}g+=b}return g},0,function(){return a.length-1}]};JXG.Math.Numerics.D=function(d,e){var b=0.00001,a=b*2;if(arguments.length==1){return function(f){return(d(f+b)-d(f-b))/a}}else{return function(f){return(d.apply(e,[f+b])-d.apply(e,[f-b]))/a}}};JXG.Math.Numerics.I=function(a,b){return JXG.Math.Numerics.NewtonCotes(a,b)};JXG.Math.Numerics.newton=function(g,a,j){var b=0,d=1e-7,e=g.apply(j,[a]),k;while(b<50&&Math.abs(e)>d){k=this.D(g,j)(a);if(Math.abs(k)>d){a-=e/k}else{a+=(Math.random()*0.2-1)}e=g.apply(j,[a]);b++}return a};JXG.Math.Numerics.root=function(b,a,d){return this.newton(b,a,d)};JXG.Math.Numerics.cosh=function(a){return(Math.exp(a)+Math.exp(-a))*0.5};JXG.Math.Numerics.sinh=function(a){return(Math.exp(a)-Math.exp(-a))*0.5};JXG.Math.Numerics.riemann=function(q,g,u,d,h){var e,B,o,A,k,z,v,b,a,w;e=[];B=[];k=0;z=d;g=Math.floor(g);e[k]=z;B[k]=0;if(g>0){A=(h-d)/g;a=A*0.01;for(o=0;o<g;o++){if(u=="right"){v=q(z+A)}else{if(u=="middle"){v=q(z+A*0.5)}else{if((u=="left")||(u=="trapezodial")){v=q(z)}else{if(u=="lower"){v=q(z);for(b=z+a;b<=z+A;b+=a){w=q(b);if(w<v){v=w}}}else{v=q(z);for(b=z+a;b<=z+A;b+=a){w=q(b);if(w>v){v=w}}}}}}k++;e[k]=z;B[k]=v;k++;z+=A;if(u=="trapezodial"){v=q(z)}e[k]=z;B[k]=v;k++;e[k]=z;B[k]=0}}return[e,B]};JXG.Math.Numerics.riemannsum=function(j,e,o,d,g){var k,h,w,v,q,b,a,u;k=0;v=d;e=Math.floor(e);if(e>0){w=(g-d)/e;a=w*0.01;for(h=0;h<e;h++){if(o=="right"){q=j(v+w)}else{if(o=="middle"){q=j(v+w*0.5)}else{if(o=="trapezodial"){q=0.5*(j(v+w)+j(v))}else{if(o=="left"){q=j(v)}else{if(o=="lower"){q=j(v);for(b=v+a;b<=v+w;b+=a){u=j(b);if(u<q){q=u}}}else{q=j(v);for(b=v+a;b<=v+w;b+=a){u=j(b);if(u>q){q=u}}}}}}}k+=w*q;v+=w}}return k};JXG.Math.Numerics.Butcher=function(){this.s=0;this.A=[];this.b=[];this.c=[]};JXG.Math.Numerics.predefinedButcher={};JXG.Math.Numerics.predefinedButcher.RK4={s:4,A:[[0,0,0,0],[0.5,0,0,0],[0,0.5,0,0],[0,0,1,0]],b:[1/6,1/3,1/3,1/6],c:[0,0.5,0.5,1]};JXG.Math.Numerics.predefinedButcher.Heun={s:2,A:[[0,0],[1,0]],b:[0.5,0.5],c:[0,1]};JXG.Math.Numerics.predefinedButcher.Euler={s:1,A:[[0]],b:[1],c:[0]};JXG.Math.Numerics.rungeKutta=function(d,J,q,g,H){var u=[],o=[],G=(q[1]-q[0])/g,w=q[0],K,F,E,C,B,D=J.length,z=d.s,b=1000,a=g/b,v=[],A=0;for(K=0;K<J.length;K++){u[K]=J[K]}for(F=0;F<g;F++){v[A]=[];for(K=0;K<D;K++){v[A][K]=u[K]}A++;C=[];for(E=0;E<z;E++){for(K=0;K<D;K++){o[K]=0}for(B=0;B<E;B++){for(K=0;K<D;K++){o[K]+=(d.A[E][B])*G*C[B][K]}}for(K=0;K<D;K++){o[K]+=u[K]}C.push(H(w+d.c[E]*G,o))}for(K=0;K<D;K++){o[K]=0}for(B=0;B<z;B++){for(K=0;K<D;K++){o[K]+=d.b[B]*C[B][K]}}for(K=0;K<D;K++){u[K]=u[K]+G*o[K]}w+=G}return v};JXG.MathStatistics=function(){};JXG.MathStatistics.prototype.sum=function(b){var e=0;for(var d=0,a=b.length;d<a;d++){e+=b[d]}return e};JXG.MathStatistics.prototype.prod=function(b){var e=1;for(var d=0,a=b.length;d<a;d++){e*=b[d]}return e};JXG.MathStatistics.prototype.mean=function(a){if(a.length>0){return this.sum(a)/a.length}else{return 0}};JXG.MathStatistics.prototype.median=function(b){if(b.length>0){var d=b.clone();d.sort(function(f,e){return f-e});var a=d.length;if(a%2==1){return d[parseInt(a*0.5)]}else{return(d[a*0.5-1]+d[a*0.5])*0.5}}else{return 0}};JXG.MathStatistics.prototype.variance=function(d){if(d.length>1){var b=this.mean(d);var f=0;for(var e=0,a=d.length;e<a;e++){f+=(d[e]-b)*(d[e]-b)}return f/(d.length-1)}else{return 0}};JXG.MathStatistics.prototype.sd=function(a){return Math.sqrt(this.variance(a))};JXG.MathStatistics.prototype.weightedMean=function(a,b){if(a.length!=b.length){return}if(a.length>0){var d=this.multiply(a,b);return this.mean(d)}else{return 0}};JXG.MathStatistics.prototype.max=function(b){if(b.length==0){return NaN}var e=b[0];for(var d=1,a=b.length;d<a;d++){e=(b[d]>e)?(b[d]):e}return e};JXG.MathStatistics.prototype.min=function(b){if(b.length==0){return NaN}var e=b[0];for(var d=1,a=b.length;d<a;d++){e=(b[d]<e)?(b[d]):e}return e};JXG.MathStatistics.prototype.range=function(a){return[this.min(a),this.max(a)]};JXG.MathStatistics.prototype.diff=function(a){return a};JXG.MathStatistics.prototype.min=function(b){if(b.length==0){return NaN}var e=b[0];for(var d=1,a=b.length;d<a;d++){e=(b[d]<e)?(b[d]):e}return e};JXG.MathStatistics.prototype.abs=function(b){var e=[];if(typeof JXG.IsArray(arr1)){for(var d=0,a=b.length;d<a;d++){e[d]=Math.abs(b[d])}}else{if(typeof b=="number"){return Math.abs(b)}else{e=null}}return e};JXG.MathStatistics.prototype.add=function(d,b){var f=[];if(typeof JXG.IsArray(d)&&typeof b=="number"){for(var e=0,a=Math.min(d.length,b.length);e<a;e++){f[e]=d[e]+b}}else{if(typeof d=="number"&&typeof JXG.IsArray(b)){for(var e=0,a=Math.min(d.length,b.length);e<a;e++){f[e]=d+b[e]}}else{if(typeof JXG.IsArray(d)&&typeof JXG.IsArray(b)){for(var e=0,a=Math.min(d.length,b.length);e<a;e++){f[e]=d[e]+b[e]}}else{if(typeof d=="number"&&typeof b=="number"){for(var e=0,a=Math.min(d.length,b.length);e<a;e++){f[e]=d+b}}else{f=null}}}}return f};JXG.MathStatistics.prototype.divide=function(d,b){var f=[];if(typeof JXG.IsArray(d)&&typeof b=="number"){for(var e=0,a=Math.min(d.length,b.length);e<a;e++){f[e]=d[e]/b}}else{if(typeof d=="number"&&typeof JXG.IsArray(b)){for(var e=0,a=Math.min(d.length,b.length);e<a;e++){f[e]=d/b[e]}}else{if(typeof JXG.IsArray(d)&&typeof JXG.IsArray(b)){for(var e=0,a=Math.min(d.length,b.length);e<a;e++){f[e]=d[e]/b[e]}}else{if(typeof d=="number"&&typeof b=="number"){for(var e=0,a=Math.min(d.length,b.length);e<a;e++){f[e]=d/b}}else{f=null}}}}return f};JXG.MathStatistics.prototype.mod=function(d,b){var f=[];if(typeof JXG.IsArray(d)&&typeof b=="number"){for(var e=0,a=Math.min(d.length,b.length);e<a;e++){f[e]=d[e]%b}}else{if(typeof d=="number"&&typeof JXG.IsArray(b)){for(var e=0,a=Math.min(d.length,b.length);e<a;e++){f[e]=d%b[e]}}else{if(typeof JXG.IsArray(d)&&typeof JXG.IsArray(b)){for(var e=0,a=Math.min(d.length,b.length);e<a;e++){f[e]=d[e]%b[e]}}else{if(typeof d=="number"&&typeof b=="number"){for(var e=0,a=Math.min(d.length,b.length);e<a;e++){f[e]=d%b}}else{f=null}}}}return f};JXG.MathStatistics.prototype.multiply=function(d,b){var f=[];if(typeof JXG.IsArray(d)&&typeof b=="number"){for(var e=0,a=Math.min(d.length,b.length);e<a;e++){f[e]=d[e]*b}}else{if(typeof d=="number"&&typeof JXG.IsArray(b)){for(var e=0,a=Math.min(d.length,b.length);e<a;e++){f[e]=d*b[e]}}else{if(typeof JXG.IsArray(d)&&typeof JXG.IsArray(b)){for(var e=0,a=Math.min(d.length,b.length);e<a;e++){f[e]=d[e]*b[e]}}else{if(typeof d=="number"&&typeof b=="number"){for(var e=0,a=Math.min(d.length,b.length);e<a;e++){f[e]=d*b}}else{f=null}}}}return f};JXG.MathStatistics.prototype.subtract=function(d,b){var f=[];if(typeof JXG.IsArray(d)&&typeof b=="number"){for(var e=0,a=Math.min(d.length,b.length);e<a;e++){f[e]=d[e]-b}}else{if(typeof d=="number"&&typeof JXG.IsArray(b)){for(var e=0,a=Math.min(d.length,b.length);e<a;e++){f[e]=d-b[e]}}else{if(typeof JXG.IsArray(d)&&typeof JXG.IsArray(b)){for(var e=0,a=Math.min(d.length,b.length);e<a;e++){f[e]=d[e]-b[e]}}else{if(typeof d=="number"&&typeof b=="number"){for(var e=0,a=Math.min(d.length,b.length);e<a;e++){f[e]=d-b}}else{f=null}}}}return f};JXG.Math.Symbolic={};JXG.Math.Symbolic.generateSymbolicCoordinatesPartial=function(o,f,e,b){function a(k){if(b=="underscore"){return""+e+"_{"+k+"}"}else{if(b=="brace"){return""+e+"["+k+"]"}else{return""+e+""+k}}}var h=f.ancestors;var g=0;var j;for(var q in h){j=0;if(JXG.IsPoint(h[q])){for(var d in h[q].ancestors){j++}if(j==0){h[q].symbolic.x=f.ancestors[q].coords.usrCoords[1];h[q].symbolic.y=f.ancestors[q].coords.usrCoords[2]}else{g++;f.ancestors[q].symbolic.x=a(g);g++;f.ancestors[q].symbolic.y=a(g)}}}if(JXG.IsPoint(f)){f.symbolic.x="x";f.symbolic.y="y"}return g};JXG.Math.Symbolic.clearSymbolicCoordinates=function(b){for(var a in b.objects){if(JXG.IsPoint(b.objects[a])){b.objects[a].symbolic.x="";b.objects[a].symbolic.y=""}}};JXG.Math.Symbolic.generatePolynomials=function(j,e,f){if(f){this.generateSymbolicCoordinatesPartial(j,e,"u","brace")}var g=e.ancestors;g[e.id]=e;var h;var a=[];var q=[];for(var o in g){h=0;a=[];if(JXG.IsPoint(g[o])){for(var b in g[o].ancestors){h++}if(h>0){a=g[o].generatePolynomial();for(var d=0;d<a.length;d++){q.push(a[d])}}}}if(f){this.clearSymbolicCoordinates(j)}return q};JXG.Math.Symbolic.geometricLocusByGroebnerBase=function(f,h,k){var g=this.generateSymbolicCoordinatesPartial(f,h,"u","brace");var a=this.generatePolynomials(f,h);var d=a.join(",");var b=new JXG.Coords(JXG.COORDS_BY_USR,[0,0],f);var e=new JXG.Coords(JXG.COORDS_BY_USR,[f.canvasWidth,f.canvasHeight],f);var j=JXG.serverBase+"jxggroebner.py?number="+g+"&polynomials="+JXG.Util.Base64.encode(d)+"&xs="+b.usrCoords[1]+"&xe="+e.usrCoords[1]+"&ys="+e.usrCoords[2]+"&ye="+b.usrCoords[2];this.cbp=function(A){var y=(new JXG.Util.Unzip(JXG.Util.Base64.decodeAsArray(A))).unzip();y=y.toString().replace(/,geonext\.gxt/g,"").replace(/\s/g,"");var o=y.split("-----");y=o[0];var u=y.split(";");var w;var z=[];var x=[];for(var q=0;q<u.length;q++){w=u[q].split(",");z[q]=w[0];x[q]=w[1]}var v=f.createElement("curve",[z,x],{strokeColor:"green",strokeWidth:"2px"});this.rendNode=v.rendNode;k(o[1].split(";"))};this.cb=JXG.bind(this.cbp,this);JXG.FileReader.parseFileContent(j,this.cb,"raw");this.clearSymbolicCoordinates(f)};JXG.AbstractRenderer=function(){this.vOffsetText=8;this.enhancedRendering=true};JXG.AbstractRenderer.prototype.drawPoint=function(b){var d,a;if(b.visProp.style==0||b.visProp.style==1||b.visProp.style==2){d=this.createPrimitive("line",b.id+"_x1");a=this.createPrimitive("line",b.id+"_x2");this.appendChildPrimitive(d,"points");this.appendChildPrimitive(a,"points");b.rendNodeX1=d;b.rendNodeX2=a}else{if(b.visProp.style==3||b.visProp.style==4||b.visProp.style==5||b.visProp.style==6){d=this.createPrimitive("circle",b.id);this.appendChildPrimitive(d,"points");b.rendNode=d}else{if(b.visProp.style==7||b.visProp.style==8||b.visProp.style==9){d=this.createPrimitive("rect",b.id);this.appendChildPrimitive(d,"points");b.rendNode=d}else{if(b.visProp.style==10||b.visProp.style==11||b.visProp.style==12){d=this.createPrimitive("line",b.id+"_x1");a=this.createPrimitive("line",b.id+"_x2");this.appendChildPrimitive(d,"points");this.appendChildPrimitive(a,"points");b.rendNodeX1=d;b.rendNodeX2=a}}}}this.setObjectStrokeWidth(b,b.visProp.strokeWidth);this.setObjectStrokeColor(b,b.visProp.strokeColor,b.visProp.strokeOpacity);this.setObjectFillColor(b,b.visProp.fillColor,b.visProp.fillOpacity);this.setDraft(b);this.updatePoint(b)};JXG.AbstractRenderer.prototype.updatePoint=function(b){var a;if(isNaN(b.coords.scrCoords[2])||isNaN(b.coords.scrCoords[1])){return}if(this.enhancedRendering){if(!b.visProp.draft){this.setObjectStrokeWidth(b,b.visProp.strokeWidth);this.setObjectStrokeColor(b,b.visProp.strokeColor,b.visProp.strokeOpacity);this.setObjectFillColor(b,b.visProp.fillColor,b.visProp.fillOpacity)}else{this.setDraft(b)}}a=this.getPointSize(b.visProp.style);if(b.visProp.style==0||b.visProp.style==1||b.visProp.style==2){this.updateLinePrimitive(b.rendNodeX1,b.coords.scrCoords[1]-a,b.coords.scrCoords[2]-a,b.coords.scrCoords[1]+a,b.coords.scrCoords[2]+a);this.updateLinePrimitive(b.rendNodeX2,b.coords.scrCoords[1]+a,b.coords.scrCoords[2]-a,b.coords.scrCoords[1]-a,b.coords.scrCoords[2]+a)}else{if(b.visProp.style==3||b.visProp.style==4||b.visProp.style==5||b.visProp.style==6){this.updateCirclePrimitive(b.rendNode,b.coords.scrCoords[1],b.coords.scrCoords[2],a+1)}else{if(b.visProp.style==7||b.visProp.style==8||b.visProp.style==9){this.updateRectPrimitive(b.rendNode,b.coords.scrCoords[1]-a,b.coords.scrCoords[2]-a,a*2,a*2)}else{if(b.visProp.style==10||b.visProp.style==11||b.visProp.style==12){this.updateLinePrimitive(b.rendNodeX1,b.coords.scrCoords[1]-a,b.coords.scrCoords[2],b.coords.scrCoords[1]+a,b.coords.scrCoords[2]);this.updateLinePrimitive(b.rendNodeX2,b.coords.scrCoords[1],b.coords.scrCoords[2]-a,b.coords.scrCoords[1],b.coords.scrCoords[2]+a)}}}}};JXG.AbstractRenderer.prototype.changePointStyle=function(a){var b=this.getElementById(a.id);if(b!=null){this.remove(b)}else{this.remove(this.getElementById(a.id+"_x1"));this.remove(this.getElementById(a.id+"_x2"))}this.drawPoint(a);if(!a.visProp.visible){this.hide(a)}if(a.visProp.draft){this.setDraft(a)}};JXG.AbstractRenderer.prototype.drawLine=function(a){var b=this.createPrimitive("line",a.id);this.appendChildPrimitive(b,"lines");a.rendNode=b;this.setDashStyle(a.rendNode,a.visProp);this.updateLine(a)};JXG.AbstractRenderer.prototype.updateLine=function(b){var q=new JXG.Coords(JXG.COORDS_BY_USER,b.point1.coords.usrCoords,b.board),o=new JXG.Coords(JXG.COORDS_BY_USER,b.point2.coords.usrCoords,b.board),a,u,g,f,k,e,j,h,d;if(b.visProp.straightFirst||b.visProp.straightLast){this.calcStraight(b,q,o)}this.updateLinePrimitive(b.rendNode,q.scrCoords[1],q.scrCoords[2],o.scrCoords[1],o.scrCoords[2]);if(b.image!=null){a=q.scrCoords[1];u=q.scrCoords[2];g=o.scrCoords[1];f=o.scrCoords[2];k;e=(g-a>0)?1:-1;if(Math.abs(g-a)>1e-7){k=Math.atan((f-u)/(g-a))+((e<0)?Math.PI:0)}else{k=((f-u>0)?0.5:-0.5)*Math.PI}j=250;h=256;d=[[1,0,0],[j*(1-Math.cos(k))+h*Math.sin(k),Math.cos(k),-Math.sin(k)],[h*(1-Math.cos(k))-j*Math.sin(k),Math.sin(k),Math.cos(k)]];b.imageTransformMatrix=d}this.makeArrows(b);if(this.enhancedRendering){if(!b.visProp.draft){this.setObjectStrokeWidth(b,b.visProp.strokeWidth);this.setObjectStrokeColor(b,b.visProp.strokeColor,b.visProp.strokeOpacity)}else{this.setDraft(b)}}};JXG.AbstractRenderer.prototype.drawCurve=function(a){var b=this.createPrimitive("path",a.id);this.appendChildPrimitive(b,"curves");a.rendNode=b;this.setObjectStrokeWidth(a,a.visProp.strokeWidth);this.setObjectStrokeColor(a,a.visProp.strokeColor,a.visProp.strokeOpacity);this.setObjectFillColor(a,a.visProp.fillColor,a.visProp.fillOpacity);this.setDashStyle(a.rendNode,a.visProp);this.updateCurve(a)};JXG.AbstractRenderer.prototype.updateCurve=function(a){if(this.enhancedRendering){if(!a.visProp.draft){this.setObjectStrokeWidth(a,a.visProp.strokeWidth);this.setObjectStrokeColor(a,a.visProp.strokeColor,a.visProp.strokeOpacity);this.setObjectFillColor(a,a.visProp.fillColor,a.visProp.fillOpacity)}else{this.setDraft(a)}}this.updatePathPrimitive(a.rendNode,this.updatePathStringPrimitive(a),a.board)};JXG.AbstractRenderer.prototype.calcStraight=function(f,w,u){var d,a,o,h,x,e,v,q,A,k,g,z,y;v=f.board.algebra;x=f.visProp.straightFirst;e=f.visProp.straightLast;if(!x&&!e){return}if(Math.abs(w.scrCoords[0])<v.eps||Math.abs(u.scrCoords[0])<v.eps){x=true;e=true}q=[];q[0]=f.stdform[0]-f.stdform[1]*f.board.origin.scrCoords[1]/(f.board.unitX*f.board.zoomX)+f.stdform[2]*f.board.origin.scrCoords[2]/(f.board.unitY*f.board.zoomY);q[1]=f.stdform[1]/(f.board.unitX*f.board.zoomX);q[2]=f.stdform[2]/(-f.board.unitY*f.board.zoomY);if(isNaN(q[0]+q[1]+q[2])){return}A=[];A[0]=v.crossProduct(q,[0,0,1]);A[1]=v.crossProduct(q,[0,1,0]);A[2]=v.crossProduct(q,[-f.board.canvasHeight,0,1]);A[3]=v.crossProduct(q,[-f.board.canvasWidth,1,0]);for(k=0;k<4;k++){if(Math.abs(A[k][0])>v.eps){for(g=2;g>0;g--){A[k][g]/=A[k][0]}A[k][0]=1}}d=false;a=false;if(!x&&w.scrCoords[1]>=0&&w.scrCoords[1]<=f.board.canvasWidth&&w.scrCoords[2]>=0&&w.scrCoords[2]<=f.board.canvasHeight){d=true}if(!e&&u.scrCoords[1]>=0&&u.scrCoords[1]<=f.board.canvasWidth&&u.scrCoords[2]>=0&&u.scrCoords[2]<=f.board.canvasHeight){a=true}if(Math.abs(A[1][0])<v.eps){o=A[0];h=A[2]}else{if(Math.abs(A[0][0])<v.eps){o=A[1];h=A[3]}else{if(A[1][2]<0){o=A[0];if(A[3][2]>f.board.canvasHeight){h=A[2]}else{h=A[3]}}else{if(A[1][2]>f.board.canvasHeight){o=A[2];if(A[3][2]<0){h=A[0]}else{h=A[3]}}else{o=A[1];if(A[3][2]<0){h=A[0]}else{if(A[3][2]>f.board.canvasHeight){h=A[2]}else{h=A[3]}}}}}}o=new JXG.Coords(JXG.COORDS_BY_SCREEN,o.slice(1),f.board);h=new JXG.Coords(JXG.COORDS_BY_SCREEN,h.slice(1),f.board);if(!d){if(!a){if(this.isSameDirection(w,u,o)){if(!this.isSameDirection(w,u,h)){y=o;z=h}else{if(f.board.algebra.affineDistance(u.usrCoords,o.usrCoords)<f.board.algebra.affineDistance(u.usrCoords,h.usrCoords)){z=o;y=h}else{y=o;z=h}}}else{if(this.isSameDirection(w,u,h)){z=o;y=h}else{if(f.board.algebra.affineDistance(u.usrCoords,o.usrCoords)<f.board.algebra.affineDistance(u.usrCoords,h.usrCoords)){y=o;z=h}else{z=o;y=h}}}}else{if(this.isSameDirection(u,w,o)){z=o}else{z=h}}}else{if(!a){if(this.isSameDirection(w,u,o)){y=o}else{y=h}}}if(z){w.setCoordinates(JXG.COORDS_BY_USER,z.usrCoords.slice(1))}if(y){u.setCoordinates(JXG.COORDS_BY_USER,y.usrCoords.slice(1))}};JXG.AbstractRenderer.prototype.isSameDirection=function(h,e,d){var b,a,g,f;b=e.usrCoords[1]-h.usrCoords[1];a=e.usrCoords[2]-h.usrCoords[2];g=d.usrCoords[1]-h.usrCoords[1];f=d.usrCoords[2]-h.usrCoords[2];if(Math.abs(b)<JXG.Math.eps){b=0}if(Math.abs(a)<JXG.Math.eps){a=0}if(Math.abs(g)<JXG.Math.eps){g=0}if(Math.abs(f)<JXG.Math.eps){f=0}if(b>=0&&g>=0){if((a>=0&&f>=0)||(a<=0&&f<=0)){return true}}else{if(b<=0&&g<=0){if((a>=0&&f>=0)||(a<=0&&f<=0)){return true}}}return false};JXG.AbstractRenderer.prototype.drawCircle=function(a){var b=this.createPrimitive("ellipse",a.id);a.rendNode=b;this.setDashStyle(b,a.visProp);this.appendChildPrimitive(b,"circles");this.setDraft(a);this.updateCircle(a)};JXG.AbstractRenderer.prototype.updateCircle=function(b){if(this.enhancedRendering){if(!b.visProp.draft){this.setObjectStrokeWidth(b,b.visProp.strokeWidth);this.setObjectStrokeColor(b,b.visProp.strokeColor,b.visProp.strokeOpacity);this.setObjectFillColor(b,b.visProp.fillColor,b.visProp.fillOpacity)}else{this.setDraft(b)}}var a=b.getRadius();if(a>0&&!isNaN(b.midpoint.coords.scrCoords[1]+b.midpoint.coords.scrCoords[2])){this.updateEllipsePrimitive(b.rendNode,b.midpoint.coords.scrCoords[1],b.midpoint.coords.scrCoords[2],(a*b.board.unitX*b.board.zoomX),(a*b.board.unitY*b.board.zoomY))}};JXG.AbstractRenderer.prototype.drawPolygon=function(a){var b=this.createPrimitive("polygon",a.id);a.visProp.fillOpacity=0.3;this.appendChildPrimitive(b,"polygone");a.rendNode=b;this.setDraft(a);this.updatePolygon(a)};JXG.AbstractRenderer.prototype.updatePolygon=function(a){if(this.enhancedRendering){if(!a.visProp.draft){this.setObjectStrokeWidth(a,a.visProp.strokeWidth);this.setObjectFillColor(a,a.visProp.fillColor,a.visProp.fillOpacity)}else{this.setDraft(a)}}this.updatePolygonePrimitive(a.rendNode,a)};JXG.AbstractRenderer.prototype.drawArrow=function(a){var b=this.createPrimitive("line",a.id);this.setObjectStrokeWidth(a,a.visProp.strokeWidth);this.setObjectStrokeColor(a,a.visProp.strokeColor,a.visProp.strokeOpacity);this.setObjectFillColor(a,a.visProp.fillColor,a.visProp.fillOpacity);this.setDashStyle(b,a.visProp);this.makeArrow(b,a);this.appendChildPrimitive(b,"lines");a.rendNode=b;this.setDraft(a);this.updateArrow(a)};JXG.AbstractRenderer.prototype.updateArrow=function(a){if(this.enhancedRendering){if(!a.visProp.draft){this.setObjectStrokeWidth(a,a.visProp.strokeWidth);this.setObjectStrokeColor(a,a.visProp.strokeColor,a.visProp.strokeOpacity);this.setObjectFillColor(a,a.visProp.fillColor,a.visProp.fillOpacity)}else{this.setDraft(a)}}this.updateLinePrimitive(a.rendNode,a.point1.coords.scrCoords[1],a.point1.coords.scrCoords[2],a.point2.coords.scrCoords[1],a.point2.coords.scrCoords[2])};JXG.AbstractRenderer.prototype.updateTicks=function(d,b,a){};JXG.AbstractRenderer.prototype.removeTicks=function(a){var b=this.getElementById(a.id+"_ticks");this.remove(b)};JXG.AbstractRenderer.prototype.drawArc=function(a){};JXG.AbstractRenderer.prototype.updateArc=function(a){};JXG.AbstractRenderer.prototype.drawText=function(a){var b=this.container.ownerDocument.createElement("div");b.setAttribute("id",a.id);b.style.position="absolute";b.style.fontSize=a.board.fontSize+"px";b.style.color=a.visProp.strokeColor;b.className="JXGtext";b.style.zIndex="10";this.container.appendChild(b);a.rendNode=b;a.htmlStr="";this.updateText(a)};JXG.AbstractRenderer.prototype.updateText=function(a){if(a.visProp.visible==false){return}if(isNaN(a.coords.scrCoords[1]+a.coords.scrCoords[2])){return}this.updateTextStyle(a);a.rendNode.style.left=(a.coords.scrCoords[1])+"px";a.rendNode.style.top=(a.coords.scrCoords[2]-this.vOffsetText)+"px";a.updateText();if(a.htmlStr!=a.plaintextStr){a.rendNode.innerHTML=a.plaintextStr;a.htmlStr=a.plaintextStr}};JXG.AbstractRenderer.prototype.updateTextStyle=function(b){if(b.visProp.fontSize){if(typeof b.visProp.fontSize=="function"){var a=b.visProp.fontSize();b.rendNode.style.fontSize=(a>0?a:0)}else{b.rendNode.style.fontSize=(b.visProp.fontSize)}}};JXG.AbstractRenderer.prototype.drawAngle=function(a){};JXG.AbstractRenderer.prototype.updateAngle=function(a){};JXG.AbstractRenderer.prototype.drawImage=function(a){};JXG.AbstractRenderer.prototype.updateImage=function(a){this.updateRectPrimitive(a.rendNode,a.coords.scrCoords[1],a.coords.scrCoords[2]-a.size[1],a.size[0],a.size[1]);if(a.parent!=null){this.transformImageParent(a,a.parent.imageTransformMatrix)}else{this.transformImageParent(a)}this.transformImage(a,a.transformations)};JXG.AbstractRenderer.prototype.drawGrid=function(w){var q=w.gridX,o=w.gridY,e=new JXG.Coords(JXG.COORDS_BY_SCREEN,[0,0],w),v=new JXG.Coords(JXG.COORDS_BY_SCREEN,[w.canvasWidth,w.canvasHeight],w),g=Math.ceil(e.usrCoords[1]),f=0,h,B,d,b,A,z,x,u,y,a;w.hasGrid=true;for(h=0;h<=q+1;h++){if(g-h/q<e.usrCoords[1]){f=h-1;break}}g=Math.floor(v.usrCoords[1]);B=0;for(h=0;h<=q+1;h++){if(g+h/q>v.usrCoords[1]){B=h-1;break}}g=Math.ceil(v.usrCoords[2]);b=0;for(h=0;h<=o+1;h++){if(g-h/o<v.usrCoords[2]){b=h-1;break}}g=Math.floor(e.usrCoords[2]);d=0;for(h=0;h<=o+1;h++){if(g+h/o>e.usrCoords[2]){d=h-1;break}}A=Math.round((1/q)*w.zoomX*w.unitX);z=Math.round((1/o)*w.zoomY*w.unitY);x=new JXG.Coords(JXG.COORDS_BY_USER,[Math.ceil(e.usrCoords[1])-f/q,Math.floor(e.usrCoords[2])+d/o],w);u=new JXG.Coords(JXG.COORDS_BY_USER,[Math.floor(v.usrCoords[1])+B/q,Math.ceil(v.usrCoords[2])-b/o],w);y=this.drawVerticalGrid(x,u,A,w);if(!w.snapToGrid){a=new Object();a.rendNode=y;a.elementClass=JXG.OBJECT_CLASS_LINE;a.id="gridx";this.setObjectStrokeColor(a,w.gridColor,w.gridOpacity)}else{a=new Object();a.rendNode=y;a.elementClass=JXG.OBJECT_CLASS_LINE;a.id="gridx";this.setObjectStrokeColor(a,"#FF8080",0.5)}this.setPropertyPrimitive(y,"stroke-width","0.4px");if(w.gridDash){this.setPropertyPrimitive(y,"stroke-dasharray","5, 5")}this.appendChildPrimitive(y,"grid");y=this.drawHorizontalGrid(x,u,z,w);if(!w.snapToGrid){a=new Object();a.rendNode=y;a.elementClass=JXG.OBJECT_CLASS_LINE;a.id="gridy";this.setObjectStrokeColor(a,w.gridColor,w.gridOpacity)}else{a=new Object();a.rendNode=y;a.elementClass=JXG.OBJECT_CLASS_LINE;a.id="gridy";this.setObjectStrokeColor(a,"#FF8080",0.5)}this.setPropertyPrimitive(y,"stroke-width","0.4px");if(w.gridDash){this.setPropertyPrimitive(y,"stroke-dasharray","5, 5")}this.appendChildPrimitive(y,"grid")};JXG.AbstractRenderer.prototype.removeGrid=function(a){};JXG.AbstractRenderer.prototype.hide=function(a){};JXG.AbstractRenderer.prototype.show=function(a){};JXG.AbstractRenderer.prototype.setObjectStrokeWidth=function(b,a){};JXG.AbstractRenderer.prototype.setObjectStrokeColor=function(d,a,b){};JXG.AbstractRenderer.prototype.setObjectDash=function(a){};JXG.AbstractRenderer.prototype.setObjectFillColor=function(d,a,b){};JXG.AbstractRenderer.prototype.setDraft=function(b){if(!b.visProp.draft){return}var a=b.board.options.elements.draft.color,d=b.board.options.elements.draft.opacity;if(b.type==JXG.OBJECTT_TYPE_POLYGON){this.setObjectFillColor(b,a,d)}else{if(b.elementClass==JXG.OBJECT_CLASS_POINT){this.setObjectFillColor(b,a,d)}else{this.setObjectFillColor(b,"none",0)}this.setObjectStrokeColor(b,a,d);this.setObjectStrokeWidth(b,b.board.options.elements.draft.strokeWidth)}};JXG.AbstractRenderer.prototype.removeDraft=function(a){if(a.type==JXG.OBJECT_TYPE_POLYGON){this.setObjectFillColor(a,a.visProp.fillColor,a.visProp.fillColorOpacity)}else{if(a.type==JXG.OBJECT_CLASS_POINT){this.setObjectFillColor(a,a.visProp.fillColor,a.visProp.fillColorOpacity)}this.setObjectStrokeColor(a,a.visProp.strokeColor,a.visProp.strokeColorOpacity);this.setObjectStrokeWidth(a,a.visProp.strokeWidth)}};JXG.AbstractRenderer.prototype.highlight=function(b){var a;if(b.visProp.draft==false){if(b.type==JXG.OBJECT_CLASS_POINT){this.setObjectStrokeColor(b,b.visProp.highlightStrokeColor,b.visProp.highlightStrokeOpacity);this.setObjectFillColor(b,b.visProp.highlightStrokeColor,b.visProp.highlightStrokeOpacity)}else{if(b.type==JXG.OBJECT_TYPE_POLYGON){this.setObjectFillColor(b,b.visProp.highlightFillColor,b.visProp.highlightFillOpacity);for(a=0;a<b.borders.length;a++){this.setObjectStrokeColor(b.borders[a],b.borders[a].visProp.highlightStrokeColor,b.visProp.highlightStrokeOpacity)}}else{this.setObjectStrokeColor(b,b.visProp.highlightStrokeColor,b.visProp.highlightStrokeOpacity);this.setObjectFillColor(b,b.visProp.highlightFillColor,b.visProp.highlightFillOpacity)}}}};JXG.AbstractRenderer.prototype.noHighlight=function(b){var a;if(b.visProp.draft==false){if(b.type==JXG.OBJECT_CLASS_POINT){this.setObjectStrokeColor(b,b.visProp.strokeColor,b.visProp.strokeOpacity);this.setObjectFillColor(b,b.visProp.strokeColor,b.visProp.strokeOpacity)}else{if(b.type==JXG.OBJECT_TYPE_POLYGON){this.setObjectFillColor(b,b.visProp.fillColor,b.visProp.fillOpacity);for(a=0;a<b.borders.length;a++){this.setObjectStrokeColor(b.borders[a],b.borders[a].visProp.strokeColor,b.visProp.strokeOpacity)}}else{this.setObjectStrokeColor(b,b.visProp.strokeColor,b.visProp.strokeOpacity);this.setObjectFillColor(b,b.visProp.fillColor,b.visProp.fillOpacity)}}}};JXG.AbstractRenderer.prototype.suspendRedraw=function(){};JXG.AbstractRenderer.prototype.unsuspendRedraw=function(){};JXG.AbstractRenderer.prototype.remove=function(a){};JXG.AbstractRenderer.prototype.getPointSize=function(b){var a=0;switch(b){case 0:a=2;break;case 1:a=3;break;case 2:a=4;break;case 3:a=1;break;case 4:a=2;break;case 5:a=3;break;case 6:a=4;break;case 7:a=2;break;case 8:a=3;break;case 9:a=4;break;case 10:a=2;break;case 11:a=3;break;case 12:a=4;break;default:}return a};JXG.AbstractRenderer.prototype.drawZoomBar=function(h){var k,d,g,f,b,o,j,a,e;k=this.container.ownerDocument;d=k.createElement("div");d.className="JXGtext";d.style.color="#aaaaaa";d.style.backgroundColor="#f5f5f5";d.style.padding="2px";d.style.position="absolute";d.style.fontSize="10px";d.style.cursor="pointer";d.style.zIndex="100";this.container.appendChild(d);d.style.right="5px";d.style.bottom="5px";g=k.createElement("span");d.appendChild(g);g.innerHTML="&nbsp;&ndash;&nbsp;";JXG.addEvent(g,"click",h.zoomOut,h);f=k.createElement("span");d.appendChild(f);f.innerHTML="&nbsp;o&nbsp;";JXG.addEvent(f,"click",h.zoom100,h);b=k.createElement("span");d.appendChild(b);b.innerHTML="&nbsp;+&nbsp;";JXG.addEvent(b,"click",h.zoomIn,h);o=k.createElement("span");d.appendChild(o);o.innerHTML="&nbsp;&larr;&nbsp;";JXG.addEvent(o,"click",h.clickLeftArrow,h);j=k.createElement("span");d.appendChild(j);j.innerHTML="&nbsp;&uarr;&nbsp;";JXG.addEvent(j,"click",h.clickUpArrow,h);a=k.createElement("span");d.appendChild(a);a.innerHTML="&nbsp;&darr;&nbsp;";JXG.addEvent(a,"click",h.clickDownArrow,h);e=k.createElement("span");d.appendChild(e);e.innerHTML="&nbsp;&rarr;&nbsp;";JXG.addEvent(e,"click",h.clickRightArrow,h)};JXG.AbstractRenderer.prototype.getElementById=function(a){return document.getElementById(a)};JXG.FileReader=new function(){this.parseFileContent=function(a,b,f){this.request=false;var d;try{this.request=new XMLHttpRequest();if(f.toLowerCase()=="raw"){this.request.overrideMimeType("text/plain; charset=iso-8859-1")}else{this.request.overrideMimeType("text/xml; charset=iso-8859-1")}}catch(d){try{this.request=new ActiveXObject("Msxml2.XMLHTTP")}catch(d){try{this.request=new ActiveXObject("Microsoft.XMLHTTP")}catch(d){this.request=false}}}if(!this.request){alert("AJAX not activated!");return}this.request.open("GET",a,true);if(f.toLowerCase()=="raw"){this.cbp=function(){var e=this.request;if(e.readyState==4){b(e.responseText)}}}else{this.cbp=function(){var e=this.request;if(e.readyState==4){this.parseString(e.responseText,b,f,a)}}}this.cb=JXG.bind(this.cbp,this);this.request.onreadystatechange=this.cb;this.request.send(null)};this.cleanWhitespace=function(a){var b=a.firstChild;while(b!=null){if(b.nodeType==3&&!/\S/.test(b.nodeValue)){a.removeChild(b)}else{if(b.nodeType==1){this.cleanWhitespace(b)}}b=b.nextSibling}};this.stringToXMLTree=function(b){if(typeof DOMParser=="undefined"){DOMParser=function(){};DOMParser.prototype.parseFromString=function(f,g){if(typeof ActiveXObject!="undefined"){var e=new ActiveXObject("MSXML.DomDocument");e.loadXML(f);return e}}}var d=new DOMParser();var a=d.parseFromString(b,"text/xml");this.cleanWhitespace(a);return a};this.parseString=function(e,d,f,b){if(f.toLowerCase()=="geonext"){e=JXG.GeonextReader.prepareString(e)}if(f.toLowerCase()=="geogebra"){e=JXG.GeogebraReader.prepareString(e)}if(f.toLowerCase()=="intergeo"){e=JXG.IntergeoReader.prepareString(e)}d.xmlString=e;var a=this.stringToXMLTree(e);this.readElements(a,d,f)};this.readElements=function(a,b,d){if(d.toLowerCase()=="geonext"){b.suspendUpdate();if(a.getElementsByTagName("GEONEXT").length!=0){JXG.GeonextReader.readGeonext(a,b)}b.unsuspendUpdate()}else{if(a.getElementsByTagName("geogebra").length!=0){JXG.GeogebraReader.readGeogebra(a,b)}else{if(d.toLowerCase()=="intergeo"){JXG.IntergeoReader.readIntergeo(a,b)}}}b.afterLoad()}};JXG.GeonextReader=new function(){this.changeOriginIds=function(a,b){if((b=="gOOe0")||(b=="gXOe0")||(b=="gYOe0")||(b=="gXLe0")||(b=="gYLe0")){return a.id+b}else{return b}};this.colorProperties=function(b,a){b.colorStroke=a.getElementsByTagName("color")[0].getElementsByTagName("stroke")[0].firstChild.data;b.highlightStrokeColor=a.getElementsByTagName("color")[0].getElementsByTagName("lighting")[0].firstChild.data;b.colorFill=a.getElementsByTagName("color")[0].getElementsByTagName("fill")[0].firstChild.data;b.colorLabel=a.getElementsByTagName("color")[0].getElementsByTagName("label")[0].firstChild.data;b.colorDraft=a.getElementsByTagName("color")[0].getElementsByTagName("draft")[0].firstChild.data;return b};this.firstLevelProperties=function(f,d){var a=d.childNodes,e,b;for(e=0;e<a.length;e++){if(a[e].firstChild!=null&&a[e].nodeName!="data"&&a[e].nodeName!="straight"){b=a[e].nodeName;f[b]=a[e].firstChild.data}}return f};this.boardProperties=function(b,a){return b};this.defProperties=function(b,a){if(a.nodeType==3||a.nodeType==8){return null}b.ident=a.nodeName;if(b.ident=="text"||b.ident=="intersection"||b.ident=="composition"){b.name=""}else{b.name=a.getElementsByTagName("name")[0].firstChild.data}b.id=a.getElementsByTagName("id")[0].firstChild.data;return b};this.visualProperties=function(b,a){b.visible=a.getElementsByTagName("visible")[0].firstChild.data;b.trace=a.getElementsByTagName("trace")[0].firstChild.data;return b};this.readNodes=function(h,e,b,f){var a=e.getElementsByTagName(b)[0].childNodes,d,g;for(g=0;g<a.length;g++){if(a[g].firstChild!=null){if(f!=null){d=f+JXG.capitalize(a[g].nodeName)}else{d=a[g].nodeName}h[d]=a[g].firstChild.data}}return h};this.subtreeToString=function(a){try{return(new XMLSerializer()).serializeToString(a)}catch(b){return a.xml}return null};this.readImage=function(d){var b="",a=d;if(a!=null){b=a.data;while(a.nextSibling!=null){a=a.nextSibling;b+=a.data}}return b};this.parseImage=function(k,j,a,u,q,v,g,e){var B,A,z,d,o,f,b;if(j==null){return null}if(j.getElementsByTagName("src")[0]!=null){B="src"}else{if(j.getElementsByTagName("image")[0]!=null){B="image"}else{return null}}b=this.readImage(j.getElementsByTagName(B)[0].firstChild);if(b!=""){if(B=="src"){u=j.getElementsByTagName("x")[0].firstChild.data;q=j.getElementsByTagName("y")[0].firstChild.data;v=j.getElementsByTagName("width")[0].firstChild.data;g=j.getElementsByTagName("height")[0].firstChild.data}else{f=document.createElement("img");f.setAttribute("id","tmpimg");f.style.display="none";document.getElementsByTagName("body")[0].appendChild(f);f.setAttribute("src","data:image/png;base64,"+b);A=f.width;z=f.height;A=(A==0)?3:A;z=(z==0)?3:z;q-=z*v/A*0.5;g=z*v/A;document.getElementsByTagName("body")[0].removeChild(f)}if(e!=null){d=e.id+"_image"}else{d=false}o=new JXG.Image(k,b,[u,q],[v,g],a,d,false,e);return o}};this.readConditions=function(g,f){var b,d,h,a;f.conditions="";if(g!=null){for(b=0;b<g.getElementsByTagName("data").length;b++){d;h;a=g.getElementsByTagName("data")[b];d=JXG.GeonextReader.subtreeToString(a);f.conditions+=d}}};this.printDebugMessage=function(a,e,d,b){};this.readGeonext=function(v,o){var u={},w,z,y,k,A,x,b,g,e,d,a,h,f,q,j;boardData=v.getElementsByTagName("board")[0];u.ident="board";u.id=boardData.getElementsByTagName("id")[0].firstChild.data;u.width=boardData.getElementsByTagName("width")[0].firstChild.data;u.height=boardData.getElementsByTagName("height")[0].firstChild.data;g=boardData.getElementsByTagName("fontsize")[0];u.fontSize=(g!=null)?document.body.style.fontSize=g.firstChild.data:document.body.style.fontSize;u.modus=boardData.getElementsByTagName("modus")[0].firstChild.data;g=boardData.getElementsByTagName("coordinates")[0].getElementsByTagName("origin")[0];u.originX=g.getElementsByTagName("x")[0].firstChild.data;u.originY=g.getElementsByTagName("y")[0].firstChild.data;g=boardData.getElementsByTagName("coordinates")[0].getElementsByTagName("zoom")[0];u.zoomX=g.getElementsByTagName("x")[0].firstChild.data;u.zoomY=g.getElementsByTagName("y")[0].firstChild.data;g=boardData.getElementsByTagName("coordinates")[0].getElementsByTagName("unit")[0];u.unitX=g.getElementsByTagName("x")[0].firstChild.data;u.unitY=g.getElementsByTagName("y")[0].firstChild.data;g=boardData.getElementsByTagName("coordinates")[0].getElementsByTagName("viewport")[0];u.viewportTop=g.getElementsByTagName("top")[0].firstChild.data;u.viewportLeft=g.getElementsByTagName("left")[0].firstChild.data;u.viewportBottom=g.getElementsByTagName("bottom")[0].firstChild.data;u.viewportRight=g.getElementsByTagName("right")[0].firstChild.data;this.readConditions(boardData.getElementsByTagName("conditions")[0],u);o.origin={};o.origin.usrCoords=[1,0,0];o.origin.scrCoords=[1,1*u.originX,1*u.originY];o.zoomX=1*u.zoomX;o.zoomY=1*u.zoomY;o.unitX=1*u.unitX;o.unitY=1*u.unitY;if(1*u.fontSize!=0){o.fontSize=1*u.fontSize}else{o.fontSize=12}o.geonextCompatibilityMode=true;delete (JXG.JSXGraph.boards[o.id]);o.id=u.id;JXG.JSXGraph.boards[o.id]=o;o.initGeonextBoard();o.renderer.enhancedRendering=true;JXG.GeonextReader.parseImage(o,boardData.getElementsByTagName("file")[0],"images");w=(boardData.getElementsByTagName("coordinates")[0].getElementsByTagName("snap")[0].firstChild.data=="true")?o.snapToGrid=true:null;z=(boardData.getElementsByTagName("grid")[1].getElementsByTagName("x")[0].firstChild.data)?o.gridX=boardData.getElementsByTagName("grid")[1].getElementsByTagName("x")[0].firstChild.data*1:null;y=(boardData.getElementsByTagName("grid")[1].getElementsByTagName("y")[0].firstChild.data)?o.gridY=boardData.getElementsByTagName("grid")[1].getElementsByTagName("y")[0].firstChild.data*1:null;o.calculateSnapSizes();k=boardData.getElementsByTagName("grid")[1].getElementsByTagName("dash")[0].firstChild.data;o.gridDash=o.algebra.str2Bool(k);A=boardData.getElementsByTagName("grid")[1].getElementsByTagName("color")[0].firstChild.data;if(A.length=="9"&&A.substr(0,1)=="#"){x=A.substr(7,2);x=parseInt(x.toUpperCase(),16)/255;A=A.substr(0,7)}else{x="1"}o.gridColor=A;o.gridOpacity=x;b=(boardData.getElementsByTagName("coordinates")[0].getElementsByTagName("grid")[0].firstChild.data=="true")?o.renderer.drawGrid(o):null;if(boardData.getElementsByTagName("coordinates")[0].getElementsByTagName("coord")[0].firstChild.data=="true"){e=o.createElement("axis",[[0,0],[1,0]]);e.setProperty("strokeColor:"+e.visProp.strokeColor,"strokeWidth:"+e.visProp.strokeWidth,"fillColor:none","highlightStrokeColor:"+e.visProp.highlightStrokeColor,"highlightFillColor:none","visible:true");d=o.createElement("axis",[[0,0],[0,1]]);d.setProperty("strokeColor:"+d.visProp.strokeColor,"strokeWidth:"+d.visProp.strokeWidth,"fillColor:none","highlightStrokeColor:"+d.visProp.highlightStrokeColor,"highlightFillColor:none","visible:true")}a=boardData.getElementsByTagName("background")[0].getElementsByTagName("color")[0].firstChild.data;h=1;if(a.length=="9"&&a.substr(0,1)=="#"){h=a.substr(7,2);a=a.substr(0,7)}o.containerObj.style.backgroundColor=a;f=v.getElementsByTagName("elements")[0].childNodes;for(q=0;q<f.length;q++){(function(T){var aa,ac={},X,P,N,R,ab,ag,G,E,ah,K=[],ai=[],ad=[],af=[],F=[],C=[],Z=[],Y=[],O=[],S=[],M=[],B,I,Q,D,W,U,J,H,L,V;j=f[T];ac=JXG.GeonextReader.defProperties(ac,j);if(ac==null){return}switch(j.nodeName.toLowerCase()){case"point":ac=JXG.GeonextReader.boardProperties(ac,j);ac=JXG.GeonextReader.colorProperties(ac,j);ac=JXG.GeonextReader.visualProperties(ac,j);ac=JXG.GeonextReader.firstLevelProperties(ac,j);ac=JXG.GeonextReader.readNodes(ac,j,"data");ac.fixed=j.getElementsByTagName("fix")[0].firstChild.data;JXG.GeonextReader.parseImage(o,j.getElementsByTagName("image")[0],"points");try{V=new JXG.Point(o,[1*ac.x,1*ac.y],ac.id,ac.name,true);V.setProperty("strokeColor:"+ac.colorStroke,"strokeWidth:"+ac.strokewidth,"fillColor:"+ac.colorStroke,"highlightStrokeColor:"+ac.highlightStrokeColor,"highlightFillColor:"+ac.highlightStrokeColor,"labelColor:"+ac.colorLabel,"visible:"+ac.visible,"fixed:"+ac.fixed,"draft:"+ac.draft);V.setStyle(1*ac.style);V.traced=(ac.trace=="false")?false:true;JXG.GeonextReader.printDebugMessage("debug",ac,j.nodeName,"OK")}catch(ae){alert(ae)}break;case"line":ac=JXG.GeonextReader.boardProperties(ac,j);ac=JXG.GeonextReader.colorProperties(ac,j);ac=JXG.GeonextReader.visualProperties(ac,j);ac=JXG.GeonextReader.firstLevelProperties(ac,j);ac=JXG.GeonextReader.readNodes(ac,j,"data");ac=JXG.GeonextReader.readNodes(ac,j,"straight","straight");ac.first=JXG.GeonextReader.changeOriginIds(o,ac.first);ac.last=JXG.GeonextReader.changeOriginIds(o,ac.last);X=new JXG.Line(o,ac.first,ac.last,ac.id,ac.name);P=X.point1.coords.usrCoords[1];N=X.point1.coords.usrCoords[2];R=X.point1.coords.distance(JXG.COORDS_BY_USER,X.point2.coords);ab=0;X.image=JXG.GeonextReader.parseImage(o,j,"lines",P,N,R,ab,X);ac.straightFirst=(ac.straightFirst=="false")?false:true;ac.straightLast=(ac.straightLast=="false")?false:true;X.setStraight(ac.straightFirst,ac.straightLast);X.setProperty("strokeColor:"+ac.colorStroke,"strokeWidth:"+ac.strokewidth,"fillColor:"+ac.colorFill,"highlightStrokeColor:"+ac.highlightStrokeColor,"highlightFillColor:"+ac.colorFill,"labelColor:"+ac.colorLabel,"visible:"+ac.visible,"dash:"+ac.dash,"draft:"+ac.draft);X.traced=(ac.trace=="false")?false:true;JXG.GeonextReader.printDebugMessage("debug",ac,j.nodeName,"OK");break;case"circle":ac=JXG.GeonextReader.boardProperties(ac,j);ac=JXG.GeonextReader.colorProperties(ac,j);ac=JXG.GeonextReader.visualProperties(ac,j);ac=JXG.GeonextReader.firstLevelProperties(ac,j);ac.midpoint=j.getElementsByTagName("data")[0].getElementsByTagName("midpoint")[0].firstChild.data;JXG.GeonextReader.parseImage(o,j.getElementsByTagName("image")[0],"circles");if(j.getElementsByTagName("data")[0].getElementsByTagName("radius").length>0){ac.radiuspoint=j.getElementsByTagName("data")[0].getElementsByTagName("radius")[0].firstChild.data;ac.radius=null;ac.method="twoPoints"}else{if(j.getElementsByTagName("data")[0].getElementsByTagName("radiusvalue").length>0){ac.radiuspoint=null;ac.radius=j.getElementsByTagName("data")[0].getElementsByTagName("radiusvalue")[0].firstChild.data;ac.radiusnum=j.getElementsByTagName("data")[0].getElementsByTagName("radiusnum")[0].firstChild.data;ac.method="pointRadius"}}if(ac.method=="twoPoints"){if(o.objects[ac.radiuspoint].type==JXG.OBJECT_TYPE_LINE){ac.method="pointLine";ac.radiuspoint=JXG.GeonextReader.changeOriginIds(o,ac.radiuspoint)}else{if(o.objects[ac.radiuspoint].type==JXG.OBJECT_TYPE_CIRCLE){ac.method="pointCircle"}}}if(ac.method=="pointRadius"){ac.midpoint=JXG.GeonextReader.changeOriginIds(o,ac.midpoint);ag=new JXG.Circle(o,ac.method,ac.midpoint,ac.radius,ac.id,ac.name)}else{ac.midpoint=JXG.GeonextReader.changeOriginIds(o,ac.midpoint);ag=new JXG.Circle(o,ac.method,ac.midpoint,ac.radiuspoint,ac.id,ac.name)}ag.setProperty("strokeColor:"+ac.colorStroke,"strokeWidth:"+ac.strokewidth,"fillColor:"+ac.colorFill,"highlightStrokeColor:"+ac.highlightStrokeColor,"highlightFillColor:"+ac.colorFill,"visible:"+ac.visible,"labelColor:"+ac.colorLabel,"dash:"+ac.dash,"draft:"+ac.draft);ag.traced=(ac.trace=="false")?false:true;JXG.GeonextReader.printDebugMessage("debug",ac,j.nodeName,"OK");break;case"slider":ac=JXG.GeonextReader.colorProperties(ac,j);ac=JXG.GeonextReader.boardProperties(ac,j);ac=JXG.GeonextReader.visualProperties(ac,j);ac=JXG.GeonextReader.firstLevelProperties(ac,j);ac=JXG.GeonextReader.readNodes(ac,j,"data");ac.fixed=j.getElementsByTagName("fix")[0].firstChild.data;ac=JXG.GeonextReader.readNodes(ac,j,"animate","animate");JXG.GeonextReader.parseImage(o,j.getElementsByTagName("image")[0],"points");try{V=new JXG.Point(o,[1*ac.x,1*ac.y],ac.id,ac.name,true);ac.parent=JXG.GeonextReader.changeOriginIds(o,ac.parent);V.makeGlider(ac.parent);V.setProperty("strokeColor:"+ac.colorStroke,"strokeWidth:"+ac.strokewidth,"fillColor:"+ac.colorStroke,"highlightStrokeColor:"+ac.highlightStrokeColor,"highlightFillColor:"+ac.highlightStrokeColor,"visible:"+ac.visible,"fixed:"+ac.fixed,"labelColor:"+ac.colorLabel,"draft:"+ac.draft);V.onPolygon=o.algebra.str2Bool(ac.onpolygon);V.traced=(ac.trace=="false")?false:true;V.setStyle(1*ac.style);JXG.GeonextReader.printDebugMessage("debug",ac,j.nodeName,"OK")}catch(ae){}break;case"cas":ac=JXG.GeonextReader.boardProperties(ac,j);ac=JXG.GeonextReader.colorProperties(ac,j);ac=JXG.GeonextReader.visualProperties(ac,j);ac=JXG.GeonextReader.firstLevelProperties(ac,j);ac.fixed=j.getElementsByTagName("fix")[0].firstChild.data;ac=JXG.GeonextReader.readNodes(ac,j,"data");JXG.GeonextReader.parseImage(o,j.getElementsByTagName("image")[0],"points");V=new JXG.Point(o,[1*ac.xval,1*ac.yval],ac.id,ac.name,true);V.addConstraint([ac.x,ac.y]);V.setProperty("strokeColor:"+ac.colorStroke,"strokeWidth:"+ac.strokewidth,"fillColor:"+ac.colorStroke,"highlightStrokeColor:"+ac.highlightStrokeColor,"highlightFillColor:"+ac.highlightStrokeColor,"visible:"+ac.visible,"fixed:"+ac.fixed,"labelColor:"+ac.colorLabel,"draft:"+ac.draft);V.traced=(ac.trace=="false")?false:true;V.setStyle(1*ac.style);JXG.GeonextReader.printDebugMessage("debug",ac,j.nodeName,"OK");break;case"intersection":ac=JXG.GeonextReader.readNodes(ac,j,"data");g=j.getElementsByTagName("first")[1];ac.outputFirstId=g.getElementsByTagName("id")[0].firstChild.data;ac.outputFirstName=g.getElementsByTagName("name")[0].firstChild.data;ac.outputFirstVisible=g.getElementsByTagName("visible")[0].firstChild.data;ac.outputFirstTrace=g.getElementsByTagName("trace")[0].firstChild.data;ac.outputFirstFixed=g.getElementsByTagName("fix")[0].firstChild.data;ac.outputFirstStyle=g.getElementsByTagName("style")[0].firstChild.data;ac.outputFirstStrokewidth=g.getElementsByTagName("strokewidth")[0].firstChild.data;g=j.getElementsByTagName("first")[1].getElementsByTagName("color")[0];ac.outputFirstColorStroke=g.getElementsByTagName("stroke")[0].firstChild.data;ac.outputFirstHighlightStrokeColor=g.getElementsByTagName("lighting")[0].firstChild.data;ac.outputFirstColorFill=g.getElementsByTagName("fill")[0].firstChild.data;ac.outputFirstColorLabel=g.getElementsByTagName("label")[0].firstChild.data;ac.outputFirstColorDraft=g.getElementsByTagName("draft")[0].firstChild.data;ac.first=JXG.GeonextReader.changeOriginIds(o,ac.first);ac.last=JXG.GeonextReader.changeOriginIds(o,ac.last);if((((o.objects[ac.first]).type==(o.objects[ac.last]).type)&&((o.objects[ac.first]).type==JXG.OBJECT_TYPE_LINE||(o.objects[ac.first]).type==JXG.OBJECT_TYPE_ARROW))||(((o.objects[ac.first]).type==JXG.OBJECT_TYPE_LINE)&&((o.objects[ac.last]).type==JXG.OBJECT_TYPE_ARROW))||(((o.objects[ac.last]).type==JXG.OBJECT_TYPE_LINE)&&((o.objects[ac.first]).type==JXG.OBJECT_TYPE_ARROW))){inter=new JXG.Intersection(o,ac.id,o.objects[ac.first],o.objects[ac.last],ac.outputFirstId,"",ac.outputFirstName,"");if(ac.outputFirstVisible=="false"){inter.hideElement()}inter.p.setProperty("strokeColor:"+ac.outputFirstColorStroke,"strokeWidth:"+ac.outputFirstStrokewidth,"fillColor:"+ac.outputFirstColorStroke,"highlightStrokeColor:"+ac.outputFirstHighlightStrokeColor,"highlightFillColor:"+ac.outputFirstHighlightStrokeColor,"visible:"+ac.outputFirstVisible,"labelColor:"+ac.outputFirstColorLabel,"draft:"+ac.draft);inter.p.setStyle(1*ac.outputFirstStyle);inter.p.traced=(ac.outputFirstTrace=="false")?false:true}else{g=j.getElementsByTagName("last")[1];ac.outputLastId=g.getElementsByTagName("id")[0].firstChild.data;ac.outputLastName=g.getElementsByTagName("name")[0].firstChild.data;ac.outputLastVisible=g.getElementsByTagName("visible")[0].firstChild.data;ac.outputLastTrace=g.getElementsByTagName("trace")[0].firstChild.data;ac.outputLastFixed=g.getElementsByTagName("fix")[0].firstChild.data;ac.outputLastStyle=g.getElementsByTagName("style")[0].firstChild.data;ac.outputLastStrokewidth=g.getElementsByTagName("strokewidth")[0].firstChild.data;g=j.getElementsByTagName("last")[1].getElementsByTagName("color")[0];ac.outputLastColorStroke=g.getElementsByTagName("stroke")[0].firstChild.data;ac.outputLastHighlightStrokeColor=g.getElementsByTagName("lighting")[0].firstChild.data;ac.outputLastColorFill=g.getElementsByTagName("fill")[0].firstChild.data;ac.outputLastColorLabel=g.getElementsByTagName("label")[0].firstChild.data;ac.outputLastColorDraft=g.getElementsByTagName("draft")[0].firstChild.data;inter=new JXG.Intersection(o,ac.id,o.objects[ac.first],o.objects[ac.last],ac.outputFirstId,ac.outputLastId,ac.outputFirstName,ac.outputLastName);inter.p1.setProperty("strokeColor:"+ac.outputFirstColorStroke,"strokeWidth:"+ac.outputFirstStrokewidth,"fillColor:"+ac.outputFirstColorStroke,"highlightStrokeColor:"+ac.outputFirstHighlightStrokeColor,"highlightFillColor:"+ac.outputFirstHighlightStrokeColor,"visible:"+ac.outputFirstVisible,"labelColor:"+ac.outputFirstColorLabel,"draft:"+ac.draft);inter.p1.setStyle(1*ac.outputFirstStyle);inter.p1.traced=(ac.outputFirstTrace=="false")?false:true;inter.p2.setProperty("strokeColor:"+ac.outputLastColorStroke,"strokeWidth:"+ac.outputLastStrokewidth,"fillColor:"+ac.outputLastColorStroke,"highlightStrokeColor:"+ac.outputLastHighlightStrokeColor,"highlightFillColor:"+ac.outputLastHighlightStrokeColor,"visible:"+ac.outputLastVisible,"labelColor:"+ac.outputLastColorLabel,"draft:"+ac.draft);inter.p2.setStyle(1*ac.outputLastStyle);inter.p2.traced=(ac.outputLastTrace=="false")?false:true;if(ac.outputFirstVisible=="false"){if(ac.outputLastVisible=="false"){inter.hideElement()}else{inter.p1.hideElement()}}else{if(ac.outputLastVisible=="false"){inter.p2.hideElement()}}}JXG.GeonextReader.printDebugMessage("debug",ac,j.nodeName,"OK");break;case"composition":ac=JXG.GeonextReader.readNodes(ac,j,"data");ac=JXG.GeonextReader.firstLevelProperties(ac,j);switch(ac.type){case"210070":ac.typeName="ARROW_PARALLEL";break;case"210080":ac.typeName="BISECTOR";break;case"210090":ac.typeName="CIRCUMCIRCLE";break;case"210100":ac.typeName="CIRCUMCIRCLE_CENTER";break;case"210110":ac.typeName="MIDPOINT";break;case"210120":ac.typeName="MIRROR_LINE";break;case"210125":ac.typeName="MIRROR_POINT";break;case"210130":ac.typeName="NORMAL";break;case"210140":ac.typeName="PARALLEL";break;case"210150":ac.typeName="PARALLELOGRAM_POINT";break;case"210160":ac.typeName="PERPENDICULAR";break;case"210170":ac.typeName="PERPENDICULAR_POINT";break;case"210180":ac.typeName="ROTATION";break;case"210190":ac.typeName="SECTOR";break}ac.defEl=[];G=0;g=j.getElementsByTagName("data")[0].getElementsByTagName("input");for(aa=0;aa<g.length;aa++){ac.defEl[aa]=g[aa].firstChild.data;G=aa+1}g=j.getElementsByTagName("output")[0];ac.outputId=g.getElementsByTagName("id")[0].firstChild.data;ac.outputName=g.getElementsByTagName("name")[0].firstChild.data;ac.outputVisible=g.getElementsByTagName("visible")[0].firstChild.data;ac.outputTrace=g.getElementsByTagName("trace")[0].firstChild.data;ac=JXG.GeonextReader.readNodes(ac,j,"output","output");ac.outputName=g.getElementsByTagName("name")[0].firstChild.data;ac.outputDash=g.getElementsByTagName("dash")[0].firstChild.data;ac.outputDraft=g.getElementsByTagName("draft")[0].firstChild.data;ac.outputStrokewidth=g.getElementsByTagName("strokewidth")[0].firstChild.data;g=j.getElementsByTagName("output")[0].getElementsByTagName("color")[0];ac.outputColorStroke=g.getElementsByTagName("stroke")[0].firstChild.data;ac.outputHighlightStrokeColor=g.getElementsByTagName("lighting")[0].firstChild.data;ac.outputColorFill=g.getElementsByTagName("fill")[0].firstChild.data;ac.outputColorLabel=g.getElementsByTagName("label")[0].firstChild.data;ac.outputColorDraft=g.getElementsByTagName("draft")[0].firstChild.data;ac.defEl[0]=JXG.GeonextReader.changeOriginIds(o,ac.defEl[0]);ac.defEl[1]=JXG.GeonextReader.changeOriginIds(o,ac.defEl[1]);ac.defEl[2]=JXG.GeonextReader.changeOriginIds(o,ac.defEl[2]);if(ac.typeName=="MIDPOINT"){if(G==2){o.addMidpoint(ac.defEl[0],ac.defEl[1],ac.outputId,ac.outputName)}else{if(G==1){o.addMidpoint(o.objects[ac.defEl[0]].point1.id,o.objects[ac.defEl[0]].point2.id,ac.outputId,ac.outputName)}}}else{if(ac.typeName=="NORMAL"){o.addNormal(ac.defEl[1],ac.defEl[0],ac.outputId,ac.outputName)}else{if(ac.typeName=="PARALLEL"){o.addParallel(ac.defEl[1],ac.defEl[0],ac.outputId,ac.outputName)}else{if(ac.typeName=="CIRCUMCIRCLE"){E=j.getElementsByTagName("output")[1].getElementsByTagName("id")[0].firstChild.data;ah=j.getElementsByTagName("output")[1].getElementsByTagName("name")[0].firstChild.data;o.addCircumcenter(ac.defEl[0],ac.defEl[1],ac.defEl[2],ac.outputId,ac.outputName,E,ah)}else{if(ac.typeName=="CIRCUMCIRCLE_CENTER"){o.addCircumcenterMidpoint(ac.defEl[0],ac.defEl[1],ac.defEl[2],ac.outputId,ac.outputName)}else{if(ac.typeName=="BISECTOR"){o.addAngleBisector(ac.defEl[0],ac.defEl[1],ac.defEl[2],ac.outputId,ac.outputName)}else{if(ac.typeName=="MIRROR_LINE"){o.addReflection(ac.defEl[1],ac.defEl[0],ac.outputId,ac.outputName)}else{if(ac.typeName=="MIRROR_POINT"){o.addRotation(ac.defEl[0],ac.defEl[1],Math.PI,ac.outputId,ac.outputName)}else{if(ac.typeName=="PARALLELOGRAM_POINT"){if(ac.defEl.length==2){o.addParallelPoint(JXG.GetReferenceFromParameter(ac.defEl[0]).point1,JXG.GetReferenceFromParameter(ac.defEl[0]).point2,ac.defEl[1],ac.outputId,ac.outputName)}else{o.addParallelPoint(ac.defEl[0],ac.defEl[1],ac.defEl[2],ac.outputId,ac.outputName)}}else{if(ac.typeName=="SECTOR"){JXG.GeonextReader.parseImage(o,j.getElementsByTagName("image")[0],"sectors");for(aa=0;aa<j.getElementsByTagName("output").length;aa++){g=j.getElementsByTagName("output")[aa];K[aa]=g.getElementsByTagName("id")[0].firstChild.data;K[aa]=JXG.GeonextReader.changeOriginIds(o,K[aa]);ai[aa]=g.getElementsByTagName("name")[0];ad[aa]=g.getElementsByTagName("visible")[0].firstChild.data;af[aa]=g.getElementsByTagName("trace")[0].firstChild.data;F[aa]=g.getElementsByTagName("dash")[0].firstChild.data;C[aa]=g.getElementsByTagName("draft")[0].firstChild.data;Z[aa]=g.getElementsByTagName("strokewidth")[0].firstChild.data;g=j.getElementsByTagName("output")[aa].getElementsByTagName("color")[0];Y[aa]=g.getElementsByTagName("stroke")[0].firstChild.data;O[aa]=g.getElementsByTagName("lighting")[0].firstChild.data;S[aa]=g.getElementsByTagName("fill")[0].firstChild.data;M[aa]=g.getElementsByTagName("label")[0].firstChild.data}B=new JXG.Sector(o,ac.defEl[0],ac.defEl[1],ac.defEl[2],[K[0],K[1],K[2],K[3]],[ai[0].firstChild.data,ai[1].firstChild.data,ai[2].firstChild.data,ai[3].firstChild.data],ac.id);I=K[0];o.objects[I].setProperty("strokeColor:"+Y[0],"strokeWidth:"+Z[0],"fillColor:"+S[0],"highlightStrokeColor:"+O[0],"highlightFillColor:"+S[0],"visible:"+ad[0],"dash:"+F[0],"draft:"+C[0]);o.objects[I].traced=(af[0]=="false")?false:true;ac.firstArrow=j.getElementsByTagName("output")[0].getElementsByTagName("firstarrow")[0].firstChild.data;ac.lastArrow=j.getElementsByTagName("output")[0].getElementsByTagName("lastarrow")[0].firstChild.data;ac.firstArrow=(ac.firstArrow=="false")?false:true;ac.lastArrow=(ac.lastArrow=="false")?false:true;o.objects[I].setArrow(ac.firstArrow,ac.lastArrow);Q=K[1];ac.fixed=j.getElementsByTagName("output")[1].getElementsByTagName("fix")[0].firstChild.data;o.objects[Q].setProperty("strokeColor:"+Y[1],"strokeWidth:"+Z[1],"fillColor:"+Y[1],"highlightStrokeColor:"+O[1],"highlightFillColor:"+O[1],"visible:"+ad[1],"fixed:"+ac.fixed,"labelColor:"+M[1],"draft:"+C[1]);ac.style=j.getElementsByTagName("output")[1].getElementsByTagName("style")[0].firstChild.data;o.objects[Q].setStyle(1*ac.style);o.objects[Q].traced=(af[1]=="false")?false:true;D=K[2];g=j.getElementsByTagName("output")[2].getElementsByTagName("straight")[0];ac.straightFirst=g.getElementsByTagName("first")[0].firstChild.data;ac.straightLast=g.getElementsByTagName("last")[0].firstChild.data;ac.straightFirst=(ac.straightFirst=="false")?false:true;ac.straightLast=(ac.straightLast=="false")?false:true;o.objects[D].setStraight(ac.straightFirst,ac.straightLast);o.objects[D].setProperty("strokeColor:"+Y[2],"strokeWidth:"+Z[2],"fillColor:"+S[2],"highlightStrokeColor:"+O[2],"highlightFillColor:"+S[2],"visible:"+ad[2],"dash:"+F[2],"draft:"+C[2]);o.objects[D].traced=(af[2]=="false")?false:true;W=K[3];g=j.getElementsByTagName("output")[3].getElementsByTagName("straight")[0];ac.straightFirst=g.getElementsByTagName("first")[0].firstChild.data;ac.straightLast=g.getElementsByTagName("last")[0].firstChild.data;ac.straightFirst=(ac.straightFirst=="false")?false:true;ac.straightLast=(ac.straightLast=="false")?false:true;o.objects[W].setStraight(ac.straightFirst,ac.straightLast);o.objects[W].setProperty("strokeColor:"+Y[3],"strokeWidth:"+Z[3],"fillColor:"+S[3],"highlightStrokeColor:"+O[3],"highlightFillColor:"+S[3],"visible:"+ad[3],"dash:"+F[3],"draft:"+C[3]);o.objects[W].traced=(af[3]=="false")?false:true}else{if(ac.typeName=="PERPENDICULAR"){for(aa=0;aa<j.getElementsByTagName("output").length;aa++){g=j.getElementsByTagName("output")[aa];K[aa]=g.getElementsByTagName("id")[0].firstChild.data;K[aa]=JXG.GeonextReader.changeOriginIds(o,K[aa]);ai[aa]=g.getElementsByTagName("name")[0];ad[aa]=g.getElementsByTagName("visible")[0].firstChild.data;af[aa]=g.getElementsByTagName("trace")[0].firstChild.data;F[aa]=g.getElementsByTagName("dash")[0].firstChild.data;C[aa]=g.getElementsByTagName("draft")[0].firstChild.data;Z[aa]=g.getElementsByTagName("strokewidth")[0].firstChild.data;g=j.getElementsByTagName("output")[aa].getElementsByTagName("color")[0];Y[aa]=g.getElementsByTagName("stroke")[0].firstChild.data;O[aa]=g.getElementsByTagName("lighting")[0].firstChild.data;S[aa]=g.getElementsByTagName("fill")[0].firstChild.data;M[aa]=g.getElementsByTagName("label")[0].firstChild.data}ac.outputFixed=j.getElementsByTagName("output")[0].getElementsByTagName("fix")[0].firstChild.data;ac.outputStyle=j.getElementsByTagName("output")[0].getElementsByTagName("style")[0].firstChild.data;o.addPerpendicular(ac.defEl[1],ac.defEl[0],K[1],ai[1].firstChild.data,K[0],ai[0].firstChild.data);U=K[0];o.objects[U].setProperty("strokeColor:"+Y[0],"strokeWidth:"+Z[0],"fillColor:"+Y[0],"highlightStrokeColor:"+O[0],"highlightFillColor:"+O[0],"visible:"+ad[0],"fixed:"+ac.outputFixed,"labelColor:"+M[0],"draft:"+C[0]);o.objects[U].setStyle(1*ac.outputStyle);o.objects[U].traced=(af[0]=="false")?false:true;J=K[1];o.objects[J].setProperty("strokeColor:"+Y[1],"strokeWidth:"+Z[1],"fillColor:"+S[1],"highlightStrokeColor:"+O[1],"highlightFillColor:"+S[1],"visible:"+ad[1],"dash:"+F[1],"draft:"+C[1]);o.objects[J].traced=(af[1]=="false")?false:true}else{if(ac.typeName=="ARROW_PARALLEL"){for(aa=0;aa<j.getElementsByTagName("output").length;aa++){g=j.getElementsByTagName("output")[aa];K[aa]=g.getElementsByTagName("id")[0].firstChild.data;K[aa]=JXG.GeonextReader.changeOriginIds(o,K[aa]);ai[aa]=g.getElementsByTagName("name")[0];ad[aa]=g.getElementsByTagName("visible")[0].firstChild.data;af[aa]=g.getElementsByTagName("trace")[0].firstChild.data;F[aa]=g.getElementsByTagName("dash")[0].firstChild.data;C[aa]=g.getElementsByTagName("draft")[0].firstChild.data;Z[aa]=g.getElementsByTagName("strokewidth")[0].firstChild.data;g=j.getElementsByTagName("output")[aa].getElementsByTagName("color")[0];Y[aa]=g.getElementsByTagName("stroke")[0].firstChild.data;O[aa]=g.getElementsByTagName("lighting")[0].firstChild.data;S[aa]=g.getElementsByTagName("fill")[0].firstChild.data;M[aa]=g.getElementsByTagName("label")[0].firstChild.data}ac.outputFixed=j.getElementsByTagName("output")[1].getElementsByTagName("fix")[0].firstChild.data;ac.outputStyle=j.getElementsByTagName("output")[1].getElementsByTagName("style")[0].firstChild.data;o.addArrowParallel(ac.defEl[1],ac.defEl[0],K[0],K[1],ai[0].firstChild.data,ai[1].firstChild.data);H=K[0];o.objects[H].setProperty("strokeColor:"+Y[0],"strokeWidth:"+Z[0],"fillColor:"+S[0],"highlightStrokeColor:"+O[0],"highlightFillColor:"+S[0],"visible:"+ad[0],"dash:"+F[0],"draft:"+C[0]);o.objects[H].traced=(af[0]=="false")?false:true;U=K[1];o.objects[U].setProperty("strokeColor:"+Y[1],"strokeWidth:"+Z[1],"fillColor:"+Y[1],"highlightStrokeColor:"+O[1],"highlightFillColor:"+O[1],"visible:"+ad[1],"fixed:"+ac.outputFixed,"labelColor:"+M[1],"draft:"+C[1]);o.objects[U].setStyle(1*ac.outputStyle);o.objects[U].traced=(af[1]=="false")?false:true}else{if(ac.typeName=="PERPENDICULAR_POINT"){o.addPerpendicularPoint(ac.defEl[1],ac.defEl[0],ac.outputId,ac.outputName)}else{throw ("GEONExT-Element "+ac.typeName+" not yet implemented")}}}}}}}}}}}}}if(ac.typeName=="MIDPOINT"||ac.typeName=="MIRROR_LINE"||ac.typeName=="CIRCUMCIRCLE_CENTER"||ac.typeName=="PERPENDICULAR_POINT"||ac.typeName=="MIRROR_POINT"||ac.typeName=="PARALLELOGRAM_POINT"){ac.outputFixed=j.getElementsByTagName("output")[0].getElementsByTagName("fix")[0].firstChild.data;ac.outputStyle=j.getElementsByTagName("output")[0].getElementsByTagName("style")[0].firstChild.data;o.objects[ac.outputId].setProperty("strokeColor:"+ac.outputColorStroke,"strokeWidth:"+ac.outputStrokewidth,"fillColor:"+ac.outputColorStroke,"highlightStrokeColor:"+ac.outputHighlightStrokeColor,"highlightFillColor:"+ac.outputHighlightStrokeColor,"visible:"+ac.outputVisible,"fixed:"+ac.outputFixed,"labelColor:"+ac.outputColorLabel,"draft:"+ac.outputDraft);o.objects[ac.outputId].setStyle(1*ac.outputStyle);o.objects[ac.outputId].traced=(ac.outputTrace=="false")?false:true}else{if(ac.typeName=="BISECTOR"||ac.typeName=="NORMAL"||ac.typeName=="PARALLEL"){g=j.getElementsByTagName("output")[0].getElementsByTagName("straight")[0];ac.straightFirst=g.getElementsByTagName("first")[0].firstChild.data;ac.straightLast=g.getElementsByTagName("last")[0].firstChild.data;ac.straightFirst=(ac.straightFirst=="false")?false:true;ac.straightLast=(ac.straightLast=="false")?false:true;o.objects[ac.outputId].setStraight(ac.straightFirst,ac.straightLast);o.objects[ac.outputId].setProperty("strokeColor:"+ac.outputColorStroke,"strokeWidth:"+ac.outputStrokewidth,"fillColor:"+ac.outputColorFill,"highlightStrokeColor:"+ac.outputHighlightStrokeColor,"highlightFillColor:"+ac.outputColorFill,"visible:"+ac.outputVisible,"dash:"+ac.outputDash,"draft:"+ac.outputDraft);o.objects[ac.outputId].traced=(ac.outputTrace=="false")?false:true}else{if(ac.typeName=="CIRCUMCIRCLE"){for(aa=0;aa<j.getElementsByTagName("output").length;aa++){g=j.getElementsByTagName("output")[aa];K[aa]=g.getElementsByTagName("id")[0].firstChild.data;K[aa]=JXG.GeonextReader.changeOriginIds(o,K[aa]);ai[aa]=g.getElementsByTagName("name")[0];ad[aa]=g.getElementsByTagName("visible")[0].firstChild.data;af[aa]=g.getElementsByTagName("trace")[0].firstChild.data;F[aa]=g.getElementsByTagName("dash")[0].firstChild.data;C[aa]=g.getElementsByTagName("draft")[0].firstChild.data;Z[aa]=g.getElementsByTagName("strokewidth")[0].firstChild.data;g=j.getElementsByTagName("output")[aa].getElementsByTagName("color")[0];Y[aa]=g.getElementsByTagName("stroke")[0].firstChild.data;O[aa]=g.getElementsByTagName("lighting")[0].firstChild.data;S[aa]=g.getElementsByTagName("fill")[0].firstChild.data;M[aa]=g.getElementsByTagName("label")[0].firstChild.data}ac.outputFixed=j.getElementsByTagName("output")[0].getElementsByTagName("fix")[0].firstChild.data;ac.outputStyle=j.getElementsByTagName("output")[0].getElementsByTagName("style")[0].firstChild.data;U=K[0];o.objects[U].setProperty("strokeColor:"+Y[0],"strokeWidth:"+Z[0],"fillColor:"+Y[0],"highlightStrokeColor:"+O[0],"highlightFillColor:"+O[0],"visible:"+ad[0],"fixed:"+ac.outputFixed,"labelColor:"+M[0],"draft:"+C[0]);o.objects[U].setStyle(1*ac.outputStyle);o.objects[U].traced=(af[0]=="false")?false:true;L=K[1];o.objects[L].setProperty("strokeColor:"+Y[1],"strokeWidth:"+Z[1],"fillColor:"+S[1],"highlightStrokeColor:"+O[1],"highlightFillColor:"+S[1],"visible:"+ad[1],"dash:"+F[1],"draft:"+C[1]);o.objects[L].traced=(af[1]=="false")?false:true}}}JXG.GeonextReader.printDebugMessage("debug",ac,j.nodeName,"OK");break;case"polygon":ac=JXG.GeonextReader.colorProperties(ac,j);ac=JXG.GeonextReader.firstLevelProperties(ac,j);ac.dataVertex=[];for(aa=0;aa<j.getElementsByTagName("data")[0].getElementsByTagName("vertex").length;aa++){ac.dataVertex[aa]=j.getElementsByTagName("data")[0].getElementsByTagName("vertex")[aa].firstChild.data;ac.dataVertex[aa]=JXG.GeonextReader.changeOriginIds(o,ac.dataVertex[aa])}ac.border=[];for(aa=0;aa<j.getElementsByTagName("border").length;aa++){ac.border[aa]={};g=j.getElementsByTagName("border")[aa];ac.border[aa].id=g.getElementsByTagName("id")[0].firstChild.data;ac.border[aa].name=g.getElementsByTagName("name")[0].firstChild.data;ac.border[aa].straightFirst=g.getElementsByTagName("straight")[0].getElementsByTagName("first")[0].firstChild.data;ac.border[aa].straightLast=g.getElementsByTagName("straight")[0].getElementsByTagName("last")[0].firstChild.data;ac.border[aa].straightFirst=(ac.border[aa].straightFirst=="false")?false:true;ac.border[aa].straightLast=(ac.border[aa].straightLast=="false")?false:true;ac.border[aa].strokewidth=g.getElementsByTagName("strokewidth")[0].firstChild.data;ac.border[aa].dash=g.getElementsByTagName("dash")[0].firstChild.data;ac.border[aa].visible=g.getElementsByTagName("visible")[0].firstChild.data;ac.border[aa].draft=g.getElementsByTagName("draft")[0].firstChild.data;ac.border[aa].trace=g.getElementsByTagName("trace")[0].firstChild.data;g=j.getElementsByTagName("border")[aa].getElementsByTagName("color")[0];ac.border[aa].colorStroke=g.getElementsByTagName("stroke")[0].firstChild.data;ac.border[aa].highlightStrokeColor=g.getElementsByTagName("lighting")[0].firstChild.data;ac.border[aa].colorFill=g.getElementsByTagName("fill")[0].firstChild.data;ac.border[aa].colorLabel=g.getElementsByTagName("label")[0].firstChild.data;ac.border[aa].colorDraft=g.getElementsByTagName("draft")[0].firstChild.data}JXG.GeonextReader.parseImage(o,j.getElementsByTagName("image")[0],"polygone");V=new JXG.Polygon(o,ac.dataVertex,ac.border,ac.id,ac.name,true,true,true);V.setProperty("strokeColor:"+ac.colorStroke,"strokeWidth:"+ac.strokewidth,"fillColor:"+ac.colorFill,"highlightStrokeColor:"+ac.highlightStrokeColor,"highlightFillColor:"+ac.colorFill,"labelColor:"+ac.colorLabel,"draft:"+ac.draft,"trace:"+ac.trace,"visible:true");if(!ac.visible){V.setProperty("fillColor:none","highlightFillColor:none")}for(aa=0;aa<V.borders.length;aa++){V.borders[aa].setStraight(ac.border[aa].straightFirst,ac.border[aa].straightLast);V.borders[aa].setProperty("strokeColor:"+ac.border[aa].colorStroke,"strokeWidth:"+ac.border[aa].strokewidth,"fillColor:"+ac.border[aa].colorFill,"highlightStrokeColor:"+ac.border[aa].highlightStrokeColor,"highlightFillColor:"+ac.border[aa].colorFill,"visible:"+ac.border[aa].visible,"dash:"+ac.border[aa].dash,"labelColor:"+ac.border[aa].colorLabel,"draft:"+ac.border[aa].draft,"trace:"+ac.border[aa].trace)}JXG.GeonextReader.printDebugMessage("debug",ac,j.nodeName,"OK");break;case"graph":ac=JXG.GeonextReader.colorProperties(ac,j);ac=JXG.GeonextReader.firstLevelProperties(ac,j);ac.funct=j.getElementsByTagName("data")[0].getElementsByTagName("function")[0].firstChild.data;JXG.GeonextReader.parseImage(o,j.getElementsByTagName("image")[0],"graphs");ag=new JXG.Curve(o,["x","x",ac.funct],ac.id,ac.name);JXG.GeonextReader.printDebugMessage("debug",ac,j.nodeName,"OK");ag.setProperty("strokeColor:"+ac.colorStroke,"strokeWidth:"+ac.strokewidth,"fillColor:none","highlightStrokeColor:"+ac.highlightStrokeColor);break;case"arrow":ac=JXG.GeonextReader.colorProperties(ac,j);ac=JXG.GeonextReader.boardProperties(ac,j);ac=JXG.GeonextReader.firstLevelProperties(ac,j);ac=JXG.GeonextReader.readNodes(ac,j,"data");ac=JXG.GeonextReader.readNodes(ac,j,"straight","straight");ac=JXG.GeonextReader.visualProperties(ac,j);ac.first=JXG.GeonextReader.changeOriginIds(o,ac.first);ac.last=JXG.GeonextReader.changeOriginIds(o,ac.last);X=new JXG.Line(o,ac.first,ac.last,ac.id,ac.name);X.setProperty("strokeColor:"+ac.colorStroke,"strokeWidth:"+ac.strokewidth,"fillColor:"+ac.colorFill,"highlightStrokeColor:"+ac.highlightStrokeColor,"highlightFillColor:"+ac.colorFill,"labelColor:"+ac.colorLabel,"visible:"+ac.visible,"dash:"+ac.dash,"draft:"+ac.draft);X.setStraight(false,false);X.setArrow(false,true);X.traced=(ac.trace=="false")?false:true;JXG.GeonextReader.printDebugMessage("debug",X,j.nodeName,"OK");break;case"arc":ac=JXG.GeonextReader.colorProperties(ac,j);ac=JXG.GeonextReader.visualProperties(ac,j);ac=JXG.GeonextReader.boardProperties(ac,j);ac=JXG.GeonextReader.firstLevelProperties(ac,j);ac=JXG.GeonextReader.readNodes(ac,j,"data");ac.firstArrow=j.getElementsByTagName("firstarrow")[0].firstChild.data;ac.lastArrow=j.getElementsByTagName("lastarrow")[0].firstChild.data;JXG.GeonextReader.parseImage(o,j.getElementsByTagName("image")[0],"arcs");ac.midpoint=JXG.GeonextReader.changeOriginIds(o,ac.midpoint);ac.angle=JXG.GeonextReader.changeOriginIds(o,ac.angle);ac.radius=JXG.GeonextReader.changeOriginIds(o,ac.radius);ag=new JXG.Arc(o,ac.midpoint,ac.radius,ac.angle,ac.id,ac.name);ag.setProperty("strokeColor:"+ac.colorStroke,"strokeWidth:"+ac.strokewidth,"fillColor:"+ac.colorFill,"highlightStrokeColor:"+ac.highlightStrokeColor,"highlightFillColor:"+ac.colorFill,"labelColor:"+ac.colorLabel,"visible:"+ac.visible,"dash:"+ac.dash,"draft:"+ac.draft);ag.traced=(ac.trace=="false")?false:true;ac.firstArrow=(ac.firstArrow=="false")?false:true;ac.lastArrow=(ac.lastArrow=="false")?false:true;ag.setArrow(ac.firstArrow,ac.lastArrow);JXG.GeonextReader.printDebugMessage("debug",ag,j.nodeName,"OK");break;case"angle":ac=JXG.GeonextReader.boardProperties(ac,j);ac=JXG.GeonextReader.colorProperties(ac,j);ac=JXG.GeonextReader.visualProperties(ac,j);ac=JXG.GeonextReader.firstLevelProperties(ac,j);ac=JXG.GeonextReader.readNodes(ac,j,"data");ac.txt=j.getElementsByTagName("text")[0].firstChild.data;ag=new JXG.Angle(o,ac.first,ac.middle,ac.last,ac.radius,ac.txt,ac.id,ac.name);ag.setProperty("strokeColor:"+ac.colorStroke,"strokeWidth:"+ac.strokewidth,"fillColor:"+ac.colorFill,"highlightStrokeColor:"+ac.highlightStrokeColor,"highlightFillColor:"+ac.colorFill,"labelColor:"+ac.colorLabel,"visible:"+ac.visible,"dash:"+ac.dash);JXG.GeonextReader.printDebugMessage("debug",ac,j.nodeName,"OK");break;case"text":if(ac.id.match(/oldVersion/)){break}ac=JXG.GeonextReader.boardProperties(ac,j);ac=JXG.GeonextReader.colorProperties(ac,j);ac=JXG.GeonextReader.visualProperties(ac,j);ac=JXG.GeonextReader.firstLevelProperties(ac,j);ac=JXG.GeonextReader.readNodes(ac,j,"data");ac.mpStr=JXG.GeonextReader.subtreeToString(j.getElementsByTagName("data")[0].getElementsByTagName("mp")[0]);ac.mpStr=ac.mpStr.replace(/<\/?mp>/g,"");try{if(j.getElementsByTagName("data")[0].getElementsByTagName("parent")[0].firstChild){ac.parent=j.getElementsByTagName("data")[0].getElementsByTagName("parent")[0].firstChild.data}}catch(ae){}ac.condition=j.getElementsByTagName("condition")[0].firstChild.data;ac.content=j.getElementsByTagName("content")[0].firstChild.data;ac.fix=j.getElementsByTagName("fix")[0].firstChild.data;ac.autodigits=j.getElementsByTagName("digits")[0].firstChild.data;ac.parent=JXG.GeonextReader.changeOriginIds(o,ac.parent);ag=new JXG.Text(o,ac.mpStr,ac.parent,[ac.x,ac.y],ac.id,ac.name,ac.autodigits,false);ag.setProperty("labelColor:"+ac.colorLabel,"visible:"+ac.visible);break;case"parametercurve":ac=JXG.GeonextReader.colorProperties(ac,j);ac=JXG.GeonextReader.firstLevelProperties(ac,j);ac.functionx=j.getElementsByTagName("functionx")[0].firstChild.data;ac.functiony=j.getElementsByTagName("functiony")[0].firstChild.data;ac.min=j.getElementsByTagName("min")[0].firstChild.data;ac.max=j.getElementsByTagName("max")[0].firstChild.data;ag=new JXG.Curve(o,["t",ac.functionx,ac.functiony,ac.min,ac.max],ac.id,ac.name);ag.setProperty("strokeColor:"+ac.colorStroke,"strokeWidth:"+ac.strokewidth,"fillColor:none","highlightStrokeColor:"+ac.highlightStrokeColor);JXG.GeonextReader.printDebugMessage("debug",ac,j.nodeName,"OK");break;case"tracecurve":ac.tracepoint=j.getElementsByTagName("tracepoint")[0].firstChild.data;ac.traceslider=j.getElementsByTagName("traceslider")[0].firstChild.data;JXG.GeonextReader.printDebugMessage("debug",ac,j.nodeName,"<b>ERR</b>");break;case"group":ac=JXG.GeonextReader.boardProperties(ac,j);ac=JXG.GeonextReader.colorProperties(ac,j);ac=JXG.GeonextReader.firstLevelProperties(ac,j);ac.members=[];for(aa=0;aa<j.getElementsByTagName("data")[0].getElementsByTagName("member").length;aa++){ac.members[aa]=j.getElementsByTagName("data")[0].getElementsByTagName("member")[aa].firstChild.data;ac.members[aa]=JXG.GeonextReader.changeOriginIds(o,ac.members[aa])}ag=new JXG.Group(o,ac.id,ac.name,ac.members);JXG.GeonextReader.printDebugMessage("debug",ac,j.nodeName,"OK");break;default:if(j.nodeName!="#text"){}}delete (ac)})(q)}o.addConditions(u.conditions)};this.decodeString=function(b){var a;if(b.indexOf("<GEONEXT>")<0){a=(new JXG.Util.Unzip(JXG.Util.Base64.decodeAsArray(b))).unzip();if(a==""){return b}else{return a}}else{return b}};this.prepareString=function(a){if(a.indexOf("GEONEXT")<0){a=(JXG.GeonextReader.decodeString(a))[0][0]}a=JXG.GeonextReader.fixXML(a);return a};this.fixXML=function(f){var a=["active","angle","animate","animated","arc","area","arrow","author","autodigits","axis","back","background","board","border","bottom","buttonsize","cas","circle","color","comment","composition","condition","conditions","content","continuous","control","coord","coordinates","cross","cs","dash","data","description","digits","direction","draft","editable","elements","event","file","fill","first","firstarrow","fix","fontsize","free","full","function","functionx","functiony","GEONEXT","graph","grid","group","height","id","image","info","information","input","intersection","item","jsf","label","last","lastarrow","left","lefttoolbar","lighting","line","loop","max","maximized","member","middle","midpoint","min","modifier","modus","mp","mpx","multi","name","onpolygon","order","origin","output","overline","parametercurve","parent","point","pointsnap","polygon","position","radius","radiusnum","radiusvalue","right","section","selectedlefttoolbar","showconstruction","showcoord","showinfo","showunit","showx","showy","size","slider","snap","speed","src","start","stop","straight","stroke","strokewidth","style","term","text","top","trace","tracecurve","type","unit","value","VERSION","vertex","viewport","visible","width","wot","x","xooy","xval","y","yval","zoom"],d=a.join("|"),b="&lt;(/?("+d+"))&gt;",e=new RegExp(b,"g");f=JXG.escapeHTML(f);f=f.replace(e,"<$1>");f=f.replace(/(<content>.*)<arc>(.*<\/content>)/g,"$1&lt;arc&gt;$2");f=f.replace(/(<mp>.*)<arc>(.*<\/mpx>)/g,"$1&lt;arc&gt;$2");f=f.replace(/(<mpx>.*)<arc>(.*<\/mpx>)/g,"$1&lt;arc&gt;$2");return f}};JXG.GeogebraReader=new function(){this.ggbParse=function(q,z,u,k,h){JXG.GeogebraReader.debug("Zu aktualisierendes Element: "+u[k].name+"("+u[k].id+")");var e=JXG.GetReferenceFromParameter(q,u[k].id);var o=false;var f=new String();function y(A){f+=A+"\n"}function b(E){var D=0;var B=-1;var C=0;var G=0;var F=E.offset+1;do{F--;D=0;B=-2;G=F;if(E.src.length<=G){return 17}do{switch(D){case 0:if(E.src.charCodeAt(F)==9||E.src.charCodeAt(F)==32){D=1}else{if(E.src.charCodeAt(F)==40){D=2}else{if(E.src.charCodeAt(F)==41){D=3}else{if(E.src.charCodeAt(F)==42){D=4}else{if(E.src.charCodeAt(F)==43){D=5}else{if(E.src.charCodeAt(F)==44){D=6}else{if(E.src.charCodeAt(F)==45){D=7}else{if(E.src.charCodeAt(F)==47){D=8}else{if((E.src.charCodeAt(F)>=48&&E.src.charCodeAt(F)<=57)){D=9}else{if((E.src.charCodeAt(F)>=65&&E.src.charCodeAt(F)<=90)||(E.src.charCodeAt(F)>=97&&E.src.charCodeAt(F)<=122)){D=10}else{if(E.src.charCodeAt(F)==94){D=11}else{if(E.src.charCodeAt(F)==34){D=15}else{if(E.src.charCodeAt(F)==38){D=16}else{if(E.src.charCodeAt(F)==46){D=17}else{D=-1}}}}}}}}}}}}}}break;case 1:D=-1;B=1;C=F;break;case 2:D=-1;B=2;C=F;break;case 3:D=-1;B=3;C=F;break;case 4:D=-1;B=12;C=F;break;case 5:D=-1;B=9;C=F;break;case 6:D=-1;B=10;C=F;break;case 7:D=-1;B=11;C=F;break;case 8:D=-1;B=13;C=F;break;case 9:if((E.src.charCodeAt(F)>=48&&E.src.charCodeAt(F)<=57)){D=9}else{if(E.src.charCodeAt(F)==46){D=13}else{D=-1}}B=4;C=F;break;case 10:if((E.src.charCodeAt(F)>=48&&E.src.charCodeAt(F)<=57)||(E.src.charCodeAt(F)>=65&&E.src.charCodeAt(F)<=90)||(E.src.charCodeAt(F)>=97&&E.src.charCodeAt(F)<=122)){D=10}else{if(E.src.charCodeAt(F)==95){D=19}else{D=-1}}B=7;C=F;break;case 11:D=-1;B=14;C=F;break;case 12:D=-1;B=8;C=F;break;case 13:if((E.src.charCodeAt(F)>=48&&E.src.charCodeAt(F)<=57)){D=13}else{D=-1}B=5;C=F;break;case 14:D=-1;B=6;C=F;break;case 15:if(E.src.charCodeAt(F)==34){D=12}else{if(E.src.charCodeAt(F)==32||E.src.charCodeAt(F)==46||(E.src.charCodeAt(F)>=48&&E.src.charCodeAt(F)<=57)||(E.src.charCodeAt(F)>=65&&E.src.charCodeAt(F)<=90)||(E.src.charCodeAt(F)>=97&&E.src.charCodeAt(F)<=122)){D=15}else{D=-1}}break;case 16:if((E.src.charCodeAt(F)>=65&&E.src.charCodeAt(F)<=90)||(E.src.charCodeAt(F)>=97&&E.src.charCodeAt(F)<=122)){D=18}else{D=-1}break;case 17:if((E.src.charCodeAt(F)>=48&&E.src.charCodeAt(F)<=57)){D=13}else{D=-1}break;case 18:if(E.src.charCodeAt(F)==59){D=14}else{if((E.src.charCodeAt(F)>=65&&E.src.charCodeAt(F)<=90)||(E.src.charCodeAt(F)>=97&&E.src.charCodeAt(F)<=122)){D=18}else{D=-1}}break;case 19:if((E.src.charCodeAt(F)>=48&&E.src.charCodeAt(F)<=57)||(E.src.charCodeAt(F)>=65&&E.src.charCodeAt(F)<=90)||(E.src.charCodeAt(F)>=97&&E.src.charCodeAt(F)<=122)){D=10}else{if(E.src.charCodeAt(F)==95){D=19}else{D=-1}}break}F++}while(D>-1)}while(1>-1&&B==1);if(B>-1){E.att=E.src.substr(G,C-G);E.offset=C;switch(B){case 4:E.att=parseInt(E.att);break;case 5:E.att=parseFloat(E.att);break;case 6:E.att=String(E.att);break;case 7:JXG.GeogebraReader.debug("Geparstes Element/Variable: "+E.att);if(typeof u[E.att]=="undefined"||u[E.att]==""){var A=JXG.GeogebraReader.getElement(z,E.att);u[E.att]=JXG.GeogebraReader.writeElement(z,q,A);JXG.GeogebraReader.debug("regged: "+E.att+" (id: "+u[E.att].id+")")}break;case 8:E.att=String(E.att);break}}else{E.att=new String();B=-1}return B}function x(E,T,U){var F=new Array();var P=new Array();var I=0;var S;var J;var K;var W;var L=new Function("","var offset; var src; var att;");var Q=new L();var N=new Array(new Array(0,1),new Array(16,1),new Array(15,3),new Array(15,3),new Array(15,3),new Array(15,3),new Array(15,3),new Array(15,3),new Array(15,2),new Array(15,3),new Array(15,3),new Array(15,1),new Array(15,1),new Array(15,1),new Array(15,1),new Array(15,1));var H=new Array(new Array(11,3,2,4,8,5,4,6,5,7,6,8,7,9),new Array(17,0),new Array(14,10,13,11,12,12,10,13,11,14,9,15,17,-1),new Array(11,3,2,4,8,5,4,6,5,7,6,8,7,9),new Array(11,3,2,4,8,5,4,6,5,7,6,8,7,9),new Array(9,18,17,-15,11,-15,10,-15,12,-15,13,-15,14,-15,3,-15),new Array(17,-11,9,-11,11,-11,10,-11,12,-11,13,-11,14,-11,3,-11),new Array(17,-12,9,-12,11,-12,10,-12,12,-12,13,-12,14,-12,3,-12),new Array(17,-13,9,-13,11,-13,10,-13,12,-13,13,-13,14,-13,3,-13),new Array(17,-14,9,-14,11,-14,10,-14,12,-14,13,-14,14,-14,3,-14),new Array(11,3,2,4,8,5,4,6,5,7,6,8,7,9),new Array(11,3,2,4,8,5,4,6,5,7,6,8,7,9),new Array(11,3,2,4,8,5,4,6,5,7,6,8,7,9),new Array(11,3,2,4,8,5,4,6,5,7,6,8,7,9),new Array(11,3,2,4,8,5,4,6,5,7,6,8,7,9),new Array(11,3,2,4,8,5,4,6,5,7,6,8,7,9),new Array(14,10,13,-8,12,-8,10,-8,11,-8,9,-8,17,-8,3,-8),new Array(14,10,13,11,12,12,10,13,11,14,9,15,3,25),new Array(11,3,2,4,8,5,4,6,5,7,6,8,7,9),new Array(14,-7,13,-7,12,-7,10,-7,11,-7,9,-7,17,-7,3,-7),new Array(14,10,13,-6,12,-6,10,-6,11,-6,9,-6,17,-6,3,-6),new Array(14,10,13,-5,12,-5,10,-5,11,-5,9,-5,17,-5,3,-5),new Array(14,10,13,11,12,12,10,-4,11,-4,9,-4,17,-4,3,-4),new Array(14,10,13,11,12,12,10,-3,11,-3,9,-3,17,-3,3,-3),new Array(14,10,13,11,12,12,10,-2,11,-2,9,-2,17,-2,3,-2),new Array(17,-9,9,-9,11,-9,10,-9,12,-9,13,-9,14,-9,3,-9),new Array(14,10,13,11,12,12,10,-10,11,-10,9,-10,17,-10,3,-10));var M=new Array(new Array(16,1,15,2),new Array(),new Array(),new Array(15,16),new Array(15,17),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(15,19),new Array(15,20),new Array(15,21),new Array(15,22),new Array(15,23),new Array(15,24),new Array(),new Array(),new Array(15,26),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array());var R=new Array("p'","WHITESPACE","(",")","INT","FLOAT","HTML","VAR","STRING","+",",","-","*","/","^","e","p","$");Q.offset=0;Q.src=E;Q.att=new String();if(!T){T=new Array()}if(!U){U=new Array()}F.push(0);P.push(0);K=b(Q);while(true){S=28;for(var O=0;O<H[F[F.length-1]].length;O+=2){if(H[F[F.length-1]][O]==K){S=H[F[F.length-1]][O+1];break}}if(o&&F.length>0){y("\nState "+F[F.length-1]+"\n\tLookahead: "+R[K]+' ("'+Q.att+'")\n\tAction: '+S+'\n\tSource: "'+Q.src.substr(Q.offset,30)+((Q.offset+30<Q.src.length)?"...":"")+'"\n\tStack: '+F.join()+"\n\tValue stack: "+P.join()+"\n")}if(S==28){if(o){y("Error detected: There is no reduce or shift on the symbol "+R[K])}I++;T.push(Q.offset-Q.att.length);U.push(new Array());for(var O=0;O<H[F[F.length-1]].length;O+=2){U[U.length-1].push(R[H[F[F.length-1]][O]])}var G=new Array();var V=new Array();for(var O=0;O<F.length;O++){G[O]=F[O];V[O]=P[O]}while(S==28&&K!=17){if(o){y("\tError recovery\nCurrent lookahead: "+R[K]+" ("+Q.att+")\nAction: "+S+"\n\n")}if(K==-1){Q.offset++}while(S==28&&F.length>0){F.pop();P.pop();if(F.length==0){break}S=28;for(var O=0;O<H[F[F.length-1]].length;O+=2){if(H[F[F.length-1]][O]==K){S=H[F[F.length-1]][O+1];break}}}if(S!=28){break}for(var O=0;O<G.length;O++){F.push(G[O]);P.push(V[O])}K=b(Q)}if(S==28){if(o){y("\tError recovery failed, terminating parse process...")}break}if(o){y("\tError recovery succeeded, continuing")}}if(S>0){if(o){y("Shifting symbol: "+R[K]+" ("+Q.att+")")}F.push(S);P.push(Q.att);K=b(Q);if(o){y("\tNew lookahead symbol: "+R[K]+" ("+Q.att+")")}}else{S*=-1;if(o){y("Reducing by producution: "+S)}W=void (0);if(o){y("\tPerforming semantic action...")}switch(S){case 0:W=P[P.length-1];break;case 1:JXG.GeogebraReader.debug(P[P.length-1]);break;case 2:W=P[P.length-3]+P[P.length-1];break;case 3:W=P[P.length-3]-P[P.length-1];break;case 4:var B=JXG.GetReferenceFromParameter(q,u[P[P.length-1]].id);var A=JXG.GetReferenceFromParameter(q,u[P[P.length-3]].id);(function(X,Y){fx=function(){return X.Value()};fy=function(){return Y.Value()};e.addConstraint([fx,fy])})(B,A);W="x: "+typeof P[P.length-3]+" ("+P[P.length-3]+"), y: "+typeof P[P.length-1]+"("+P[P.length-1]+")";break;case 5:W=P[P.length-3]*P[P.length-1];break;case 6:W=P[P.length-3]/P[P.length-1];break;case 7:if(typeof P[P.length-3]=="string"){var C=JXG.GetReferenceFromParameter(q,u[P[P.length-3]].id).Value()}else{var C=P[P.length-3]}if(typeof P[P.length-1]=="string"){var D=JXG.GetReferenceFromParameter(q,u[P[P.length-1]].id).Value()}else{var D=P[P.length-1]}W=function(X,Y){return Math.pow(X,Y)}(C,D);break;case 8:W=P[P.length-1]*-1;break;case 9:W=P[P.length-2];break;case 10:W=P[P.length-3];break;case 11:W=P[P.length-1];break;case 12:W=P[P.length-1];break;case 13:W=P[P.length-1];break;case 14:W=P[P.length-1];break;case 15:W=P[P.length-1];break}if(o){y("\tPopping "+N[S][1]+" off the stack...")}for(var O=0;O<N[S][1];O++){F.pop();P.pop()}J=-1;for(var O=0;O<M[F[F.length-1]].length;O+=2){if(M[F[F.length-1]][O]==N[S][0]){J=M[F[F.length-1]][O+1];break}}if(S==0){break}if(o){y("\tPushing non-terminal "+R[N[S][0]])}F.push(J);P.push(W)}if(o){JXG.GeogebraReader.debug(f);f=new String()}}if(o){y("\nParse complete.");JXG.GeogebraReader.debug(f)}return I}var w=new Array();var d=new Array();var g=0;var v=h;if((g=x(v,w,d))>0){var a=new String();for(var j=0;j<g;j++){a+="Parse error in line "+(v.substr(0,w[j]).match(/\n/g)?v.substr(0,w[j]).match(/\n/g).length:1)+' near "'+v.substr(w[j])+'", expecting "'+d[j].join()+'"\n'}JXG.GeogebraReader.debug(a)}};this.debug=function(a){$("debug").innerHTML+=a+"<br/>"};this.colorProperties=function(h,e){var f=(h.getElementsByTagName("objColor")[0].attributes.alpha)?1*h.getElementsByTagName("objColor")[0].attributes.alpha.value:0;var k=(h.getElementsByTagName("objColor")[0].attributes.r)?(1*h.getElementsByTagName("objColor")[0].attributes.r.value).toString(16):0;var j=(h.getElementsByTagName("objColor")[0].attributes.g)?(1*h.getElementsByTagName("objColor")[0].attributes.g.value).toString(16):0;var d=(h.getElementsByTagName("objColor")[0].attributes.b)?(1*h.getElementsByTagName("objColor")[0].attributes.b.value).toString(16):0;if(k.length==1){k="0"+k}if(j.length==1){j="0"+j}if(d.length==1){d="0"+d}e.fillColor="#"+k+j+d;e.strokeColor=e.fillColor;if(f!=0){e.strokeOpacity=e.fillOpacity;e.fillOpacity=f}return e};this.boardProperties=function(d,b,a){return a};this.coordinates=function(b,a){b.x=(a.getElementsByTagName("coords")[0])?parseFloat(a.getElementsByTagName("coords")[0].attributes.x.value):(a.getElementsByTagName("startPoint")[0])?parseFloat(a.getElementsByTagName("startPoint")[0].attributes.x.value):false;b.y=(a.getElementsByTagName("coords")[0])?parseFloat(a.getElementsByTagName("coords")[0].attributes.y.value):(a.getElementsByTagName("startPoint")[0])?parseFloat(a.getElementsByTagName("startPoint")[0].attributes.y.value):false;b.z=(a.getElementsByTagName("coords")[0])?parseFloat(a.getElementsByTagName("coords")[0].attributes.z.value):(a.getElementsByTagName("startPoint")[0])?parseFloat(a.getElementsByTagName("startPoint")[0].attributes.z.value):false;return b};this.visualProperties=function(b,a){(b.getElementsByTagName("show")[0].attributes.object)?a.visible=b.getElementsByTagName("show")[0].attributes.object.value:false;(b.getElementsByTagName("show")[0].attributes.label)?a.visibleLabel=b.getElementsByTagName("show")[0].attributes.label.value:false;(b.getElementsByTagName("pointSize")[0])?a.style=b.getElementsByTagName("pointSize")[0].attributes.val.value:false;(b.getElementsByTagName("labelOffset")[0])?a.labelX=1*b.getElementsByTagName("labelOffset")[0].attributes.x.value:false;(b.getElementsByTagName("labelOffset")[0])?a.labelY=1*b.getElementsByTagName("labelOffset")[0].attributes.y.value:false;(b.getElementsByTagName("trace")[0])?a.trace=b.getElementsByTagName("trace")[0].attributes.val.value:false;(b.getElementsByTagName("fix")[0])?a.fixed=b.getElementsByTagName("fix")[0].attributes.val.value:false;return a};this.getElement=function(a,d){for(var f=0;f<a.getElementsByTagName("construction").length;f++){for(var b=0;b<a.getElementsByTagName("construction")[f].getElementsByTagName("element").length;b++){var e=a.getElementsByTagName("construction")[f].getElementsByTagName("element")[b];if(d==e.attributes.label.value){return e}}}};this.writeBoard=function(b,f,e){var g=b.getElementsByTagName("euclidianView")[0];f.origin={};f.origin.usrCoords=[1,0,0];f.origin.scrCoords=[1,1*g.getElementsByTagName("coordSystem")[0].attributes.xZero.value,1*g.getElementsByTagName("coordSystem")[0].attributes.yZero.value];f.unitX=(g.getElementsByTagName("coordSystem")[0].attributes.scale)?1*g.getElementsByTagName("coordSystem")[0].attributes.scale.value:1;f.unitY=(g.getElementsByTagName("coordSystem")[0].attributes.yscale)?1*g.getElementsByTagName("coordSystem")[0].attributes.yscale.value:1;f.fontSize=1*b.getElementsByTagName("gui")[0].getElementsByTagName("font")[0].attributes.size.value;JXG.JSXGraph.boards[f.id]=f;f.renderer.enhancedRendering=true;var a=(g.getElementsByTagName("evSettings")[0].attributes.pointCapturing.value=="true")?f.snapToGrid=true:null;var d=(g.getElementsByTagName("evSettings")[0].attributes.grid.value=="true")?f.renderer.drawGrid(f):null;if(g.getElementsByTagName("evSettings")[0].attributes.axes&&g.getElementsByTagName("evSettings")[0].attributes.axes.value=="true"){e.xAxis=f.createElement("axis",[[0,0],[1,0]],{strokeColor:"black"});e.yAxis=f.createElement("axis",[[0,0],[0,1]],{strokeColor:"black"})}return e};this.writeElement=function(j,d,f,h,u){if(typeof f=="object"&&typeof f.attributes=="undefined"){element=f[0]}else{element=f}var y={};y.type=element.attributes.type.value.toLowerCase();y.label=element.attributes.label.value;var q={};q.name=y.label;if(typeof u!="undefined"&&(y.type!=u)){y.type=u}JXG.GeogebraReader.debug("<br><b>Konstruiere</b> "+y.label+"("+y.type+"):");switch(y.type){case"point":q=JXG.GeogebraReader.boardProperties(y,element,q);q=JXG.GeogebraReader.colorProperties(element,q);y=JXG.GeogebraReader.coordinates(y,element);q=JXG.GeogebraReader.visualProperties(element,q);try{p=d.createElement("point",[y.x,y.y],q);$("debug").innerHTML+="* <b>Point ("+p.id+"):</b> "+q.name+"("+y.x+", "+y.y+")<br>\n";return p}catch(C){$("debug").innerHTML+="* <b>Err:</b> Point "+q.name+"<br>\n";return false}break;case"segment":q=JXG.GeogebraReader.boardProperties(y,element,q);q=JXG.GeogebraReader.colorProperties(element,q);y=JXG.GeogebraReader.coordinates(y,element);q=JXG.GeogebraReader.visualProperties(element,q);try{$("debug").innerHTML+="* <b>Segment:</b> ("+q.name+") First: "+h[0].name+", Last: "+h[1].name+"<br>\n";q.straightFirst=false;q.straightLast=false;l=d.createElement("line",h,q);return l}catch(C){$("debug").innerHTML+="* <b>Err:</b> Segment "+q.name+" First: "+h[0].name+", Last: "+h[1].name+"<br>\n";return false}break;case"line":q=JXG.GeogebraReader.boardProperties(y,element,q);q=JXG.GeogebraReader.colorProperties(element,q);y=JXG.GeogebraReader.coordinates(y,element);q=JXG.GeogebraReader.visualProperties(element,q);for(var g in q){$("debug").innerHTML+=g+":"+q[g]+" "}$("debug").innerHTML+="<br>";if(JXG.GetReferenceFromParameter(d,h[1].id).type==1330925652){var a="line"}else{if(JXG.GetReferenceFromParameter(d,h[1].id).type==1330924622){var a="parallel"}}try{$("debug").innerHTML+="* <b>Line:</b> ("+q.name+") First: "+h[0].id+", Last: "+h[1].id+"<br>\n";l=d.createElement(a,h,q);return l}catch(C){$("debug").innerHTML+="* <b>Err:</b> Line "+q.label+"<br>\n";return false}break;case"orthogonalline":q=JXG.GeogebraReader.boardProperties(y,element,q);q=JXG.GeogebraReader.colorProperties(element,q);y=JXG.GeogebraReader.coordinates(y,element);q=JXG.GeogebraReader.visualProperties(element,q);try{$("debug").innerHTML+="* <b>Orthogonalline:</b> First: "+h[0].id+", Last: "+h[1].id+"<br>\n";l=d.createElement("normal",[h[0],h[1]],q);return l}catch(C){$("debug").innerHTML+="* <b>Err:</b> Orthogonalline "+q.label+"<br>\n";return false}break;case"polygon":q=JXG.GeogebraReader.boardProperties(y,element,q);q=JXG.GeogebraReader.colorProperties(element,q);y=JXG.GeogebraReader.coordinates(y,element);q=JXG.GeogebraReader.visualProperties(element,q);try{$("debug").innerHTML+="* <b>Polygon:</b> First: "+h[0].name+", Second: "+h[1].name+", Third: "+h[2].name+"<br>\n";var b=[];for(var v=1;v<f.length;v++){b[v-1]={};b[v-1].id="";b[v-1].name=f[v].attributes.label.value}q.borders=b;l=d.createElement("polygon",h,q);return l}catch(C){$("debug").innerHTML+="* <b>Err:</b> Polygon "+q.name+"<br>\n";return false}break;case"intersect":q=JXG.GeogebraReader.boardProperties(y,element,q);q=JXG.GeogebraReader.colorProperties(element,q);y=JXG.GeogebraReader.coordinates(y,element);q=JXG.GeogebraReader.visualProperties(element,q);try{$("debug").innerHTML+="* <b>Intersection:</b> First: "+h[0].name+", Second: "+h[1].name+"<br>\n";l=d.createElement("intersection",[h[0],h[1],0],q);return l}catch(C){$("debug").innerHTML+="* <b>Err:</b> Intersection "+q.name+"<br>\n";return false}break;case"distance":q=JXG.GeogebraReader.boardProperties(y,element,q);q=JXG.GeogebraReader.colorProperties(element,q);y=JXG.GeogebraReader.coordinates(y,element);q=JXG.GeogebraReader.visualProperties(element,q);try{$("debug").innerHTML+="* <b>Distance:</b> First: "+h[0].name+", Second: "+h[1].name+"<br>\n";m=d.createElement("midpoint",h,{visible:"false"});t=d.createElement("text",[function(){return m.X()},function(){return m.Y()},function(){return"<span style='text-decoration: overline'>"+h[0].name+h[1].name+"</span> = "+JXG.GetReferenceFromParameter(d,h[0].id).Dist(JXG.GetReferenceFromParameter(d,h[1].id))}]);return t}catch(C){$("debug").innerHTML+="* <b>Err:</b> Intersection "+q.name+"<br>\n";return false}break;case"rotate":q=JXG.GeogebraReader.boardProperties(y,element,q);q=JXG.GeogebraReader.colorProperties(element,q);y=JXG.GeogebraReader.coordinates(y,element);q=JXG.GeogebraReader.visualProperties(element,q);try{$("debug").innerHTML+="* <b>Rotate:</b> First: "+h[0].name+", Second: "+h[1].name+"<br>\n";q.type="rotate";r=d.createElement("transform",[[parseInt(h[1]),h[2]],h[0]],q);return r}catch(C){$("debug").innerHTML+="* <b>Err:</b> Rotate "+q.name+"<br>\n";return false}break;case"mirror":q=JXG.GeogebraReader.boardProperties(y,element,q);q=JXG.GeogebraReader.colorProperties(element,q);y=JXG.GeogebraReader.coordinates(y,element);q=JXG.GeogebraReader.visualProperties(element,q);if(JXG.GetReferenceFromParameter(d,h[1].id).type==1330925652){var a="mirrorpoint"}else{if(JXG.GetReferenceFromParameter(d,h[1].id).type==1330924622){var a="reflection"}}try{$("debug").innerHTML+="* <b>Mirror:</b> First: "+h[0].name+", Second: "+h[1].name+"<br>\n";m=d.createElement(a,[h[1],h[0]],q);return m}catch(C){$("debug").innerHTML+="* <b>Err:</b> Mirror "+q.name+"<br>\n";return false}break;case"circle":q=JXG.GeogebraReader.boardProperties(y,element,q);q=JXG.GeogebraReader.colorProperties(element,q);y=JXG.GeogebraReader.coordinates(y,element);q=JXG.GeogebraReader.visualProperties(element,q);try{$("debug").innerHTML+="* <b>Circle:</b> First: "+h[0].name+", Second: "+h[1]+"<br>\n";c=d.createElement("circle",h,q);return c}catch(C){$("debug").innerHTML+="* <b>Err:</b> Circle "+q.name+"<br>\n";return false}break;case"circlearc":q=JXG.GeogebraReader.boardProperties(y,element,q);q=JXG.GeogebraReader.colorProperties(element,q);y=JXG.GeogebraReader.coordinates(y,element);q=JXG.GeogebraReader.visualProperties(element,q);try{$("debug").innerHTML+="* <b>CircleArc:</b> First: "+h[0].name+", Second: "+h[1].name+"<br>\n";c=d.createElement("arc",h,q);return c}catch(C){$("debug").innerHTML+="* <b>Err:</b> CircleArc "+q.name+"<br>\n";return false}break;case"circlesector":q=JXG.GeogebraReader.boardProperties(y,element,q);q=JXG.GeogebraReader.colorProperties(element,q);y=JXG.GeogebraReader.coordinates(y,element);q=JXG.GeogebraReader.visualProperties(element,q);try{$("debug").innerHTML+="* <b>CircleSector:</b> First: "+h[0].name+", Second: "+h[1].name+"<br>\n";c=d.createElement("sector",h,q);return c}catch(C){$("debug").innerHTML+="* <b>Err:</b> CircleSector "+q.name+"<br>\n";return false}break;case"linebisector":q=JXG.GeogebraReader.boardProperties(y,element,q);q=JXG.GeogebraReader.colorProperties(element,q);y=JXG.GeogebraReader.coordinates(y,element);q=JXG.GeogebraReader.visualProperties(element,q);try{$("debug").innerHTML+="* <b>LineBiSector (Mittelsenkrechte):</b> First: "+h[0].name+"<br>\n";q.straightFirst=true;q.straightLast=true;m=d.createElement("midpoint",h,{visible:"false"});p=d.createElement("perpendicular",[m,h[0]],q);return p}catch(C){$("debug").innerHTML+="* <b>Err:</b> LineBiSector (Mittelsenkrechte) "+q.name+"<br>\n";return false}break;case"ray":q=JXG.GeogebraReader.boardProperties(y,element,q);q=JXG.GeogebraReader.colorProperties(element,q);y=JXG.GeogebraReader.coordinates(y,element);q=JXG.GeogebraReader.visualProperties(element,q);try{$("debug").innerHTML+="* <b>Strahl:</b> First: "+h[0].name+"<br>\n";q.straightFirst=true;q.straightLast=false;p=d.createElement("line",[h[1],h[0]],q);return p}catch(C){$("debug").innerHTML+="* <b>Err:</b> Strahl "+q.name+"<br>\n";return false}break;case"tangent":q=JXG.GeogebraReader.boardProperties(y,element,q);q=JXG.GeogebraReader.colorProperties(element,q);y=JXG.GeogebraReader.coordinates(y,element);q=JXG.GeogebraReader.visualProperties(element,q);try{$("debug").innerHTML+="* <b>Tangente:</b> First: "+h[0].name+"<br>\n";p=d.createElement("tangent",h[1],q);return p}catch(C){$("debug").innerHTML+="* <b>Err:</b> Tangente "+q.name+"<br>\n";return false}break;case"circumcirclearc":q=JXG.GeogebraReader.boardProperties(y,element,q);q=JXG.GeogebraReader.colorProperties(element,q);y=JXG.GeogebraReader.coordinates(y,element);q=JXG.GeogebraReader.visualProperties(element,q);try{$("debug").innerHTML+="* <b>CircumcircleArc:</b> First: "+h[0].name+"<br>\n";p=d.createElement("circumcircle",h,q);return p}catch(C){$("debug").innerHTML+="* <b>Err:</b> CircumcircleArc "+q.name+"<br>\n";return false}break;case"angle":q=JXG.GeogebraReader.boardProperties(y,element,q);q=JXG.GeogebraReader.colorProperties(element,q);y=JXG.GeogebraReader.coordinates(y,element);q=JXG.GeogebraReader.visualProperties(element,q);try{$("debug").innerHTML+="* <b>Angle:</b> First: "+h[0].name+"<br>\n";p=d.createElement("angle",h,q);return p}catch(C){$("debug").innerHTML+="* <b>Err:</b> Angle "+q.name+"<br>\n";return false}break;case"angularbisector":q=JXG.GeogebraReader.boardProperties(y,element,q);q=JXG.GeogebraReader.colorProperties(element,q);y=JXG.GeogebraReader.coordinates(y,element);q=JXG.GeogebraReader.visualProperties(element,q);try{$("debug").innerHTML+="* <b>Angularbisector:</b> First: "+h[0].name+"<br>\n";p=d.createElement("bisector",h,q);return p}catch(C){$("debug").innerHTML+="* <b>Err:</b> Angularbisector "+q.name+"<br>\n";return false}break;case"numeric":q=JXG.GeogebraReader.boardProperties(y,element,q);q=JXG.GeogebraReader.colorProperties(element,q);q=JXG.GeogebraReader.visualProperties(element,q);if(element.getElementsByTagName("slider").length==1){var o=parseFloat(element.getElementsByTagName("slider")[0].attributes.x.value);var k=parseFloat(element.getElementsByTagName("slider")[0].attributes.y.value);var E=new JXG.Coords(JXG.COORDS_BY_SCREEN,[o,k],d);o=E.usrCoords[1];k=E.usrCoords[2];if(element.getElementsByTagName("slider")[0].attributes.horizontal.value=="true"){var w=parseFloat(element.getElementsByTagName("slider")[0].attributes.width.value)/(d.unitX*d.zoomX);var B=o+w;var z=k}else{var w=parseFloat(element.getElementsByTagName("slider")[0].attributes.width.value)/(d.unitX*d.zoomX);var B=o;var z=k+w}var F=parseFloat(element.getElementsByTagName("value")[0].attributes.val.value);var A=parseFloat(element.getElementsByTagName("slider")[0].attributes.min.value);var D=parseFloat(element.getElementsByTagName("slider")[0].attributes.max.value);(element.getElementsByTagName("animation")[0])?q.snapWidth=parseFloat(element.getElementsByTagName("animation")[0].attributes.step.value):false;try{$("debug").innerHTML+="* <b>Numeric:</b> First: "+q.name+"<br>\n";n=d.createElement("slider",[[o,k],[B,z],[A,F,D]],q);return n}catch(C){$("debug").innerHTML+="* <b>Err:</b> Numeric "+q.name+"<br>\n";return false}}break;case"midpoint":q=JXG.GeogebraReader.boardProperties(y,element,q);q=JXG.GeogebraReader.colorProperties(element,q);y=JXG.GeogebraReader.coordinates(y,element);q=JXG.GeogebraReader.visualProperties(element,q);try{p=d.createElement("midpoint",h,q);$("debug").innerHTML+="* <b>Midpoint ("+p.id+"):</b> "+q.name+"("+y.x+", "+y.y+")<br>\n";return p}catch(C){$("debug").innerHTML+="* <b>Err:</b> Midpoint "+q.name+"<br>\n";return false}break;case"center":q=JXG.GeogebraReader.boardProperties(y,element,q);q=JXG.GeogebraReader.colorProperties(element,q);y=JXG.GeogebraReader.coordinates(y,element);q=JXG.GeogebraReader.visualProperties(element,q);try{p=d.createElement("point",[function(){return JXG.GetReferenceFromParameter(d,h[0].id).midpoint.X()},function(){return JXG.GetReferenceFromParameter(d,h[0].id).midpoint.Y()}],q);$("debug").innerHTML+="* <b>Center ("+p.id+"):</b> "+q.name+"("+y.x+", "+y.y+")<br>\n";return p}catch(C){$("debug").innerHTML+="* <b>Err:</b> Center "+q.name+"<br>\n";return false}break;default:return false;break}};this.readGeogebra=function(x,h){var B=[];var a,g,C;var f=[];B=JXG.GeogebraReader.writeBoard(x,h,B);var d=x.getElementsByTagName("construction");for(var v=0;v<d.length;v++){var z=d[v].getElementsByTagName("command");for(var w=0;w<z.length;w++){g=z[w];var u=[];for(C=0;C<g.getElementsByTagName("input")[0].attributes.length;C++){a=g.getElementsByTagName("input")[0].attributes[C].value;if(!a.match(/°/)&&!isNaN(a)){u[C]=a}else{if(typeof B[a]=="undefined"||B[a]==""){elnode=JXG.GeogebraReader.getElement(x,a);B[a]=JXG.GeogebraReader.writeElement(x,h,elnode);$("debug").innerHTML+="regged: "+B[a].id+"<br/>"}u[C]=B[a]}}var q=[];for(C=0;C<g.getElementsByTagName("output")[0].attributes.length;C++){a=g.getElementsByTagName("output")[0].attributes[C].value;q[C]=JXG.GeogebraReader.getElement(x,a)}if(typeof B[a]=="undefined"||B[a]==""){B[a]=JXG.GeogebraReader.writeElement(x,h,q,u,g.attributes.name.value.toLowerCase());$("debug").innerHTML+="regged: "+B[a].id+"<br/>";for(var C=1;C<q.length;C++){B[B[a].borders[C-1].name]=B[a].borders[C-1];$("debug").innerHTML+=C+") regged: "+q[C].attributes.label.value+"("+B[q[C].attributes.label.value].id+")<br/>"}}}var b=d[v].getElementsByTagName("expression");for(var w=0;w<b.length;w++){var k=b[w].attributes.label.value;var j=b[w].attributes.exp.value;var e=(b[w].attributes.type)?b[w].attributes.type.value:false;JXG.GeogebraReader.debug("Expression: label: "+k+", exp: "+j+", type: "+e);if(typeof B[k]=="undefined"||B[k]==""){var u=JXG.GeogebraReader.getElement(x,k);B[k]=JXG.GeogebraReader.writeElement(x,h,u,null,e);JXG.GeogebraReader.debug("regged: "+B[k].id)}var w=j.split(" ");var y="";for(var C=0;C<w.length;C++){if(w.length!=C+1){if(w[C].search(/\)$/)>-1||w[C].search(/[0-9]+$/)>-1||w[C].search(/[a-zA-Z]+(\_*[a-zA-Z0-9]+)*$/)>-1){if(w[C+1].search(/^\(/)>-1||w[C].search(/^[0-9]+/)>-1||w[C+1].search(/^[a-zA-Z]+(\_*[a-zA-Z0-9]+)*/)>-1){w[C]=w[C]+"*"}}}y+=w[C]}var A=JXG.GeogebraReader.ggbParse(h,x,B,k,j)}}h.fullUpdate()};this.prepareString=function(a){if(a.indexOf("<")!=0){bA=[];for(i=0;i<a.length;i++){bA[i]=JXG.Util.asciiCharCodeAt(a,i)}a=(new JXG.Util.Unzip(bA)).unzipFile("geogebra.xml")}return a}};JXG.IntergeoReader=new function(){this.board=null;this.objects={};this.readIntergeo=function(a,b){this.board=b;this.board.origin={};this.board.origin.usrCoords=[1,0,0];this.board.origin.scrCoords=[1,400,300];this.board.unitX=30;this.board.unitY=30;this.readElements(a.getElementsByTagName("elements"));this.board.fullUpdate();this.readConstraints(a.getElementsByTagName("constraints"));this.board.fullUpdate()};this.readElements=function(a){for(var b=0;b<a[0].childNodes.length;b++){(function(d){var e=a[0].childNodes[d];if(e.nodeType>1){return}if(e.nodeName=="point"){JXG.IntergeoReader.addPoint(e)}else{if(e.nodeName=="line"){JXG.IntergeoReader.storeLine(e)}else{}}})(b)}};this.addPoint=function(e){var b=0;var d;var f=e.childNodes[b];while(f.nodeType>1){b++;f=e.childNodes[b]}if(f.nodeName=="homogeneous_coordinates"){var g=[];for(var a=0;a<f.childNodes.length;a++){if(f.childNodes[a].nodeType==1){if(f.childNodes[a].nodeName=="double"){g.push(f.childNodes[a].firstChild.data)}else{}}}for(a=0;a<3;a++){g[a]=parseFloat(g[a])}d=this.board.createElement("point",[g[2],g[0],g[1]],{name:e.getAttribute("id"),withLabel:true})}else{if(f.nodeName=="euclidean_coordinates"){var g=[];for(var a=0;a<f.childNodes.length;a++){if(f.childNodes[a].nodeType==1){g.push(f.childNodes[a].firstChild.data)}}d=this.board.createElement("point",[g[0],g[1]],{name:e.getAttribute("id"),withLabel:true})}else{if(f.nodeName=="polar_coordinates"){var g=[];for(var a=0;a<f.childNodes.length;a++){if(f.childNodes[a].nodeType==1){g.push(f.childNodes[a].firstChild.data)}}d=this.board.createElement("point",[g[0]*Math.cos(g[1]),g[0]*Math.sin(g[1])],{name:e.getAttribute("id"),withLabel:true})}else{return}}}this.objects[e.getAttribute("id")]=d};this.storeLine=function(d){this.objects[d.getAttribute("id")]={id:d.getAttribute("id"),coords:null};var b=0;var e=d.childNodes[b];while(e.nodeType>1){b++;e=d.childNodes[b]}if(e.nodeName=="homogeneous_coordinates"){var f=[];for(var a=0;a<e.childNodes.length;a++){if(e.childNodes[a].nodeType==1){if(e.childNodes[a].nodeName=="double"){f.push(parseFloat(e.childNodes[a].firstChild.data))}else{}}}this.objects[d.getAttribute("id")].coords=f}};this.readConstraints=function(a){for(var b=0;b<a[0].childNodes.length;b++){(function(d){var e=a[0].childNodes[d];if(e.nodeType>1){return}if(e.nodeName=="line_through_two_points"){JXG.IntergeoReader.addLineThroughTwoPoints(e)}else{if(e.nodeName=="line_parallel_to_line_through_point"){JXG.IntergeoReader.addLineParallelToLineThroughPoint(e)}else{if(e.nodeName=="line_perpendicular_to_line_through_point"){JXG.IntergeoReader.addLinePerpendicularToLineThroughPoint(e)}else{if(e.nodeName=="point_intersection_of_two_lines"){JXG.IntergeoReader.addPointIntersectionOfTwoLines(e)}else{if(e.nodeName=="free_point"){}else{if(e.nodeName=="free_line"){JXG.IntergeoReader.addFreeLine(e)}else{if(e.nodeName=="point_on_line"){JXG.IntergeoReader.addPointOnLine(e)}else{if(e.nodeName=="angular_bisector_of_three_points"){JXG.IntergeoReader.addAngularBisectorOfThreePoints(e)}else{if(e.nodeName=="angular_bisectors_of_two_lines"){JXG.IntergeoReader.addAngularBisectorsOfTwoLines(e)}else{$("debug").innerHTML+="NOT implemented: "+e.nodeName+"<br>"}}}}}}}}}})(b)}};this.readParams=function(b){var d=[];for(var a=0;a<b.childNodes.length;a++){if(b.childNodes[a].nodeType==1){d.push(b.childNodes[a].firstChild.data)}}return d};this.addLineThroughTwoPoints=function(b){var d=JXG.IntergeoReader.readParams(b);var a=this.board.createElement("line",[this.objects[d[1]],this.objects[d[2]]],{name:d[0],withLabel:true});this.objects[d[0]]=a};this.addLineParallelToLineThroughPoint=function(b){var d=JXG.IntergeoReader.readParams(b);var a=this.board.createElement("parallel",[this.objects[d[1]].id,this.objects[d[2]].id],{name:d[0],withLabel:true});this.objects[d[0]]=a};this.addLinePerpendicularToLineThroughPoint=function(b){var d=JXG.IntergeoReader.readParams(b);var a=this.board.createElement("perpendicular",[this.objects[d[1]].id,this.objects[d[2]].id],{name:d[0],withLabel:true});a[0].setProperty("straightFirst:true","straightLast:true");a[1].setProperty("visible:false");this.objects[d[0]]=a[0]};this.addPointIntersectionOfTwoLines=function(a){var b=JXG.IntergeoReader.readParams(a);this.objects[b[0]].addConstraint([this.board.intersectionFunc(this.objects[b[1]],this.objects[b[2]],0)])};this.addFreeLine=function(g){var h=JXG.IntergeoReader.readParams(g);var e=this.objects[h[0]].coords[0];var d=this.objects[h[0]].coords[1];var j=this.objects[h[0]].coords[2];var f=this.board.createElement("line",[j,e,d],{name:h[0],id:h[0],withLabel:true});this.objects[h[0]]=f};this.addPointOnLine=function(b){var d=JXG.IntergeoReader.readParams(b);var a=JXG.GetReferenceFromParameter(this.board,d[0]);a.makeGlider(this.objects[d[1]]);this.objects[d[0]]=a};this.addAngularBisectorOfThreePoints=function(b){var d=JXG.IntergeoReader.readParams(b);var a=this.board.createElement("bisector",[d[1],d[2],d[3]],{name:d[0],id:d[0],withLabel:true});a.setProperty({straightFirst:false,straightLast:true,strokeColor:"#000000"});this.objects[d[0]]=a};this.addAngularBisectorsOfTwoLines=function(d){var e=JXG.IntergeoReader.readParams(d);var b=this.objects[e[2]];var a=this.objects[e[3]];this.board.createElement("bisectorlines",[b,a],{name:[e[0],e[1]],id:[e[0],e[1]],straightFirst:true,straightLast:true,strokeColor:"#ff0000",withLabel:true})};this.prepareString=function(a){if(a.indexOf("<")!=0){var b=[];for(i=0;i<a.length;i++){b[i]=JXG.Util.asciiCharCodeAt(a,i)}a=(new JXG.Util.Unzip(b)).unzipFile("construction/intergeo.xml")}return a}};JXG.JSXGraph=new function(f){this.licenseText="JSXGraph v0.75 Copyright (C) see http://jsxgraph.org";this.rendererType="";this.boards={};this.elements={};var g;var b;if((f=="undefined")||(f==null)||(f=="")){g=navigator.appVersion.match(/MSIE (\d\.\d)/);b=(navigator.userAgent.toLowerCase().indexOf("opera")!=-1);if((!g)||(b)){this.rendererType="svg"}else{this.rendererType="vml";function d(h){document.body.scrollLeft;document.body.scrollTop}document.onmousemove=d}}else{this.rendererType=f}var a=JXG.rendererFiles[this.rendererType].split(",");for(var e=0;e<a.length;e++){(function(h){JXG.require(JXG.requirePath+h+".js")})(a[e])}this.initBoard=function(q,k){var y;var H,G,B,z;var D,o;var F;var j=JXG.getDimensions(q);if(typeof k=="undefined"){k={}}if(typeof k.boundingbox!="undefined"){F=k.boundingbox;D=parseInt(j.width);o=parseInt(j.height);if(k.keepaspectratio){B=D/(F[2]-F[0]);z=o/(-F[3]+F[1]);if(B>z){z=B}else{B=z}}else{B=D/(F[2]-F[0]);z=o/(-F[3]+F[1])}H=-B*F[0];G=z*F[1]}else{H=((typeof k.originX)=="undefined"?150:k.originX);G=((typeof k.originY)=="undefined"?150:k.originY);B=((typeof k.unitX)=="undefined"?50:k.unitX);z=((typeof k.unitY)=="undefined"?50:k.unitY)}var E=((typeof k.zoom)=="undefined"?1:k.zoom);var C=E*((typeof k.zoomX)=="undefined"?1:k.zoomX);var A=E*((typeof k.zoomY)=="undefined"?1:k.zoomY);if(typeof k.showcopyright!="undefined"){k.showCopyright=k.showcopyright}var x=((typeof k.showCopyright)=="undefined"?true:k.showCopyright);if(this.rendererType=="svg"){y=new JXG.SVGRenderer(document.getElementById(q))}else{if(this.rendererType=="vml"){y=new JXG.VMLRenderer(document.getElementById(q))}else{y=new JXG.SilverlightRenderer(document.getElementById(q),j.width,j.height)}}var v=new JXG.Board(q,y,"",[H,G],1,1,B,z,j.width,j.height,x);this.boards[v.id]=v;v.initInfobox();if((typeof k.axis!="undefined")&&k.axis){v.createElement("axis",[[0,0],[1,0]],{});v.createElement("axis",[[0,0],[0,1]],{})}if((typeof k.grid!="undefined")&&k.grid){v.renderer.drawGrid(v)}if(typeof k.shownavigation!="undefined"){k.showNavigation=k.shownavigation}var u=((typeof k.showNavigation)=="undefined"?v.options.showNavigation:k.showNavigation);if(u){v.renderer.drawZoomBar(v)}return v};this.loadBoardFromFile=function(o,h,u){var q;if(this.rendererType=="svg"){q=new JXG.SVGRenderer(document.getElementById(o))}else{q=new JXG.VMLRenderer(document.getElementById(o))}var k=JXG.getDimensions(o);var j=new JXG.Board(o,q,"",[150,150],1,1,50,50,k.width,k.height);j.initInfobox();j.beforeLoad();JXG.FileReader.parseFileContent(h,j,u);if(j.options.showNavigation){j.renderer.drawZoomBar(j)}this.boards[j.id]=j;return j};this.loadBoardFromString=function(o,h,u){var q;if(this.rendererType=="svg"){q=new JXG.SVGRenderer(document.getElementById(o))}else{q=new JXG.VMLRenderer(document.getElementById(o))}var k=JXG.getDimensions(o);var j=new JXG.Board(o,q,"",[150,150],1,1,50,50,k.width,k.height);j.initInfobox();j.beforeLoad();JXG.FileReader.parseString(h,j,u);if(j.options.showNavigation){j.renderer.drawZoomBar(j)}this.boards[j.id]=j;return j};this.freeBoard=function(j){if(typeof(j)=="string"){j=this.boards[j]}JXG.removeEvent(document,"mousedown",j.mouseDownListener,j);JXG.removeEvent(document,"mouseup",j.mouseUpListener,j);JXG.removeEvent(j.containerObj,"mousemove",j.mouseMoveListener,j);for(var h in j.objects){j.removeObject(j.objects[h])}j.containerObj.innerHTML="";for(var h in j.objects){delete (j.objects[h])}delete (j.renderer);delete (j.algebra);delete (this.boards[j.id])};this.registerElement=function(h,j){h=h.toLowerCase();this.elements[h]=j};this.unregisterElement=function(h){delete (this.elements[h])}};JXG.GetReferenceFromParameter=function(b,a){if(typeof(a)=="string"){if(b.objects[a]!=null){a=b.objects[a]}else{if(b.elementsByName[a]!=null){a=b.elementsByName[a]}}}return a};JXG.IsString=function(a){return typeof a=="string"};JXG.IsNumber=function(a){return typeof a=="number"};JXG.IsFunction=function(a){return typeof a=="function"};JXG.IsArray=function(a){return a!=null&&typeof a=="object"&&"splice" in a&&"join" in a};JXG.IsPoint=function(a){if(typeof a=="object"){return(a.elementClass==JXG.OBJECT_CLASS_POINT)}return false};JXG.createEvalFunction=function(b,g,h){var d=[];for(var a=0;a<h;a++){if(typeof g[a]=="string"){var e=b.algebra.geonext2JS(g[a]);e=e.replace(/this\.board\./g,"board.");d[a]=new Function("","return "+(e)+";")}}return function(j){var f=g[j];if(typeof f=="string"){return d[j]()}else{if(typeof f=="function"){return f()}else{if(typeof f=="number"){return f}}}return 0}};JXG.getDimensions=function(g){var f=document.getElementById(g);var j=f.style.display;if(j!="none"&&j!=null){return{width:f.offsetWidth,height:f.offsetHeight}}var d=f.style;var k=d.visibility;var h=d.position;var b=d.display;d.visibility="hidden";d.position="absolute";d.display="block";var a=f.clientWidth;var e=f.clientHeight;d.display=b;d.position=h;d.visibility=k;return{width:a,height:e}};JXG.addEvent=function(e,d,b,a){if(typeof Prototype!="undefined"&&typeof Prototype.Browser!="undefined"){a["_internal"+d]=b.bindAsEventListener(a);Event.observe(e,d,a["_internal"+d])}else{a["_internal"+d]=function(){return b.apply(a,arguments)};$(e).bind(d,a["_internal"+d])}};JXG.bind=function(b,a){return function(){return b.apply(a,arguments)}};JXG.removeEvent=function(e,d,b,a){if(typeof Prototype!="undefined"&&typeof Prototype.Browser!="undefined"){Event.stopObserving(e,d,a["_internal"+d])}else{$(e).unbind(d,a["_internal"+d])}};JXG.getPosition=function(b){var a=0;var d=0;if(!b){var b=window.event}if(b.pageX||b.pageY){a=b.pageX;d=b.pageY}else{if(b.clientX||b.clientY){a=b.clientX+document.body.scrollLeft+document.documentElement.scrollLeft;d=b.clientY+document.body.scrollTop+document.documentElement.scrollTop}}return[a,d]};JXG.getOffset=function(a){if(typeof Prototype!="undefined"&&typeof Prototype.Browser!="undefined"){return Element.cumulativeOffset(a)}else{var b=$(a).offset();return[b.left,b.top]}};JXG.getStyle=function(b,a){if(typeof Prototype!="undefined"&&typeof Prototype.Browser!="undefined"){return $(b).getStyle(a)}else{if(typeof $(b).attr(a)!="undefined"){return $(b).attr(a)}else{return $(b).css(a)}}};JXG.keys=function(a){var b=[];for(var d in a){b.push(d)}return b};JXG.escapeHTML=function(a){return a.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")};JXG.unescapeHTML=function(a){return a.replace(/<\/?[^>]+>/gi,"").replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">")};JXG.capitalize=function(a){return a.charAt(0).toUpperCase()+a.substring(1).toLowerCase()};JXG.isSilverlightInstalled=function(){var d=false;try{var a=null;var g=false;if(window.ActiveXObject){try{a=new ActiveXObject("AgControl.AgControl");d=true;a=null}catch(f){g=true}}else{g=true}if(g){var b=navigator.plugins["Silverlight Plug-In"];if(b){d=true}}}catch(f){d=false}return d};JXG.OBJECT_TYPE_ARC=1330921795;JXG.OBJECT_TYPE_ARROW=1330921815;JXG.OBJECT_TYPE_AXIS=1330921816;JXG.OBJECT_TYPE_TICKS=1330926680;JXG.OBJECT_TYPE_CIRCLE=1330922316;JXG.OBJECT_TYPE_CURVE=1330923344;JXG.OBJECT_TYPE_GLIDER=1330923340;JXG.OBJECT_TYPE_IMAGE=1330926157;JXG.OBJECT_TYPE_LINE=1330924622;JXG.OBJECT_TYPE_POINT=1330925652;JXG.OBJECT_TYPE_SLIDER=1330926404;JXG.OBJECT_TYPE_CAS=1330922320;JXG.OBJECT_TYPE_POLYGON=1330925657;JXG.OBJECT_TYPE_SECTOR=1330926403;JXG.OBJECT_TYPE_TEXT=1330926661;JXG.OBJECT_TYPE_ANGLE=1330921799;JXG.OBJECT_TYPE_INTERSECTION=1330926158;JXG.OBJECT_TYPE_TURTLE=5198933;JXG.OBJECT_CLASS_POINT=1;JXG.OBJECT_CLASS_LINE=2;JXG.OBJECT_CLASS_CIRCLE=3;JXG.OBJECT_CLASS_CURVE=4;JXG.OBJECT_CLASS_AREA=5;JXG.OBJECT_CLASS_OTHER=6;JXG.GeometryElement=function(){this.board=null;this.id="";this.needsUpdate=true;this.name="";this.visProp={};this.isReal=true;this.visProp.dash=0;this.childElements={};this.hasLabel=false;this.notExistingParents={};this.traced=false;this.traces={};this.numTraces=0;this.transformations=[];this.baseElement=null;this.descendants={};this.ancestors={};this.symbolic={};this.stdform=[1,0,0,0,1,1,0,0];this.afterFirstUpdate=false;this.needsRegularUpdate=true};JXG.GeometryElement.prototype.init=function(b,d,a){if(typeof(b)=="string"){b=JXG.JSXGraph.boards[b]}this.board=b;this.id=d;if((a!=null)&&(typeof a!="undefined")){a=a}else{a=this.board.generateName(this)}this.board.elementsByName[a]=this;this.name=a;this.visProp.strokeColor=this.board.options.elements.color.strokeColor;this.visProp.highlightStrokeColor=this.board.options.elements.color.highlightStrokeColor;this.visProp.fillColor=this.board.options.elements.color.fillColor;this.visProp.highlightFillColor=this.board.options.elements.color.highlightFillColor;this.visProp.strokeWidth=this.board.options.elements.strokeWidth;this.visProp.strokeOpacity=this.board.options.elements.color.strokeOpacity;this.visProp.highlightStrokeOpacity=this.board.options.elements.color.highlightStrokeOpacity;this.visProp.fillOpacity=this.board.options.elements.color.fillOpacity;this.visProp.highlightFillOpacity=this.board.options.elements.color.highlightFillOpacity;this.visProp.draft=this.board.options.elements.draft.draft;this.visProp.visible=true};JXG.GeometryElement.prototype.addChild=function(d){this.childElements[d.id]=d;this.addDescendants(d);d.ancestors[this.id]=this;for(var b in this.descendants){this.descendants[b].ancestors[this.id]=this;for(var a in this.ancestors){this.descendants[b].ancestors[this.ancestors[a].id]=this.ancestors[a]}}for(var b in this.ancestors){for(var a in this.descendants){this.ancestors[b].descendants[this.descendants[a].id]=this.descendants[a]}}};JXG.GeometryElement.prototype.addDescendants=function(b){this.descendants[b.id]=b;for(var a in b.childElements){this.addDescendants(b.childElements[a])}};JXG.GeometryElement.prototype.generatePolynomial=function(){return[]};JXG.GeometryElement.prototype.update=function(){if(this.traced){this.cloneToBackground(true)}};JXG.GeometryElement.prototype.updateRenderer=function(){};JXG.GeometryElement.prototype.hideElement=function(){this.visProp.visible=false;this.board.renderer.hide(this);if(this.label!=null&&this.hasLabel){this.label.hiddenByParent=true;if(this.label.content.visProp.visible){this.board.renderer.hide(this.label.content)}}};JXG.GeometryElement.prototype.showElement=function(){this.visProp.visible=true;this.board.renderer.show(this);if(this.label!=null&&this.hasLabel&&this.label.hiddenByParent){this.label.hiddenByParent=false;if(this.label.content.visProp.visible){this.board.renderer.show(this.label.content)}}};JXG.GeometryElement.prototype.setProperty=function(){var d;var e;var h;for(var g=0;g<arguments.length;g++){var b=arguments[g];if(typeof b=="string"){h=b.split(":")}else{if(!JXG.IsArray(b)){for(var f in b){this.setProperty([f,b[f]])}return}else{h=b}}switch(h[0].replace(/\s+/g).toLowerCase()){case"strokewidth":this.visProp.strokeWidth=h[1];this.board.renderer.setObjectStrokeWidth(this,this.visProp.strokeWidth);break;case"strokecolor":d=h[1];if(d.length=="9"&&d.substr(0,1)=="#"){e=d.substr(7,2);d=d.substr(0,7)}else{e="FF"}this.visProp.strokeColor=d;this.visProp.strokeOpacity=parseInt(e.toUpperCase(),16)/255;this.board.renderer.setObjectStrokeColor(this,this.visProp.strokeColor,this.visProp.strokeOpacity);break;case"fillcolor":d=h[1];if(d.length=="9"&&d.substr(0,1)=="#"){e=d.substr(7,2);d=d.substr(0,7)}else{e="FF"}this.visProp.fillColor=d;this.visProp.fillOpacity=parseInt(e.toUpperCase(),16)/255;this.board.renderer.setObjectFillColor(this,this.visProp.fillColor,this.visProp.fillOpacity);break;case"highlightstrokecolor":d=h[1];if(d.length=="9"&&d.substr(0,1)=="#"){e=d.substr(7,2);d=d.substr(0,7)}else{e="FF"}this.visProp.highlightStrokeColor=d;this.visProp.highlightStrokeOpacity=parseInt(e.toUpperCase(),16)/255;break;case"highlightfillcolor":d=h[1];if(d.length=="9"&&d.substr(0,1)=="#"){e=d.substr(7,2);d=d.substr(0,7)}else{e="FF"}this.visProp.highlightFillColor=d;this.visProp.highlightFillOpacity=parseInt(e.toUpperCase(),16)/255;break;case"fillopacity":this.visProp.fillOpacity=h[1];this.board.renderer.setObjectFillColor(this,this.visProp.fillColor,this.visProp.fillOpacity);break;case"strokeopacity":this.visProp.strokeOpacity=h[1];this.board.renderer.setObjectStrokeColor(this,this.visProp.strokeColor,this.visProp.strokeOpacity);break;case"highlightfillopacity":this.visProp.highlightFillOpacity=h[1];break;case"strokeopacity":this.visProp.highlightStrokeOpacity=h[1];break;case"labelcolor":d=h[1];if(d.length=="9"&&d.substr(0,1)=="#"){e=d.substr(7,2);d=d.substr(0,7)}else{e="FF"}if(e=="00"){if(this.label!=null&&this.hasLabel){this.label.content.hideElement()}}if(this.label!=null&&this.hasLabel){this.label.color=d;this.board.renderer.setObjectStrokeColor(this.label.content,d,e)}if(this.type==JXG.OBJECT_TYPE_TEXT){this.visProp.strokeColor=d;this.board.renderer.setObjectStrokeColor(this,this.visProp.strokeColor,1)}break;case"showinfobox":if(h[1]=="false"||h[1]==false){this.showInfobox=false}else{if(h[1]=="true"||h[1]==true){this.showInfobox=true}}break;case"visible":if(h[1]=="false"||h[1]==false){this.visProp.visible=false;this.hideElement()}else{if(h[1]=="true"||h[1]==true){this.visProp.visible=true;this.showElement()}}break;case"dash":this.setDash(h[1]);break;case"trace":if(h[1]=="false"||h[1]==false){this.traced=false}else{if(h[1]=="true"||h[1]==true){this.traced=true}}break;case"style":this.setStyle(1*h[1]);break;case"fixed":this.fixed=(h[1]=="false")?false:true;break;case"draft":if(h[1]=="false"||h[1]==false){if(this.visProp.draft==true){this.visProp.draft=false;this.board.renderer.removeDraft(this)}}else{if(h[1]=="true"||h[1]==true){this.visProp.draft=true;this.board.renderer.setDraft(this)}}break;case"straightfirst":if(h[1]=="false"||h[1]==false){this.visProp.straightFirst=false}else{if(h[1]=="true"||h[1]==true){this.visProp.straightFirst=true}}this.setStraight(this.visProp.straightFirst,this.visProp.straightLast);break;case"straightlast":if(h[1]=="false"||h[1]==false){this.visProp.straightLast=false}else{if(h[1]=="true"||h[1]==true){this.visProp.straightLast=true}}this.setStraight(this.visProp.straightFirst,this.visProp.straightLast);break;case"firstarrow":if(h[1]=="false"||h[1]==false){this.visProp.firstArrow=false}else{if(h[1]=="true"||h[1]==true){this.visProp.firstArrow=true}}this.setArrow(this.visProp.firstArrow,this.visProp.lastArrow);break;case"lastarrow":if(h[1]=="false"||h[1]==false){this.visProp.lastArrow=false}else{if(h[1]=="true"||h[1]==true){this.visProp.lastArrow=true}}this.setArrow(this.visProp.firstArrow,this.visProp.lastArrow);break;case"curvetype":this.curveType=h[1];break;case"fontsize":this.visProp.fontSize=h[1];break;case"insertticks":if(this.type==JXG.OBJECT_TYPE_TICKS){var a=this.insertTicks;this.insertTicks=true;if(h[1]=="false"||h[1]==false){this.insertTicks=false}if(a!=this.insertTicks){this.calculateTicksCoordinates()}}break;case"drawlabels":if(this.type==JXG.OBJECT_TYPE_TICKS){var a=this.drawLabels;this.drawLabels=true;if(h[1]=="false"||h[1]==false){this.drawLabels=false}if(a!=this.drawLabels){this.calculateTicksCoordinates()}}break;case"drawzero":if(this.type==JXG.OBJECT_TYPE_TICKS){var a=this.drawZero;this.drawZero=true;if(h[1]=="false"||h[1]==false){this.drawZero=false}if(a!=this.drawZero){this.calculateTicksCoordinates()}}break;case"minorticks":if(this.type==JXG.OBJECT_TYPE_TICKS){var a=this.minorTicks;if((h[1]!=null)&&(h[1]>0)){this.minorTicks=h[1]}if(a!=this.minorTicks){this.calculateTicksCoordinates()}}break;case"majortickheight":if(this.type==JXG.OBJECT_TYPE_TICKS){var a=this.majorHeight;if((h[1]!=null)&&(h[1]>0)){this.majorHeight=h[1]}if(a!=this.majorHeight){this.calculateTicksCoordinates()}}break;case"minortickheight":if(this.type==JXG.OBJECT_TYPE_TICKS){var a=this.minorHeight;if((h[1]!=null)&&(h[1]>0)){this.minorHeight=h[1]}if(a!=this.minorHeight){this.calculateTicksCoordinates()}}break;case"snapwidth":if(this.type==JXG.OBJECT_TYPE_GLIDER){this.snapWidth=h[1]}}}};JXG.GeometryElement.prototype.setDash=function(a){this.visProp.dash=a;this.board.renderer.setObjectDash(this)};JXG.GeometryElement.prototype.prepareUpdate=function(){this.needsUpdate=true;return;for(var a in this.childElements){if(this.board.objects[a]!=undefined){this.childElements[a].prepareUpdate()}else{delete (this.childElements[a])}}};JXG.GeometryElement.prototype.remove=function(){this.board.renderer.remove(document.getElementById(this.id));if(this.hasLabel){this.board.renderer.remove(document.getElementById(this.label.content.id))}};JXG.GeometryElement.prototype.getTextAnchor=function(){return new JXG.Coords(JXG.COORDS_BY_USER,[0,0],this.board)};JXG.GeometryElement.prototype.getLabelAnchor=function(){return new JXG.Coords(JXG.COORDS_BY_USER,[0,0],this.board)};JXG.GeometryElement.prototype.setStyle=function(a){};JXG.GeometryElement.prototype.setStraight=function(a,b){};JXG.GeometryElement.prototype.setArrow=function(b,a){};JXG.GeometryElement.prototype.createLabel=function(b){var a=false;this.nameHTML=this.board.algebra.replaceSup(this.board.algebra.replaceSub(this.name));this.label={};if(typeof b=="undefined"||b==true){if(this.board.objects[this.id]==null){this.board.objects[this.id]=this;a=true}this.label.relativeCoords=[10,10];this.label.content=new JXG.Text(this.board,this.nameHTML,this.id,[this.label.relativeCoords[0]/(this.board.unitX*this.board.zoomX),this.label.relativeCoords[1]/(this.board.unitY*this.board.zoomY)],this.id+"Label","",null,true);if(a){delete (this.board.objects[this.id])}this.label.color="#000000";if(!this.visProp.visible){this.label.hiddenByParent=true;this.label.content.visProp.visible=false}this.hasLabel=true}};JXG.GeometryElement.prototype.addLabelToElement=function(){this.createLabel(true);this.label.content.id=this.id+"Label";this.board.addText(this.label.content);this.board.renderer.drawText(this.label.content);if(!this.label.content.visProp.visible){board.renderer.hide(this.label.content)}};JXG.GeometryElement.prototype.clearTrace=function(){for(var a in this.traces){this.board.renderer.remove(this.traces[a])}this.numTraces=0};JXG.GeometryElement.prototype.cloneToBackground=function(a){return};JXG.GeometryElement.prototype.normalize=function(){this.stdform=this.board.algebra.normalize(this.stdform)};JXG.GeometryElement.prototype.toJSON=function(){var b='{"name":'+this.name;b+=', "id":'+this.id;var d=[];for(var a in this.visProp){if(this.visProp[a]!=null){d.push('"'+a+'":'+this.visProp[a])}}b+=', "visProp":{'+d.toString()+"}";b+="}";return b};JXG.COORDS_BY_USER=1;JXG.COORDS_BY_SCREEN=2;JXG.Coords=function(d,b,a){this.board=a;this.usrCoords=[1,0,0];this.scrCoords=[1,0,0];if(d==JXG.COORDS_BY_USER){if(b.length<=2){this.usrCoords[1]=b[0];this.usrCoords[2]=b[1]}else{this.usrCoords[0]=b[0];this.usrCoords[1]=b[1];this.usrCoords[2]=b[2];this.normalizeUsrCoords()}this.usr2screen()}else{this.scrCoords[1]=b[0];this.scrCoords[2]=b[1];this.screen2usr()}};JXG.Coords.prototype.normalizeUsrCoords=function(){var a=0.000001;if(Math.abs(this.usrCoords[0])>a){this.usrCoords[1]/=this.usrCoords[0];this.usrCoords[2]/=this.usrCoords[0];this.usrCoords[0]=1}};JXG.Coords.prototype.usr2screen=function(){this.scrCoords[0]=Math.round(this.usrCoords[0]);this.scrCoords[1]=Math.round(this.usrCoords[0]*this.board.origin.scrCoords[1]+this.usrCoords[1]*this.board.unitX*this.board.zoomX);this.scrCoords[2]=Math.round(this.usrCoords[0]*this.board.origin.scrCoords[2]-this.usrCoords[2]*this.board.unitY*this.board.zoomY)};JXG.Coords.prototype.screen2usr=function(){var d=this.board.origin.scrCoords,a=this.board;this.usrCoords[0]=1;this.usrCoords[1]=(this.scrCoords[1]-d[1])/(a.unitX*a.zoomX);this.usrCoords[2]=(d[2]-this.scrCoords[2])/(a.unitY*a.zoomY)};JXG.Coords.prototype.distance=function(g,e){var b=0,a,d;if(g==JXG.COORDS_BY_USER){for(a=0;a<=this.board.dimension;a++){d=this.usrCoords[a]-e.usrCoords[a];b+=d*d}}else{for(a=0;a<=this.board.dimension;a++){d=this.scrCoords[a]-e.scrCoords[a];b+=d*d}}return Math.sqrt(b)};JXG.Coords.prototype.setCoordinates=function(b,a){if(b==JXG.COORDS_BY_USER){if(a.length==2){this.usrCoords[0]=1;this.usrCoords[1]=a[0];this.usrCoords[2]=a[1]}else{this.usrCoords[0]=a[0];this.usrCoords[1]=a[1];this.usrCoords[2]=a[2];this.normalizeUsrCoords()}this.usr2screen()}else{this.scrCoords[1]=a[0];this.scrCoords[2]=a[1];this.screen2usr()}};JXG.POINT_STYLE_X_SMALL=0;JXG.POINT_STYLE_X=1;JXG.POINT_STYLE_X_BIG=2;JXG.POINT_STYLE_CIRCLE_TINY=3;JXG.POINT_STYLE_CIRCLE_SMALL=4;JXG.POINT_STYLE_CIRCLE=5;JXG.POINT_STYLE_CIRCLE_BIG=6;JXG.POINT_STYLE_SQUARE_SMALL=7;JXG.POINT_STYLE_SQUARE=8;JXG.POINT_STYLE_SQUARE_BIG=9;JXG.POINT_STYLE_PLUS_SMALL=10;JXG.POINT_STYLE_PLUS=11;JXG.POINT_STYLE_PLUS_BIG=12;JXG.Point=function(e,f,g,b,a,d){this.constructor();this.type=JXG.OBJECT_TYPE_POINT;this.elementClass=JXG.OBJECT_CLASS_POINT;this.init(e,g,b);if(f==null){f=[0,0]}this.coords=new JXG.Coords(JXG.COORDS_BY_USER,f,this.board);this.initialCoords=new JXG.Coords(JXG.COORDS_BY_USER,f,this.board);this.showInfobox=true;this.label={};this.label.relativeCoords=[10,10];this.nameHTML=this.board.algebra.replaceSup(this.board.algebra.replaceSub(this.name));if(typeof d=="undefined"||d==true){this.board.objects[this.id]=this;this.label.content=new JXG.Text(this.board,this.nameHTML,this.id,[this.label.relativeCoords[0]/(this.board.unitX*this.board.zoomX),this.label.relativeCoords[1]/(this.board.unitY*this.board.zoomY)],this.id+"Label","",null,true);delete (this.board.objects[this.id]);this.label.color="#000000";if(!a){this.label.hiddenByParent=true;this.label.content.visProp.visible=false}this.hasLabel=true}else{this.showInfobox=false}this.fixed=false;this.position=null;this.onPolygon=false;this.visProp.style=this.board.options.point.style;this.r=this.board.options.precision.hasPoint;this.visProp.fillColor=this.board.options.point.fillColor;this.visProp.highlightFillColor=this.board.options.point.highlightFillColor;this.visProp.strokeColor=this.board.options.point.strokeColor;this.visProp.highlightStrokeColor=this.board.options.point.highlightStrokeColor;this.visProp.visible=a;this.slideObject=null;this.group=[];this.id=this.board.addPoint(this)};JXG.Point.prototype=new JXG.GeometryElement();JXG.Point.prototype.hasPoint=function(b,d){var a=this.coords.scrCoords;return((Math.abs(a[1]-b)<this.r+2)&&(Math.abs(a[2]-d))<this.r+2)};JXG.Point.prototype.updateConstraint=function(){};JXG.Point.prototype.update=function(f){if(!this.needsUpdate){return}if(typeof f=="undefined"){f=false}if(this.traced){this.cloneToBackground(true)}if(this.type==JXG.OBJECT_TYPE_GLIDER){if(this.slideObject.type==JXG.OBJECT_TYPE_CIRCLE){if(f){this.coords.setCoordinates(JXG.COORDS_BY_USER,[this.slideObject.midpoint.X()+Math.cos(this.position),this.slideObject.midpoint.Y()+Math.sin(this.position)]);this.coords=this.board.algebra.projectPointToCircle(this,this.slideObject)}else{this.coords=this.board.algebra.projectPointToCircle(this,this.slideObject);this.position=this.board.algebra.rad([this.slideObject.midpoint.X()+1,this.slideObject.midpoint.Y()],this.slideObject.midpoint,this)}}else{if(this.slideObject.type==JXG.OBJECT_TYPE_LINE){this.coords=this.board.algebra.projectPointToLine(this,this.slideObject);var e=this.slideObject.point1.coords;var j=this.slideObject.point2.coords;if(f){if(Math.abs(e.usrCoords[0])>=JXG.Math.eps&&Math.abs(j.usrCoords[0])>=JXG.Math.eps){this.coords.setCoordinates(JXG.COORDS_BY_USER,[e.usrCoords[1]+this.position*(j.usrCoords[1]-e.usrCoords[1]),e.usrCoords[2]+this.position*(j.usrCoords[2]-e.usrCoords[2])])}}else{var k=1;var w=e.distance(JXG.COORDS_BY_USER,this.coords);var b=e.distance(JXG.COORDS_BY_USER,j);var h=j.distance(JXG.COORDS_BY_USER,this.coords);if(((w>b)||(h>b))&&(w<h)){k=-1}this.position=k*w/b;if(this.snapWidth!=null&&Math.abs(this._smax-this._smin)>=JXG.Math.eps){var x=Math.round(this.Value()/this.snapWidth)*this.snapWidth;this.position=k*(x-this._smin)/(this._smax-this._smin);this.update(true)}}var d=this.slideObject.point1.coords.scrCoords;var u=this.slideObject.point2.coords.scrCoords;var g;if(this.slideObject.getSlope()==0){g=1}else{g=2}var o=this.coords.scrCoords[g];if(!this.slideObject.visProp.straightFirst){if(d[g]<u[g]){if(o<d[g]){this.coords=this.slideObject.point1.coords;this.position=0}}else{if(d[g]>u[g]){if(o>d[g]){this.coords=this.slideObject.point1.coords;this.position=0}}}}if(!this.slideObject.visProp.straightLast){if(d[g]<u[g]){if(o>u[g]){this.coords=this.slideObject.point2.coords;this.position=1}}else{if(d[g]>u[g]){if(o<u[g]){this.coords=this.slideObject.point2.coords;this.position=1}}}}if(this.onPolygon){var z=this.slideObject.point1.coords;var q=this.slideObject.point2.coords;if(Math.abs(this.coords.scrCoords[1]-z.scrCoords[1])<this.r&&Math.abs(this.coords.scrCoords[2]-z.scrCoords[2])<this.r){var a=this.slideObject.parentPolygon;for(var g=0;g<a.borders.length;g++){if(this.slideObject==a.borders[g]){this.slideObject=a.borders[(g-1+a.borders.length)%a.borders.length];break}}}else{if(Math.abs(this.coords.scrCoords[1]-q.scrCoords[1])<this.r&&Math.abs(this.coords.scrCoords[2]-q.scrCoords[2])<this.r){var a=this.slideObject.parentPolygon;for(var g=0;g<a.borders.length;g++){if(this.slideObject==a.borders[g]){this.slideObject=a.borders[(g+1+a.borders.length)%a.borders.length];break}}}}}}else{if(this.slideObject.type==JXG.OBJECT_TYPE_CURVE){this.updateConstraint();this.coords=this.board.algebra.projectPointToCurve(this,this.slideObject)}else{if(this.slideObject.type==JXG.OBJECT_TYPE_TURTLE){this.updateConstraint();this.coords=this.board.algebra.projectPointToTurtle(this,this.slideObject)}}}}}if(this.type==JXG.OBJECT_TYPE_CAS){this.updateConstraint()}this.updateTransform();this.needsUpdate=false};JXG.Point.prototype.updateRenderer=function(){if(this.visProp.visible){var a=this.isReal;this.isReal=(isNaN(this.coords.usrCoords[1]+this.coords.usrCoords[2]))?false:true;this.isReal=(Math.abs(this.coords.usrCoords[0])>this.board.algebra.eps)?this.isReal:false;if(this.isReal){if(a!=this.isReal){this.board.renderer.show(this);if(this.hasLabel&&this.label.content.visProp.visible){this.board.renderer.show(this.label.content)}}this.board.renderer.updatePoint(this)}else{if(a!=this.isReal){this.board.renderer.hide(this);if(this.hasLabel&&this.label.content.visProp.visible){this.board.renderer.hide(this.label.content)}}}}if(this.hasLabel&&this.label.content.visProp.visible&&this.isReal){this.label.content.update();this.board.renderer.updateText(this.label.content)}};JXG.Point.prototype.X=function(){return this.coords.usrCoords[1]};JXG.Point.prototype.Y=function(){return this.coords.usrCoords[2]};JXG.Point.prototype.Z=function(){return this.coords.usrCoords[0]};JXG.Point.prototype.XEval=function(){return this.coords.usrCoords[1]};JXG.Point.prototype.YEval=function(){return this.coords.usrCoords[2]};JXG.Point.prototype.ZEval=function(){return this.coords.usrCoords[0]};JXG.Point.prototype.Dist=function(a){return this.coords.distance(JXG.COORDS_BY_USER,a.coords)};JXG.Point.prototype.setPositionDirectly=function(e,a,d){var b=this.coords;this.coords=new JXG.Coords(e,[a,d],this.board);if(this.group.length!=0){this.group[this.group.length-1].dX=this.coords.scrCoords[1]-b.scrCoords[1];this.group[this.group.length-1].dY=this.coords.scrCoords[2]-b.scrCoords[2];this.group[this.group.length-1].update(this)}else{this.update()}};JXG.Point.prototype.setPositionByTransform=function(f,a,e){var d=this.coords;var b=this.board.createElement("transform",[a,e],{type:"translate"});if(this.transformations.length>0&&this.transformations[this.transformations.length-1].isNumericMatrix){this.transformations[this.transformations.length-1].melt(b)}else{this.addTransform(this,b)}if(this.group.length!=0){}else{this.update()}};JXG.Point.prototype.setPosition=function(d,a,b){this.setPositionByTransform(d,a,b)};JXG.Point.prototype.makeGlider=function(a){this.slideObject=JXG.GetReferenceFromParameter(this.board,a);this.type=JXG.OBJECT_TYPE_GLIDER;this.snapWidth=null;this.slideObject.addChild(this);if(this.slideObject.elementClass==JXG.OBJECT_CLASS_LINE){this.generatePolynomial=function(){return this.slideObject.generatePolynomial(this)}}else{if(this.slideObject.elementClass==JXG.OBJECT_CLASS_CIRCLE){this.generatePolynomial=function(){return this.slideObject.generatePolynomial(this)}}}this.needsUpdate=true;this.update()};JXG.Point.prototype.addConstraint=function(f){this.type=JXG.OBJECT_TYPE_CAS;var g=this.board.elementsByName;var h=[];var a;for(var e=0;e<f.length;e++){var b=f[e];if(typeof b=="string"){var d=this.board.algebra.geonext2JS(b);h[e]=new Function("","return "+d+";")}else{if(typeof b=="function"){h[e]=b}else{if(typeof b=="number"){h[e]=function(j){return function(){return j}}(b)}else{if(typeof b=="object"&&typeof b.Value=="function"){h[e]=(function(j){return function(){return j.Value()}})(b)}}}}}if(f.length==1){this.updateConstraint=function(){this.coords=h[0]()};if(!this.board.isSuspendedUpdate){this.update()}return}else{if(f.length==2){this.XEval=h[0];this.YEval=h[1];a="this.coords.setCoordinates(JXG.COORDS_BY_USER,[this.XEval(),this.YEval()]);";this.updateConstraint=new Function("",a)}else{this.ZEval=h[0];this.XEval=h[1];this.YEval=h[2];a="this.coords.setCoordinates(JXG.COORDS_BY_USER,[this.ZEval(),this.XEval(),this.YEval()]);";this.updateConstraint=new Function("",a)}}if(!this.board.isSuspendedUpdate){this.update()}return};JXG.Point.prototype.updateTransform=function(){if(this.transformations.length==0||this.baseElement==null){return}if(this===this.baseElement){var b=this.transformations[0].apply(this.baseElement,"self")}else{var b=this.transformations[0].apply(this.baseElement)}this.coords.setCoordinates(JXG.COORDS_BY_USER,[b[1],b[2]]);for(var a=1;a<this.transformations.length;a++){b=this.transformations[a].apply(this);this.coords.setCoordinates(JXG.COORDS_BY_USER,[b[1],b[2]])}};JXG.Point.prototype.addTransform=function(d,a){if(this.transformations.length==0){this.baseElement=d}var e;if(JXG.IsArray(a)){e=a}else{e=[a]}for(var b=0;b<e.length;b++){this.transformations.push(e[b])}};JXG.Point.prototype.startAnimation=function(a,b){if((this.type==JXG.OBJECT_TYPE_GLIDER)&&(typeof this.intervalCode=="undefined")){this.intervalCode=window.setInterval("JXG.JSXGraph.boards['"+this.board.id+"'].objects['"+this.id+"'].animate("+a+", "+b+")",250);if(typeof this.intervalCount=="undefined"){this.intervalCount=0}}};JXG.Point.prototype.stopAnimation=function(){if(typeof this.intervalCode!="undefined"){window.clearInterval(this.intervalCode);delete (this.intervalCode)}};JXG.Point.prototype.animate=function(q,g){this.intervalCount++;if(this.intervalCount>g){this.intervalCount=0}if(this.slideObject.type==JXG.OBJECT_TYPE_LINE){var b=this.slideObject.point1.coords.distance(JXG.COORDS_BY_SCREEN,this.slideObject.point2.coords);var k=this.slideObject.getSlope();var h;var f;if(k!="INF"){var e=Math.atan(k);h=Math.round((this.intervalCount/g)*b*Math.cos(e));f=Math.round((this.intervalCount/g)*b*Math.sin(e))}else{h=0;f=Math.round((this.intervalCount/g)*b)}var d;var o=1;if(q<0){d=this.slideObject.point2;if(this.slideObject.point2.coords.scrCoords[1]-this.slideObject.point1.coords.scrCoords[1]>0){o=-1}else{if(this.slideObject.point2.coords.scrCoords[1]-this.slideObject.point1.coords.scrCoords[1]==0){if(this.slideObject.point2.coords.scrCoords[2]-this.slideObject.point1.coords.scrCoords[2]>0){o=-1}}}}else{d=this.slideObject.point1;if(this.slideObject.point1.coords.scrCoords[1]-this.slideObject.point2.coords.scrCoords[1]>0){o=-1}else{if(this.slideObject.point1.coords.scrCoords[1]-this.slideObject.point2.coords.scrCoords[1]==0){if(this.slideObject.point1.coords.scrCoords[2]-this.slideObject.point2.coords.scrCoords[2]>0){o=-1}}}}this.coords.setCoordinates(JXG.COORDS_BY_SCREEN,[d.coords.scrCoords[1]+o*h,d.coords.scrCoords[2]+o*f])}else{if(this.slideObject.type==JXG.OBJECT_TYPE_CURVE){var a;if(q>0){a=Math.round(this.intervalCount/g*this.board.canvasWidth)}else{a=Math.round((g-this.intervalCount)/g*this.board.canvasWidth)}this.coords.setCoordinates(JXG.COORDS_BY_SCREEN,[a,0]);this.coords=this.board.algebra.projectPointToCurve(this,this.slideObject)}else{if(this.slideObject.type==JXG.OBJECT_TYPE_CIRCLE){var e;if(q<0){e=this.intervalCount/g*2*Math.PI}else{e=(g-this.intervalCount)/g*2*Math.PI}var j=this.slideObject.getRadius();this.coords.setCoordinates(JXG.COORDS_BY_USER,[this.slideObject.midpoint.coords.usrCoords[1]+j*Math.cos(e),this.slideObject.midpoint.coords.usrCoords[2]+j*Math.sin(e)])}}}this.board.update(this)};JXG.Point.prototype.setStyle=function(a){this.visProp.style=a;this.board.renderer.changePointStyle(this)};JXG.Point.prototype.remove=function(){if(this.hasLabel){this.board.renderer.remove(document.getElementById(this.label.content.id))}if(this.visProp.style>=3&&this.visProp.style<=9){this.board.renderer.remove(document.getElementById(this.id))}else{this.board.renderer.remove(document.getElementById(this.id+"_x1"));this.board.renderer.remove(document.getElementById(this.id+"_x2"))}};JXG.Point.prototype.getTextAnchor=function(){return this.coords};JXG.Point.prototype.getLabelAnchor=function(){return this.coords};JXG.Point.prototype.cloneToBackground=function(a){var b={};b.id=this.id+"T"+this.numTraces;this.numTraces++;b.coords=this.coords;b.visProp=this.visProp;b.elementClass=JXG.OBJECT_CLASS_POINT;this.board.renderer.drawPoint(b);if((this.visProp.style>=3)&&(this.visProp.style<=9)){this.traces[b.id]=document.getElementById(b.id)}else{this.traces[b.id+"_x1"]=document.getElementById(b.id+"_x1");this.traces[b.id+"_x2"]=document.getElementById(b.id+"_x2")}delete b};JXG.createPoint=function(f,b,g){var e;if(g==null){g={}}if(typeof g.withLabel=="undefined"){g.withLabel=true}var a=false;for(var d=0;d<b.length;d++){if(typeof b[d]=="function"||typeof b[d]=="string"){a=true}}if(!a){if((JXG.IsNumber(b[0]))&&(JXG.IsNumber(b[1]))){e=new JXG.Point(f,b,g.id,g.name,(g.visible==undefined)||f.algebra.str2Bool(g.visible),g.withLabel);if(g.slideObject!=null){e.makeGlider(g.slideObject)}else{e.baseElement=e}}else{if((typeof b[0]=="object")&&(typeof b[1]=="object")){e=new JXG.Point(f,[0,0],g.id,g.name,(g.visible==undefined)||f.algebra.str2Bool(g.visible),g.withLabel);e.addTransform(b[0],b[1])}else{throw ("JSXGraph error: Can't create point with parent types '"+(typeof b[0])+"' and '"+(typeof b[1])+"'.")}}}else{e=new JXG.Point(f,[0,0],g.id,g.name,(g.visible==undefined)||f.algebra.str2Bool(g.visible),g.withLabel);e.addConstraint(b)}return e};JXG.createGlider=function(d,a,e){var b;if(e==null){e={}}if(typeof e.withLabel=="undefined"){e.withLabel=true}if(a.length==1){b=new JXG.Point(d,[0,0],e.id,e.name,(e.visible==undefined)||d.algebra.str2Bool(e.visible),e.withLabel)}else{b=d.createElement("point",a.slice(0,-1),e)}b.makeGlider(a[a.length-1]);return b};JXG.createIntersectionPoint=function(e,b,a){var d;if(b.length>=3){if(b.length==3){b.push(null)}d=e.createElement("point",[e.intersection(b[0],b[1],b[2],b[3])],a)}b[0].addChild(d);b[1].addChild(d);d.generatePolynomial=function(){var f=b[0].generatePolynomial(d);var g=b[1].generatePolynomial(d);if((f.length==0)||(g.length==0)){return[]}else{return[f[0],g[0]]}};return d};JXG.JSXGraph.registerElement("point",JXG.createPoint);JXG.JSXGraph.registerElement("glider",JXG.createGlider);JXG.JSXGraph.registerElement("intersection",JXG.createIntersectionPoint);JXG.Line=function(d,f,e,g,a,b){this.constructor();this.type=JXG.OBJECT_TYPE_LINE;this.elementClass=JXG.OBJECT_CLASS_LINE;this.init(d,g,a);this.point1=JXG.GetReferenceFromParameter(this.board,f);this.point2=JXG.GetReferenceFromParameter(this.board,e);this.image=null;this.imageTransformMatrix=[[1,0,0],[0,1,0],[0,0,1]];this.r=this.board.options.precision.hasPoint;this.visProp.fillColor=this.board.options.line.fillColor;this.visProp.highlightFillColor=this.board.options.line.highlightFillColor;this.visProp.strokeColor=this.board.options.line.strokeColor;this.visProp.highlightStrokeColor=this.board.options.line.highlightStrokeColor;this.visProp.straightFirst=this.board.options.line.straightFirst;this.visProp.straightLast=this.board.options.line.straightLast;this.visProp.visible=true;this.visProp.firstArrow=this.board.options.line.firstArrow;this.visProp.lastArrow=this.board.options.line.lastArrow;this.ticks=[];this.defaultTicks=null;this.parentPolygon=null;this.createLabel(b);this.id=this.board.addLine(this);this.point1.addChild(this);this.point2.addChild(this);this.update()};JXG.Line.prototype=new JXG.GeometryElement;JXG.Line.prototype.hasPoint=function(j,g){var f=[],q=[1,j,g],k=[],w,d,h,b,o,u,e,a;f[0]=this.stdform[0]-this.stdform[1]*this.board.origin.scrCoords[1]/(this.board.unitX*this.board.zoomX)+this.stdform[2]*this.board.origin.scrCoords[2]/(this.board.unitY*this.board.zoomY);f[1]=this.stdform[1]/(this.board.unitX*this.board.zoomX);f[2]=this.stdform[2]/(-this.board.unitY*this.board.zoomY);w=this.board.algebra.innerProduct(q,f,3)/this.board.algebra.innerProduct(f,f,3);for(d=0;d<3;d++){k[d]=q[d]-w*f[d]}k[1]/=k[0];k[2]/=k[0];k[0]=1;if(this.board.algebra.distance(q,k)>this.r){return false}if(this.visProp.straightFirst&&this.visProp.straightLast){return true}else{h=new JXG.Coords(JXG.COORDS_BY_SCREEN,[k[1],k[2]],this.board);b=this.point1.coords.scrCoords;o=this.point2.coords.scrCoords;u=h.distance(JXG.COORDS_BY_SCREEN,this.point1.coords);e=h.distance(JXG.COORDS_BY_SCREEN,this.point2.coords);a=this.point1.coords.distance(JXG.COORDS_BY_SCREEN,this.point2.coords);if((u>a)||(e>a)){if(u<e){if(!this.visProp.straightFirst){return false}}else{if(!this.visProp.straightLast){return false}}}return true}};JXG.Line.prototype.update=function(){var a;if(this.needsUpdate){if(true||!this.board.geonextCompatibilityMode){this.updateStdform()}for(a=0;a<this.ticks.length;a++){if(typeof this.ticks[a]!="undefined"){this.ticks[a].calculateTicksCoordinates()}}}if(this.traced){this.cloneToBackground(true)}};JXG.Line.prototype.updateStdform=function(){var a=this.board.algebra.crossProduct(this.point1.coords.usrCoords,this.point2.coords.usrCoords);this.stdform[0]=a[0];this.stdform[1]=a[1];this.stdform[2]=a[2];this.stdform[3]=0;this.normalize()};JXG.Line.prototype.updateRenderer=function(){var a;if(this.needsUpdate&&this.visProp.visible){a=this.isReal;this.isReal=(isNaN(this.point1.coords.usrCoords[1]+this.point1.coords.usrCoords[2]+this.point2.coords.usrCoords[1]+this.point2.coords.usrCoords[2]))?false:true;if(this.isReal){if(a!=this.isReal){this.board.renderer.show(this);if(this.hasLabel&&this.label.content.visProp.visible){this.board.renderer.show(this.label.content)}}this.board.renderer.updateLine(this)}else{if(a!=this.isReal){this.board.renderer.hide(this);if(this.hasLabel&&this.label.content.visProp.visible){this.board.renderer.hide(this.label.content)}}}this.needsUpdate=false}if(this.hasLabel&&this.label.content.visProp.visible&&this.isReal){this.label.content.update();this.board.renderer.updateText(this.label.content)}};JXG.Line.prototype.generatePolynomial=function(f){var e=this.point1.symbolic.x,d=this.point1.symbolic.y,h=this.point2.symbolic.x,g=this.point2.symbolic.y,b=f.symbolic.x,a=f.symbolic.y;return[[d,"*",b,"-",d,"*",h,"+",a,"*",h,"-",e,"*",a,"+",e,"*",g,"-",b,"*",g].join("")]};JXG.Line.prototype.getRise=function(){if(Math.abs(this.stdform[2])>=JXG.Math.eps){return -this.stdform[0]/this.stdform[2]}else{return"INF"}};JXG.Line.prototype.getSlope=function(){if(Math.abs(this.stdform[2])>=JXG.Math.eps){return -this.stdform[1]/this.stdform[2]}else{return"INF"}};JXG.Line.prototype.setStraight=function(a,b){this.visProp.straightFirst=a;this.visProp.straightLast=b;this.board.renderer.updateLine(this)};JXG.Line.prototype.setArrow=function(b,a){this.visProp.firstArrow=b;this.visProp.lastArrow=a;this.board.renderer.updateLine(this)};JXG.Line.prototype.getTextAnchor=function(){return new JXG.Coords(JXG.COORDS_BY_USER,[0.5*(this.point2.X()-this.point1.X()),0.5*(this.point2.Y()-this.point1.Y())],this.board)};JXG.Line.prototype.getLabelAnchor=function(){var f,d,b,e,a;if(!this.visProp.straightFirst&&!this.visProp.straightLast){return new JXG.Coords(JXG.COORDS_BY_USER,[this.point2.X()-0.5*(this.point2.X()-this.point1.X()),this.point2.Y()-0.5*(this.point2.Y()-this.point1.Y())],this.board)}else{d=new JXG.Coords(JXG.COORDS_BY_USER,this.point1.coords.usrCoords,this.board);b=new JXG.Coords(JXG.COORDS_BY_USER,this.point2.coords.usrCoords,this.board);this.board.renderer.calcStraight(this,d,b);if(this.visProp.straightFirst){f=d}else{f=b}if(this.label.content!=null){e;a=this.getSlope();if(f.scrCoords[2]==0){if(a=="INF"){e=[10,-10]}else{if(a>=0){e=[10,-10]}else{e=[-10,-10]}}}else{if(f.scrCoords[2]==this.board.canvasHeight){if(a=="INF"){e=[10,10]}else{if(a>=0){e=[-10,10]}else{e=[10,10]}}}}if(f.scrCoords[1]==0){if(a=="INF"){e=[10,10]}else{if(a>=0){e=[10,-10]}else{e=[10,10]}}}else{if(f.scrCoords[1]==this.board.canvasWidth){if(a=="INF"){e=[-10,10]}else{if(a>=0){e=[-10,10]}else{e=[-10,-10]}}}}this.label.content.relativeCoords=new JXG.Coords(JXG.COORDS_BY_USER,[e[0]/(this.board.unitX*this.board.zoomX),e[1]/(this.board.unitY*this.board.zoomY)],this.board)}return f}};JXG.Line.prototype.cloneToBackground=function(b){var e={},d,a;e.id=this.id+"T"+this.numTraces;this.numTraces++;e.point1=this.point1;e.point2=this.point2;e.stdform=this.stdform;e.board={};e.board.unitX=this.board.unitX;e.board.unitY=this.board.unitY;e.board.zoomX=this.board.zoomX;e.board.zoomY=this.board.zoomY;e.board.origin=this.board.origin;e.board.canvasHeight=this.board.canvasHeight;e.board.canvasWidth=this.board.canvasWidth;e.board.dimension=this.board.dimension;e.board.algebra=this.board.algebra;e.visProp=this.visProp;a=this.getSlope();d=this.getRise();e.getSlope=function(){return a};e.getRise=function(){return d};this.board.renderer.enhancedRendering=true;this.board.renderer.drawLine(e);this.board.renderer.enhancedRendering=false;this.traces[e.id]=document.getElementById(e.id);delete e};JXG.Line.prototype.addTransform=function(a){var d,b;if(JXG.IsArray(a)){d=a}else{d=[a]}for(b=0;b<d.length;b++){this.point1.transformations.push(d[b]);this.point2.transformations.push(d[b])}};JXG.Line.prototype.setPosition=function(e,a,d){var b=this.board.createElement("transform",[a,d],{type:"translate"});if(this.point1.transformations.length>0&&this.point1.transformations[this.point1.transformations.length-1].isNumericMatrix){this.point1.transformations[this.point1.transformations.length-1].melt(b)}else{this.point1.addTransform(this.point1,b)}if(this.point2.transformations.length>0&&this.point2.transformations[this.point2.transformations.length-1].isNumericMatrix){this.point2.transformations[this.point2.transformations.length-1].melt(b)}else{this.point2.addTransform(this.point2,b)}};JXG.Line.prototype.X=function(j){var q=this.stdform[1],o=this.stdform[2],k=this.stdform[0],g,f,d,e,h;j*=Math.PI;g=q*Math.cos(j)+o*Math.sin(j);f=k;d=Math.sqrt(g*g+f*f);e=-f/d;h=g/d;if(Math.abs(h)<this.board.algebra.eps){h=1}return e*Math.cos(j)/h};JXG.Line.prototype.Y=function(j){var q=this.stdform[1],o=this.stdform[2],k=this.stdform[0],g,f,d,e,h;j*=Math.PI;g=q*Math.cos(j)+o*Math.sin(j);f=k;d=Math.sqrt(g*g+f*f);e=-f/d;h=g/d;if(Math.abs(h)<this.board.algebra.eps){h=1}return e*Math.sin(j)/h};JXG.Line.prototype.Z=function(h){var f=this.stdform[1],e=this.stdform[2],o=this.stdform[0],d,k,g,j;h*=Math.PI;d=f*Math.cos(h)+e*Math.sin(h);k=o;g=Math.sqrt(d*d+k*k);j=d/g;if(Math.abs(j)>=this.board.algebra.eps){return 1}else{return 0}};JXG.Line.prototype.minX=function(){return 0};JXG.Line.prototype.maxX=function(){return 1};JXG.Line.prototype.addTicks=function(a){if(a.id==""||typeof a.id=="undefined"){a.id=this.id+"_ticks_"+(this.ticks.length+1)}this.board.renderer.drawTicks(a);this.ticks.push(a);this.ticks[this.ticks.length-1].updateRenderer();return a.id};JXG.Line.prototype.removeAllTicks=function(){var a;for(a=this.ticks.length;a>0;a--){this.board.renderer.remove(this.ticks[a-1].rendNode)}this.ticks=new Array()};JXG.Line.prototype.removeTicks=function(d){var b,a;if(this.defaultTicks!=null&&this.defaultTicks==d){this.defaultTicks=null}for(b=this.ticks.length;b>0;b--){if(this.ticks[b-1]==d){this.board.renderer.remove(this.ticks[b-1].rendNode);for(a=0;a<this.ticks[b-1].ticks.length;a++){if(this.ticks[b-1].labels[a]!=null){if(this.ticks[b-1].labels[a].show){this.board.renderer.remove(this.ticks[b-1].labels[a].rendNode)}}}delete (this.ticks[b-1])}}};JXG.createLine=function(e,a,j){var d,g,f,b,h=[];if(j==null){j={}}if(j.withLabel==null||typeof j.withLabel=="undefined"){j.withLabel=false}if(a.length==2){if(a[0].length>1){g=e.createElement("point",a[0],{visible:false,fixed:true})}else{if(a[0].elementClass==JXG.OBJECT_CLASS_POINT){g=JXG.GetReferenceFromParameter(e,a[0])}else{throw ("Can't create line with parent types '"+(typeof a[0])+"' and '"+(typeof a[1])+"'.")}}if(a[1].length>1){f=e.createElement("point",a[1],{visible:false,fixed:true})}else{if(a[1].elementClass==JXG.OBJECT_CLASS_POINT){f=JXG.GetReferenceFromParameter(e,a[1])}else{throw ("Can't create line with parent types '"+(typeof a[0])+"' and '"+(typeof a[1])+"'.")}}d=new JXG.Line(e,g.id,f.id,j.id,j.name,j.withLabel)}else{if(a.length==3){for(b=0;b<3;b++){if(typeof a[b]=="number"){h[b]=function(k){return function(){return k}}(a[b])}else{if(typeof a[b]=="function"){h[b]=a[b]}else{throw ("Can't create line with parent types '"+(typeof a[0])+"' and '"+(typeof a[1])+"' and '"+(typeof a[2])+"'.");return}}}g=e.createElement("point",[function(){return 0},function(){return h[2]()},function(){return -h[1]()}],{visible:false,name:" "});f=e.createElement("point",[function(){return h[2]()*h[2]()+h[1]()*h[1]()},function(){return -h[1]()*h[0]()+h[2]()},function(){return -h[2]()*h[0]()-h[1]()}],{visible:false,name:" "});d=new JXG.Line(e,g.id,f.id,j.id,j.name,j.withLabel)}else{throw ("Can't create line with parent types '"+(typeof a[0])+"' and '"+(typeof a[1])+"'.")}}return d};JXG.JSXGraph.registerElement("line",JXG.createLine);JXG.createSegment=function(d,a,e){var b;if(e==null){e=new Object()}if(e.withLabel==null||typeof e.withLabel=="undefined"){e.withLabel=false}e.straightFirst=false;e.straightLast=false;b=d.createElement("line",a,e);return b};JXG.JSXGraph.registerElement("segment",JXG.createSegment);JXG.createArrow=function(e,b,a){var d;if(a==null){a={}}if(a.withLabel==null||typeof a.withLabel=="undefined"){a.withLabel=false}d=e.createElement("line",b,a);d.setStraight(false,false);d.setArrow(false,true);return d};JXG.JSXGraph.registerElement("arrow",JXG.createArrow);JXG.createAxis=function(f,o,b){var j,h,q,g,d,a,e,k;if((JXG.IsArray(o[0])||JXG.IsPoint(o[0]))&&(JXG.IsArray(o[1])||JXG.IsPoint(o[1]))){if(JXG.IsPoint(o[0])){j=o[0]}else{j=new JXG.Point(f,o[0],"","",false)}if(JXG.IsPoint(o[1])){h=o[1]}else{h=new JXG.Point(f,o[1],"","",false)}j.fixed=true;h.fixed=true;if(b==null){b=new Object()}b.lastArrow=true;b.straightFirst=true;b.straightLast=true;if(b.strokeWidth==null){b.strokeWidth=1}if(b.withLabel==null){b.withLabel=false}q=f.createElement("line",[j,h],b);q.needsRegularUpdate=false;if(b.minorTicks=="undefined"||b.minorTicks==null){b.minorTicks=4}if((b.insertTicks=="undefined")||(b.insertTicks==null)){b.insertTicks="true"}if(b.ticksDistance!="undefined"&&b.ticksDistance!=null){g=b.ticksDistance}else{d=new JXG.Coords(JXG.COORDS_BY_USER,[q.point1.coords.usrCoords.slice(1)],f);a=new JXG.Coords(JXG.COORDS_BY_USER,[q.point2.coords.usrCoords.slice(1)],f);f.renderer.calcStraight(q,d,a);e=d.distance(JXG.COORDS_BY_USER,a);g=1}k=f.createElement("ticks",[q,g],b);k.needsRegularUpdate=false;q.defaultTicks=k}else{throw ("Can't create point with parent types '"+(typeof o[0])+"' and '"+(typeof o[1])+"'.")}return q};JXG.JSXGraph.registerElement("axis",JXG.createAxis);JXG.createTangent=function(q,v,e){var a=v[0],u=a.slideObject,k,o,h,d,b,w,x;if(e==null){e={}}if(e.withLabel==null){e.withLabel=false}if(u.elementClass==JXG.OBJECT_CLASS_LINE){return q.createElement("line",[u.point1,u.point2],e)}else{if(u.elementClass==JXG.OBJECT_CLASS_CURVE){if(u.curveType!="plot"){k=u.X;o=u.Y;return q.createElement("line",[function(){return -a.X()*q.D(o)(a.position)+a.Y()*q.D(k)(a.position)},function(){return q.D(o)(a.position)},function(){return -q.D(k)(a.position)}],e)}else{return q.createElement("line",[function(){h=Math.floor(a.position);if(h==u.numberPoints-1){h--}if(h<0){return 1}return u.Y(h)*u.X(h+1)-u.X(h)*u.Y(h+1)},function(){h=Math.floor(a.position);if(h==u.numberPoints-1){h--}if(h<0){return 0}return u.Y(h+1)-u.Y(h)},function(){h=Math.floor(a.position);if(h==u.numberPoints-1){h--}if(h<0){return 0}return u.X(h)-u.X(h+1)}],e)}}else{if(u.type==JXG.OBJECT_TYPE_TURTLE){return q.createElement("line",[function(){h=Math.floor(a.position);for(d=0;d<u.objects.length;d++){b=u.objects[d];if(b.type==JXG.OBJECT_TYPE_CURVE){if(h<b.numberPoints){break}h-=b.numberPoints}}if(h==b.numberPoints-1){h--}if(h<0){return 1}return b.Y(h)*b.X(h+1)-b.X(h)*b.Y(h+1)},function(){h=Math.floor(a.position);for(d=0;d<u.objects.length;d++){b=u.objects[d];if(b.type==JXG.OBJECT_TYPE_CURVE){if(h<b.numberPoints){break}h-=b.numberPoints}}if(h==b.numberPoints-1){h--}if(h<0){return 0}return b.Y(h+1)-b.Y(h)},function(){h=Math.floor(a.position);for(d=0;d<u.objects.length;d++){b=u.objects[d];if(b.type==JXG.OBJECT_TYPE_CURVE){if(h<b.numberPoints){break}h-=b.numberPoints}}if(h==b.numberPoints-1){h--}if(h<0){return 0}return b.X(h)-b.X(h+1)}],e)}else{if(u.elementClass==JXG.OBJECT_CLASS_CIRCLE){w=function(f){return -u.getRadius()*Math.sin(f)};x=function(f){return u.getRadius()*Math.cos(f)};return q.createElement("line",[function(){return -a.X()*x(a.position)+a.Y()*w(a.position)},function(){return x(a.position)},function(){return -w(a.position)}],e)}}}}};JXG.JSXGraph.registerElement("tangent",JXG.createTangent);JXG.Group=function(f,j,a){var g,e,b,h,d;this.board=f;this.objects={};g=this.board.numObjects;this.board.numObjects++;if((j=="")||(j==null)||(typeof j=="undefined")){this.id=this.board.id+"Group"+g}else{this.id=j}this.type=JXG.OBJECT_TYPE_POINT;this.elementClass=JXG.OBJECT_CLASS_POINT;if((a=="")||(a==null)||(typeof a=="undefined")){this.name="group_"+this.board.generateName(this)}else{this.name=a}delete (this.type);if((arguments.length==4)&&(JXG.IsArray(arguments[3]))){e=arguments[3]}else{e=[];for(b=3;b<arguments.length;b++){e.push(arguments[b])}}for(b=0;b<e.length;b++){h=JXG.GetReferenceFromParameter(this.board,e[b]);if((!h.fixed)&&((h.type==JXG.OBJECT_TYPE_POINT)||(h.type==JXG.OBJECT_TYPE_GLIDER))){if(h.group.length!=0){this.addGroup(h.group[h.group.length-1])}else{this.addPoint(h)}}}for(d in this.objects){this.objects[d].group.push(this)}this.dX=0;this.dY=0};JXG.Group.prototype.ungroup=function(){var a;for(a in this.objects){if(this.objects[a].group[this.objects[a].group.length-1]==this){this.objects[a].group.pop()}delete (this.objects[a])}};JXG.Group.prototype.update=function(a){var d=null,b;for(b in this.objects){d=this.objects[b];if(d.id!=a.id){d.coords=new JXG.Coords(JXG.COORDS_BY_SCREEN,[d.coords.scrCoords[1]+this.dX,d.coords.scrCoords[2]+this.dY],d.board)}}for(b in this.objects){if(this.board.objects[b]!=undefined){this.objects[b].update(false)}else{delete (this.objects[b])}}};JXG.Group.prototype.addPoint=function(a){this.objects[a.id]=a};JXG.Group.prototype.addPoints=function(a){var b;for(b in a){this.objects[b.id]=b}};JXG.Group.prototype.addGroup=function(b){var a;for(a in b.objects){this.addPoint(b.objects[a])}};JXG.createGroup=function(d,b,a){return new JXG.Group(d,a.id,a.name,b)};JXG.JSXGraph.registerElement("group",JXG.createGroup);JXG.Circle=function(f,h,e,b,g,a,d){this.constructor();this.type=JXG.OBJECT_TYPE_CIRCLE;this.elementClass=JXG.OBJECT_CLASS_CIRCLE;this.init(f,g,a);this.method=h;this.midpoint=JXG.GetReferenceFromParameter(this.board,e);this.midpoint.addChild(this);this.visProp.visible=true;this.visProp.fillColor=this.board.options.circle.fillColor;this.visProp.highlightFillColor=this.board.options.circle.highlightFillColor;this.visProp.strokeColor=this.board.options.circle.strokeColor;this.visProp.highlightStrokeColor=this.board.options.circle.highlightStrokeColor;this.point2=null;this.radius=0;this.line=null;this.circle=null;if(h=="twoPoints"){this.point2=JXG.GetReferenceFromParameter(f,b);this.point2.addChild(this);this.radius=this.getRadius()}else{if(h=="pointRadius"){this.generateTerm(b);this.updateRadius()}else{if(h=="pointLine"){this.line=JXG.GetReferenceFromParameter(f,b);this.radius=this.line.point1.coords.distance(JXG.COORDS_BY_USER,this.line.point2.coords)}else{if(h=="pointCircle"){this.circle=JXG.GetReferenceFromParameter(f,b);this.radius=this.circle.getRadius()}}}}if(d!=null){this.createLabel(d)}if(h=="twoPoints"){this.id=this.board.addCircle(this)}else{if(h=="pointRadius"){this.id=this.board.addCircle(this);this.notifyParents(b)}else{if(h=="pointLine"){this.line.addChild(this);this.id=this.board.addCircle(this)}else{if(h=="pointCircle"){this.circle.addChild(this);this.id=this.board.addCircle(this)}}}}};JXG.Circle.prototype=new JXG.GeometryElement;JXG.Circle.prototype.hasPoint=function(a,g){var f=this.board.options.precision.hasPoint;f=f/(this.board.unitX*this.board.zoomX);var e=new JXG.Coords(JXG.COORDS_BY_SCREEN,[a,g],this.board);var b=this.getRadius();var d=Math.sqrt(Math.pow(this.midpoint.coords.usrCoords[1]-e.usrCoords[1],2)+Math.pow(this.midpoint.coords.usrCoords[2]-e.usrCoords[2],2));return(Math.abs(d-b)<f)};JXG.Circle.prototype.generatePolynomial=function(h){var f=this.midpoint.symbolic.x;var e=this.midpoint.symbolic.y;var d=h.symbolic.x;var b=h.symbolic.y;var a=this.generateRadiusSquared();if(a==""){return[]}var g="("+d+"-"+f+")^2 + ("+b+"-"+e+")^2 - ("+a+")";return[g]};JXG.Circle.prototype.generateRadiusSquared=function(){var b="";if(this.method=="twoPoints"){var e=this.midpoint.symbolic.x;var d=this.midpoint.symbolic.y;var g=this.point2.symbolic.x;var f=this.point2.symbolic.y;b="("+g+"-"+e+")^2 + ("+f+"-"+d+")^2"}else{if(this.method=="pointRadius"){if(typeof(this.radius)=="number"){b=""+this.radius*this.radius}}else{if(this.method=="pointLine"){var g=this.line.point1.symbolic.x;var f=this.line.point1.symbolic.y;var a=this.line.point2.symbolic.x;var h=this.line.point2.symbolic.y;b="("+g+"-"+a+")^2 + ("+f+"-"+h+")^2"}else{if(this.method=="pointCircle"){b=this.circle.getRadius()}}}}return b};JXG.Circle.prototype.update=function(){if(this.traced){this.cloneToBackground(true)}if(this.needsUpdate){if(this.method=="pointLine"){this.radius=this.line.point1.coords.distance(JXG.COORDS_BY_USER,this.line.point2.coords)}else{if(this.method=="pointCircle"){this.radius=this.circle.getRadius()}else{if(this.method=="pointRadius"){this.radius=this.updateRadius()}}}if(!this.board.geonextCompatibilityMode){this.updateStdform()}}};JXG.Circle.prototype.updateStdform=function(){this.stdform[3]=0.5;this.stdform[4]=this.getRadius();this.stdform[1]=-this.midpoint.coords.usrCoords[1];this.stdform[2]=-this.midpoint.coords.usrCoords[2];this.normalize()};JXG.Circle.prototype.updateRenderer=function(){if(this.needsUpdate&&this.visProp.visible){var a=this.isReal;this.isReal=(isNaN(this.midpoint.coords.usrCoords[1]+this.midpoint.coords.usrCoords[2]+this.getRadius()))?false:true;if(this.isReal){if(a!=this.isReal){this.board.renderer.show(this);if(this.hasLabel&&this.label.content.visProp.visible){this.board.renderer.show(this.label.content)}}this.board.renderer.updateCircle(this)}else{if(a!=this.isReal){this.board.renderer.hide(this);if(this.hasLabel&&this.label.content.visProp.visible){this.board.renderer.hide(this.label.content)}}}this.needsUpdate=false}if(this.hasLabel&&this.label.content.visProp.visible&&this.isReal){this.label.content.update();this.board.renderer.updateText(this.label.content)}};JXG.Circle.prototype.generateTerm=function(b){if(typeof b=="string"){var d=this.board.elementsByName;var a=this.board.algebra.geonext2JS(b+"");this.updateRadius=new Function("return "+a+";")}else{if(typeof b=="number"){this.updateRadius=function(){return b}}else{this.updateRadius=b}}};JXG.Circle.prototype.notifyParents=function(b){var a=null;var d=this.board.elementsByName;if(typeof b=="string"){this.board.algebra.findDependencies(this,b+"")}};JXG.Circle.prototype.getRadius=function(){if(this.method=="twoPoints"){return(Math.sqrt(Math.pow(this.midpoint.coords.usrCoords[1]-this.point2.coords.usrCoords[1],2)+Math.pow(this.midpoint.coords.usrCoords[2]-this.point2.coords.usrCoords[2],2)))}else{if(this.method=="pointLine"||this.method=="pointCircle"){return this.radius}else{if(this.method=="pointRadius"){return this.updateRadius()}}}};JXG.Circle.prototype.getTextAnchor=function(){return this.midpoint.coords};JXG.Circle.prototype.getLabelAnchor=function(){if(this.method=="twoPoints"){var b=this.midpoint.coords.usrCoords[1]-this.point2.coords.usrCoords[1];var a=this.midpoint.coords.usrCoords[2]-this.point2.coords.usrCoords[2];return new JXG.Coords(JXG.COORDS_BY_USER,[this.midpoint.coords.usrCoords[1]+b,this.midpoint.coords.usrCoords[2]+a],this.board)}else{if(this.method=="pointLine"||this.method=="pointCircle"||this.method=="pointRadius"){return new JXG.Coords(JXG.COORDS_BY_USER,[this.midpoint.coords.usrCoords[1]-this.getRadius(),this.midpoint.coords.usrCoords[2]],this.board)}}};JXG.Circle.prototype.cloneToBackground=function(a){var d={};d.id=this.id+"T"+this.numTraces;this.numTraces++;d.midpoint={};d.midpoint.coords=this.midpoint.coords;var b=this.getRadius();d.getRadius=function(){return b};d.board={};d.board.unitX=this.board.unitX;d.board.unitY=this.board.unitY;d.board.zoomX=this.board.zoomX;d.board.zoomY=this.board.zoomY;d.visProp=this.visProp;this.board.renderer.drawCircle(d);this.traces[d.id]=document.getElementById(d.id);delete d};JXG.Circle.prototype.addTransform=function(a){var d;if(JXG.IsArray(a)){d=a}else{d=[a]}for(var b=0;b<d.length;b++){this.midpoint.transformations.push(d[b]);if(this.method=="twoPoints"){this.point2.transformations.push(d[b])}}};JXG.Circle.prototype.setPosition=function(e,a,d){var b=this.board.createElement("transform",[a,d],{type:"translate"});this.addTransform(b)};JXG.Circle.prototype.X=function(a){a*=2*Math.PI;return this.getRadius()*Math.cos(a)+this.midpoint.coords.usrCoords[1]};JXG.Circle.prototype.Y=function(a){a*=2*Math.PI;return this.getRadius()*Math.sin(a)+this.midpoint.coords.usrCoords[2]};JXG.Circle.prototype.minX=function(){return 0};JXG.Circle.prototype.maxX=function(){return 1};JXG.createCircle=function(e,h,g){var d,f,b;if(g==null){g={}}if(typeof g.withLabel=="undefined"){g.withLabel=false}f=[];for(b=0;b<h.length;b++){if(JXG.IsPoint(h[b])){f[b]=h[b]}else{if(h[b].length>1){f[b]=e.createElement("point",h[b],{visible:false,fixed:true})}else{f[b]=h[b]}}}if(h.length==2&&JXG.IsPoint(f[0])&&JXG.IsPoint(f[1])){d=new JXG.Circle(e,"twoPoints",f[0],f[1],g.id,g.name,g.withLabel)}else{if((JXG.IsNumber(f[0])||JXG.IsFunction(f[0])||JXG.IsString(f[0]))&&JXG.IsPoint(f[1])){d=new JXG.Circle(e,"pointRadius",f[1],f[0],g.id,g.name,g.withLabel)}else{if((JXG.IsNumber(f[1])||JXG.IsFunction(f[1])||JXG.IsString(f[1]))&&JXG.IsPoint(f[0])){d=new JXG.Circle(e,"pointRadius",f[0],f[1],g.id,g.name,g.withLabel)}else{if((f[0].type==JXG.OBJECT_TYPE_CIRCLE)&&JXG.IsPoint(f[1])){d=new JXG.Circle(e,"pointCircle",f[1],f[0],g.id,g.name,g.withLabel)}else{if((f[1].type==JXG.OBJECT_TYPE_CIRCLE)&&JXG.IsPoint(f[0])){d=new JXG.Circle(e,"pointCircle",f[0],f[1],g.id,g.name,g.withLabel)}else{if((f[0].type==JXG.OBJECT_TYPE_LINE)&&JXG.IsPoint(f[1])){d=new JXG.Circle(e,"pointLine",f[1],f[0],g.id,g.name,g.withLabel)}else{if((f[1].type==JXG.OBJECT_TYPE_LINE)&&JXG.IsPoint(f[0])){d=new JXG.Circle(e,"pointLine",f[0],f[1],g.id,g.name,g.withLabel)}else{if(h.length==3&&JXG.IsPoint(f[0])&&JXG.IsPoint(f[1])&&JXG.IsPoint(f[2])){var a=JXG.createCircumcircle(e,f,g);a[0].setProperty({visible:false});return a[1]}else{throw ("Can't create circle with parent types '"+(typeof h[0])+"' and '"+(typeof h[1])+"'.")}}}}}}}}return d};JXG.JSXGraph.registerElement("circle",JXG.createCircle);JXG.Polygon=function(k,o,q,d,b,e,a,h){this.constructor();this.type=JXG.OBJECT_TYPE_POLYGON;this.elementClass=JXG.OBJECT_CLASS_AREA;this.init(k,d,b);if((typeof e=="undefined")||(e==null)){e=true}if((typeof h=="undefined")||(h==null)){h=false}this.withLines=e;this.vertices=[];for(var g=0;g<o.length;g++){var j=JXG.GetReferenceFromParameter(this.board,o[g]);this.vertices[g]=j}if((typeof q=="undefined")||(q==null)){q=[];for(var g=0;g<o.length-1;g++){q[g]={}}}if(this.vertices[this.vertices.length-1]!=this.vertices[0]){this.vertices.push(this.vertices[0]);q.push({})}this.visProp.fillColor=this.board.options.polygon.fillColor;this.visProp.highlightFillColor=this.board.options.polygon.highlightFillColor;this.visProp.fillOpacity=this.board.options.polygon.fillOpacity;this.visProp.highlightFillOpacity=this.board.options.polygon.highlightFillOpacity;var f;this.borders=[];if(e){for(var g=0;g<this.vertices.length-1;g++){f=new JXG.Line(k,this.vertices[g],this.vertices[g+1],q[g].id,q[g].name,h);f.setStraight(false,false);this.borders[g]=f;f.parentPolygon=this}}for(var g=0;g<this.vertices.length-1;g++){var j=JXG.GetReferenceFromParameter(this.board,this.vertices[g]);j.addChild(this)}this.createLabel(a);this.id=this.board.addPolygon(this)};JXG.Polygon.prototype=new JXG.GeometryElement;JXG.Polygon.prototype.hasPoint=function(a,b){return false};JXG.Polygon.prototype.updateRenderer=function(){if(this.needsUpdate){this.board.renderer.updatePolygon(this);this.needsUpdate=false}if(this.hasLabel&&this.label.content.visProp.visible){this.label.content.update();this.board.renderer.updateText(this.label.content)}};JXG.Polygon.prototype.getTextAnchor=function(){var f=0;var e=0;var d=0;var h=0;f=d=this.vertices[0].X();e=h=this.vertices[0].Y();for(var g=0;g<this.vertices.length;g++){if(this.vertices[g].X()<f){f=this.vertices[g].X()}if(this.vertices[g].X()>d){d=this.vertices[g].X()}if(this.vertices[g].Y()>e){e=this.vertices[g].Y()}if(this.vertices[g].Y()<h){h=this.vertices[g].Y()}}return new JXG.Coords(JXG.COORDS_BY_USER,[(f+d)*0.5,(e+h)*0.5],this.board)};JXG.Polygon.prototype.getLabelAnchor=function(){var f=0;var e=0;var d=0;var h=0;f=d=this.vertices[0].X();e=h=this.vertices[0].Y();for(var g=0;g<this.vertices.length;g++){if(this.vertices[g].X()<f){f=this.vertices[g].X()}if(this.vertices[g].X()>d){d=this.vertices[g].X()}if(this.vertices[g].Y()>e){e=this.vertices[g].Y()}if(this.vertices[g].Y()<h){h=this.vertices[g].Y()}}return new JXG.Coords(JXG.COORDS_BY_USER,[(f+d)*0.5,(e+h)*0.5],this.board)};JXG.Polygon.prototype.cloneToBackground=function(a){var b={};b.id=this.id+"T"+this.numTraces;this.numTraces++;b.vertices=this.vertices;b.visProp=this.visProp;this.board.renderer.drawPolygon(b);this.traces[b.id]=$(b.id);delete b};JXG.createPolygon=function(e,a,f){var d;if(typeof f.withLabel=="undefined"){f.withLabel=false}for(var b=0;b<a.length;b++){a[b]=JXG.GetReferenceFromParameter(e,a[b]);if(!JXG.IsPoint(a[b])){throw ("Can't create polygon with parent types other than 'point'.")}}d=new JXG.Polygon(e,a,f.borders,f.id,f.name,f.withLines,f.withLabel,f.lineLabels);return d};JXG.JSXGraph.registerElement("polygon",JXG.createPolygon);JXG.Polygon.prototype.hideElement=function(){this.visProp.visible=false;this.board.renderer.hide(this);if(this.withLines){for(var a=0;a<this.borders.length;a++){this.borders[a].hideElement()}}if(this.hasLabel&&this.label!=null){this.label.hiddenByParent=true;if(this.label.content.visProp.visible){this.board.renderer.hide(this.label.content)}}};JXG.Polygon.prototype.showElement=function(){this.visProp.visible=true;this.board.renderer.show(this);if(this.withLines){for(var a=0;a<this.borders.length;a++){this.borders[a].showElement()}}};JXG.Curve=function(e,b,f,a,d){this.constructor();this.points=[];this.numberPoints=0;this.type=JXG.OBJECT_TYPE_CURVE;this.elementClass=JXG.OBJECT_CLASS_CURVE;this.init(e,f,a);this.visProp.strokeWidth=this.board.options.curve.strokeWidth;this.visProp.visible=true;this.dataX=null;this.dataY=null;this.r=this.board.options.precision.hasPoint;this.curveType=null;if(b[0]!=null){this.varname=b[0]}else{this.varname="x"}this.xterm=b[1];this.yterm=b[2];this.generateTerm(this.varname,this.xterm,this.yterm,b[3],b[4]);this.updateCurve();this.createLabel(d);this.id=this.board.addCurve(this);if(typeof this.xterm=="string"){this.notifyParents(this.xterm)}if(typeof this.yterm=="string"){this.notifyParents(this.yterm)}};JXG.Curve.prototype=new JXG.GeometryElement;JXG.Curve.prototype.minX=function(){if(this.curveType=="polar"){return 0}else{var a=new JXG.Coords(JXG.COORDS_BY_SCREEN,[0,0],this.board);return a.usrCoords[1]}};JXG.Curve.prototype.maxX=function(){if(this.curveType=="polar"){return 2*Math.PI}else{var a=new JXG.Coords(JXG.COORDS_BY_SCREEN,[this.board.canvasWidth,0],this.board);return a.usrCoords[1]}};JXG.Curve.prototype.hasPoint=function(q,o){var u,z,G,g,B,A,w,v,h,E,f,D,e,k,C=300,F=(this.maxX()-this.minX())/C,a=this.r/(this.board.unitX*this.board.zoomX),b;b=new JXG.Coords(JXG.COORDS_BY_SCREEN,[q,o],this.board);q=b.usrCoords[1];o=b.usrCoords[2];if(this.curveType=="parameter"||this.curveType=="polar"){for(B=0,u=this.minX();B<C;B++){w=this.X(u);v=this.Y(u);for(A=0;A<this.transformations.length;A++){g=this.transformations[A];g.update();G=g.matVecMult(g.matrix,[1,w,v]);w=G[1];v=G[2]}z=Math.sqrt((q-w)*(q-w)+(o-v)*(o-v));if(z<a){return true}u+=F}}else{if(this.curveType=="plot"){for(B=0;B<this.numberPoints-1;B++){D=this.X(B+1)-this.X(B);e=this.Y(B+1)-this.Y(B);E=q-this.X(B);f=o-this.Y(B);k=D*D+e*e;if(k>=JXG.Math.eps){h=(E*D+f*e)/k;z=Math.sqrt(E*E+f*f-h*(E*D+f*e))}else{h=0;z=Math.sqrt(E*E+f*f)}if(h>=0&&h<=1&&z<a){return true}}return false}else{for(B=0,u=this.minX();B<C;B++){w=this.X(u);v=this.Y(u);for(A=0;A<this.transformations.length;A++){g=this.transformations[A];g.update();G=g.matVecMult(g.matrix,[1,w,v]);w=G[1];v=G[2]}z=Math.sqrt((q-w)*(q-w)+(o-v)*(o-v));if(z<a){return true}u+=F}}}return(z<a)};JXG.Curve.prototype.allocatePoints=function(){var a;if(this.points.length<this.numberPoints){for(a=this.points.length;a<this.numberPoints;a++){this.points[a]=new JXG.Coords(JXG.COORDS_BY_USER,[0,0],this.board)}}};JXG.Curve.prototype.update=function(){if(this.needsUpdate){this.updateCurve()}};JXG.Curve.prototype.updateRenderer=function(){if(this.needsUpdate){this.board.renderer.updateCurve(this);this.needsUpdate=false}if(this.hasLabel&&this.label.content.visProp.visible){this.label.content.update();this.board.renderer.updateText(this.label.content)}};JXG.Curve.prototype.updateDataArray=function(){};JXG.Curve.prototype.updateCurve=function(){var d,e,h,b,g,f,a;this.updateDataArray();if(this.curveType=="plot"&&this.dataX!=null){this.numberPoints=this.dataX.length}else{if(this.board.updateQuality==this.board.BOARD_QUALITY_HIGH){this.numberPoints=this.board.canvasWidth*4}else{this.numberPoints=this.board.canvasWidth*0.5}}d=this.numberPoints;this.allocatePoints();e=this.minX();h=this.maxX();a=(h-e)/d;for(f=0;f<d;f++){if(this.dataX!=null){b=f;if(this.dataY!=null){g=f}else{g=this.X(b)}}else{b=e+f*a;g=b}this.points[f].setCoordinates(JXG.COORDS_BY_USER,[this.X(b),this.Y(g)]);this.updateTransform(this.points[f])}this.getLabelAnchor()};JXG.Curve.prototype.updateTransform=function(d){var b,e,a;if(this.transformations.length==0){return d}for(a=0;a<this.transformations.length;a++){b=this.transformations[a];b.update();e=b.matVecMult(b.matrix,d.usrCoords);d.setCoordinates(JXG.COORDS_BY_USER,[e[1],e[2]])}return d};JXG.Curve.prototype.addTransform=function(a){var d,b;if(JXG.IsArray(a)){d=a}else{d=[a]}for(b=0;b<d.length;b++){this.transformations.push(d[b])}};JXG.Curve.prototype.setPosition=function(e,a,d){var b=this.board.createElement("transform",[a,d],{type:"translate"});if(this.transformations.length>0&&this.transformations[this.transformations.length-1].isNumericMatrix){this.transformations[this.transformations.length-1].melt(b)}else{this.addTransform(b)}};JXG.Curve.prototype.generateTerm=function(a,q,k,h,o){var g,e,f,j,d,b;this.numberPoints=this.board.canvasWidth*1;if(typeof q=="string"){g=this.board.algebra.geonext2JS(q);this.X=new Function(a,"return "+g+";");this.curveType="functiongraph"}else{if(typeof q=="function"){this.X=q;this.curveType="parameter"}else{if(typeof q=="number"){this.X=function(){return q};this.curveType="parameter"}else{if(typeof q=="object"){this.curveType="plot";this.dataX=q;this.X=function(u){return this.dataX[u]};this.numberPoints=this.dataX.length}}}}if(typeof k=="string"){e=this.board.algebra.geonext2JS(k);this.Y=new Function(a,"return "+e+";")}else{if(typeof k=="function"){this.Y=k}else{if(typeof k=="number"){this.Y=function(){return k}}else{if(typeof k=="object"){this.dataY=k;this.Y=function(u){return this.dataY[u]}}}}}if(typeof q=="function"&&typeof k=="object"){if(typeof k[0]=="function"){d=k[0]}else{if(typeof k[0]=="number"){d=function(){return k[0]}}}if(typeof k[1]=="function"){b=k[1]}else{if(typeof k[1]=="number"){b=function(){return k[1]}}}this.X=function(u){return(q)(u)*Math.cos(u)+d()};this.Y=function(u){return(q)(u)*Math.sin(u)+b()};this.curveType="polar"}if(h!=null){if(typeof h=="string"){f=this.board.algebra.geonext2JS(h);this.minX=new Function("","return "+f+";")}else{if(typeof h=="function"){this.minX=h}else{if(typeof h=="number"){this.minX=function(){return h}}}}}if(o!=null){if(typeof o=="string"){j=this.board.algebra.geonext2JS(o);this.maxX=new Function("","return "+j+";")}else{if(typeof o=="function"){this.maxX=o}else{if(typeof o=="number"){this.maxX=function(){return o}}}}}};JXG.Curve.prototype.notifyParents=function(a){this.board.algebra.findDependencies(this,a)};JXG.Curve.prototype.getLabelAnchor=function(){var a=new JXG.Coords(JXG.COORDS_BY_SCREEN,[0,this.board.canvasHeight*0.5],this.board);a=this.board.algebra.projectCoordsToCurve(a.usrCoords[1],a.usrCoords[2],0,this)[0];return a};JXG.createCurve=function(d,b,a){if(a==null){a={}}if(typeof a.withLabel=="undefined"){a.withLabel=false}return new JXG.Curve(d,["x"].concat(b),a.id,a.name,a.withLabel)};JXG.JSXGraph.registerElement("curve",JXG.createCurve);JXG.createFunctiongraph=function(e,b,a){var d=["x","x"].concat(b);if(a==null){a={}}if(typeof a.withLabel=="undefined"){a.withLabel=false}a.curveType="functiongraph";return new JXG.Curve(e,d,a.id,a.name,a.withLabel)};JXG.JSXGraph.registerElement("functiongraph",JXG.createFunctiongraph);JXG.createSpline=function(d,b,a){var e;if(a==null){a={}}if(typeof a.withLabel=="undefined"){a.withLabel=false}e=function(h){var f=new Array(),k=new Array(),g,j;for(g=0;g<b.length;g++){if(!JXG.IsPoint(b[g])){throw"JXG.createSpline: Parents has to be an array of JXG.Point."}f.push(b[g].X());k.push(b[g].Y())}j=JXG.Math.Numerics.splineDef(f,k);return JXG.Math.Numerics.splineEval(h,f,k,j)};return new JXG.Curve(d,["x","x",e],a.id,a.name,a.withLabel)};JXG.JSXGraph.registerElement("spline",JXG.createSpline);JXG.createRiemannsum=function(g,b,a){var k,e,h,d,j;if(a==null){a={}}if(typeof a.withLabel=="undefined"){a.withLabel=false}a.opacity=a.opacity||0.3;a.fillColor=a.fillColor||"#ffff00";a.curveType="plot";h=b[0];if(typeof b[1]=="number"){k=function(){return b[1]}}else{if(typeof b[1]=="function"){k=b[1]}else{throw"JXG.createRiemannsum: n has to be number or function."}}if(typeof b[2]=="string"){e=function(){return b[2]}}else{if(typeof b[2]=="function"){e=b[2]}else{throw"JXG.createRiemannsum: type has to be string or function."}}d=["x",[0],[0]].concat(b.slice(3));j=new JXG.Curve(g,d,a.id,a.name,a.withLabel);j.updateDataArray=function(){var f=JXG.Math.Numerics.riemann(h,k(),e(),this.minX(),this.maxX());this.dataX=f[0];this.dataY=f[1]};return j};JXG.JSXGraph.registerElement("riemannsum",JXG.createRiemannsum);JXG.Arc=function(d,g,f,e,h,a,b){this.constructor();this.type=JXG.OBJECT_TYPE_ARC;this.elementClass=JXG.OBJECT_CLASS_CIRCLE;this.init(d,h,a);this.midpoint=JXG.GetReferenceFromParameter(this.board,g);this.point2=JXG.GetReferenceFromParameter(this.board,f);this.point3=JXG.GetReferenceFromParameter(this.board,e);this.r=this.board.options.precision.hasPoint;this.visProp.visible=true;this.visProp.firstArrow=this.board.options.arc.firstArrow;this.visProp.lastArrow=this.board.options.arc.lastArrow;this.visProp.fillColor=this.board.options.arc.fillColor;this.visProp.highlightFillColor=this.board.options.arc.highlightFillColor;this.visProp.strokeColor=this.board.options.arc.strokeColor;this.visProp.highlightStrokeColor=this.board.options.arc.highlightStrokeColor;this.createLabel(b);this.id=this.board.addArc(this);this.midpoint.addChild(this);this.point2.addChild(this);this.point3.addChild(this)};JXG.Arc.prototype=new JXG.GeometryElement;JXG.Arc.prototype.hasPoint=function(k,j){var q=this.r/(this.board.unitX*this.board.zoomX);var g=new JXG.Coords(JXG.COORDS_BY_SCREEN,[k,j],this.board);var a=this.getRadius();var h=Math.sqrt(Math.pow(this.midpoint.coords.usrCoords[1]-g.usrCoords[1],2)+Math.pow(this.midpoint.coords.usrCoords[2]-g.usrCoords[2],2));var o=(Math.abs(h-a)<q);if(o){var b={};b.coords=new JXG.Coords(JXG.COORDS_BY_USER,[this.midpoint.coords.usrCoords[1],this.board.origin.usrCoords[2]/(this.board.unitY*this.board.zoomY)],this.board);var f=this.board.algebra.trueAngle(this.point2,this.midpoint,b);var e=this.board.algebra.trueAngle(this.point3,this.midpoint,b);var u={};u.coords=g;var d=this.board.algebra.trueAngle(u,this.midpoint,b);if(f>=e){if(f<d||d<e){o=false}}else{if(d>f){if(d<e){o=false}}}}return o};JXG.Arc.prototype.getRadius=function(){return(Math.sqrt(Math.pow(this.midpoint.coords.usrCoords[1]-this.point2.coords.usrCoords[1],2)+Math.pow(this.midpoint.coords.usrCoords[2]-this.point2.coords.usrCoords[2],2)))};JXG.Arc.prototype.getTextAnchor=function(){return this.midpoint.coords};JXG.Arc.prototype.getLabelAnchor=function(){var d=this.board.algebra.trueAngle(this.point2,this.midpoint,this.point3);var b=this.point2.coords.usrCoords[1]-this.midpoint.coords.usrCoords[1];var a=this.point2.coords.usrCoords[2]-this.midpoint.coords.usrCoords[2];return new JXG.Coords(JXG.COORDS_BY_USER,[this.midpoint.coords.usrCoords[1]+Math.cos(d*Math.PI/(2*160))*b-Math.sin(d*Math.PI/(2*160))*a,this.midpoint.coords.usrCoords[2]+Math.sin(d*Math.PI/(2*160))*b+Math.cos(d*Math.PI/(2*160))*a],this.board)};JXG.Arc.prototype.updateRenderer=function(){if(this.needsUpdate){this.board.renderer.updateArc(this);this.needsUpdate=false}if(this.hasLabel&&this.label.content.visProp.visible&&this.isReal){this.label.content.update();this.board.renderer.updateText(this.label.content)}};JXG.Arc.prototype.setArrow=function(b,a){this.visProp.firstArrow=b;this.visProp.lastArrow=a;this.board.renderer.updateArc(this);if(this.hasLabel&&this.label.content.visProp.visible){this.label.content.update();this.board.renderer.updateText(this.label.content)}};JXG.createArc=function(e,b,a){var d;if(typeof a.withLabel=="undefined"){a.withLabel=false}if((JXG.IsPoint(b[0]))&&(JXG.IsPoint(b[1]))&&(JXG.IsPoint(b[2]))){d=new JXG.Arc(e,b[0],b[1],b[2],a.id,a.name,a.withLabel)}else{throw ("Can't create Arc with parent types '"+(typeof b[0])+"' and '"+(typeof b[1])+"' and '"+(typeof b[2])+"'.")}return d};JXG.JSXGraph.registerElement("arc",JXG.createArc);JXG.Sector=function(k,x,w,v,b,o,f){this.constructor();this.type=JXG.OBJECT_TYPE_SECTOR;this.elementClass=JXG.OBJECT_CLASS_AREA;this.init(k,f,"");if(!JXG.IsArray(b)){b=[null,null,null,null]}if(!JXG.IsArray(o)){o=[null,null,null,null]}this.point1=JXG.GetReferenceFromParameter(this.board,x);this.point2=JXG.GetReferenceFromParameter(this.board,w);this.point3=JXG.GetReferenceFromParameter(this.board,v);this.r=this.board.options.precision.hasPoint;this.visProp.visible=true;var d={};d.midpoint=this.point1;var j=this.getRadius();d.getRadius=function(){return j};var u=this.board.algebra.projectPointToCircle(this.point3,d);var e=new JXG.Point(k,[u.usrCoords[1],u.usrCoords[2]],b[1],o[1],true);e.fixed=true;this.addChild(e);e.update=function(){var y={};y.midpoint=JXG.GetReferenceFromParameter(this.board,x);var a=(Math.sqrt(Math.pow(JXG.GetReferenceFromParameter(this.board,x).coords.usrCoords[1]-JXG.GetReferenceFromParameter(this.board,w).coords.usrCoords[1],2)+Math.pow(JXG.GetReferenceFromParameter(this.board,x).coords.usrCoords[2]-JXG.GetReferenceFromParameter(this.board,w).coords.usrCoords[2],2)));y.getRadius=function(){return a};u=this.board.algebra.projectPointToCircle(JXG.GetReferenceFromParameter(this.board,v),y);this.coords=u;this.board.renderer.updatePoint(this);if(this.label.content.visProp.visible){this.label.content.update()}};var h=new JXG.Line(k,x,w,b[2],o[2]);var g=new JXG.Line(k,x,e.id,b[3],o[3]);h.setStraight(false,false);g.setStraight(false,false);var q=new JXG.Arc(k,x,w,v,b[0],o[0]);q.visProp.fillColor=this.board.options.sector.fillColor;q.visProp.highlightFillColor=this.board.options.sector.highlightFillColor;q.visProp.fillOpacity=this.board.options.sector.fillOpacity;q.visProp.highlightFillOpacity=this.board.options.sector.highlightFillOpacity;this.point4=e;this.lines=[h,g];this.arc=q;this.id=this.board.addSector(this);this.point1.addChild(this);this.point2.addChild(this);this.point3.addChild(this)};JXG.Sector.prototype=new JXG.GeometryElement;JXG.Sector.prototype.hasPoint=function(a,b){return false};JXG.Sector.prototype.getRadius=function(){return(Math.sqrt(Math.pow(this.point1.coords.usrCoords[1]-this.point2.coords.usrCoords[1],2)+Math.pow(this.point1.coords.usrCoords[2]-this.point2.coords.usrCoords[2],2)))};JXG.Sector.prototype.updateRenderer=function(){};JXG.createSector=function(b,e,d){var a;if((JXG.IsPoint(e[0]))&&(JXG.IsPoint(e[1]))&&(JXG.IsPoint(e[2]))){a=new JXG.Sector(b,e[0],e[1],e[2],d.ids,d.names,d.id)}else{throw ("Can't create sector with parent types '"+(typeof e[0])+"' and '"+(typeof e[1])+"' and '"+(typeof e[2])+"'.")}return a};JXG.JSXGraph.registerElement("sector",JXG.createSector);JXG.Angle=function(k,e,d,a,h,u,w,C,b){this.constructor();this.type=JXG.OBJECT_TYPE_ANGLE;this.elementClass=JXG.OBJECT_CLASS_AREA;this.init(k,w,C);this.point1=JXG.GetReferenceFromParameter(this.board,e);this.point2=JXG.GetReferenceFromParameter(this.board,d);this.point3=JXG.GetReferenceFromParameter(this.board,a);this.radius=this.board.options.angle.radius;if(h!=undefined&&h!=null){this.radius=h}this.visProp.fillColor=this.board.options.angle.fillColor;this.visProp.highlightFillColor=this.board.options.angle.highlightFillColor;this.visProp.fillOpacity=this.board.options.angle.fillOpacity;this.visProp.highlightFillOpacity=this.board.options.angle.highlightFillOpacity;this.visProp.strokeColor=this.board.options.angle.strokeColor;if(u==""){var g=["&alpha;","&beta;","&gamma;","&delta;","&epsilon;","&zeta;","&eta","&theta;","&iota;","&kappa;","&lambda;","&mu;","&nu;","&xi;","&omicron;","&pi;","&rho;","&sigmaf;","&sigma;","&tau;","&upsilon;","&phi;","&chi;","&psi;","&omega;"];var A=0;while(A<g.length){var y=A;var o=g[A];for(var f in k.objects){if(k.objects[f].type==JXG.OBJECT_TYPE_ANGLE){if(k.objects[f].text==o){A++;break}}}if(A==y){u=o;A=g.length+1}}if(A==g.length){var v="&alpha;_{";var z="}";var q=false;var y=0;while(!q){for(var f in k.objects){if(k.objects[f].type==JXG.OBJECT_TYPE_ANGLE){if(k.objects[f].text==(v+y+z)){q=true;break}}}if(q){q=false}else{q=true;u=(v+y+z)}}}}this.text=u;var B=this.name;this.name=this.text;this.createLabel(b);this.name=B;this.id=this.board.addAngle(this);this.point1.addChild(this);this.point2.addChild(this);this.point3.addChild(this)};JXG.Angle.prototype=new JXG.GeometryElement;JXG.Angle.prototype.hasPoint=function(a,b){return false};JXG.Angle.prototype.updateRenderer=function(){if(this.needsUpdate){this.board.renderer.updateAngle(this);this.needsUpdate=false}if(this.hasLabel&&this.label.content.visProp.visible&&this.isReal){this.label.content.update();this.board.renderer.updateText(this.label.content)}};JXG.Angle.prototype.getLabelAnchor=function(){var e=this.board.algebra.trueAngle(this.point1,this.point2,this.point3);var d=this.point1.coords.distance(JXG.COORDS_BY_USER,this.point2.coords);var b=(this.point1.coords.usrCoords[1]-this.point2.coords.usrCoords[1])*(this.radius/2)/d;var a=(this.point1.coords.usrCoords[2]-this.point2.coords.usrCoords[2])*(this.radius/2)/d;var f=new JXG.Coords(JXG.COORDS_BY_USER,[this.point2.coords.usrCoords[1]+Math.cos(e*Math.PI/(2*160))*b-Math.sin(e*Math.PI/(2*160))*a,this.point2.coords.usrCoords[2]+Math.sin(e*Math.PI/(2*160))*b+Math.cos(e*Math.PI/(2*160))*a],this.board);if(this.label.content!=null){this.label.content.relativeCoords=new JXG.Coords(JXG.COORDS_BY_USER,[0/(this.board.unitX*this.board.zoomX),0/(this.board.unitY*this.board.zoomY)],this.board)}return f};JXG.createAngle=function(e,b,a){var d;if(a.withLabel==null||typeof a.withLabel=="undefined"){a.withLabel=true}if(a.text==null||typeof a.text=="text"){a.text=""}if((JXG.IsPoint(b[0]))&&(JXG.IsPoint(b[1]))&&(JXG.IsPoint(b[2]))){d=new JXG.Angle(e,b[0],b[1],b[2],a.radius,a.text,a.id,a.name,a.withLabel)}else{throw ("Can't create angle with parent types '"+(typeof b[0])+"' and '"+(typeof b[1])+"' and '"+(typeof b[2])+"'.")}return d};JXG.JSXGraph.registerElement("angle",JXG.createAngle);JXG.Algebra=function(a){this.board=a;this.eps=0.00001};JXG.Algebra.prototype.angle=function(f,e,d){var j=[],h=[],g=[],o,k,w,q;if(f.coords==null){j[0]=f[0];j[1]=f[1]}else{j[0]=f.coords.usrCoords[1];j[1]=f.coords.usrCoords[2]}if(e.coords==null){h[0]=e[0];h[1]=e[1]}else{h[0]=e.coords.usrCoords[1];h[1]=e.coords.usrCoords[2]}if(d.coords==null){g[0]=d[0];g[1]=d[1]}else{g[0]=d.coords.usrCoords[1];g[1]=d.coords.usrCoords[2]}o=j[0]-h[0];k=j[1]-h[1];w=g[0]-h[0];q=g[1]-h[1];return Math.atan((o*q-k*w)/(o*w+k*q))};JXG.Algebra.prototype.trueAngle=function(g,f,d){var a,y,w,u,o,k,v,j,h,b,x,e,q=0;if(g.coords==null){a=g[0];y=g[1]}else{a=g.coords.usrCoords[1];y=g.coords.usrCoords[2]}if(f.coords==null){w=f[0];u=f[1]}else{w=f.coords.usrCoords[1];u=f.coords.usrCoords[2]}if(d.coords==null){o=d[0];k=d[1]}else{o=d.coords.usrCoords[1];k=d.coords.usrCoords[2]}e=(o-w)*(a-w)+(k-u)*(y-u);v=(a-w)*(k-u)-(y-u)*(o-w);j=Math.sqrt((a-w)*(a-w)+(y-u)*(y-u));h=Math.sqrt((o-w)*(o-w)+(k-u)*(k-u));b=e/(j*h);if(b>1){b=1}else{if(b<-1){b=-1}}x=Math.acos(b);if((Math.sin(x)*v)<0){q=2*Math.PI-x}else{q=x}q=(q/Math.PI)*180;return q};JXG.Algebra.prototype.angleBisector=function(g,f,b){var e=g.coords.usrCoords,o=f.coords.usrCoords,h=b.coords.usrCoords,u=e[1]-o[1],q=e[2]-o[2],k=Math.sqrt(u*u+q*q),a,v,j;u/=k;q/=k;a=Math.acos(u);if(q<0){a*=-1}if(a<0){a+=2*Math.PI}u=h[1]-o[1];q=h[2]-o[2];k=Math.sqrt(u*u+q*q);u/=k;q/=k;v=Math.acos(u);if(q<0){v*=-1}if(v<0){v+=2*Math.PI}j=(a+v)*0.5;if(a>v){j+=Math.PI}u=Math.cos(j)+o[1];q=Math.sin(j)+o[2];return new JXG.Coords(JXG.COORDS_BY_USER,[u,q],this.board)};JXG.Algebra.prototype.midpoint=function(a,b){return new JXG.Coords(JXG.COORDS_BY_USER,[(a.coords.usrCoords[1]+b.coords.usrCoords[1])/2,(a.coords.usrCoords[2]+b.coords.usrCoords[2])/2],this.board)};JXG.Algebra.prototype.parallel=function(f,b,j){var d=1,g=j.coords.usrCoords,k=f.coords.usrCoords,a=b.coords.usrCoords,h=g[1]+d*(a[1]-k[1]),e=g[2]+d*(a[2]-k[2]);return new JXG.Coords(JXG.COORDS_BY_USER,[h,e],this.board)};JXG.Algebra.prototype.reflection=function(q,j){var e=j.coords.usrCoords,u=q.point1.coords.usrCoords,d=q.point2.coords.usrCoords,b,h,a,f,k,g,o;k=d[1]-u[1];g=d[2]-u[2];b=e[1]-u[1];h=e[2]-u[2];o=(k*h-g*b)/(k*k+g*g);a=e[1]+2*o*g;f=e[2]-2*o*k;return new JXG.Coords(JXG.COORDS_BY_USER,[a,f],this.board)};JXG.Algebra.prototype.rotation=function(a,o,f){var h=o.coords.usrCoords,b=a.coords.usrCoords,e,k,g,q,d,j;e=h[1]-b[1];k=h[2]-b[2];g=Math.cos(f);q=Math.sin(f);d=e*g-k*q+b[1];j=e*q+k*g+b[2];return new JXG.Coords(JXG.COORDS_BY_USER,[d,j],this.board)};JXG.Algebra.prototype.perpendicular=function(v,q){var f=v.point1.coords.usrCoords,e=v.point2.coords.usrCoords,b=q.coords.usrCoords,k,h,j,u,g,d,a,o;if(q==v.point1){k=f[1]+e[2]-f[2];h=f[2]-e[1]+f[1];j=true}else{if(q==v.point2){k=e[1]+f[2]-e[2];h=e[2]-f[1]+e[1];j=false}else{if(((Math.abs(f[1]-e[1])>this.eps)&&(Math.abs(b[2]-(f[2]-e[2])*(b[1]-f[1])/(f[1]-e[1])-f[2])<this.eps))||((Math.abs(f[1]-e[1])<=this.eps)&&(Math.abs(f[1]-b[1])<this.eps))){k=b[1]+e[2]-b[2];h=b[2]-e[1]+b[1];j=true;if(Math.abs(k-b[1])<this.eps&&Math.abs(h-b[2])<this.eps){k=b[1]+f[2]-b[2];h=b[2]-f[1]+b[1];j=false}}else{u=f[2]-e[2];g=f[1]-e[1];d=e[1]*u-e[2]*g;a=b[1]*g+b[2]*u;o=u*u+g*g;if(Math.abs(o)<this.eps){o=this.eps}k=(d*u+a*g)/o;h=(a*u-d*g)/o;j=true}}}return[new JXG.Coords(JXG.COORDS_BY_USER,[k,h],this.board),j]};JXG.Algebra.prototype.circumcenterMidpoint=function(h,f,e){var d=h.coords.usrCoords,b=f.coords.usrCoords,a=e.coords.usrCoords,q,o,k,j,g;q=((d[1]-b[1])*(d[1]+b[1])+(d[2]-b[2])*(d[2]+b[2]))*0.5;o=((b[1]-a[1])*(b[1]+a[1])+(b[2]-a[2])*(b[2]+a[2]))*0.5;k=(d[1]-b[1])*(b[2]-a[2])-(b[1]-a[1])*(d[2]-b[2]);if(Math.abs(k)<this.eps){k=this.eps}j=(q*(b[2]-a[2])-o*(d[2]-b[2]))/k;g=(o*(d[1]-b[1])-q*(b[1]-a[1]))/k;return new JXG.Coords(JXG.COORDS_BY_USER,[j,g],this.board)};JXG.Algebra.prototype.intersectLineLine=function(q,o){var g=q.point1.coords.usrCoords,e=q.point2.coords.usrCoords,b=o.point1.coords.usrCoords,a=o.point2.coords.usrCoords,f,d,k,j,h;f=g[1]*e[2]-g[2]*e[1];d=b[1]*a[2]-b[2]*a[1];k=(e[2]-g[2])*(b[1]-a[1])-(g[1]-e[1])*(a[2]-b[2]);if(Math.abs(k)<this.eps){k=this.eps}j=(f*(b[1]-a[1])-d*(g[1]-e[1]))/k;h=(d*(e[2]-g[2])-f*(a[2]-b[2]))/k;return new JXG.Coords(JXG.COORDS_BY_USER,[j,h],this.board)};JXG.Algebra.prototype.intersectCircleLine=function(k,A){var M=A.point1.coords.usrCoords,K=A.point2.coords.usrCoords,f=k.midpoint.coords.usrCoords,E,a,L,J,C,H,F,o,D,B,j,g,G,v,q,e,z,u,I;E=A.point1.Dist(A.point2);if(E>0){a=k.midpoint.Dist(A.point1);L=k.midpoint.Dist(A.point2);J=((a*a)+(E*E)-(L*L))/(2*E);C=(a*a)-(J*J);C=(C<0)?0:C;H=Math.sqrt(C);F=k.getRadius();o=Math.sqrt((F*F)-H*H);D=K[1]-M[1];B=K[2]-M[2];j=f[1]+(H/E)*B;g=f[2]-(H/E)*D;a=(K[1]*B)-(K[2]*D);L=(j*D)+(g*B);G=(B*B)+(D*D);if(Math.abs(G)<this.eps){G=this.eps}v=((a*B)+(L*D))/G;q=((L*B)-(a*D))/G;e=o/E;z=new JXG.Coords(JXG.COORDS_BY_USER,[v+e*D,q+e*B],this.board);u=new JXG.Coords(JXG.COORDS_BY_USER,[v-e*D,q-e*B],this.board);I=k.midpoint.coords.distance(JXG.COORDS_BY_USER,z);if((F<(I-1))||isNaN(I)){return[0]}else{return[2,z,u]}}};JXG.Algebra.prototype.intersectCircleCircle=function(o,k){var d={},g=o.getRadius(),f=k.getRadius(),e=o.midpoint.coords.usrCoords,b=k.midpoint.coords.usrCoords,v,j,y,x,w,u,q;v=g+f;j=Math.abs(g-f);y=o.midpoint.coords.distance(JXG.COORDS_BY_USER,k.midpoint.coords);if(y>v){return[0]}else{if(y<j){return[0]}else{if(y!=0){d[0]=1;x=b[1]-e[1];w=b[2]-e[2];u=(y*y-f*f+g*g)/(2*y);q=Math.sqrt(g*g-u*u);d[1]=new JXG.Coords(JXG.COORDS_BY_USER,[e[1]+(u/y)*x+(q/y)*w,e[2]+(u/y)*w-(q/y)*x],this.board);d[2]=new JXG.Coords(JXG.COORDS_BY_USER,[e[1]+(u/y)*x-(q/y)*w,e[2]+(u/y)*w+(q/y)*x],this.board)}else{return[0]}return d}}};JXG.Algebra.prototype.projectPointToCircle=function(b,f){var g=b.coords.distance(JXG.COORDS_BY_USER,f.midpoint.coords),e=b.coords.usrCoords,j=f.midpoint.coords.usrCoords,a,h,d;if(Math.abs(g)<this.eps){g=this.eps}d=f.getRadius()/g;a=j[1]+d*(e[1]-j[1]);h=j[2]+d*(e[2]-j[2]);return new JXG.Coords(JXG.COORDS_BY_USER,[a,h],this.board)};JXG.Algebra.prototype.projectPointToLine=function(a,d){var b=this.innerProduct(a.coords.usrCoords,d.stdform,3)/this.innerProduct(d.stdform,d.stdform,3),f,e=[];for(f=0;f<3;f++){e[f]=a.coords.usrCoords[f]-b*d.stdform[f]}return new JXG.Coords(JXG.COORDS_BY_USER,e,this.board)};JXG.Algebra.prototype.projectPointToCurve=function(d,f){var b=d.X(),g=d.Y(),e=d.position||0,a=this.projectCoordsToCurve(b,g,e,f);d.position=a[1];return a[0]};JXG.Algebra.prototype.projectCoordsToCurve=function(q,k,z,e){var w,d,v,b,o,u,f,g,h,a,j=1000000;if(e.curveType=="parameter"||e.curveType=="polar"){z=JXG.Math.Numerics.root(JXG.Math.Numerics.D(function(x){return(q-e.X(x))*(q-e.X(x))+(k-e.Y(x))*(k-e.Y(x))}),z);if(z<e.minX()){z=e.minX()}if(z>e.maxX()){z=e.maxX()}w=new JXG.Coords(JXG.COORDS_BY_USER,[e.X(z),e.Y(z)],this.board)}else{if(e.curveType=="plot"){g=j;for(f=0;f<e.numberPoints;f++){d=q-e.X(f);v=k-e.Y(f);h=Math.sqrt(d*d+v*v);if(h<g){g=h;z=f}if(f==e.numberPoints-1){continue}b=e.X(f+1)-e.X(f);o=e.Y(f+1)-e.Y(f);u=b*b+o*o;if(u>=JXG.Math.eps){a=(d*b+v*o)/u;h=Math.sqrt(d*d+v*v-a*(d*b+v*o))}else{a=0;h=Math.sqrt(d*d+v*v)}if(a>=0&&a<=1&&h<g){z=f+a;g=h}}f=Math.floor(z);a=z-f;if(f<e.numberPoints-1){q=a*e.X(f+1)+(1-a)*e.X(f);k=a*e.Y(f+1)+(1-a)*e.Y(f)}else{q=e.X(f);k=e.Y(f)}w=new JXG.Coords(JXG.COORDS_BY_USER,[q,k],this.board)}else{z=q;q=z;k=e.Y(z);w=new JXG.Coords(JXG.COORDS_BY_USER,[q,k],this.board)}}return[e.updateTransform(w),z]};JXG.Algebra.prototype.projectPointToTurtle=function(k,u){var q,v,j,h,d,o=0,f=0,e=1000000,g,a,b;for(d=0;d<u.objects.length;d++){a=u.objects[d];if(a.type==JXG.OBJECT_TYPE_CURVE){q=this.projectPointToCurve(k,a);g=this.distance(q.usrCoords,k.coords.usrCoords);if(g<e){j=q.usrCoords[1];h=q.usrCoords[2];v=k.position;e=g;b=a;f=o}o+=a.numberPoints}}q=new JXG.Coords(JXG.COORDS_BY_USER,[j,h],this.board);k.position=v+f;return b.updateTransform(q)};JXG.Algebra.prototype.replacePow=function(d){var h,o,j,g,k,e,a,b,f,u,q;f=d.indexOf("^");while(f>=0){b=d.slice(0,f);if(b.charAt(b.length-1)==")"){h=1;o=b.length-2;while(o>=0&&h>0){j=b.charAt(o);if(j==")"){h++}else{if(j=="("){h--}}o--}if(h==0){g="";e=b.substring(0,o+1);a=o;while(a>=0&&e.substr(a,1).match(/(\w+)/)){g=RegExp.$1+g;a--}g+=b.substring(o+1,b.length);g=g.replace(/([\(\)\+\*\%\^\-\/\]\[])/g,"\\$1")}}else{g="\\w+"}u=d.slice(f+1);if(u.match(/^([\w\.]*\()/)){h=1;o=RegExp.$1.length;while(o<u.length&&h>0){j=u.charAt(o);if(j==")"){h--}else{if(j=="("){h++}}o++}if(h==0){k=u.substring(0,o);k=k.replace(/([\(\)\+\*\%\^\-\/\[\]])/g,"\\$1")}}else{k="[\\w\\.]+"}q=new RegExp("("+g+")\\^("+k+")");d=d.replace(q,"this.board.algebra.pow($1,$2)");f=d.indexOf("^")}return d};JXG.Algebra.prototype.replaceIf=function(b){var w="",d,v,f=null,a=null,j=null,e,u,g,k,h,o,q;e=b.indexOf("If(");if(e<0){return b}b=b.replace(/""/g,"0");while(e>=0){d=b.slice(0,e);v=b.slice(e+3);g=1;u=0;k=-1;h=-1;while(u<v.length&&g>0){o=v.charAt(u);if(o==")"){g--}else{if(o=="("){g++}else{if(o==","&&g==1){if(k<0){k=u}else{h=u}}}}u++}q=v.slice(0,u-1);v=v.slice(u);if(k<0){return""}if(h<0){return""}f=q.slice(0,k);a=q.slice(k+1,h);j=q.slice(h+1);f=this.replaceIf(f);a=this.replaceIf(a);j=this.replaceIf(j);w+=d+"(("+f+")?("+a+"):("+j+"))";b=v;f=null;a=null;e=b.indexOf("If(")}w+=v;return w};JXG.Algebra.prototype.replaceSub=function(d){var b=d.indexOf("_{"),a;while(b>=0){d=d.substr(0,b)+d.substr(b).replace(/_\{/,"<sub>");a=d.substr(b).indexOf("}");if(a>=0){d=d.substr(0,a)+d.substr(a).replace(/\}/,"</sub>")}b=d.indexOf("_{")}b=d.indexOf("_");while(b>=0){d=d.substr(0,b)+d.substr(b).replace(/_(.?)/,"<sub>$1</sub>");b=d.indexOf("_")}return d};JXG.Algebra.prototype.replaceSup=function(d){var b=d.indexOf("^{"),a;while(b>=0){d=d.substr(0,b)+d.substr(b).replace(/\^\{/,"<sup>");a=d.substr(b).indexOf("}");if(a>=0){d=d.substr(0,a)+d.substr(a).replace(/\}/,"</sup>")}b=d.indexOf("^{")}b=d.indexOf("^");while(b>=0){d=d.substr(0,b)+d.substr(b).replace(/\^(.?)/,"<sup>$1</sup>");b=d.indexOf("^")}return d};JXG.Algebra.prototype.replaceNameById=function(b){var f=0,a,e,d;f=b.indexOf("X(");while(f>=0){if(f>=0){a=b.indexOf(")",f+2);if(a>=0){e=b.slice(f+2,a);e=e.replace(/\\(['"])?/g,"$1");d=this.board.elementsByName[e];b=b.slice(0,f+2)+d.id+b.slice(a)}}a=b.indexOf(")",f+2);f=b.indexOf("X(",a)}f=b.indexOf("Y(");while(f>=0){if(f>=0){a=b.indexOf(")",f+2);if(a>=0){e=b.slice(f+2,a);e=e.replace(/\\(['"])?/g,"$1");d=this.board.elementsByName[e];b=b.slice(0,f+2)+d.id+b.slice(a)}}a=b.indexOf(")",f+2);f=b.indexOf("Y(",a)}f=b.indexOf("L(");while(f>=0){if(f>=0){a=b.indexOf(")",f+2);if(a>=0){e=b.slice(f+2,a);e=e.replace(/\\(['"])?/g,"$1");d=this.board.elementsByName[e];b=b.slice(0,f+2)+d.id+b.slice(a)}}a=b.indexOf(")",f+2);f=b.indexOf("L(",a)}f=b.indexOf("Dist(");while(f>=0){if(f>=0){a=b.indexOf(",",f+5);if(a>=0){e=b.slice(f+5,a);e=e.replace(/\\(['"])?/g,"$1");d=this.board.elementsByName[e];b=b.slice(0,f+5)+d.id+b.slice(a)}}a=b.indexOf(",",f+5);f=b.indexOf(",",a);a=b.indexOf(")",f+1);if(a>=0){e=b.slice(f+1,a);e=e.replace(/\\(['"])?/g,"$1");d=this.board.elementsByName[e];b=b.slice(0,f+1)+d.id+b.slice(a)}a=b.indexOf(")",f+1);f=b.indexOf("Dist(",a)}f=b.indexOf("Deg(");while(f>=0){if(f>=0){a=b.indexOf(",",f+4);if(a>=0){e=b.slice(f+4,a);e=e.replace(/\\(['"])?/g,"$1");d=this.board.elementsByName[e];b=b.slice(0,f+4)+d.id+b.slice(a)}}a=b.indexOf(",",f+4);f=b.indexOf(",",a);a=b.indexOf(",",f+1);if(a>=0){e=b.slice(f+1,a);e=e.replace(/\\(['"])?/g,"$1");d=this.board.elementsByName[e];b=b.slice(0,f+1)+d.id+b.slice(a)}a=b.indexOf(",",f+1);f=b.indexOf(",",a);a=b.indexOf(")",f+1);if(a>=0){e=b.slice(f+1,a);e=e.replace(/\\(['"])?/g,"$1");d=this.board.elementsByName[e];b=b.slice(0,f+1)+d.id+b.slice(a)}a=b.indexOf(")",f+1);f=b.indexOf("Deg(",a)}f=b.indexOf("Rad(");while(f>=0){if(f>=0){a=b.indexOf(",",f+4);if(a>=0){e=b.slice(f+4,a);e=e.replace(/\\(['"])?/g,"$1");d=this.board.elementsByName[e];b=b.slice(0,f+4)+d.id+b.slice(a)}}a=b.indexOf(",",f+4);f=b.indexOf(",",a);a=b.indexOf(",",f+1);if(a>=0){e=b.slice(f+1,a);e=e.replace(/\\(['"])?/g,"$1");d=this.board.elementsByName[e];b=b.slice(0,f+1)+d.id+b.slice(a)}a=b.indexOf(",",f+1);f=b.indexOf(",",a);a=b.indexOf(")",f+1);if(a>=0){e=b.slice(f+1,a);e=e.replace(/\\(['"])?/g,"$1");d=this.board.elementsByName[e];b=b.slice(0,f+1)+d.id+b.slice(a)}a=b.indexOf(")",f+1);f=b.indexOf("Rad(",a)}return b};JXG.Algebra.prototype.replaceIdByObj=function(a){var b=/(X|Y|L)\(([\w_]+)\)/g;a=a.replace(b,'this.board.objects["$2"].$1()');b=/(Dist)\(([\w_]+),([\w_]+)\)/g;a=a.replace(b,'this.board.objects["$2"].Dist(this.board.objects["$3"])');b=/(Deg)\(([\w_]+),([ \w\[\w_]+),([\w_]+)\)/g;a=a.replace(b,'this.board.algebra.trueAngle(this.board.objects["$2"],this.board.objects["$3"],this.board.objects["$4"])');b=/Rad\(([\w_]+),([\w_]+),([\w_]+)\)/g;a=a.replace(b,'this.board.algebra.rad(this.board.objects["$1"],this.board.objects["$2"],this.board.objects["$3"])');return a};JXG.Algebra.prototype.geonext2JS=function(b){var e,d,a,g=["Abs","ACos","ASin","ATan","Ceil","Cos","Exp","Floor","Log","Max","Min","Pow","Random","Round","Sin","Sqrt","Tan","Trunc"],f=["Math.abs","Math.acos","Math.asin","Math.atan","Math.ceil","Math.cos","Math.exp","Math.floor","Math.log","Math.max","Math.min","Math.pow","Math.random","this.board.round","Math.sin","Math.sqrt","Math.tan","Math.ceil"];b=b.replace(/&lt;/g,"<");b=b.replace(/&gt;/g,">");b=b.replace(/&amp;/g,"&");d=b;d=this.replaceNameById(d);d=this.replaceIf(d);d=this.replacePow(d);d=this.replaceIdByObj(d);for(a=0;a<g.length;a++){e=new RegExp(g[a],"g");d=d.replace(e,f[a])}d=d.replace(/True/g,"true");d=d.replace(/False/g,"false");d=d.replace(/fasle/g,"false");d=d.replace(/Pi/g,"Math.PI");return d};JXG.Algebra.prototype.findDependencies=function(e,b){var f=this.board.elementsByName,d,g,a;for(d in f){if(d!=e.name){if(f[d].type==JXG.OBJECT_TYPE_TEXT){if(!f[d].isLabel){a=d.replace(/\[/g,"\\[");a=a.replace(/\]/g,"\\]");g=new RegExp("\\(([\\w\\[\\]'_ ]+,)*("+a+")(,[\\w\\[\\]'_ ]+)*\\)","g");if(b.search(g)>=0){f[d].addChild(e)}}}else{a=d.replace(/\[/g,"\\[");a=a.replace(/\]/g,"\\]");g=new RegExp("\\(([\\w\\[\\]'_ ]+,)*("+a+")(,[\\w\\[\\]'_ ]+)*\\)","g");if(b.search(g)>=0){f[d].addChild(e)}}}}};JXG.Algebra.prototype.distance=function(e,d){var b=0,a;if(e.length!=d.length){return}for(a=0;a<e.length;a++){b+=(e[a]-d[a])*(e[a]-d[a])}return Math.sqrt(b)};JXG.Algebra.prototype.affineDistance=function(b,a){var e;if(b.length!=a.length){return}e=this.distance(b,a);if(e>this.eps&&(Math.abs(b[0])<this.eps||Math.abs(a[0])<this.eps)){return Infinity}else{return e}};JXG.Algebra.prototype.rad=function(a,d,b){return this.trueAngle(a,d,b)*Math.PI/180};JXG.Algebra.prototype.matVecMult=function(h,f){var a=h.length,j=f.length,e=[],d,g,b;for(d=0;d<a;d++){g=0;for(b=0;b<j;b++){g+=h[d][b]*f[b]}e[d]=g}return e};JXG.Algebra.prototype.matMatMult=function(b,a){var e=b.length,d=a[0].length,q=a.length,o=[],h,g,u,f;for(h=0;h<b.length;h++){o[h]=[]}for(h=0;h<e;h++){for(g=0;g<d;g++){u=0;for(f=0;f<q;f++){u+=b[h][f]*a[f][g]}o[h][g]=u}}return o};JXG.Algebra.prototype.str2Bool=function(a){if(a==undefined||a==null){return true}if(typeof a=="boolean"){return a}if(a.toLowerCase()!="true"){return false}else{return true}};JXG.Algebra.prototype.pow=function(e,d){if(e==null||d==null){return 1}if(Math.floor(d)==d){return Math.pow(e,d)}else{if(e>0){return Math.exp(d*Math.log(Math.abs(e)))}else{return null}}};JXG.Algebra.prototype.crossProduct=function(b,a){return[b[1]*a[2]-b[2]*a[1],b[2]*a[0]-b[0]*a[2],b[0]*a[1]-b[1]*a[0]]};JXG.Algebra.prototype.innerProduct=function(e,d,h){var f,g=0;for(f=0;f<h;f++){g+=e[f]*d[f]}return g};JXG.Algebra.prototype.meet=function(e,b,d){var a=0.000001;if(Math.abs(e[3])<a&&Math.abs(b[3])<a){return this.meetLineLine(e,b,d)}else{if(Math.abs(e[3])>=a&&Math.abs(b[3])<a){return this.meetLineCircle(b,e,d)}else{if(Math.abs(e[3])<a&&Math.abs(b[3])>=a){return this.meetLineCircle(e,b,d)}else{return this.meetCircleCircle(e,b,d)}}}};JXG.Algebra.prototype.meetLineLine=function(b,a,d){var e=this.crossProduct(b,a);if(Math.abs(e[0])>this.eps){e[1]/=e[0];e[2]/=e[0];e[0]=1}return new JXG.Coords(JXG.COORDS_BY_USER,e,this.board)};JXG.Algebra.prototype.meetLineCircle=function(j,e,u){var y,x,w,v,o,h,g,f,q,z;if(e[4]<this.eps){return new JXG.Coords(JXG.COORDS_BY_USER,e.slice(1,3),this.board)}w=e[0];x=e.slice(1,3);y=e[3];v=j[0];o=j.slice(1,3);h=y;g=(x[0]*o[1]-x[1]*o[0]);f=y*v*v-(x[0]*o[0]+x[1]*o[1])*v+w;q=g*g-4*h*f;if(q>=0){q=Math.sqrt(q);z=[(-g+q)/(2*h),(-g-q)/(2*h)];return((u==0)?new JXG.Coords(JXG.COORDS_BY_USER,[-z[0]*(-o[1])-v*o[0],-z[0]*o[0]-v*o[1]],this.board):new JXG.Coords(JXG.COORDS_BY_USER,[-z[1]*(-o[1])-v*o[0],-z[1]*o[0]-v*o[1]],this.board))}else{return new JXG.Coords(JXG.COORDS_BY_USER,[NaN,NaN],this.board)}};JXG.Algebra.prototype.meetCircleCircle=function(d,a,b){var e;if(d[4]<this.eps){if(this.distance(d.slice(1,3),a.slice(1,3))==a[4]){return new JXG.Coords(JXG.COORDS_BY_USER,d.slice(1,3),this.board)}else{return new JXG.Coords(JXG.COORDS_BY_USER,[NaN,NaN],this.board)}}if(a[4]<this.eps){if(this.distance(a.slice(1,3),d.slice(1,3))==d[4]){return new JXG.Coords(JXG.COORDS_BY_USER,a.slice(1,3),this.board)}else{return new JXG.Coords(JXG.COORDS_BY_USER,[NaN,NaN],this.board)}}e=[a[3]*d[0]-d[3]*a[0],a[3]*d[1]-d[3]*a[1],a[3]*d[2]-d[3]*a[2],0,1,Infinity,Infinity,Infinity];e=this.normalize(e);return this.meetLineCircle(e,d,b)};JXG.Algebra.prototype.normalize=function(d){var a=2*d[3],e=d[4]/(a),f,b;d[5]=e;d[6]=-d[1]/a;d[7]=-d[2]/a;if(e==Infinity||isNaN(e)){f=Math.sqrt(d[1]*d[1]+d[2]*d[2]);d[0]/=f;d[1]/=f;d[2]/=f;d[3]=0;d[4]=1}else{if(Math.abs(e)>=1){d[0]=(d[6]*d[6]+d[7]*d[7]-e*e)/(2*e);d[1]=-d[6]/e;d[2]=-d[7]/e;d[3]=1/(2*e);d[4]=1}else{b=(e<=0)?(-1):(1);d[0]=b*(d[6]*d[6]+d[7]*d[7]-e*e)*0.5;d[1]=-b*d[6];d[2]=-b*d[7];d[3]=b/2;d[4]=b*e}}return d};JXG.Algebra.prototype.meetCurveCurve=function(y,x,h,o){var q=0,v,u,H,E,C,B,g,A,z,w,G,D,k,j;if(arguments.callee.t1memo){v=arguments.callee.t1memo;u=arguments.callee.t2memo}else{v=h;u=o}if(v>y.maxX()){v=y.maxX()}if(v<y.minX()){v=y.minX()}if(u>x.maxX()){u=x.maxX()}if(u<x.minX()){u=x.minX()}A=y.X(v)-x.X(u);z=y.Y(v)-x.Y(u);w=A*A+z*z;G=y.board.D(y.X,y);D=x.board.D(x.X,x);k=y.board.D(y.Y,y);j=x.board.D(x.Y,x);while(w>JXG.Math.eps&&q<10){H=G(v);E=-D(u);C=k(v);B=-j(u);g=H*B-E*C;v-=(B*A-E*z)/g;u-=(H*z-C*A)/g;A=y.X(v)-x.X(u);z=y.Y(v)-x.Y(u);w=A*A+z*z;q++}arguments.callee.t1memo=v;arguments.callee.t2memo=u;if(Math.abs(v)<Math.abs(u)){return(new JXG.Coords(JXG.COORDS_BY_USER,[y.X(v),y.Y(v)],this.board))}else{return(new JXG.Coords(JXG.COORDS_BY_USER,[x.X(u),x.Y(u)],this.board))}};JXG.Intersection=function(f,b,e,d,h,g,q,o){this.constructor();this.board=f;this.id=b;this.name=this.id;this.visProp={};this.visProp.visible=true;this.show=true;this.real=true;this.notExistingParents={};this.intersect1=JXG.GetReferenceFromParameter(this.board,e);this.intersect2=JXG.GetReferenceFromParameter(this.board,d);this.type=JXG.OBJECT_TYPE_INTERSECTION;if(((this.intersect1=="")||(this.intersect1==undefined))&&((this.intersect2=="")||(this.intersect2==undefined))){return}if(((this.intersect1.type==this.intersect2.type)&&(this.intersect1.type==JXG.OBJECT_TYPE_LINE||this.intersect1.type==JXG.OBJECT_TYPE_ARROW))||((this.intersect1.type==JXG.OBJECT_TYPE_LINE)&&(this.intersect2.type==JXG.OBJECT_TYPE_ARROW))||((this.intersect2.type==JXG.OBJECT_TYPE_LINE)&&(this.intersect1.type==JXG.OBJECT_TYPE_ARROW))){var j=this.board.algebra.intersectLineLine(this.intersect1,this.intersect2).usrCoords.slice(1);this.p=new JXG.Point(this.board,j,h,q,true);this.p.fixed=true;this.addChild(this.p);this.real=true;this.update=function(){if(this.needsUpdate){this.p.coords=this.board.algebra.intersectLineLine(this.intersect1,this.intersect2);this.needsUpdate=false}};this.hideElement=function(){this.visProp.visible=false;this.p.hideElement()};this.showElement=function(){this.visProp.visible=true;this.p.showElement()};this.hideChild=function(v){this.notExistingParents[v]=this.board.objects[v];for(var u in this.descendants){if(this.descendants[u].visProp.visible&&this.descendants[u].type!=JXG.OBJECT_TYPE_INTERSECTION){if(this.descendants[u].type!=JXG.OBJECT_TYPE_TEXT){this.descendants[u].hideElement();this.descendants[u].visProp.visible=true}else{if(!this.descendants[u].isLabel){this.descendants[u].hideElement();this.descendants[u].visProp.visible=true}}}this.descendants[u].notExistingParents[v]=this.board.objects[v]}};this.showChild=function(v){for(var u in this.board.objects){delete (this.board.objects[u].notExistingParents[v]);if(this.board.objects[u].visProp.visible&&JXG.keys(this.board.objects[u].notExistingParents).length==0){if(this.board.objects[u].type!=JXG.OBJECT_TYPE_INTERSECTION){this.board.objects[u].showElement()}}}}}else{if(((e.type==d.type)&&(e.type==JXG.OBJECT_TYPE_CIRCLE||e.type==JXG.OBJECT_TYPE_ARC))||(e.type==JXG.OBJECT_TYPE_CIRCLE&&d.type==JXG.OBJECT_TYPE_ARC)||(d.type==JXG.OBJECT_TYPE_CIRCLE&&e.type==JXG.OBJECT_TYPE_ARC)){this.p1=new JXG.Point(this.board,[0,0],h,q,false);this.p1.fixed=true;this.p1.label.content.visProp.visible=true;this.p2=new JXG.Point(this.board,[0,0],g,o,false);this.p2.fixed=true;this.p2.label.content.visProp.visible=true;this.addChild(this.p1);this.addChild(this.p2);var k=this.board.algebra.intersectCircleCircle(this.intersect1,this.intersect2);if(k[0]==1){this.p1.coords=k[1];this.p1.showElement();this.p1.updateRenderer();this.p2.coords=k[2];this.p2.showElement();this.p2.updateRenderer();this.real=true}else{this.real=false}this.update=function(){if(!this.needsUpdate){return}var w=this.board.algebra.intersectCircleCircle(this.intersect1,this.intersect2);var v=this.p1.visProp.visible;var u=this.p2.visProp.visible;if(w[0]==0){if(this.real){this.hideChild(this.id);this.p1.visProp.visible=v;this.p2.visProp.visible=u;this.real=false}}else{this.p1.coords=w[1];this.p2.coords=w[2];if(!this.real){this.showChild(this.id);this.real=true}}this.needsUpdate=false};this.hideElement=function(){this.visProp.visible=false;this.p1.hideElement();this.p2.hideElement()};this.showElement=function(){this.visProp.visible=true;this.p1.showElement();this.p2.showElement()};this.hideChild=function(v){this.notExistingParents[v]=this.board.objects[v];for(var u in this.descendants){if(this.descendants[u].visProp.visible&&this.descendants[u].type!=JXG.OBJECT_TYPE_INTERSECTION){if(this.descendants[u].type!=JXG.OBJECT_TYPE_TEXT){this.descendants[u].hideElement();this.descendants[u].visProp.visible=true}else{if(!this.descendants[u].isLabel){this.descendants[u].hideElement();this.descendants[u].visProp.visible=true}}}this.descendants[u].notExistingParents[v]=this.board.objects[v]}};this.showChild=function(u){for(el in this.board.objects){delete (this.board.objects[el].notExistingParents[u]);if(this.board.objects[el].visProp.visible&&JXG.keys(this.board.objects[el].notExistingParents).length==0){if(this.board.objects[el].type!=JXG.OBJECT_TYPE_INTERSECTION){this.board.objects[el].showElement()}}}}}else{this.p1=new JXG.Point(this.board,[0,0],h,q,false);this.p1.fixed=true;this.p1.label.content.visProp.visible=true;this.p2=new JXG.Point(this.board,[0,0],g,o,false);this.p2.fixed=true;this.p2.label.content.visProp.visible=true;this.addChild(this.p1);this.addChild(this.p2);if(this.intersect1.type==JXG.OBJECT_TYPE_LINE||this.intersect1.type==JXG.OBJECT_TYPE_ARROW){var a=this.intersect1;this.intersect1=this.intersect2;this.intersect2=a}var k=this.board.algebra.intersectCircleLine(this.intersect1,this.intersect2);if(k[0]==1){this.p1.coords=k[1];this.p1.showElement();this.p1.update()}else{if(k[0]==2){this.p1.coords=k[1];this.p1.showElement();this.p2.coords=k[2];this.p2.showElement();this.p1.updateRenderer();this.p2.updateRenderer();this.real=true}else{this.real=false}}this.update=function(){if(!this.needsUpdate){return}var w=this.board.algebra.intersectCircleLine(this.intersect1,this.intersect2);var v=this.p1.visProp.visible;var u=this.p2.visProp.visible;if(w[0]==0){if(this.real){this.hideChild(this.id);this.p1.visProp.visible=v;this.p2.visProp.visible=u;this.real=false}}else{if(w[0]==2){this.p1.coords=w[1];this.p2.coords=w[2];if(!this.real){this.showChild(this.id);this.real=true}}}this.needsUpdate=false};this.hideElement=function(){this.visProp.visible=false;this.p1.hideElement();this.p2.hideElement()};this.showElement=function(){this.visProp.visible=true;this.p1.showElement();this.p2.showElement()};this.hideChild=function(v){this.notExistingParents[v]=this.board.objects[v];for(var u in this.descendants){if(this.descendants[u].visProp.visible&&this.descendants[u].type!=JXG.OBJECT_TYPE_INTERSECTION){if(this.descendants[u].type!=JXG.OBJECT_TYPE_TEXT){this.descendants[u].hideElement();this.descendants[u].visProp.visible=true}else{if(!this.descendants[u].isLabel){this.descendants[u].hideElement();this.descendants[u].visProp.visible=true}}}this.descendants[u].notExistingParents[v]=this.board.objects[v]}};this.showChild=function(u){for(el in this.board.objects){delete (this.board.objects[el].notExistingParents[u]);if(this.board.objects[el].visProp.visible&&JXG.keys(this.board.objects[el].notExistingParents).length==0){if(this.board.objects[el].type!=JXG.OBJECT_TYPE_INTERSECTION){this.board.objects[el].showElement()}}}}}}this.id=this.board.addIntersection(this)};JXG.Intersection.prototype=new JXG.GeometryElement();JXG.Intersection.prototype.update=function(){return};JXG.Intersection.prototype.hasPoint=function(a,b){return false};JXG.Intersection.prototype.hideChild=function(a){};JXG.Intersection.prototype.showChild=function(a){};JXG.Intersection.prototype.remove=function(){if(this.p!=undefined){this.board.removeObject(this.p)}if(this.p1!=undefined){this.board.removeObject(this.p1)}if(this.p2!=undefined){this.board.removeObject(this.p2)}return};JXG.Intersection.prototype.updateRenderer=function(){};JXG.createPerpendicular=function(e,h,g){var d,f,a,b;if(JXG.IsPoint(h[0])&&h[1].type==JXG.OBJECT_TYPE_LINE){if(!JXG.IsArray(g.id)){g.id=["",""]}if(!JXG.IsArray(g.name)){g.name=["",""]}d=e.addPerpendicular(h[1],h[0],g.id[0],g.name[0],g.id[1],g.name[1]);a=h[1];f=h[0]}else{if(JXG.IsPoint(h[1])&&h[0].type==JXG.OBJECT_TYPE_LINE){if(!JXG.IsArray(g.id)){g.id=["",""]}if(!JXG.IsArray(g.name)){g.name=["",""]}d=e.addPerpendicular(h[0],h[1],g.id[0],g.name[0],g.id[1],g.name[1]);a=h[0];f=h[1]}else{throw ("Can't create perpendicular with parent types '"+(typeof h[0])+"' and '"+(typeof h[1])+"'.")}}b=d[1];b.generatePolynomial=function(){var k=a.point1.symbolic.x;var j=a.point1.symbolic.y;var x=a.point2.symbolic.x;var w=a.point2.symbolic.y;var z=f.symbolic.x;var y=f.symbolic.y;var u=b.symbolic.x;var o=b.symbolic.y;var v=""+j+"*"+u+"-"+j+"*"+x+"+"+o+"*"+x+"-"+k+"*"+o+"+"+k+"*"+w+"-"+u+"*"+w;var q=""+y+"*"+j+"-"+y+"*"+w+"-"+o+"*"+j+"+"+o+"*"+w+"+"+z+"*"+k+"-"+z+"*"+x+"-"+u+"*"+k+"+"+u+"*"+x;return[v,q]};return d};JXG.createMidpoint=function(g,j,h){var e,d,f;if(j.length==2&&JXG.IsPoint(j[0])&&JXG.IsPoint(j[1])){e=j[0];d=j[1];f=g.addMidpoint(j[0],j[1],h.id,h.name)}else{if(j.length==1&&j[0].type==JXG.OBJECT_TYPE_LINE){e=j[0].point1;d=j[0].point2;f=g.addMidpoint(j[0].point1,j[0].point2,h.id,h.name)}else{throw ("Can't create midpoint.")}}f.generatePolynomial=function(){var k=e.symbolic.x;var b=e.symbolic.y;var q=d.symbolic.x;var o=d.symbolic.y;var v=f.symbolic.x;var u=f.symbolic.y;var a=""+b+"*"+v+"-"+b+"*"+q+"+"+u+"*"+q+"-"+k+"*"+u+"+"+k+"*"+o+"-"+v+"*"+o;var w=""+k+"^2 - 2*"+k+"*"+v+"+"+b+"^2-2*"+b+"*"+u+"-"+q+"^2+2*"+q+"*"+v+"-"+o+"^2+2*"+o+"*"+u;return[a,w]};return f};JXG.createParallel=function(a,d,b){if(JXG.IsPoint(d[0])&&d[1].type==JXG.OBJECT_TYPE_LINE){return a.addParallel(d[1],d[0],b.id,b.name)}else{if(JXG.IsPoint(d[1])&&d[0].type==JXG.OBJECT_TYPE_LINE){return a.addParallel(d[0],d[1],b.id,b.name)}else{throw ("Can't create parallel with parent types '"+(typeof d[0])+"' and '"+(typeof d[1])+"'.")}}};JXG.createNormal=function(h,k,b){var a;var j;if(k.length==1){a=k[0];j=a.slideObject}else{if(k.length==2){if(JXG.IsPoint(k[0])){a=k[0];j=k[1]}else{if(JXG.IsPoint(k[1])){j=k[0];a=k[1]}else{throw ("Can't create normal with parent types '"+(typeof k[0])+"' and '"+(typeof k[1])+"'.")}}}else{throw ("Can't create normal with parent types '"+(typeof k[0])+"' and '"+(typeof k[1])+"'.")}}if(j.elementClass==JXG.OBJECT_CLASS_LINE){return h.createElement("line",[function(){return j.stdform[1]*a.Y()-j.stdform[2]*a.X()},function(){return j.stdform[2]*a.Z()},function(){return -j.stdform[1]*a.Z()}],b)}else{if(j.elementClass==JXG.OBJECT_CLASS_CIRCLE){var o=function(f){return -j.getRadius()*Math.sin(f)};var q=function(f){return j.getRadius()*Math.cos(f)};return h.createElement("line",[function(){return -a.X()*o(a.position)-a.Y()*q(a.position)},function(){return o(a.position)},function(){return q(a.position)}],b)}else{if(j.elementClass==JXG.OBJECT_CLASS_CURVE){if(j.curveType!="plot"){var d=j.X;var e=j.Y;return h.createElement("line",[function(){return -a.X()*h.D(d)(a.position)-a.Y()*h.D(e)(a.position)},function(){return h.D(d)(a.position)},function(){return h.D(e)(a.position)}],b)}else{return h.createElement("line",[function(){var g=Math.floor(a.position);var f=a.position-g;if(g==j.numberPoints-1){g--;f=1}if(g<0){return 1}return(j.Y(g)+f*(j.Y(g+1)-j.Y(g)))*(j.Y(g)-j.Y(g+1))-(j.X(g)+f*(j.X(g+1)-j.X(g)))*(j.X(g+1)-j.X(g))},function(){var f=Math.floor(a.position);if(f==j.numberPoints-1){f--}if(f<0){return 0}return j.X(f+1)-j.X(f)},function(){var f=Math.floor(a.position);if(f==j.numberPoints-1){f--}if(f<0){return 0}return j.Y(f+1)-j.Y(f)}],b)}}else{if(j.type==JXG.OBJECT_TYPE_TURTLE){return h.createElement("line",[function(){var u=Math.floor(a.position);var f=a.position-u;var v,g;for(g=0;g<j.objects.length;g++){v=j.objects[g];if(v.type==JXG.OBJECT_TYPE_CURVE){if(u<v.numberPoints){break}u-=v.numberPoints}}if(u==v.numberPoints-1){u--;f=1}if(u<0){return 1}return(v.Y(u)+f*(v.Y(u+1)-v.Y(u)))*(v.Y(u)-v.Y(u+1))-(v.X(u)+f*(v.X(u+1)-v.X(u)))*(v.X(u+1)-v.X(u))},function(){var g=Math.floor(a.position);var u,f;for(f=0;f<j.objects.length;f++){u=j.objects[f];if(u.type==JXG.OBJECT_TYPE_CURVE){if(g<u.numberPoints){break}g-=u.numberPoints}}if(g==u.numberPoints-1){g--}if(g<0){return 0}return u.X(g+1)-u.X(g)},function(){var g=Math.floor(a.position);var u,f;for(f=0;f<j.objects.length;f++){u=j.objects[f];if(u.type==JXG.OBJECT_TYPE_CURVE){if(g<u.numberPoints){break}g-=u.numberPoints}}if(g==u.numberPoints-1){g--}if(g<0){return 0}return u.Y(g+1)-u.Y(g)}],b)}else{throw ("Can't create normal with parent types '"+(typeof k[0])+"' and '"+(typeof k[1])+"'.")}}}}};JXG.createBisector=function(a,d,b){if(JXG.IsPoint(d[0])&&JXG.IsPoint(d[1])&&JXG.IsPoint(d[2])){return a.addAngleBisector(d[0],d[1],d[2],b.id,b.name)}else{throw ("Can't create angle bisector with parent types '"+(typeof d[0])+"' and '"+(typeof d[1])+"'.")}};JXG.createAngularBisectorsOfTwoLines=function(g,j,e){var d=JXG.GetReferenceFromParameter(g,j[0]);var b=JXG.GetReferenceFromParameter(g,j[1]);var o="";var k="";var h="";var f="";if(e==null){e={}}if(e.id!=null){if(JXG.IsArray(e.id)){o=e.id[0];k=e.id[1]}else{o=e.id;k=e.id}}if(e.name!=null){if(JXG.IsArray(e.name)){h=e.name[0];f=e.name[1]}else{h=e.name;f=e.name}}e.id=o;e.name=h;var a=g.createElement("line",[function(){var v=Math.sqrt(d.stdform[1]*d.stdform[1]+d.stdform[2]*d.stdform[2]);var u=Math.sqrt(b.stdform[1]*b.stdform[1]+b.stdform[2]*b.stdform[2]);return d.stdform[0]/v-b.stdform[0]/u},function(){var v=Math.sqrt(d.stdform[1]*d.stdform[1]+d.stdform[2]*d.stdform[2]);var u=Math.sqrt(b.stdform[1]*b.stdform[1]+b.stdform[2]*b.stdform[2]);return d.stdform[1]/v-b.stdform[1]/u},function(){var v=Math.sqrt(d.stdform[1]*d.stdform[1]+d.stdform[2]*d.stdform[2]);var u=Math.sqrt(b.stdform[1]*b.stdform[1]+b.stdform[2]*b.stdform[2]);return d.stdform[2]/v-b.stdform[2]/u},],e);e.id=k;e.name=f;var q=g.createElement("line",[function(){var v=Math.sqrt(d.stdform[1]*d.stdform[1]+d.stdform[2]*d.stdform[2]);var u=Math.sqrt(b.stdform[1]*b.stdform[1]+b.stdform[2]*b.stdform[2]);return d.stdform[0]/v+b.stdform[0]/u},function(){var v=Math.sqrt(d.stdform[1]*d.stdform[1]+d.stdform[2]*d.stdform[2]);var u=Math.sqrt(b.stdform[1]*b.stdform[1]+b.stdform[2]*b.stdform[2]);return d.stdform[1]/v+b.stdform[1]/u},function(){var v=Math.sqrt(d.stdform[1]*d.stdform[1]+d.stdform[2]*d.stdform[2]);var u=Math.sqrt(b.stdform[1]*b.stdform[1]+b.stdform[2]*b.stdform[2]);return d.stdform[2]/v+b.stdform[2]/u},],e);return[a,q]};JXG.createArrowParallel=function(a,d,b){if(JXG.IsPoint(d[0])&&d[1].type==JXG.OBJECT_TYPE_ARROW){if(!JXG.IsArray(b.id)){b.id=["",""]}if(!JXG.IsArray(b.name)){b.name=["",""]}return a.addArrowParallel(d[1],d[0],b.id[0],b.name[0],b.id[1],b.name[1])}else{if(JXG.IsPoint(d[1])&&d[0].type==JXG.OBJECT_TYPE_ARROW){if(!JXG.IsArray(b.id)){b.id=["",""]}if(!JXG.IsArray(b.name)){b.name=["",""]}return a.addArrowParallel(d[0],d[1],b.id[0],b.name[0],b.id[1],b.name[1])}else{throw ("Can't create parallel arrow with parent types '"+(typeof d[0])+"' and '"+(typeof d[1])+"'.")}}};JXG.createCircumcircle=function(a,d,b){if(JXG.IsPoint(d[0])&&JXG.IsPoint(d[1])&&JXG.IsPoint(d[2])){if(!JXG.IsArray(b.id)){b.id=["",""]}if(!JXG.IsArray(b.name)){b.name=["",""]}return a.addCircumcenter(d[0],d[1],d[2],b.id[0],b.name[0],b.id[1],b.name[1])}else{throw ("Can't create circumcircle with parent types '"+(typeof d[0])+"', '"+(typeof d[1])+"' and '"+(typeof d[2])+"'.")}};JXG.createCircumcircleMidpoint=function(a,d,b){if(JXG.IsPoint(d[0])&&JXG.IsPoint(d[1])&&JXG.IsPoint(d[2])){return a.addCircumcenterMidpoint(d[0],d[1],d[2],b.id,b.name)}else{throw ("Can't create circumcircle midpoint with parent types '"+(typeof d[0])+"', '"+(typeof d[1])+"' and '"+(typeof d[2])+"'.")}};JXG.createParallelPoint=function(a,d,b){if(JXG.IsPoint(d[0])&&JXG.IsPoint(d[1])&&JXG.IsPoint(d[2])){return a.addParallelPoint(d[0],d[1],d[2],b.id,b.name)}else{throw ("Can't create parallel point with parent types '"+(typeof d[0])+"', '"+(typeof d[1])+"' and '"+(typeof d[2])+"'.")}};JXG.createReflection=function(a,d,b){if(JXG.IsPoint(d[0])&&d[1].type==JXG.OBJECT_TYPE_LINE){return a.addReflection(d[1],d[0],b.id,b.name)}else{if(JXG.IsPoint(d[1])&&d[0].type==JXG.OBJECT_TYPE_LINE){return a.addReflection(d[0],d[1],b.id,b.name)}else{throw ("Can't create reflection point with parent types '"+(typeof d[0])+"' and '"+(typeof d[1])+"'.")}}};JXG.createPerpendicularPoint=function(d,g,f){var a,e,b;if(JXG.IsPoint(g[0])&&g[1].type==JXG.OBJECT_TYPE_LINE){e=g[0];a=g[1];b=d.addPerpendicularPoint(g[1],g[0],f.id,f.name)}else{if(JXG.IsPoint(g[1])&&g[0].type==JXG.OBJECT_TYPE_LINE){e=g[1];a=g[0];b=d.addPerpendicularPoint(g[0],g[1],f.id,f.name)}else{throw ("Can't create perpendicular point with parent types '"+(typeof g[0])+"' and '"+(typeof g[1])+"'.")}}b.generatePolynomial=function(){var j=a.point1.symbolic.x;var h=a.point1.symbolic.y;var w=a.point2.symbolic.x;var v=a.point2.symbolic.y;var y=e.symbolic.x;var x=e.symbolic.y;var q=b.symbolic.x;var k=b.symbolic.y;var u=""+h+"*"+q+"-"+h+"*"+w+"+"+k+"*"+w+"-"+j+"*"+k+"+"+j+"*"+v+"-"+q+"*"+v;var o=""+x+"*"+h+"-"+x+"*"+v+"-"+k+"*"+h+"+"+k+"*"+v+"+"+y+"*"+j+"-"+y+"*"+w+"-"+q+"*"+j+"+"+q+"*"+w;return[u,o]};return b};JXG.createMirrorPoint=function(a,d,b){if(JXG.IsPoint(d[0])&&JXG.IsPoint(d[1])){return a.addRotation(d[0],d[1],Math.PI,b.id,b.name)}else{throw ("Can't create mirror point with parent types '"+(typeof d[0])+"' and '"+(typeof d[1])+"'.")}};JXG.createIntegral=function(a,d,b){if(!JXG.IsArray(b.id)||(b.id.length!=5)){b.id=["","","","",""]}if(!JXG.IsArray(b.name)||(b.name.length!=5)){b.name=["","","","",""]}if(JXG.IsArray(d[0])&&d[1].type==JXG.OBJECT_TYPE_CURVE){return a.addIntegral(d[0],d[1],b.id,b.name,b)}else{if(JXG.IsArray(d[1])&&d[0].type==JXG.OBJECT_TYPE_CURVE){return a.addIntegral(d[1],d[0],b.id,b.name,b)}else{throw ("Can't create integral with parent types '"+(typeof d[0])+"' and '"+(typeof d[1])+"'.")}}};JXG.JSXGraph.registerElement("arrowparallel",JXG.createArrowParallel);JXG.JSXGraph.registerElement("bisector",JXG.createBisector);JXG.JSXGraph.registerElement("bisectorlines",JXG.createAngularBisectorsOfTwoLines);JXG.JSXGraph.registerElement("circumcircle",JXG.createCircumcircle);JXG.JSXGraph.registerElement("circumcirclemidpoint",JXG.createCircumcircleMidpoint);JXG.JSXGraph.registerElement("integral",JXG.createIntegral);JXG.JSXGraph.registerElement("midpoint",JXG.createMidpoint);JXG.JSXGraph.registerElement("mirrorpoint",JXG.createMirrorPoint);JXG.JSXGraph.registerElement("normal",JXG.createNormal);JXG.JSXGraph.registerElement("parallel",JXG.createParallel);JXG.JSXGraph.registerElement("parallelpoint",JXG.createParallelPoint);JXG.JSXGraph.registerElement("perpendicular",JXG.createPerpendicular);JXG.JSXGraph.registerElement("perpendicularpoint",JXG.createPerpendicularPoint);JXG.JSXGraph.registerElement("reflection",JXG.createReflection);JXG.Text=function(o,x,j,v,d,a,e,q){this.constructor();this.type=JXG.OBJECT_TYPE_TEXT;this.elementClass=JXG.OBJECT_CLASS_OTHER;this.init(o,d,a);this.contentStr=x;this.plaintextStr="";if((typeof q!="undefined")&&(q!=null)){this.isLabel=q}else{this.isLabel=false}this.visProp.strokeColor=this.board.options.text.strokeColor;this.visProp.visible=true;if(e!=null){this.digits=e}else{this.digits=2}if((this.element=this.board.objects[j])){var h;if(!this.isLabel){h=this.element.getTextAnchor()}else{h=this.element.getLabelAnchor()}this.element.addChild(this);this.relativeCoords=new JXG.Coords(JXG.COORDS_BY_USER,[parseFloat(v[0]),parseFloat(v[1])],this.board);this.coords=new JXG.Coords(JXG.COORDS_BY_USER,[this.relativeCoords.usrCoords[1]+h.usrCoords[1],this.relativeCoords.usrCoords[2]+h.usrCoords[2]],this.board)}else{var w=v[0];if(typeof w=="string"){var g=this.board.algebra.geonext2JS(w);this.X=new Function("","return "+g+";")}else{if(typeof w=="function"){this.X=w}else{if(typeof w=="number"){this.X=function(){return w}}}}var u=v[1];if(typeof u=="string"){var f=this.board.algebra.geonext2JS(u);this.Y=new Function("","return "+f+";")}else{if(typeof u=="function"){this.Y=u}else{if(typeof u=="number"){this.Y=function(){return u}}}}this.coords=new JXG.Coords(JXG.COORDS_BY_USER,[this.X(),this.Y()],this.board);var k="this.coords.setCoordinates(JXG.COORDS_BY_USER,[this.X(),this.Y()]);";this.updateCoords=new Function("",k)}if(typeof this.contentStr=="function"){this.updateText=function(){this.plaintextStr=this.contentStr()}}else{var b;if(typeof this.contentStr=="number"){b=(this.contentStr).toFixed(this.digits)}else{b=this.generateTerm(this.contentStr)}this.updateText=new Function("this.plaintextStr = "+b+";")}if(!this.isLabel){this.id=this.board.addText(this)}if(typeof this.contentStr=="string"){this.notifyParents(this.contentStr)}};JXG.Text.prototype=new JXG.GeometryElement();JXG.Text.prototype.hasPoint=function(a,b){return false};JXG.Text.prototype.setText=function(b){var a;if(typeof b=="number"){a=(b).toFixed(this.digits)}else{a=this.generateTerm(b)}this.updateText=new Function("this.plaintextStr = "+a+";");this.updateText()};JXG.Text.prototype.setCoords=function(a,b){this.X=function(){return a};this.Y=function(){return b};this.coords=new JXG.Coords(JXG.COORDS_BY_USER,[a,b],this.board)};JXG.Text.prototype.update=function(){if(this.needsUpdate){if(this.relativeCoords){var a;if(!this.isLabel){a=this.element.getTextAnchor()}else{a=this.element.getLabelAnchor()}this.coords.setCoordinates(JXG.COORDS_BY_USER,[this.relativeCoords.usrCoords[1]+a.usrCoords[1],this.relativeCoords.usrCoords[2]+a.usrCoords[2]])}else{this.updateCoords()}this.updateText()}};JXG.Text.prototype.updateRenderer=function(){if(this.needsUpdate){this.board.renderer.updateText(this);this.needsUpdate=false}};JXG.Text.prototype.generateTerm=function(f){var e=null;var h=this.board.elementsByName;var g='""';f=f.replace(/\r/g,"");f=f.replace(/\n/g,"");f=f.replace(/\"/g,'\\"');f=f.replace(/\'/g,"\\'");f=f.replace(/&amp;arc;/g,"&ang;");f=f.replace(/<arc\s*\/>/g,"&ang;");f=f.replace(/<sqrt\s*\/>/g,"&radic;");var d;d=f.indexOf("<value>");var a=f.indexOf("</value>");if(d>=0){while(d>=0){g+=' + "'+this.board.algebra.replaceSub(this.board.algebra.replaceSup(f.slice(0,d)))+'"';var b=f.slice(d+7,a);var e=this.board.algebra.geonext2JS(b);e=e.replace(/\\"/g,'"');e=e.replace(/\\'/g,"'");if(e.indexOf("toFixed")<0){g+="+("+e+").toFixed("+(this.digits)+")"}else{g+="+("+e+")"}f=f.slice(a+8);d=f.indexOf("<value>");a=f.indexOf("</value>")}}g+=' + "'+this.board.algebra.replaceSub(this.board.algebra.replaceSup(f))+'"';g=g.replace(/<overline>/g,"<span style=text-decoration:overline>");g=g.replace(/<\/overline>/g,"</span>");g=g.replace(/<arrow>/g,"<span style=text-decoration:overline>");g=g.replace(/<\/arrow>/g,"</span>");g=g.replace(/&amp;/g,"&");return g};JXG.Text.prototype.notifyParents=function(d){var b=null;var e=this.board.elementsByName;do{var a=/<value>([\w\s\*\/\^\-\+\(\)\[\],<>=!]+)<\/value>/;b=a.exec(d);if(b!=null){this.board.algebra.findDependencies(this,b[1]);d=d.substr(b.index);d=d.replace(a,"")}}while(b!=null)};JXG.createText=function(a,d,b){return new JXG.Text(a,d[d.length-1],null,d,b.id,b.name,b.digits,false)};JXG.JSXGraph.registerElement("text",JXG.createText);JXG.Image=function(f,e,h,b,g,j,a,d){this.type=JXG.OBJECT_TYPE_IMAGE;this.elementClass=JXG.OBJECT_CLASS_OTHER;this.transformations=[];this.init(f,j,a);this.coords=new JXG.Coords(JXG.COORDS_BY_USER,h,this.board);this.initialCoords=new JXG.Coords(JXG.COORDS_BY_USER,h,this.board);this.size=[b[0]*f.zoomX*f.unitX,b[1]*f.zoomY*f.unitY];this.imageBase64String=e;this.displayLevel=g;this.parent=d;this.visProp.visible=true;this.id=this.board.addImage(this)};JXG.Image.prototype=new JXG.GeometryElement;JXG.Image.prototype.hasPoint=function(a,b){return false};JXG.Image.prototype.updateRenderer=function(){this.updateTransform();this.board.renderer.updateImage(this)};JXG.Image.prototype.updateTransform=function(){if(this.transformations.length==0){return}for(var a=0;a<this.transformations.length;a++){this.transformations[a].update()}};JXG.Image.prototype.addTransform=function(a){if(JXG.IsArray(a)){for(var b=0;b<a.length;b++){this.transformations.push(a[b])}}else{this.transformations.push(a)}};JXG.createImage=function(a,d,b){return new JXG.Image(a,b.imageString,d[0],d[1],"images",false,false,undefined)};JXG.JSXGraph.registerElement("image",JXG.createImage);JXG.createSlider=function(o,z,w){var h,g,A,j,B,d,b,y,C,k,f,e,a,x,v,q;var u;h=z[0];g=z[1];A=z[2][0];j=z[2][1];B=z[2][2];if(w==null){w={}}if(w.strokeColor==null||typeof w.strokeColor=="undefined"){w.strokeColor="#0080c0"}if(w.fillColor==null||typeof w.fillColor=="undefined"){w.fillColor="#0080c0"}d=o.createElement("point",h,{visible:false,fixed:true,name:"",withLabel:false});b=o.createElement("point",g,{visible:false,fixed:true,name:"",withLabel:false});y=o.createElement("line",[d,b],{straightFirst:false,straightLast:false,strokewidth:1,name:"",withLabel:false,strokeColor:w.strokeColor});C=1;k=o.createElement("ticks",[y,b.Dist(d)/C],{insertTicks:true,drawLabels:false,drawZero:true});d.needsRegularUpdate=false;b.needsRegularUpdate=false;y.needsRegularUpdate=false;f=h[0]+(g[0]-h[0])*(j-A)/(B-A);e=h[1]+(g[1]-h[1])*(j-A)/(B-A);if(w.snapWidth!=null){u=w.snapWidth}if(w.snapwidth!=null){u=w.snapwidth}a=o.createElement("glider",[f,e,y],{style:6,strokeColor:w.strokeColor,fillColor:w.fillColor,showInfobox:false,name:"",snapWidth:u});x=o.createElement("line",[d,a],{straightFirst:false,straightLast:false,strokewidth:3,strokeColor:w.strokeColor,name:"",withLabel:false});a.Value=function(){return this.Dist(d)/b.Dist(d)*(B-A)+A};a._smax=B;a._smin=A;if(w.name&&w.name!=""){v=w.name+" = "}else{v=""}q=o.createElement("text",[((g[0]-h[0])*0.05+g[0]),((g[1]-h[1])*0.05+g[1]),function(){return v+(a.Value()).toFixed(2)}],{name:""});return a};JXG.JSXGraph.registerElement("slider",JXG.createSlider);JXG.Chart=function(h,o,e){this.constructor();if(o.length==0){return}this.elements=[];var d=e.id||"";var b=e.name||"";this.init(h,d,b);var q,k,f;if(o.length>0&&(typeof o[0]=="number")){k=o;q=[];for(f=0;f<k.length;f++){q[f]=f+1}}else{if(o.length==1){k=o[0];q=[];var g;if(typeof k=="function"){g=k().length}else{g=k.length}for(f=0;f<g;f++){q[f]=f+1}}if(o.length==2){q=o[0];k=o[1]}}if(e==undefined){e={}}var a=e.chartStyle||"line";a=a.replace(/ /g,"");a=a.split(",");var j;for(f=0;f<a.length;f++){switch(a[f]){case"bar":j=this.drawBar(h,[q,k],e);break;case"line":j=this.drawLine(h,[q,k],e);break;case"spline":j=this.drawSpline(h,[q,k],e);break;case"pie":j=this.drawPie(h,[k],e);break;case"point":j=this.drawPoints(h,[q,k],e);break}this.elements.push(j)}this.id=this.board.addChart(this);return this.elements};JXG.Chart.prototype=new JXG.GeometryElement;JXG.Chart.prototype.drawLine=function(d,b,a){var e=d.createElement("curve",b,a);this.rendNode=e.rendNode;return e};JXG.Chart.prototype.drawSpline=function(d,h,a){var j=h[0];var f=h[1];var q=JXG.Math.Numerics.splineDef(j,f);var k=new Array();var b=0;var o=(j[j.length-1]-j[0])/d.canvasWidth*1;while(j[0]+b*o<j[j.length-1]){k[b]=j[0]+b*o;b++}var g=JXG.Math.Numerics.splineEval(k,j,f,q);var e=d.createElement("curve",[k,g],a);this.rendNode=e.rendNode;return e};JXG.Chart.prototype.drawBar=function(j,o,g){var h;var f=[];if(g.fillOpacity==undefined){g.fillOpacity=0.6}var q=o[0];var k=o[1];var u;if(g&&g.width){u=g.width}else{if(q.length<=1){u=1}else{u=q[1]-q[0];for(h=1;h<q.length-1;h++){u=(q[h+1]-q[h]<u)?(q[h+1]-q[h]):u}}u*=0.8}for(h=0;h<q.length;h++){var d,z,v,b,a;if(typeof q[h]=="function"){d=function(){return q[h]()-u*0.5};z=function(){return q[h]()};v=function(){return q[h]()+u*0.5}}else{d=q[h]-u*0.5;z=q[h];v=q[h]+u*0.5}if(typeof k[h]=="function"){a=b}else{a=k[h]+0.2}b=k[h];var e=[];if(g.dir=="horizontal"){e[0]=j.createElement("point",[0,d],{name:"",fixed:true,visible:false});e[1]=j.createElement("point",[b,d],{name:"",fixed:true,visible:false});e[2]=j.createElement("point",[b,v],{name:"",fixed:true,visible:false});e[3]=j.createElement("point",[0,v],{name:"",fixed:true,visible:false});if(g.labels&&g.labels[h]){j.createElement("text",[b,v,g.labels[h]],g)}}else{e[0]=j.createElement("point",[d,0],{name:"",fixed:true,visible:false});e[1]=j.createElement("point",[d,b],{name:"",fixed:true,visible:false});e[2]=j.createElement("point",[v,b],{name:"",fixed:true,visible:false});e[3]=j.createElement("point",[v,0],{name:"",fixed:true,visible:false});if(g.labels&&g.labels[h]){j.createElement("text",[v,b,g.labels[h]],g)}}g.withLines=false;f[h]=j.createElement("polygon",e,g)}this.rendNode=f[0].rendNode;return f};JXG.Chart.prototype.drawPoints=function(g,d,b){var e;var f=[];b.fixed=true;b.name="";var a=d[0];var h=d[1];for(e=0;e<a.length;e++){f[e]=g.createElement("point",[a[e],h[e]],b)}this.rendNode=f[0].rendNode;return f};JXG.Chart.prototype.drawPie=function(e,z,g){var h=z[0];if(h.length<=0){return}if(typeof h[0]=="function"){return}var x;var v=[];var k=[];var f=[];var o=e.mathStatistics.sum(h);var d=g.colorArray||["#B02B2C","#3F4C6B","#C79810","#D15600","#FFFF88","#C3D9FF","#4096EE","#008C00"];var b=g.radius||4;var A={};A.name=g.name;A.id=g.id;A.strokeWidth=g.strokeWidth||1;A.strokeColor=g.strokeColor||"none";A.straightFirst=false;A.straightLast=false;A.fillColor=g.fillColor||"#FFFF88";A.fillOpacity=g.fillOpacity||0.6;A.highlightFillColor=g.highlightFillColor||"#FF7400";A.highlightStrokeColor=g.highlightStrokeColor||"#FF7400";var u=g.center||[0,0];var w=u[0];var a=u[1];var B=e.createElement("point",[w,a],{name:"",fixed:true,visible:false});v[0]=e.createElement("point",[b+w,0+a],{name:"",fixed:true,visible:false});var C=0;for(x=0;x<h.length;x++){C+=(o!=0)?(2*Math.PI*h[x]/o):0;var j=b*Math.cos(C)+w;var q=b*Math.sin(C)+a;v[x+1]=e.createElement("point",[j,q],{name:"",fixed:true,visible:false,withLabel:false});k[x]=e.createElement("line",[B,v[x]],{strokeColor:"#ffffff",straightFirst:false,straightLast:false,strokeWidth:6,strokeOpacity:1,withLabel:false});A.fillColor=d[x%d.length];f[x]=e.createElement("arc",[B,v[x],v[x+1]],A)}this.rendNode=f[0].rendNode;return f};JXG.Chart.prototype.updateRenderer=function(){};JXG.Chart.prototype.update=function(){if(this.needsUpdate){this.updateDataArray()}};JXG.Chart.prototype.updateDataArray=function(){};JXG.createChart=function(d,b,a){return new JXG.Chart(d,b,a)};JXG.JSXGraph.registerElement("chart",JXG.createChart);JXG.Transformation=function(b,a,d){this.elementClass=JXG.OBJECT_CLASS_OTHER;this.matrix=[[1,0,0],[0,1,0],[0,0,1]];this.board=b;this.isNumericMatrix=false;this.setMatrix(b,a,d)};JXG.Transformation.prototype={};JXG.Transformation.prototype.update=function(){};JXG.Transformation.prototype.setMatrix=function(d,b,e){var a;this.isNumericMatrix=true;for(a=0;a<e.length;a++){if(typeof e[a]!="number"){this.isNumericMatrix=false;break}}if(b=="translate"){this.evalParam=JXG.createEvalFunction(d,e,2);this.update=function(){this.matrix[1][0]=this.evalParam(0);this.matrix[2][0]=this.evalParam(1)}}else{if(b=="scale"){this.evalParam=JXG.createEvalFunction(d,e,2);this.update=function(){this.matrix[1][1]=this.evalParam(0);this.matrix[2][2]=this.evalParam(1)}}else{if(b=="reflect"){if(e.length<4){e[0]=JXG.GetReferenceFromParameter(d,e[0])}if(e.length==2){e[1]=JXG.GetReferenceFromParameter(d,e[1])}if(e.length==4){this.evalParam=JXG.createEvalFunction(d,e,4)}this.update=function(){if(e.length==1){var f=e[0].point2.X()-e[0].point1.X();var k=e[0].point2.Y()-e[0].point1.Y();var g=e[0].point1.X();var j=e[0].point1.Y()}else{if(e.length==2){var f=e[1].X()-e[0].X();var k=e[1].Y()-e[0].Y();var g=e[0].X();var j=e[0].Y()}else{if(e.length==4){var f=this.evalParam(2)-this.evalParam(0);var k=this.evalParam(3)-this.evalParam(1);var g=this.evalParam(0);var j=this.evalParam(1)}}}var h=f*f+k*k;this.matrix[1][1]=(f*f-k*k)/h;this.matrix[1][2]=2*f*k/h;this.matrix[2][1]=2*f*k/h;this.matrix[2][2]=(-f*f+k*k)/h;this.matrix[1][0]=g*(1-this.matrix[1][1])-j*this.matrix[1][2];this.matrix[2][0]=j*(1-this.matrix[2][2])-g*this.matrix[2][1]}}else{if(b=="rotate"){if(e.length==3){this.evalParam=JXG.createEvalFunction(d,e,3)}else{if(e.length<=2){this.evalParam=JXG.createEvalFunction(d,e,1);if(e.length==2){e[1]=JXG.GetReferenceFromParameter(d,e[1])}}}this.update=function(){var g=this.evalParam(0);this.matrix[1][1]=Math.cos(g);this.matrix[1][2]=-Math.sin(g);this.matrix[2][1]=Math.sin(g);this.matrix[2][2]=Math.cos(g);if(e.length>1){if(e.length==3){var f=this.evalParam(1);var h=this.evalParam(2)}else{var f=e[1].X();var h=e[1].Y()}this.matrix[1][0]=f*(1-Math.cos(g))+h*Math.sin(g);this.matrix[2][0]=h*(1-Math.cos(g))-f*Math.sin(g)}}}else{if(b=="shear"){this.evalParam=JXG.createEvalFunction(d,e,1);this.update=function(){var f=this.evalParam(0);this.matrix[1][1]=Math.tan(f)}}else{if(b=="generic"){this.evalParam=JXG.createEvalFunction(d,e,9);this.update=function(){this.matrix[0][0]=this.evalParam(0);this.matrix[0][1]=this.evalParam(1);this.matrix[0][2]=this.evalParam(2);this.matrix[1][0]=this.evalParam(3);this.matrix[1][1]=this.evalParam(4);this.matrix[1][2]=this.evalParam(5);this.matrix[2][0]=this.evalParam(6);this.matrix[2][1]=this.evalParam(7);this.matrix[2][2]=this.evalParam(8)}}}}}}}};JXG.Transformation.prototype.apply=function(a){this.update();if(arguments[1]!=null){return this.matVecMult(this.matrix,a.initialCoords.usrCoords)}else{return this.matVecMult(this.matrix,a.coords.usrCoords)}};JXG.Transformation.prototype.applyOnce=function(b){if(!JXG.IsArray(b)){this.update();var d=this.matVecMult(this.matrix,b.coords.usrCoords);b.coords.setCoordinates(JXG.COORDS_BY_USER,[d[1],d[2]])}else{for(var a=0;a<b.length;a++){this.update();var d=this.matVecMult(this.matrix,b[a].coords.usrCoords);b[a].coords.setCoordinates(JXG.COORDS_BY_USER,[d[1],d[2]])}}};JXG.Transformation.prototype.bindTo=function(b){if(JXG.IsArray(b)){for(var a=0;a<b.length;a++){b[a].transformations.push(this)}}else{b.transformations.push(this)}};JXG.Transformation.prototype.matVecMult=function(b,a){return this.board.algebra.matVecMult(b,a)};JXG.Transformation.prototype.setProperty=function(a){};JXG.Transformation.prototype.melt=function(f){var e=[];for(var d=0;d<f.matrix.length;d++){e[d]=[]}this.update();f.update();for(d=0;d<f.matrix.length;d++){for(var b=0;b<this.matrix[0].length;b++){var g=0;for(var a=0;a<this.matrix.length;a++){g+=f.matrix[d][a]*this.matrix[a][b]}e[d][b]=g}}this.update=function(){for(d=0;d<this.matrix.length;d++){for(b=0;b<this.matrix[0].length;b++){this.matrix[d][b]=e[d][b]}}};return true};JXG.createTransform=function(a,d,b){return new JXG.Transformation(a,b.type,d)};JXG.JSXGraph.registerElement("transform",JXG.createTransform);JXG.Turtle=function(f,e,b){var a,g,d;this.type=JXG.OBJECT_TYPE_TURTLE;this.turtleIsHidden=false;this.board=f;if(b==null){this.attributes={}}else{this.attributes=b}this.attributes.straightFirst=false;this.attributes.straightLast=false;this.attributes.withLabel=false;a=0;g=0;d=90;if(e.length!=0){if(e.length==3){a=e[0];g=e[1];d=e[2]}else{if(e.length==2){if(JXG.IsArray(e[0])){a=e[0][0];g=e[0][1];d=e[1]}else{a=e[0];g=e[1]}}else{a=e[0][0];g=e[0][1]}}}this.init(a,g,d);return this};JXG.Turtle.prototype=new JXG.GeometryElement;JXG.Turtle.prototype.init=function(a,e,d){this.arrowLen=20/Math.sqrt(this.board.unitX*this.board.unitX+this.board.unitY*this.board.unitY);this.pos=[a,e];this.isPenDown=true;this.dir=90;this.stack=[];this.objects=[];this.attributes.curveType="plot";this.curve=this.board.createElement("curve",[[this.pos[0]],[this.pos[1]]],this.attributes);this.objects.push(this.curve);this.turtle=this.board.createElement("point",this.pos,{fixed:true,name:" ",visible:false,withLabel:false});this.objects.push(this.turtle);this.turtle2=this.board.createElement("point",[this.pos[0],this.pos[1]+this.arrowLen],{fixed:true,name:" ",visible:false,withLabel:false});this.objects.push(this.turtle2);var b=this.attributes.strokeWidth||this.attributes.strokewidth||2;this.arrow=this.board.createElement("line",[this.turtle,this.turtle2],{lastArrow:true,strokeColor:"#ff0000",straightFirst:false,straightLast:false,strokeWidth:b,withLabel:false});this.objects.push(this.arrow);this.right(90-d);this.board.update()};JXG.Turtle.prototype.forward=function(a){if(a==0){return}var d=a*Math.cos(this.dir*Math.PI/180);var b=a*Math.sin(this.dir*Math.PI/180);if(!this.turtleIsHidden){var e=this.board.createElement("transform",[d,b],{type:"translate"});e.applyOnce(this.turtle);e.applyOnce(this.turtle2)}if(this.isPenDown){if(this.curve.dataX.length>=8192){this.curve=this.board.createElement("curve",[[this.pos[0]],[this.pos[1]]],this.attributes);this.objects.push(this.curve)}}this.pos[0]+=d;this.pos[1]+=b;if(this.isPenDown){this.curve.dataX.push(this.pos[0]);this.curve.dataY.push(this.pos[1])}this.board.update();return this};JXG.Turtle.prototype.back=function(a){return this.forward(-a)};JXG.Turtle.prototype.right=function(b){this.dir-=b;this.dir%=360;if(!this.turtleIsHidden){var a=this.board.createElement("transform",[-b*Math.PI/180,this.turtle],{type:"rotate"});a.applyOnce(this.turtle2)}this.board.update();return this};JXG.Turtle.prototype.left=function(a){return this.right(-a)};JXG.Turtle.prototype.penUp=function(){this.isPenDown=false;return this};JXG.Turtle.prototype.penDown=function(){this.isPenDown=true;this.curve=this.board.createElement("curve",[[this.pos[0]],[this.pos[1]]],this.attributes);this.objects.push(this.curve);return this};JXG.Turtle.prototype.clean=function(){for(var a=0;a<this.objects.length;a++){var b=this.objects[a];if(b.type==JXG.OBJECT_TYPE_CURVE){this.board.removeObject(b.id);this.objects.splice(a,1)}}this.curve=this.board.createElement("curve",[[this.pos[0]],[this.pos[1]]],this.attributes);this.objects.push(this.curve);this.board.update();return this};JXG.Turtle.prototype.clearScreen=function(){for(var a=0;a<this.objects.length;a++){var b=this.objects[a];this.board.removeObject(b.id)}this.init(0,0,90);return this};JXG.Turtle.prototype.setPos=function(a,d){if(JXG.IsArray(a)){this.pos=a}else{this.pos=[a,d]}if(!this.turtleIsHidden){this.turtle.setPositionDirectly(JXG.COORDS_BY_USER,a,d);this.turtle2.setPositionDirectly(JXG.COORDS_BY_USER,a,d+this.arrowLen);var b=this.board.createElement("transform",[-(this.dir-90)*Math.PI/180,this.turtle],{type:"rotate"});b.applyOnce(this.turtle2)}this.curve=this.board.createElement("curve",[[this.pos[0]],[this.pos[1]]],this.attributes);this.objects.push(this.curve);this.board.update();return this};JXG.Turtle.prototype.setPenSize=function(a){this.attributes.strokeWidth=a;this.curve=this.board.createElement("curve",[[this.pos[0]],[this.pos[1]]],this.attributes);this.objects.push(this.curve);return this};JXG.Turtle.prototype.setPenColor=function(a){this.attributes.strokeColor=a;this.curve=this.board.createElement("curve",[[this.pos[0]],[this.pos[1]]],this.attributes);this.objects.push(this.curve);return this};JXG.Turtle.prototype.setProperty=function(){var f;var a;var d,e;var b;for(d=0;d<arguments.length;d++){a=arguments[d];if(typeof a=="string"){f=a.split(":")}else{if(!JXG.IsArray(a)){for(var b in a){this.setProperty([b,a[b]])}return this}else{f=a}}this.attributes[f[0]]=f[1]}for(d=0;d<this.objects.length;d++){e=this.objects[d];if(e.type==JXG.OBJECT_TYPE_CURVE){e.setProperty(this.attributes)}}return this};JXG.Turtle.prototype.showTurtle=function(){this.turtleIsHidden=false;this.arrow.setProperty("visible:true");this.setPos(this.pos[0],this.pos[1]);this.board.update();return this};JXG.Turtle.prototype.hideTurtle=function(){this.turtleIsHidden=true;this.arrow.setProperty("visible:false");this.setPos(this.pos[0],this.pos[1]);this.board.update();return this};JXG.Turtle.prototype.home=function(){this.pos=[0,0];this.setPos(this.pos[0],this.pos[1]);return this};JXG.Turtle.prototype.pushTurtle=function(){this.stack.push([this.pos[0],this.pos[1],this.dir]);return this};JXG.Turtle.prototype.popTurtle=function(){var a=this.stack.pop();this.pos[0]=a[0];this.pos[1]=a[1];this.dir=a[2];this.setPos(this.pos[0],this.pos[1]);return this};JXG.Turtle.prototype.lookTo=function(f){if(JXG.IsArray(f)){var b=this.pos[0];var a=this.pos[1];var h=f[0];var e=f[1];var d;var g=(h-b>0)?1:-1;if(Math.abs(h-b)>1e-7){d=Math.atan((e-a)/(h-b))+((g<0)?Math.PI:0)}else{d=((e-a>0)?0.5:-0.5)*Math.PI}this.right(this.dir-(d*180/Math.PI))}else{if(JXG.IsNumber(f)){this.right(this.dir-(f))}}return this};JXG.Turtle.prototype.moveTo=function(e){if(JXG.IsArray(e)){var b=e[0]-this.pos[0];var a=e[1]-this.pos[1];if(!this.turtleIsHidden){var d=this.board.createElement("transform",[b,a],{type:"translate"});d.applyOnce(this.turtle);d.applyOnce(this.turtle2)}if(this.isPenDown){if(this.curve.dataX.length>=8192){this.curve=this.board.createElement("curve",[[this.pos[0]],[this.pos[1]]],this.attributes);this.objects.push(this.curve)}}this.pos[0]=e[0];this.pos[1]=e[1];if(this.isPenDown){this.curve.dataX.push(this.pos[0]);this.curve.dataY.push(this.pos[1])}this.board.update()}return this};JXG.Turtle.prototype.fd=function(a){return this.forward(a)};JXG.Turtle.prototype.bk=function(a){return this.back(a)};JXG.Turtle.prototype.lt=function(a){return this.left(a)};JXG.Turtle.prototype.rt=function(a){return this.right(a)};JXG.Turtle.prototype.pu=function(){return this.penUp()};JXG.Turtle.prototype.pd=function(){return this.penDown()};JXG.Turtle.prototype.ht=function(){return this.hideTurtle()};JXG.Turtle.prototype.st=function(){return this.showTurtle()};JXG.Turtle.prototype.cs=function(){return this.clearScreen()};JXG.Turtle.prototype.push=function(){return this.pushTurtle()};JXG.Turtle.prototype.pop=function(){return this.popTurtle()};JXG.Turtle.prototype.X=function(a){return this.pos[0]};JXG.Turtle.prototype.Y=function(a){return this.pos[1]};JXG.Turtle.prototype.hasPoint=function(a,e){var b,d;for(b=0;b<this.objects.length;b++){d=this.objects[b];if(d.type==JXG.OBJECT_TYPE_CURVE){if(d.hasPoint(a,e)){return true}}}return false};JXG.createTurtle=function(d,b,a){if(b==null){var b=[]}return new JXG.Turtle(d,b,a)};JXG.JSXGraph.registerElement("turtle",JXG.createTurtle);JXG.RGBColor=function(h){this.ok=false;if(h.charAt(0)=="#"){h=h.substr(1,6)}h=h.replace(/ /g,"");h=h.toLowerCase();var a={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"00ffff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000000",blanchedalmond:"ffebcd",blue:"0000ff",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"00ffff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dodgerblue:"1e90ff",feldspar:"d19275",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"ff00ff",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgrey:"d3d3d3",lightgreen:"90ee90",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslateblue:"8470ff",lightslategray:"778899",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"00ff00",limegreen:"32cd32",linen:"faf0e6",magenta:"ff00ff",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370d8",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"d87093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",red:"ff0000",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",violetred:"d02090",wheat:"f5deb3",white:"ffffff",whitesmoke:"f5f5f5",yellow:"ffff00",yellowgreen:"9acd32"};for(var d in a){if(h==d){h=a[d]}}var j=[{re:/^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/,example:["rgb(123, 234, 45)","rgb(255,234,245)"],process:function(k){return[parseInt(k[1]),parseInt(k[2]),parseInt(k[3])]}},{re:/^(\w{2})(\w{2})(\w{2})$/,example:["#00ff00","336699"],process:function(k){return[parseInt(k[1],16),parseInt(k[2],16),parseInt(k[3],16)]}},{re:/^(\w{1})(\w{1})(\w{1})$/,example:["#fb0","f0f"],process:function(k){return[parseInt(k[1]+k[1],16),parseInt(k[2]+k[2],16),parseInt(k[3]+k[3],16)]}}];for(var b=0;b<j.length;b++){var f=j[b].re;var e=j[b].process;var g=f.exec(h);if(g){channels=e(g);this.r=channels[0];this.g=channels[1];this.b=channels[2];this.ok=true}}this.r=(this.r<0||isNaN(this.r))?0:((this.r>255)?255:this.r);this.g=(this.g<0||isNaN(this.g))?0:((this.g>255)?255:this.g);this.b=(this.b<0||isNaN(this.b))?0:((this.b>255)?255:this.b)};JXG.RGBColor.prototype.toRGB=function(){return"rgb("+this.r+", "+this.g+", "+this.b+")"};JXG.RGBColor.prototype.toHex=function(){var e=this.r.toString(16);var d=this.g.toString(16);var a=this.b.toString(16);if(e.length==1){e="0"+e}if(d.length==1){d="0"+d}if(a.length==1){a="0"+a}return"#"+e+d+a};JXG.hsv2rgb=function(u,h,g){var j,v,d,o,k,e,b,a,w;u=((u%360)+360)%360;if(h==0){if(isNaN(u)){j=g;v=g;d=g}else{return"#000000"}}else{if(u>=360){e=0}else{e=u}e=e/60;k=Math.floor(e);o=e-k;b=g*(1-h);a=g*(1-(h*o));w=g*(1-(h*(1-o)));switch(k){case 0:j=g;v=w;d=b;break;case 1:j=a;v=g;d=b;break;case 2:j=b;v=g;d=w;break;case 3:j=b;v=a;d=g;break;case 4:j=w;v=b;d=g;break;case 5:j=g;v=b;d=a;break}}j=Math.round(j*255).toString(16);j=(j.length==0)?"00":((j.length==1)?"0"+j:j);v=Math.round(v*255).toString(16);v=(v.length==0)?"00":((v.length==1)?"0"+v:v);d=Math.round(d*255).toString(16);d=(d.length==0)?"00":((d.length==1)?"0"+d:d);return"#"+j+v+d};JXG.Board=function(a,g,b,q,o,k,j,h,d,e,f){this.BOARD_MODE_NONE=0;this.BOARD_MODE_DRAG=1;this.BOARD_MODE_CONSTRUCT=16;this.BOARD_MODE_MOVE_ORIGIN=2;this.BOARD_QUALITY_LOW=1;this.BOARD_QUALITY_HIGH=2;this.CONSTRUCTION_TYPE_POINT=1129599060;this.CONSTRUCTION_TYPE_CIRCLE=1129595724;this.CONSTRUCTION_TYPE_LINE=1129598030;this.CONSTRUCTION_TYPE_GLIDER=1129596740;this.CONSTRUCTION_TYPE_MIDPOINT=1129598288;this.CONSTRUCTION_TYPE_PERPENDICULAR=1129599044;this.CONSTRUCTION_TYPE_PARALLEL=1129599052;this.CONSTRUCTION_TYPE_INTERSECTION=1129597267;this.container=a;this.containerObj=document.getElementById(this.container);this.renderer=g;this.options=new JXG.Options();this.dimension=2;this.origin={};this.origin.usrCoords=[1,0,0];this.origin.scrCoords=[1,q[0],q[1]];this.zoomX=o;this.zoomY=k;this.unitX=j;this.unitY=h;this.canvasWidth=d;this.canvasHeight=e;this.fontSize=this.options.fontSize;this.algebra=new JXG.Algebra(this);this.mathStatistics=new JXG.MathStatistics();if((b!="")&&(b!=null)&&(typeof document.getElementById(b)!="undefined")){this.id=b}else{this.id=this.generateId()}this.hooks=[];this.objects={};this.highlightedObjects={};this.numObjects=0;this.elementsByName={};this.mode=this.BOARD_MODE_NONE;this.updateQuality=this.BOARD_QUALITY_HIGH;this.isSuspendedRedraw=false;this.snapToGrid=this.options.grid.snapToGrid;this.gridX=this.options.grid.gridX;this.gridY=this.options.grid.gridY;this.gridColor=this.options.grid.gridColor;this.gridOpacity=this.options.grid.gridOpacity;this.gridDash=this.options.grid.gridDash;this.snapSizeX=this.options.grid.snapSizeX;this.snapSizeY=this.options.grid.snapSizeY;this.calculateSnapSizes();this.hasGrid=this.options.grid.hasGrid;this.drag_dx=0;this.drag_dy=0;this.drag_obj=null;this.xmlString="";if((f!=null&&f)||(f==null&&this.options.showCopyright)){this.renderer.displayCopyright(JXG.JSXGraph.licenseText,this.options.fontSize)}this.needsFullUpdate=false;this.reducedUpdate=false;this.geonextCompatibilityMode=false;JXG.addEvent(document,"mousedown",this.mouseDownListener,this);JXG.addEvent(this.containerObj,"mousemove",this.mouseMoveListener,this)};JXG.Board.prototype.generateName=function(d){if(d.type==JXG.OBJECT_TYPE_TICKS){return}var k;if(d.elementClass==JXG.OBJECT_CLASS_POINT){k=["","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]}else{k=["","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]}var f=3;var b="";var q="";var o="";if(d.elementClass==JXG.OBJECT_CLASS_POINT||d.elementClass==JXG.OBJECT_CLASS_LINE){}else{if(d.type==JXG.OBJECT_TYPE_POLYGON){b="P_{";o="}"}else{if(d.type==JXG.OBJECT_TYPE_CIRCLE){b="k_{";o="}"}else{if(d.type==JXG.OBJECT_TYPE_ANGLE){b="W_{";o="}"}else{b="s_{";o="}"}}}}var u=[];var a="";var h="";var g=0;var e=0;for(g=0;g<f;g++){u[g]=0}while(u[f-1]<k.length){for(u[0]=1;u[0]<k.length;u[0]++){a=b;for(g=f;g>0;g--){a+=k[u[g-1]]}if(this.elementsByName[a+o]==null){return a+o}}u[0]=k.length;for(g=1;g<f;g++){if(u[g-1]==k.length){u[g-1]=1;u[g]++}}}return""};JXG.Board.prototype.generateId=function(){var a=1;while(JXG.JSXGraph.boards["gxtBoard"+a]!=null){a=Math.round(Math.random()*33)}return("gxtBoard"+a)};JXG.Board.prototype.getRelativeMouseCoordinates=function(b){var d=this.containerObj;var a=JXG.getOffset(d);a[0]+=parseInt(JXG.getStyle(d,"borderLeftWidth"));a[1]+=parseInt(JXG.getStyle(d,"borderTopWidth"));a[0]+=parseInt(JXG.getStyle(d,"paddingLeft"));a[1]+=parseInt(JXG.getStyle(d,"paddingTop"));return a};JXG.Board.prototype.clickLeftArrow=function(a){this.origin.scrCoords[1]+=this.canvasWidth*0.1;this.moveOrigin()};JXG.Board.prototype.clickRightArrow=function(a){this.origin.scrCoords[1]-=this.canvasWidth*0.1;this.moveOrigin()};JXG.Board.prototype.clickUpArrow=function(a){this.origin.scrCoords[2]+=this.canvasHeight*0.1;this.moveOrigin()};JXG.Board.prototype.clickDownArrow=function(a){this.origin.scrCoords[2]-=this.canvasHeight*0.1;this.moveOrigin()};JXG.Board.prototype.mouseUpListener=function(a){this.updateQuality=this.BOARD_QUALITY_HIGH;JXG.removeEvent(document,"mouseup",this.mouseUpListener,this);if(this.mode==this.BOARD_MODE_MOVE_ORIGIN){this.moveOrigin()}else{var b=this.reducedUpdate;this.reducedUpdate=false;this.fullUpdate();this.reducedUpdate=b}this.mode=this.BOARD_MODE_NONE;this.drag_obj=null};JXG.Board.prototype.mouseDownListener=function(g){var e;var f=this.getRelativeMouseCoordinates(g);var a=JXG.getPosition(g);var d=a[0]-f[0];var b=a[1]-f[1];if(g.shiftKey){this.drag_dx=d-this.origin.scrCoords[1];this.drag_dy=b-this.origin.scrCoords[2];this.mode=this.BOARD_MODE_MOVE_ORIGIN;JXG.addEvent(document,"mouseup",this.mouseUpListener,this);return}if(this.mode==this.BOARD_MODE_CONSTRUCT){return}this.mode=this.BOARD_MODE_DRAG;if(this.mode==this.BOARD_MODE_DRAG){for(e in this.objects){if((this.objects[e].hasPoint!=undefined)&&(this.objects[e].hasPoint(d,b))&&((this.objects[e].type==JXG.OBJECT_TYPE_POINT)||(this.objects[e].type==JXG.OBJECT_TYPE_GLIDER))&&(this.objects[e].visProp.visible)&&(!this.objects[e].fixed)){this.drag_obj=this.objects[e];if((this.objects[e].type==JXG.OBJECT_TYPE_POINT)||(this.objects[e].type==JXG.OBJECT_TYPE_GLIDER)){break}}}}if(this.drag_obj==null){this.mode=this.BOARD_MODE_NONE;return}this.dragObjCoords=new JXG.Coords(JXG.COORDS_BY_SCREEN,[d,b],this);JXG.addEvent(document,"mouseup",this.mouseUpListener,this)};JXG.Board.prototype.mouseMoveListener=function(d){var f;var h=this.getRelativeMouseCoordinates(d);var b=JXG.getPosition(d);var a=b[0]-h[0];var j=b[1]-h[1];this.updateQuality=this.BOARD_QUALITY_LOW;this.dehighlightAll();if(this.mode!=this.BOARD_MODE_DRAG){this.renderer.hide(this.infobox)}if(this.mode==this.BOARD_MODE_MOVE_ORIGIN){this.origin.scrCoords[1]=a-this.drag_dx;this.origin.scrCoords[2]=j-this.drag_dy;this.moveOrigin()}else{if(this.mode==this.BOARD_MODE_DRAG){var e=new JXG.Coords(JXG.COORDS_BY_SCREEN,this.getScrCoordsOfMouse(a,j),this);if(this.drag_obj.type==JXG.OBJECT_TYPE_POINT||this.drag_obj.type==JXG.OBJECT_TYPE_LINE||this.drag_obj.type==JXG.OBJECT_TYPE_CIRCLE||this.drag_obj.type==JXG.OBJECT_TYPE_CURVE){if((this.geonextCompatibilityMode&&this.drag_obj.type==JXG.OBJECT_TYPE_POINT)||this.drag_obj.group.length!=0){this.drag_obj.setPositionDirectly(JXG.COORDS_BY_USER,e.usrCoords[1],e.usrCoords[2])}else{this.drag_obj.setPositionByTransform(JXG.COORDS_BY_USER,e.usrCoords[1]-this.dragObjCoords.usrCoords[1],e.usrCoords[2]-this.dragObjCoords.usrCoords[2]);this.dragObjCoords=e}this.update()}else{if(this.drag_obj.type==JXG.OBJECT_TYPE_GLIDER){var g=this.drag_obj.coords;this.drag_obj.setPositionDirectly(JXG.COORDS_BY_USER,e.usrCoords[1],e.usrCoords[2]);if(this.drag_obj.slideObject.type==JXG.OBJECT_TYPE_CIRCLE){this.drag_obj.coords=this.algebra.projectPointToCircle(this.drag_obj,this.drag_obj.slideObject)}else{if(this.drag_obj.slideObject.type==JXG.OBJECT_TYPE_LINE){this.drag_obj.coords=this.algebra.projectPointToLine(this.drag_obj,this.drag_obj.slideObject)}}if(this.drag_obj.group.length!=0){this.drag_obj.group[this.drag_obj.group.length-1].dX=this.drag_obj.coords.scrCoords[1]-g.scrCoords[1];this.drag_obj.group[this.drag_obj.group.length-1].dY=this.drag_obj.coords.scrCoords[2]-g.scrCoords[2];this.drag_obj.group[this.drag_obj.group.length-1].update(this)}else{this.update(this.drag_obj)}}}this.updateInfobox(this.drag_obj)}else{for(f in this.objects){if((this.objects[f].hasPoint!=undefined)&&(this.objects[f].hasPoint(a,j))&&(this.objects[f].visProp.visible==true)){this.renderer.highlight(this.objects[f]);this.highlightedObjects[f]=this.objects[f];this.updateInfobox(this.objects[f])}}}}};JXG.Board.prototype.updateInfobox=function(b){var a,d;if((b.elementClass==JXG.OBJECT_CLASS_POINT)&&b.showInfobox){this.infobox.setCoords(b.coords.usrCoords[1]*1+this.infobox.distanceX/(this.unitX*this.zoomX),b.coords.usrCoords[2]*1+this.infobox.distanceY/(this.unitY*this.zoomY));a=Math.abs(b.coords.usrCoords[1]);if(a>0.1){a=b.coords.usrCoords[1].toFixed(2)}else{if(a>=0.01){a=b.coords.usrCoords[1].toFixed(4)}else{if(a>=0.0001){a=b.coords.usrCoords[1].toFixed(6)}else{a=b.coords.usrCoords[1]}}}d=Math.abs(b.coords.usrCoords[2]);if(d>0.1){d=b.coords.usrCoords[2].toFixed(2)}else{if(d>=0.01){d=b.coords.usrCoords[2].toFixed(4)}else{if(d>=0.0001){d=b.coords.usrCoords[2].toFixed(6)}else{d=b.coords.usrCoords[2]}}}this.infobox.setText('<span style="color:#bbbbbb;">('+a+", "+d+")</span>");this.renderer.show(this.infobox);this.renderer.updateText(this.infobox)}};JXG.Board.prototype.dehighlightAll=function(){for(var a in this.highlightedObjects){this.renderer.noHighlight(this.highlightedObjects[a])}this.highlightedObjects={}};JXG.Board.prototype.getScrCoordsOfMouse=function(a,d){if(this.snapToGrid){var b=new JXG.Coords(JXG.COORDS_BY_SCREEN,[a,d],this);b.setCoordinates(JXG.COORDS_BY_USER,[Math.round((b.usrCoords[1])*this.snapSizeX)/this.snapSizeX,Math.round((b.usrCoords[2])*this.snapSizeY)/this.snapSizeY]);return[b.scrCoords[1],b.scrCoords[2]]}else{return[a,d]}};JXG.Board.prototype.getUsrCoordsOfMouse=function(f){var d=this.getRelativeMouseCoordinates(f);var b=JXG.getPosition(f);var a=b[0]-d[0];var g=b[1]-d[1];var e=new JXG.Coords(JXG.COORDS_BY_SCREEN,[a,g],this);if(this.snapToGrid){e.setCoordinates(JXG.COORDS_BY_USER,[Math.round((e.usrCoords[1])*this.snapSizeX)/this.snapSizeX,Math.round((e.usrCoords[2])*this.snapSizeY)/this.snapSizeY])}return[e.usrCoords[1],e.usrCoords[2]]};JXG.Board.prototype.getAllUnderMouse=function(b){var a=this.getAllObjectsUnderMouse(b);a.push(this.getUsrCoordsOfMouse(b));return a};JXG.Board.prototype.getAllObjectsUnderMouse=function(h){var g=this.getRelativeMouseCoordinates(h);var a=JXG.getPosition(h);var d=a[0]-g[0];var b=a[1]-g[1];var e=[];for(var f in this.objects){if(this.objects[f].visProp.visible&&this.objects[f].hasPoint(d,b)){e.push(this.objects[f])}}return e};JXG.Board.prototype.setBoardMode=function(a){this.mode=a};JXG.Board.prototype.moveOrigin=function(){for(var a in this.objects){if((this.objects[a].elementClass==JXG.OBJECT_CLASS_POINT)||(this.objects[a].type==JXG.OBJECT_TYPE_CURVE)||(this.objects[a].type==JXG.OBJECT_TYPE_AXIS)||(this.objects[a].type==JXG.OBJECT_TYPE_TEXT)){if((this.objects[a].type!=JXG.OBJECT_TYPE_CURVE)&&(this.objects[a].type!=JXG.OBJECT_TYPE_AXIS)){this.objects[a].coords.usr2screen()}}}this.clearTraces();this.fullUpdate();if(this.hasGrid){this.renderer.removeGrid(this);this.renderer.drawGrid(this)}};JXG.Board.prototype.addPoint=function(d){var b=this.numObjects;this.numObjects++;var a=d.id;if((a=="")||(a==null)){a=this.id+"P"+b}if(d.hasLabel){d.label.content.id=a+"Label"}this.objects[a]=d;this.elementsByName[d.name]=d;d.id=a;if(d.hasLabel){this.addText(d.label.content)}this.renderer.drawPoint(d);if(d.hasLabel){this.renderer.drawText(d.label.content)}if(!d.visProp.visible){this.renderer.hide(d)}if(d.hasLabel&&!d.label.content.visProp.visible){this.renderer.hide(d.label.content)}return a};JXG.Board.prototype.addLine=function(d){var b=this.numObjects;this.numObjects++;var a=d.id;if((a=="")||(a==null)){a=this.id+"L"+b}if(d.hasLabel){d.label.content.id=a+"Label"}this.objects[a]=d;d.id=a;this.renderer.drawLine(d);if(d.hasLabel){this.renderer.drawText(d.label.content)}if(!d.visProp.visible){this.renderer.hide(d)}if(d.hasLabel&&!d.label.content.visProp.visible){this.renderer.hide(d.label.content)}return a};JXG.Board.prototype.addCircle=function(d){var b=this.numObjects;this.numObjects++;var a=d.id;if((a=="")||(a==null)){a=this.id+"C"+b}if(d.hasLabel){d.label.content.id=a+"Label"}this.objects[a]=d;d.id=a;if(d.hasLabel){this.addText(d.label.content)}this.renderer.drawCircle(d);if(d.hasLabel){this.renderer.drawText(d.label.content)}if(!d.visProp.visible){this.renderer.hide(d)}if(d.hasLabel&&!d.label.content.visProp.visible){this.renderer.hide(d.label.content)}return a};JXG.Board.prototype.addPolygon=function(d){var b=this.numObjects;this.numObjects++;var a=d.id;if((a=="")||(a==null)){a=this.id+"Py"+b}if(d.hasLabel){d.label.content.id=a+"Label"}this.objects[a]=d;d.id=a;if(d.hasLabel){this.addText(d.label.content)}this.renderer.drawPolygon(d);if(d.hasLabel){this.renderer.drawText(d.label.content)}if(!d.visProp.visible){this.renderer.hide(d)}if(d.hasLabel&&!d.label.content.visProp.visible){this.renderer.hide(d.label.content)}return a};JXG.Board.prototype.addArc=function(d){var b=this.numObjects;this.numObjects++;var a=d.id;if((a=="")||(a==null)){a=this.id+"Ac"+b}d.id=a;if(d.hasLabel){d.label.content.id=a+"Label"}this.objects[a]=d;if(d.hasLabel){this.addText(d.label.content)}this.renderer.drawArc(d);if(d.hasLabel){this.renderer.drawText(d.label.content)}if(!d.visProp.visible){this.renderer.hide(d)}if(d.hasLabel&&!d.label.content.visProp.visible){this.renderer.hide(d.label.content)}return a};JXG.Board.prototype.addSector=function(d){var b=this.numObjects;this.numObjects++;var a=d.id;if((a=="")||(a==null)){a=this.id+"Sc"+b}this.objects[a]=d;d.id=a;return a};JXG.Board.prototype.addAngle=function(d){var b=this.numObjects;this.numObjects++;var a=d.id;if((a=="")||(a==null)){a=this.id+"Ag"+b}if(d.hasLabel){d.label.content.id=a+"Label"}this.objects[a]=d;if(d.hasLabel){this.addText(d.label.content)}this.renderer.drawAngle(d);if(d.hasLabel){this.renderer.drawText(d.label.content)}if(!d.visProp.visible){this.renderer.hide(d)}if(d.hasLabel&&!d.label.content.visProp.visible){this.renderer.hide(d.label.content)}return a};JXG.Board.prototype.addCurve=function(d){var b=this.numObjects;this.numObjects++;var a=d.id;if((a=="")||(a==null)){a=this.id+"G"+b}if(d.hasLabel){d.label.content.id=a+"Label"}this.objects[a]=d;if(d.hasLabel){this.addText(d.label.content)}d.id=a;this.renderer.drawCurve(d);if(d.hasLabel){this.renderer.drawText(d.label.content)}if(!d.visProp.visible){this.renderer.hide(d)}if(d.hasLabel&&!d.label.content.visProp.visible){this.renderer.hide(d.label.content)}return a};JXG.Board.prototype.addChart=function(d){var b=this.numObjects;this.numObjects++;var a=d.id;if((a=="")||(a==null)){a=this.id+"Chart"+b}this.objects[a]=d;d.id=a;return a};JXG.Board.prototype.addMidpoint=function(h,g,j,b){var e=JXG.GetReferenceFromParameter(this,h);var d=JXG.GetReferenceFromParameter(this,g);var a=this.algebra.midpoint(e,d).usrCoords.slice(1);var f=new JXG.Point(this,a,j,b,true);f.fixed=true;e.addChild(f);d.addChild(f);f.update=function(){if(this.needsUpdate){this.coords=this.board.algebra.midpoint(e,d);this.label.content.update();if(this.traced){this.cloneToBackground(true)}}};return f};JXG.Board.prototype.addReflection=function(e,d,j,g){var f=JXG.GetReferenceFromParameter(this,d);var b=JXG.GetReferenceFromParameter(this,e);var a=this.algebra.reflection(b,f).usrCoords.slice(1);var h=new JXG.Point(this,a,j,g,true);h.fixed=true;f.addChild(h);b.addChild(h);h.update=function(){if(this.needsUpdate){this.coords=this.board.algebra.reflection(b,f);this.label.content.update();if(this.traced){this.cloneToBackground(true)}}};return h};JXG.Board.prototype.addRotation=function(a,k,j,e,b){var f=JXG.GetReferenceFromParameter(this,k);var h=JXG.GetReferenceFromParameter(this,a);var g=this.algebra.rotation(h,f,j).usrCoords.slice(1);var d=new JXG.Point(this,g,e,b,true);d.fixed=true;f.addChild(d);h.addChild(d);d.update=function(){if(this.needsUpdate){this.coords=this.board.algebra.rotation(h,f,j);this.label.content.update();this.needsUpdate=false;if(this.traced){this.cloneToBackground(true)}}};return d};JXG.Board.prototype.addParallel=function(e,d,b,a){var k=JXG.GetReferenceFromParameter(this,d);var o=JXG.GetReferenceFromParameter(this,e);var f=this.numObjects;f++;if((b=="")||(b==null)){b=this.id+"L"+f}var h=this.algebra.parallel(o.point1,o.point2,k).usrCoords.slice(1);var j=new JXG.Point(this,h,b+"P2",a+"P2",false);j.fixed=true;k.addChild(j);var g=new JXG.Line(this,k.id,j.id,b,a);g.update=function(){if(this.needsUpdate){this.point2.coords=this.board.algebra.parallel(o.point1,o.point2,k);this.updateStdform();if(this.traced){this.cloneToBackground(true)}}};return g};JXG.Board.prototype.addArrowParallel=function(o,b,u,f,g,h){var v=JXG.GetReferenceFromParameter(this,b);var q=JXG.GetReferenceFromParameter(this,o);var d=this.numObjects;d++;if((u=="")||(u==null)){u=this.id+"A"+d}d++;if((f=="")||(f==null)){f=this.id+"P"+d}var j=this.algebra.parallel(q.point1,q.point2,v).usrCoords.slice(1);var k=new JXG.Point(this,j,f,h,true);k.fixed=true;v.addChild(k);q.addChild(k);var e=new JXG.Line(this,v.id,k.id,u,g);e.setStraight(false,false);e.setArrow(false,true);e.update=function(){if(this.needsUpdate){this.point2.coords=this.board.algebra.parallel(q.point1,q.point2,v);this.updateStdform();if(this.traced){this.cloneToBackground(true)}}};k.update=function(){if(this.needsUpdate){this.coords=this.board.algebra.parallel(q.point1,q.point2,v);if(this.label.content.visProp.visible){this.label.content.update()}if(this.traced){this.cloneToBackground(true)}}};return[e,k]};JXG.Board.prototype.addParallelPoint=function(h,g,f,j,a){var e=this.numObjects;e++;if((j=="")||(j==null)){j=this.id+"P"+e}h=JXG.GetReferenceFromParameter(this,h);g=JXG.GetReferenceFromParameter(this,g);f=JXG.GetReferenceFromParameter(this,f);var d=this.algebra.parallel(h,g,f).usrCoords.slice(1);var b=new JXG.Point(this,d,j,a,true);b.fixed=true;h.addChild(b);f.addChild(b);if(h.type==JXG.OBJECT_TYPE_POINT){g.addChild(b)}b.update=function(){if(this.needsUpdate){this.coords=this.board.algebra.parallel(h,g,f);this.label.content.update();if(this.traced){this.cloneToBackground(true)}}};return b};JXG.Board.prototype.addArrow=function(d){var b=this.numObjects;this.numObjects++;var a=d.id;if((a=="")||(a==null)){a=this.id+"A"+b}this.objects[a]=d;d.id=a;this.renderer.drawArrow(d);return a};JXG.Board.prototype.addNormal=function(f,d,b,a){var o=JXG.GetReferenceFromParameter(this,d);var q=JXG.GetReferenceFromParameter(this,f);var g=this.numObjects;g++;if((b=="")||(b==null)){b=this.id+"L"+g}var k=this.algebra.perpendicular(q,o);var h=k[0].usrCoords.slice(1);var j=new JXG.Point(this,h,b+"P2","",false);j.fixed=true;o.addChild(j);q.addChild(j);var e;if(k[1]){e=new JXG.Line(this,j.id,o.id,b,a)}else{e=new JXG.Line(this,o.id,j.id,b,a)}e.changed=k[1];e.update=function(){if(this.needsUpdate){var v=this.board.algebra.perpendicular(q,o);j.coords=v[0];if(this.changed!=v[1]){var u=this.point1;this.point1=this.point2;this.point2=u}this.updateStdform();if(this.traced){this.cloneToBackground(true)}}};return e};JXG.Board.prototype.addPerpendicular=function(e,a,o,g,h,b){var u=JXG.GetReferenceFromParameter(this,a);var v=JXG.GetReferenceFromParameter(this,e);var f=this.numObjects;f++;if((o=="")||(o==null)){o=this.id+"L"+f}f++;if((h=="")||(h==null)){h=this.id+"P"+f}var q=this.algebra.perpendicular(v,u);var j=q[0].usrCoords.slice(1);var k=new JXG.Point(this,j,h,b,true);k.fixed=true;u.addChild(k);v.addChild(k);var d;if(q[1]){d=new JXG.Line(this,k.id,u.id,o,g)}else{d=new JXG.Line(this,u.id,k.id,o,g)}d.setStraight(false,false);d.changed=q[1];d.update=function(){if(this.needsUpdate){var x=this.board.algebra.perpendicular(v,u);k.coords=x[0];if(this.changed!=x[1]){var w=this.point1;this.point1=this.point2;this.point2=w}this.updateStdform();if(this.traced){this.cloneToBackground(true)}}};return[d,k]};JXG.Board.prototype.addPerpendicularPoint=function(d,a,f,b){var j=JXG.GetReferenceFromParameter(this,a);var k=JXG.GetReferenceFromParameter(this,d);var e=this.numObjects;e++;if((f=="")||(f==null)){f=this.id+"P"+e}var g=this.algebra.perpendicular(k,j)[0].usrCoords.slice(1);var h=new JXG.Point(this,g,f,b,true);h.fixed=true;j.addChild(h);k.addChild(h);h.update=function(){if(this.needsUpdate){this.coords=this.board.algebra.perpendicular(k,j)[0];this.label.content.update();if(this.traced){this.cloneToBackground(true)}}};return h};JXG.Board.prototype.addCircumcenter=function(j,f,e,g,h,d,a){var q=JXG.GetReferenceFromParameter(this,j);var o=JXG.GetReferenceFromParameter(this,f);var k=JXG.GetReferenceFromParameter(this,e);var b=this.algebra.circumcenterMidpoint(q,o,k);var v=new JXG.Point(this,b.usrCoords.slice(1),g,h,true);v.fixed=true;q.addChild(v);o.addChild(v);k.addChild(v);var u=new JXG.Circle(this,"pointRadius",v.id,function(){return this.midpoint.coords.distance(JXG.COORDS_BY_USER,q.coords)},d,a);q.addChild(u);o.addChild(u);k.addChild(u);v.update=function(){if(this.needsUpdate){this.coords=this.board.algebra.circumcenterMidpoint(q,o,k);if(this.label.content.visProp.visible){this.label.content.update()}if(this.traced){this.cloneToBackground(true)}}};u.update=function(){if(this.needsUpdate){this.updateRadius();this.updateStdform();if(this.traced){this.cloneToBackground(true)}}};return[v,u]};JXG.Board.prototype.addCircumcenterMidpoint=function(g,d,b,e,f){var k=JXG.GetReferenceFromParameter(this,g);var j=JXG.GetReferenceFromParameter(this,d);var h=JXG.GetReferenceFromParameter(this,b);var a=this.algebra.circumcenterMidpoint(k,j,h).usrCoords.slice(1);var o=new JXG.Point(this,a,e,f,true);o.fixed=true;k.addChild(o);j.addChild(o);h.addChild(o);o.update=function(){if(this.needsUpdate){this.coords=this.board.algebra.circumcenterMidpoint(k,j,h);if(this.label.content.visProp.visible){this.label.content.update()}if(this.traced){this.cloneToBackground(true)}}};return o};JXG.Board.prototype.addIntersection=function(d){var b=this.numObjects;this.numObjects++;var a=d.id;if((a=="")||(a==null)){a=this.id+"I"+b}this.objects[a]=d;d.id=a;d.intersect1.addChild(d);d.intersect2.addChild(d);return a};JXG.Board.prototype.addAngleBisector=function(u,q,o,b,a){var j=JXG.GetReferenceFromParameter(this,u);var g=JXG.GetReferenceFromParameter(this,q);var e=JXG.GetReferenceFromParameter(this,o);var d=this.numObjects;d++;if((b=="")||(b==null)){b=this.id+"L"+d}var h=this.algebra.angleBisector(j,g,e).usrCoords.slice(1);var k=new JXG.Point(this,h,b+"P2","",false);k.fixed=true;j.addChild(k);g.addChild(k);e.addChild(k);var f=new JXG.Line(this,q,k.id,b,a);f.setStraight(false,true);f.update=function(){if(this.needsUpdate){this.point2.coords=this.board.algebra.angleBisector(j,g,e);this.updateStdform();if(this.traced){this.cloneToBackground(true)}}};return f};JXG.Board.prototype.addText=function(d){var b=this.numObjects;this.numObjects++;var a=d.id;if((a=="")||(a==null)){a=this.id+"T"+b}this.objects[a]=d;d.id=a;if(!d.isLabel){this.renderer.drawText(d);if(!d.visProp.visible){this.renderer.hide(d)}}return a};JXG.Board.prototype.addConditions=function(q){var o=null;var b="var el,x,y,c;\n";var k=q.indexOf("<data>");var h=q.indexOf("</data>");if(k<0){return}while(k>=0){var g=q.slice(k+6,h);var f=g.indexOf("=");var e=g.slice(0,f);var v=g.slice(f+1);f=e.indexOf(".");var a=e.slice(0,f);var d=this.elementsByName[JXG.unescapeHTML(a)];var u=e.slice(f+1).replace(/\s+/g,"").toLowerCase();v=this.algebra.geonext2JS(v);v=v.replace(/this\.board\./g,"this.");if(typeof this.elementsByName[a]=="undefined"){alert("debug conditions: |"+a+"| undefined")}b+='el = this.objects["'+d.id+'"];\n';switch(u){case"x":b+="y=el.coords.usrCoords[2];\n";b+="el.setPositionDirectly(JXG.COORDS_BY_USER,"+(v)+",y);\n";b+="el.update();\n";break;case"y":b+="x=el.coords.usrCoords[1];\n";b+="el.coords=new JXG.Coords(JXG.COORDS_BY_USER,[x,"+(v)+"],this);\n";break;case"visible":b+="c="+(v)+";\n";b+="if (c) {el.showElement();} else {el.hideElement();}\n";break;case"position":b+="el.position = "+(v)+";\n";b+="el.update();\n";break;case"stroke":b+="el.strokeColor = "+(v)+";\n";break;case"strokewidth":b+="el.strokeWidth = "+(v)+";\n";break;case"label":break;default:alert("property '"+u+"' in conditions not implemented:"+v);break}q=q.slice(h+7);k=q.indexOf("<data>");h=q.indexOf("</data>")}b+="this.prepareUpdate();\n";b+="this.updateElements();\n";b+="return true;\n";this.updateConditions=new Function(b);this.updateConditions()};JXG.Board.prototype.updateConditions=function(){return false};JXG.Board.prototype.addImage=function(d){var b=this.numObjects;this.numObjects++;var a=d.id;if((a=="")||(a==null)){a=this.id+"Im"+b}this.objects[a]=d;this.elementsByName[d.name]=d;d.id=a;this.renderer.drawImage(d);if(!d.visProp.visible){this.renderer.hide(d)}return a};JXG.Board.prototype.addIntegral=function(f,h,a,v,u){if(!JXG.IsArray(a)||(a.length!=5)){a=["","","","",""]}if(!JXG.IsArray(v)||(v.length!=5)){v=["","","","",""]}var y=[];var b={};if((typeof u!="undefined")&&(u!=null)){b=u}b.name=v[0];b.id=a[0];b.slideObject=h;var e=0;if(f[0]>h.points[0].usrCoords[1]){e=f[0]}else{e=h.points[0].usrCoords[1]}var w=board.createElement("point",[e,h.yterm(e)],b);b.name=v[1];b.id=a[1];b.visible=false;b.slideObject=null;var x=board.createElement("point",[function(){return w.X()},0],b);y.push(x);y.push(w);w.addChild(x);var k;for(var o=0;o<h.numberPoints;o++){if((f[0]<=h.points[o].usrCoords[1])&&(h.points[o].usrCoords[1]<=f[1])){k={type:JXG.OBJECT_TYPE_POINT,elementClass:JXG.OBJECT_CLASS_POINT,addChild:function(A){},X:function(){},Y:function(){},coords:h.points[o]};y.push(k)}}b.name=v[2];b.id=a[2];b.slideObject=h;b.visible=true;var g=board.createElement("point",[y[y.length-1].coords.usrCoords[1],h.yterm(y[y.length-1].coords.usrCoords[1])],b);b.name=v[3];b.id=a[3];b.slideObject=null;b.visible=false;var j=board.createElement("point",[function(){return g.X()},0],b);y.push(g);y.push(j);g.addChild(j);var q=JXG.Math.Numerics.I([y[0].coords.usrCoords[1],y[y.length-1].coords.usrCoords[1]],h.yterm);var z=board.createElement("text",[function(){return g.X()+0.2},function(){return g.Y()-1},function(){var A=JXG.Math.Numerics.I([y[0].coords.usrCoords[1],y[y.length-1].coords.usrCoords[1]],h.yterm);return"&int; = "+(A).toFixed(4)}]);var b={};if((typeof u!="undefined")&&(u!=null)){b=u}b.withLines=false;b.name=v[4];b.id=a[4];b.visible=true;var d=board.createElement("polygon",y,b);d.update=function(){var B;var C=[x,w];for(var A=0;A<h.numberPoints;A++){if((x.X()<=h.points[A].usrCoords[1])&&(h.points[A].usrCoords[1]<=j.X())){B={type:JXG.OBJECT_TYPE_POINT,elementClass:JXG.OBJECT_CLASS_POINT,addChild:function(D){},X:function(){},Y:function(){},coords:h.points[A]};C.push(B)}}C.push(g);C.push(j);C.push(x);this.vertices=C};w.addChild(d);g.addChild(d);w.addChild(z);g.addChild(z);return d};JXG.Board.prototype.calculateSnapSizes=function(){var d=new JXG.Coords(JXG.COORDS_BY_USER,[0,0],this);var b=new JXG.Coords(JXG.COORDS_BY_USER,[1/this.gridX,1/this.gridY],this);var a=d.scrCoords[1]-b.scrCoords[1];var e=d.scrCoords[2]-b.scrCoords[2];this.snapSizeX=this.gridX;while(Math.abs(a)>25){this.snapSizeX*=2;a/=2}this.snapSizeY=this.gridY;while(Math.abs(e)>25){this.snapSizeY*=2;e/=2}};JXG.Board.prototype.applyZoom=function(){this.updateQuality=this.BOARD_QUALITY_HIGH;for(var a in this.objects){if((this.objects[a].elementClass==JXG.OBJECT_CLASS_POINT)||(this.objects[a].type==JXG.OBJECT_TYPE_CURVE)||(this.objects[a].type==JXG.OBJECT_TYPE_AXIS)||(this.objects[a].type==JXG.OBJECT_TYPE_TEXT)){if((this.objects[a].type!=JXG.OBJECT_TYPE_CURVE)&&(this.objects[a].type!=JXG.OBJECT_TYPE_AXIS)){this.objects[a].coords.usr2screen()}}}this.calculateSnapSizes();this.clearTraces();this.fullUpdate();if(this.hasGrid){this.renderer.removeGrid(this);this.renderer.drawGrid(this)}};JXG.Board.prototype.zoomIn=function(){this.zoomX*=this.options.zoom.factor;this.zoomY*=this.options.zoom.factor;this.applyZoom()};JXG.Board.prototype.zoomOut=function(){this.zoomX/=this.options.zoom.factor;this.zoomY/=this.options.zoom.factor;this.applyZoom()};JXG.Board.prototype.zoom100=function(){this.zoomX=1;this.zoomY=1;this.applyZoom()};JXG.Board.prototype.zoomAllPoints=function(){var q=this.zoomX/this.zoomY;var j=0;var e=0;var h=0;var b=0;for(var g in this.objects){if((this.objects[g].elementClass==JXG.OBJECT_CLASS_POINT)&&this.objects[g].visProp.visible){if(this.objects[g].coords.usrCoords[1]<j){j=this.objects[g].coords.usrCoords[1]}if(this.objects[g].coords.usrCoords[1]>e){e=this.objects[g].coords.usrCoords[1]}if(this.objects[g].coords.usrCoords[2]>b){b=this.objects[g].coords.usrCoords[2]}if(this.objects[g].coords.usrCoords[2]<h){h=this.objects[g].coords.usrCoords[2]}}}var k=50;var x=k/(this.unitX*this.zoomX);var w=k/(this.unitY*this.zoomY);var v=e-j+2*x;var u=b-h+2*w;var o=Math.min(this.canvasWidth/(this.unitX*v),this.canvasHeight/(this.unitY*u));var d=o;var f=o*q;var a=-(j-x)*this.unitX*f;var y=(b+w)*this.unitY*d;this.origin=new JXG.Coords(JXG.COORDS_BY_SCREEN,[a,y],this);this.zoomX=f;this.zoomY=d;this.applyZoom()};JXG.Board.prototype.removeObject=function(a){a=JXG.GetReferenceFromParameter(this,a);if(a==undefined){return}try{for(var f in a.childElements){a.childElements[f].board.removeObject(a.childElements[f])}for(var b in this.objects){if(typeof this.objects[b].childElements!="undefined"){delete (this.objects[b].childElements[a.id])}}delete (this.objects[a.id]);delete (this.elementsByName[a.name]);if(a.remove!=undefined){a.remove()}}catch(d){}};JXG.Board.prototype.initGeonextBoard=function(){var f=new JXG.Point(this,[0,0],this.id+"gOOe0","Ursprung",false);f.fixed=true;var e=new JXG.Point(this,[1,0],this.id+"gXOe0","Punkt_1_0",false);e.fixed=true;var d=new JXG.Point(this,[0,1],this.id+"gYOe0","Punkt_0_1",false);d.fixed=true;var b=new JXG.Line(this,this.id+"gOOe0",this.id+"gXOe0",this.id+"gXLe0","X-Achse");b.hideElement();var a=new JXG.Line(this,this.id+"gOOe0",this.id+"gYOe0",this.id+"gYLe0","Y-Achse");a.hideElement()};JXG.Board.prototype.initInfobox=function(){this.infobox=new JXG.Text(this,"0,0","",[0,0],this.id+"__infobox",null,null,false);this.infobox.distanceX=-20;this.infobox.distanceY=25;this.renderer.hide(this.infobox)};JXG.Board.prototype.resizeContainer=function(a,b){this.canvasWidth=1*a;this.canvasHeight=1*b;this.containerObj.style.width=(this.canvasWidth)+"px";this.containerObj.style.height=(this.canvasHeight)+"px"};JXG.Board.prototype.showDependencies=function(){var d;var b="<p>\n";for(d in this.objects){var a=0;for(var g in this.objects[d].childElements){a++}if(a>=0){b+="<b>"+this.objects[d].id+":</b> "}for(var g in this.objects[d].childElements){b+=this.objects[d].childElements[g].id+"("+this.objects[d].childElements[g].name+"), "}b+="<p>\n"}b+="</p>\n";var e=window.open();e.document.open();e.document.write(b);e.document.close()};JXG.Board.prototype.showXML=function(){var a=window.open("");a.document.open();a.document.write("<pre>"+JXG.escapeHTML(this.xmlString)+"</pre>");a.document.close()};JXG.Board.prototype.prepareUpdate=function(b){for(var a in this.objects){this.objects[a].needsUpdate=true}};JXG.Board.prototype.updateElements=function(b){b=JXG.GetReferenceFromParameter(this,b);var d=-1;if(!this.reducedUpdate){d=1}for(var a in this.objects){var e=this.objects[a];if(!this.needsFullUpdate&&!e.needsRegularUpdate&&e.afterFirstUpdate){continue}if(b==null||e.id!=b.id){if(d>=0||!e.afterFirstUpdate||this.needsFullUpdate){e.update(true)}}else{e.update(false);d=5}if(this.reducedUpdate){d--}}};JXG.Board.prototype.updateRenderer=function(b){var b=JXG.GetReferenceFromParameter(this,b);var d=-1;if(!this.reducedUpdate){d=1}for(var a in this.objects){var e=this.objects[a];if(!this.needsFullUpdate&&!e.needsRegularUpdate&&e.afterFirstUpdate){continue}if(b==null||e.id!=b.id){if(d>=0||!e.afterFirstUpdate||this.needsFullUpdate){e.updateRenderer()}}else{e.updateRenderer();d=5}if(this.reducedUpdate){d--}e.afterFirstUpdate=true}};JXG.Board.prototype.addHook=function(a){this.hooks.push(a);a(this);return(this.hooks.length-1)};JXG.Board.prototype.removeHook=function(a){this.hooks[a]=null};JXG.Board.prototype.updateHooks=function(){for(var a=0;a<this.hooks.length;a++){if(this.hooks[a]!=null){this.hooks[a](this)}}};JXG.Board.prototype.update=function(a){if(this.isSuspendedUpdate){return}this.prepareUpdate(a);this.updateElements(a);this.updateConditions();this.renderer.suspendRedraw();this.updateRenderer(a);this.renderer.unsuspendRedraw();this.updateHooks();for(var b in JXG.JSXGraph.boards){if(JXG.JSXGraph.boards[b]!=this){JXG.JSXGraph.boards[b].prepareUpdate(a);JXG.JSXGraph.boards[b].updateElements(a);JXG.JSXGraph.boards[b].updateConditions();JXG.JSXGraph.boards[b].renderer.suspendRedraw();JXG.JSXGraph.boards[b].updateRenderer(a);JXG.JSXGraph.boards[b].renderer.unsuspendRedraw();JXG.JSXGraph.boards[b].updateHooks()}}};JXG.Board.prototype.fullUpdate=function(){this.needsFullUpdate=true;this.update();this.needsFullUpdate=false};JXG.Board.prototype.createElement=function(b,d,a){if(b!="turtle"&&(d==null||d.length==0)){return null}if(d==null){d=[]}var g;b=b.toLowerCase();if(a==null){a={}}for(var e=0;e<d.length;e++){d[e]=JXG.GetReferenceFromParameter(this,d[e])}if(JXG.JSXGraph.elements[b]!=null){g=JXG.JSXGraph.elements[b](this,d,a)}else{throw"JXG.createElement: Unknown element type given: "+b}if(g==undefined){return}if(JXG.IsArray(a)){a=a[0]}if(g.multipleElements){for(var f in g){if(typeof g[f].setProperty!="undefined"){g[f].setProperty(a)}}}else{if(typeof g.setProperty!="undefined"){g.setProperty(a)}}this.update();return g};JXG.Board.prototype.clearTraces=function(){for(var a in this.objects){if(this.objects[a].traced){this.objects[a].clearTrace()}}};JXG.Board.prototype.beforeLoad=function(){};JXG.Board.prototype.afterLoad=function(){};JXG.Board.prototype.suspendUpdate=function(){this.isSuspendedUpdate=true};JXG.Board.prototype.unsuspendUpdate=function(){this.isSuspendedUpdate=false;this.update()};JXG.Board.prototype.setBoundingBox=function(e,b){if(!JXG.IsArray(e)){return}var d,a;a=this.canvasWidth;d=this.canvasHeight;if(b){this.unitX=a/(e[2]-e[0]);this.unitY=d/(-e[3]+e[1]);if(this.unitX>this.unitY){this.unitY=this.unitX}else{this.unitX=this.unitY}}else{this.unitX=a/(e[2]-e[0]);this.unitY=d/(-e[3]+e[1])}this.originX=-this.unitX*e[0];this.originY=this.unitY*e[1];this.moveOrigin()};JXG.Options=function(){this.fontSize=12;this.showCopyright=true;this.showNavigation=true;this.grid=new Object();this.grid.hasGrid=false;this.grid.gridX=2;this.grid.gridY=2;this.grid.gridColor="#C0C0C0";this.grid.gridOpacity="0.5";this.grid.gridDash=true;this.grid.snapToGrid=false;this.grid.snapSizeX=2;this.grid.snapSizeY=2;this.zoom=new Object();this.zoom.factor=1.25;this.elements=new Object();this.elements.color=new Object();this.elements.color.strokeOpacity=1;this.elements.color.highlightStrokeOpacity=1;this.elements.color.fillOpacity=1;this.elements.color.highlightFillOpacity=1;this.elements.color.strokeColor="#0000ff";this.elements.color.highlightStrokeColor="#C3D9FF";this.elements.color.fillColor="none";this.elements.color.highlightFillColor="none";this.elements.strokeWidth="2px";this.elements.draft=new Object();this.elements.draft.draft=false;this.elements.draft.color="#565656";this.elements.draft.opacity=0.8;this.elements.draft.strokeWidth="1px";this.point=new Object();this.point.style=5;this.point.fillColor="#ff0000";this.point.highlightFillColor="#EEEEEE";this.point.strokeColor=this.elements.color.strokeColor;this.point.highlightStrokeColor=this.elements.color.highlightStrokeColor;this.line=new Object();this.line.firstArrow=false;this.line.lastArrow=false;this.line.straightFirst=true;this.line.straightLast=true;this.line.fillColor=this.elements.color.fillColor;this.line.highlightFillColor=this.elements.color.highlightFillColor;this.line.strokeColor=this.elements.color.strokeColor;this.line.highlightStrokeColor=this.elements.color.highlightStrokeColor;this.line.ticks=new Object();this.line.ticks.drawLabels=true;this.line.ticks.drawZero=false;this.line.ticks.insertTicks=false;this.line.ticks.minTicksDistance=100;this.line.ticks.maxTicksDistance=300;this.line.ticks.minorHeight=4;this.line.ticks.majorHeight=10;this.line.ticks.minorTicks=4;this.line.ticks.defaultDistance=5;this.circle=new Object();this.circle.fillColor=this.elements.color.fillColor;this.circle.highlightFillColor=this.elements.color.highlightFillColor;this.circle.strokeColor=this.elements.color.strokeColor;this.circle.highlightStrokeColor=this.elements.color.highlightStrokeColor;this.angle=new Object();this.angle.radius=1;this.angle.fillColor="#FF7F00";this.angle.highlightFillColor="#FF7F00";this.angle.strokeColor="#FF7F00";this.angle.fillOpacity=0.3;this.angle.highlightFillOpacity=0.3;this.arc=new Object();this.arc.firstArrow=false;this.arc.lastArrow=false;this.arc.fillColor=this.elements.color.fillColor;this.arc.highlightFillColor=this.elements.color.highlightFillColor;this.arc.strokeColor=this.elements.color.strokeColor;this.arc.highlightStrokeColor=this.elements.color.highlightStrokeColor;this.polygon=new Object();this.polygon.fillColor="#00FF00";this.polygon.highlightFillColor="#00FF00";this.polygon.fillOpacity=0.3;this.polygon.highlightFillOpacity=0.3;this.sector=new Object();this.sector.fillColor="#00FF00";this.sector.highlightFillColor="#00FF00";this.sector.fillOpacity=0.3;this.sector.highlightFillOpacity=0.3;this.text=new Object();this.text.strokeColor="#000000";this.curve=new Object();this.curve.strokeWidth="1px";this.curve.strokeColor=this.elements.color.strokeColor;this.precision=new Object();this.precision.hasPoint=4;this.precision.epsilon=0.0001};JXG.Options.prototype.useStandardOptions=function(e){var d=e.hasGrid;e.hasGrid=this.grid.hasGrid;e.gridX=this.grid.gridX;e.gridY=this.grid.gridY;e.gridColor=this.grid.gridColor;e.gridOpacity=this.grid.gridOpacity;e.gridDash=this.grid.gridDash;e.snapToGrid=this.grid.snapToGrid;e.snapSizeX=this.grid.SnapSizeX;e.snapSizeY=this.grid.SnapSizeY;for(var b in e.objects){if(e.objects[b].type==JXG.OBJECT_TYPE_POINT){e.objects[b].visProp.fillColor=this.point.fillColor;e.objects[b].visProp.highlightFillColor=this.point.highlightFillColor;e.objects[b].visProp.strokeColor=this.point.strokeColor;e.objects[b].visProp.highlightStrokeColor=this.point.highlightStrokeColor}else{if(e.objects[b].type==JXG.OBJECT_TYPE_LINE){e.objects[b].visProp.fillColor=this.line.fillColor;e.objects[b].visProp.highlightFillColor=this.line.highlightFillColor;e.objects[b].visProp.strokeColor=this.line.strokeColor;e.objects[b].visProp.highlightStrokeColor=this.line.highlightStrokeColor;for(var a in e.objects[b].ticks){a.majorTicks=this.line.ticks.majorTicks;a.minTicksDistance=this.line.ticks.minTicksDistance;a.minorHeight=this.line.ticks.minorHeight;a.majorHeight=this.line.ticks.majorHeight}}else{if(e.objects[b].type==JXG.OBJECT_TYPE_CIRCLE){e.objects[b].visProp.fillColor=this.circle.fillColor;e.objects[b].visProp.highlightFillColor=this.circle.highlightFillColor;e.objects[b].visProp.strokeColor=this.circle.strokeColor;e.objects[b].visProp.highlightStrokeColor=this.circle.highlightStrokeColor}else{if(e.objects[b].type==JXG.OBJECT_TYPE_ANGLE){e.objects[b].visProp.fillColor=this.angle.fillColor;e.objects[b].visProp.highlightFillColor=this.angle.highlightFillColor;e.objects[b].visProp.strokeColor=this.angle.strokeColor}else{if(e.objects[b].type==JXG.OBJECT_TYPE_ARC){e.objects[b].visProp.fillColor=this.arc.fillColor;e.objects[b].visProp.highlightFillColor=this.arc.highlightFillColor;e.objects[b].visProp.strokeColor=this.arc.strokeColor;e.objects[b].visProp.highlightStrokeColor=this.arc.highlightStrokeColor}else{if(e.objects[b].type==JXG.OBJECT_TYPE_POLYGON){e.objects[b].visProp.fillColor=this.polygon.fillColor;e.objects[b].visProp.highlightFillColor=this.polygon.highlightFillColor;e.objects[b].visProp.fillOpacity=this.polygon.fillOpacity;e.objects[b].visProp.highlightFillOpacity=this.polygon.highlightFillOpacity}else{if(e.objects[b].type==JXG.OBJECT_TYPE_CURVE){e.objects[b].visProp.strokeColor=this.curve.strokeColor}}}}}}}}for(var b in e.objects){if(e.objects[b].type==JXG.OBJECT_TYPE_SECTOR){e.objects[b].arc.visProp.fillColor=this.sector.fillColor;e.objects[b].arc.visProp.highlightFillColor=this.sector.highlightFillColor;e.objects[b].arc.visProp.fillOpacity=this.sector.fillOpacity;e.objects[b].arc.visProp.highlightFillOpacity=this.sector.highlightFillOpacity}}e.needsFullUpdate=true;e.update();e.needsFullUpdate=false;if(d&&e.hasGrid){e.renderer.removeGrid(e);e.renderer.drawGrid(e)}else{if(d&&!e.hasGrid){e.renderer.removeGrid(e)}else{if(!d&&e.hasGrid){e.renderer.drawGrid(e)}}}};JXG.Options.prototype.useBlackWhiteOptions=function(a){this.point.fillColor=this.changeColorToBlackWhite(this.point.fillColor);this.point.highlightFillColor=this.changeColorToBlackWhite(this.point.highlightFillColor);this.point.strokeColor=this.changeColorToBlackWhite(this.point.strokeColor);this.point.highlightStrokeColor=this.changeColorToBlackWhite(this.point.highlightStrokeColor);this.line.fillColor=this.changeColorToBlackWhite(this.line.fillColor);this.line.highlightFillColor=this.changeColorToBlackWhite(this.line.highlightFillColor);this.line.strokeColor=this.changeColorToBlackWhite(this.line.strokeColor);this.line.highlightStrokeColor=this.changeColorToBlackWhite(this.line.highlightStrokeColor);this.circle.fillColor=this.changeColorToBlackWhite(this.circle.fillColor);this.circle.highlightFillColor=this.changeColorToBlackWhite(this.circle.highlightFillColor);this.circle.strokeColor=this.changeColorToBlackWhite(this.circle.strokeColor);this.circle.highlightStrokeColor=this.changeColorToBlackWhite(this.circle.highlightStrokeColor);this.arc.fillColor=this.changeColorToBlackWhite(this.arc.fillColor);this.arc.highlightFillColor=this.changeColorToBlackWhite(this.arc.highlightFillColor);this.arc.strokeColor=this.changeColorToBlackWhite(this.arc.strokeColor);this.arc.highlightStrokeColor=this.changeColorToBlackWhite(this.arc.highlightStrokeColor);this.polygon.fillColor=this.changeColorToBlackWhite(this.polygon.fillColor);this.polygon.highlightFillColor=this.changeColorToBlackWhite(this.polygon.highlightFillColor);this.sector.fillColor=this.changeColorToBlackWhite(this.sector.fillColor);this.sector.highlightFillColor=this.changeColorToBlackWhite(this.sector.highlightFillColor);this.curve.strokeColor=this.changeColorToBlackWhite(this.curve.strokeColor);this.grid.gridColor=this.changeColorToBlackWhite(this.grid.gridColor);this.useStandardOptions(a)};JXG.Options.prototype.changeColorToBlackWhite=function(e){if(e=="none"){return e}var f=new JXG.RGBColor(e);var k=f.r;var j=f.g;var d=f.b;var a=0.3*k+0.59*j+0.11*d;var o="0123456789ABCDEF";var h=o.charAt((a>>4)&15)+o.charAt(a&15);e="#"+h+""+h+""+h;return e};JXG.Options.prototype.loadFromFile=function(b,d,a){this.cbp=function(e){this.parseString(e,d,a)};this.cb=JXG.bind(this.cbp,this);JXG.FileReader.parseFileContent(b,this.cb,"raw")};JXG.Options.prototype.parseString=function(text,applyTo,board){var newOptions="";if(text!=""){newOptions=eval("("+text+")")}else{return}var maxDepth=10;var applyOption=function(base,option,depth){if(depth==10){return}depth++;for(var key in option){if((JXG.IsNumber(option[key]))||(JXG.IsArray(option[key]))||(JXG.IsString(option[key]))||(option[key]==true)||(option[key]==false)){base[key]=option[key]}else{applyOption(base[key],option[key],depth)}}};applyOption(this,newOptions,0);if(applyTo&&typeof board!="undefined"){this.useStandardOptions(board)}};JXG.Board.prototype.angle=function(a,d,b){return this.algebra.angle(a,d,b)};JXG.Board.prototype.rad=function(a,d,b){return this.algebra.rad(a,d,b)};JXG.Board.prototype.distance=function(b,a){return this.algebra.distance(b,a)};JXG.Board.prototype.pow=function(e,d){return this.algebra.pow(e,d)};JXG.Board.prototype.round=function(a,b){return(a).toFixed(b)};JXG.Board.prototype.cosh=function(a){return JXG.Math.Numerics.cosh(a)};JXG.Board.prototype.sinh=function(a){return JXG.Math.Numerics.sinh(a)};JXG.Board.prototype.sgn=function(a){return(a==0?0:a/(Math.abs(a)))};JXG.Board.prototype.D=function(a,b){return JXG.Math.Numerics.D(a,b)};JXG.Board.prototype.I=function(a,b){return JXG.Math.Numerics.I(a,b)};JXG.Board.prototype.root=function(b,a,d){return JXG.Math.Numerics.root(b,a,d)};JXG.Board.prototype.lagrangePolynomial=function(a){return JXG.Math.Numerics.lagrangePolynomial(a)};JXG.Board.prototype.neville=function(a){return JXG.Math.Numerics.neville(a)};JXG.Board.prototype.riemannsum=function(d,g,b,e,a){return JXG.Math.Numerics.riemannsum(d,g,b,e,a)};JXG.Board.prototype.abs=Math.abs;JXG.Board.prototype.acos=Math.acos;JXG.Board.prototype.asin=Math.asin;JXG.Board.prototype.atan=Math.atan;JXG.Board.prototype.ceil=Math.ceil;JXG.Board.prototype.cos=Math.cos;JXG.Board.prototype.exp=Math.exp;JXG.Board.prototype.floor=Math.floor;JXG.Board.prototype.log=Math.log;JXG.Board.prototype.max=Math.max;JXG.Board.prototype.min=Math.min;JXG.Board.prototype.random=Math.random;JXG.Board.prototype.sin=Math.sin;JXG.Board.prototype.sqrt=Math.sqrt;JXG.Board.prototype.tan=Math.tan;JXG.Board.prototype.trunc=Math.ceil;JXG.Board.prototype.factorial=function(a){return JXG.Math.factorial(a)};JXG.Board.prototype.binomial=function(b,a){return JXG.Math.binomial(b,a)};JXG.Point.prototype.setPositionX=function(d,a){var b=(d==JXG.COORDS_BY_USER)?this.coords.usrCoords[2]:this.coords.scrCoords[2];this.setPosition(d,a,b)};JXG.Point.prototype.setPositionY=function(d,b){var a=(d==JXG.COORDS_BY_USER)?this.coords.usrCoords[1]:this.coords.scrCoords[1];this.setPosition(d,a,b)};JXG.Board.prototype.getElement=function(a){return JXG.GetReferenceFromParameter(this,a)};JXG.Board.prototype.intersectionOptions=["point",[[JXG.OBJECT_CLASS_LINE,JXG.OBJECT_CLASS_LINE],[JXG.OBJECT_CLASS_LINE,JXG.OBJECT_CLASS_CIRCLE],[JXG.OBJECT_CLASS_CIRCLE,JXG.OBJECT_CLASS_CIRCLE]]];JXG.Board.prototype.intersection=function(e,b,d,a){e=JXG.GetReferenceFromParameter(this,e);b=JXG.GetReferenceFromParameter(this,b);if(e.elementClass==JXG.OBJECT_CLASS_CURVE||b.elementClass==JXG.OBJECT_CLASS_CURVE){return function(){return e.board.algebra.meetCurveCurve(e,b,d,a)}}else{return function(){return e.board.algebra.meet(e.stdform,b.stdform,d)}}};JXG.Board.prototype.intersectionFunc=function(e,b,d,a){return this.intersection(e,b,d,a)};JXG.Board.prototype.pointFunc=function(){return[null]};JXG.Board.prototype.pointOptions=["point",[[JXG.OBJECT_CLASS_POINT]]];JXG.Board.prototype.lineFunc=function(){return arguments};JXG.Board.prototype.lineOptions=["line",[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_POINT]]];JXG.Board.prototype.linesegmentFunc=function(){return arguments};JXG.Board.prototype.linesegmentOptions=["line",[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_POINT]]];JXG.Board.prototype.linesegmentAtts={straightFirst:false,straightLast:false};JXG.Board.prototype.arrowFunc=function(){return arguments};JXG.Board.prototype.arrowOptions=["arrow",[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_POINT]]];JXG.Board.prototype.circleFunc=function(){return arguments};JXG.Board.prototype.circleOptions=["circle",[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_POINT],[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_LINE],[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_CIRCLE]]];JXG.Board.prototype.arrowparallelOptions=["arrowparallel",[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_LINE]]];JXG.Board.prototype.arrowparallelFunc=function(){return arguments};JXG.Board.prototype.bisectorOptions=["bisector",[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_POINT]]];JXG.Board.prototype.bisectorFunc=function(){return arguments};JXG.Board.prototype.circumcircleOptions=["circumcircle",[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_POINT]]];JXG.Board.prototype.circumcircleFunc=function(){return arguments};JXG.Board.prototype.circumcirclemidpointOptions=["circumcirclemidpoint",[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_POINT]]];JXG.Board.prototype.circumcirclemidpointFunc=function(){return arguments};JXG.Board.prototype.integralOptions=["integral",[[]]];JXG.Board.prototype.integralFunc=function(){return arguments};JXG.Board.prototype.midpointOptions=["midpoint",[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_POINT],[JXG.OBJECT_CLASS_LINE]]];JXG.Board.prototype.midpointFunc=function(){return arguments};JXG.Board.prototype.mirrorpointOptions=["mirrorpoint",[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_POINT]]];JXG.Board.prototype.mirrorpointFunc=function(){return arguments};JXG.Board.prototype.normalOptions=["normal",[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_LINE]]];JXG.Board.prototype.normalFunc=function(){return arguments};JXG.Board.prototype.parallelOptions=["parallel",[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_LINE]]];JXG.Board.prototype.parallelFunc=function(){return arguments};JXG.Board.prototype.parallelpointOptions=["parallelpoint",[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_POINT]]];JXG.Board.prototype.parallelpointFunc=function(){return arguments};JXG.Board.prototype.perpendicularOptions=["perpendicular",[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_LINE]]];JXG.Board.prototype.perpendicularFunc=function(){return arguments};JXG.Board.prototype.perpendicularpointOptions=["perpendicularpoint",[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_LINE]]];JXG.Board.prototype.perpendicularpointFunc=function(){return arguments};JXG.Board.prototype.reflectionOptions=["reflection",[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_LINE]]];JXG.Board.prototype.reflectionFunc=function(){return arguments};JXG.Board.prototype.pstricks={};JXG.Board.prototype.pstricks.givePsTricksToDiv=function(a,b){JXG.PsTricks.givePsTricksToDiv(a,b)};JXG.Ticks=function(a,f,e,g,b,h,d){this.constructor();this.type=JXG.OBJECT_TYPE_TICKS;this.elementClass=JXG.OBJECT_CLASS_OTHER;this.line=a;this.board=this.line.board;this.ticksFunction=null;this.fixedTicks=null;this.equidistant=false;if(JXG.IsFunction(f)){this.ticksFunction=f}else{if(JXG.IsArray(f)){this.fixedTicks=f}else{if(Math.abs(f)<JXG.Math.eps){f=this.board.options.line.ticks.defaultDistance}this.ticksFunction=function(j){return f};this.equidistant=true}}this.minorTicks=((e==null)||(e==0)?this.board.options.line.ticks.minorTicks:e);if(this.minorTicks<0){this.minorTicks=-this.minorTicks}this.majorHeight=((g==null)||(g==0)?this.board.options.line.ticks.majorHeight:g);if(this.majorHeight<0){this.majorHeight=-this.majorHeight}this.minorHeight=((b==null)||(b==0)?this.board.options.line.ticks.minorHeight:b);if(this.minorHeight<0){this.minorHeight=-this.minorHeight}this.minTicksDistance=this.board.options.line.ticks.minTicksDistance;this.maxTicksDistance=this.board.options.line.ticks.maxTicksDistance;this.insertTicks=this.board.options.line.ticks.insertTicks;this.drawZero=this.board.options.line.ticks.drawZero;this.drawLabels=this.board.options.line.ticks.drawLabels;this.init(this.board,h,d);this.visProp.visible=true;this.visProp.fillColor=this.line.visProp.fillColor;this.visProp.highlightFillColor=this.line.visProp.highlightFillColor;this.visProp.strokeColor=this.line.visProp.strokeColor;this.visProp.highlightStrokeColor=this.line.visProp.highlightStrokeColor;this.visProp.strokeWidth=this.line.visProp.strokeWidth;this.id=this.line.addTicks(this)};JXG.Ticks.prototype=new JXG.GeometryElement;JXG.Ticks.prototype.hasPoint=function(a,b){return false};JXG.Ticks.prototype.makeTicks=function(g,d,L,I){var E=g.usrCoords[1]-d.usrCoords[1];var C=g.usrCoords[2]-d.usrCoords[2];var K=0;var h=Math.sqrt(E*E+C*C);if(h<=JXG.Math.eps){return}var B=g.usrCoords[1];var A=g.usrCoords[2];var J=L/Math.abs(L);K=Math.abs(this.ticksFunction(J));var N=(K*E)/(h);var M=(K*C)/(h);var G=0;if(this.equidistant){var b=N;var F=M;var a=K;var D=new JXG.Coords(JXG.COORDS_BY_USER,[0,0],this.board);var H=new JXG.Coords(JXG.COORDS_BY_USER,[N,M],this.board);G=(H.scrCoords[1]-D.scrCoords[1])*(H.scrCoords[1]-D.scrCoords[1])+(H.scrCoords[2]-D.scrCoords[2])*(H.scrCoords[2]-D.scrCoords[2]);while(G<this.minTicksDistance*this.minTicksDistance){N+=b;M+=F;K+=a;H=new JXG.Coords(JXG.COORDS_BY_USER,[N,M],this.board);G=(H.scrCoords[1]-D.scrCoords[1])*(H.scrCoords[1]-D.scrCoords[1])+(H.scrCoords[2]-D.scrCoords[2])*(H.scrCoords[2]-D.scrCoords[2])}}var O=L*K;var v=new JXG.Coords(JXG.COORDS_BY_USER,[B,A],this.board);var f=null;var e=null;var q="";var u=null;var o=true;var k=B;var j=A;while(o||(((this.board.sgn(N)*(B-I*N)>=this.board.sgn(N)*d.usrCoords[1])&&(this.board.sgn(M)*(A-I*M)>=this.board.sgn(M)*d.usrCoords[2])))){o=false;B=B-N;A=A-M;f=new JXG.Coords(JXG.COORDS_BY_USER,[B,A],this.board);if(!this.equidistant){G=(v.scrCoords[1]-f.scrCoords[1])*(v.scrCoords[1]-f.scrCoords[1])+(v.scrCoords[2]-f.scrCoords[2])*(v.scrCoords[2]-f.scrCoords[2])}if(this.insertTicks&&this.equidistant&&(G>this.maxTicksDistance*this.maxTicksDistance)){while(G>this.maxTicksDistance*this.maxTicksDistance){N=N/2;M=M/2;B=B+N;A=A+M;K=K/2;O=O-L*K;f=new JXG.Coords(JXG.COORDS_BY_USER,[B,A],this.board);G=(v.scrCoords[1]-f.scrCoords[1])*(v.scrCoords[1]-f.scrCoords[1])+(v.scrCoords[2]-f.scrCoords[2])*(v.scrCoords[2]-f.scrCoords[2])}}if(this.equidistant){for(var w=1;w<this.minorTicks+1;w++){e=new JXG.Coords(JXG.COORDS_BY_USER,[k-(N*w)/(this.minorTicks+1),j-(M*w)/(this.minorTicks+1)],this.board);e.major=false;this.ticks.push(e);this.labels.push(null)}}if(this.equidistant||(G>this.minTicksDistance*this.minTicksDistance)){f.major=true;this.ticks.push(f);q=O.toString();if(q.length>5){q=O.toPrecision(3).toString()}u=new JXG.Text(this.board,q,null,[f.usrCoords[1],f.usrCoords[2]],this.id+J+"Label",null,null,true);u.distanceX=0;u.distanceY=-10;u.setCoords(f.usrCoords[1]*1+u.distanceX/(this.board.unitX*this.board.zoomX),f.usrCoords[2]*1+u.distanceY/(this.board.unitY*this.board.zoomY));if(this.drawLabels){u.visProp.visible=true}else{u.visProp.visible=false}this.labels.push(u);k=B;j=A;v=f}J=J+L*1;if(!this.equidistant){K=Math.abs(this.ticksFunction(J))}O=O+L*K;if(!this.equidistant){N=(K*E)/(h);M=(K*C)/(h)}}};JXG.Ticks.prototype.calculateTicksCoordinates=function(){var D=1;var x=2;var y=D+x;var E=new JXG.Coords(JXG.COORDS_BY_USER,[this.line.point1.coords.usrCoords[1],this.line.point1.coords.usrCoords[2]],this.board);var C=new JXG.Coords(JXG.COORDS_BY_USER,[this.line.point2.coords.usrCoords[1],this.line.point2.coords.usrCoords[2]],this.board);this.board.renderer.calcStraight(this.line,E,C);var b=this.line.point1.coords;if(this.board.renderer.isSameDirection(b,E,C)){if(this.board.renderer.isSameDirection(b,this.line.point2.coords,E)){y=x;if(b.distance(JXG.COORDS_BY_USER,E)>b.distance(JXG.COORDS_BY_USER,C)){C=E}}else{y=D;if(b.distance(JXG.COORDS_BY_USER,E)<b.distance(JXG.COORDS_BY_USER,C)){E=C}}}else{if(this.board.renderer.isSameDirection(b,this.line.point2.coords,E)){var g=E;E=C;C=g}}if(this.ticks!=null){for(var G=0;G<this.ticks.length;G++){if(this.labels[G]!=null){if(this.labels[G].visProp.visible){this.board.renderer.remove(this.labels[G].rendNode)}}}}this.ticks=new Array();this.labels=new Array();var q=null;var k="";var f=null;if(this.ticksFunction!=null){if(this.drawZero){f=new JXG.Coords(JXG.COORDS_BY_USER,[b.usrCoords[1],b.usrCoords[2]],this.board);this.ticks.push(f);q=new JXG.Text(this.board,"0",null,[b.usrCoords[1],b.usrCoords[2]],this.id+"0Label",null,null,true);if(this.drawLabels){q.visProp.visible=true}else{q.visProp.visible=false}this.labels.push(q);this.ticks[0].major=true}if(D==(y&D)){if(this.line.visProp.straightFirst){this.makeTicks(b,E,-1,0)}}if(x==(y&x)){if(this.line.visProp.straightLast){this.makeTicks(b,C,+1,0)}else{this.makeTicks(b,this.line.point2.coords,+1,1)}}}else{if(!this.line.visProp.straightFirst){E=b}var u=b.usrCoords[1]-E.usrCoords[1];var o=b.usrCoords[2]-E.usrCoords[2];var L=Math.sqrt(u*u+o*o);if(!this.line.visProp.straightLast){C=this.line.point2.coords}var h=b.usrCoords[1]-C.usrCoords[1];var v=b.usrCoords[2]-C.usrCoords[2];var d=Math.sqrt(h*h+v*v);var J=0;var I=0;for(var H=0;H<this.fixedTicks.length;H++){if((-L<=this.fixedTicks[H])&&(this.fixedTicks[H]<=d)){if(this.fixedTicks[H]<0){J=Math.abs(u)*this.fixedTicks[H]/L;I=Math.abs(o)*this.fixedTicks[H]/L}else{J=Math.abs(h)*this.fixedTicks[H]/d;I=Math.abs(v)*this.fixedTicks[H]/d}f=new JXG.Coords(JXG.COORDS_BY_USER,[b.usrCoords[1]+J,b.usrCoords[2]+I],this.board);this.ticks.push(f);this.ticks[this.ticks.length-1].major=true;k=this.fixedTicks[H].toString();if(k.length>5){k=this.fixedTicks[H].toFixed(3).toString()}q=new JXG.Text(this.board,k,null,[b.usrCoords[1]+J,b.usrCoords[2]+I],this.id+H+"Label",null,null,true);q.distanceX=0;q.distanceY=-10;q.setCoords(f.usrCoords[1]*1+q.distanceX/(this.board.unitX*this.board.zoomX),f.usrCoords[2]*1+q.distanceY/(this.board.unitY*this.board.zoomY));if(this.drawLabels){q.visProp.visible=true}else{q.visProp.visible=false}this.labels.push(q)}}}var A=JXG.Math.eps;var w=-this.line.getSlope();var z=this.majorHeight/2;var e=this.minorHeight/2;var K=0;var a=0;var B=0;var F=0;if(Math.abs(w)<A){K=0;a=z;B=0;F=e}else{if((Math.abs(w)>1/A)||(isNaN(w))){K=z;a=0;B=e;F=0}else{K=z/Math.sqrt(1/(w*w)+1);a=-K/w;B=e/Math.sqrt(1/(w*w)+1);F=-B/w}}this.board.renderer.updateTicks(this,K,a,B,F)};JXG.Ticks.prototype.updateRenderer=function(){if(this.needsUpdate){this.calculateTicksCoordinates();this.needsUpdate=false}};JXG.createTicks=function(e,b,a){var d;if((b[0].elementClass==JXG.OBJECT_CLASS_LINE)&&(JXG.IsFunction(b[1])||JXG.IsArray(b[1])||JXG.IsNumber(b[1]))){d=new JXG.Ticks(b[0],b[1],a.minorTicks,a.majHeight,a.minHeight,a.id,a.name)}else{throw ("Can't create Ticks with parent types '"+(typeof b[0])+"' and '"+(typeof b[1])+"' and '"+(typeof b[2])+"'.")}return d};JXG.JSXGraph.registerElement("ticks",JXG.createTicks);JXG.Util={};JXG.Util.Unzip=function(Z){var v=[];var M="";var K=false;var H;var N=0;var W=[];var z;var j=new Array(32768);var ae=0;var R=false;var ab,O;var ad=[0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240,8,136,72,200,40,168,104,232,24,152,88,216,56,184,120,248,4,132,68,196,36,164,100,228,20,148,84,212,52,180,116,244,12,140,76,204,44,172,108,236,28,156,92,220,60,188,124,252,2,130,66,194,34,162,98,226,18,146,82,210,50,178,114,242,10,138,74,202,42,170,106,234,26,154,90,218,58,186,122,250,6,134,70,198,38,166,102,230,22,150,86,214,54,182,118,246,14,142,78,206,46,174,110,238,30,158,94,222,62,190,126,254,1,129,65,193,33,161,97,225,17,145,81,209,49,177,113,241,9,137,73,201,41,169,105,233,25,153,89,217,57,185,121,249,5,133,69,197,37,165,101,229,21,149,85,213,53,181,117,245,13,141,77,205,45,173,109,237,29,157,93,221,61,189,125,253,3,131,67,195,35,163,99,227,19,147,83,211,51,179,115,243,11,139,75,203,43,171,107,235,27,155,91,219,59,187,123,251,7,135,71,199,39,167,103,231,23,151,87,215,55,183,119,247,15,143,79,207,47,175,111,239,31,159,95,223,63,191,127,255];var ah=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0];var Y=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,99,99];var S=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577];var G=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];var w=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];var D=Z;var b=0;var h=0;var ai=1;var a=0;var ag=256;var g=[];var o;function e(){a+=8;if(b<D.length){if(K){document.write(b+": "+D[b]+"<br>")}return D[b++]}else{return -1}}function x(){ai=1}function ac(){a++;var ak=(ai&1);ai>>=1;if(ai==0){ai=e();ak=(ai&1);ai=(ai>>1)|128}return ak}function aa(ak){var am=0;var al=ak;while(al--){am=(am<<1)|ac()}if(ak){am=ad[am]>>(8-ak)}return am}function d(){ae=0}function E(ak){O++;j[ae++]=ak;v.push(String.fromCharCode(ak));if(ae==32768){ae=0}}function u(){this.b0=0;this.b1=0;this.jump=null;this.jumppos=-1}var f=288;var C=new Array(f);var U=new Array(32);var P=0;var af=null;var y=null;var T=new Array(64);var Q=new Array(64);var F=0;var J=new Array(17);J[0]=0;var V;var B;function k(){while(1){if(J[F]>=B){return -1}if(V[J[F]]==F){return J[F]++}J[F]++}}function L(){var al=af[P];var ak;if(K){document.write("<br>len:"+F+" treepos:"+P)}if(F==17){return -1}P++;F++;ak=k();if(K){document.write("<br>IsPat "+ak)}if(ak>=0){al.b0=ak;if(K){document.write("<br>b0 "+al.b0)}}else{al.b0=32768;if(K){document.write("<br>b0 "+al.b0)}if(L()){return -1}}ak=k();if(ak>=0){al.b1=ak;if(K){document.write("<br>b1 "+al.b1)}al.jump=null}else{al.b1=32768;if(K){document.write("<br>b1 "+al.b1)}al.jump=af[P];al.jumppos=P;if(L()){return -1}}F--;return 0}function q(ao,am,ap,al){var an;if(K){document.write("currentTree "+ao+" numval "+am+" lengths "+ap+" show "+al)}af=ao;P=0;V=ap;B=am;for(an=0;an<17;an++){J[an]=0}F=0;if(L()){if(K){alert("invalid huffman tree\n")}return -1}if(K){document.write("<br>Tree: "+af.length);for(var ak=0;ak<32;ak++){document.write("Places["+ak+"].b0="+af[ak].b0+"<br>");document.write("Places["+ak+"].b1="+af[ak].b1+"<br>")}}return 0}function I(am){var ao=0;var an=am[ao];while(1){var ak=ac();if(K){document.write("b="+ak)}if(ak){if(!(an.b1&32768)){if(K){document.write("ret1")}return an.b1}an=an.jump;for(var al=0;al<am.length;al++){if(am[al]===an){ao=al;break}}}else{if(!(an.b0&32768)){if(K){document.write("ret2")}return an.b0}ao++;an=am[ao]}}if(K){document.write("ret3")}return -1}function aj(){var ao,aB,al,az;do{var ao=ac();var al=aa(2);switch(al){case 0:if(K){alert("Stored\n")}break;case 1:if(K){alert("Fixed Huffman codes\n")}break;case 2:if(K){alert("Dynamic Huffman codes\n")}break;case 3:if(K){alert("Reserved block type!!\n")}break;default:if(K){alert("Unexpected value %d!\n",al)}break}if(al==0){var ax,ak;x();ax=e();ax|=(e()<<8);ak=e();ak|=(e()<<8);if(((ax^~ak)&65535)){document.write("BlockLen checksum mismatch\n")}while(ax--){aB=e();E(aB)}}else{if(al==1){var ay;while(1){ay=(ad[aa(7)]>>1);if(ay>23){ay=(ay<<1)|ac();if(ay>199){ay-=128;ay=(ay<<1)|ac()}else{ay-=48;if(ay>143){ay=ay+136}}}else{ay+=256}if(ay<256){E(ay)}else{if(ay==256){break}else{var aA,au;ay-=256+1;aA=aa(Y[ay])+ah[ay];ay=ad[aa(5)]>>3;if(G[ay]>8){au=aa(8);au|=(aa(G[ay]-8)<<8)}else{au=aa(G[ay])}au+=S[ay];for(ay=0;ay<aA;ay++){var aB=j[(ae-au)&32767];E(aB)}}}}}else{if(al==2){var ay,av,am,ar,at;var aq=new Array(288+32);am=257+aa(5);ar=1+aa(5);at=4+aa(4);for(ay=0;ay<19;ay++){aq[ay]=0}for(ay=0;ay<at;ay++){aq[w[ay]]=aa(3)}for(az=0;az<U.length;az++){U[az]=new u()}if(q(U,19,aq,0)){d();return 1}if(K){document.write("<br>distanceTree");for(var aC=0;aC<U.length;aC++){document.write("<br>"+U[aC].b0+" "+U[aC].b1+" "+U[aC].jump+" "+U[aC].jumppos)}}av=am+ar;az=0;var an=-1;if(K){document.write("<br>n="+av+" bits: "+a+"<br>")}while(az<av){an++;ay=I(U);if(K){document.write("<br>"+an+" i:"+az+" decode: "+ay+"    bits "+a+"<br>")}if(ay<16){aq[az++]=ay}else{if(ay==16){var aw;ay=3+aa(2);if(az+ay>av){d();return 1}aw=az?aq[az-1]:0;while(ay--){aq[az++]=aw}}else{if(ay==17){ay=3+aa(3)}else{ay=11+aa(7)}if(az+ay>av){d();return 1}while(ay--){aq[az++]=0}}}}for(az=0;az<C.length;az++){C[az]=new u()}if(q(C,am,aq,0)){d();return 1}for(az=0;az<U.length;az++){U[az]=new u()}var ap=new Array();for(az=am;az<aq.length;az++){ap[az-am]=aq[az]}if(q(U,ar,ap,0)){d();return 1}if(K){document.write("<br>literalTree")}while(1){ay=I(C);if(ay>=256){var aA,au;ay-=256;if(ay==0){break}ay--;aA=aa(Y[ay])+ah[ay];ay=I(U);if(G[ay]>8){au=aa(8);au|=(aa(G[ay]-8)<<8)}else{au=aa(G[ay])}au+=S[ay];while(aA--){var aB=j[(ae-au)&32767];E(aB)}}else{E(ay)}}}}}}while(!ao);d();x();return 0}JXG.Util.Unzip.prototype.unzipFile=function(ak){this.unzip();for(var al=0;al<W.length;al++){if(W[al][1]==ak){return W[al][0]}}};JXG.Util.Unzip.prototype.unzip=function(){if(K){alert(D)}A();return W};function A(){if(K){alert("NEXTFILE")}v=[];var ao=[];R=false;ao[0]=e();ao[1]=e();if(K){alert("type: "+ao[0]+" "+ao[1])}if(ao[0]==parseInt("78",16)&&ao[1]==parseInt("da",16)){if(K){alert("GEONExT-GZIP")}aj();if(K){alert(v.join(""))}W[N]=new Array(2);W[N][0]=v.join("");W[N][1]="geonext.gxt";N++}if(ao[0]==parseInt("50",16)&&ao[1]==parseInt("4b",16)){R=true;ao[2]=e();ao[3]=e();if(ao[2]==parseInt("3",16)&&ao[3]==parseInt("4",16)){ao[0]=e();ao[1]=e();if(K){alert("ZIP-Version: "+ao[1]+" "+ao[0]/10+"."+ao[0]%10)}H=e();H|=(e()<<8);if(K){alert("gpflags: "+H)}var ak=e();ak|=(e()<<8);if(K){alert("method: "+ak)}e();e();e();e();var ap=e();ap|=(e()<<8);ap|=(e()<<16);ap|=(e()<<24);var an=e();an|=(e()<<8);an|=(e()<<16);an|=(e()<<24);var at=e();at|=(e()<<8);at|=(e()<<16);at|=(e()<<24);if(K){alert("local CRC: "+ap+"\nlocal Size: "+at+"\nlocal CompSize: "+an)}var al=e();al|=(e()<<8);var ar=e();ar|=(e()<<8);if(K){alert("filelen "+al)}am=0;g=[];while(al--){var aq=e();if(aq=="/"|aq==":"){am=0}else{if(am<ag-1){g[am++]=String.fromCharCode(aq)}}}if(K){alert("nameBuf: "+g)}if(!o){o=g}var am=0;while(am<ar){aq=e();am++}ab=4294967295;O=0;if(at=0&&fileOut.charAt(o.length-1)=="/"){if(K){alert("skipdir")}}if(ak==8){aj();if(K){alert(v.join(""))}W[N]=new Array(2);W[N][0]=v.join("");W[N][1]=g.join("");N++}X()}}}function X(){var ap,am=[];if((H&8)){am[0]=e();am[1]=e();am[2]=e();am[3]=e();if(am[0]==parseInt("50",16)&&am[1]==parseInt("4b",16)&&am[2]==parseInt("07",16)&&am[3]==parseInt("08",16)){var ap=e();ap|=(e()<<8);ap|=(e()<<16);ap|=(e()<<24)}else{var ap=am[0]|(am[1]<<8)|(am[2]<<16)|(am[3]<<24)}var an=e();an|=(e()<<8);an|=(e()<<16);an|=(e()<<24);var al=e();al|=(e()<<8);al|=(e()<<16);al|=(e()<<24);if(K){alert("CRC:")}}if(R){A()}am[0]=e();if(am[0]!=8){if(K){alert("Unknown compression method!")}return 0}H=e();if(K){if((H&~(parseInt("1f",16)))){alert("Unknown flags set!")}}e();e();e();e();e();var ao=e();if((H&4)){am[0]=e();am[2]=e();F=am[0]+256*am[1];if(K){alert("Extra field size: "+F)}for(var ak=0;ak<F;ak++){e()}}var aq;if((H&8)){var ak=0;g=[];while(aq=e()){if(aq=="7"||aq==":"){ak=0}if(ak<ag-1){g[ak++]=aq}}if(K){alert("original file name: "+g)}}if((H&16)){while(aq=e()){}}if((H&2)){reabByte();reabByte()}aj();ap=e();ap|=(e()<<8);ap|=(e()<<16);ap|=(e()<<24);al=e();al|=(e()<<8);al|=(e()<<16);al|=(e()<<24);A()}};JXG.Util.Base64={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(d){var a="";var o,j,g,k,h,f,e;var b=0;d=JXG.Util.Base64._utf8_encode(d);while(b<d.length){o=d.charCodeAt(b++);j=d.charCodeAt(b++);g=d.charCodeAt(b++);k=o>>2;h=((o&3)<<4)|(j>>4);f=((j&15)<<2)|(g>>6);e=g&63;if(isNaN(j)){f=e=64}else{if(isNaN(g)){e=64}}a=a+this._keyStr.charAt(k)+this._keyStr.charAt(h)+this._keyStr.charAt(f)+this._keyStr.charAt(e)}return a},decode:function(e,d){var a="";var q,k,h;var o,j,g,f;var b=0;e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");while(b<e.length){o=this._keyStr.indexOf(e.charAt(b++));j=this._keyStr.indexOf(e.charAt(b++));g=this._keyStr.indexOf(e.charAt(b++));f=this._keyStr.indexOf(e.charAt(b++));q=(o<<2)|(j>>4);k=((j&15)<<4)|(g>>2);h=((g&3)<<6)|f;a=a+String.fromCharCode(q);if(g!=64){a=a+String.fromCharCode(k)}if(f!=64){a=a+String.fromCharCode(h)}}if(d){a=JXG.Util.Base64._utf8_decode(a)}return a},_utf8_encode:function(b){b=b.replace(/\r\n/g,"\n");var a="";for(var e=0;e<b.length;e++){var d=b.charCodeAt(e);if(d<128){a+=String.fromCharCode(d)}else{if((d>127)&&(d<2048)){a+=String.fromCharCode((d>>6)|192);a+=String.fromCharCode((d&63)|128)}else{a+=String.fromCharCode((d>>12)|224);a+=String.fromCharCode(((d>>6)&63)|128);a+=String.fromCharCode((d&63)|128)}}}return a},_utf8_decode:function(a){var d="";var f=0;var g,e,b;g=e=b=0;while(f<a.length){g=a.charCodeAt(f);if(g<128){d+=String.fromCharCode(g);f++}else{if((g>191)&&(g<224)){e=a.charCodeAt(f+1);d+=String.fromCharCode(((g&31)<<6)|(e&63));f+=2}else{e=a.charCodeAt(f+1);b=a.charCodeAt(f+2);d+=String.fromCharCode(((g&15)<<12)|((e&63)<<6)|(b&63));f+=3}}}return d},_destrip:function(f){f.replace(/ /g,"");var b=[];var e=f.length/76;for(var d=0;d<e;d++){b[d]=f.substr(d*76,76)}if(e!=f.length/76){b[b.length]=f.substr(e*76,f.length-(e*76))}var a="";for(var d=0;d<b.length;d++){a+=b[d]+"\n"}return a},decodeAsArray:function(b){var e=this.decode(b);var a=[];for(var d=0;d<e.length;d++){a[d]=e.charCodeAt(d)}return a},decodeGEONExT:function(a){return decodeAsArray(destrip(a),false)}};JXG.Util.asciiCharCodeAt=function(b,a){var d=b.charCodeAt(a);if(d>255){switch(d){case 8364:d=128;break;case 8218:d=130;break;case 402:d=131;break;case 8222:d=132;break;case 8230:d=133;break;case 8224:d=134;break;case 8225:d=135;break;case 710:d=136;break;case 8240:d=137;break;case 352:d=138;break;case 8249:d=139;break;case 338:d=140;break;case 381:d=142;break;case 8216:d=145;break;case 8217:d=146;break;case 8220:d=147;break;case 8221:d=148;break;case 8226:d=149;break;case 8211:d=150;break;case 8212:d=151;break;case 732:d=152;break;case 8482:d=153;break;case 353:d=154;break;case 8250:d=155;break;case 339:d=156;break;case 382:d=158;break;case 376:d=159;break;default:break}}return d};JXG.PsTricks=new function(){this.psTricksString=""};JXG.PsTricks.convertBoardToPsTricks=function(b){var e=new JXG.Coords(JXG.COORDS_BY_SCREEN,[b.canvasWidth,b.canvasHeight],b);var d=new JXG.Coords(JXG.COORDS_BY_SCREEN,[0,0],b);this.psTricksString="\\begin{pspicture*}("+d.usrCoords[1]+","+e.usrCoords[2]+")("+e.usrCoords[1]+","+d.usrCoords[2]+")\n";for(var a in b.objects){var f=b.objects[a];if(f.type==JXG.OBJECT_TYPE_ARC){if(f.visProp.visible){this.addSector(f)}}}for(var a in b.objects){var f=b.objects[a];if(f.type==JXG.OBJECT_TYPE_POLYGON){if(f.visProp.visible){this.addPolygon(f)}}}for(var a in b.objects){var f=b.objects[a];if(f.type==JXG.OBJECT_TYPE_ANGLE){if(f.visProp.visible){this.addAngle(f)}}}for(var a in b.objects){var f=b.objects[a];if(f.type==JXG.OBJECT_TYPE_CIRCLE){if(f.visProp.visible){this.addCircle(f)}}}for(var a in b.objects){var f=b.objects[a];if(f.type==JXG.OBJECT_TYPE_ARC){if(f.visProp.visible){this.addArc(f)}}}for(var a in b.objects){var f=b.objects[a];if(f.type==JXG.OBJECT_TYPE_LINE){if(f.visProp.visible){this.addLine(f)}}}for(var a in b.objects){var f=b.objects[a];if(f.type==JXG.OBJECT_TYPE_POINT){if(f.visProp.visible){this.addPoint(f)}}}this.psTricksString+="\\end{pspicture*}"};JXG.PsTricks.givePsTricksToDiv=function(a,b){this.convertBoardToPsTricks(b);document.getElementById(a).innerHTML=this.psTricksString};JXG.PsTricks.addPoint=function(a){this.psTricksString+="\\psdot";this.psTricksString+="[linecolor="+this.parseColor(a.visProp.strokeColor)+",";this.psTricksString+="dotstyle=";if(a.visProp.style==0||a.visProp.style==1||a.visProp.style==2){this.psTricksString+="x, dotsize=";if(a.visProp.style==0){this.psTricksString+="2pt 2"}else{if(a.visProp.style==1){this.psTricksString+="5pt 2"}else{if(a.visProp.style==2){this.psTricksString+="5pt 3"}}}}else{if(a.visProp.style==3||a.visProp.style==4||a.visProp.style==5||a.visProp.style==6){this.psTricksString+="*, dotsize=";if(a.visProp.style==3){this.psTricksString+="2pt 2"}else{if(a.visProp.style==4){this.psTricksString+="4pt 2"}else{if(a.visProp.style==5){this.psTricksString+="6pt 2"}else{if(a.visProp.style==6){this.psTricksString+="6pt 3"}}}}}else{if(a.visProp.style==7||a.visProp.style==8||a.visProp.style==9){this.psTricksString+="square*, dotsize=";if(a.visProp.style==7){this.psTricksString+="2pt 2"}else{if(a.visProp.style==8){this.psTricksString+="5pt 2"}else{if(a.visProp.style==9){this.psTricksString+="5pt 3"}}}}else{if(a.visProp.style==10||a.visProp.style==11||a.visProp.style==12){this.psTricksString+="+, dotsize=";if(a.visProp.style==10){this.psTricksString+="2pt 2"}else{if(a.visProp.style==11){this.psTricksString+="5pt 2"}else{if(a.visProp.style==12){this.psTricksString+="5pt 3"}}}}}}}this.psTricksString+="]";this.psTricksString+="("+a.coords.usrCoords[1]+","+a.coords.usrCoords[2]+")\n";this.psTricksString+="\\rput("+(a.coords.usrCoords[1]+15/a.board.unitY/a.board.zoomY)+","+(a.coords.usrCoords[2]+15/a.board.unitY/a.board.zoomY)+"){\\small $"+a.name+"$}\n"};JXG.PsTricks.addLine=function(d){var b=new JXG.Coords(JXG.COORDS_BY_USER,d.point1.coords.usrCoords,d.board);var a=new JXG.Coords(JXG.COORDS_BY_USER,d.point2.coords.usrCoords,d.board);if(d.visProp.straightFirst||d.visProp.straightLast){d.board.renderer.calcStraight(d,b,a)}this.psTricksString+="\\psline";this.psTricksString+="[linecolor="+this.parseColor(d.visProp.strokeColor)+", linewidth="+d.visProp.strokeWidth+"px";this.psTricksString+="]";if(d.visProp.firstArrow){if(d.visProp.lastArrow){this.psTricksString+="{<->}"}else{this.psTricksString+="{<-}"}}else{if(d.visProp.lastArrow){this.psTricksString+="{->}"}}this.psTricksString+="("+b.usrCoords[1]+","+b.usrCoords[2]+")("+a.usrCoords[1]+","+a.usrCoords[2]+")\n"};JXG.PsTricks.addCircle=function(b){var a=b.getRadius();this.psTricksString+="\\pscircle";this.psTricksString+="[linecolor="+this.parseColor(b.visProp.strokeColor)+", linewidth="+b.visProp.strokeWidth+"px";if(b.visProp.fillColor!="none"&&b.visProp.fillOpacity!=0){this.psTricksString+=", fillstyle=solid, fillcolor="+this.parseColor(b.visProp.fillColor)+", opacity="+JXG.Math.round(b.visProp.fillOpacity,5)}this.psTricksString+="]";this.psTricksString+="("+b.midpoint.coords.usrCoords[1]+","+b.midpoint.coords.usrCoords[2]+"){"+a+"}\n"};JXG.PsTricks.addPolygon=function(b){this.psTricksString+="\\pspolygon";this.psTricksString+="[linestyle=none, fillstyle=solid, fillcolor="+this.parseColor(b.visProp.fillColor)+", opacity="+JXG.Math.round(b.visProp.fillOpacity,5)+"]";for(var a=0;a<b.vertices.length;a++){this.psTricksString+="("+b.vertices[a].coords.usrCoords[1]+","+b.vertices[a].coords.usrCoords[2]+")"}this.psTricksString+="\n"};JXG.PsTricks.addArc=function(b){var a=b.getRadius();var e={};e.coords=new JXG.Coords(JXG.COORDS_BY_USER,[b.board.canvasWidth/(b.board.unitY*b.board.zoomY),b.midpoint.coords.usrCoords[2]],b.board);var d=JXG.Math.round(b.board.algebra.trueAngle(e,b.midpoint,b.point2),4);var f=JXG.Math.round(b.board.algebra.trueAngle(e,b.midpoint,b.point3),4);this.psTricksString+="\\psarc";this.psTricksString+="[linecolor="+this.parseColor(b.visProp.strokeColor)+", linewidth="+b.visProp.strokeWidth+"px";this.psTricksString+="]";if(b.visProp.lastArrow){if(b.visProp.firstArrow){this.psTricksString+="{<->}"}else{this.psTricksString+="{<-}"}}else{if(b.visProp.firstArrow){this.psTricksString+="{->}"}}this.psTricksString+="("+b.midpoint.coords.usrCoords[1]+","+b.midpoint.coords.usrCoords[2]+"){"+a+"}{"+d+"}{"+f+"}\n"};JXG.PsTricks.addSector=function(b){var a=b.getRadius();var e={};e.coords=new JXG.Coords(JXG.COORDS_BY_USER,[b.board.canvasWidth/(b.board.unitY*b.board.zoomY),b.midpoint.coords.usrCoords[2]],b.board);var d=JXG.Math.round(b.board.algebra.trueAngle(e,b.midpoint,b.point2),4);var f=JXG.Math.round(b.board.algebra.trueAngle(e,b.midpoint,b.point3),4);if(b.visProp.fillColor!="none"&&b.visProp.fillOpacity!=0){this.psTricksString+="\\pswedge";this.psTricksString+="[linestyle=none, fillstyle=solid, fillcolor="+this.parseColor(b.visProp.fillColor)+", opacity="+JXG.Math.round(b.visProp.fillOpacity,5)+"]";this.psTricksString+="("+b.midpoint.coords.usrCoords[1]+","+b.midpoint.coords.usrCoords[2]+"){"+a+"}{"+d+"}{"+f+"}\n"}};JXG.PsTricks.addAngle=function(b){var a=b.radius;var e={};e.coords=new JXG.Coords(JXG.COORDS_BY_USER,[b.board.canvasWidth/(b.board.unitY*b.board.zoomY),b.point2.coords.usrCoords[2]],b.board);var d=JXG.Math.round(b.board.algebra.trueAngle(e,b.point2,b.point1),4);var f=JXG.Math.round(b.board.algebra.trueAngle(e,b.point2,b.point3),4);if(b.visProp.fillColor!="none"&&b.visProp.fillOpacity!=0){this.psTricksString+="\\pswedge";this.psTricksString+="[linestyle=none, fillstyle=solid, fillcolor="+this.parseColor(b.visProp.fillColor)+", opacity="+JXG.Math.round(b.visProp.fillOpacity,5)+"]";this.psTricksString+="("+b.point2.coords.usrCoords[1]+","+b.point2.coords.usrCoords[2]+"){"+a+"}{"+d+"}{"+f+"}\n"}this.psTricksString+="\\psarc";this.psTricksString+="[linecolor="+this.parseColor(b.visProp.strokeColor)+", linewidth="+b.visProp.strokeWidth+"px";this.psTricksString+="]";this.psTricksString+="("+b.point2.coords.usrCoords[1]+","+b.point2.coords.usrCoords[2]+"){"+a+"}{"+d+"}{"+f+"}\n"};JXG.PsTricks.parseColor=function(a){var b=new JXG.RGBColor(a);return"{[rgb]{"+b.r/255+","+b.g/255+","+b.b/255+"}}"};JXG.SVGRenderer=function(a){this.constructor();this.svgRoot=null;this.suspendHandle=null;this.svgNamespace="http://www.w3.org/2000/svg";this.xlinkNamespace="http://www.w3.org/1999/xlink";this.container=a;this.container.style.MozUserSelect="none";this.container.style.overflow="hidden";if(this.container.style.position==""){this.container.style.position="relative"}this.svgRoot=this.container.ownerDocument.createElementNS(this.svgNamespace,"svg");this.container.appendChild(this.svgRoot);this.defs=this.container.ownerDocument.createElementNS(this.svgNamespace,"defs");this.svgRoot.appendChild(this.defs);this.images=this.container.ownerDocument.createElementNS(this.svgNamespace,"g");this.svgRoot.appendChild(this.images);this.grid=this.container.ownerDocument.createElementNS(this.svgNamespace,"g");this.svgRoot.appendChild(this.grid);this.angles=this.container.ownerDocument.createElementNS(this.svgNamespace,"g");this.svgRoot.appendChild(this.angles);this.sectors=this.container.ownerDocument.createElementNS(this.svgNamespace,"g");this.svgRoot.appendChild(this.sectors);this.polygone=this.container.ownerDocument.createElementNS(this.svgNamespace,"g");this.svgRoot.appendChild(this.polygone);this.curves=this.container.ownerDocument.createElementNS(this.svgNamespace,"g");this.svgRoot.appendChild(this.curves);this.circles=this.container.ownerDocument.createElementNS(this.svgNamespace,"g");this.svgRoot.appendChild(this.circles);this.lines=this.container.ownerDocument.createElementNS(this.svgNamespace,"g");this.svgRoot.appendChild(this.lines);this.arcs=this.container.ownerDocument.createElementNS(this.svgNamespace,"g");this.svgRoot.appendChild(this.arcs);this.points=this.container.ownerDocument.createElementNS(this.svgNamespace,"g");this.svgRoot.appendChild(this.points);this.dashArray=["2, 2","5, 5","10, 10","20, 20","20, 10, 10, 10","20, 5, 10, 5"]};JXG.SVGRenderer.prototype=new JXG.AbstractRenderer;JXG.SVGRenderer.prototype.displayCopyright=function(d,e){var b=this.createPrimitive("text","licenseText"),a;b.setAttributeNS(null,"x","20");b.setAttributeNS(null,"y",2+e);b.setAttributeNS(null,"style","font-family:Arial,Helvetica,sans-serif; font-size:"+e+"px; fill:#356AA0;  opacity:0.3;");a=document.createTextNode(d);b.appendChild(a);this.appendChildPrimitive(b,"images")};JXG.SVGRenderer.prototype.drawTicks=function(a){var b=this.createPrimitive("path",a.id);this.appendChildPrimitive(b,"lines");a.rendNode=b};JXG.SVGRenderer.prototype.updateTicks=function(d,e,a,g,b){var f="",h,j,k;for(h=0;h<d.ticks.length;h++){j=d.ticks[h].scrCoords;if(d.ticks[h].major){if(d.labels[h].visProp.visible){this.drawText(d.labels[h])}f+="M "+(j[1]+e)+" "+(j[2]-a)+" L "+(j[1]-e)+" "+(j[2]+a)+" "}else{f+="M "+(j[1]+g)+" "+(j[2]-b)+" L "+(j[1]-g)+" "+(j[2]+b)+" "}}k=document.getElementById(d.id);if(k==null){k=this.createPrimitive("path",d.id);this.appendChildPrimitive(k,"lines")}k.setAttributeNS(null,"stroke",d.visProp.strokeColor);k.setAttributeNS(null,"stroke-opacity",d.visProp.strokeOpacity);k.setAttributeNS(null,"stroke-width",d.visProp.strokeWidth);this.updatePathPrimitive(k,f,d.board)};JXG.SVGRenderer.prototype.drawArc=function(b){var d=this.createPrimitive("path",b.id),h,e,a,j,f,g,o,k;b.rendNode=d;h=b.getRadius();e=b.board.algebra.trueAngle(b.point2,b.midpoint,b.point3);a={};a.midpoint=b.midpoint;a.getRadius=function(){return h};j=b.board.algebra.projectPointToCircle(b.point3,a);f="M "+b.point2.coords.scrCoords[1]+" "+b.point2.coords.scrCoords[2]+" A ";f+=Math.round(h*b.board.unitX*b.board.zoomX)+" "+Math.round(h*b.board.unitY*b.board.zoomY)+" 0 ";if(e>=180){f+="1 "}else{f+="0 "}f+="0 ";f+=j.scrCoords[1]+" "+j.scrCoords[2];this.updatePathPrimitive(d,f,b.board);if(b.visProp.strokeColor!=null){d.setAttributeNS(null,"stroke",b.visProp.strokeColor)}if(b.visProp.strokeOpacity!=null){d.setAttributeNS(null,"stroke-opacity",b.visProp.strokeOpacity)}if(b.visProp.strokeWidth!=null){d.setAttributeNS(null,"stroke-width",b.visProp.strokeWidth)}d.setAttributeNS(null,"fill","none");this.setDashStyle(d,b.visProp);if(b.visProp.firstArrow){o=this.createArrowHead(b,"Start");this.defs.appendChild(o);b.rendNodeTriangleStart=o;d.setAttributeNS(null,"marker-end","url(#"+b.id+"TriangleStart)")}if(b.visProp.lastArrow){o=this.createArrowHead(b,"End");this.defs.appendChild(o);b.rendNodeTriangleEnd=o;d.setAttributeNS(null,"marker-start","url(#"+b.id+"TriangleEnd)")}k=this.createPrimitive("path",b.id+"_fill");g="M "+b.midpoint.coords.scrCoords[1]+" "+b.midpoint.coords.scrCoords[2];g+=" L "+b.point2.coords.scrCoords[1]+" "+b.point2.coords.scrCoords[2]+" A ";g+=Math.round(h*b.board.unitX*b.board.zoomX)+" "+Math.round(h*b.board.unitY*b.board.zoomY)+" 0 ";if(e>=180){g+="1 "}else{g+="0 "}g+="0 ";g+=j.scrCoords[1]+" "+j.scrCoords[2];g+=" L "+b.midpoint.coords.scrCoords[1]+" "+b.midpoint.coords.scrCoords[2]+" z";this.updatePathPrimitive(k,g,b.board);if(b.visProp.fillColor!=null){k.setAttributeNS(null,"fill",b.visProp.fillColor)}if(b.visProp.fillOpacity!=null){k.setAttributeNS(null,"fill-opacity",b.visProp.fillOpacity)}k.setAttributeNS(null,"stroke","none");this.arcs.appendChild(d);this.sectors.appendChild(k);b.rendNodeFill=k;this.setDraft(b);if(!b.visProp.visible){b.hideElement()}};JXG.AbstractRenderer.prototype.updateArc=function(a){var b;this.remove(a.rendNode);this.remove(a.rendNodeFill);b=a.rendNodeTriangleStart;if(b!=null){this.remove(b)}b=a.rendNodeTriangleEnd;if(b!=null){this.remove(b)}this.drawArc(a);this.setDraft(a);return};JXG.SVGRenderer.prototype.drawAngle=function(f){var j=f.board.algebra.trueAngle(f.point1,f.point2,f.point3),h,e,b,g,a,d;h={};h.midpoint=f.point2;h.getRadius=function(){return f.radius};e=f.board.algebra.projectPointToCircle(f.point1,h);b=f.board.algebra.projectPointToCircle(f.point3,h);g=this.createPrimitive("path",f.id+"_1");d="M "+f.point2.coords.scrCoords[1]+" "+f.point2.coords.scrCoords[2];d+=" L "+e.scrCoords[1]+" "+e.scrCoords[2]+" A ";d+=Math.round(f.radius*f.board.unitX*f.board.zoomX)+" "+Math.round(f.radius*f.board.unitY*f.board.zoomY)+" 0 ";if(j>=180){d+="1 "}else{d+="0 "}d+="0 ";d+=b.scrCoords[1]+" "+b.scrCoords[2];d+=" L "+f.point2.coords.scrCoords[1]+" "+f.point2.coords.scrCoords[2]+" z";g.setAttributeNS(null,"d",d);g.setAttributeNS(null,"fill",f.visProp.fillColor);g.setAttributeNS(null,"fill-opacity",f.visProp.fillOpacity);g.setAttributeNS(null,"stroke","none");a=this.createPrimitive("path",f.id+"_2");d="M "+e.scrCoords[1]+" "+e.scrCoords[2]+" A ";d+=Math.round(f.radius*f.board.unitX*f.board.zoomX)+" "+Math.round(f.radius*f.board.unitY*f.board.zoomY)+" 0 ";if(j>=180){d+="1 "}else{d+="0 "}d+="0 ";d+=b.scrCoords[1]+" "+b.scrCoords[2];a.setAttributeNS(null,"d",d);a.setAttributeNS(null,"id",f.id+"_2");a.setAttributeNS(null,"fill","none");a.setAttributeNS(null,"stroke",f.visProp.strokeColor);a.setAttributeNS(null,"stroke-opacity",f.visProp.strokeOpacity);this.appendChildPrimitive(g,"angles");f.rendNode1=g;this.appendChildPrimitive(a,"angles");f.rendNode2=a;this.setObjectStrokeWidth(f,f.visProp.strokeWidth)};JXG.SVGRenderer.prototype.updateAngle=function(a){this.remove(a.rendNode1);this.remove(a.rendNode2);this.drawAngle(a);if(!a.visProp.visible){a.hideElement()}return};JXG.SVGRenderer.prototype.drawImage=function(b){var a="data:image/png;base64,"+b.imageBase64String,d=this.createPrimitive("image",b.id);d.setAttributeNS(this.xlinkNamespace,"xlink:href",a);this.appendChildPrimitive(d,b.displayLevel);b.rendNode=d;this.updateImage(b)};JXG.SVGRenderer.prototype.transformImage=function(b,a){var d=b.rendNode,e=d.getAttributeNS(null,"transform");e+=" "+this.joinTransforms(b,a);d.setAttributeNS(null,"transform",e)};JXG.SVGRenderer.prototype.joinTransforms=function(e,b){var f="",a,d;for(a=0;a<b.length;a++){d=b[a].matrix[1][1]+","+b[a].matrix[2][1]+","+b[a].matrix[1][2]+","+b[a].matrix[2][2]+","+b[a].matrix[1][0]+","+b[a].matrix[2][0];f+="matrix("+d+") "}return f};JXG.SVGRenderer.prototype.transformImageParent=function(d,a){var b,e;if(a!=null){b=a[1][1]+","+a[2][1]+","+a[1][2]+","+a[2][2]+","+a[1][0]+","+a[2][0];e="matrix("+b+")"}else{e=""}d.rendNode.setAttributeNS(null,"transform",e)};JXG.SVGRenderer.prototype.removeGrid=function(a){var b=this.grid;a.hasGrid=false;while(b.childNodes.length>0){b.removeChild(b.firstChild)}};JXG.SVGRenderer.prototype.setObjectDash=function(a){var b,d;if(a.elementClass!=JXG.OBJECT_CLASS_POINT){if(a.type==JXG.OBJECT_TYPE_ANGLE){b=a.rendNode2}else{b=a.rendNode}if(a.visProp.dash>0){d=a.visProp.dash;b.setAttributeNS(null,"stroke-dasharray",this.dashArray[d-1])}else{if(b.hasAttributeNS(null,"stroke-dasharray")){b.removeAttributeNS(null,"stroke-dasharray")}}}};JXG.SVGRenderer.prototype.setObjectStrokeColor=function(d,a,b){var g,f,e;if(b==undefined){b=1}if(typeof b=="function"){f=b()}else{f=b}f=(f>0)?f:0;if(typeof a=="function"){g=a()}else{g=a}if(d.elementClass!=JXG.OBJECT_CLASS_POINT){e=d.rendNode;if(d.type==JXG.OBJECT_TYPE_TEXT){e.style.color=g}else{if(d.type==JXG.OBJECT_TYPE_ANGLE){e=d.rendNode2;e.setAttributeNS(null,"stroke",g);e.setAttributeNS(null,"stroke-opacity",f)}else{e.setAttributeNS(null,"stroke",g);e.setAttributeNS(null,"stroke-opacity",f)}}if(d.type==JXG.OBJECT_TYPE_ARROW){d.rendNodeTriangle.setAttributeNS(null,"stroke",g);d.rendNodeTriangle.setAttributeNS(null,"stroke-opacity",f);d.rendNodeTriangle.setAttributeNS(null,"fill",g);d.rendNodeTriangle.setAttributeNS(null,"fill-opacity",f)}if(d.type==JXG.OBJECT_TYPE_ARC){if(d.visProp.firstArrow){d.rendNodeTriangleStart.setAttributeNS(null,"stroke",g);d.rendNodeTriangleStart.setAttributeNS(null,"stroke-opacity",f);d.rendNodeTriangleStart.setAttributeNS(null,"fill",g);d.rendNodeTriangleStart.setAttributeNS(null,"fill-opacity",f)}if(d.visProp.lastArrow){d.rendNodeTriangleEnd.setAttributeNS(null,"stroke",g);d.rendNodeTriangleEnd.setAttributeNS(null,"stroke-opacity",f);d.rendNodeTriangleEnd.setAttributeNS(null,"fill",g);d.rendNodeTriangleEnd.setAttributeNS(null,"fill-opacity",f)}}else{if(d.type==JXG.OBJECT_TYPE_LINE){if(d.visProp.firstArrow){d.rendNodeTriangleStart.setAttributeNS(null,"stroke",g);d.rendNodeTriangleStart.setAttributeNS(null,"stroke-opacity",f);d.rendNodeTriangleStart.setAttributeNS(null,"fill",g);d.rendNodeTriangleStart.setAttributeNS(null,"fill-opacity",f)}if(d.visProp.lastArrow){d.rendNodeTriangleEnd.setAttributeNS(null,"stroke",g);d.rendNodeTriangleEnd.setAttributeNS(null,"stroke-opacity",f);d.rendNodeTriangleEnd.setAttributeNS(null,"fill",g);d.rendNodeTriangleEnd.setAttributeNS(null,"fill-opacity",f)}}}}else{if(d.visProp.style>=3&&d.visProp.style<=9){e=d.rendNode;e.setAttributeNS(null,"stroke",g);e.setAttributeNS(null,"stroke-opacity",f)}else{e=d.rendNodeX1;e.setAttributeNS(null,"stroke",g);e.setAttributeNS(null,"stroke-opacity",f);e=d.rendNodeX2;e.setAttributeNS(null,"stroke",g);e.setAttributeNS(null,"stroke-opacity",f)}}};JXG.SVGRenderer.prototype.setObjectFillColor=function(d,a,b){var g,f,e;if(b==undefined){b=1}if(typeof b=="function"){f=b()}else{f=b}f=(f>0)?f:0;if(typeof a=="function"){g=a()}else{g=a}if(d.elementClass!=JXG.OBJECT_CLASS_POINT){if(d.type==JXG.OBJECT_TYPE_ARC){e=d.rendNodeFill;e.setAttributeNS(null,"fill",g);e.setAttributeNS(null,"fill-opacity",f)}else{if(d.type==JXG.OBJECT_TYPE_ANGLE){e=d.rendNode1;e.setAttributeNS(null,"fill",g);e.setAttributeNS(null,"fill-opacity",f)}else{e=d.rendNode;e.setAttributeNS(null,"fill",g);e.setAttributeNS(null,"fill-opacity",f)}}}else{if(d.visProp.style>=3&&d.visProp.style<=9){e=d.rendNode;e.setAttributeNS(null,"fill",g);e.setAttributeNS(null,"fill-opacity",f)}else{e=d.rendNodeX1;e.setAttributeNS(null,"fill",g);e.setAttributeNS(null,"fill-opacity",f);e=d.rendNodeX2;e.setAttributeNS(null,"fill",g);e.setAttributeNS(null,"fill-opacity",f)}}};JXG.SVGRenderer.prototype.setObjectStrokeWidth=function(d,b){var a,e;if(typeof b=="function"){a=b()}else{a=b}if(d.elementClass!=JXG.OBJECT_CLASS_POINT){e;if(d.type==JXG.OBJECT_TYPE_ANGLE){e=d.rendNode2}else{e=d.rendNode}this.setPropertyPrimitive(e,"stroked","true");if(a!=null){this.setPropertyPrimitive(e,"stroke-width",a)}}else{if(d.visProp.style>=3&&d.visProp.style<=9){e=d.rendNode;this.setPropertyPrimitive(e,"stroked","true");if(a!=null){this.setPropertyPrimitive(e,"stroke-width",a)}}else{e=d.rendNodeX1;this.setPropertyPrimitive(e,"stroked","true");if(a!=null){this.setPropertyPrimitive(e,"stroke-width",a)}e=d.rendNodeX2;this.setPropertyPrimitive(e,"stroked","true");if(a!=null){this.setPropertyPrimitive(e,"stroke-width",a)}}}};JXG.SVGRenderer.prototype.hide=function(a){var b;if(a==null){return}if(JXG.IsPoint(a)){if(a.visProp.style>=3&&a.visProp.style<=9){b=a.rendNode;b.setAttributeNS(null,"display","none");b.style.visibility="hidden"}else{b=a.rendNodeX1;b.setAttributeNS(null,"display","none");b.style.visibility="hidden";b=a.rendNodeX2;b.setAttributeNS(null,"display","none");b.style.visibility="hidden"}}else{if(a.type==JXG.OBJECT_TYPE_ARC){b=a.rendNode;b.setAttributeNS(null,"display","none");b.style.visibility="hidden";b=a.rendNodeFill;b.setAttributeNS(null,"display","none");b.style.visibility="hidden"}else{if(a.type==JXG.OBJECT_TYPE_ANGLE){b=a.rendNode1;b.setAttributeNS(null,"display","none");b.style.visibility="hidden";b=a.rendNode2;b.setAttributeNS(null,"display","none");b.style.visibility="hidden"}else{b=a.rendNode;b.setAttributeNS(null,"display","none");b.style.visibility="hidden"}}}};JXG.SVGRenderer.prototype.show=function(a){var b;if(JXG.IsPoint(a)){if(a.visProp.style>=3&&a.visProp.style<=9){b=a.rendNode;b.setAttributeNS(null,"display","inline");b.style.visibility="inherit"}else{b=a.rendNodeX1;b.setAttributeNS(null,"display","inline");b.style.visibility="inherit";b=a.rendNodeX2;b.setAttributeNS(null,"display","inline");b.style.visibility="inherit"}}else{if(a.type==JXG.OBJECT_TYPE_ARC){b=a.rendNode;b.setAttributeNS(null,"display","inline");b.style.visibility="inherit";b=a.rendNodeFill;b.setAttributeNS(null,"display","inline");b.style.visibility="inherit"}else{if(a.type==JXG.OBJECT_TYPE_ANGLE){b=a.rendNode1;b.setAttributeNS(null,"display","inline");b.style.visibility="inherit";b=a.rendNode2;b.setAttributeNS(null,"display","inline");b.style.visibility="inherit"}else{b=a.rendNode;b.setAttributeNS(null,"display","inline");b.style.visibility="inherit"}}}};JXG.SVGRenderer.prototype.remove=function(a){if(a!=null&&a.parentNode!=null){a.parentNode.removeChild(a)}};JXG.SVGRenderer.prototype.suspendRedraw=function(){if(true){this.suspendHandle=this.svgRoot.suspendRedraw(10000)}};JXG.SVGRenderer.prototype.unsuspendRedraw=function(){if(true){this.svgRoot.unsuspendRedraw(this.suspendHandle);this.svgRoot.forceRedraw()}};JXG.SVGRenderer.prototype.setDashStyle=function(b,a){var d;if(a.dash>0){d=a.dash;b.setAttributeNS(null,"stroke-dasharray",this.dashArray[d-1])}};JXG.SVGRenderer.prototype.createPrimitive=function(a,d){var b=this.container.ownerDocument.createElementNS(this.svgNamespace,a);b.setAttributeNS(null,"id",d);b.style.position="absolute";return b};JXG.SVGRenderer.prototype.createArrowHead=function(d,f){var e=d.id+"Triangle",b,a;if(f!=null){e+=f}b=this.createPrimitive("marker",e);b.setAttributeNS(null,"viewBox","0 0 10 6");b.setAttributeNS(null,"refY","3");b.setAttributeNS(null,"markerUnits","strokeWidth");b.setAttributeNS(null,"markerHeight","6");b.setAttributeNS(null,"markerWidth","6");b.setAttributeNS(null,"orient","auto");b.setAttributeNS(null,"stroke",d.visProp.strokeColor);b.setAttributeNS(null,"stroke-opacity",d.visProp.strokeOpacity);b.setAttributeNS(null,"fill",d.visProp.strokeColor);b.setAttributeNS(null,"fill-opacity",d.visProp.strokeOpacity);a=this.container.ownerDocument.createElementNS(this.svgNamespace,"path");if(f=="End"){b.setAttributeNS(null,"refX","0");a.setAttributeNS(null,"d","M 0 3 L 10 6 L 10 0 z")}else{b.setAttributeNS(null,"refX","10");a.setAttributeNS(null,"d","M 0 0 L 10 3 L 0 6 z")}b.appendChild(a);return b};JXG.SVGRenderer.prototype.makeArrow=function(d,b,e){var a=this.createArrowHead(b,e);this.defs.appendChild(a);d.setAttributeNS(null,"marker-end","url(#"+b.id+"Triangle)");b.rendNodeTriangle=a};JXG.SVGRenderer.prototype.makeArrows=function(b){var a;if(b.visProp.firstArrow){a=b.rendNodeTriangleStart;if(a==null){a=this.createArrowHead(b,"End");this.defs.appendChild(a);b.rendNodeTriangleStart=a;b.rendNode.setAttributeNS(null,"marker-start","url(#"+b.id+"TriangleEnd)")}}else{a=b.rendNodeTriangleStart;if(a!=null){this.remove(a)}}if(b.visProp.lastArrow){a=b.rendNodeTriangleEnd;if(a==null){a=this.createArrowHead(b,"Start");this.defs.appendChild(a);b.rendNodeTriangleEnd=a;b.rendNode.setAttributeNS(null,"marker-end","url(#"+b.id+"TriangleStart)")}}else{a=b.rendNodeTriangleEnd;if(a!=null){this.remove(a)}}};JXG.SVGRenderer.prototype.updateLinePrimitive=function(f,b,a,e,d){f.setAttributeNS(null,"x1",b);f.setAttributeNS(null,"y1",a);f.setAttributeNS(null,"x2",e);f.setAttributeNS(null,"y2",d)};JXG.SVGRenderer.prototype.updateCirclePrimitive=function(d,a,e,b){d.setAttributeNS(null,"cx",(a));d.setAttributeNS(null,"cy",(e));d.setAttributeNS(null,"r",(b))};JXG.SVGRenderer.prototype.updateEllipsePrimitive=function(b,a,f,e,d){b.setAttributeNS(null,"cx",(a));b.setAttributeNS(null,"cy",(f));b.setAttributeNS(null,"rx",(e));b.setAttributeNS(null,"ry",(d))};JXG.SVGRenderer.prototype.updateRectPrimitive=function(e,a,f,b,d){e.setAttributeNS(null,"x",(a));e.setAttributeNS(null,"y",(f));e.setAttributeNS(null,"width",(b));e.setAttributeNS(null,"height",(d))};JXG.SVGRenderer.prototype.updatePathPrimitive=function(b,d,a){b.setAttributeNS(null,"d",d);b.setAttributeNS(null,"stroke-linecap","round");b.setAttributeNS(null,"stroke-linejoin","round");b.setAttributeNS(null,"shape-rendering","geometricPrecision")};JXG.SVGRenderer.prototype.updatePathStringPrimitive=function(a){var j=-10000,e=-10000,b=" M ",g="",f=3*a.board.canvasHeight,q=100*a.board.canvasWidth,d,k,o=(a.curveType!="plot");isFunctionGraph=(a.curveType=="functiongraph");if(a.numberPoints<=0){return""}for(d=0;d<a.numberPoints;d++){k=a.points[d].scrCoords;if(o&&Math.abs(j-k[1])+Math.abs(e-k[2])<4){continue}if(isNaN(k[1])||isNaN(k[2])||Math.abs(k[1])>q||(isFunctionGraph&&(k[2]>f||k[2]<-0.5*f))){b=" M "}else{g+=[b,k[1]," ",k[2]].join("");b=" L "}j=k[1];e=k[2]}return g};JXG.SVGRenderer.prototype.updatePolygonePrimitive=function(e,b){var f="",d,a;e.setAttributeNS(null,"stroke","none");for(a=0;a<b.vertices.length-1;a++){d=b.vertices[a].coords.scrCoords;f=f+d[1]+","+d[2];if(a<b.vertices.length-2){f+=" "}}e.setAttributeNS(null,"points",f)};JXG.SVGRenderer.prototype.appendChildPrimitive=function(a,b){switch(b){case"images":this.images.appendChild(a);break;case"grid":this.grid.appendChild(a);break;case"angles":this.angles.appendChild(a);break;case"sectors":this.sectors.appendChild(a);break;case"polygone":this.polygone.appendChild(a);break;case"curves":this.lines.appendChild(a);break;case"circles":this.lines.appendChild(a);break;case"lines":this.lines.appendChild(a);break;case"arcs":this.arcs.appendChild(a);break;case"points":this.points.appendChild(a);break}};JXG.SVGRenderer.prototype.setPropertyPrimitive=function(b,a,d){if(a=="stroked"){return}b.setAttributeNS(null,a,d)};JXG.SVGRenderer.prototype.drawVerticalGrid=function(e,b,g,d){var f=this.createPrimitive("path","gridx"),a="";while(e.scrCoords[1]<b.scrCoords[1]+g-1){a+=" M "+e.scrCoords[1]+" "+0+" L "+e.scrCoords[1]+" "+d.canvasHeight+" ";e.setCoordinates(JXG.COORDS_BY_SCREEN,[e.scrCoords[1]+g,e.scrCoords[2]])}this.updatePathPrimitive(f,a,d);return f};JXG.SVGRenderer.prototype.drawHorizontalGrid=function(e,b,g,d){var f=this.createPrimitive("path","gridy"),a="";while(e.scrCoords[2]<=b.scrCoords[2]+g-1){a+=" M "+0+" "+e.scrCoords[2]+" L "+d.canvasWidth+" "+e.scrCoords[2]+" ";e.setCoordinates(JXG.COORDS_BY_SCREEN,[e.scrCoords[1],e.scrCoords[2]+g])}this.updatePathPrimitive(f,a,d);return f};JXG.VMLRenderer=function(a){this.constructor();this.container=a;this.container.style.overflow="hidden";this.container.onselectstart=function(){return false};a.ownerDocument.namespaces.add("v","urn:schemas-microsoft-com:vml");a.ownerDocument.createStyleSheet().addRule("v\\:*","behavior: url(#default#VML);");this.dashArray=["Solid","1 1","ShortDash","Dash","LongDash","ShortDashDot","LongDashDot"]};JXG.VMLRenderer.prototype=new JXG.AbstractRenderer;JXG.VMLRenderer.prototype.displayCopyright=function(d,e){var b=this.createPrimitive("textbox","licenseText");b.style.left=20;b.style.top=(2);b.style.fontSize=(e);b.style.color="#356AA0";b.style.fontFamily="Arial,Helvetica,sans-serif";b.setAttribute("opacity","30%");b.style.filter="alpha(opacity = 30)";var a=document.createTextNode(d);b.appendChild(a);this.appendChildPrimitive(b,"images")};JXG.VMLRenderer.prototype.drawTicks=function(a){var b=this.createPrimitive("path",a.id+"_ticks");this.appendChildPrimitive(b,"lines");a.rendNode=b};JXG.VMLRenderer.prototype.updateTicks=function(e,f,a,g,d){var b=[];for(var h=0;h<e.ticks.length;h++){var j=e.ticks[h];if(j.major){if(e.labels[h].show){this.drawText(e.labels[h])}b.push(" m "+Math.round(j.scrCoords[1]+f)+", "+Math.round(j.scrCoords[2]-a)+" l "+Math.round(j.scrCoords[1]-f)+", "+Math.round(j.scrCoords[2]+a)+" ")}else{b.push(" m "+Math.round(j.scrCoords[1]+g)+", "+Math.round(j.scrCoords[2]-d)+" l "+Math.round(j.scrCoords[1]-g)+", "+Math.round(j.scrCoords[2]+d)+" ")}}var k=document.getElementById(e.id+"_ticks");if(k==null){k=this.createPrimitive("path",e.id+"_ticks");this.appendChildPrimitive(k,"lines")}k.setAttribute("stroked","true");k.setAttribute("strokecolor",e.visProp.strokeColor,1);k.setAttribute("strokeweight",e.visProp.strokeWidth);this.updatePathPrimitive(k,b,e.board)};JXG.VMLRenderer.prototype.drawArcLine=function(h,a,g,f,b,d){var e=this.createPrimitive("arc",h);e.style.position="absolute";e.setAttribute("filled","false");e.style.left=(b.coords.scrCoords[1]-Math.round(a*d.unitX*d.zoomX))+"px";e.style.top=(b.coords.scrCoords[2]-Math.round(a*d.unitY*d.zoomY))+"px";e.style.width=(Math.round(a*d.unitX*d.zoomX)*2)+"px";e.style.height=(Math.round(a*d.unitY*d.zoomY)*2)+"px";e.setAttribute("startangle",g);e.setAttribute("endangle",f);return e};JXG.VMLRenderer.prototype.drawArcFill=function(a,d,q,h,f,e){var o=this.createPrimitive("shape",a+"_fill");o.setAttribute("stroked","false");var k=Math.round(d*e.unitX*e.zoomX);var j=Math.round(d*e.unitY*e.zoomY);o.style.width=k;o.style.height=j;o.setAttribute("coordsize",k+","+j);var g=this.container.ownerDocument.createElement("v:path");g.setAttribute("id",a+"path");var b="m "+q.coords.scrCoords[1]+","+q.coords.scrCoords[2]+" l ";b+=h.coords.scrCoords[1]+","+h.coords.scrCoords[2]+" at ";b+=(q.coords.scrCoords[1]-k)+","+(q.coords.scrCoords[2]-j)+",";b+=(q.coords.scrCoords[1]+k)+","+(q.coords.scrCoords[2]+j);b+=" "+h.coords.scrCoords[1]+","+h.coords.scrCoords[2];b+=", "+f.coords.scrCoords[1]+","+f.coords.scrCoords[2]+" l ";b+=q.coords.scrCoords[1]+","+q.coords.scrCoords[2]+" x e";g.setAttribute("v",b);o.appendChild(g);return o};JXG.VMLRenderer.prototype.drawArc=function(b){var j=b.getRadius();var a={};a.coords=new JXG.Coords(JXG.COORDS_BY_USER,[b.midpoint.coords.usrCoords[1],b.board.origin.scrCoords[2]/(b.board.unitY*b.board.zoomY)],b.board);var g=b.board.algebra.trueAngle(b.point2,b.midpoint,a);var h=b.board.algebra.trueAngle(b.point3,b.midpoint,a);if(g<h){h-=360}var e=this.drawArcLine(b.id,j,h,g,b.midpoint,b.board);b.rendNode=e;var d=this.getElementById(b.id+"stroke");if(d==null){d=this.container.ownerDocument.createElement("v:stroke");d.setAttribute("id",b.id+"stroke");e.appendChild(d)}if(b.visProp.lastArrow){d.setAttribute("endarrow","block");d.setAttribute("endarrowlength","long")}if(b.visProp.firstArrow){d.setAttribute("startarrow","block");d.setAttribute("startarrowlength","long")}this.setObjectStrokeColor(b,b.visProp.strokeColor,b.visProp.strokeOpacity);this.setObjectStrokeWidth(b,b.visProp.strokeWidth);var f=b.visProp.dash;d.setAttribute("dashstyle",this.dashArray[f]);e.appendChild(d);var k={};k.coords=b.board.algebra.projectPointToCircle(b.point3,b);var o=this.drawArcFill(b.id,j,b.midpoint,b.point2,k,b.board);b.rendNode2=o;this.setObjectFillColor(b,b.visProp.fillColor,b.visProp.fillOpacity);this.appendChildPrimitive(e,"lines");this.appendChildPrimitive(o,"angles");if(b.visProp.draft){this.setDraft(b)}};JXG.AbstractRenderer.prototype.updateArc=function(a){this.remove(a.rendNode);this.remove(a.rendNodeFill);this.remove(a.rendNode2);this.drawArc(a);this.setDraft(a);return};JXG.VMLRenderer.prototype.drawAngle=function(e){var a={};a.midpoint=e.point2;a.getRadius=function(){return e.radius};var v=e.board.algebra.projectPointToCircle(e.point1,a);var u=e.board.algebra.projectPointToCircle(e.point3,a);var b={};b.coords=new JXG.Coords(JXG.COORDS_BY_USER,[e.point2.coords.usrCoords[1],e.board.origin.scrCoords[2]/(e.board.unitY*e.board.zoomY)],e.board);var h=e.board.algebra.trueAngle(e.point1,e.point2,b);var j=e.board.algebra.trueAngle(e.point3,e.point2,b);if(h<j){j-=360}var f=this.drawArcLine(e.id,e.radius,j,h,e.point2,e.board);e.rendNode=f;this.setObjectStrokeColor(e,e.visProp.strokeColor,e.visProp.strokeOpacity);this.setObjectStrokeWidth(e,e.visProp.strokeWidth);var g=e.visProp.dash;var d=this.getElementById(e.id+"stroke");if(d==null){d=this.container.ownerDocument.createElement("v:stroke");d.setAttribute("id",e.id+"stroke");f.appendChild(d)}d.setAttribute("dashstyle",this.dashArray[g]);f.appendChild(d);var q={};q.coords=v;var k={};k.coords=u;var o=this.drawArcFill(e.id,e.radius,e.point2,q,k,e.board);e.rendNode2=o;this.setObjectFillColor(e,e.visProp.fillColor,e.visProp.fillOpacity);this.appendChildPrimitive(f,"lines");this.appendChildPrimitive(o,"angles");if(e.visProp.draft){this.setDraft(e)}if(!e.visProp.visible){e.hideElement(e)}};JXG.VMLRenderer.prototype.updateAngle=function(a){this.remove(a.rendNode);this.remove(a.rendNode2);this.drawAngle(a);return};JXG.VMLRenderer.prototype.drawImage=function(b){var a="data:image/png;base64,"+b.imageBase64String;var d=this.container.ownerDocument.createElement("img");d.style.position="absolute";d.setAttribute("id",b.id);d.setAttribute("src",a);this.container.appendChild(d);this.appendChildPrimitive(d,b.displayLevel);d.style.filter="progid:DXImageTransform.Microsoft.Matrix(M11='1.0', sizingMethod='auto expand')";b.rendNode=d;this.updateImage(b)};JXG.VMLRenderer.prototype.transformImage=function(d,b){var e=d.rendNode;var a=this.joinTransforms(d,b);e.style.left=(d.coords.scrCoords[1]+a[1][0])+"px";e.style.top=(d.coords.scrCoords[2]-d.size[1]+a[2][0])+"px";e.filters.item(0).M11=a[1][1];e.filters.item(0).M12=a[1][2];e.filters.item(0).M21=a[2][1];e.filters.item(0).M22=a[2][2]};JXG.VMLRenderer.prototype.joinTransforms=function(e,d){var a=[[1,0,0],[0,1,0],[0,0,1]];for(var b=0;b<d.length;b++){a=e.board.algebra.matMatMult(d[b].matrix,a)}return a};JXG.VMLRenderer.prototype.transformImageParent=function(b,a){};JXG.VMLRenderer.prototype.removeGrid=function(a){a.hasGrid=false;var b=document.getElementById("gridx");this.remove(b);var b=document.getElementById("gridy");this.remove(b)};JXG.VMLRenderer.prototype.hide=function(a){if(!JXG.IsPoint(a)){var b=a.rendNode;b.style.visibility="hidden";if(a.type==JXG.OBJECT_TYPE_ARC||a.type==JXG.OBJECT_TYPE_ANGLE){b=a.rendNodeFill;b.style.visibility="hidden"}}else{if(a.visProp.style>=3&&a.visProp.style<=9){var b=a.rendNode;b.style.visibility="hidden"}else{var b=a.rendNodeX1;b.style.visibility="hidden";var b=a.rendNodeX2;b.style.visibility="hidden"}}};JXG.VMLRenderer.prototype.show=function(a){if(!JXG.IsPoint(a)){var b=a.rendNode;b.style.visibility="inherit";if(a.type==JXG.OBJECT_TYPE_ARC||a.type==JXG.OBJECT_TYPE_ANGLE){b=a.rendNodeFill;b.style.visibility="inherit"}}else{if(a.visProp.style>=3&&a.visProp.style<=9){var b=a.rendNode;b.style.visibility="inherit"}else{var b=a.rendNodeX1;b.style.visibility="inherit";var b=a.rendNodeX2;b.style.visibility="inherit"}}};JXG.VMLRenderer.prototype.setObjectDash=function(b){if(b.elementClass!=JXG.OBJECT_CLASS_POINT){if(b.type==JXG.OBJECT_TYPE_ANGLE){var d=b.rendNode;var a=b.visProp.dash;d.setAttribute("dashstyle",this.dashArray[a])}else{var d=document.getElementById(b.id+"stroke");if(d){var a=b.visProp.dash;d.setAttribute("dashstyle",this.dashArray[a])}}}};JXG.VMLRenderer.prototype.setObjectStrokeColor=function(e,a,b){var h,g;if(typeof b=="function"){g=b()}else{g=b}g=(g>0)?g:0;if(typeof a=="function"){h=a()}else{h=a}if(e.elementClass!=JXG.OBJECT_CLASS_POINT){if(e.type==JXG.OBJECT_TYPE_TEXT){e.rendNode.style.color=h}else{var f=e.rendNode;f.setAttribute("stroked","true");f.setAttribute("strokecolor",h);var d=this.getElementById(e.id+"stroke");if(d==null){d=this.container.ownerDocument.createElement("v:stroke");d.setAttribute("id",e.id+"stroke");f.appendChild(d)}if(g!=undefined){d.setAttribute("opacity",(g*100)+"%")}}}else{if(e.visProp.style>=3&&e.visProp.style<=9){var f=e.rendNode;f.setAttribute("stroked","true");f.setAttribute("strokecolor",h);var d=this.getElementById(e.id+"stroke");if(d==null){d=this.container.ownerDocument.createElement("v:stroke");d.setAttribute("id",e.id+"stroke");f.appendChild(d)}if(g!=undefined){d.setAttribute("opacity",(g*100)+"%")}}else{var f=e.rendNodeX1;f.setAttribute("stroked","true");f.setAttribute("strokecolor",h);var d=this.getElementById(e.id+"_x1stroke");if(d==null){d=this.container.ownerDocument.createElement("v:stroke");d.setAttribute("id",e.id+"_x1stroke");f.appendChild(d)}if(g!=undefined){d.setAttribute("opacity",(g*100)+"%")}var f=e.rendNodeX2;f.setAttribute("stroked","true");f.setAttribute("strokecolor",h);d=this.getElementById(e.id+"_x2stroke");if(d==null){d=this.container.ownerDocument.createElement("v:stroke");d.setAttribute("id",e.id+"_x2stroke");f.appendChild(d)}if(g!=undefined){d.setAttribute("opacity",(g*100)+"%")}}}};JXG.VMLRenderer.prototype.setObjectFillColor=function(e,a,b){var f;var h,g;if(typeof b=="function"){g=b()}else{g=b}g=(g>0)?g:0;if(typeof a=="function"){h=a()}else{h=a}if(e.elementClass!=JXG.OBJECT_CLASS_POINT){if(e.type==JXG.OBJECT_TYPE_ARC||e.type==JXG.OBJECT_TYPE_ANGLE){var f=document.getElementById(e.id+"_fillnode");if(f==null){f=this.container.ownerDocument.createElement("v:fill");f.setAttribute("id",e.id+"_fillnode");e.rendNode2.appendChild(f)}e.rendNodeFill=f;if(h=="none"){e.rendNode2.setAttribute("filled","false")}else{e.rendNode2.setAttribute("filled","true");e.rendNode2.setAttribute("fillcolor",h)}}else{f=e.rendNode;if(h=="none"){f.setAttribute("filled","false")}else{f.setAttribute("filled","true");f.setAttribute("fillcolor",h)}}}else{if(e.visProp.style>=3&&e.visProp.style<=9){var f=e.rendNode;var d=document.getElementById(e.id+"_fillnode");if(d==null){d=this.container.ownerDocument.createElement("v:fill");d.setAttribute("id",e.id+"_fillnode");f.appendChild(d)}e.rendNodeFill=d;if(h=="none"){f.setAttribute("filled","false")}else{f.setAttribute("filled","true");f.setAttribute("fillcolor",h);if(g!=undefined){d.setAttribute("opacity",(g*100)+"%")}}}else{var f=e.rendNodeX1;if(h=="none"){f.setAttribute("filled","false")}else{f.setAttribute("filled","true");f.setAttribute("fillcolor",h)}var f=e.rendNodeX2;if(h=="none"){f.setAttribute("filled","false")}else{f.setAttribute("filled","true");f.setAttribute("fillcolor",h)}}}if(e.type==JXG.OBJECT_TYPE_POLYGON||e.type==JXG.OBJECT_TYPE_CIRCLE||e.type==JXG.OBJECT_TYPE_ARC||e.type==JXG.OBJECT_TYPE_ANGLE||e.type==JXG.OBJECT_TYPE_CURVE){var d=document.getElementById(e.id+"_fillnode");if(d==null){d=this.container.ownerDocument.createElement("v:fill");d.setAttribute("id",e.id+"_fillnode");if(e.type==JXG.OBJECT_TYPE_ARC||e.type==JXG.OBJECT_TYPE_ANGLE){e.rendNode2.appendChild(d)}else{e.rendNode.appendChild(d)}}e.rendNodeFill=d;if(g!=undefined){d.setAttribute("opacity",(g*100)+"%")}}};JXG.VMLRenderer.prototype.remove=function(a){if(a!=null){a.removeNode(true)}};JXG.VMLRenderer.prototype.suspendRedraw=function(){this.container.style.display="none"};JXG.VMLRenderer.prototype.unsuspendRedraw=function(){this.container.style.display=""};JXG.VMLRenderer.prototype.setAttributes=function(e,d,h,b){var g;for(var a=0;a<d.length;a++){var f=d[a];if(b[f]!=null){if(typeof b[f]=="function"){g=b[f]();g=(g>0)?g:0}else{g=b[f]}e.setAttribute(h[a],g)}}};JXG.VMLRenderer.prototype.setDashStyle=function(d,b){if(b.dash>=0){var a=this.container.ownerDocument.createElement("v:stroke");a.setAttribute("id",d.id+"stroke");a.setAttribute("dashstyle",this.dashArray[b.dash]);d.appendChild(a)}};JXG.AbstractRenderer.prototype.setObjectStrokeWidth=function(d,b){var a;if(typeof b=="function"){a=b()}else{a=b}if(d.elementClass!=JXG.OBJECT_CLASS_POINT){var e=d.rendNode;this.setPropertyPrimitive(e,"stroked","true");if(a!=null){this.setPropertyPrimitive(e,"stroke-width",a)}}else{if(d.visProp.style>=3&&d.visProp.style<=9){var e=d.rendNode;this.setPropertyPrimitive(e,"stroked","true");if(a!=null){this.setPropertyPrimitive(e,"stroke-width",a)}}else{var e=d.rendNodeX1;this.setPropertyPrimitive(e,"stroked","true");if(a!=null){this.setPropertyPrimitive(e,"stroke-width",a)}var e=d.rendNodeX2;this.setPropertyPrimitive(e,"stroked","true");if(a!=null){this.setPropertyPrimitive(e,"stroke-width",a)}}}};JXG.VMLRenderer.prototype.createPrimitive=function(a,d){var b;if(a=="circle"||a=="ellipse"){b=this.container.ownerDocument.createElement("v:oval")}else{if(a=="polygon"){b=this.container.ownerDocument.createElement("v:shape")}else{if(a=="path"){b=this.container.ownerDocument.createElement("v:shape")}else{b=this.container.ownerDocument.createElement("v:"+a)}}}b.style.position="absolute";b.setAttribute("id",d);return b};JXG.VMLRenderer.prototype.makeArrow=function(d,b,e){var a=this.container.ownerDocument.createElement("v:stroke");a.setAttribute("endarrow","block");a.setAttribute("endarrowlength","long");d.appendChild(a)};JXG.VMLRenderer.prototype.makeArrows=function(b){if(b.visProp.firstArrow){var a=b.rendNodeStroke;if(a==null){a=this.container.ownerDocument.createElement("v:stroke");a.setAttribute("id",b.id+"stroke");a.setAttribute("startarrow","block");a.setAttribute("startarrowlength","long");b.rendNode.appendChild(a);b.rendNodeStroke=a}}else{var a=b.rendNodeStroke;if(a!=null){a.setAttribute("startarrow","none")}}if(b.visProp.lastArrow){var a=b.rendNodeStroke;if(a==null){a=this.container.ownerDocument.createElement("v:stroke");b.rendNode.appendChild(a);b.rendNodeStroke=a}a.setAttribute("id",b.id+"stroke");a.setAttribute("endarrow","block");a.setAttribute("endarrowlength","long")}else{var a=b.rendNodeStroke;if(a!=null){a.setAttribute("endarrow","none")}}};JXG.VMLRenderer.prototype.updateLinePrimitive=function(f,b,a,e,d){f.setAttribute("from",[b,a].join(","));f.setAttribute("to",[e,d].join(","))};JXG.VMLRenderer.prototype.updateCirclePrimitive=function(d,a,e,b){d.style.left=(a-b)+"px";d.style.top=(e-b)+"px";d.style.width=(b*2)+"px";d.style.height=(b*2)+"px"};JXG.VMLRenderer.prototype.updateRectPrimitive=function(e,a,f,b,d){e.style.left=(a)+"px";e.style.top=(f)+"px";e.style.width=(b)+"px";e.style.height=(d)+"px"};JXG.VMLRenderer.prototype.updateEllipsePrimitive=function(b,a,f,e,d){b.style.left=(a-e)+"px";b.style.top=(f-d)+"px";b.style.width=(e*2)+"px";b.style.height=(d*2)+"px"};JXG.VMLRenderer.prototype.updatePathPrimitive=function(d,e,b){var a=b.canvasWidth;var f=b.canvasHeight;d.style.width=a;d.style.height=f;d.setAttribute("coordsize",a+","+f);d.setAttribute("path",e.join(""))};JXG.VMLRenderer.prototype.updatePathStringPrimitive=function(a){if(a.numberPoints<=0){return""}var k=-10000;var f=-10000;var b=" m ";var j=[];var g=3*a.board.canvasHeight;var q=100*a.board.canvasWidth;var d=Math.min(a.numberPoints,8192);for(var e=0;e<d;e++){var o=a.points[e].scrCoords;if(a.curveType!="plot"&&Math.abs(k-o[1])+Math.abs(f-o[2])<4){continue}if(isNaN(o[1])||isNaN(o[2])||Math.abs(o[1])>q||(a.curveType=="functiongraph"&&(o[2]>g||o[2]<-0.5*g))){b=" m "}else{j.push([b,o[1],", ",o[2]].join(""));b=" l "}k=o[1];f=o[2]}j.push(" e");return j};JXG.VMLRenderer.prototype.updatePolygonePrimitive=function(f,d){f.setAttribute("stroked","false");var g=d.vertices[0].coords.scrCoords[1];var b=d.vertices[0].coords.scrCoords[1];var e=d.vertices[0].coords.scrCoords[2];var a=d.vertices[0].coords.scrCoords[2];for(var h=1;h<d.vertices.length-1;h++){var q=d.vertices[h].coords.scrCoords;if(q[1]<g){g=q[1]}if(q[1]>b){b=q[1]}if(q[2]<e){e=q[2]}if(q[2]>a){a=q[2]}}var o=Math.round(b-g);var k=Math.round(a-e);f.style.width=o;f.style.height=k;f.setAttribute("coordsize",o+","+k);var j=[];j.push("m ");var q=d.vertices[0].coords.scrCoords;j.push(q[1]+","+q[2]);j.push(" l ");for(var h=1;h<d.vertices.length-1;h++){var q=d.vertices[h].coords.scrCoords;j.push(q[1]+","+q[2]);if(h<d.vertices.length-2){j.push(", ")}}j.push(" x e");f.setAttribute("path",j.join(""))};JXG.VMLRenderer.prototype.appendChildPrimitive=function(a,b){switch(b){case"images":a.style.zIndex="1";break;case"grid":a.style.zIndex="1";break;case"angles":a.style.zIndex="2";break;case"sectors":a.style.zIndex="2";break;case"polygone":a.style.zIndex="2";break;case"curves":a.style.zIndex="4";break;case"circles":a.style.zIndex="4";break;case"lines":a.style.zIndex="4";break;case"arcs":a.style.zIndex="4";break;case"points":a.style.zIndex="5";break}this.container.appendChild(a)};JXG.VMLRenderer.prototype.setPropertyPrimitive=function(f,e,g){var d="";switch(e){case"stroke":d="strokecolor";break;case"stroke-width":d="strokeweight";break;case"stroke-dasharray":d="dashstyle";break}if(e=="stroke-dasharray"){var a=this.container.ownerDocument.createElement("v:stroke");a.setAttribute("id",f.id+"stroke");a.setAttribute("dashstyle","Dash");f.appendChild(a)}else{if(d!=""){var b;if(typeof g=="function"){b=g()}else{b=g}f.setAttribute(d,b)}}};JXG.VMLRenderer.prototype.drawVerticalGrid=function(e,b,g,d){var f=this.createPrimitive("path","gridx");var a=[];while(e.scrCoords[1]<b.scrCoords[1]+g-1){a.push(" m "+e.scrCoords[1]+", "+0+" l "+e.scrCoords[1]+", "+d.canvasHeight+" ");e.setCoordinates(JXG.COORDS_BY_SCREEN,[e.scrCoords[1]+g,e.scrCoords[2]])}this.updatePathPrimitive(f,a,d);return f};JXG.VMLRenderer.prototype.drawHorizontalGrid=function(e,b,g,d){var f=this.createPrimitive("path","gridy");var a=[];while(e.scrCoords[2]<=b.scrCoords[2]+g-1){a.push(" m "+0+", "+e.scrCoords[2]+" l "+d.canvasWidth+", "+e.scrCoords[2]+" ");e.setCoordinates(JXG.COORDS_BY_SCREEN,[e.scrCoords[1],e.scrCoords[2]+g])}this.updatePathPrimitive(f,a,d);return f};