/*
    Copyright 2008, 
        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.AbstractRenderer=function(){this.vOffsetText=8;this.enhancedRendering=true};JXG.AbstractRenderer.prototype.drawPoint=function(c){var d;var a;var b=this.getPointSize(c.visProp.style);if(c.visProp.style==0||c.visProp.style==1||c.visProp.style==2){d=this.createPrimitive("line",c.id+"_x1");this.setStrokeProp(d,c.visProp);a=this.createPrimitive("line",c.id+"_x2");this.setStrokeProp(a,c.visProp);this.appendChildPrimitive(d,"points");this.appendChildPrimitive(a,"points");c.rendNodeX1=d;c.rendNodeX2=a}else{if(c.visProp.style==3||c.visProp.style==4||c.visProp.style==5||c.visProp.style==6){d=this.createPrimitive("circle",c.id);this.setStrokeProp(d,c.visProp);this.setFillProp(d,c.visProp);this.appendChildPrimitive(d,"points");c.rendNode=d}else{if(c.visProp.style==7||c.visProp.style==8||c.visProp.style==9){d=this.createPrimitive("rect",c.id);this.setStrokeProp(d,c.visProp);this.setFillProp(d,c.visProp);this.appendChildPrimitive(d,"points");c.rendNode=d}else{if(c.visProp.style==10||c.visProp.style==11||c.visProp.style==12){d=this.createPrimitive("line",c.id+"_x1");this.setStrokeProp(d,c.visProp);a=this.createPrimitive("line",c.id+"_x2");this.setStrokeProp(a,c.visProp);this.appendChildPrimitive(d,"points");this.appendChildPrimitive(a,"points");c.rendNodeX1=d;c.rendNodeX2=a}}}}this.setDraft(c);this.updatePoint(c)};JXG.AbstractRenderer.prototype.updatePoint=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=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=$(a.id);if(b!=null){this.remove(b)}else{this.remove($(a.id+"_x1"));this.remove($(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 l=new JXG.Coords(JXG.COORDS_BY_USER,b.point1.coords.usrCoords,b.board);var k=new JXG.Coords(JXG.COORDS_BY_USER,b.point2.coords.usrCoords,b.board);if(b.visProp.straightFirst||b.visProp.straightLast){this.calcStraight(b,l,k)}this.updateLinePrimitive(b.rendNode,l.scrCoords[1],l.scrCoords[2],k.scrCoords[1],k.scrCoords[2]);if(b.image!=null){var a=l.scrCoords[1];var n=l.scrCoords[2];var f=k.scrCoords[1];var e=k.scrCoords[2];var j;var d=(f-a>0)?1:-1;if(Math.abs(f-a)>1e-7){j=Math.atan((e-n)/(f-a))+((d<0)?Math.PI:0)}else{j=((e-n>0)?0.5:-0.5)*Math.PI}var h=250;var g=256;var c=[[1,0,0],[h*(1-Math.cos(j))+g*Math.sin(j),Math.cos(j),-Math.sin(j)],[g*(1-Math.cos(j))-h*Math.sin(j),Math.sin(j),Math.cos(j)]];b.imageTransformMatrix=c}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.setStrokeProp(a.rendNode,a.visProp);this.setFillProp(a.rendNode,a.visProp);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.updatePathPrimitive2(a,this.updatePathStringPrimitive(a))};JXG.AbstractRenderer.prototype.calcStraightv1=function(e,l,k){var m=e.getSlope();var c=e.getRise();if(m=="INF"){var r=l.scrCoords[1];var g=l.scrCoords[2];var p=k.scrCoords[1];var f=k.scrCoords[2];if(l.scrCoords[2]<k.scrCoords[2]){if(e.visProp.straightFirst){g=0}if(e.visProp.straightLast){f=e.board.canvasHeight}}else{if(e.visProp.straightFirst){g=e.board.canvasHeight}if(e.visProp.straightLast){f=0}}l.setCoordinates(JXG.COORDS_BY_SCREEN,[r,g],this);k.setCoordinates(JXG.COORDS_BY_SCREEN,[p,f],this);return}var b=new JXG.Coords(JXG.COORDS_BY_SCREEN,[0,c],e.board);var h=new JXG.Coords(JXG.COORDS_BY_SCREEN,[e.board.canvasWidth,m*e.board.canvasWidth+c],e.board);var d=new JXG.Coords(JXG.COORDS_BY_SCREEN,[Math.round(-c/m),0],e.board);var v=new JXG.Coords(JXG.COORDS_BY_SCREEN,[Math.round((e.board.canvasHeight-c)/m),e.board.canvasHeight],e.board);if(b.scrCoords[2]<0){var u=d.distance(JXG.COORDS_BY_SCREEN,l);var a=d.distance(JXG.COORDS_BY_SCREEN,k);if((u<a)&&e.visProp.straightFirst){l.setCoordinates(JXG.COORDS_BY_SCREEN,d.scrCoords.slice(1))}else{if((u>a)&&e.visProp.straightLast){k.setCoordinates(JXG.COORDS_BY_SCREEN,d.scrCoords.slice(1))}}if(h.scrCoords[2]>e.board.canvasHeight){var q=v.distance(JXG.COORDS_BY_SCREEN,l);var o=v.distance(JXG.COORDS_BY_SCREEN,k);if((q<o)&&e.visProp.straightFirst){l.setCoordinates(JXG.COORDS_BY_SCREEN,v.scrCoords.slice(1))}else{if((q>o)&&e.visProp.straightLast){k.setCoordinates(JXG.COORDS_BY_SCREEN,v.scrCoords.slice(1))}}}else{var n=h.distance(JXG.COORDS_BY_SCREEN,l);var t=h.distance(JXG.COORDS_BY_SCREEN,k);if((n<t)&&e.visProp.straightFirst){l.setCoordinates(JXG.COORDS_BY_SCREEN,h.scrCoords.slice(1))}else{if((n>t)&&e.visProp.straightLast){k.setCoordinates(JXG.COORDS_BY_SCREEN,h.scrCoords.slice(1))}}}}else{if(b.scrCoords[2]>e.board.canvasHeight){var q=v.distance(JXG.COORDS_BY_SCREEN,l);var o=v.distance(JXG.COORDS_BY_SCREEN,k);if((q<o)&&e.visProp.straightFirst){l.setCoordinates(JXG.COORDS_BY_SCREEN,v.scrCoords.slice(1))}else{if((q>o)&&e.visProp.straightLast){k.setCoordinates(JXG.COORDS_BY_SCREEN,v.scrCoords.slice(1))}}if(h.scrCoords[2]<0){var u=d.distance(JXG.COORDS_BY_SCREEN,l);var a=d.distance(JXG.COORDS_BY_SCREEN,k);if((u<a)&&e.visProp.straightFirst){l.setCoordinates(JXG.COORDS_BY_SCREEN,d.scrCoords.slice(1))}else{if((u>a)&&e.visProp.straightLast){k.setCoordinates(JXG.COORDS_BY_SCREEN,d.scrCoords.slice(1))}}}else{var n=h.distance(JXG.COORDS_BY_SCREEN,l);var t=h.distance(JXG.COORDS_BY_SCREEN,k);if((n<t)&&e.visProp.straightFirst){l.setCoordinates(JXG.COORDS_BY_SCREEN,h.scrCoords.slice(1))}else{if((n>t)&&e.visProp.straightLast){k.setCoordinates(JXG.COORDS_BY_SCREEN,h.scrCoords.slice(1))}}}}else{var j=b.distance(JXG.COORDS_BY_SCREEN,l);var s=b.distance(JXG.COORDS_BY_SCREEN,k);if((j<s)&&e.visProp.straightFirst){l.setCoordinates(JXG.COORDS_BY_SCREEN,b.scrCoords.slice(1))}else{if((j>s)&&e.visProp.straightLast){k.setCoordinates(JXG.COORDS_BY_SCREEN,b.scrCoords.slice(1))}}if(h.scrCoords[2]<0){var u=d.distance(JXG.COORDS_BY_SCREEN,l);var a=d.distance(JXG.COORDS_BY_SCREEN,k);if((u<a)&&e.visProp.straightFirst){l.setCoordinates(JXG.COORDS_BY_SCREEN,d.scrCoords.slice(1))}else{if((u>a)&&e.visProp.straightLast){k.setCoordinates(JXG.COORDS_BY_SCREEN,d.scrCoords.slice(1))}}}else{if(h.scrCoords[2]>e.board.canvasHeight){var q=v.distance(JXG.COORDS_BY_SCREEN,l);var o=v.distance(JXG.COORDS_BY_SCREEN,k);if((q<o)&&e.visProp.straightFirst){l.setCoordinates(JXG.COORDS_BY_SCREEN,v.scrCoords.slice(1))}else{if((q>o)&&e.visProp.straightLast){k.setCoordinates(JXG.COORDS_BY_SCREEN,v.scrCoords.slice(1))}}}else{var n=h.distance(JXG.COORDS_BY_SCREEN,l);var t=h.distance(JXG.COORDS_BY_SCREEN,k);if((n<t)&&e.visProp.straightFirst){l.setCoordinates(JXG.COORDS_BY_SCREEN,h.scrCoords.slice(1))}else{if((n>t)&&e.visProp.straightLast){k.setCoordinates(JXG.COORDS_BY_SCREEN,h.scrCoords.slice(1))}}}}}}};JXG.AbstractRenderer.prototype.calcStraight=function(e,l,k){var m=e.board.algebra;var o=0.0001;var h=[];h[0]=e.stdform[0]-e.stdform[1]*e.board.origin.scrCoords[1]/(e.board.unitX*e.board.zoomX)+e.stdform[2]*e.board.origin.scrCoords[2]/(e.board.unitY*e.board.zoomY);h[1]=e.stdform[1]/(e.board.unitX*e.board.zoomX);h[2]=e.stdform[2]/(-e.board.unitY*e.board.zoomY);var n=[];n[0]=m.crossProduct(h,[0,0,1]);n[1]=m.crossProduct(h,[0,1,0]);n[2]=m.crossProduct(h,[-e.board.canvasHeight,0,1]);n[3]=m.crossProduct(h,[-e.board.canvasWidth,1,0]);for(var g=0;g<4;g++){if(Math.abs(n[g][0])>o){for(var f=2;f>=0;f--){n[g][f]/=n[g][0]}}}var d,a;if(n[1][2]<0||Math.abs(n[1][0])<o){d=m.affineDistance(n[0],l.scrCoords);a=m.affineDistance(n[0],k.scrCoords);if((d<a)&&e.visProp.straightFirst){l.setCoordinates(JXG.COORDS_BY_SCREEN,n[0].slice(1))}else{if((d>a)&&e.visProp.straightLast){k.setCoordinates(JXG.COORDS_BY_SCREEN,n[0].slice(1))}}if(n[3][2]>e.board.canvasHeight||Math.abs(n[3][0])<o){d=m.affineDistance(n[2],l.scrCoords);a=m.affineDistance(n[2],k.scrCoords);if((d<a)&&e.visProp.straightFirst){l.setCoordinates(JXG.COORDS_BY_SCREEN,n[2].slice(1))}else{if((d>a)&&e.visProp.straightLast){k.setCoordinates(JXG.COORDS_BY_SCREEN,n[2].slice(1))}}}else{d=m.affineDistance(n[3],l.scrCoords);a=m.affineDistance(n[3],k.scrCoords);if((d<a)&&e.visProp.straightFirst){l.setCoordinates(JXG.COORDS_BY_SCREEN,n[3].slice(1))}else{if((d>a)&&e.visProp.straightLast){k.setCoordinates(JXG.COORDS_BY_SCREEN,n[3].slice(1))}}}}else{if(n[1][2]>e.board.canvasHeight){d=m.affineDistance(n[2],l.scrCoords);a=m.affineDistance(n[2],k.scrCoords);if((d<a)&&e.visProp.straightFirst){l.setCoordinates(JXG.COORDS_BY_SCREEN,n[2].slice(1))}else{if((d>a)&&e.visProp.straightLast){k.setCoordinates(JXG.COORDS_BY_SCREEN,n[2].slice(1))}}if(n[3][2]<0||Math.abs(n[3][0])<o){d=m.affineDistance(n[0],l.scrCoords);a=m.affineDistance(n[0],k.scrCoords);if((d<a)&&e.visProp.straightFirst){l.setCoordinates(JXG.COORDS_BY_SCREEN,n[0].slice(1))}else{if((d>a)&&e.visProp.straightLast){k.setCoordinates(JXG.COORDS_BY_SCREEN,n[0].slice(1))}}}else{d=m.affineDistance(n[3],l.scrCoords);a=m.affineDistance(n[3],k.scrCoords);if((d<a)&&e.visProp.straightFirst){l.setCoordinates(JXG.COORDS_BY_SCREEN,n[3].slice(1))}else{if((d>a)&&e.visProp.straightLast){k.setCoordinates(JXG.COORDS_BY_SCREEN,n[3].slice(1))}}}}else{d=m.affineDistance(n[1],l.scrCoords);a=m.affineDistance(n[1],k.scrCoords);if((d<a)&&e.visProp.straightFirst){l.setCoordinates(JXG.COORDS_BY_SCREEN,n[1].slice(1))}else{if((d>a)&&e.visProp.straightLast){k.setCoordinates(JXG.COORDS_BY_SCREEN,n[1].slice(1))}}if(n[3][2]<0||Math.abs(n[3][0])<o){d=m.affineDistance(n[0],l.scrCoords);a=m.affineDistance(n[0],k.scrCoords);if((d<a)&&e.visProp.straightFirst){l.setCoordinates(JXG.COORDS_BY_SCREEN,n[0].slice(1))}else{if((d>a)&&e.visProp.straightLast){k.setCoordinates(JXG.COORDS_BY_SCREEN,n[0].slice(1))}}}else{if(n[3][2]>e.board.canvasHeight||Math.abs(n[3][0])<o){d=m.affineDistance(n[2],l.scrCoords);a=m.affineDistance(n[2],k.scrCoords);if((d<a)&&e.visProp.straightFirst){l.setCoordinates(JXG.COORDS_BY_SCREEN,n[2].slice(1))}else{if((d>a)&&e.visProp.straightLast){k.setCoordinates(JXG.COORDS_BY_SCREEN,n[2].slice(1))}}}else{d=m.affineDistance(n[3],l.scrCoords);a=m.affineDistance(n[3],k.scrCoords);if((d<a)&&e.visProp.straightFirst){l.setCoordinates(JXG.COORDS_BY_SCREEN,n[3].slice(1))}else{if((d>a)&&e.visProp.straightLast){k.setCoordinates(JXG.COORDS_BY_SCREEN,n[3].slice(1))}}}}}}};JXG.AbstractRenderer.prototype.drawCircle=function(a){var b=this.createPrimitive("ellipse",a.id);this.setStrokeProp(b,a.visProp);this.setFillProp(b,a.visProp);this.setDashStyle(b,a.visProp);this.appendChildPrimitive(b,"circles");a.rendNode=b;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();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.setFillProp(b,a.visProp);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.setStrokeProp(b,a.visProp);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.drawAxis=function(a){};JXG.AbstractRenderer.prototype.updateAxis=function(a){};JXG.AbstractRenderer.prototype.updateAxisTicks=function(d,a){var c;if(a==d.ticks.length){return}else{if(a<d.ticks.length){for(c=a;c<d.ticks.length;c++){var b=this.createPrimitive("line",d.id+"tick"+c);this.appendChildPrimitive(b,"lines");this.setStrokeProp(b,d.visProp)}this.updateAxisTicksInnerLoop(d,a)}else{if(a>d.ticks.length){for(c=d.ticks.length;c<a;c++){this.remove($(d.id+"tick"+c))}}}}};JXG.AbstractRenderer.prototype.updateAxisTicksInnerLoop=function(b,a){var m=0.00001;var g=-b.getSlope();var j=3*b.r/2;var l,k;if(Math.abs(g)<m){l=0;k=j}else{if((Math.abs(g)>1/m)||(isNaN(g))){l=j;k=0}else{l=j/Math.sqrt(1/(g*g)+1);k=-l/g}}for(var e=a;e<b.ticks.length;e++){var h=b.ticks[e];var f=$(b.id+"tick"+e);var d=$(b.id+"tick"+e+"text");this.updateLinePrimitive(f,h.scrCoords[1]+l,h.scrCoords[2]-k,h.scrCoords[1]-l,h.scrCoords[2]+k);this.setStrokeProp(f,b.visProp)}};JXG.AbstractRenderer.prototype.removeAxisTicks=function(c){for(var b=0;b<c.ticks.length;b++){var a=$(c.id+"tick"+b);this.remove(a)}};JXG.AbstractRenderer.prototype.drawArc=function(a){};JXG.AbstractRenderer.prototype.updateArc=function(a){this.remove(a.rendNode);this.remove(a.rendNodeFill);var 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.AbstractRenderer.prototype.drawLabel=function(a){var b=this.container.ownerDocument.createElement("div");b.style.position="absolute";b.style.fontSize=a.board.fontSize+"px";b.style.color=a.color;b.className="JXGText";b.style.zIndex="10";b.setAttribute("id",a.id);b.innerHTML=a.nameHTML;this.container.appendChild(b);a.rendNode=b;this.updateLabel(a)};JXG.AbstractRenderer.prototype.updateLabel=function(a){a.rendNode.style.left=(a.coords.scrCoords[1])+"px";a.rendNode.style.top=(a.coords.scrCoords[2]-this.vOffsetText)+"px"};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;this.updateText(a)};JXG.AbstractRenderer.prototype.updateText=function(a){this.updateTextStyle(a);a.rendNode.style.left=(a.coords.scrCoords[1])+"px";a.rendNode.style.top=(a.coords.scrCoords[2]-this.vOffsetText)+"px";a.rendNode.innerHTML=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(p){p.hasGrid=true;var m=p.gridX;var h=p.gridY;var b;var d=new JXG.Coords(JXG.COORDS_BY_SCREEN,[0,0],p);var o=new JXG.Coords(JXG.COORDS_BY_SCREEN,[p.canvasWidth,p.canvasHeight],p);var g=Math.ceil(d.usrCoords[1]);var e=0;for(var f=0;f<=m+1;f++){if(g-f/m<d.usrCoords[1]){e=f-1;break}}g=Math.floor(o.usrCoords[1]);var u=0;for(var f=0;f<=m+1;f++){if(g+f/m>o.usrCoords[1]){u=f-1;break}}g=Math.ceil(o.usrCoords[2]);var a=0;for(var f=0;f<=h+1;f++){if(g-f/h<o.usrCoords[2]){a=f-1;break}}g=Math.floor(d.usrCoords[2]);var c=0;for(var f=0;f<=h+1;f++){if(g+f/h>d.usrCoords[2]){c=f-1;break}}var t=Math.round((1/m)*p.zoomX*p.unitX);var s=Math.round((1/h)*p.zoomY*p.unitY);var q=new JXG.Coords(JXG.COORDS_BY_USER,[Math.ceil(d.usrCoords[1])-e/m,Math.floor(d.usrCoords[2])+c/h],p);var n=new JXG.Coords(JXG.COORDS_BY_USER,[Math.floor(o.usrCoords[1])+u/m,Math.ceil(o.usrCoords[2])-a/h],p);var f=0;while(q.scrCoords[1]<n.scrCoords[1]+t-1){var r=this.createPrimitive("line","gridx"+f);this.updateLinePrimitive(r,q.scrCoords[1],0,q.scrCoords[1],p.canvasHeight);if(!p.snapToGrid){this.setPropertyPrimitive(r,"stroke",p.gridColor)}else{this.setPropertyPrimitive(r,"stroke","#FF8080")}this.setPropertyPrimitive(r,"stroke-width","0.4px");if(p.gridDash){this.setPropertyPrimitive(r,"stroke-dasharray","5, 5")}this.appendChildPrimitive(r,"grid");f++;q.setCoordinates(JXG.COORDS_BY_SCREEN,[q.scrCoords[1]+t,q.scrCoords[2]])}f=0;while(q.scrCoords[2]<=n.scrCoords[2]+s-1){var r=this.createPrimitive("line","gridy"+f);this.updateLinePrimitive(r,0,q.scrCoords[2],p.canvasWidth,q.scrCoords[2]);if(!p.snapToGrid){this.setPropertyPrimitive(r,"stroke",p.gridColor)}else{this.setPropertyPrimitive(r,"stroke","#FF8080")}this.setPropertyPrimitive(r,"stroke-width","0.4px");if(p.gridDash){this.setPropertyPrimitive(r,"stroke-dasharray","5, 5")}this.appendChildPrimitive(r,"grid");f++;q.setCoordinates(JXG.COORDS_BY_SCREEN,[q.scrCoords[1],q.scrCoords[2]+s])}};JXG.AbstractRenderer.prototype.removeGrid=function(a){};JXG.AbstractRenderer.prototype.hide=function(a){};JXG.AbstractRenderer.prototype.show=function(a){};JXG.AbstractRenderer.prototype.setObjectStrokeWidth=function(c,b){var a;if(typeof b=="function"){a=b()}else{a=b}if(c.elementClass!=JXG.OBJECT_CLASS_POINT){var d;if(c.type==JXG.OBJECT_TYPE_ANGLE){d=c.rendNode2}else{d=c.rendNode}this.setPropertyPrimitive(d,"stroked","true");if(a!=null){this.setPropertyPrimitive(d,"stroke-width",a)}}else{if(c.visProp.style>=3&&c.visProp.style<=9){var d=c.rendNode;this.setPropertyPrimitive(d,"stroked","true");if(a!=null){this.setPropertyPrimitive(d,"stroke-width",a)}}else{var d=c.rendNodeX1;this.setPropertyPrimitive(d,"stroked","true");if(a!=null){this.setPropertyPrimitive(d,"stroke-width",a)}var d=c.rendNodeX2;this.setPropertyPrimitive(d,"stroked","true");if(a!=null){this.setPropertyPrimitive(d,"stroke-width",a)}}}};JXG.AbstractRenderer.prototype.setObjectStrokeColor=function(c,a,b){};JXG.AbstractRenderer.prototype.setObjectDash=function(a){};JXG.AbstractRenderer.prototype.setObjectFillColor=function(c,a,b){};JXG.AbstractRenderer.prototype.setDraft=function(b){if(!b.visProp.draft){return}var a=b.board.options.elements.draft.color;var c=b.board.options.elements.draft.opacity;if(b.type==JXG.OBJECTT_TYPE_POLYGON){this.setObjectFillColor(b,a,c)}else{if(b.elementClass==JXG.OBJECT_CLASS_POINT){this.setObjectFillColor(b,a,c)}else{this.setObjectFillColor(b,"none",0)}this.setObjectStrokeColor(b,a,c);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){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(var 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(a){if(a.visProp.draft==false){if(a.type==JXG.OBJECT_CLASS_POINT){this.setObjectStrokeColor(a,a.visProp.strokeColor,a.visProp.strokeOpacity);this.setObjectFillColor(a,a.visProp.strokeColor,a.visProp.strokeOpacity)}else{if(a.type==JXG.OBJECT_TYPE_POLYGON){this.setObjectFillColor(a,a.visProp.fillColor,a.visProp.fillOpacity);for(i=0;i<a.borders.length;i++){this.setObjectStrokeColor(a.borders[i],a.borders[i].visProp.strokeColor,a.visProp.strokeOpacity)}}else{this.setObjectStrokeColor(a,a.visProp.strokeColor,a.visProp.strokeOpacity);this.setObjectFillColor(a,a.visProp.fillColor,a.visProp.fillOpacity)}}}};JXG.AbstractRenderer.prototype.setLabelColor=function(a){a.rendNode.style.color=a.color};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.FileReader=new function(){this.parseFileContent=function(a,b,d){this.request=false;var c;try{this.request=new XMLHttpRequest();this.request.overrideMimeType("text/xml; charset=iso-8859-1")}catch(c){try{this.request=new ActiveXObject("Msxml2.XMLHTTP")}catch(c){try{this.request=new ActiveXObject("Microsoft.XMLHTTP")}catch(c){this.request=false}}}if(!this.request){alert("AJAX not activated!");return}this.request.open("GET",a,true);this.cb=(function(){var e=this.request;if(e.readyState==4){this.parseString(e.responseText,b,d)}}).bind(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 c=new DOMParser();var a=c.parseFromString(b,"text/xml");this.cleanWhitespace(a);return a};this.parseString=function(c,b,d){if(d.toLowerCase()=="geonext"){c=JXG.GeonextReader.prepareString(c)}b.xmlString=c;var a=this.stringToXMLTree(c);this.readElements(a,b,d)};this.readElements=function(a,b,c){if(c.toLowerCase()=="geonext"){if(a.getElementsByTagName("GEONEXT").length!=0){JXG.GeonextReader.readGeonext(a,b)}}else{if(a.getElementsByTagName("geogebra").length!=0){}else{if(c.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(c,b){var a=b.childNodes;$R(0,a.length-1).each(function(e){if(a[e].firstChild!=null&&a[e].nodeName!="data"&&a[e].nodeName!="straight"){var d=a[e].nodeName;c[d]=a[e].firstChild.data}});return c};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(f,d,b,e){var c;var a=d.getElementsByTagName(b)[0].childNodes;$R(0,a.length-1).each(function(g){if(a[g].firstChild!=null){if(e!=null){c=e+a[g].nodeName.capitalize()}else{c=a[g].nodeName}f[c]=a[g].firstChild.data}});return f};this.subtreeToString=function(a){try{return(new XMLSerializer()).serializeToString(a)}catch(b){return a.xml}return null};this.readImage=function(c){var b="";var a=c;if(a!=null){b=a.data;while(a.nextSibling!=null){a=a.nextSibling;b+=a.data}}return b};this.parseImage=function(j,g,a,m,l,n,f,d){if(g==null){return null}if(g.getElementsByTagName("src")[0]!=null){var q="src"}else{if(g.getElementsByTagName("image")[0]!=null){var q="image"}else{return null}}var c=this.readImage(g.getElementsByTagName(q)[0].firstChild);if(c!=""){if(q=="src"){var m=g.getElementsByTagName("x")[0].firstChild.data;var l=g.getElementsByTagName("y")[0].firstChild.data;var n=g.getElementsByTagName("width")[0].firstChild.data;var f=g.getElementsByTagName("height")[0].firstChild.data}else{var e=document.createElement("img");e.setAttribute("id","tmpimg");e.style.display="none";document.getElementsByTagName("body")[0].appendChild(e);e.setAttribute("src","data:image/png;base64,"+c);var p=e.width;var o=e.height;p=(p==0)?3:p;o=(o==0)?3:o;l-=o*n/p*0.5;f=o*n/p;document.getElementsByTagName("body")[0].removeChild(e)}if(d!=null){var b=d.id+"_image"}else{var b=false}var k=new JXG.Image(j,c,[m,l],[n,f],a,b,false,d);return k}};this.readConditions=function(f,d){d.conditions="";if(f!=null){for(var b=0;b<f.getElementsByTagName("data").length;b++){var c;var g;var a=f.getElementsByTagName("data")[b];c=JXG.GeonextReader.subtreeToString(a);d.conditions+=c}}};this.printDebugMessage=function(a,d,c,b){};this.readGeonext=function(o,j){var l={};boardData=o.getElementsByTagName("board")[0];l.ident="board";l.id=boardData.getElementsByTagName("id")[0].firstChild.data;l.width=boardData.getElementsByTagName("width")[0].firstChild.data;l.height=boardData.getElementsByTagName("height")[0].firstChild.data;l.fontSize=(boardData.getElementsByTagName("fontsize")[0]!=null)?document.body.style.fontSize=boardData.getElementsByTagName("fontsize")[0].firstChild.data:document.body.style.fontSize;l.modus=boardData.getElementsByTagName("modus")[0].firstChild.data;l.originX=boardData.getElementsByTagName("coordinates")[0].getElementsByTagName("origin")[0].getElementsByTagName("x")[0].firstChild.data;l.originY=boardData.getElementsByTagName("coordinates")[0].getElementsByTagName("origin")[0].getElementsByTagName("y")[0].firstChild.data;l.zoomX=boardData.getElementsByTagName("coordinates")[0].getElementsByTagName("zoom")[0].getElementsByTagName("x")[0].firstChild.data;l.zoomY=boardData.getElementsByTagName("coordinates")[0].getElementsByTagName("zoom")[0].getElementsByTagName("y")[0].firstChild.data;l.unitX=boardData.getElementsByTagName("coordinates")[0].getElementsByTagName("unit")[0].getElementsByTagName("x")[0].firstChild.data;l.unitY=boardData.getElementsByTagName("coordinates")[0].getElementsByTagName("unit")[0].getElementsByTagName("y")[0].firstChild.data;l.viewportTop=boardData.getElementsByTagName("coordinates")[0].getElementsByTagName("viewport")[0].getElementsByTagName("top")[0].firstChild.data;l.viewportLeft=boardData.getElementsByTagName("coordinates")[0].getElementsByTagName("viewport")[0].getElementsByTagName("left")[0].firstChild.data;l.viewportBottom=boardData.getElementsByTagName("coordinates")[0].getElementsByTagName("viewport")[0].getElementsByTagName("bottom")[0].firstChild.data;l.viewportRight=boardData.getElementsByTagName("coordinates")[0].getElementsByTagName("viewport")[0].getElementsByTagName("right")[0].firstChild.data;this.readConditions(boardData.getElementsByTagName("conditions")[0],l);j.origin={};j.origin.usrCoords=[1,0,0];j.origin.scrCoords=[1,1*l.originX,1*l.originY];j.zoomX=1*l.zoomX;j.zoomY=1*l.zoomY;j.unitX=1*l.unitX;j.unitY=1*l.unitY;j.fontSize=1*l.fontSize;j.geonextCompatibilityMode=true;delete (JXG.JSXGraph.boards[j.id]);j.id=l.id;JXG.JSXGraph.boards[j.id]=j;j.initGeonextBoard();j.renderer.enhancedRendering=false;JXG.GeonextReader.parseImage(j,boardData.getElementsByTagName("file")[0],"images");var d=(boardData.getElementsByTagName("coordinates")[0].getElementsByTagName("snap")[0].firstChild.data=="true")?j.snapToGrid=true:null;var f=(boardData.getElementsByTagName("grid")[1].getElementsByTagName("x")[0].firstChild.data)?j.gridX=boardData.getElementsByTagName("grid")[1].getElementsByTagName("x")[0].firstChild.data*1:null;var e=(boardData.getElementsByTagName("grid")[1].getElementsByTagName("y")[0].firstChild.data)?j.gridY=boardData.getElementsByTagName("grid")[1].getElementsByTagName("y")[0].firstChild.data*1:null;j.calculateSnapSizes();var k=boardData.getElementsByTagName("grid")[1].getElementsByTagName("dash")[0].firstChild.data;j.gridDash=j.algebra.str2Bool(k);var m=boardData.getElementsByTagName("grid")[1].getElementsByTagName("color")[0].firstChild.data;var h;if(m.length=="9"&&m.substr(0,1)=="#"){h=m.substr(7,2);m=m.substr(0,7)}else{h="FF"}j.gridColor=m;j.gridOpacity=h;var a=(boardData.getElementsByTagName("coordinates")[0].getElementsByTagName("grid")[0].firstChild.data=="true")?j.renderer.drawGrid(j):null;if(boardData.getElementsByTagName("coordinates")[0].getElementsByTagName("coord")[0].firstChild.data=="true"){var c=j.createElement("axis",[[0,0],[1,0]]);c.setProperty("strokeColor:"+c.visProp.strokeColor,"strokeWidth:"+c.visProp.strokeWidth,"fillColor:none","highlightStrokeColor:"+c.visProp.highlightStrokeColor,"highlightFillColor:none","visible:true");var b=j.createElement("axis",[[0,0],[0,1]]);b.setProperty("strokeColor:"+b.visProp.strokeColor,"strokeWidth:"+b.visProp.strokeWidth,"fillColor:none","highlightStrokeColor:"+b.visProp.highlightStrokeColor,"highlightFillColor:none","visible:true")}var n=boardData.getElementsByTagName("background")[0].getElementsByTagName("color")[0].firstChild.data;var g=1;if(n.length=="9"&&n.substr(0,1)=="#"){g=n.substr(7,2);n=n.substr(0,7)}$(j.container).style.backgroundColor=n;$R(0,o.getElementsByTagName("elements")[0].childNodes.length-1).each(function(P){var Q=o.getElementsByTagName("elements")[0].childNodes[P];var af={};af=JXG.GeonextReader.defProperties(af,Q);if(af==null){return}switch(Q.nodeName.toLowerCase()){case"point":af=JXG.GeonextReader.boardProperties(af,Q);af=JXG.GeonextReader.colorProperties(af,Q);af=JXG.GeonextReader.visualProperties(af,Q);af=JXG.GeonextReader.firstLevelProperties(af,Q);af=JXG.GeonextReader.readNodes(af,Q,"data");af.fixed=Q.getElementsByTagName("fix")[0].firstChild.data;JXG.GeonextReader.parseImage(j,Q.getElementsByTagName("image")[0],"points");try{S=new JXG.Point(j,[1*af.x,1*af.y],af.id,af.name,true);S.setProperty("strokeColor:"+af.colorStroke,"strokeWidth:"+af.strokewidth,"fillColor:"+af.colorStroke,"highlightStrokeColor:"+af.highlightStrokeColor,"highlightFillColor:"+af.highlightStrokeColor,"labelColor:"+af.colorLabel,"visible:"+af.visible,"fixed:"+af.fixed,"draft:"+af.draft);S.setStyle(1*af.style);S.traced=(af.trace=="false")?false:true;JXG.GeonextReader.printDebugMessage("debug",af,Q.nodeName,"OK")}catch(ac){}break;case"line":af=JXG.GeonextReader.boardProperties(af,Q);af=JXG.GeonextReader.colorProperties(af,Q);af=JXG.GeonextReader.visualProperties(af,Q);af=JXG.GeonextReader.firstLevelProperties(af,Q);af=JXG.GeonextReader.readNodes(af,Q,"data");af=JXG.GeonextReader.readNodes(af,Q,"straight","straight");af.first=JXG.GeonextReader.changeOriginIds(j,af.first);af.last=JXG.GeonextReader.changeOriginIds(j,af.last);var V=new JXG.Line(j,af.first,af.last,af.id,af.name);var L=V.point1.coords.usrCoords[1];var K=V.point1.coords.usrCoords[2];var M=V.point1.coords.distance(JXG.COORDS_BY_USER,V.point2.coords);var Z=0;V.image=JXG.GeonextReader.parseImage(j,Q,"lines",L,K,M,Z,V);af.straightFirst=(af.straightFirst=="false")?false:true;af.straightLast=(af.straightLast=="false")?false:true;V.setStraight(af.straightFirst,af.straightLast);V.setProperty("strokeColor:"+af.colorStroke,"strokeWidth:"+af.strokewidth,"fillColor:"+af.colorFill,"highlightStrokeColor:"+af.highlightStrokeColor,"highlightFillColor:"+af.colorFill,"visible:"+af.visible,"dash:"+af.dash,"draft:"+af.draft);V.traced=(af.trace=="false")?false:true;JXG.GeonextReader.printDebugMessage("debug",af,Q.nodeName,"OK");break;case"circle":af=JXG.GeonextReader.boardProperties(af,Q);af=JXG.GeonextReader.colorProperties(af,Q);af=JXG.GeonextReader.visualProperties(af,Q);af=JXG.GeonextReader.firstLevelProperties(af,Q);af.midpoint=Q.getElementsByTagName("data")[0].getElementsByTagName("midpoint")[0].firstChild.data;JXG.GeonextReader.parseImage(j,Q.getElementsByTagName("image")[0],"circles");if(Q.getElementsByTagName("data")[0].getElementsByTagName("radius").length>0){af.radiuspoint=Q.getElementsByTagName("data")[0].getElementsByTagName("radius")[0].firstChild.data;af.radius=null;af.method="twoPoints"}else{if(Q.getElementsByTagName("data")[0].getElementsByTagName("radiusvalue").length>0){af.radiuspoint=null;af.radius=Q.getElementsByTagName("data")[0].getElementsByTagName("radiusvalue")[0].firstChild.data;af.radiusnum=Q.getElementsByTagName("data")[0].getElementsByTagName("radiusnum")[0].firstChild.data;af.method="pointRadius"}}if(af.method=="twoPoints"){if(j.objects[af.radiuspoint].type==JXG.OBJECT_TYPE_LINE){af.method="pointLine";af.radiuspoint=JXG.GeonextReader.changeOriginIds(j,af.radiuspoint)}else{if(j.objects[af.radiuspoint].type==JXG.OBJECT_TYPE_CIRCLE){af.method="pointCircle"}}}if(af.method=="pointRadius"){af.midpoint=JXG.GeonextReader.changeOriginIds(j,af.midpoint);var ad=new JXG.Circle(j,af.method,af.midpoint,af.radius,af.id,af.name)}else{af.midpoint=JXG.GeonextReader.changeOriginIds(j,af.midpoint);var ad=new JXG.Circle(j,af.method,af.midpoint,af.radiuspoint,af.id,af.name)}ad.setProperty("strokeColor:"+af.colorStroke,"strokeWidth:"+af.strokewidth,"fillColor:"+af.colorFill,"highlightStrokeColor:"+af.highlightStrokeColor,"highlightFillColor:"+af.colorFill,"visible:"+af.visible,"dash:"+af.dash,"draft:"+af.draft);ad.traced=(af.trace=="false")?false:true;JXG.GeonextReader.printDebugMessage("debug",af,Q.nodeName,"OK");break;case"slider":af=JXG.GeonextReader.colorProperties(af,Q);af=JXG.GeonextReader.boardProperties(af,Q);af=JXG.GeonextReader.visualProperties(af,Q);af=JXG.GeonextReader.firstLevelProperties(af,Q);af=JXG.GeonextReader.readNodes(af,Q,"data");af.fixed=Q.getElementsByTagName("fix")[0].firstChild.data;af=JXG.GeonextReader.readNodes(af,Q,"animate","animate");JXG.GeonextReader.parseImage(j,Q.getElementsByTagName("image")[0],"points");try{var P=new JXG.Point(j,[1*af.x,1*af.y],af.id,af.name,true);af.parent=JXG.GeonextReader.changeOriginIds(j,af.parent);P.makeGlider(af.parent);P.setProperty("strokeColor:"+af.colorStroke,"strokeWidth:"+af.strokewidth,"fillColor:"+af.colorStroke,"highlightStrokeColor:"+af.highlightStrokeColor,"highlightFillColor:"+af.highlightStrokeColor,"visible:"+af.visible,"fixed:"+af.fixed,"labelColor:"+af.colorLabel,"draft:"+af.draft);P.onPolygon=j.algebra.str2Bool(af.onpolygon);P.traced=(af.trace=="false")?false:true;P.setStyle(1*af.style);JXG.GeonextReader.printDebugMessage("debug",af,Q.nodeName,"OK")}catch(ac){}break;case"cas":af=JXG.GeonextReader.boardProperties(af,Q);af=JXG.GeonextReader.colorProperties(af,Q);af=JXG.GeonextReader.visualProperties(af,Q);af=JXG.GeonextReader.firstLevelProperties(af,Q);af.fixed=Q.getElementsByTagName("fix")[0].firstChild.data;af=JXG.GeonextReader.readNodes(af,Q,"data");JXG.GeonextReader.parseImage(j,Q.getElementsByTagName("image")[0],"points");var S=new JXG.Point(j,[1*af.xval,1*af.yval],af.id,af.name,true);S.addConstraint(af.x,af.y);S.setProperty("strokeColor:"+af.colorStroke,"strokeWidth:"+af.strokewidth,"fillColor:"+af.colorStroke,"highlightStrokeColor:"+af.highlightStrokeColor,"highlightFillColor:"+af.highlightStrokeColor,"visible:"+af.visible,"fixed:"+af.fixed,"labelColor:"+af.colorLabel,"draft:"+af.draft);S.traced=(af.trace=="false")?false:true;S.setStyle(1*af.style);JXG.GeonextReader.printDebugMessage("debug",af,Q.nodeName,"OK");break;case"intersection":af=JXG.GeonextReader.readNodes(af,Q,"data");af.outputFirstId=Q.getElementsByTagName("first")[1].getElementsByTagName("id")[0].firstChild.data;af.outputFirstName=Q.getElementsByTagName("first")[1].getElementsByTagName("name")[0].firstChild.data;af.outputFirstVisible=Q.getElementsByTagName("first")[1].getElementsByTagName("visible")[0].firstChild.data;af.outputFirstTrace=Q.getElementsByTagName("first")[1].getElementsByTagName("trace")[0].firstChild.data;af.outputFirstFixed=Q.getElementsByTagName("first")[1].getElementsByTagName("fix")[0].firstChild.data;af.outputFirstStyle=Q.getElementsByTagName("first")[1].getElementsByTagName("style")[0].firstChild.data;af.outputFirstStrokewidth=Q.getElementsByTagName("first")[1].getElementsByTagName("strokewidth")[0].firstChild.data;af.outputFirstColorStroke=Q.getElementsByTagName("first")[1].getElementsByTagName("color")[0].getElementsByTagName("stroke")[0].firstChild.data;af.outputFirstHighlightStrokeColor=Q.getElementsByTagName("first")[1].getElementsByTagName("color")[0].getElementsByTagName("lighting")[0].firstChild.data;af.outputFirstColorFill=Q.getElementsByTagName("first")[1].getElementsByTagName("color")[0].getElementsByTagName("fill")[0].firstChild.data;af.outputFirstColorLabel=Q.getElementsByTagName("first")[1].getElementsByTagName("color")[0].getElementsByTagName("label")[0].firstChild.data;af.outputFirstColorDraft=Q.getElementsByTagName("first")[1].getElementsByTagName("color")[0].getElementsByTagName("draft")[0].firstChild.data;af.first=JXG.GeonextReader.changeOriginIds(j,af.first);af.last=JXG.GeonextReader.changeOriginIds(j,af.last);if((((j.objects[af.first]).type==(j.objects[af.last]).type)&&((j.objects[af.first]).type==JXG.OBJECT_TYPE_LINE||(j.objects[af.first]).type==JXG.OBJECT_TYPE_ARROW))||(((j.objects[af.first]).type==JXG.OBJECT_TYPE_LINE)&&((j.objects[af.last]).type==JXG.OBJECT_TYPE_ARROW))||(((j.objects[af.last]).type==JXG.OBJECT_TYPE_LINE)&&((j.objects[af.first]).type==JXG.OBJECT_TYPE_ARROW))){var U=new JXG.Intersection(j,af.id,j.objects[af.first],j.objects[af.last],af.outputFirstId,"",af.outputFirstName,"");if(af.outputFirstVisible=="false"){U.hideElement()}U.p.setProperty("strokeColor:"+af.outputFirstColorStroke,"strokeWidth:"+af.outputFirstStrokewidth,"fillColor:"+af.outputFirstColorStroke,"highlightStrokeColor:"+af.outputFirstHighlightStrokeColor,"highlightFillColor:"+af.outputFirstHighlightStrokeColor,"visible:"+af.outputFirstVisible,"labelColor:"+af.outputFirstColorLabel,"draft:"+af.draft);U.p.setStyle(1*af.outputFirstStyle);U.p.traced=(af.outputFirstTrace=="false")?false:true}else{af.outputLastId=Q.getElementsByTagName("last")[1].getElementsByTagName("id")[0].firstChild.data;af.outputLastName=Q.getElementsByTagName("last")[1].getElementsByTagName("name")[0].firstChild.data;af.outputLastVisible=Q.getElementsByTagName("last")[1].getElementsByTagName("visible")[0].firstChild.data;af.outputLastTrace=Q.getElementsByTagName("last")[1].getElementsByTagName("trace")[0].firstChild.data;af.outputLastFixed=Q.getElementsByTagName("last")[1].getElementsByTagName("fix")[0].firstChild.data;af.outputLastStyle=Q.getElementsByTagName("last")[1].getElementsByTagName("style")[0].firstChild.data;af.outputLastStrokewidth=Q.getElementsByTagName("last")[1].getElementsByTagName("strokewidth")[0].firstChild.data;var R=Q.getElementsByTagName("last")[1].getElementsByTagName("color")[0];af.outputLastColorStroke=R.getElementsByTagName("stroke")[0].firstChild.data;af.outputLastHighlightStrokeColor=R.getElementsByTagName("lighting")[0].firstChild.data;af.outputLastColorFill=R.getElementsByTagName("fill")[0].firstChild.data;af.outputLastColorLabel=R.getElementsByTagName("label")[0].firstChild.data;af.outputLastColorDraft=R.getElementsByTagName("draft")[0].firstChild.data;var U=new JXG.Intersection(j,af.id,j.objects[af.first],j.objects[af.last],af.outputFirstId,af.outputLastId,af.outputFirstName,af.outputLastName);U.p1.setProperty("strokeColor:"+af.outputFirstColorStroke,"strokeWidth:"+af.outputFirstStrokewidth,"fillColor:"+af.outputFirstColorStroke,"highlightStrokeColor:"+af.outputFirstHighlightStrokeColor,"highlightFillColor:"+af.outputFirstHighlightStrokeColor,"visible:"+af.outputFirstVisible,"labelColor:"+af.outputFirstColorLabel,"draft:"+af.draft);U.p1.setStyle(1*af.outputFirstStyle);U.p1.traced=(af.outputFirstTrace=="false")?false:true;U.p2.setProperty("strokeColor:"+af.outputLastColorStroke,"strokeWidth:"+af.outputLastStrokewidth,"fillColor:"+af.outputLastColorStroke,"highlightStrokeColor:"+af.outputLastHighlightStrokeColor,"highlightFillColor:"+af.outputLastHighlightStrokeColor,"visible:"+af.outputLastVisible,"labelColor:"+af.outputLastColorLabel,"draft:"+af.draft);U.p2.setStyle(1*af.outputLastStyle);U.p2.traced=(af.outputLastTrace=="false")?false:true;if(af.outputFirstVisible=="false"){if(af.outputLastVisible=="false"){U.hideElement()}else{U.p1.hideElement()}}else{if(af.outputLastVisible=="false"){U.p2.hideElement()}}}JXG.GeonextReader.printDebugMessage("debug",af,Q.nodeName,"OK");break;case"composition":af=JXG.GeonextReader.readNodes(af,Q,"data");af=JXG.GeonextReader.firstLevelProperties(af,Q);switch(af.type){case"210070":af.typeName="ARROW_PARALLEL";break;case"210080":af.typeName="BISECTOR";break;case"210090":af.typeName="CIRCUMCIRCLE";break;case"210100":af.typeName="CIRCUMCIRCLE_CENTER";break;case"210110":af.typeName="MIDPOINT";break;case"210120":af.typeName="MIRROR_LINE";break;case"210125":af.typeName="MIRROR_POINT";break;case"210130":af.typeName="NORMAL";break;case"210140":af.typeName="PARALLEL";break;case"210150":af.typeName="PARALLELOGRAM_POINT";break;case"210160":af.typeName="PERPENDICULAR";break;case"210170":af.typeName="PERPENDICULAR_POINT";break;case"210180":af.typeName="ROTATION";break;case"210190":af.typeName="SECTOR";break}af.defEl=[];var T=0;for(var X=0;X<Q.getElementsByTagName("data")[0].getElementsByTagName("input").length;X++){af.defEl[X]=Q.getElementsByTagName("data")[0].getElementsByTagName("input")[X].firstChild.data;T=X+1}af.outputId=Q.getElementsByTagName("output")[0].getElementsByTagName("id")[0].firstChild.data;af.outputName=Q.getElementsByTagName("output")[0].getElementsByTagName("name")[0].firstChild.data;af.outputVisible=Q.getElementsByTagName("output")[0].getElementsByTagName("visible")[0].firstChild.data;af.outputTrace=Q.getElementsByTagName("output")[0].getElementsByTagName("trace")[0].firstChild.data;af.outputStrokewidth=af=JXG.GeonextReader.readNodes(af,Q,"output","output");af.outputName=Q.getElementsByTagName("output")[0].getElementsByTagName("name")[0].firstChild.data;af.outputDash=Q.getElementsByTagName("output")[0].getElementsByTagName("dash")[0].firstChild.data;af.outputDraft=Q.getElementsByTagName("output")[0].getElementsByTagName("draft")[0].firstChild.data;af.outputStrokewidth=Q.getElementsByTagName("output")[0].getElementsByTagName("strokewidth")[0].firstChild.data;af.outputColorStroke=Q.getElementsByTagName("output")[0].getElementsByTagName("color")[0].getElementsByTagName("stroke")[0].firstChild.data;af.outputHighlightStrokeColor=Q.getElementsByTagName("output")[0].getElementsByTagName("color")[0].getElementsByTagName("lighting")[0].firstChild.data;af.outputColorFill=Q.getElementsByTagName("output")[0].getElementsByTagName("color")[0].getElementsByTagName("fill")[0].firstChild.data;af.outputColorLabel=Q.getElementsByTagName("output")[0].getElementsByTagName("color")[0].getElementsByTagName("label")[0].firstChild.data;af.outputColorDraft=Q.getElementsByTagName("output")[0].getElementsByTagName("color")[0].getElementsByTagName("draft")[0].firstChild.data;af.defEl[0]=JXG.GeonextReader.changeOriginIds(j,af.defEl[0]);af.defEl[1]=JXG.GeonextReader.changeOriginIds(j,af.defEl[1]);af.defEl[2]=JXG.GeonextReader.changeOriginIds(j,af.defEl[2]);if(af.typeName=="MIDPOINT"){if(T==2){j.addMidpoint(af.defEl[0],af.defEl[1],af.outputId,af.outputName)}else{if(T==1){j.addMidpoint(j.objects[af.defEl[0]].point1.id,j.objects[af.defEl[0]].point2.id,af.outputId,af.outputName)}}}else{if(af.typeName=="NORMAL"){j.addNormal(af.defEl[1],af.defEl[0],af.outputId,af.outputName)}else{if(af.typeName=="PARALLEL"){j.addParallel(af.defEl[1],af.defEl[0],af.outputId,af.outputName)}else{if(af.typeName=="CIRCUMCIRCLE"){var N=Q.getElementsByTagName("output")[1].getElementsByTagName("id")[0].firstChild.data;var A=Q.getElementsByTagName("output")[1].getElementsByTagName("name")[0].firstChild.data;j.addCircumcenter(af.defEl[0],af.defEl[1],af.defEl[2],af.outputId,af.outputName,N,A)}else{if(af.typeName=="CIRCUMCIRCLE_CENTER"){j.addCircumcenterMidpoint(af.defEl[0],af.defEl[1],af.defEl[2],af.outputId,af.outputName)}else{if(af.typeName=="BISECTOR"){j.addAngleBisector(af.defEl[0],af.defEl[1],af.defEl[2],af.outputId,af.outputName)}else{if(af.typeName=="MIRROR_LINE"){j.addReflection(af.defEl[1],af.defEl[0],af.outputId,af.outputName)}else{if(af.typeName=="MIRROR_POINT"){j.addRotation(af.defEl[0],af.defEl[1],Math.PI,af.outputId,af.outputName)}else{if(af.typeName=="PARALLELOGRAM_POINT"){if(af.defEl.length==2){j.addParallelPoint(JXG.GetReferenceFromParameter(af.defEl[0]).point1,JXG.GetReferenceFromParameter(af.defEl[0]).point2,af.defEl[1],af.outputId,af.outputName)}else{j.addParallelPoint(af.defEl[0],af.defEl[1],af.defEl[2],af.outputId,af.outputName)}}else{if(af.typeName=="SECTOR"){JXG.GeonextReader.parseImage(j,Q.getElementsByTagName("image")[0],"sectors");var F=[];var O=[];var H=[];var J=[];var Y=[];var W=[];var v=[];var E=[];var q=[];var D=[];var B=[];for(var X=0;X<Q.getElementsByTagName("output").length;X++){F[X]=Q.getElementsByTagName("output")[X].getElementsByTagName("id")[0].firstChild.data;F[X]=JXG.GeonextReader.changeOriginIds(j,F[X]);O[X]=Q.getElementsByTagName("output")[X].getElementsByTagName("name")[0];H[X]=Q.getElementsByTagName("output")[X].getElementsByTagName("visible")[0].firstChild.data;J[X]=Q.getElementsByTagName("output")[X].getElementsByTagName("trace")[0].firstChild.data;Y[X]=Q.getElementsByTagName("output")[X].getElementsByTagName("dash")[0].firstChild.data;W[X]=Q.getElementsByTagName("output")[X].getElementsByTagName("draft")[0].firstChild.data;v[X]=Q.getElementsByTagName("output")[X].getElementsByTagName("strokewidth")[0].firstChild.data;var R=Q.getElementsByTagName("output")[X].getElementsByTagName("color")[0];E[X]=R.getElementsByTagName("stroke")[0].firstChild.data;q[X]=R.getElementsByTagName("lighting")[0].firstChild.data;D[X]=R.getElementsByTagName("fill")[0].firstChild.data;B[X]=R.getElementsByTagName("label")[0].firstChild.data}var P=new JXG.Sector(j,af.defEl[0],af.defEl[1],af.defEl[2],[F[0],F[1],F[2],F[3]],[O[0].firstChild.data,O[1].firstChild.data,O[2].firstChild.data,O[3].firstChild.data],af.id);var ab=F[0];j.objects[ab].setProperty("strokeColor:"+E[0],"strokeWidth:"+v[0],"fillColor:"+D[0],"highlightStrokeColor:"+q[0],"highlightFillColor:"+D[0],"visible:"+H[0],"dash:"+Y[0],"draft:"+W[0]);j.objects[ab].traced=(J[0]=="false")?false:true;af.firstArrow=Q.getElementsByTagName("output")[0].getElementsByTagName("firstarrow")[0].firstChild.data;af.lastArrow=Q.getElementsByTagName("output")[0].getElementsByTagName("lastarrow")[0].firstChild.data;af.firstArrow=(af.firstArrow=="false")?false:true;af.lastArrow=(af.lastArrow=="false")?false:true;j.objects[ab].setArrow(af.firstArrow,af.lastArrow);var G=F[1];af.fixed=Q.getElementsByTagName("output")[1].getElementsByTagName("fix")[0].firstChild.data;j.objects[G].setProperty("strokeColor:"+E[1],"strokeWidth:"+v[1],"fillColor:"+E[1],"highlightStrokeColor:"+q[1],"highlightFillColor:"+q[1],"visible:"+H[1],"fixed:"+af.fixed,"labelColor:"+B[1],"draft:"+W[1]);af.style=Q.getElementsByTagName("output")[1].getElementsByTagName("style")[0].firstChild.data;j.objects[G].setStyle(1*af.style);j.objects[G].traced=(J[1]=="false")?false:true;var z=F[2];var R=Q.getElementsByTagName("output")[2].getElementsByTagName("straight")[0];af.straightFirst=R.getElementsByTagName("first")[0].firstChild.data;af.straightLast=R.getElementsByTagName("last")[0].firstChild.data;af.straightFirst=(af.straightFirst=="false")?false:true;af.straightLast=(af.straightLast=="false")?false:true;j.objects[z].setStraight(af.straightFirst,af.straightLast);j.objects[z].setProperty("strokeColor:"+E[2],"strokeWidth:"+v[2],"fillColor:"+D[2],"highlightStrokeColor:"+q[2],"highlightFillColor:"+D[2],"visible:"+H[2],"dash:"+Y[2],"draft:"+W[2]);j.objects[z].traced=(J[2]=="false")?false:true;var r=F[3];R=Q.getElementsByTagName("output")[3].getElementsByTagName("straight")[0];af.straightFirst=R.getElementsByTagName("first")[0].firstChild.data;af.straightLast=R.getElementsByTagName("last")[0].firstChild.data;af.straightFirst=(af.straightFirst=="false")?false:true;af.straightLast=(af.straightLast=="false")?false:true;j.objects[r].setStraight(af.straightFirst,af.straightLast);j.objects[r].setProperty("strokeColor:"+E[3],"strokeWidth:"+v[3],"fillColor:"+D[3],"highlightStrokeColor:"+q[3],"highlightFillColor:"+D[3],"visible:"+H[3],"dash:"+Y[3],"draft:"+W[3]);j.objects[r].traced=(J[3]=="false")?false:true}else{if(af.typeName=="PERPENDICULAR"){var F=[];var O=[];var H=[];var J=[];var Y=[];var W=[];var v=[];var E=[];var q=[];var D=[];var B=[];for(var X=0;X<Q.getElementsByTagName("output").length;X++){F[X]=Q.getElementsByTagName("output")[X].getElementsByTagName("id")[0].firstChild.data;F[X]=JXG.GeonextReader.changeOriginIds(j,F[X]);O[X]=Q.getElementsByTagName("output")[X].getElementsByTagName("name")[0];H[X]=Q.getElementsByTagName("output")[X].getElementsByTagName("visible")[0].firstChild.data;J[X]=Q.getElementsByTagName("output")[X].getElementsByTagName("trace")[0].firstChild.data;Y[X]=Q.getElementsByTagName("output")[X].getElementsByTagName("dash")[0].firstChild.data;W[X]=Q.getElementsByTagName("output")[X].getElementsByTagName("draft")[0].firstChild.data;v[X]=Q.getElementsByTagName("output")[X].getElementsByTagName("strokewidth")[0].firstChild.data;var R=Q.getElementsByTagName("output")[X].getElementsByTagName("color")[0];E[X]=R.getElementsByTagName("stroke")[0].firstChild.data;q[X]=R.getElementsByTagName("lighting")[0].firstChild.data;D[X]=R.getElementsByTagName("fill")[0].firstChild.data;B[X]=R.getElementsByTagName("label")[0].firstChild.data}af.outputFixed=Q.getElementsByTagName("output")[0].getElementsByTagName("fix")[0].firstChild.data;af.outputStyle=Q.getElementsByTagName("output")[0].getElementsByTagName("style")[0].firstChild.data;j.addPerpendicular(af.defEl[1],af.defEl[0],F[1],O[1].firstChild.data,F[0],O[0].firstChild.data);var I=F[0];j.objects[I].setProperty("strokeColor:"+E[0],"strokeWidth:"+v[0],"fillColor:"+E[0],"highlightStrokeColor:"+q[0],"highlightFillColor:"+q[0],"visible:"+H[0],"fixed:"+af.outputFixed,"labelColor:"+B[0],"draft:"+W[0]);j.objects[I].setStyle(1*af.outputStyle);j.objects[I].traced=(J[0]=="false")?false:true;var t=F[1];j.objects[t].setProperty("strokeColor:"+E[1],"strokeWidth:"+v[1],"fillColor:"+D[1],"highlightStrokeColor:"+q[1],"highlightFillColor:"+D[1],"visible:"+H[1],"dash:"+Y[1],"draft:"+W[1]);j.objects[t].traced=(J[1]=="false")?false:true}else{if(af.typeName=="ARROW_PARALLEL"){var F=[];var O=[];var H=[];var J=[];var Y=[];var W=[];var v=[];var E=[];var q=[];var D=[];var B=[];for(var X=0;X<Q.getElementsByTagName("output").length;X++){F[X]=Q.getElementsByTagName("output")[X].getElementsByTagName("id")[0].firstChild.data;F[X]=JXG.GeonextReader.changeOriginIds(j,F[X]);O[X]=Q.getElementsByTagName("output")[X].getElementsByTagName("name")[0];H[X]=Q.getElementsByTagName("output")[X].getElementsByTagName("visible")[0].firstChild.data;J[X]=Q.getElementsByTagName("output")[X].getElementsByTagName("trace")[0].firstChild.data;Y[X]=Q.getElementsByTagName("output")[X].getElementsByTagName("dash")[0].firstChild.data;W[X]=Q.getElementsByTagName("output")[X].getElementsByTagName("draft")[0].firstChild.data;v[X]=Q.getElementsByTagName("output")[X].getElementsByTagName("strokewidth")[0].firstChild.data;var R=Q.getElementsByTagName("output")[X].getElementsByTagName("color")[0];E[X]=R.getElementsByTagName("stroke")[0].firstChild.data;q[X]=R.getElementsByTagName("lighting")[0].firstChild.data;D[X]=R.getElementsByTagName("fill")[0].firstChild.data;B[X]=R.getElementsByTagName("label")[0].firstChild.data}af.outputFixed=Q.getElementsByTagName("output")[1].getElementsByTagName("fix")[0].firstChild.data;af.outputStyle=Q.getElementsByTagName("output")[1].getElementsByTagName("style")[0].firstChild.data;j.addArrowParallel(af.defEl[1],af.defEl[0],F[0],F[1],O[0].firstChild.data,O[1].firstChild.data);var C=F[0];j.objects[C].setProperty("strokeColor:"+E[0],"strokeWidth:"+v[0],"fillColor:"+D[0],"highlightStrokeColor:"+q[0],"highlightFillColor:"+D[0],"visible:"+H[0],"dash:"+Y[0],"draft:"+W[0]);j.objects[C].traced=(J[0]=="false")?false:true;var I=F[1];j.objects[I].setProperty("strokeColor:"+E[1],"strokeWidth:"+v[1],"fillColor:"+E[1],"highlightStrokeColor:"+q[1],"highlightFillColor:"+q[1],"visible:"+H[1],"fixed:"+af.outputFixed,"labelColor:"+B[1],"draft:"+W[1]);j.objects[I].setStyle(1*af.outputStyle);j.objects[I].traced=(J[1]=="false")?false:true}else{if(af.typeName=="PERPENDICULAR_POINT"){j.addPerpendicularPoint(af.defEl[1],af.defEl[0],af.outputId,af.outputName)}else{throw ("GEONExT-Element "+af.typeName+" not yet implemented")}}}}}}}}}}}}}if(af.typeName=="MIDPOINT"||af.typeName=="MIRROR_LINE"||af.typeName=="CIRCUMCIRCLE_CENTER"||af.typeName=="PERPENDICULAR_POINT"||af.typeName=="MIRROR_POINT"||af.typeName=="PARALLELOGRAM_POINT"){af.outputFixed=Q.getElementsByTagName("output")[0].getElementsByTagName("fix")[0].firstChild.data;af.outputStyle=Q.getElementsByTagName("output")[0].getElementsByTagName("style")[0].firstChild.data;j.objects[af.outputId].setProperty("strokeColor:"+af.outputColorStroke,"strokeWidth:"+af.outputStrokewidth,"fillColor:"+af.outputColorStroke,"highlightStrokeColor:"+af.outputHighlightStrokeColor,"highlightFillColor:"+af.outputHighlightStrokeColor,"visible:"+af.outputVisible,"fixed:"+af.outputFixed,"labelColor:"+af.outputColorLabel,"draft:"+af.outputDraft);j.objects[af.outputId].setStyle(1*af.outputStyle);j.objects[af.outputId].traced=(af.outputTrace=="false")?false:true}else{if(af.typeName=="BISECTOR"||af.typeName=="NORMAL"||af.typeName=="PARALLEL"){var R=Q.getElementsByTagName("output")[0].getElementsByTagName("straight")[0];af.straightFirst=R.getElementsByTagName("first")[0].firstChild.data;af.straightLast=R.getElementsByTagName("last")[0].firstChild.data;af.straightFirst=(af.straightFirst=="false")?false:true;af.straightLast=(af.straightLast=="false")?false:true;j.objects[af.outputId].setStraight(af.straightFirst,af.straightLast);j.objects[af.outputId].setProperty("strokeColor:"+af.outputColorStroke,"strokeWidth:"+af.outputStrokewidth,"fillColor:"+af.outputColorFill,"highlightStrokeColor:"+af.outputHighlightStrokeColor,"highlightFillColor:"+af.outputColorFill,"visible:"+af.outputVisible,"dash:"+af.outputDash,"draft:"+af.outputDraft);j.objects[af.outputId].traced=(af.outputTrace=="false")?false:true}else{if(af.typeName=="CIRCUMCIRCLE"){var F=[];var O=[];var H=[];var J=[];var Y=[];var W=[];var v=[];var E=[];var q=[];var D=[];var B=[];for(var X=0;X<Q.getElementsByTagName("output").length;X++){F[X]=Q.getElementsByTagName("output")[X].getElementsByTagName("id")[0].firstChild.data;F[X]=JXG.GeonextReader.changeOriginIds(j,F[X]);O[X]=Q.getElementsByTagName("output")[X].getElementsByTagName("name")[0];H[X]=Q.getElementsByTagName("output")[X].getElementsByTagName("visible")[0].firstChild.data;J[X]=Q.getElementsByTagName("output")[X].getElementsByTagName("trace")[0].firstChild.data;Y[X]=Q.getElementsByTagName("output")[X].getElementsByTagName("dash")[0].firstChild.data;W[X]=Q.getElementsByTagName("output")[X].getElementsByTagName("draft")[0].firstChild.data;v[X]=Q.getElementsByTagName("output")[X].getElementsByTagName("strokewidth")[0].firstChild.data;var R=Q.getElementsByTagName("output")[X].getElementsByTagName("color")[0];E[X]=R.getElementsByTagName("stroke")[0].firstChild.data;q[X]=R.getElementsByTagName("lighting")[0].firstChild.data;D[X]=R.getElementsByTagName("fill")[0].firstChild.data;B[X]=R.getElementsByTagName("label")[0].firstChild.data}af.outputFixed=Q.getElementsByTagName("output")[0].getElementsByTagName("fix")[0].firstChild.data;af.outputStyle=Q.getElementsByTagName("output")[0].getElementsByTagName("style")[0].firstChild.data;var I=F[0];j.objects[I].setProperty("strokeColor:"+E[0],"strokeWidth:"+v[0],"fillColor:"+E[0],"highlightStrokeColor:"+q[0],"highlightFillColor:"+q[0],"visible:"+H[0],"fixed:"+af.outputFixed,"labelColor:"+B[0],"draft:"+W[0]);j.objects[I].setStyle(1*af.outputStyle);j.objects[I].traced=(J[0]=="false")?false:true;var u=F[1];j.objects[u].setProperty("strokeColor:"+E[1],"strokeWidth:"+v[1],"fillColor:"+D[1],"highlightStrokeColor:"+q[1],"highlightFillColor:"+D[1],"visible:"+H[1],"dash:"+Y[1],"draft:"+W[1]);j.objects[u].traced=(J[1]=="false")?false:true}}}JXG.GeonextReader.printDebugMessage("debug",af,Q.nodeName,"OK");break;case"polygon":af=JXG.GeonextReader.colorProperties(af,Q);af=JXG.GeonextReader.firstLevelProperties(af,Q);af.dataVertex=[];for(var X=0;X<Q.getElementsByTagName("data")[0].getElementsByTagName("vertex").length;X++){af.dataVertex[X]=Q.getElementsByTagName("data")[0].getElementsByTagName("vertex")[X].firstChild.data;af.dataVertex[X]=JXG.GeonextReader.changeOriginIds(j,af.dataVertex[X])}af.border=[];for(var X=0;X<Q.getElementsByTagName("border").length;X++){af.border[X]={};var R=Q.getElementsByTagName("border")[X];af.border[X].id=R.getElementsByTagName("id")[0].firstChild.data;af.border[X].name=R.getElementsByTagName("name")[0].firstChild.data;af.border[X].straightFirst=R.getElementsByTagName("straight")[0].getElementsByTagName("first")[0].firstChild.data;af.border[X].straightLast=R.getElementsByTagName("straight")[0].getElementsByTagName("last")[0].firstChild.data;af.border[X].straightFirst=(af.border[X].straightFirst=="false")?false:true;af.border[X].straightLast=(af.border[X].straightLast=="false")?false:true;af.border[X].strokewidth=R.getElementsByTagName("strokewidth")[0].firstChild.data;af.border[X].dash=R.getElementsByTagName("dash")[0].firstChild.data;af.border[X].visible=R.getElementsByTagName("visible")[0].firstChild.data;af.border[X].draft=R.getElementsByTagName("draft")[0].firstChild.data;af.border[X].trace=R.getElementsByTagName("trace")[0].firstChild.data;af.border[X].colorStroke=R.getElementsByTagName("color")[0].getElementsByTagName("stroke")[0].firstChild.data;af.border[X].highlightStrokeColor=R.getElementsByTagName("color")[0].getElementsByTagName("lighting")[0].firstChild.data;af.border[X].colorFill=R.getElementsByTagName("color")[0].getElementsByTagName("fill")[0].firstChild.data;af.border[X].colorLabel=R.getElementsByTagName("color")[0].getElementsByTagName("label")[0].firstChild.data;af.border[X].colorDraft=R.getElementsByTagName("color")[0].getElementsByTagName("draft")[0].firstChild.data}JXG.GeonextReader.parseImage(j,Q.getElementsByTagName("image")[0],"polygone");var S=new JXG.Polygon(j,af.dataVertex,af.border,af.id,af.name);S.setProperty("strokeColor:"+af.colorStroke,"strokeWidth:"+af.strokewidth,"fillColor:"+af.colorFill,"highlightStrokeColor:"+af.highlightStrokeColor,"highlightFillColor:"+af.colorFill,"visible:"+af.visible,"draft:"+af.draft,"trace:"+af.trace);for(X=0;X<S.borders.length;X++){S.borders[X].setStraight(af.border[X].straightFirst,af.border[X].straightLast);S.borders[X].setProperty("strokeColor:"+af.border[X].colorStroke,"strokeWidth:"+af.border[X].strokewidth,"fillColor:"+af.border[X].colorFill,"highlightStrokeColor:"+af.border[X].highlightStrokeColor,"highlightFillColor:"+af.border[X].colorFill,"visible:"+af.border[X].visible,"dash:"+af.border[X].dash,"draft:"+af.border[X].draft,"trace:"+af.border[X].trace)}JXG.GeonextReader.printDebugMessage("debug",af,Q.nodeName,"OK");break;case"graph":af=JXG.GeonextReader.colorProperties(af,Q);af=JXG.GeonextReader.firstLevelProperties(af,Q);af.funct=Q.getElementsByTagName("data")[0].getElementsByTagName("function")[0].firstChild.data;JXG.GeonextReader.parseImage(j,Q.getElementsByTagName("image")[0],"graphs");var aa=new JXG.Curve(j,["x",af.funct],af.id,af.name);JXG.GeonextReader.printDebugMessage("debug",af,Q.nodeName,"OK");aa.setProperty("strokeColor:"+af.colorStroke,"strokeWidth:"+af.strokewidth,"fillColor:none","highlightStrokeColor:"+af.highlightStrokeColor);break;case"arrow":af=JXG.GeonextReader.colorProperties(af,Q);af=JXG.GeonextReader.boardProperties(af,Q);af=JXG.GeonextReader.firstLevelProperties(af,Q);af=JXG.GeonextReader.readNodes(af,Q,"data");af=JXG.GeonextReader.readNodes(af,Q,"straight","straight");af=JXG.GeonextReader.visualProperties(af,Q);af.first=JXG.GeonextReader.changeOriginIds(j,af.first);af.last=JXG.GeonextReader.changeOriginIds(j,af.last);var ae=new JXG.Line(j,af.first,af.last,af.id,af.name);ae.setProperty("strokeColor:"+af.colorStroke,"strokeWidth:"+af.strokewidth,"fillColor:"+af.colorFill,"highlightStrokeColor:"+af.highlightStrokeColor,"highlightFillColor:"+af.colorFill,"visible:"+af.visible,"dash:"+af.dash,"draft:"+af.draft);ae.setStraight(false,false);ae.setArrow(false,true);ae.traced=(af.trace=="false")?false:true;JXG.GeonextReader.printDebugMessage("debug",ae,Q.nodeName,"OK");break;case"arc":af=JXG.GeonextReader.colorProperties(af,Q);af=JXG.GeonextReader.visualProperties(af,Q);af=JXG.GeonextReader.boardProperties(af,Q);af=JXG.GeonextReader.firstLevelProperties(af,Q);af=JXG.GeonextReader.readNodes(af,Q,"data");af.firstArrow=Q.getElementsByTagName("firstarrow")[0].firstChild.data;af.lastArrow=Q.getElementsByTagName("lastarrow")[0].firstChild.data;JXG.GeonextReader.parseImage(j,Q.getElementsByTagName("image")[0],"arcs");af.midpoint=JXG.GeonextReader.changeOriginIds(j,af.midpoint);af.angle=JXG.GeonextReader.changeOriginIds(j,af.angle);af.radius=JXG.GeonextReader.changeOriginIds(j,af.radius);var ae=new JXG.Arc(j,af.midpoint,af.radius,af.angle,af.id,af.name);ae.setProperty("strokeColor:"+af.colorStroke,"strokeWidth:"+af.strokewidth,"fillColor:"+af.colorFill,"highlightStrokeColor:"+af.highlightStrokeColor,"highlightFillColor:"+af.colorFill,"visible:"+af.visible,"dash:"+af.dash,"draft:"+af.draft);ae.traced=(af.trace=="false")?false:true;af.firstArrow=(af.firstArrow=="false")?false:true;af.lastArrow=(af.lastArrow=="false")?false:true;ae.setArrow(af.firstArrow,af.lastArrow);JXG.GeonextReader.printDebugMessage("debug",ae,Q.nodeName,"OK");break;case"angle":af=JXG.GeonextReader.boardProperties(af,Q);af=JXG.GeonextReader.colorProperties(af,Q);af=JXG.GeonextReader.visualProperties(af,Q);af=JXG.GeonextReader.firstLevelProperties(af,Q);af=JXG.GeonextReader.readNodes(af,Q,"data");af.txt=JXG.GeonextReader.subtreeToString(Q.getElementsByTagName("text")[0]);var ae=new JXG.Angle(j,af.first,af.middle,af.last,af.radius,af.txt,af.id,af.name);ae.setProperty("strokeColor:"+af.colorStroke,"strokeWidth:"+af.strokewidth,"fillColor:"+af.colorFill,"highlightStrokeColor:"+af.highlightStrokeColor,"highlightFillColor:"+af.colorFill,"visible:"+af.visible,"dash:"+af.dash);JXG.GeonextReader.printDebugMessage("debug",af,Q.nodeName,"OK");break;case"text":if(af.id.match(/oldVersion/)){break}af=JXG.GeonextReader.boardProperties(af,Q);af=JXG.GeonextReader.colorProperties(af,Q);af=JXG.GeonextReader.visualProperties(af,Q);af=JXG.GeonextReader.firstLevelProperties(af,Q);af=JXG.GeonextReader.readNodes(af,Q,"data");af.mpStr=JXG.GeonextReader.subtreeToString(Q.getElementsByTagName("data")[0].getElementsByTagName("mp")[0]);af.mpStr=af.mpStr.replace(/<\/?mp>/g,"");try{if(Q.getElementsByTagName("data")[0].getElementsByTagName("parent")[0].firstChild){af.parent=Q.getElementsByTagName("data")[0].getElementsByTagName("parent")[0].firstChild.data}}catch(ac){}af.condition=Q.getElementsByTagName("condition")[0].firstChild.data;af.content=Q.getElementsByTagName("content")[0].firstChild.data;af.fix=Q.getElementsByTagName("fix")[0].firstChild.data;af.autodigits=Q.getElementsByTagName("digits")[0].firstChild.data;af.parent=JXG.GeonextReader.changeOriginIds(j,af.parent);var ad=new JXG.Text(j,af.mpStr,af.parent,[af.x,af.y],af.id,af.name,af.autodigits);ad.setProperty("labelColor:"+af.colorLabel);if(af.visible=="false"){ad.hideElement()}break;case"parametercurve":af=JXG.GeonextReader.colorProperties(af,Q);af=JXG.GeonextReader.firstLevelProperties(af,Q);af.functionx=Q.getElementsByTagName("functionx")[0].firstChild.data;af.functiony=Q.getElementsByTagName("functiony")[0].firstChild.data;af.min=Q.getElementsByTagName("min")[0].firstChild.data;af.max=Q.getElementsByTagName("max")[0].firstChild.data;var aa=new JXG.Curve(j,[af.functionx,af.functiony,"t",af.min,af.max],af.id,af.name);aa.setProperty("strokeColor:"+af.colorStroke,"strokeWidth:"+af.strokewidth,"fillColor:none","highlightStrokeColor:"+af.highlightStrokeColor);JXG.GeonextReader.printDebugMessage("debug",af,Q.nodeName,"OK");break;case"tracecurve":af.tracepoint=Q.getElementsByTagName("tracepoint")[0].firstChild.data;af.traceslider=Q.getElementsByTagName("traceslider")[0].firstChild.data;JXG.GeonextReader.printDebugMessage("debug",af,Q.nodeName,"<b>ERR</b>");break;case"group":af=JXG.GeonextReader.boardProperties(af,Q);af=JXG.GeonextReader.colorProperties(af,Q);af=JXG.GeonextReader.firstLevelProperties(af,Q);af.members=[];for(var X=0;X<Q.getElementsByTagName("data")[0].getElementsByTagName("member").length;X++){af.members[X]=Q.getElementsByTagName("data")[0].getElementsByTagName("member")[X].firstChild.data;af.members[X]=JXG.GeonextReader.changeOriginIds(j,af.members[X])}var aa=new JXG.Group(j,af.id,af.name,af.members);JXG.GeonextReader.printDebugMessage("debug",af,Q.nodeName,"OK");break;default:if(Q.nodeName!="#text"){}}delete (af)});j.addConditions(l.conditions)};this.decodeString=function(b){if(b.indexOf("<GEONEXT>")<0){var a=(new JXG.Gunzip(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)}a=JXG.GeonextReader.fixXML(a);return a};this.fixXML=function(e){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"];e=e.escapeHTML();var c=a.join("|");var b="&lt;(/?("+c+"))&gt;";var d=new RegExp(b,"g");e=e.replace(d,"<$1>");e=e.replace(/(<content>.*)<arc>(.*<\/content>)/g,"$1&lt;arc&gt;$2");e=e.replace(/(<mp>.*)<arc>(.*<\/mpx>)/g,"$1&lt;arc&gt;$2");e=e.replace(/(<mpx>.*)<arc>(.*<\/mpx>)/g,"$1&lt;arc&gt;$2");return e}};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.readConstraints(a.getElementsByTagName("constraints"))};this.readElements=function(a){$R(0,a[0].childNodes.length-1).each(function(b){var c=a[0].childNodes[b];if(c.nodeType>1){return}if(c.nodeName=="point"){JXG.IntergeoReader.addPoint(c)}else{if(c.nodeName=="line"){JXG.IntergeoReader.storeLine(c)}else{}}})};this.addPoint=function(d){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(e.childNodes[a].firstChild.data)}else{}}}this.board.createElement("point",[f[0]/f[2],f[1]/f[2]],{name:d.getAttribute("id"),id:d.getAttribute("id")})}else{if(e.nodeName=="euclidean_coordinates"){var f=[];for(var a=0;a<e.childNodes.length;a++){if(e.childNodes[a].nodeType==1){f.push(e.childNodes[a].firstChild.data)}}this.board.createElement("point",[f[0],f[1]],{name:d.getAttribute("id"),id:d.getAttribute("id")})}else{if(e.nodeName=="polar_coordinates"){var f=[];for(var a=0;a<e.childNodes.length;a++){if(e.childNodes[a].nodeType==1){f.push(e.childNodes[a].firstChild.data)}}this.board.createElement("point",[f[0]*Math.cos(f[1]),f[0]*Math.sin(f[1])],{name:d.getAttribute("id"),id:d.getAttribute("id")})}else{}}}};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){$R(0,a[0].childNodes.length-1).each(function(b){var c=a[0].childNodes[b];if(c.nodeType>1){return}if(c.nodeName=="line_through_two_points"){JXG.IntergeoReader.addLineThroughTwoPoints(c)}else{if(c.nodeName=="line_parallel_to_line_through_point"){JXG.IntergeoReader.addLineParallelToLineThroughPoint(c)}else{if(c.nodeName=="line_perpendicular_to_line_through_point"){JXG.IntergeoReader.addLinePerpendicularToLineThroughPoint(c)}else{if(c.nodeName=="point_intersection_of_two_lines"){JXG.IntergeoReader.addPointIntersectionOfTwoLines(c)}else{if(c.nodeName=="free_point"){}else{if(c.nodeName=="free_line"){JXG.IntergeoReader.addFreeLine(c)}else{if(c.nodeName=="point_on_line"){JXG.IntergeoReader.addPointOnLine(c)}else{if(c.nodeName=="angular_bisector_of_three_points"){JXG.IntergeoReader.addAngularBisectorOfThreePoints(c)}else{}}}}}}}}})};this.readParams=function(b){var c=[];for(var a=0;a<b.childNodes.length;a++){if(b.childNodes[a].nodeType==1){c.push(b.childNodes[a].firstChild.data)}}return c};this.addLineThroughTwoPoints=function(b){var c=JXG.IntergeoReader.readParams(b);if(this.board.objects[c[1]]!=null&&this.board.objects[c[2]]!=null){var a=this.board.createElement("line",[c[1],c[2]],{name:c[0],id:c[0]})}};this.addLineParallelToLineThroughPoint=function(b){var c=JXG.IntergeoReader.readParams(b);var a=this.board.createElement("parallel",[c[1],this.objects[c[2]].id],{name:c[0],id:c[0]});this.objects[c[0]].id=el[0].id};this.addLinePerpendicularToLineThroughPoint=function(b){var c=JXG.IntergeoReader.readParams(b);var a=this.board.createElement("perpendicular",[c[1],this.objects[c[2]].id],{name:c[0],id:c[0]});a[0].setProperty("straightFirst:true","straightLast:true");a[1].setProperty("visible:false");this.objects[c[0]].id=a[0].id};this.addPointIntersectionOfTwoLines=function(a){var c=JXG.IntergeoReader.readParams(a);if(this.board.objects[c[1]]!=null&&this.board.objects[c[2]]!=null){var b=function(){return this.board.algebra.intersectLineLine(this.board.elementsByName[c[1]],this.board.elementsByName[c[2]])};this.board.createElement("point",[b],{name:c[0],id:c[0]})}};this.addFreeLine=function(g){var k=JXG.IntergeoReader.readParams(g);var e=this.objects[k[0]].coords[0];var d=this.objects[k[0]].coords[1];var l=this.objects[k[0]].coords[2];var j=this.board.createElement("point",[(l-d)/(d-e),(e-l)/(d-e)],{visible:false});var h=this.board.createElement("point",[(l-d)/(d-e)-d,(e-l)/(d-e)+e],{visible:false});var f=this.board.createElement("line",[j,h],{name:k[0],id:k[0]})};this.addPointOnLine=function(a){var c=JXG.IntergeoReader.readParams(a);var b=JXG.GetReferenceFromParameter(this.board,c[0]);b.makeGlider(this.objects[c[1]].id)};this.addAngularBisectorOfThreePoints=function(b){var c=JXG.IntergeoReader.readParams(b);var a=this.board.createElement("bisector",[c[1],c[2],c[3]],{name:c[0],id:c[0]});a.setProperty("straightFirst:false","straightLast:true");this.objects[c[0]].id=a.id}};JXG.JSXGraph=new function(c){this.licenseText="JSXGraph v0.67 Copyright (C) 2008 see http://jsxgraph.org";this.rendererType="";this.boards={};this.elements={};var d;var a;if((c=="undefined")||(c==null)||(c=="")){d=navigator.appVersion.match(/MSIE (\d\.\d)/);a=(navigator.userAgent.toLowerCase().indexOf("opera")!=-1);if((!d)||(a)){this.rendererType="svg"}else{this.rendererType="vml";function b(f){document.body.scrollLeft;document.body.scrollTop}document.onmousemove=b}}else{this.rendererType=c}JXG.rendererFiles[this.rendererType].split(",").each(function(e){JXG.require(JXG.requirePath+e+".js")});this.initBoard=function(f,g){var j;if(typeof g=="undefined"){g={}}var p=((typeof g.originX)=="undefined"?150:g.originX);var o=((typeof g.originY)=="undefined"?150:g.originY);var n=((typeof g.zoomX)=="undefined"?1:g.zoomX);var m=((typeof g.zoomY)=="undefined"?1:g.zoomY);var l=((typeof g.unitX)=="undefined"?50:g.unitX);var k=((typeof g.unitY)=="undefined"?50:g.unitY);if(this.rendererType=="svg"){j=new JXG.SVGRenderer($(f))}else{if(this.rendererType=="vml"){j=new JXG.VMLRenderer($(f))}else{j=new JXG.SilverlightRenderer($(f))}}var e=$(f).getDimensions();var h=new JXG.Board(f,j,"",[p,o],1,1,l,k,e.width,e.height);this.boards[h.id]=h;h.initGeonextBoard();return h};this.loadBoardFromFile=function(h,e,k){var j;if(this.rendererType=="svg"){j=new JXG.SVGRenderer($(h))}else{j=new JXG.VMLRenderer($(h))}var g=$(h).getDimensions();var f=new JXG.Board(h,j,"",[150,150],1,1,50,50,g.width,g.height);f.beforeLoad();JXG.FileReader.parseFileContent(e,f,k);this.boards[f.id]=f;return f};this.loadBoardFromString=function(h,e,k){var j;if(this.rendererType=="svg"){j=new JXG.SVGRenderer($(h))}else{j=new JXG.VMLRenderer($(h))}var g=$(h).getDimensions();var f=new JXG.Board(h,j,"",[150,150],1,1,50,50,g.width,g.height);f.beforeLoad();JXG.FileReader.parseString(e,f,k);this.boards[f.id]=f;return f};this.freeBoard=function(f){if(typeof(f)=="string"){f=this.boards[f]}Event.stopObserving(f.container,"mousedown",f.onMouseDownListener);Event.stopObserving(f.container,"mouseup",f.onMouseUpListener);Event.stopObserving(f.container,"mousemove",f.onMouseMoveListener);for(var e in f.objects){f.removeObject(f.objects[e])}$(f.container).innerHTML="";for(var e in f.objects){delete (f.objects[e])}delete (f.renderer);delete (f.algebra);delete (this.boards[f.id])};this.registerElement=function(e,f){e=e.toLowerCase();this.elements[e]=f};this.unregisterElement=function(e){delete (this.elements[e])}};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 Object.isString(a)};JXG.IsNumber=function(a){if(typeof a=="number"){return true}return false};JXG.IsFunction=function(a){return Object.isFunction(a)};JXG.IsArray=function(b){return Object.isArray(b)};JXG.IsPoint=function(a){if(typeof a=="object"){return(a.elementClass==JXG.OBJECT_CLASS_POINT)}return false};JXG.createEvalFunction=function(b,e,g){var c=[];for(var a=0;a<g;a++){if(typeof e[a]=="string"){var d=b.algebra.geonext2JS(e[a]);d=d.replace(/this\.board\./g,"board.");c[a]=new Function("","return "+(d)+";")}}return function(h){var f=e[h];if(typeof f=="string"){return c[h]()}else{if(typeof f=="function"){return f()}else{if(typeof f=="number"){return f}}}return 0}};JXG.OBJECT_TYPE_ARC=1330921795;JXG.OBJECT_TYPE_ARROW=1330921815;JXG.OBJECT_TYPE_AXIS=1330921816;JXG.OBJECT_TYPE_CIRCLE=1330922316;JXG.OBJECT_TYPE_CURVE=1330923344;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_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.notExistingParents={};this.traced=false;this.traces={};this.numTraces=0;this.transformations=[];this.baseElement=null;this.descendants={};this.ancestors={};this.stdform=[1,0,0,0,1,1,0,0];this.afterFirstUpdate=false;this.needsRegularUpdate=true};JXG.GeometryElement.prototype.init=function(b,c,a){if(typeof(b)=="string"){b=JXG.JSXGraph.boards[b]}this.board=b;this.id=c;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};JXG.GeometryElement.prototype.addChild=function(c){this.childElements[c.id]=c;this.addDescendants(c);c.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(a){this.descendants[a.id]=a;for(el in a.childElements){this.addDescendants(a.childElements[el])}};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.label.hiddenByParent=true;if(this.label.show){this.board.renderer.hide(this.label);this.label.show=true}}};JXG.GeometryElement.prototype.showElement=function(){this.visProp.visible=true;this.board.renderer.show(this);if(this.label!=null&&this.label.hiddenByParent){this.label.hiddenByParent=false;if(this.label.show){this.board.renderer.show(this.label)}}};JXG.GeometryElement.prototype.setProperty=function(){var b;var c;var f;for(var e=0;e<arguments.length;e++){var a=arguments[e];if(typeof a=="string"){f=a.split(":")}else{if(!Object.isArray(a)){for(var e=0;e<Object.keys(a).length;e++){var d=Object.keys(a)[e];this.setProperty([d,a[d]])}return}else{f=a}}switch(f[0].replace(/\s+/g).toLowerCase()){case"strokewidth":this.visProp.strokeWidth=f[1];this.board.renderer.setObjectStrokeWidth(this,this.visProp.strokeWidth);break;case"strokecolor":b=f[1];if(b.length=="9"&&b.substr(0,1)=="#"){c=b.substr(7,2);b=b.substr(0,7)}else{c="FF"}this.visProp.strokeColor=b;this.visProp.strokeOpacity=parseInt(c.toUpperCase(),16)/255;this.board.renderer.setObjectStrokeColor(this,this.visProp.strokeColor,this.visProp.strokeOpacity);break;case"fillcolor":b=f[1];if(b.length=="9"&&b.substr(0,1)=="#"){c=b.substr(7,2);b=b.substr(0,7)}else{c="FF"}this.visProp.fillColor=b;this.visProp.fillOpacity=parseInt(c.toUpperCase(),16)/255;this.board.renderer.setObjectFillColor(this,this.visProp.fillColor,this.visProp.fillOpacity);break;case"highlightstrokecolor":b=f[1];if(b.length=="9"&&b.substr(0,1)=="#"){c=b.substr(7,2);b=b.substr(0,7)}else{c="FF"}this.visProp.highlightStrokeColor=b;this.visProp.highlightStrokeOpacity=parseInt(c.toUpperCase(),16)/255;break;case"highlightfillcolor":b=f[1];if(b.length=="9"&&b.substr(0,1)=="#"){c=b.substr(7,2);b=b.substr(0,7)}else{c="FF"}this.visProp.highlightFillColor=b;this.visProp.highlightFillOpacity=parseInt(c.toUpperCase(),16)/255;break;case"fillopacity":this.visProp.fillOpacity=f[1];this.board.renderer.setObjectFillColor(this,this.visProp.fillColor,this.visProp.fillOpacity);break;case"strokeopacity":this.visProp.strokeOpacity=f[1];this.board.renderer.setObjectStrokeColor(this,this.visProp.strokeColor,this.visProp.strokeOpacity);break;case"highlightfillopacity":this.visProp.highlightFillOpacity=f[1];break;case"strokeopacity":this.visProp.highlightStrokeOpacity=f[1];break;case"labelcolor":b=f[1];if(b.length=="9"&&b.substr(0,1)=="#"){c=b.substr(7,2);b=b.substr(0,7)}else{c="FF"}if(c=="00"){if(this.label!=null){this.label.hideElement()}}if(this.label!=null){this.label.color=b;this.board.renderer.setLabelColor(this.label)}if(this.type==JXG.OBJECT_TYPE_TEXT){this.visProp.strokeColor=b;this.board.renderer.setObjectStrokeColor(this,this.visProp.strokeColor,1)}break;case"visible":if(f[1]=="false"||f[1]==false){this.visProp.visible=false;this.hideElement()}else{if(f[1]=="true"||f[1]==true){this.visProp.visible=true;this.showElement()}}break;case"dash":this.setDash(f[1]);break;case"trace":if(f[1]=="false"||f[1]==false){this.traced=false}else{if(f[1]=="true"||f[1]==true){this.traced=true}}break;case"style":this.setStyle(1*f[1]);break;case"fixed":this.fixed=(f[1]=="false")?false:true;break;case"draft":if(f[1]=="false"||f[1]==false){if(this.visProp.draft==true){this.visProp.draft=false;this.board.renderer.removeDraft(this)}}else{if(f[1]=="true"||f[1]==true){this.visProp.draft=true;this.board.renderer.setDraft(this)}}break;case"straightfirst":if(f[1]=="false"||f[1]==false){this.visProp.straightFirst=false}else{if(f[1]=="true"||f[1]==true){this.visProp.straightFirst=true}}this.setStraight(this.visProp.straightFirst,this.visProp.straightLast);break;case"straightlast":if(f[1]=="false"||f[1]==false){this.visProp.straightLast=false}else{if(f[1]=="true"||f[1]==true){this.visProp.straightLast=true}}this.setStraight(this.visProp.straightFirst,this.visProp.straightLast);break;case"firstarrow":if(f[1]=="false"||f[1]==false){this.visProp.firstArrow=false}else{if(f[1]=="true"||f[1]==true){this.visProp.firstArrow=true}}this.setArrow(this.visProp.firstArrow,this.visProp.lastArrow);break;case"lastarrow":if(f[1]=="false"||f[1]==false){this.visProp.lastArrow=false}else{if(f[1]=="true"||f[1]==true){this.visProp.lastArrow=true}}this.setArrow(this.visProp.firstArrow,this.visProp.lastArrow);break;case"withticks":if(f[1]=="false"||f[1]==false){this.disableTicks()}else{if(f[1]=="true"||f[1]==true){this.enableTicks()}}break;case"curvetype":this.curveType=f[1];break;case"fontsize":this.visProp.fontSize=f[1];break}}};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($(this.id))};JXG.GeometryElement.prototype.getTextAnchor=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.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":'+Object.toJSON(this.name);b+=', "id":'+Object.toJSON(this.id);var c=[];for(var a in this.visProp){if(this.visProp[a]!=null){c.push('"'+a+'":'+Object.toJSON(this.visProp[a]))}}b+=', "visProp":{'+c.toString()+"}";b+="}";return b};JXG.Board=function(a,e,b,k,j,h,g,f,c,d){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.container).undoPositioned;this.renderer=e;this.options=new JXG.Options();this.dimension=2;this.origin={};this.origin.usrCoords=[1,0,0];this.origin.scrCoords=[1,k[0],k[1]];this.zoomX=j;this.zoomY=h;this.unitX=g;this.unitY=f;this.canvasWidth=c;this.canvasHeight=d;this.fontSize=this.options.fontSize;this.algebra=new JXG.Algebra(this);this.mathStatistics=new JXG.MathStatistics();if((b!="")&&(b!=null)&&(typeof $(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="";this.renderer.displayCopyright(JXG.JSXGraph.licenseText,this.options.fontSize);this.fullUpdate=false;this.reducedUpdate=false;this.geonextCompatibilityMode=false;this.onMouseDownListener=this.mouseDownListener.bindAsEventListener(this);this.onMouseUpListener=this.mouseUpListener.bindAsEventListener(this);this.onMouseMoveListener=this.mouseMoveListener.bindAsEventListener(this);Event.observe(this.container,"mousedown",this.onMouseDownListener);Event.observe(this.container,"mousemove",this.onMouseMoveListener)};JXG.Board.prototype.generateName=function(b){var g;if(b.elementClass==JXG.OBJECT_CLASS_POINT){g=["","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{g=["","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 d=3;var h="";if(b.elementClass==JXG.OBJECT_CLASS_POINT||b.elementClass==JXG.OBJECT_CLASS_LINE){h=""}else{if(b.type==JXG.OBJECT_TYPE_POLYGON){h="P_"}else{if(b.type==JXG.OBJECT_TYPE_CIRCLE){h="k_"}else{h="s_"}}}var k=[];var a="";var e="";var f=0;var c=0;for(f=0;f<d;f++){k[f]=0}while(k[d-1]<g.length){for(k[0]=1;k[0]<g.length;k[0]++){a=h;for(f=d;f>0;f--){a+=g[k[f-1]]}if(this.elementsByName[a]==null){return a}}k[0]=g.length;for(f=1;f<d;f++){if(k[f-1]==g.length){k[f-1]=1;k[f]++}}}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 c=$(this.container);var a=Element.cumulativeOffset(c);a[0]+=parseInt(c.getStyle("borderLeftWidth"));a[1]+=parseInt(c.getStyle("borderTopWidth"));a[0]+=parseInt(c.getStyle("paddingLeft"));a[1]+=parseInt(c.getStyle("paddingTop"));return a};JXG.Board.prototype.mouseUpListener=function(b){this.updateQuality=this.BOARD_QUALITY_HIGH;Event.stopObserving(this.container,"mouseup",this.onMouseUpListener);if(this.mode==this.BOARD_MODE_MOVE_ORIGIN){this.fullUpdate=true;this.moveOrigin()}this.mode=this.BOARD_MODE_NONE;var a=this.reducedUpdate;this.reducedUpdate=false;this.update();this.reducedUpdate=a;this.fullUpdate=false;this.drag_obj=null};JXG.Board.prototype.mouseDownListener=function(e){var c;var d=this.getRelativeMouseCoordinates(e);var b=Event.pointerX(e)-d[0];var a=Event.pointerY(e)-d[1];if(e.shiftKey){this.drag_dx=b-this.origin.scrCoords[1];this.drag_dy=a-this.origin.scrCoords[2];this.mode=this.BOARD_MODE_MOVE_ORIGIN;Event.observe(this.container,"mouseup",this.onMouseUpListener);return}if(this.mode==this.BOARD_MODE_CONSTRUCT){return}this.mode=this.BOARD_MODE_DRAG;if(this.mode==this.BOARD_MODE_DRAG){for(c in this.objects){if((this.objects[c].hasPoint!=undefined)&&(this.objects[c].hasPoint(b,a))&&((this.objects[c].type==JXG.OBJECT_TYPE_POINT)||(this.objects[c].type==JXG.OBJECT_TYPE_GLIDER))&&(this.objects[c].visProp.visible)&&(!this.objects[c].fixed)){this.drag_obj=this.objects[c];if((this.objects[c].type==JXG.OBJECT_TYPE_POINT)||(this.objects[c].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,[b,a],this);Event.observe(document,"mouseup",this.onMouseUpListener)};JXG.Board.prototype.mouseMoveListener=function(f){var c;var e=this.getRelativeMouseCoordinates(f);var a=Event.pointerX(f)-e[0];var g=Event.pointerY(f)-e[1];this.updateQuality=this.BOARD_QUALITY_LOW;this.dehighlightAll();if(this.mode==this.BOARD_MODE_MOVE_ORIGIN){this.origin.scrCoords[1]=a-this.drag_dx;this.origin.scrCoords[2]=g-this.drag_dy;this.fullUpdate=true;this.moveOrigin()}else{if(this.mode==this.BOARD_MODE_DRAG){var b=new JXG.Coords(JXG.COORDS_BY_SCREEN,[a,g],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,b.usrCoords[1],b.usrCoords[2])}else{this.drag_obj.setPositionByTransform(JXG.COORDS_BY_USER,b.usrCoords[1]-this.dragObjCoords.usrCoords[1],b.usrCoords[2]-this.dragObjCoords.usrCoords[2]);this.dragObjCoords=b}this.update()}else{if(this.drag_obj.type==JXG.OBJECT_TYPE_GLIDER){var d=this.drag_obj.coords;this.drag_obj.setPositionDirectly(JXG.COORDS_BY_USER,b.usrCoords[1],b.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]-d.scrCoords[1];this.drag_obj.group[this.drag_obj.group.length-1].dY=this.drag_obj.coords.scrCoords[2]-d.scrCoords[2];this.drag_obj.group[this.drag_obj.group.length-1].update(this)}else{this.update(this.drag_obj)}}}}else{for(c in this.objects){if((this.objects[c].hasPoint!=undefined)&&(this.objects[c].hasPoint(a,g))&&(this.objects[c].visProp.visible==true)){this.renderer.highlight(this.objects[c]);this.highlightedObjects[c]=this.objects[c]}}}}this.fullUpdate=false};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,c){if(this.snapToGrid){var b=new JXG.Coords(JXG.COORDS_BY_SCREEN,[a,c],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,c]}};JXG.Board.prototype.getUsrCoordsOfMouse=function(d){var b=this.getRelativeMouseCoordinates(d);var a=Event.pointerX(d)-b[0];var e=Event.pointerY(d)-b[1];var c=new JXG.Coords(JXG.COORDS_BY_SCREEN,[a,e],this);if(this.snapToGrid){c.setCoordinates(JXG.COORDS_BY_USER,[Math.round((c.usrCoords[1])*this.snapSizeX)/this.snapSizeX,Math.round((c.usrCoords[2])*this.snapSizeY)/this.snapSizeY])}return[c.usrCoords[1],c.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(f){var e=this.getRelativeMouseCoordinates(f);var b=Event.pointerX(f)-e[0];var a=Event.pointerY(f)-e[1];var c=[];for(var d in this.objects){if(this.objects[d].hasPoint(b,a)){c.push(this.objects[d])}}return c};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.update();if(this.hasGrid){this.renderer.removeGrid(this);this.renderer.drawGrid(this)}};JXG.Board.prototype.addPoint=function(c){var b=this.numObjects;this.numObjects++;var a=c.id;if((a=="")||(a==null)){a=this.id+"P"+b}c.label.id=a+"Label";this.objects[a]=c;this.elementsByName[c.name]=c;c.id=a;this.renderer.drawPoint(c);this.renderer.drawLabel(c.label);if(!c.visProp.visible){this.renderer.hide(c)}if(!c.label.show){this.renderer.hide(c.label)}return a};JXG.Board.prototype.addLine=function(c){var b=this.numObjects;this.numObjects++;var a=c.id;if((a=="")||(a==null)){a=this.id+"L"+b}this.objects[a]=c;c.id=a;this.renderer.drawLine(c);return a};JXG.Board.prototype.addCircle=function(c){var b=this.numObjects;this.numObjects++;var a=c.id;if((a=="")||(a==null)){a=this.id+"C"+b}this.objects[a]=c;c.id=a;this.renderer.drawCircle(c);return a};JXG.Board.prototype.addPolygon=function(c){var b=this.numObjects;this.numObjects++;var a=c.id;if((a=="")||(a==null)){a=this.id+"Py"+b}this.objects[a]=c;c.id=a;this.renderer.drawPolygon(c);return a};JXG.Board.prototype.addArc=function(c){var b=this.numObjects;this.numObjects++;var a=c.id;if((a=="")||(a==null)){a=this.id+"Ac"+b}this.objects[a]=c;c.id=a;this.renderer.drawArc(c);return a};JXG.Board.prototype.addSector=function(c){var b=this.numObjects;this.numObjects++;var a=c.id;if((a=="")||(a==null)){a=this.id+"Sc"+b}this.objects[a]=c;c.id=a;return a};JXG.Board.prototype.addAngle=function(c){var b=this.numObjects;this.numObjects++;var a=c.id;if((a=="")||(a==null)){a=this.id+"Ag"+b}this.objects[a]=c;c.id=a;this.renderer.drawAngle(c);return a};JXG.Board.prototype.addCurve=function(c){var b=this.numObjects;this.numObjects++;var a=c.id;if((a=="")||(a==null)){a=this.id+"G"+b}this.objects[a]=c;c.id=a;this.renderer.drawCurve(c);return a};JXG.Board.prototype.addChart=function(c){var b=this.numObjects;this.numObjects++;var a=c.id;if((a=="")||(a==null)){a=this.id+"Chart"+b}this.objects[a]=c;c.id=a;return a};JXG.Board.prototype.addMidpoint=function(g,f,h,b){var d=JXG.GetReferenceFromParameter(this,g);var c=JXG.GetReferenceFromParameter(this,f);var a=this.algebra.midpoint(d,c).usrCoords.slice(1);var e=new JXG.Point(this,a,h,b,true);e.fixed=true;d.addChild(e);c.addChild(e);e.update=function(){if(this.needsUpdate){this.coords=this.board.algebra.midpoint(d,c);this.label.setCoordinates(this.coords);if(this.traced){this.cloneToBackground(true)}}};return e};JXG.Board.prototype.addReflection=function(d,c,h,f){var e=JXG.GetReferenceFromParameter(this,c);var b=JXG.GetReferenceFromParameter(this,d);var a=this.algebra.reflection(b,e).usrCoords.slice(1);var g=new JXG.Point(this,a,h,f,true);g.fixed=true;e.addChild(g);b.addChild(g);g.update=function(){if(this.needsUpdate){this.coords=this.board.algebra.reflection(b,e);this.label.setCoordinates(this.coords);if(this.traced){this.cloneToBackground(true)}}};return g};JXG.Board.prototype.addRotation=function(a,j,h,d,b){var e=JXG.GetReferenceFromParameter(this,j);var g=JXG.GetReferenceFromParameter(this,a);var f=this.algebra.rotation(g,e,h).usrCoords.slice(1);var c=new JXG.Point(this,f,d,b,true);c.fixed=true;e.addChild(c);g.addChild(c);c.update=function(){if(this.needsUpdate){this.coords=this.board.algebra.rotation(g,e,h);this.label.setCoordinates(this.coords);this.needsUpdate=false;if(this.traced){this.cloneToBackground(true)}}};return c};JXG.Board.prototype.addParallel=function(d,c,b,a){var j=JXG.GetReferenceFromParameter(this,c);var k=JXG.GetReferenceFromParameter(this,d);var e=this.numObjects;e++;if((b=="")||(b==null)){b=this.id+"L"+e}var g=this.algebra.parallel(k.point1,k.point2,j).usrCoords.slice(1);var h=new JXG.Point(this,g,b+"P2",a,false);h.fixed=true;j.addChild(h);var f=new JXG.Line(this,j.id,h.id,b,b);f.update=function(){if(this.needsUpdate){this.point2.coords=this.board.algebra.parallel(k.point1,k.point2,j);this.updateStdform();if(this.traced){this.cloneToBackground(true)}}};return f};JXG.Board.prototype.addArrowParallel=function(k,b,m,e,f,g){var n=JXG.GetReferenceFromParameter(this,b);var l=JXG.GetReferenceFromParameter(this,k);var c=this.numObjects;c++;if((m=="")||(m==null)){m=this.id+"A"+c}c++;if((e=="")||(e==null)){e=this.id+"P"+c}var h=this.algebra.parallel(l.point1,l.point2,n).usrCoords.slice(1);var j=new JXG.Point(this,h,e,g,true);j.fixed=true;n.addChild(j);l.addChild(j);var d=new JXG.Line(this,n.id,j.id,m,f);d.setStraight(false,false);d.setArrow(false,true);d.update=function(){if(this.needsUpdate){this.point2.coords=this.board.algebra.parallel(l.point1,l.point2,n);this.updateStdform();if(this.traced){this.cloneToBackground(true)}}};j.update=function(){if(this.needsUpdate){this.coords=this.board.algebra.parallel(l.point1,l.point2,n);if(this.label.show){this.label.setCoordinates(this.coords)}if(this.traced){this.cloneToBackground(true)}}};return[d,j]};JXG.Board.prototype.addParallelPoint=function(g,f,e,h,a){var d=this.numObjects;d++;if((h=="")||(h==null)){h=this.id+"P"+d}g=JXG.GetReferenceFromParameter(this,g);f=JXG.GetReferenceFromParameter(this,f);e=JXG.GetReferenceFromParameter(this,e);var c=this.algebra.parallel(g,f,e).usrCoords.slice(1);var b=new JXG.Point(this,c,h,a,true);b.fixed=true;g.addChild(b);e.addChild(b);if(g.type==JXG.OBJECT_TYPE_POINT){f.addChild(b)}b.update=function(){if(this.needsUpdate){this.coords=this.board.algebra.parallel(g,f,e);this.label.setCoordinates(this.coords);if(this.traced){this.cloneToBackground(true)}}};return b};JXG.Board.prototype.addArrow=function(c){var b=this.numObjects;this.numObjects++;var a=c.id;if((a=="")||(a==null)){a=this.id+"A"+b}this.objects[a]=c;c.id=a;this.renderer.drawArrow(c);return a};JXG.Board.prototype.addAxis=function(c){var b=this.numObjects;this.numObjects++;var a=c.id;if((a=="")||(a==null)){a=this.id+"A"+b}this.objects[a]=c;c.id=a;this.renderer.drawAxis(c);return a};JXG.Board.prototype.addNormal=function(e,c,b,a){var k=JXG.GetReferenceFromParameter(this,c);var m=JXG.GetReferenceFromParameter(this,e);var f=this.numObjects;f++;if((b=="")||(b==null)){b=this.id+"L"+f}var j=this.algebra.perpendicular(m,k);var g=j[0].usrCoords.slice(1);var h=new JXG.Point(this,g,b+"P2","",false);h.fixed=true;k.addChild(h);m.addChild(h);var d;if(j[1]){d=new JXG.Line(this,h.id,k.id,b,a)}else{d=new JXG.Line(this,k.id,h.id,b,a)}d.changed=j[1];d.update=function(){if(this.needsUpdate){var n=this.board.algebra.perpendicular(m,k);h.coords=n[0];if(this.changed!=n[1]){var l=this.point1;this.point1=this.point2;this.point2=l}this.updateStdform();if(this.traced){this.cloneToBackground(true)}}};return d};JXG.Board.prototype.addPerpendicular=function(d,a,k,f,g,b){var n=JXG.GetReferenceFromParameter(this,a);var o=JXG.GetReferenceFromParameter(this,d);var e=this.numObjects;e++;if((k=="")||(k==null)){k=this.id+"L"+e}e++;if((g=="")||(g==null)){g=this.id+"P"+e}var m=this.algebra.perpendicular(o,n);var h=m[0].usrCoords.slice(1);var j=new JXG.Point(this,h,g,b,true);j.fixed=true;n.addChild(j);o.addChild(j);var c;if(m[1]){c=new JXG.Line(this,j.id,n.id,k,f)}else{c=new JXG.Line(this,n.id,j.id,k,f)}c.setStraight(false,false);c.changed=m[1];c.update=function(){if(this.needsUpdate){var p=this.board.algebra.perpendicular(o,n);j.coords=p[0];if(this.changed!=p[1]){var l=this.point1;this.point1=this.point2;this.point2=l}this.updateStdform();if(this.traced){this.cloneToBackground(true)}}};return[c,j]};JXG.Board.prototype.addPerpendicularPoint=function(c,a,e,b){var h=JXG.GetReferenceFromParameter(this,a);var j=JXG.GetReferenceFromParameter(this,c);var d=this.numObjects;d++;if((e=="")||(e==null)){e=this.id+"P"+d}var f=this.algebra.perpendicular(j,h)[0].usrCoords.slice(1);var g=new JXG.Point(this,f,e,b,true);g.fixed=true;h.addChild(g);j.addChild(g);g.update=function(){if(this.needsUpdate){this.coords=this.board.algebra.perpendicular(j,h)[0];this.label.setCoordinates(this.coords);if(this.traced){this.cloneToBackground(true)}}};return g};JXG.Board.prototype.addCircumcenter=function(h,e,d,f,g,c,a){var l=JXG.GetReferenceFromParameter(this,h);var k=JXG.GetReferenceFromParameter(this,e);var j=JXG.GetReferenceFromParameter(this,d);var b=this.algebra.circumcenterMidpoint(l,k,j);var n=new JXG.Point(this,b.usrCoords.slice(1),f,g,true);n.fixed=true;l.addChild(n);k.addChild(n);j.addChild(n);var m=new JXG.Circle(this,"pointRadius",n.id,function(){return this.midpoint.coords.distance(JXG.COORDS_BY_USER,l.coords)},c,a);l.addChild(m);k.addChild(m);j.addChild(m);n.update=function(){if(this.needsUpdate){this.coords=this.board.algebra.circumcenterMidpoint(l,k,j);if(this.label.show){this.label.setCoordinates(this.coords)}if(this.traced){this.cloneToBackground(true)}}};m.update=function(){if(this.needsUpdate){this.updateRadius();this.updateStdform();if(this.traced){this.cloneToBackground(true)}}};return[n,m]};JXG.Board.prototype.addCircumcenterMidpoint=function(f,c,b,d,e){var j=JXG.GetReferenceFromParameter(this,f);var h=JXG.GetReferenceFromParameter(this,c);var g=JXG.GetReferenceFromParameter(this,b);var a=this.algebra.circumcenterMidpoint(j,h,g).usrCoords.slice(1);var k=new JXG.Point(this,a,d,e,true);k.fixed=true;j.addChild(k);h.addChild(k);g.addChild(k);k.update=function(){if(this.needsUpdate){this.coords=this.board.algebra.circumcenterMidpoint(j,h,g);if(this.label.show){this.label.setCoordinates(this.coords)}if(this.traced){this.cloneToBackground(true)}}};return k};JXG.Board.prototype.addIntersection=function(c){var b=this.numObjects;this.numObjects++;var a=c.id;if((a=="")||(a==null)){a=this.id+"I"+b}this.objects[a]=c;c.id=a;c.intersect1.addChild(c);c.intersect2.addChild(c);return a};JXG.Board.prototype.addAngleBisector=function(m,l,k,b,a){var h=JXG.GetReferenceFromParameter(this,m);var f=JXG.GetReferenceFromParameter(this,l);var d=JXG.GetReferenceFromParameter(this,k);var c=this.numObjects;c++;if((b=="")||(b==null)){b=this.id+"L"+c}var g=this.algebra.angleBisector(h,f,d).usrCoords.slice(1);var j=new JXG.Point(this,g,b+"P2","",false);j.fixed=true;h.addChild(j);f.addChild(j);d.addChild(j);var e=new JXG.Line(this,l,j.id,b,a);e.setStraight(false,true);e.update=function(){if(this.needsUpdate){this.point2.coords=this.board.algebra.angleBisector(h,f,d);this.updateStdform();if(this.traced){this.cloneToBackground(true)}}};return e};JXG.Board.prototype.addText=function(c){var b=this.numObjects;this.numObjects++;var a=c.id;if((a=="")||(a==null)){a=this.id+"T"+b}this.objects[a]=c;c.id=a;this.renderer.drawText(c);return a};JXG.Board.prototype.addConditions=function(l){var k=null;var b="var el,x,y,c;\n";var h=l.indexOf("<data>");var g=l.indexOf("</data>");if(h<0){return}while(h>=0){var f=l.slice(h+6,g);var e=f.indexOf("=");var d=f.slice(0,e);var o=f.slice(e+1);e=d.indexOf(".");var a=d.slice(0,e);var c=this.elementsByName[a.unescapeHTML()];var n=d.slice(e+1).replace(/\s+/g,"").toLowerCase();o=this.algebra.geonext2JS(o);o=o.replace(/this\.board\./g,"this.");if(typeof this.elementsByName[a]=="undefined"){alert("debug conditions: |"+a+"| undefined")}b+='el = this.objects["'+c.id+'"];\n';switch(n){case"x":b+="y=el.coords.usrCoords[2];\n";b+="el.setPositionDirectly(JXG.COORDS_BY_USER,"+(o)+",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,"+(o)+"],this);\n";break;case"visible":b+="c="+(o)+";\n";b+="if (c) {el.showElement();} else {el.hideElement();}\n";break;case"position":b+="el.position = "+(o)+";\n";b+="el.update();\n";break;case"stroke":b+="el.strokeColor = "+(o)+";\n";break;case"strokewidth":b+="el.strokeWidth = "+(o)+";\n";break;case"label":break;default:alert("property '"+n+"' in conditions not implemented:"+o);break}l=l.slice(g+7);h=l.indexOf("<data>");g=l.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(c){var b=this.numObjects;this.numObjects++;var a=c.id;if((a=="")||(a==null)){a=this.id+"Im"+b}this.objects[a]=c;this.elementsByName[c.name]=c;c.id=a;this.renderer.drawImage(c);if(!c.visProp.visible){this.renderer.hide(c)}return a};JXG.Board.prototype.addIntegral=function(e,g,a,n,m){if(!JXG.IsArray(a)||(a.length!=5)){a=["","","","",""]}if(!JXG.IsArray(n)||(n.length!=5)){n=["","","","",""]}var r=[];var b={};if((typeof m!="undefined")&&(m!=null)){b=m}b.name=n[0];b.id=a[0];b.slideObject=g;var d=0;if(e[0]>g.points[0].usrCoords[1]){d=e[0]}else{d=g.points[0].usrCoords[1]}var o=board.createElement("point",[d,g.yterm(d)],b);b.name=n[1];b.id=a[1];b.visible=false;b.slideObject=null;var q=board.createElement("point",[function(){return o.X()},0],b);r.push(q);r.push(o);o.addChild(q);var j;for(var k=0;k<g.numberPoints;k++){if((e[0]<=g.points[k].usrCoords[1])&&(g.points[k].usrCoords[1]<=e[1])){j={type:JXG.OBJECT_TYPE_POINT,elementClass:JXG.OBJECT_CLASS_POINT,addChild:function(p){},coords:g.points[k]};r.push(j)}}b.name=n[2];b.id=a[2];b.slideObject=g;b.visible=true;var f=board.createElement("point",[r[r.length-1].coords.usrCoords[1],g.yterm(r[r.length-1].coords.usrCoords[1])],b);b.name=n[3];b.id=a[3];b.slideObject=null;b.visible=false;var h=board.createElement("point",[function(){return f.X()},0],b);r.push(f);r.push(h);f.addChild(h);var l=this.algebra.I([r[0].coords.usrCoords[1],r[r.length-1].coords.usrCoords[1]],g.yterm);var s=board.createElement("text",[function(){return f.X()+0.2},function(){return f.Y()-1},"&int; = "+this.algebra.round(l,4)]);var b={};if((typeof m!="undefined")&&(m!=null)){b=m}b.withLines=false;b.name=n[4];b.id=a[4];b.visible=true;var c=board.createElement("polygon",r,b);c.update=function(){var t;var v=[q,o];for(var p=0;p<g.numberPoints;p++){if((q.X()<=g.points[p].usrCoords[1])&&(g.points[p].usrCoords[1]<=h.X())){t={type:JXG.OBJECT_TYPE_POINT,elementClass:JXG.OBJECT_CLASS_POINT,addChild:function(w){},coords:g.points[p]};v.push(t)}}v.push(f);v.push(h);v.push(q);var u=this.board.algebra.I([r[0].coords.usrCoords[1],r[r.length-1].coords.usrCoords[1]],g.yterm);s.plaintextStr="&int; = "+this.board.algebra.round(u,4);this.vertices=v};o.addChild(c);f.addChild(c);o.addChild(s);f.addChild(s);return c};JXG.Board.prototype.calculateSnapSizes=function(){var c=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=c.scrCoords[1]-b.scrCoords[1];var d=c.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(d)>25){this.snapSizeY*=2;d/=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.fullUpdate=true;this.update();this.fullUpdate=false;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 l=this.zoomX/this.zoomY;var h=0;var d=0;var g=0;var b=0;for(var f in this.objects){if((this.objects[f].elementClass==JXG.OBJECT_CLASS_POINT)&&this.objects[f].visProp.visible){if(this.objects[f].coords.usrCoords[1]<h){h=this.objects[f].coords.usrCoords[1]}if(this.objects[f].coords.usrCoords[1]>d){d=this.objects[f].coords.usrCoords[1]}if(this.objects[f].coords.usrCoords[2]>b){b=this.objects[f].coords.usrCoords[2]}if(this.objects[f].coords.usrCoords[2]<g){g=this.objects[f].coords.usrCoords[2]}}}var j=50;var p=j/(this.unitX*this.zoomX);var o=j/(this.unitY*this.zoomY);var n=d-h+2*p;var m=b-g+2*o;var k=Math.min(this.canvasWidth/(this.unitX*n),this.canvasHeight/(this.unitY*m));var c=k;var e=k*l;var a=-(h-p)*this.unitX*e;var q=(b+o)*this.unitY*c;this.origin=new JXG.Coords(JXG.COORDS_BY_SCREEN,[a,q],this);this.zoomX=e;this.zoomY=c;this.applyZoom()};JXG.Board.prototype.removeObject=function(a){a=JXG.GetReferenceFromParameter(this,a);if(a==undefined){return}try{for(var d in a.childElements){a.childElements[d].board.removeObject(a.childElements[d])}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(c){}};JXG.Board.prototype.initGeonextBoard=function(){var e=new JXG.Point(this,[0,0],this.id+"gOOe0","Ursprung",false);e.fixed=true;var d=new JXG.Point(this,[1,0],this.id+"gXOe0","Punkt_1_0",false);d.fixed=true;var c=new JXG.Point(this,[0,1],this.id+"gYOe0","Punkt_0_1",false);c.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.resizeContainer=function(a,b){this.canvasWidth=1*a;this.canvasHeight=1*b;$(this.container).style.width=(this.canvasWidth)+"px";$(this.container).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>"+this.xmlString.escapeHTML()+"</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 c=-1;if(!this.reducedUpdate){c=1}for(var a in this.objects){var d=this.objects[a];if(!this.fullUpdate&&!d.needsRegularUpdate&&d.afterFirstUpdate){continue}if(b==null||d.id!=b.id){if(c>=0||!d.afterFirstUpdate||this.fullUpdate){d.update(true)}}else{d.update(false);c=5}if(this.reducedUpdate){c--}}};JXG.Board.prototype.updateRenderer=function(b){b=JXG.GetReferenceFromParameter(this,b);var c=-1;if(!this.reducedUpdate){c=1}for(var a in this.objects){var d=this.objects[a];if(!this.fullUpdate&&!d.needsRegularUpdate&&d.afterFirstUpdate){continue}if(b==null||d.id!=b.id){if(c>=0||!d.afterFirstUpdate||this.fullUpdate){d.updateRenderer()}}else{d.updateRenderer();c=5}if(this.reducedUpdate){c--}d.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.createElement=function(b,c,a){if(c==null||c.length==0){return null}var g;b=b.toLowerCase();if(a==null){a={}}for(var d=0;d<c.length;d++){c[d]=JXG.GetReferenceFromParameter(this,c[d])}if(JXG.JSXGraph.elements[b]!=null){g=JXG.JSXGraph.elements[b](this,c,a)}else{throw"JXG.createElement: Unknown element type given: "+b}if(g==undefined){return}if(JXG.IsArray(a)){a=a[0]}try{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)}}}catch(h){}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.COORDS_BY_USER=1;JXG.COORDS_BY_SCREEN=2;JXG.Coords=function(c,b,a){this.board=a;this.usrCoords=[1,0,0];this.scrCoords=[1,0,0];if(c==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(){this.usrCoords[0]=1;this.usrCoords[1]=(this.scrCoords[1]-this.board.origin.scrCoords[1])/(this.board.unitX*this.board.zoomX);this.usrCoords[2]=(this.board.origin.scrCoords[2]-this.scrCoords[2])/(this.board.unitY*this.board.zoomY)};JXG.Coords.prototype.distance=function(d,c){var b=0;if(d==JXG.COORDS_BY_USER){for(var a=1;a<this.board.dimension+1;a++){b+=(this.usrCoords[a]-c.usrCoords[a])*(this.usrCoords[a]-c.usrCoords[a])}}else{for(var a=1;a<this.board.dimension+1;a++){b+=(this.scrCoords[a]-c.scrCoords[a])*(this.scrCoords[a]-c.scrCoords[a])}}return Math.sqrt(b)};JXG.Coords.prototype.setCoordinates=function(b,a){if(b==JXG.COORDS_BY_USER){this.usrCoords[1]=a[0];this.usrCoords[2]=a[1];this.usr2screen()}else{this.scrCoords[1]=a[0];this.scrCoords[2]=a[1];this.screen2usr()}};JXG.Point=function(c,d,e,b,a){this.constructor();this.type=JXG.OBJECT_TYPE_POINT;this.elementClass=JXG.OBJECT_CLASS_POINT;this.init(c,e,b);if(d==null){d=[0,0]}this.coords=new JXG.Coords(JXG.COORDS_BY_USER,d,this.board);this.initialCoords=new JXG.Coords(JXG.COORDS_BY_USER,d,this.board);this.label=new JXG.Label(this.board,this.name,this.coords,this.id+"Label");this.label.show=a;if(!a){this.label.hiddenByParent=true}this.fixed=false;this.position;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,c){var a=this.coords.scrCoords;return((Math.abs(a[1]-b)<this.r+2)&&(Math.abs(a[2]-c))<this.r+2)};JXG.Point.prototype.update=function(e){if(!this.needsUpdate){return}if(typeof e=="undefined"){e=false}if(this.traced){this.cloneToBackground(true)}if(this.type==JXG.OBJECT_TYPE_GLIDER){if(this.slideObject.type==JXG.OBJECT_TYPE_CIRCLE){if(e){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 d=this.slideObject.point1.coords;var h=this.slideObject.point2.coords;if(e){this.coords.setCoordinates(JXG.COORDS_BY_USER,[d.usrCoords[1]+this.position*(h.usrCoords[1]-d.usrCoords[1]),d.usrCoords[2]+this.position*(h.usrCoords[2]-d.usrCoords[2])])}else{var j=1;var n=d.distance(JXG.COORDS_BY_USER,this.coords);var b=d.distance(JXG.COORDS_BY_USER,h);var g=h.distance(JXG.COORDS_BY_USER,this.coords);if(((n>b)||(g>b))&&(n<g)){j=-1}this.position=j*n/b}var c=this.slideObject.point1.coords.scrCoords;var m=this.slideObject.point2.coords.scrCoords;var f;if(this.slideObject.getSlope()==0){f=1}else{f=2}var k=this.coords.scrCoords[f];if(!this.slideObject.visProp.straightFirst){if(c[f]<m[f]){if(k<c[f]){this.coords=this.slideObject.point1.coords}}else{if(c[f]>m[f]){if(k>c[f]){this.coords=this.slideObject.point1.coords}}}}if(!this.slideObject.visProp.straightLast){if(c[f]<m[f]){if(k>m[f]){this.coords=this.slideObject.point2.coords}}else{if(c[f]>m[f]){if(k<m[f]){this.coords=this.slideObject.point2.coords}}}}if(this.onPolygon){var o=this.slideObject.point1.coords;var l=this.slideObject.point2.coords;if(Math.abs(this.coords.scrCoords[1]-o.scrCoords[1])<this.r&&Math.abs(this.coords.scrCoords[2]-o.scrCoords[2])<this.r){var a=this.slideObject.parentPolygon;for(var f=0;f<a.borders.length;f++){if(this.slideObject==a.borders[f]){this.slideObject=a.borders[(f-1+a.borders.length)%a.borders.length];break}}}else{if(Math.abs(this.coords.scrCoords[1]-l.scrCoords[1])<this.r&&Math.abs(this.coords.scrCoords[2]-l.scrCoords[2])<this.r){var a=this.slideObject.parentPolygon;for(var f=0;f<a.borders.length;f++){if(this.slideObject==a.borders[f]){this.slideObject=a.borders[(f+1+a.borders.length)%a.borders.length];break}}}}}}else{if(this.slideObject.type==JXG.OBJECT_TYPE_CURVE){this.coords=this.board.algebra.projectPointToCurve(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;if(this.isReal){if(a!=this.isReal){this.board.renderer.show(this);if(this.label.show){this.board.renderer.show(this.label)}}this.board.renderer.updatePoint(this)}else{if(a!=this.isReal){this.board.renderer.hide(this);if(this.label.show){this.board.renderer.hide(this.label)}}}}if(this.label.show&&this.isReal){this.label.setCoordinates(this.coords);this.board.renderer.updateLabel(this.label)}};JXG.Point.prototype.X=function(){return this.coords.usrCoords[1]};JXG.Point.prototype.Y=function(){return this.coords.usrCoords[2]};JXG.Point.prototype.XEval=function(){return this.coords.usrCoords[1]};JXG.Point.prototype.YEval=function(){return this.coords.usrCoords[2]};JXG.Point.prototype.Dist=function(a){return this.coords.distance(JXG.COORDS_BY_USER,a.coords)};JXG.Point.prototype.setPositionDirectly=function(d,a,c){var b=this.coords;this.coords=new JXG.Coords(d,[a,c],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(e,a,d){var c=this.coords;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(this,b)}if(this.group.length!=0){}else{this.update()}};JXG.Point.prototype.setPosition=function(c,a,b){this.setPositionByTransform(c,a,b)};JXG.Point.prototype.makeGlider=function(a){this.slideObject=JXG.GetReferenceFromParameter(this.board,a);this.type=JXG.OBJECT_TYPE_GLIDER;this.slideObject.addChild(this);this.needsUpdate=true;this.update()};JXG.Point.prototype.addConstraint=function(e,c){this.type=JXG.OBJECT_TYPE_CAS;var d=this.board.elementsByName;if(c==null){this.updateConstraint=function(){this.coords=e()};if(!this.board.isSuspendedUpdate){this.update()}return}if(typeof e=="string"){var b=this.board.algebra.geonext2JS(e);this.XEval=new Function("","return "+b+";")}else{if(typeof e=="function"){this.XEval=e}else{if(typeof e=="number"){this.XEval=function(){return e}}}}if(typeof c=="string"){var f=this.board.algebra.geonext2JS(c);this.YEval=new Function("","return "+f+";")}else{if(typeof c=="function"){this.YEval=c}else{if(typeof c=="number"){this.YEval=function(){return c}}}}var a="this.coords.setCoordinates(JXG.COORDS_BY_USER,[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(c,a){if(this.transformations.length==0){this.baseElement=c}var d;if(JXG.IsArray(a)){d=a}else{d=[a]}for(var b=0;b<d.length;b++){this.transformations.push(d[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(l,f){this.intervalCount++;if(this.intervalCount>f){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 j=this.slideObject.getSlope();var g;var e;if(j!="INF"){var d=Math.atan(j);g=Math.round((this.intervalCount/f)*b*Math.cos(d));e=Math.round((this.intervalCount/f)*b*Math.sin(d))}else{g=0;e=Math.round((this.intervalCount/f)*b)}var c;var k=1;if(l<0){c=this.slideObject.point2;if(this.slideObject.point2.coords.scrCoords[1]-this.slideObject.point1.coords.scrCoords[1]>0){k=-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){k=-1}}}}else{c=this.slideObject.point1;if(this.slideObject.point1.coords.scrCoords[1]-this.slideObject.point2.coords.scrCoords[1]>0){k=-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){k=-1}}}}this.coords.setCoordinates(JXG.COORDS_BY_SCREEN,[c.coords.scrCoords[1]+k*g,c.coords.scrCoords[2]+k*e])}else{if(this.slideObject.type==JXG.OBJECT_TYPE_CURVE){var a;if(l>0){a=Math.round(this.intervalCount/f*this.board.canvasWidth)}else{a=Math.round((f-this.intervalCount)/f*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 d;if(l<0){d=this.intervalCount/f*2*Math.PI}else{d=(f-this.intervalCount)/f*2*Math.PI}var h=this.slideObject.getRadius();this.coords.setCoordinates(JXG.COORDS_BY_USER,[this.slideObject.midpoint.coords.usrCoords[1]+h*Math.cos(d),this.slideObject.midpoint.coords.usrCoords[2]+h*Math.sin(d)])}}}this.board.update(this)};JXG.Point.prototype.setStyle=function(a){this.visProp.style=a;this.board.renderer.changePointStyle(this)};JXG.Point.prototype.remove=function(){this.board.renderer.remove($(this.label.id));if(this.visProp.style>=3&&this.visProp.style<=9){this.board.renderer.remove($(this.id))}else{this.board.renderer.remove($(this.id+"_x1"));this.board.renderer.remove($(this.id+"_x2"))}};JXG.Point.prototype.getTextAnchor=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]=$(b.id)}else{this.traces[b.id+"_x1"]=$(b.id+"_x1");this.traces[b.id+"_x2"]=$(b.id+"_x2")}delete b};JXG.createPoint=function(b,d,c){var a;if((JXG.IsNumber(d[0]))&&(JXG.IsNumber(d[1]))){a=new JXG.Point(b,d,c.id,c.name,(c.visible==undefined)||b.algebra.str2Bool(c.visible));if(c.slideObject!=null){a.makeGlider(c.slideObject)}else{a.baseElement=a}}else{if((JXG.IsString(d[0])||JXG.IsNumber(d[0])||JXG.IsFunction(d[0]))&&(JXG.IsString(d[1])||JXG.IsNumber(d[1]))||JXG.IsFunction(d[1])){a=new JXG.Point(b,[0,0],c.id,c.name,(c.visible==undefined)||b.algebra.str2Bool(c.visible));a.addConstraint(d[0],d[1])}else{if((typeof d[0]=="function")&&d[1]==null){a=new JXG.Point(b,[0,0],c.id,c.name,(c.visible==undefined)||b.algebra.str2Bool(c.visible));a.addConstraint(d[0])}else{if((typeof d[0]=="object")&&(typeof d[1]=="object")){a=new JXG.Point(b,[0,0],c.id,c.name,(c.visible==undefined)||b.algebra.str2Bool(c.visible));a.addTransform(d[0],d[1])}else{throw ("JSXGraph error: Can't create point with parent types '"+(typeof d[0])+"' and '"+(typeof d[1])+"'.")}}}}return a};JXG.createGlider=function(b,d,c){var a;if(d.length==1){a=new JXG.Point(b,[0,0],c.id,c.name,(c.visible==undefined)||b.algebra.str2Bool(c.visible))}else{a=new JXG.Point(b,d.slice(0,-1),c.id,c.name,(c.visible==undefined)||b.algebra.str2Bool(c.visible))}a.makeGlider(d[d.length-1]);return a};JXG.JSXGraph.registerElement("point",JXG.createPoint);JXG.JSXGraph.registerElement("glider",JXG.createGlider);JXG.Line=function(b,d,c,e,a){this.constructor();this.init(b,e,a);this.type=JXG.OBJECT_TYPE_LINE;this.elementClass=JXG.OBJECT_CLASS_LINE;this.point1=JXG.GetReferenceFromParameter(this.board,d);this.point2=JXG.GetReferenceFromParameter(this.board,c);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.visProp.withTicks=this.board.options.line.ticks.withTicks;this.ticksDelta=this.board.options.line.ticks.ticksDelta;this.parentPolygon=null;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 b=this.point1.coords.scrCoords;var k=this.point2.coords.scrCoords;var h=new JXG.Coords(JXG.COORDS_BY_SCREEN,[j,g],this.board);var l=false;var c;var d=this.getSlope();var f=this.getRise();if(this.visProp.straightFirst&&this.visProp.straightLast){if(d!="INF"){for(c=-this.r;c<this.r;c++){l=l|(Math.abs(g-(d*(j+c)+f))<this.r)}}else{l=(Math.abs(j-b[1])<this.r)}}else{if(d!="INF"){for(c=-this.r;c<this.r;c++){l=l|(Math.abs(g-(d*(j+c)+f))<this.r)}if(l){var m=h.distance(JXG.COORDS_BY_SCREEN,this.point1.coords);var e=h.distance(JXG.COORDS_BY_SCREEN,this.point2.coords);var a=this.point1.coords.distance(JXG.COORDS_BY_SCREEN,this.point2.coords);if((m>a)||(e>a)){if(m<e){if(!this.visProp.straightFirst){l=false}}else{if(!this.visProp.straightLast){l=false}}}}}else{l=(Math.abs(j-b[1])<this.r);if(l){if(!this.visProp.straightFirst){if(b[2]<k[2]){if(g<b[2]){l=false}}else{if(b[2]>k[2]){if(g>b[2]){l=false}}}}if(!this.visProp.straightLast){if(b[2]<k[2]){if(g>k[2]){l=false}}else{if(b[2]>k[2]){if(g<k[2]){l=false}}}}}}}return l};JXG.Line.prototype.update=function(){if(this.needsUpdate){if(true||!this.board.geonextCompatibilityMode){this.updateStdform()}if(this.visProp.withTicks){this.updateTickCoordinates()}}if(this.traced){this.cloneToBackground(true)}};JXG.Line.prototype.updateStdform=function(){var a=[];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.updateTickCoordinates=function(h){if(typeof h=="undefined"){h=false}if(!this.visProp.withTicks){return}var g=new JXG.Coords(JXG.COORDS_BY_USER,[this.point1.coords.usrCoords[1],this.point1.coords.usrCoords[2]],this.board);var e=new JXG.Coords(JXG.COORDS_BY_USER,[this.point2.coords.usrCoords[1],this.point2.coords.usrCoords[2]],this.board);this.board.renderer.calcStraight(this,g,e);var n=this.point1.coords;var b=this.ticks.length;this.ticks=new Array();var p=n.usrCoords[1]-g.usrCoords[1];var o=n.usrCoords[2]-g.usrCoords[2];var k=Math.sqrt(p*p+o*o);var d=(this.ticksDelta*p)/(k);var a=(this.ticksDelta*o)/(k);var m=n.usrCoords[1];var l=n.usrCoords[2];this.ticks[0]=new JXG.Coords(JXG.COORDS_BY_USER,[m,l],this.board);var j=Math.floor(k/this.ticksDelta);for(var f=0;f<j;f++){m=m-d;l=l-a;this.ticks[f+1]=new JXG.Coords(JXG.COORDS_BY_USER,[m,l],this.board)}var c=j;p=n.usrCoords[1]-e.usrCoords[1];o=n.usrCoords[2]-e.usrCoords[2];k=Math.sqrt(p*p+o*o);d=(this.ticksDelta*p)/(k);a=(this.ticksDelta*o)/(k);m=n.usrCoords[1];l=n.usrCoords[2];j=Math.floor(k/this.ticksDelta);for(var f=0;f<j;f++){m=m-d;l=l-a;this.ticks[c+f+1]=new JXG.Coords(JXG.COORDS_BY_USER,[m,l],this.board)}if(!h){this.board.renderer.updateAxisTicks(this,b)}this.board.renderer.updateAxisTicksInnerLoop(this,0)};JXG.Line.prototype.updateRenderer=function(){if(this.needsUpdate&&this.visProp.visible){var 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)}this.board.renderer.updateLine(this)}else{if(a!=this.isReal){this.board.renderer.hide(this)}}this.board.renderer.updateLine(this);this.needsUpdate=false}};JXG.Line.prototype.enableTicks=function(){if(this.visProp.withTicks){return}this.visProp.withTicks=true;this.updateTickCoordinates()};JXG.Line.prototype.disableTicks=function(){if(!this.visProp.withTicks){return}this.visProp.withTicks=false;this.board.renderer.removeAxisTicks(this);this.ticks=new Array()};JXG.Line.prototype.getRise=function(){var a=this.point1.coords.scrCoords;var b=this.point2.coords.scrCoords;return Math.round((a[2]-(a[1]*(b[2]-a[2]))/(b[1]-a[1])))};JXG.Line.prototype.getSlope=function(){var b=this.point1.coords.scrCoords;var a=this.point2.coords.scrCoords;if(Math.abs(a[1]-b[1])>=0.0001){return((a[2]-b[2])/(a[1]-b[1]))}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.cloneToBackground=function(b){var d={};d.id=this.id+"T"+this.numTraces;this.numTraces++;d.point1=this.point1;d.point2=this.point2;d.stdform=this.stdform;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.board.origin=this.board.origin;d.board.canvasHeight=this.board.canvasHeight;d.board.canvasWidth=this.board.canvasWidth;d.board.dimension=this.board.dimension;d.board.algebra=this.board.algebra;d.visProp=this.visProp;var a=this.getSlope();var c=this.getRise();d.getSlope=function(){return a};d.getRise=function(){return c};this.board.renderer.enhancedRendering=true;this.board.renderer.drawLine(d);this.board.renderer.enhancedRendering=false;this.traces[d.id]=$(d.id);delete d};JXG.Line.prototype.addTransform=function(a){var c;if(JXG.IsArray(a)){c=a}else{c=[a]}for(var b=0;b<c.length;b++){this.point1.transformations.push(c[b]);this.point2.transformations.push(c[b])}};JXG.Line.prototype.setPosition=function(d,a,c){var b=this.board.createElement("transform",[a,c],{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.createLine=function(b,f,e){var a;if((f[0].elementClass==JXG.OBJECT_CLASS_POINT)&&(f[1].elementClass==JXG.OBJECT_CLASS_POINT)){var d=JXG.GetReferenceFromParameter(b,f[0]);var c=JXG.GetReferenceFromParameter(b,f[1]);a=new JXG.Line(b,d.id,c.id,e.id,e.name)}else{throw ("Can't create line with parent types '"+(typeof f[0])+"' and '"+(typeof f[1])+"'.")}return a};JXG.JSXGraph.registerElement("line",JXG.createLine);JXG.createArrow=function(d,b,a){var c;if((JXG.IsPoint(b[0]))&&(JXG.IsPoint(b[1]))){c=new JXG.Line(d,b[0],b[1],a.id,a.name);c.setStraight(false,false);c.setArrow(false,true)}else{throw ("Can't create arrow with parent types '"+(typeof b[0])+"' and '"+(typeof b[1])+"'.")}return c};JXG.JSXGraph.registerElement("arrow",JXG.createArrow);JXG.createAxis=function(f,b,a){if((JXG.IsArray(b[0])||JXG.IsPoint(b[0]))&&(JXG.IsArray(b[1])||JXG.IsPoint(b[1]))){var e;if(JXG.IsPoint(b[0].type)){e=b[0]}else{e=new JXG.Point(f,b[0],"","",false)}var c;if(JXG.IsPoint(b[1])){c=b[1]}else{c=new JXG.Point(f,b[1],"","",false)}e.fixed=true;c.fixed=true;if(a==null){a=new Object()}a.lastArrow=true;a.straightFirst=true;a.straightLast=true;a.withTicks=true;if(a.strokeWidth==null){a.strokeWidth=1}var d=f.createElement("line",[e,c],a);d.needsRegularUpdate=false}else{throw ("Can't create point with parent types '"+(typeof b[0])+"' and '"+(typeof b[1])+"'.")}return d};JXG.JSXGraph.registerElement("axis",JXG.createAxis);JXG.Group=function(e,h,a){this.board=e;this.objects={};var f=this.board.numObjects;this.board.numObjects++;if((h=="")||(h==null)||(typeof h=="undefined")){this.id=this.board.id+"Group"+f}else{this.id=h}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);var d;if((arguments.length==4)&&(Object.isArray(arguments[3]))){d=arguments[3]}else{d=[];for(var b=3;b<arguments.length;b++){d.push(arguments[b])}}for(var b=0;b<d.length;b++){var g=JXG.GetReferenceFromParameter(this.board,d[b]);if((!g.fixed)&&((g.type==JXG.OBJECT_TYPE_POINT)||(g.type==JXG.OBJECT_TYPE_GLIDER))){if(g.group.length!=0){this.addGroup(g.group[g.group.length-1])}else{this.addPoint(g)}}}for(var c in this.objects){this.objects[c].group.push(this)}this.dX=0;this.dY=0};JXG.Group.prototype.ungroup=function(){for(var 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 b=null;for(var c in this.objects){b=this.objects[c];if(b.id!=a.id){b.coords=new JXG.Coords(JXG.COORDS_BY_SCREEN,[b.coords.scrCoords[1]+this.dX,b.coords.scrCoords[2]+this.dY],b.board)}}for(var c in this.objects){if(this.board.objects[c]!=undefined){this.objects[c].update(false)}else{delete (this.objects[c])}}};JXG.Group.prototype.addPoint=function(a){this.objects[a.id]=a};JXG.Group.prototype.addPoints=function(a){for(var b in a){this.objects[b.id]=b}};JXG.Group.prototype.addGroup=function(b){for(var a in b.objects){this.addPoint(b.objects[a])}};JXG.createGroup=function(c,b,a){var d=new JXG.Group(c,a.id,a.name,b);return d};JXG.JSXGraph.registerElement("group",JXG.createGroup);JXG.Circle=function(d,f,c,b,e,a){this.constructor();this.init(d,e,a);this.type=JXG.OBJECT_TYPE_CIRCLE;this.elementClass=JXG.OBJECT_CLASS_CIRCLE;this.method=f;this.midpoint=JXG.GetReferenceFromParameter(this.board,c);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(f=="twoPoints"){this.point2=JXG.GetReferenceFromParameter(d,b);this.point2.addChild(this);this.radius=this.getRadius();this.id=this.board.addCircle(this)}else{if(f=="pointRadius"){this.generateTerm(b);this.updateRadius();this.id=this.board.addCircle(this);this.notifyParents(b)}else{if(f=="pointLine"){this.line=JXG.GetReferenceFromParameter(d,b);this.radius=this.line.point1.coords.distance(JXG.COORDS_BY_USER,this.line.point2.coords);this.line.addChild(this);this.id=this.board.addCircle(this)}else{if(f=="pointCircle"){this.circle=JXG.GetReferenceFromParameter(d,b);this.radius=this.circle.getRadius();this.circle.addChild(this);this.id=this.board.addCircle(this)}}}}};JXG.Circle.prototype=new JXG.GeometryElement;JXG.Circle.prototype.hasPoint=function(a,f){var e=this.board.options.precision.hasPoint;e=e/(this.board.unitX*this.board.zoomX);var d=new JXG.Coords(JXG.COORDS_BY_SCREEN,[a,f],this.board);var b=this.getRadius();var c=Math.sqrt(Math.pow(this.midpoint.coords.usrCoords[1]-d.usrCoords[1],2)+Math.pow(this.midpoint.coords.usrCoords[2]-d.usrCoords[2],2));return(Math.abs(c-b)<e)};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)}this.board.renderer.updateCircle(this)}else{if(a!=this.isReal){this.board.renderer.hide(this)}}this.needsUpdate=false}};JXG.Circle.prototype.generateTerm=function(b){if(typeof b=="string"){var c=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 c=this.board.elementsByName;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.cloneToBackground=function(a){var c={};c.id=this.id+"T"+this.numTraces;this.numTraces++;c.midpoint={};c.midpoint.coords=this.midpoint.coords;var b=this.getRadius();c.getRadius=function(){return b};c.board={};c.board.unitX=this.board.unitX;c.board.unitY=this.board.unitY;c.board.zoomX=this.board.zoomX;c.board.zoomY=this.board.zoomY;c.visProp=this.visProp;this.board.renderer.drawCircle(c);this.traces[c.id]=$(c.id);delete c};JXG.Circle.prototype.addTransform=function(a){var c;if(JXG.IsArray(a)){c=a}else{c=[a]}for(var b=0;b<c.length;b++){this.midpoint.transformations.push(c[b]);if(this.method=="twoPoints"){this.point2.transformations.push(c[b])}}};JXG.Circle.prototype.setPosition=function(d,a,c){var b=this.board.createElement("transform",[a,c],{type:"translate"});this.addTransform(b)};JXG.createCircle=function(b,d,c){var a;if((d[0].elementClass==JXG.OBJECT_CLASS_POINT)&&(d[1].elementClass==JXG.OBJECT_CLASS_POINT)){a=new JXG.Circle(b,"twoPoints",d[0],d[1],c.id,c.name)}else{if((JXG.IsNumber(d[0])||JXG.IsFunction(d[0])||JXG.IsString(d[0]))&&(d[1].elementClass==JXG.OBJECT_CLASS_POINT)){a=new JXG.Circle(b,"pointRadius",d[1],d[0],c.id,c.name)}else{if((JXG.IsNumber(d[1])||JXG.IsFunction(d[1])||JXG.IsString(d[1]))&&(d[0].elementClass==JXG.OBJECT_CLASS_POINT)){a=new JXG.Circle(b,"pointRadius",d[0],d[1],c.id,c.name)}else{if((d[0].type==JXG.OBJECT_TYPE_CIRCLE)&&(d[1].elementClass==JXG.OBJECT_CLASS_POINT)){a=new JXG.Circle(b,"pointCircle",d[1],d[0],c.id,c.name)}else{if((d[1].type==JXG.OBJECT_TYPE_CIRCLE)&&(d[0].elementClass==JXG.OBJECT_CLASS_POINT)){a=new JXG.Circle(b,"pointCircle",d[0],d[1],c.id,c.name)}else{if((d[0].type==JXG.OBJECT_TYPE_LINE)&&(d[1].elementClass==JXG.OBJECT_CLASS_POINT)){a=new JXG.Circle(b,"pointLine",d[1],d[0],c.id,c.name)}else{if((d[1].type==JXG.OBJECT_TYPE_LINE)&&(d[0].elementClass==JXG.OBJECT_CLASS_POINT)){a=new JXG.Circle(b,"pointLine",d[0],d[1],c.id,c.name)}else{throw ("Can't create circle with parent types '"+(typeof d[0])+"' and '"+(typeof d[1])+"'.")}}}}}}}return a};JXG.JSXGraph.registerElement("circle",JXG.createCircle);JXG.Polygon=function(g,h,j,b,a,c){this.constructor();this.type=JXG.OBJECT_TYPE_POLYGON;this.elementClass=JXG.OBJECT_CLASS_AREA;this.init(g,b,a);if((typeof c=="undefined")||(c==null)){c=true}this.withLines=c;this.vertices=[];for(var e=0;e<h.length;e++){var f=JXG.GetReferenceFromParameter(this.board,h[e]);this.vertices[e]=f}if((typeof j=="undefined")||(j==null)){j=[];for(var e=0;e<h.length-1;e++){j[e]={}}}if(this.vertices[this.vertices.length-1]!=this.vertices[0]){this.vertices.push(this.vertices[0]);j.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 d;this.borders=[];if(c){for(var e=0;e<this.vertices.length-1;e++){d=new JXG.Line(g,this.vertices[e],this.vertices[e+1],j[e].id,j[e].name);d.setStraight(false,false);this.borders[e]=d;d.parentPolygon=this}}for(var e=0;e<this.vertices.length-1;e++){var f=JXG.GetReferenceFromParameter(this.board,this.vertices[e]);f.addChild(this)}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}};JXG.Polygon.prototype.getTextAnchor=function(){var e=0;var d=0;var c=0;var g=0;e=c=this.vertices[0].X();d=g=this.vertices[0].Y();for(var f=0;f<this.vertices.length;f++){if(this.vertices[f].X()<e){e=this.vertices[f].X()}if(this.vertices[f].X()>c){c=this.vertices[f].X()}if(this.vertices[f].Y()>d){d=this.vertices[f].Y()}if(this.vertices[f].Y()<g){g=this.vertices[f].Y()}}return new JXG.Coords(JXG.COORDS_BY_USER,[(e+c)*0.5,(d+g)*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(c,e,d){var b;for(var a=0;a<e.length;a++){if(!JXG.IsPoint(e[a])){throw ("Can't create polygon with parent types other than 'point'.")}}b=new JXG.Polygon(c,e,d.borders,d.id,d.name,d.withLines);return b};JXG.JSXGraph.registerElement("polygon",JXG.createPolygon);JXG.Curve=function(c,b,d,a){this.constructor();this.points=[];this.numberPoints=0;this.type=JXG.OBJECT_TYPE_CURVE;this.elementClass=JXG.OBJECT_CLASS_CURVE;this.init(c,d,a);this.visProp.strokeWidth=this.board.options.curve.strokeWidth;this.visProp.visible=true;this.dataX=null;this.dataY=null;this.curveType="none";this.curveType=null;if(b[2]!=null){this.varname=b[2]}else{this.varname="x"}this.xterm=b[0];this.yterm=b[1];this.generateTerm(this.xterm,this.yterm,this.varname,b[3],b[4]);this.updateCurve();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(o,m){var q,k,h,r,e,b,p,n;var a=5/(this.board.unitX*this.board.zoomX);var f=new JXG.Coords(JXG.COORDS_BY_SCREEN,[o,m],this.board);o=f.usrCoords[1];m=f.usrCoords[2];if(this.curveType=="parameter"){var l=300;var g=(this.maxX()-this.minX())/l;for(e=0,q=this.minX();e<l;e++){p=this.X(q);n=this.Y(q);for(b=0;b<this.transformations.length;b++){r=this.transformations[b];r.update();h=r.matVecMult(r.matrix,[1,p,n]);p=h[1];n=h[2]}k=Math.sqrt((o-p)*(o-p)+(m-n)*(m-n));if(k<a){return true}q+=g}}else{if(this.curveType=="polar"){return false}else{var l=300;var g=(this.maxX()-this.minX())/l;for(e=0,q=this.minX();e<l;e++){p=this.X(q);n=this.Y(q);for(b=0;b<this.transformations.length;b++){r=this.transformations[b];r.update();h=r.matVecMult(r.matrix,[1,p,n]);p=h[1];n=h[2]}k=Math.sqrt((o-p)*(o-p)+(m-n)*(m-n));if(k<a){return true}q+=g}}}return(k<a)};JXG.Curve.prototype.allocatePoints=function(){if(this.points.length<this.numberPoints){for(var 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}};JXG.Curve.prototype.updateDataArray=function(){};JXG.Curve.prototype.updateCurve=function(){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*1}else{this.numberPoints=this.board.canvasWidth*0.5}}this.allocatePoints();var d=this.numberPoints;var c=this.minX();var j=this.maxX();var g,f;var h=(j-c)/d;for(var b=0;b<d;b++){if(this.dataX!=null){g=b;if(this.dataY!=null){f=b}else{f=this.X(g)}}else{g=c+b*h;f=g}if(this.curveType=="polar"){var a=this.X(g);var e=[0,0];if(this.dataY!=null){e=this.dataY}this.points[b].setCoordinates(JXG.COORDS_BY_USER,[a*Math.cos(g)+e[0],a*Math.sin(g)+e[1]])}else{this.points[b].setCoordinates(JXG.COORDS_BY_USER,[this.X(g),this.Y(f)])}this.updateTransform(this.points[b])}};JXG.Curve.prototype.updateTransform=function(d){if(this.transformations.length==0){return d}for(var b=0;b<this.transformations.length;b++){var a=this.transformations[b];a.update();var e=a.matVecMult(a.matrix,d.usrCoords);d.setCoordinates(JXG.COORDS_BY_USER,[e[1],e[2]])}return d};JXG.Curve.prototype.addTransform=function(a){var c;if(JXG.IsArray(a)){c=a}else{c=[a]}for(var b=0;b<c.length;b++){this.transformations.push(c[b])}};JXG.Curve.prototype.setPosition=function(d,a,c){var b=this.board.createElement("transform",[a,c],{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(j,g,a,e,h){this.numberPoints=this.board.canvasWidth*1;if(typeof j=="string"){var d=this.board.algebra.geonext2JS(j);this.X=new Function(a,"return "+d+";");this.curveType="graph"}else{if(typeof j=="function"){this.X=j;this.curveType="parameter"}else{if(typeof j=="number"){this.X=function(){return j};this.curveType="parameter"}else{if(typeof j=="object"){this.curveType="plot";this.dataX=j;this.X=function(k){return this.dataX[k]};this.numberPoints=this.dataX.length}}}}if(typeof g=="string"){var b=this.board.algebra.geonext2JS(g);this.Y=new Function(a,"return "+b+";")}else{if(typeof g=="function"){this.Y=g}else{if(typeof g=="number"){this.Y=function(){return g}}else{if(typeof g=="object"){this.dataY=g;this.Y=function(k){return this.dataY[k]}}}}}if(e!=null){if(typeof e=="string"){var c=this.board.algebra.geonext2JS(e);this.minX=new Function("","return "+c+";")}else{if(typeof e=="function"){this.minX=e}else{if(typeof e=="number"){this.minX=function(){return e}}}}}if(h!=null){if(typeof h=="string"){var f=this.board.algebra.geonext2JS(h);this.maxX=new Function("","return "+f+";")}else{if(typeof h=="function"){this.maxX=h}else{if(typeof h=="number"){this.maxX=function(){return h}}}}}};JXG.Curve.prototype.notifyParents=function(b){var a=null;var c=this.board.elementsByName;this.board.algebra.findDependencies(this,b)};JXG.createCurve=function(c,b,a){return new JXG.Curve(c,b,a.id,a.name)};JXG.JSXGraph.registerElement("curve",JXG.createCurve);JXG.createSpline=function(c,b,a){var d=function(g){var e=new Array();var j=new Array();for(var f=0;f<b.length;f++){if(!JXG.IsPoint(b[f])){throw"JXG.createSpline: Parents has to be an array of JXG.Point."}e.push(b[f].X());j.push(b[f].Y())}var h=JXG.Math.Numerics.splineDef(e,j);return JXG.Math.Numerics.splineEval(g,e,j,h)};return new JXG.Curve(c,["x",d],a)};JXG.JSXGraph.registerElement("spline",JXG.createSpline);JXG.Arc=function(b,e,d,c,f,a){this.constructor();this.type=JXG.OBJECT_TYPE_ARC;this.elementClass=JXG.OBJECT_CLASS_CIRCLE;this.init(b,f,a);this.midpoint=JXG.GetReferenceFromParameter(this.board,e);this.point2=JXG.GetReferenceFromParameter(this.board,d);this.point3=JXG.GetReferenceFromParameter(this.board,c);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.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(j,h){var l=this.r/(this.board.unitX*this.board.zoomX);var f=new JXG.Coords(JXG.COORDS_BY_SCREEN,[j,h],this.board);var a=this.getRadius();var g=Math.sqrt(Math.pow(this.midpoint.coords.usrCoords[1]-f.usrCoords[1],2)+Math.pow(this.midpoint.coords.usrCoords[2]-f.usrCoords[2],2));var k=(Math.abs(g-a)<l);if(k){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 e=this.board.algebra.trueAngle(this.point2,this.midpoint,b);var d=this.board.algebra.trueAngle(this.point3,this.midpoint,b);var m={};m.coords=f;var c=this.board.algebra.trueAngle(m,this.midpoint,b);if(e>=d){if(e<c||c<d){k=false}}else{if(c>e){if(c<d){k=false}}}}return k};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.updateRenderer=function(){if(this.needsUpdate){this.board.renderer.updateArc(this);this.needsUpdate=false}};JXG.Arc.prototype.setArrow=function(b,a){this.visProp.firstArrow=b;this.visProp.lastArrow=a;this.board.renderer.updateArc(this)};JXG.createArc=function(d,b,a){var c;if((JXG.IsPoint(b[0]))&&(JXG.IsPoint(b[1]))&&(JXG.IsPoint(b[2]))){c=new JXG.Arc(d,b[0],b[1],b[2],a.id,a.name)}else{throw ("Can't create Arc with parent types '"+(typeof b[0])+"' and '"+(typeof b[1])+"' and '"+(typeof b[2])+"'.")}return c};JXG.JSXGraph.registerElement("arc",JXG.createArc);JXG.Sector=function(j,q,o,n,b,k,e){this.constructor();this.type=JXG.OBJECT_TYPE_SECTOR;this.elementClass=JXG.OBJECT_CLASS_AREA;this.init(j,e,"");if(!JXG.IsArray(b)){b=[null,null,null,null]}if(!JXG.IsArray(k)){k=[null,null,null,null]}this.point1=JXG.GetReferenceFromParameter(this.board,q);this.point2=JXG.GetReferenceFromParameter(this.board,o);this.point3=JXG.GetReferenceFromParameter(this.board,n);this.r=this.board.options.precision.hasPoint;this.visProp.visible=true;var c={};c.midpoint=this.point1;var h=this.getRadius();c.getRadius=function(){return h};var m=this.board.algebra.projectPointToCircle(this.point3,c);var d=new JXG.Point(j,[m.usrCoords[1],m.usrCoords[2]],b[1],k[1],true);d.fixed=true;this.addChild(d);d.update=function(){var p={};p.midpoint=JXG.GetReferenceFromParameter(this.board,q);var a=(Math.sqrt(Math.pow(JXG.GetReferenceFromParameter(this.board,q).coords.usrCoords[1]-JXG.GetReferenceFromParameter(this.board,o).coords.usrCoords[1],2)+Math.pow(JXG.GetReferenceFromParameter(this.board,q).coords.usrCoords[2]-JXG.GetReferenceFromParameter(this.board,o).coords.usrCoords[2],2)));p.getRadius=function(){return a};m=this.board.algebra.projectPointToCircle(JXG.GetReferenceFromParameter(this.board,n),p);this.coords=m;this.board.renderer.updatePoint(this);if(this.label.show){this.label.setCoordinates(this.coords);this.board.renderer.updateLabel(this.label)}};var g=new JXG.Line(j,q,o,b[2],k[2]);var f=new JXG.Line(j,q,d.id,b[3],k[3]);g.setStraight(false,false);f.setStraight(false,false);var l=new JXG.Arc(j,q,o,n,b[0],k[0]);l.visProp.fillColor=this.board.options.sector.fillColor;l.visProp.highlightFillColor=this.board.options.sector.highlightFillColor;l.visProp.fillOpacity=this.board.options.sector.fillOpacity;l.visProp.highlightFillOpacity=this.board.options.sector.highlightFillOpacity;this.point4=d;this.lines=[g,f];this.arc=l;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,d,c){var a;if((JXG.IsPoint(d[0]))&&(JXG.IsPoint(d[1]))&&(JXG.IsPoint(d[2]))){a=new JXG.Sector(b,d[0],d[1],d[2],c.ids,c.names,c.id)}else{throw ("Can't create sector with parent types '"+(typeof d[0])+"' and '"+(typeof d[1])+"' and '"+(typeof d[2])+"'.")}return a};JXG.JSXGraph.registerElement("sector",JXG.createSector);JXG.Angle=function(c,g,e,d,a,f,h,b){this.constructor();this.type=JXG.OBJECT_TYPE_ANGLE;this.elementClass=JXG.OBJECT_CLASS_AREA;this.init(c,h,b);this.point1=JXG.GetReferenceFromParameter(this.board,g);this.point2=JXG.GetReferenceFromParameter(this.board,e);this.point3=JXG.GetReferenceFromParameter(this.board,d);this.radius=this.board.options.angle.radius;if(a!=undefined&&a!=null){this.radius=a}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;this.text=f;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}};JXG.createAngle=function(d,b,a){var c;if((JXG.IsPoint(b[0]))&&(JXG.IsPoint(b[1]))&&(JXG.IsPoint(b[2]))){c=new JXG.Angle(d,b[0],b[1],b[2],a.id,a.name)}else{throw ("Can't create angle with parent types '"+(typeof b[0])+"' and '"+(typeof b[1])+"' and '"+(typeof b[2])+"'.")}return c};JXG.JSXGraph.registerElement("angle",JXG.createAngle);JXG.Label=function(b,a,c,d){if(typeof(b)=="string"){b=JXG.Geonext.boards[b]}this.board=b;this.id=d;this.name=a+"Label";this.nameHTML=this.board.algebra.replaceSup(this.board.algebra.replaceSub(a));this.distanceX=10;this.distanceY=10;this.coords=new JXG.Coords(JXG.COORDS_BY_USER,[c.usrCoords[1]*1+this.distanceX/(this.board.unitX*this.board.zoomX),c.usrCoords[2]*1+this.distanceY/(this.board.unitY*this.board.zoomY)],this.board);this.show=true;this.color="#000000";this.hiddenByParent=false};JXG.Label.prototype.hideElement=function(){this.show=false;this.board.renderer.hide(this)};JXG.Label.prototype.showElement=function(){this.show=true;this.board.renderer.show(this)};JXG.Label.prototype.setCoordinates=function(a){this.coords=new JXG.Coords(JXG.COORDS_BY_USER,[a.usrCoords[1]*1+this.distanceX/(this.board.unitX*this.board.zoomX),a.usrCoords[2]*1+this.distanceY/(this.board.unitY*this.board.zoomY)],this.board)};JXG.Algebra=function(a){this.board=a;this.eps=0.00001};JXG.Algebra.prototype.angle=function(g,e,d){var k=[];var j=[];var h=[];if(g.coords==null){k[0]=g[0];k[1]=g[1]}else{k[0]=g.coords.usrCoords[1];k[1]=g.coords.usrCoords[2]}if(e.coords==null){j[0]=e[0];j[1]=e[1]}else{j[0]=e.coords.usrCoords[1];j[1]=e.coords.usrCoords[2]}if(d.coords==null){h[0]=d[0];h[1]=d[1]}else{h[0]=d.coords.usrCoords[1];h[1]=d.coords.usrCoords[2]}var m=k[0]-j[0];var l=k[1]-j[1];var o=h[0]-j[0];var n=h[1]-j[1];var f=Math.atan((m*n-l*o)/(m*o+l*n));return f};JXG.Algebra.prototype.trueAngle=function(f,e,c){var a;var q;var o;var m;var k;var j;if(f.coords==null){a=f[0];q=f[1]}else{a=f.coords.usrCoords[1];q=f.coords.usrCoords[2]}if(e.coords==null){o=e[0];m=e[1]}else{o=e.coords.usrCoords[1];m=e.coords.usrCoords[2]}if(c.coords==null){k=c[0];j=c[1]}else{k=c.coords.usrCoords[1];j=c.coords.usrCoords[2]}var d=(k-o)*(a-o)+(j-m)*(q-m);var n=(a-o)*(j-m)-(q-m)*(k-o);var h=Math.sqrt((a-o)*(a-o)+(q-m)*(q-m));var g=Math.sqrt((k-o)*(k-o)+(j-m)*(j-m));var b=d/(h*g);if(b>1){b=1}else{if(b<-1){b=-1}}var p=Math.acos(b);var l=0;if((Math.sin(p)*n)<0){l=2*Math.PI-p}else{l=p}l=(l/Math.PI)*180;return l};JXG.Algebra.prototype.angleBisector=function(e,c,b){var j=e.coords.usrCoords[1]-c.coords.usrCoords[1];var h=e.coords.usrCoords[2]-c.coords.usrCoords[2];var g=Math.sqrt(j*j+h*h);j/=g;h/=g;var a=Math.acos(j);if(h<0){a*=-1}if(a<0){a+=2*Math.PI}j=b.coords.usrCoords[1]-c.coords.usrCoords[1];h=b.coords.usrCoords[2]-c.coords.usrCoords[2];g=Math.sqrt(j*j+h*h);j/=g;h/=g;var k=Math.acos(j);if(h<0){k*=-1}if(k<0){k+=2*Math.PI}var f=(a+k)*0.5;if(a>k){f+=Math.PI}j=Math.cos(f)+c.coords.usrCoords[1];h=Math.sin(f)+c.coords.usrCoords[2];return new JXG.Coords(JXG.COORDS_BY_USER,[j,h],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(e,d,b){var c=1;var a=b.coords.usrCoords[1]+c*(d.coords.usrCoords[1]-e.coords.usrCoords[1]);var f=b.coords.usrCoords[2]+c*(d.coords.usrCoords[2]-e.coords.usrCoords[2]);return new JXG.Coords(JXG.COORDS_BY_USER,[a,f],this.board)};JXG.Algebra.prototype.reflection=function(h,f){var g=h.point2.coords.usrCoords[1]-h.point1.coords.usrCoords[1];var e=h.point2.coords.usrCoords[2]-h.point1.coords.usrCoords[2];var b=f.coords.usrCoords[1]-h.point1.coords.usrCoords[1];var d=f.coords.usrCoords[2]-h.point1.coords.usrCoords[2];var j=(g*d-e*b)/(g*g+e*e);var a=f.coords.usrCoords[1]+2*j*e;var c=f.coords.usrCoords[2]-2*j*g;return new JXG.Coords(JXG.COORDS_BY_USER,[a,c],this.board)};JXG.Algebra.prototype.rotation=function(a,j,e){var d=j.coords.usrCoords[1]-a.coords.usrCoords[1];var h=j.coords.usrCoords[2]-a.coords.usrCoords[2];var b,g;var f=Math.cos(e);var k=Math.sin(e);b=d*f-h*k+a.coords.usrCoords[1];g=d*k+h*f+a.coords.usrCoords[2];return new JXG.Coords(JXG.COORDS_BY_USER,[b,g],this.board)};JXG.Algebra.prototype.perpendicular=function(n,l){var j;var g;var h;var e=n.point1.coords;var d=n.point2.coords;var b=l.coords;if(l==n.point1){j=e.usrCoords[1]+d.usrCoords[2]-e.usrCoords[2];g=e.usrCoords[2]-d.usrCoords[1]+e.usrCoords[1];h=true}else{if(l==n.point2){j=d.usrCoords[1]+e.usrCoords[2]-d.usrCoords[2];g=d.usrCoords[2]-e.usrCoords[1]+d.usrCoords[1];h=false}else{if(((Math.abs(e.usrCoords[1]-d.usrCoords[1])>this.eps)&&(Math.abs(b.usrCoords[2]-(e.usrCoords[2]-d.usrCoords[2])*(b.usrCoords[1]-e.usrCoords[1])/(e.usrCoords[1]-d.usrCoords[1])-e.usrCoords[2])<this.eps))||((Math.abs(e.usrCoords[1]-d.usrCoords[1])<=this.eps)&&(Math.abs(e.usrCoords[1]-b.usrCoords[1])<this.eps))){j=b.usrCoords[1]+d.usrCoords[2]-b.usrCoords[2];g=b.usrCoords[2]-d.usrCoords[1]+b.usrCoords[1];h=true;if(Math.abs(j-b.usrCoords[1])<this.eps&&Math.abs(g-b.usrCoords[2])<this.eps){j=b.usrCoords[1]+e.usrCoords[2]-b.usrCoords[2];g=b.usrCoords[2]-e.usrCoords[1]+b.usrCoords[1];h=false}}else{var m=n.point1.coords.usrCoords[2]-n.point2.coords.usrCoords[2];var f=n.point1.coords.usrCoords[1]-n.point2.coords.usrCoords[1];var c=n.point2.coords.usrCoords[1]*m-n.point2.coords.usrCoords[2]*f;var a=l.coords.usrCoords[1]*f+l.coords.usrCoords[2]*m;var k=m*m+f*f;if(Math.abs(k)<this.eps){k=this.eps}j=(c*m+a*f)/k;g=(a*m-c*f)/k;h=true}}}return[new JXG.Coords(JXG.COORDS_BY_USER,[j,g],this.board),h]};JXG.Algebra.prototype.circumcenterMidpoint=function(f,e,d){var c=((f.coords.usrCoords[1]-e.coords.usrCoords[1])*(f.coords.usrCoords[1]+e.coords.usrCoords[1])+(f.coords.usrCoords[2]-e.coords.usrCoords[2])*(f.coords.usrCoords[2]+e.coords.usrCoords[2]))/2;var b=((e.coords.usrCoords[1]-d.coords.usrCoords[1])*(e.coords.usrCoords[1]+d.coords.usrCoords[1])+(e.coords.usrCoords[2]-d.coords.usrCoords[2])*(e.coords.usrCoords[2]+d.coords.usrCoords[2]))/2;var h=(f.coords.usrCoords[1]-e.coords.usrCoords[1])*(e.coords.usrCoords[2]-d.coords.usrCoords[2])-(e.coords.usrCoords[1]-d.coords.usrCoords[1])*(f.coords.usrCoords[2]-e.coords.usrCoords[2]);if(Math.abs(h)<this.eps){h=this.eps}var a=(c*(e.coords.usrCoords[2]-d.coords.usrCoords[2])-b*(f.coords.usrCoords[2]-e.coords.usrCoords[2]))/h;var g=(b*(f.coords.usrCoords[1]-e.coords.usrCoords[1])-c*(e.coords.usrCoords[1]-d.coords.usrCoords[1]))/h;return new JXG.Coords(JXG.COORDS_BY_USER,[a,g],this.board)};JXG.Algebra.prototype.intersectLineLine=function(c,b){var e=c.point1.coords.usrCoords[1]*c.point2.coords.usrCoords[2]-c.point1.coords.usrCoords[2]*c.point2.coords.usrCoords[1];var d=b.point1.coords.usrCoords[1]*b.point2.coords.usrCoords[2]-b.point1.coords.usrCoords[2]*b.point2.coords.usrCoords[1];var g=(c.point2.coords.usrCoords[2]-c.point1.coords.usrCoords[2])*(b.point1.coords.usrCoords[1]-b.point2.coords.usrCoords[1])-(c.point1.coords.usrCoords[1]-c.point2.coords.usrCoords[1])*(b.point2.coords.usrCoords[2]-b.point1.coords.usrCoords[2]);if(Math.abs(g)<this.eps){g=this.eps}var a=(e*(b.point1.coords.usrCoords[1]-b.point2.coords.usrCoords[1])-d*(c.point1.coords.usrCoords[1]-c.point2.coords.usrCoords[1]))/g;var f=(d*(c.point2.coords.usrCoords[2]-c.point1.coords.usrCoords[2])-e*(b.point2.coords.usrCoords[2]-b.point1.coords.usrCoords[2]))/g;return new JXG.Coords(JXG.COORDS_BY_USER,[a,f],this.board)};JXG.Algebra.prototype.intersectCircleLine=function(j,q){var H=q.point1;var F=q.point2;var e=j.midpoint;var z=H.Dist(F);if(z>0){var a=e.Dist(H);var G=e.Dist(F);var E=((a*a)+(z*z)-(G*G))/(2*z);var u=(a*a)-(E*E);u=(u<0)?0:u;var C=Math.sqrt(u);var A=j.getRadius();var k=Math.sqrt((A*A)-C*C);var v=F.coords.usrCoords[1]-H.coords.usrCoords[1];var t=F.coords.usrCoords[2]-H.coords.usrCoords[2];var g=e.coords.usrCoords[1]+(C/z)*t;var f=e.coords.usrCoords[2]-(C/z)*v;a=(F.coords.usrCoords[1]*t)-(F.coords.usrCoords[2]*v);G=(g*v)+(f*t);var B=(t*t)+(v*v);if(Math.abs(B)<this.eps){B=this.eps}var o=((a*t)+(G*v))/B;var m=((G*t)-(a*v))/B;var c=k/z;var p=new JXG.Coords(JXG.COORDS_BY_USER,[o+c*v,m+c*t],this.board);var n=new JXG.Coords(JXG.COORDS_BY_USER,[o-c*v,m-c*t],this.board);var D=e.coords.distance(JXG.COORDS_BY_USER,p);if((A<(D-1))||isNaN(D)){return[0]}else{return[2,p,n]}}};JXG.Algebra.prototype.intersectCircleLineOrg=function(e,n){var g={};var F=n.point1;var D=n.point2;var c=e.midpoint;var u=F.Dist(D);if(u>0){var a=c.Dist(F);var E=c.Dist(D);var C=((a*a)+(u*u)-(E*E))/(2*u);var p=(a*a)-(C*C);p=(p<0)?0:p;var A=Math.sqrt(p);var v=e.getRadius();var f=Math.sqrt((v*v)-(A*A));var t=D.X()-F.X();var o=D.Y()-F.Y();var q=new JXG.Coords(JXG.COORDS_BY_USER,[c.X()+(A/u)*o,c.Y()-(A/u)*t],this.board);a=(D.X()*o)-(D.Y()*t);E=(q.usrCoords[1]*t)+(q.usrCoords[2]*o);var z=(o*o)+(t*t);if(Math.abs(z)<this.eps){z=this.eps}var m=((a*o)+(E*t))/z;var j=((E*o)-(a*t))/z;q=new JXG.Coords(JXG.COORDS_BY_USER,[m+(f/u)*t,j+(f/u)*o],this.board);var k=new JXG.Coords(JXG.COORDS_BY_USER,[m-(f/u)*t,j-(f/u)*o],this.board);var B=c.coords.distance(JXG.COORDS_BY_USER,q);if((v<(B-1))||isNaN(B)){g[0]=0}else{g[0]=2}g[1]=q;g[2]=k;return g}};JXG.Algebra.prototype.intersectCircleCircleOrg=function(l,k){var c={};var f=l.getRadius();var e=k.getRadius();var q=f+e;var g=Math.abs(f-e);var j=l.midpoint.coords.distance(JXG.COORDS_BY_USER,k.midpoint.coords);if(j>q){return[0]}else{if(j<g){return[0]}else{c[0]=1;var o=(f*f-e*e+j*j)/(2*j);var m=Math.sqrt(f*f-o*o);var s=(k.midpoint.coords.usrCoords[1]-l.midpoint.coords.usrCoords[1]);var r=(k.midpoint.coords.usrCoords[2]-l.midpoint.coords.usrCoords[2]);var d=new JXG.Coords(JXG.COORDS_BY_USER,[l.midpoint.coords.usrCoords[1]+s*o/j,l.midpoint.coords.usrCoords[2]+r*o/j],this.board);var n=m/j;c[1]=new JXG.Coords(JXG.COORDS_BY_USER,[d.usrCoords[1]-n*r,d.usrCoords[2]+n*s],this.board);c[2]=new JXG.Coords(JXG.COORDS_BY_USER,[d.usrCoords[1]+n*r,d.usrCoords[2]-n*s],this.board);return c}}};JXG.Algebra.prototype.intersectCircleCircle=function(j,g){var b={};var d=j.getRadius();var c=g.getRadius();var m=d+c;var e=Math.abs(d-c);var f=j.midpoint.coords.distance(JXG.COORDS_BY_USER,g.midpoint.coords);if(f>m){return[0]}else{if(f<e){return[0]}else{var p=f;if(p!=0){b[0]=1;var o=g.midpoint.coords.usrCoords[1]-j.midpoint.coords.usrCoords[1];var n=g.midpoint.coords.usrCoords[2]-j.midpoint.coords.usrCoords[2];var l=(p*p-c*c+d*d)/(2*p);var k=Math.sqrt(d*d-l*l);b[1]=new JXG.Coords(JXG.COORDS_BY_USER,[j.midpoint.coords.usrCoords[1]+(l/p)*o+(k/p)*n,j.midpoint.coords.usrCoords[2]+(l/p)*n-(k/p)*o],this.board);b[2]=new JXG.Coords(JXG.COORDS_BY_USER,[j.midpoint.coords.usrCoords[1]+(l/p)*o-(k/p)*n,j.midpoint.coords.usrCoords[2]+(l/p)*n+(k/p)*o],this.board)}else{return[0]}return b}}};JXG.Algebra.prototype.projectPointToCircle=function(b,d){var e=b.coords.distance(JXG.COORDS_BY_USER,d.midpoint.coords);if(Math.abs(e)<this.eps){e=this.eps}var c=d.getRadius()/e;var a=d.midpoint.coords.usrCoords[1]+c*(b.coords.usrCoords[1]-d.midpoint.coords.usrCoords[1]);var f=d.midpoint.coords.usrCoords[2]+c*(b.coords.usrCoords[2]-d.midpoint.coords.usrCoords[2]);return new JXG.Coords(JXG.COORDS_BY_USER,[a,f],this.board)};JXG.Algebra.prototype.projectPointToLine=function(g,j){var h=j.point1.coords.usrCoords[2]-j.point2.coords.usrCoords[2];var d=j.point1.coords.usrCoords[1]-j.point2.coords.usrCoords[1];var b=j.point2.coords.usrCoords[1]*h-j.point2.coords.usrCoords[2]*d;var a=g.coords.usrCoords[1]*d+g.coords.usrCoords[2]*h;var f=h*h+d*d;if(Math.abs(f)<this.eps){f=this.eps}var e=(b*h+a*d)/f;var c=(a*h-b*d)/f;return new JXG.Coords(JXG.COORDS_BY_USER,[e,c],this.board)};JXG.Algebra.prototype.projectPointToCurve=function(b,g){var f,a,h,c;if(g.curveType=="parameter"){a=b.X();h=b.Y();c=b.position||0;c=this.root(this.D(function(j){return(a-g.X(j))*(a-g.X(j))+(h-g.Y(j))*(h-g.Y(j))}),c);if(c<g.minX()){c=g.minX()}if(c>g.maxX()){c=g.maxX()}b.position=c;f=new JXG.Coords(JXG.COORDS_BY_USER,[g.X(c),g.Y(c)],this.board)}else{if(g.curveType=="polar"){a=b.X();h=b.Y();c=b.position||0;var e=(g.dataY!=null)?g.dataY:[0,0];c=this.root(this.D(function(j){var k=g.X(j);return(a-k*Math.cos(j)-e[0])*(a-k*Math.cos(j)-e[0])+(h-k*Math.sin(j)-e[1])*(h-k*Math.sin(j)-e[1])}),c);b.position=c;var d=g.X(c);f=new JXG.Coords(JXG.COORDS_BY_USER,[d*Math.cos(c)+e[0],d*Math.sin(c)+e[1]],this.board)}else{c=b.X();a=c;h=g.Y(c);f=new JXG.Coords(JXG.COORDS_BY_USER,[a,h],this.board)}}return g.updateTransform(f)};JXG.Algebra.prototype.replacePow=function(d){var h,l,j;var o="";var g,k;var f=d.indexOf("^");while(f>=0){var b=d.slice(0,f);if(b.charAt(b.length-1)==")"){h=1;l=b.length-2;while(l>=0&&h>0){j=b.charAt(l);if(j==")"){h++}else{if(j=="("){h--}}l--}if(h==0){g="";var e=b.substring(0,l+1);var a=l;while(a>=0&&e.substr(a,1).match(/(\w+)/)){g=RegExp.$1+g;a--}g+=b.substring(l+1,b.length);g=g.replace(/([\(\)\+\*\%\^\-\/\]\[])/g,"\\$1")}}else{g="\\w+"}var n=d.slice(f+1);if(n.match(/^([\w\.]*\()/)){h=1;l=RegExp.$1.length;while(l<n.length&&h>0){j=n.charAt(l);if(j==")"){h--}else{if(j=="("){h++}}l++}if(h==0){k=n.substring(0,l);k=k.replace(/([\(\)\+\*\%\^\-\/\[\]])/g,"\\$1")}}else{k="[\\w\\.]+"}var m=new RegExp("("+g+")\\^("+k+")");d=d.replace(m,"this.board.algebra.pow($1,$2)");f=d.indexOf("^")}return d};JXG.Algebra.prototype.replaceIf=function(b){var p="";var d,o;var f=null;var a=null;var j=null;var e=b.indexOf("If(");if(e<0){return b}b=b.replace(/""/g,"0");while(e>=0){d=b.slice(0,e);o=b.slice(e+3);var g=1;var n=0;var k=-1;var h=-1;while(n<o.length&&g>0){var l=o.charAt(n);if(l==")"){g--}else{if(l=="("){g++}else{if(l==","&&g==1){if(k<0){k=n}else{h=n}}}}n++}var m=o.slice(0,n-1);o=o.slice(n);if(k<0){return""}if(h<0){return""}f=m.slice(0,k);a=m.slice(k+1,h);j=m.slice(h+1);f=this.replaceIf(f);a=this.replaceIf(a);j=this.replaceIf(j);p+=d+"(("+f+")?("+a+"):("+j+"))";b=o;f=null;a=null;e=b.indexOf("If(")}p+=o;return p};JXG.Algebra.prototype.replaceSub=function(c){var b=c.indexOf("_{");while(b>=0){c=c.substr(0,b)+c.substr(b).replace(/_\{/,"<sub>");var a=c.substr(b).indexOf("}");if(a>=0){c=c.substr(0,a)+c.substr(a).replace(/\}/,"</sub>")}b=c.indexOf("_{")}b=c.indexOf("_");while(b>=0){c=c.substr(0,b)+c.substr(b).replace(/_(.?)/,"<sub>$1</sub>");b=c.indexOf("_")}return c};JXG.Algebra.prototype.replaceSup=function(c){var b=c.indexOf("^{");while(b>=0){c=c.substr(0,b)+c.substr(b).replace(/\^\{/,"<sup>");var a=c.substr(b).indexOf("}");if(a>=0){c=c.substr(0,a)+c.substr(a).replace(/\}/,"</sup>")}b=c.indexOf("^{")}b=c.indexOf("^");while(b>=0){c=c.substr(0,b)+c.substr(b).replace(/\^(.?)/,"<sup>$1</sup>");b=c.indexOf("^")}return c};JXG.Algebra.prototype.replaceNameById=function(c){var f=0;var a;var e;var b;var d;f=c.indexOf("X(");while(f>=0){if(f>=0){a=c.indexOf(")",f+2);if(a>=0){e=c.slice(f+2,a);e=e.replace(/\\(['"])?/g,"$1");d=this.board.elementsByName[e];c=c.slice(0,f+2)+d.id+c.slice(a)}}a=c.indexOf(")",f+2);f=c.indexOf("X(",a)}f=c.indexOf("Y(");while(f>=0){if(f>=0){a=c.indexOf(")",f+2);if(a>=0){e=c.slice(f+2,a);e=e.replace(/\\(['"])?/g,"$1");d=this.board.elementsByName[e];c=c.slice(0,f+2)+d.id+c.slice(a)}}a=c.indexOf(")",f+2);f=c.indexOf("Y(",a)}f=c.indexOf("L(");while(f>=0){if(f>=0){a=c.indexOf(")",f+2);if(a>=0){e=c.slice(f+2,a);e=e.replace(/\\(['"])?/g,"$1");d=this.board.elementsByName[e];c=c.slice(0,f+2)+d.id+c.slice(a)}}a=c.indexOf(")",f+2);f=c.indexOf("L(",a)}f=c.indexOf("Dist(");while(f>=0){if(f>=0){a=c.indexOf(",",f+5);if(a>=0){e=c.slice(f+5,a);e=e.replace(/\\(['"])?/g,"$1");d=this.board.elementsByName[e];c=c.slice(0,f+5)+d.id+c.slice(a)}}a=c.indexOf(",",f+5);f=c.indexOf(",",a);a=c.indexOf(")",f+1);if(a>=0){e=c.slice(f+1,a);e=e.replace(/\\(['"])?/g,"$1");d=this.board.elementsByName[e];c=c.slice(0,f+1)+d.id+c.slice(a)}a=c.indexOf(")",f+1);f=c.indexOf("Dist(",a)}f=c.indexOf("Deg(");while(f>=0){if(f>=0){a=c.indexOf(",",f+4);if(a>=0){e=c.slice(f+4,a);e=e.replace(/\\(['"])?/g,"$1");d=this.board.elementsByName[e];c=c.slice(0,f+4)+d.id+c.slice(a)}}a=c.indexOf(",",f+4);f=c.indexOf(",",a);a=c.indexOf(",",f+1);if(a>=0){e=c.slice(f+1,a);e=e.replace(/\\(['"])?/g,"$1");d=this.board.elementsByName[e];c=c.slice(0,f+1)+d.id+c.slice(a)}a=c.indexOf(",",f+1);f=c.indexOf(",",a);a=c.indexOf(")",f+1);if(a>=0){e=c.slice(f+1,a);e=e.replace(/\\(['"])?/g,"$1");d=this.board.elementsByName[e];c=c.slice(0,f+1)+d.id+c.slice(a)}a=c.indexOf(")",f+1);f=c.indexOf("Deg(",a)}f=c.indexOf("Rad(");while(f>=0){if(f>=0){a=c.indexOf(",",f+4);if(a>=0){e=c.slice(f+4,a);e=e.replace(/\\(['"])?/g,"$1");d=this.board.elementsByName[e];c=c.slice(0,f+4)+d.id+c.slice(a)}}a=c.indexOf(",",f+4);f=c.indexOf(",",a);a=c.indexOf(",",f+1);if(a>=0){e=c.slice(f+1,a);e=e.replace(/\\(['"])?/g,"$1");d=this.board.elementsByName[e];c=c.slice(0,f+1)+d.id+c.slice(a)}a=c.indexOf(",",f+1);f=c.indexOf(",",a);a=c.indexOf(")",f+1);if(a>=0){e=c.slice(f+1,a);e=e.replace(/\\(['"])?/g,"$1");d=this.board.elementsByName[e];c=c.slice(0,f+1)+d.id+c.slice(a)}a=c.indexOf(")",f+1);f=c.indexOf("Rad(",a)}return c};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){b=b.replace(/&lt;/g,"<");b=b.replace(/&gt;/g,">");b=b.replace(/&amp;/g,"&");var d=this.board.elementsByName;var e;var c=b;c=this.replaceNameById(c);c=this.replaceIf(c);c=this.replacePow(c);c=this.replaceIdByObj(c);var g=["Abs","ACos","ASin","ATan","Ceil","Cos","Exp","Floor","Log","Max","Min","Pow","Random","Round","Sin","Sqrt","Tan","Trunc"];var 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.algebra.round","Math.sin","Math.sqrt","Math.tan","Math.ceil"];for(var a=0;a<g.length;a++){e=new RegExp(g[a],"g");c=c.replace(e,f[a])}c=c.replace(/True/g,"true");c=c.replace(/False/g,"false");c=c.replace(/fasle/g,"false");c=c.replace(/Pi/g,"Math.PI");return c};JXG.Algebra.prototype.findDependencies=function(d,b){var c;var f;var e=this.board.elementsByName;for(c in e){if(c!=d.name){var a=c.replace(/\[/g,"\\[");a=a.replace(/\]/g,"\\]");f=new RegExp("\\(([\\w\\[\\]'_ ]+,)*("+a+")(,[\\w\\[\\]'_ ]+)*\\)","g");if(b.search(f)>=0){e[c].addChild(d)}}}};JXG.Algebra.prototype.distance=function(d,c){var b=0;if(d.length!=c.length){return}for(var a=0;a<d.length;a++){b+=(d[a]-c[a])*(d[a]-c[a])}return Math.sqrt(b)};JXG.Algebra.prototype.affineDistance=function(c,b){var a=0.000001;if(c.length!=b.length){return}var e=this.distance(c,b);if(e>a&&(Math.abs(c[0])<a||Math.abs(b[0])<a)){return Infinity}else{return e}};JXG.Algebra.prototype.rad=function(a,d,c){var b=this.trueAngle(a,d,c);return b*Math.PI/180};JXG.Algebra.prototype.matVecMult=function(g,e){var a=g.length;var h=e.length;var d=[];for(var c=0;c<a;c++){var f=0;for(var b=0;b<h;b++){f+=g[c][b]*e[b]}d[c]=f}return d};JXG.Algebra.prototype.matMatMult=function(b,a){var d=b.length;var c=a[0].length;var l=a.length;var h=[];for(var g=0;g<b.length;g++){h[g]=[]}for(g=0;g<d;g++){for(var f=0;f<c;f++){var o=0;for(var e=0;e<l;e++){o+=b[g][e]*a[e][f]}h[g][f]=o}}return h};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(d,c){if(d==null||c==null){return 1}if(Math.floor(c)==c){return Math.pow(d,c)}else{if(d>0){return Math.exp(c*Math.log(Math.abs(d)))}else{return null}}};JXG.Algebra.prototype.round=function(b,f){if(typeof b=="string"){return b}if(f==0||f==null){return Math.round(b).toString()}if(f<1||f>14){return false}var d=Math.pow(10,f);var c=(Math.round(b*d)/d).toString();if(c.indexOf(".")==-1){c+="."}c+=d.toString().substring(1);return c.substring(0,c.indexOf(".")+f+1)};JXG.Algebra.prototype.D=function(b){var a=0.00001;return function(c){return(b(c+a)-b(c-a))/(2*a)}};JXG.Algebra.prototype.cosh=function(a){return(Math.exp(a)+Math.exp(-a))*0.5};JXG.Algebra.prototype.sinh=function(a){return(Math.exp(a)-Math.exp(-a))*0.5};JXG.Algebra.prototype.I=function(a,b){return JXG.Math.Numerics.NewtonCotes(a,b)};JXG.Algebra.prototype.newton=function(e,a){var b=0;var c=1e-7;var d=e(a);while(b<50&&Math.abs(d)>c){var g=this.D(e)(a);if(Math.abs(g)>c){a-=d/g}else{a+=(Math.random()*0.2-1)}d=e(a);b++}return a};JXG.Algebra.prototype.root=function(b,a){return this.newton(b,a)};JXG.Algebra.prototype.crossProduct=function(c,b){var a=c[1]*b[2]-c[2]*b[1];var e=c[2]*b[0]-c[0]*b[2];var d=c[0]*b[1]-c[1]*b[0];return[a,e,d]};JXG.Algebra.prototype.meet=function(c,b){var a=0.000001;if(Math.abs(c[3])<a&&Math.abs(b[3])<a){return this.meetLineLine(c,b)}else{if(Math.abs(c[3])>=a&&Math.abs(b[3])<a){return this.meetLineCircle(b,c)}else{if(Math.abs(c[3])<a&&Math.abs(b[3])>=a){return this.meetLineCircle(c,b)}else{return this.meetCircleCircle(c,b)}}}};JXG.Algebra.prototype.meetLineLine=function(b,a){var c=this.crossProduct(b,a);if(Math.abs(c[0])>0.000001){c[1]/=c[0];c[2]/=c[0]}return[new JXG.Coords(JXG.COORDS_BY_USER,c.slice(1),this.board),new JXG.Coords(JXG.COORDS_BY_USER,c.slice(1),this.board)]};JXG.Algebra.prototype.meetLineCircle=function(j,e){var u=0.000001;if(e[4]<u){return[new JXG.Coords(JXG.COORDS_BY_USER,e.slice(1,3),this.board),new JXG.Coords(JXG.COORDS_BY_USER,e.slice(1,3),this.board)]}var p=e[0];var q=e.slice(1,3);var r=e[3];var o=j[0];var l=j.slice(1,3);var h=r;var g=(q[0]*l[1]-q[1]*l[0]);var f=r*o*o-(q[0]*l[0]+q[1]*l[1])*o+p;var m=g*g-4*h*f;if(m>=0){m=Math.sqrt(m);var s=[(-g+m)/(2*h),(-g-m)/(2*h)];return[new JXG.Coords(JXG.COORDS_BY_USER,[-s[0]*(-l[1])-o*l[0],-s[0]*l[0]-o*l[1]],this.board),new JXG.Coords(JXG.COORDS_BY_USER,[-s[1]*(-l[1])-o*l[0],-s[1]*l[0]-o*l[1]],this.board)]}else{return[new JXG.Coords(JXG.COORDS_BY_USER,[NaN,NaN],this.board),new JXG.Coords(JXG.COORDS_BY_USER,[NaN,NaN],this.board)]}};JXG.Algebra.prototype.meetCircleCircle=function(c,b){var a=0.000001;if(c[4]<a){if(this.distance(c.slice(1,3),b.slice(1,3))==b[4]){return[new JXG.Coords(JXG.COORDS_BY_USER,c.slice(1,3),this.board),new JXG.Coords(JXG.COORDS_BY_USER,c.slice(1,3),this.board)]}else{return[new JXG.Coords(JXG.COORDS_BY_USER,[NaN,NaN],this.board),new JXG.Coords(JXG.COORDS_BY_USER,[NaN,NaN],this.board)]}}if(b[4]<a){if(this.distance(b.slice(1,3),c.slice(1,3))==c[4]){return[new JXG.Coords(JXG.COORDS_BY_USER,b.slice(1,3),this.board),new JXG.Coords(JXG.COORDS_BY_USER,b.slice(1,3),this.board)]}else{return[new JXG.Coords(JXG.COORDS_BY_USER,[NaN,NaN],this.board),new JXG.Coords(JXG.COORDS_BY_USER,[NaN,NaN],this.board)]}}var d=[b[3]*c[0]-c[3]*b[0],b[3]*c[1]-c[3]*b[1],b[3]*c[2]-c[3]*b[2],0,1,Infinity,Infinity,Infinity];d=this.normalize(d);return this.meetLineCircle(d,c)};JXG.Algebra.prototype.normalize=function(c){var a=2*c[3];var d=c[4]/(a);c[5]=d;c[6]=-c[1]/a;c[7]=-c[2]/a;if(d==Infinity||isNaN(d)){var e=Math.sqrt(c[1]*c[1]+c[2]*c[2]);c[0]/=e;c[1]/=e;c[2]/=e;c[3]=0;c[4]=1}else{if(Math.abs(d)>=1){c[0]=(c[6]*c[6]+c[7]*c[7]-d*d)/(2*d);c[1]=-c[6]/d;c[2]=-c[7]/d;c[3]=1/(2*d);c[4]=1}else{var b=(d<=0)?(-1):(1);c[0]=b*(c[6]*c[6]+c[7]*c[7]-d*d)*0.5;c[1]=-b*c[6];c[2]=-b*c[7];c[3]=b/2;c[4]=b*d}}return c};JXG.Intersection=function(e,b,d,c,g,f,l,k){this.constructor();this.board=e;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,d);this.intersect2=JXG.GetReferenceFromParameter(this.board,c);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 h=this.board.algebra.intersectLineLine(this.intersect1,this.intersect2).usrCoords.slice(1);this.p=new JXG.Point(this.board,h,g,l,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(n){this.notExistingParents[n]=this.board.objects[n];for(var m in this.descendants){if(this.descendants[m].visProp.visible&&this.descendants[m].type!=JXG.OBJECT_TYPE_INTERSECTION){this.descendants[m].hideElement();this.descendants[m].visProp.visible=true}this.descendants[m].notExistingParents[n]=this.board.objects[n]}};this.showChild=function(n){for(var m in this.board.objects){delete (this.board.objects[m].notExistingParents[n]);if(this.board.objects[m].visProp.visible&&Object.keys(this.board.objects[m].notExistingParents).length==0){if(this.board.objects[m].type!=JXG.OBJECT_TYPE_INTERSECTION){this.board.objects[m].showElement()}}}}}else{if(((d.type==c.type)&&(d.type==JXG.OBJECT_TYPE_CIRCLE||d.type==JXG.OBJECT_TYPE_ARC))||(d.type==JXG.OBJECT_TYPE_CIRCLE&&c.type==JXG.OBJECT_TYPE_ARC)||(c.type==JXG.OBJECT_TYPE_CIRCLE&&d.type==JXG.OBJECT_TYPE_ARC)){this.p1=new JXG.Point(this.board,[0,0],g,l,false);this.p1.fixed=true;this.p1.label.show=true;this.p2=new JXG.Point(this.board,[0,0],f,k,false);this.p2.fixed=true;this.p2.label.show=true;this.addChild(this.p1);this.addChild(this.p2);var j=this.board.algebra.intersectCircleCircle(this.intersect1,this.intersect2);if(j[0]==1){this.p1.coords=j[1];this.p1.showElement();this.p1.updateRenderer();this.p2.coords=j[2];this.p2.showElement();this.p2.updateRenderer();this.real=true}else{this.real=false}this.update=function(){if(!this.needsUpdate){return}var o=this.board.algebra.intersectCircleCircle(this.intersect1,this.intersect2);var n=this.p1.visProp.visible;var m=this.p2.visProp.visible;if(o[0]==0){if(this.real){this.hideChild(this.id);this.p1.visProp.visible=n;this.p2.visProp.visible=m;this.real=false}}else{this.p1.coords=o[1];this.p2.coords=o[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(n){this.notExistingParents[n]=this.board.objects[n];for(var m in this.descendants){if(this.descendants[m].visProp.visible&&this.descendants[m].type!=JXG.OBJECT_TYPE_INTERSECTION){this.descendants[m].hideElement();this.descendants[m].visProp.visible=true}this.descendants[m].notExistingParents[n]=this.board.objects[n]}};this.showChild=function(m){for(el in this.board.objects){delete (this.board.objects[el].notExistingParents[m]);if(this.board.objects[el].visProp.visible&&Object.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],g,l,false);this.p1.fixed=true;this.p1.label.show=true;this.p2=new JXG.Point(this.board,[0,0],f,k,false);this.p2.fixed=true;this.p2.label.show=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 j=this.board.algebra.intersectCircleLine(this.intersect1,this.intersect2);if(j[0]==1){this.p1.coords=j[1];this.p1.showElement();this.p1.update()}else{if(j[0]==2){this.p1.coords=j[1];this.p1.showElement();this.p2.coords=j[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 o=this.board.algebra.intersectCircleLine(this.intersect1,this.intersect2);var n=this.p1.visProp.visible;var m=this.p2.visProp.visible;if(o[0]==0){if(this.real){this.hideChild(this.id);this.p1.visProp.visible=n;this.p2.visProp.visible=m;this.real=false}}else{if(o[0]==2){this.p1.coords=o[1];this.p2.coords=o[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(n){this.notExistingParents[n]=this.board.objects[n];for(var m in this.descendants){if(this.descendants[m].visProp.visible&&this.descendants[m].type!=JXG.OBJECT_TYPE_INTERSECTION){this.descendants[m].hideElement();this.descendants[m].visProp.visible=true}this.descendants[m].notExistingParents[n]=this.board.objects[n]}};this.showChild=function(m){for(el in this.board.objects){delete (this.board.objects[el].notExistingParents[m]);if(this.board.objects[el].visProp.visible&&Object.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(a,c,b){if(JXG.IsPoint(c[0])&&c[1].type==JXG.OBJECT_TYPE_LINE){if(!JXG.IsArray(b.id)){b.id=["",""]}if(!JXG.IsArray(b.name)){b.name=["",""]}return a.addPerpendicular(c[1],c[0],b.id[0],b.name[0],b.id[1],b.name[1])}else{if(JXG.IsPoint(c[1])&&c[0].type==JXG.OBJECT_TYPE_LINE){if(!JXG.IsArray(b.id)){b.id=["",""]}if(!JXG.IsArray(b.name)){b.name=["",""]}return a.addPerpendicular(c[0],c[1],b.id[0],b.name[0],b.id[1],b.name[1])}else{throw ("Can't create perpendicular with parent types '"+(typeof c[0])+"' and '"+(typeof c[1])+"'.")}}};JXG.createMidpoint=function(a,c,b){if(c.length==2&&JXG.IsPoint(c[0])&&JXG.IsPoint(c[1])){return a.addMidpoint(c[0],c[1],b.id,b.name)}else{if(c.length==1&&c[0].type==JXG.OBJECT_TYPE_LINE){return a.addMidpoint(c[0].point1,c[0].point2,b.id,b.name)}else{throw ("Can't create midpoint.")}}};JXG.createParallel=function(a,c,b){if(JXG.IsPoint(c[0])&&c[1].type==JXG.OBJECT_TYPE_LINE){return a.addParallel(c[1],c[0],b.id,b.name)}else{if(JXG.IsPoint(c[1])&&c[0].type==JXG.OBJECT_TYPE_LINE){return a.addParallel(c[0],c[1],b.id,b.name)}else{throw ("Can't create parallel with parent types '"+(typeof c[0])+"' and '"+(typeof c[1])+"'.")}}};JXG.createNormal=function(a,c,b){if(JXG.IsPoint(c[0])&&c[1].type==JXG.OBJECT_TYPE_LINE){return a.addNormal(c[1],c[0],b.id,b.name)}else{if(JXG.IsPoint(c[1])&&c[0].type==JXG.OBJECT_TYPE_LINE){return a.addNormal(c[0],c[1],b.id,b.name)}else{throw ("Can't create normal with parent types '"+(typeof c[0])+"' and '"+(typeof c[1])+"'.")}}};JXG.createBisector=function(a,c,b){if(JXG.IsPoint(c[0])&&JXG.IsPoint(c[1])&&JXG.IsPoint(c[2])){return a.addAngleBisector(c[0],c[1],c[2],b.id,b.name)}else{throw ("Can't create angle bisector with parent types '"+(typeof c[0])+"' and '"+(typeof c[1])+"'.")}};JXG.createArrowParallel=function(a,c,b){if(JXG.IsPoint(c[0])&&c[1].type==JXG.OBJECT_TYPE_ARROW){if(!JXG.IsArray(b.id)){b.id=["",""]}if(!JXG.IsArray(b.name)){b.name=["",""]}return a.addArrowParallel(c[1],c[0],b.id[0],b.name[0],b.id[1],b.name[1])}else{if(JXG.IsPoint(c[1])&&c[0].type==JXG.OBJECT_TYPE_ARROW){if(!JXG.IsArray(b.id)){b.id=["",""]}if(!JXG.IsArray(b.name)){b.name=["",""]}return a.addArrowParallel(c[0],c[1],b.id[0],b.name[0],b.id[1],b.name[1])}else{throw ("Can't create parallel arrow with parent types '"+(typeof c[0])+"' and '"+(typeof c[1])+"'.")}}};JXG.createCircumcircle=function(a,c,b){if(JXG.IsPoint(c[0])&&JXG.IsPoint(c[1])&&JXG.IsPoint(c[2])){if(!JXG.IsArray(b.id)){b.id=["",""]}if(!JXG.IsArray(b.name)){b.name=["",""]}return a.addCircumcenter(c[0],c[1],c[2],b.id[0],b.name[0],b.id[1],b.name[1])}else{throw ("Can't create circumcircle with parent types '"+(typeof c[0])+"', '"+(typeof c[1])+"' and '"+(typeof c[2])+"'.")}};JXG.createCircumcircleMidpoint=function(a,c,b){if(JXG.IsPoint(c[0])&&JXG.IsPoint(c[1])&&JXG.IsPoint(c[2])){return a.addCircumcenterMidpoint(c[0],c[1],c[2],b.id,b.name)}else{throw ("Can't create circumcircle midpoint with parent types '"+(typeof c[0])+"', '"+(typeof c[1])+"' and '"+(typeof c[2])+"'.")}};JXG.createParallelPoint=function(a,c,b){if(JXG.IsPoint(c[0])&&JXG.IsPoint(c[1])&&JXG.IsPoint(c[2])){return a.addParallelPoint(c[0],c[1],c[2],b.id,b.name)}else{throw ("Can't create parallel point with parent types '"+(typeof c[0])+"', '"+(typeof c[1])+"' and '"+(typeof c[2])+"'.")}};JXG.createReflection=function(a,c,b){if(JXG.IsPoint(c[0])&&c[1].type==JXG.OBJECT_TYPE_LINE){return a.addReflection(c[1],c[0],b.id,b.name)}else{if(JXG.IsPoint(c[1])&&c[0].type==JXG.OBJECT_TYPE_LINE){return a.addReflection(c[0],c[1],b.id,b.name)}else{throw ("Can't create reflection point with parent types '"+(typeof c[0])+"' and '"+(typeof c[1])+"'.")}}};JXG.createPerpendicularPoint=function(a,c,b){if(JXG.IsPoint(c[0])&&c[1].type==JXG.OBJECT_TYPE_LINE){return a.addPerpendicularPoint(c[1],c[0],b.id,b.name)}else{if(JXG.IsPoint(c[1])&&c[0].type==JXG.OBJECT_TYPE_LINE){return a.addPerpendicularPoint(c[0],c[1],b.id,b.name)}else{throw ("Can't create perpendicular point with parent types '"+(typeof c[0])+"' and '"+(typeof c[1])+"'.")}}};JXG.createMirrorPoint=function(a,c,b){if(JXG.IsPoint(c[0])&&JXG.IsPoint(c[1])){return a.addRotation(c[0],c[1],Math.PI,b.id,b.name)}else{throw ("Can't create mirror point with parent types '"+(typeof c[0])+"' and '"+(typeof c[1])+"'.")}};JXG.createIntegral=function(a,c,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(c[0])&&c[1].type==JXG.OBJECT_TYPE_CURVE){return a.addIntegral(c[0],c[1],b.id,b.name,b)}else{if(JXG.IsArray(c[1])&&c[0].type==JXG.OBJECT_TYPE_CURVE){return a.addIntegral(c[1],c[0],b.id,b.name,b)}else{throw ("Can't create integral with parent types '"+(typeof c[0])+"' and '"+(typeof c[1])+"'.")}}};JXG.JSXGraph.registerElement("arrowparallel",JXG.createArrowParallel);JXG.JSXGraph.registerElement("bisector",JXG.createBisector);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(k,o,g,m,c,a,d){this.constructor();this.type=JXG.OBJECT_TYPE_TEXT;this.elementClass=JXG.OBJECT_CLASS_OTHER;this.init(k,c,a);this.contentStr=o;this.plaintextStr="";this.visProp.strokeColor=this.board.options.text.strokeColor;this.visProp.visible=true;if(d!=null){this.digits=d}else{this.digits=2}if((this.element=this.board.objects[g])){var h=this.element.getTextAnchor();this.element.addChild(this);this.relativeCoords=new JXG.Coords(JXG.COORDS_BY_USER,[parseFloat(m[0]),parseFloat(m[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 n=m[0];if(typeof n=="string"){var f=this.board.algebra.geonext2JS(n);this.X=new Function("","return "+f+";")}else{if(typeof n=="function"){this.X=n}else{if(typeof n=="number"){this.X=function(){return n}}}}var l=m[1];if(typeof l=="string"){var e=this.board.algebra.geonext2JS(l);this.Y=new Function("","return "+e+";")}else{if(typeof l=="function"){this.Y=l}else{if(typeof l=="number"){this.Y=function(){return l}}}}this.coords=new JXG.Coords(JXG.COORDS_BY_USER,[this.X(),this.Y()],this.board);var j="this.coords.setCoordinates(JXG.COORDS_BY_USER,[this.X(),this.Y()]);";this.updateCoords=new Function("",j)}if(typeof this.contentStr=="function"){this.updateText=function(){this.plaintextStr=this.contentStr()}}else{var b;if(typeof this.contentStr=="number"){b=this.board.round(this.contentStr,this.digits)}else{b=this.generateTerm(this.contentStr)}this.updateText=new Function("this.plaintextStr = "+b+";")}this.updateText();this.id=this.board.addText(this);this.notifyParents(this.contentStr)};JXG.Text.prototype=new JXG.GeometryElement();JXG.Text.prototype.hasPoint=function(a,b){return false};JXG.Text.prototype.update=function(){if(this.needsUpdate){if(this.relativeCoords){var a=this.element.getTextAnchor();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(e){var d=null;var g=this.board.elementsByName;var f='""';e=e.replace(/\"/g,'\\"');e=e.replace(/\'/g,"\\'");e=e.replace(/&amp;arc;/g,"&ang;");e=e.replace(/<arc\s*\/>/g,"&ang;");e=e.replace(/<sqrt\s*\/>/g,"&radic;");var c;c=e.indexOf("<value>");var a=e.indexOf("</value>");if(c>=0){while(c>=0){f+=' + "'+this.board.algebra.replaceSub(this.board.algebra.replaceSup(e.slice(0,c)))+'"';var b=e.slice(c+7,a);var d=this.board.algebra.geonext2JS(b);d=d.replace(/\\"/g,'"');d=d.replace(/\\'/g,"'");if(d.indexOf("this.board.algebra.round")<0){f+="+(this.board.algebra.round("+d+","+(this.digits)+"))"}else{f+="+("+d+")"}e=e.slice(a+8);c=e.indexOf("<value>");a=e.indexOf("</value>")}}f+=' + "'+this.board.algebra.replaceSub(this.board.algebra.replaceSup(e))+'"';f=f.replace(/<overline>/g,"<span style=text-decoration:overline>");f=f.replace(/<\/overline>/g,"</span>");f=f.replace(/<arrow>/g,"<span style=text-decoration:overline>");f=f.replace(/<\/arrow>/g,"</span>");f=f.replace(/&amp;/g,"&");return f};JXG.Text.prototype.notifyParents=function(c){var b=null;var d=this.board.elementsByName;do{var a=/<value>([\w\s\*\/\^\-\+\(\)\[\],<>=!]+)<\/value>/;b=a.exec(c);if(b!=null){this.board.algebra.findDependencies(this,b[1]);c=c.substr(b.index);c=c.replace(a,"")}}while(b!=null)};JXG.createText=function(a,c,b){return new JXG.Text(a,c[c.length-1],null,c,b.id,b.name,b.digits)};JXG.JSXGraph.registerElement("text",JXG.createText);JXG.Image=function(e,d,g,b,f,h,a,c){this.type=JXG.OBJECT_TYPE_IMAGE;this.elementClass=JXG.OBJECT_CLASS_OTHER;this.transformations=[];this.init(e,h,a);this.coords=new JXG.Coords(JXG.COORDS_BY_USER,g,this.board);this.initialCoords=new JXG.Coords(JXG.COORDS_BY_USER,g,this.board);this.size=[b[0]*e.zoomX*e.unitX,b[1]*e.zoomY*e.unitY];this.imageBase64String=d;this.displayLevel=f;this.parent=c;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,c,b){return new JXG.Image(a,b.imageString,c[0],c[1],"images",false,false,undefined)};JXG.JSXGraph.registerElement("image",JXG.createImage);JXG.createSlider=function(g,e,f){var l=e[0];var h=e[1];var o=e[2];var d=e[3];var j=e[4];var a=(e[5]-d)*o/(j-d);var q=g.createElement("point",[l,h],{visible:false,fixed:true,name:""});var p=g.createElement("point",[l+o,h],{visible:false,fixed:true,name:""});var c=g.createElement("line",[q,p],{straightFirst:false,straightLast:false,strokewidth:1,name:""});var n=10;c.ticksDelta=o/n;c.enableTicks();q.needRegularUpdate=false;p.needRegularUpdate=false;c.needRegularUpdate=false;var m=g.createElement("point",[l+a,h],{slideObject:c,style:6,strokeColor:"#0080c0",fillColor:"#0080c0",name:""});var k=g.createElement("point",[function(){return((m.X()-l)/o*(j-d)+d)},function(){return(h+1)}],{visible:false,name:""});var b=g.createElement("line",[q,m],{straightFirst:false,straightLast:false,strokewidth:3,strokeColor:"#0080c0",name:""});var r=g.createElement("text",[(l+o)*1.05,h,function(){return g.round(k.X(),2)}],{name:""});return k};JXG.JSXGraph.registerElement("slider",JXG.createSlider);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(c,b){var a=this[c];this[c]=this[b];this[b]=a};JXG.Math.Matrix=function(e){this.length=0;var c=0;var d=false;if((typeof e!=undefined)&&(e!=null)){for(var b=0;b<e.length;b++){this.push(new Array());if(d){if(c!=e[b].length){this.length=0;throw new JXG.DimensionMismatchException("Your array contains arrays with different lengths.")}}for(var a=0;a<e[b].length;a++){this[b].push(e[b][a])}c=e[b].length;d=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(c,b){var a=this[c];this[c]=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.Math.Numerics=new Object();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(f,c){var a=c;for(var e=f.m()-1;e>=0;e--){for(var d=f.n()-1;d>e;d--){a[e]-=f[e][d]*a[d]}a[e]/=f[e][e]}return a};JXG.Math.Numerics.Gauss=function(a,h){var m=1e-12;var f=new JXG.Math.Vector();for(var e=0;e<a.n();e++){f.push(e)}for(var d=0;d<a.n();d++){for(var e=a.n()-1;e>d;e--){if(Math.abs(a[e][d])>JXG.Math.eps){if(Math.abs(a[d][d])<JXG.Math.eps){a.exchangeRows(e,d);h.exchange(e,d);f.exchange(e,d)}else{a[e][d]/=a[d][d];h[e]-=a[e][d]*h[d];for(var c=d+1;c<a.n();c++){a[e][c]-=a[e][d]*a[d][c]}}}if(Math.abs(a[d][d])<JXG.Math.eps){throw new SingularMatrixException()}}}var g=JXG.Math.Numerics.backwardSolve(a,h);var l=new JXG.Math.Vector();for(var e=0;e<g.n();e++){l.push(g[f[e]])}return l};JXG.Math.Numerics.QR=function(c,a){};JXG.Math.Numerics.NewtonCotes=function(d,g){var b=0;var a=(d[1]-d[0])/this.number_of_nodes;switch(this.integration_type){case JXG.INT_TRAPEZ:b=(g(d[0])+g(d[1]))*0.5;var h=d[0];for(var e=0;e<this.number_of_nodes-1;e++){h+=a;b+=g(h)}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."}var c=this.number_of_nodes/2;b=g(d[0])+g(d[1]);h=d[0];for(e=0;e<c-1;e++){h+=2*a;b+=2*g(h)}h=d[0]-a;for(e=0;e<c;e++){h+=2*a;b+=4*g(h)}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"}c=this.number_of_nodes*0.25;b=7*(g(d[0])+g(d[1]));h=d[0];for(e=0;e<c-1;e++){h+=4*a;b+=14*g(h)}h=d[0]-3*a;for(e=0;e<c;e++){h+=4*a;b+=32*(g(h)+g(h+2*a))}h=d[0]-2*a;for(e=0;e<c;e++){h+=4*a;b+=12*g(h)}b*=2*a/45}return b};JXG.Math.Numerics.splineDef=function(j,h){if(j.length!=h.length){throw"Error in JXG.Math.Numerics.splineDef: Input vector dimensions do not match."}var a=j.length;var d=new Array();var c;for(var e=0;e<a;e++){c={X:j[e],Y:h[e]};d.push(c)}d.sort(function(n,l){return n.X-l.X});for(var e=0;e<a;e++){j[e]=d[e].X;h[e]=d[e].Y}var o=new Array();var k=new Array();for(var e=0;e<a-1;e++){o.push(j[e+1]-j[e])}for(var e=0;e<a-2;e++){k.push(6*(h[e+2]-h[e+1])/(o[e+1])-6*(h[e+1]-h[e])/(o[e]))}var f=new Array();var g=new Array();var b;f.push(2*(o[0]+o[1]));g.push(k[0]);for(var e=0;e<a-3;e++){b=o[e+1]/f[e];f.push(2*(o[e+1]+o[e+2])-b*o[e+1]);g.push(k[e+1]-b*g[e])}var m=new Array();m[a-3]=g[a-3]/f[a-3];for(var e=a-4;e>=0;e--){m[e]=(g[e]-(o[e+1]*m[e+1]))/f[e]}for(var e=a-3;e>=0;e--){m[e+1]=m[e]}m[0]=0;m[a-1]=0;return m};JXG.Math.Numerics.splineEval=function(f,u,s,w){if(u.length!=s.length){throw"Error in JXG.Math.Numerics.splineEval: Defining vector dimensions do not match."}var g=u.length;var k=1;var h=false;if(JXG.IsArray(f)){k=f.length;h=true}else{f=[f]}var v=new Array();for(var o=0;o<k;o++){if((f[o]<u[0])||(u[o]>u[g-1])){return"NaN"}var m;for(m=1;m<g;m++){if(f[o]<=u[m]){break}}m--;var t=s[m];var r=(s[m+1]-s[m])/(u[m+1]-u[m])-(u[m+1]-u[m])/6*(w[m+1]+2*w[m]);var q=w[m]/2;var p=(w[m+1]-w[m])/(6*(u[m+1]-u[m]));var e=f[o]-u[m];v.push(t+(r+(q+p*e)*e)*e)}if(h){return v}else{return v[0]}};JXG.MathStatistics=function(){};JXG.MathStatistics.prototype.sum=function(b){var d=0;for(var c=0,a=b.length;c<a;c++){d+=b[c]}return d};JXG.MathStatistics.prototype.prod=function(b){var d=1;for(var c=0,a=b.length;c<a;c++){d*=b[c]}return d};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 c=b.clone();c.sort(function(e,d){return e-d});var a=c.length;if(a%2==1){return c[parseInt(a*0.5)]}else{return(c[a*0.5-1]+c[a*0.5])*0.5}}else{return 0}};JXG.MathStatistics.prototype.variance=function(c){if(c.length>1){var b=this.mean(c);var e=0;for(var d=0,a=c.length;d<a;d++){e+=(c[d]-b)*(c[d]-b)}return e/(c.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 c=this.multiply(a,b);return this.mean(c)}else{return 0}};JXG.MathStatistics.prototype.max=function(b){if(b.length==0){return NaN}var d=b[0];for(var c=1,a=b.length;c<a;c++){d=(b[c]>d)?(b[c]):d}return d};JXG.MathStatistics.prototype.min=function(b){if(b.length==0){return NaN}var d=b[0];for(var c=1,a=b.length;c<a;c++){d=(b[c]<d)?(b[c]):d}return d};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 d=b[0];for(var c=1,a=b.length;c<a;c++){d=(b[c]<d)?(b[c]):d}return d};JXG.MathStatistics.prototype.abs=function(b){var d=[];if(typeof Object.isArray(arr1)){for(var c=0,a=b.length;c<a;c++){d[c]=Math.abs(b[c])}}else{if(typeof b=="number"){return Math.abs(b)}else{d=null}}return d};JXG.MathStatistics.prototype.add=function(c,b){var e=[];if(typeof Object.isArray(c)&&typeof b=="number"){for(var d=0,a=Math.min(c.length,b.length);d<a;d++){e[d]=c[d]+b}}else{if(typeof c=="number"&&typeof Object.isArray(b)){for(var d=0,a=Math.min(c.length,b.length);d<a;d++){e[d]=c+b[d]}}else{if(typeof Object.isArray(c)&&typeof Object.isArray(b)){for(var d=0,a=Math.min(c.length,b.length);d<a;d++){e[d]=c[d]+b[d]}}else{if(typeof c=="number"&&typeof b=="number"){for(var d=0,a=Math.min(c.length,b.length);d<a;d++){e[d]=c+b}}else{e=null}}}}return e};JXG.MathStatistics.prototype.divide=function(c,b){var e=[];if(typeof Object.isArray(c)&&typeof b=="number"){for(var d=0,a=Math.min(c.length,b.length);d<a;d++){e[d]=c[d]/b}}else{if(typeof c=="number"&&typeof Object.isArray(b)){for(var d=0,a=Math.min(c.length,b.length);d<a;d++){e[d]=c/b[d]}}else{if(typeof Object.isArray(c)&&typeof Object.isArray(b)){for(var d=0,a=Math.min(c.length,b.length);d<a;d++){e[d]=c[d]/b[d]}}else{if(typeof c=="number"&&typeof b=="number"){for(var d=0,a=Math.min(c.length,b.length);d<a;d++){e[d]=c/b}}else{e=null}}}}return e};JXG.MathStatistics.prototype.mod=function(c,b){var e=[];if(typeof Object.isArray(c)&&typeof b=="number"){for(var d=0,a=Math.min(c.length,b.length);d<a;d++){e[d]=c[d]%b}}else{if(typeof c=="number"&&typeof Object.isArray(b)){for(var d=0,a=Math.min(c.length,b.length);d<a;d++){e[d]=c%b[d]}}else{if(typeof Object.isArray(c)&&typeof Object.isArray(b)){for(var d=0,a=Math.min(c.length,b.length);d<a;d++){e[d]=c[d]%b[d]}}else{if(typeof c=="number"&&typeof b=="number"){for(var d=0,a=Math.min(c.length,b.length);d<a;d++){e[d]=c%b}}else{e=null}}}}return e};JXG.MathStatistics.prototype.multiply=function(c,b){var e=[];if(typeof Object.isArray(c)&&typeof b=="number"){for(var d=0,a=Math.min(c.length,b.length);d<a;d++){e[d]=c[d]*b}}else{if(typeof c=="number"&&typeof Object.isArray(b)){for(var d=0,a=Math.min(c.length,b.length);d<a;d++){e[d]=c*b[d]}}else{if(typeof Object.isArray(c)&&typeof Object.isArray(b)){for(var d=0,a=Math.min(c.length,b.length);d<a;d++){e[d]=c[d]*b[d]}}else{if(typeof c=="number"&&typeof b=="number"){for(var d=0,a=Math.min(c.length,b.length);d<a;d++){e[d]=c*b}}else{e=null}}}}return e};JXG.MathStatistics.prototype.subtract=function(c,b){var e=[];if(typeof Object.isArray(c)&&typeof b=="number"){for(var d=0,a=Math.min(c.length,b.length);d<a;d++){e[d]=c[d]-b}}else{if(typeof c=="number"&&typeof Object.isArray(b)){for(var d=0,a=Math.min(c.length,b.length);d<a;d++){e[d]=c-b[d]}}else{if(typeof Object.isArray(c)&&typeof Object.isArray(b)){for(var d=0,a=Math.min(c.length,b.length);d<a;d++){e[d]=c[d]-b[d]}}else{if(typeof c=="number"&&typeof b=="number"){for(var d=0,a=Math.min(c.length,b.length);d<a;d++){e[d]=c-b}}else{e=null}}}}return e};JXG.Chart=function(h,l,e){this.constructor();if(l.length==0){return}this.elements=[];var d=e.id;var b=e.name;this.init(h,d,b);this.id=this.board.addChart(this);var m,k,f;if(l.length>0&&(typeof l[0]=="number")){k=l;m=[];for(f=0;f<k.length;f++){m[f]=f+1}}else{if(l.length==1){k=l[0];m=[];var g;if(typeof k=="function"){g=k().length}else{g=k.length}for(f=0;f<g;f++){m[f]=f+1}}if(l.length==2){k=l[1];m=l[0]}}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,[m,k],e);break;case"line":j=this.drawLine(h,[m,k],e);break;case"spline":j=this.drawSpline(h,[m,k],e);break;case"pie":j=this.drawPie(h,[k],e);break;case"point":j=this.drawPoints(h,[m,k],e);break}this.elements.push(j)}};JXG.Chart.prototype=new JXG.GeometryElement;JXG.Chart.prototype.drawLine=function(d,b,a){var e=d.createElement("curve",b,a);return e};JXG.Chart.prototype.drawSpline=function(d,h,a){var j=h[0];var f=h[1];var m=JXG.Math.Numerics.splineDef(j,f);var k=new Array();var b=0;var l=(j[j.length-1]-j[0])/d.canvasWidth*1;while(j[0]+b*l<j[j.length-1]){k[b]=j[0]+b*l;b++}var g=JXG.Math.Numerics.splineEval(k,j,f,m);var e=d.createElement("curve",[k,g],a);return e};JXG.Chart.prototype.drawBar=function(h,k,f){var g;var e=[];if(f.fillOpacity==undefined){f.fillOpacity=0.6}var l=k[0];var j=k[1];var m;if(f&&f.width){m=f.width}else{if(l.length<=1){m=1}else{m=l[1]-l[0];for(g=1;g<l.length-1;g++){m=(l[g+1]-l[g]<m)?(l[g+1]-l[g]):m}}m*=0.8}for(g=0;g<l.length;g++){var c,o,n,b,a;if(typeof l[g]=="function"){c=function(){return l[g]()-m*0.5};o=function(){return l[g]()};n=function(){return l[g]()+m*0.5}}else{c=l[g]-m*0.5;o=l[g];n=l[g]+m*0.5}if(typeof j[g]=="function"){a=b}else{a=j[g]+0.2}b=j[g];var d=[];if(f.dir=="horizontal"){d[0]=h.createElement("point",[0,c],{name:"",fixed:true,visible:false});d[1]=h.createElement("point",[b,c],{name:"",fixed:true,visible:false});d[2]=h.createElement("point",[b,n],{name:"",fixed:true,visible:false});d[3]=h.createElement("point",[0,n],{name:"",fixed:true,visible:false});if(f.labels&&f.labels[g]){h.createElement("text",[b,n,f.labels[g]],f)}}else{d[0]=h.createElement("point",[c,0],{name:"",fixed:true,visible:false});d[1]=h.createElement("point",[c,b],{name:"",fixed:true,visible:false});d[2]=h.createElement("point",[n,b],{name:"",fixed:true,visible:false});d[3]=h.createElement("point",[n,0],{name:"",fixed:true,visible:false});if(f.labels&&f.labels[g]){h.createElement("text",[n,b,f.labels[g]],f)}}f.withLines=false;e[g]=h.createElement("polygon",d,f)}return e};JXG.Chart.prototype.drawPoints=function(f,c,b){var d;var e=[];b.fixed=true;b.name="";var a=c[0];var g=c[1];for(d=0;d<a.length;d++){e[d]=f.createElement("point",[a[d],g[d]],b)}return e};JXG.Chart.prototype.drawPie=function(d,r,f){var g=r[0];if(g.length<=0){return}if(typeof g[0]=="function"){return}var q;var n=[];var j=[];var e=[];var k=d.mathStatistics.sum(g);var c=f.colorArray||["#B02B2C","#3F4C6B","#C79810","#D15600","#FFFF88","#C3D9FF","#4096EE","#008C00"];var b=f.radius||4;var t={};t.name=f.name;t.id=f.id;t.strokeWidth=f.strokeWidth||1;t.strokeColor=f.strokeColor||"none";t.straightFirst=false;t.straightLast=false;t.fillColor=f.fillColor||"#FFFF88";t.fillOpacity=f.fillOpacity||0.6;t.highlightFillColor=f.highlightFillColor||"#FF7400";t.highlightStrokeColor=f.highlightStrokeColor||"#FF7400";var m=f.center||[0,0];var o=m[0];var a=m[1];var u=d.createElement("point",[o,a],{name:"",fixed:true,visible:false});n[0]=d.createElement("point",[b+o,0+a],{name:"",fixed:true,visible:false});var v=0;for(q=0;q<g.length;q++){v+=(k!=0)?(2*Math.PI*g[q]/k):0;var h=b*Math.cos(v)+o;var l=b*Math.sin(v)+a;n[q+1]=d.createElement("point",[h,l],{name:"",fixed:true,visible:false});j[q]=d.createElement("line",[u,n[q]],{strokeColor:"#ffffff",straightFirst:false,straightLast:false,strokeWidth:6,strokeOpacity:1});t.fillColor=c[q%c.length];e[q]=d.createElement("arc",[u,n[q],n[q+1]],t)}return e};JXG.Chart.prototype.updateRenderer=function(){};JXG.Chart.prototype.update=function(){if(this.needsUpdate){this.updateDataArray()}};JXG.Chart.prototype.updateDataArray=function(){};JXG.createChart=function(c,b,a){return new JXG.Chart(c,b,a)};JXG.JSXGraph.registerElement("chart",JXG.createChart);var Base64={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(c){var a="";var k,h,f,j,g,e,d;var b=0;c=Base64._utf8_encode(c);while(b<c.length){k=c.charCodeAt(b++);h=c.charCodeAt(b++);f=c.charCodeAt(b++);j=k>>2;g=((k&3)<<4)|(h>>4);e=((h&15)<<2)|(f>>6);d=f&63;if(isNaN(h)){e=d=64}else{if(isNaN(f)){d=64}}a=a+this._keyStr.charAt(j)+this._keyStr.charAt(g)+this._keyStr.charAt(e)+this._keyStr.charAt(d)}return a},decode:function(d,c){var a="";var l,j,g;var k,h,f,e;var b=0;d=d.replace(/[^A-Za-z0-9\+\/\=]/g,"");while(b<d.length){k=this._keyStr.indexOf(d.charAt(b++));h=this._keyStr.indexOf(d.charAt(b++));f=this._keyStr.indexOf(d.charAt(b++));e=this._keyStr.indexOf(d.charAt(b++));l=(k<<2)|(h>>4);j=((h&15)<<4)|(f>>2);g=((f&3)<<6)|e;a=a+String.fromCharCode(l);if(f!=64){a=a+String.fromCharCode(j)}if(e!=64){a=a+String.fromCharCode(g)}}if(c){a=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(d){d.replace(/ /g,"");lines=[];var c=d.length/76;for(var b=0;b<c;b++){lines[b]=d.substr(b*76,76)}if(c!=d.length/76){lines[lines.length]=d.substr(c*76,d.length-(c*76))}var a="";for(var b=0;b<lines.length;b++){a+=lines[b]+"\n"}return a},decodeAsArray:function(b){var c=this.decode(b);var a=[];for(i=0;i<c.length;i++){a[i]=c.charCodeAt(i)}return a},decodeGEONExT:function(a){return decodeAsArray(destrip(a),false)}};JXG.Gunzip=function(H){var l=[];var y="";var L=[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 O=[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 G=[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 C=[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 u=[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 m=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];var q=H;var b=0;var f=0;var P=1;var a=0;function d(){a+=8;if(b<q.length){return q[++b]}else{return -1}}function n(){P=1}function K(){a++;var R=(P&1);P>>=1;if(P==0){P=d();R=(P&1);P=(P>>1)|128}return R}function I(R){var T=0;var S=R;while(S--){T=(T<<1)|K()}if(R){T=L[T]>>(8-R)}return T}var g=new Array(32768);var M=0;var J,z;function c(){M=0}function s(R){z++;g[M++]=R;l.push(String.fromCharCode(R));if(M==32768){M=0}}function k(){this.b0=0;this.b1=0;this.jump=null;this.jumppos=-1}var e=288;var r=new Array(e);var E=new Array(32);var A=0;var N=null;var o=null;var D=new Array(64);var B=new Array(64);var t=0;var w=new Array(17);w[0]=0;var F;var p;function h(){while(1){if(w[t]>=p){return -1}if(F[w[t]]==t){return w[t]++}w[t]++}}function x(){var S=N[A];var R;if(t==17){return -1}A++;t++;R=h();if(R>=0){S.b0=R}else{S.b0=32768;if(x()){return -1}}R=h();if(R>=0){S.b1=R;S.jump=null}else{S.b1=32768;S.jump=N[A];S.jumppos=A;if(x()){return -1}}t--;return 0}function j(U,S,V,R){var T;N=U;A=0;F=V;p=S;for(T=0;T<17;T++){w[T]=0}t=0;if(x()){return -1}return 0}function v(T){var V=0;var U=T[V];while(1){var R;if(R=K()){if(!(U.b1&32768)){return U.b1}U=U.jump;for(var S=0;S<T.length;S++){if(T[S]===U){V=S;break}}}else{if(!(U.b0&32768)){return U.b0}V++;U=T[V]}}return -1}function Q(){var af,Z,ab,V;do{var af=K();var ab=I(2);switch(ab){case 0:break;case 1:break;case 2:break;case 3:break;default:break}if(ab==0){}else{if(ab==1){var U;while(1){U=(L[I(7)]>>1);if(U>23){U=(U<<1)|K();if(U>199){U-=128;U=(U<<1)|K()}else{U-=48;if(U>143){U=U+136}}}else{U+=256}if(U<256){s(U)}else{if(U==256){break}else{var W,aa;U-=256+1;W=I(G[U])+O[U];U=L[I(5)]>>3;if(u[U]>8){aa=I(8);aa|=(I(u[U]-8)<<8)}else{aa=I(u[U])}aa+=C[U];for(U=0;U<W;U++){var Z=g[(M-aa)&32767];s(Z)}}}}}else{if(ab==2){var U,R,Y,T,ae;var ad=new Array(288+32);Y=257+I(5);T=1+I(5);ae=4+I(4);for(U=0;U<19;U++){ad[U]=0}for(U=0;U<ae;U++){ad[m[U]]=I(3)}for(V=0;V<E.length;V++){E[V]=new k()}if(j(E,19,ad,0)){c();return 1}R=Y+T;V=0;var X=-1;while(V<R){X++;U=v(E);if(U<16){ad[V++]=U}else{if(U==16){var S;U=3+I(2);if(V+U>R){c();return 1}S=V?ad[V-1]:0;while(U--){ad[V++]=S}}else{if(U==17){U=3+I(3)}else{U=11+I(7)}if(V+U>R){c();return 1}while(U--){ad[V++]=0}}}}for(V=0;V<r.length;V++){r[V]=new k()}if(j(r,Y,ad,0)){c();return 1}for(V=0;V<E.length;V++){E[V]=new k()}var ac=new Array();for(V=Y;V<ad.length;V++){ac[V-Y]=ad[V]}if(j(E,T,ac,0)){c();return 1}while(1){U=v(r);if(U>=256){var W,aa;U-=256;if(U==0){break}U--;W=I(G[U])+O[U];U=v(E);if(u[U]>8){aa=I(8);aa|=(I(u[U]-8)<<8)}else{aa=I(u[U])}aa+=C[U];while(W--){var Z=g[(M-aa)&32767];s(Z)}}else{s(U)}}}}}}while(!af);c();n();return 0}JXG.Gunzip.prototype.unzip=function(){d(2);Q();return(l.join(""))}};JXG.Transformation=function(b,a,c){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,c)};JXG.Transformation.prototype={};JXG.Transformation.prototype.update=function(){};JXG.Transformation.prototype.setMatrix=function(c,b,d){var a;this.isNumericMatrix=true;for(a=0;a<d.length;a++){if(typeof d[a]!="number"){this.isNumericMatrix=false;break}}if(b=="translate"){this.evalParam=JXG.createEvalFunction(c,d,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(c,d,2);this.update=function(){this.matrix[1][1]=this.evalParam(0);this.matrix[2][2]=this.evalParam(1)}}else{if(b=="reflect"){if(d.length<4){d[0]=JXG.GetReferenceFromParameter(c,d[0])}if(d.length==2){d[1]=JXG.GetReferenceFromParameter(c,d[1])}if(d.length==4){this.evalParam=JXG.createEvalFunction(c,d,4)}this.update=function(){if(d.length==1){var e=d[0].point2.X()-d[0].point1.X();var j=d[0].point2.Y()-d[0].point1.Y();var f=d[0].point1.X();var h=d[0].point1.Y()}else{if(d.length==2){var e=d[1].X()-d[0].X();var j=d[1].Y()-d[0].Y();var f=d[0].X();var h=d[0].Y()}else{if(d.length==4){var e=this.evalParam(2)-this.evalParam(0);var j=this.evalParam(3)-this.evalParam(1);var f=this.evalParam(0);var h=this.evalParam(1)}}}var g=e*e+j*j;this.matrix[1][1]=(e*e-j*j)/g;this.matrix[1][2]=2*e*j/g;this.matrix[2][1]=2*e*j/g;this.matrix[2][2]=(-e*e+j*j)/g;this.matrix[1][0]=f*(1-this.matrix[1][1])-h*this.matrix[1][2];this.matrix[2][0]=h*(1-this.matrix[2][2])-f*this.matrix[2][1]}}else{if(b=="rotate"){if(d.length==3){this.evalParam=JXG.createEvalFunction(c,d,3)}else{if(d.length<=2){this.evalParam=JXG.createEvalFunction(c,d,1);if(d.length==2){d[1]=JXG.GetReferenceFromParameter(c,d[1])}}}this.update=function(){var f=this.evalParam(0);this.matrix[1][1]=Math.cos(f);this.matrix[1][2]=-Math.sin(f);this.matrix[2][1]=Math.sin(f);this.matrix[2][2]=Math.cos(f);if(d.length>1){if(d.length==3){var e=this.evalParam(1);var g=this.evalParam(2)}else{var e=d[1].X();var g=d[1].Y()}this.matrix[1][0]=e*(1-Math.cos(f))+g*Math.sin(f);this.matrix[2][0]=g*(1-Math.cos(f))-e*Math.sin(f)}}}else{if(b=="shear"){this.evalParam=JXG.createEvalFunction(c,d,1);this.update=function(){var e=this.evalParam(0);this.matrix[1][1]=Math.tan(e)}}else{if(b=="generic"){this.evalParam=JXG.createEvalFunction(c,d,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(e){var d=[];for(var c=0;c<e.matrix.length;c++){d[c]=[]}this.update();e.update();for(c=0;c<e.matrix.length;c++){for(var b=0;b<this.matrix[0].length;b++){var f=0;for(var a=0;a<this.matrix.length;a++){f+=e.matrix[c][a]*this.matrix[a][b]}d[c][b]=f}}this.update=function(){for(c=0;c<this.matrix.length;c++){for(b=0;b<this.matrix[0].length;b++){this.matrix[c][b]=d[c][b]}}};return true};JXG.createTransform=function(a,c,b){return new JXG.Transformation(a,b.type,c)};JXG.JSXGraph.registerElement("transform",JXG.createTransform);JXG.Board.prototype.angle=function(a,c,b){return this.algebra.angle(a,c,b)};JXG.Board.prototype.rad=function(a,c,b){return this.algebra.rad(a,c,b)};JXG.Board.prototype.distance=function(b,a){return this.algebra.distance(b,a)};JXG.Board.prototype.pow=function(d,c){return this.algebra.pow(d,c)};JXG.Board.prototype.round=function(a,b){return this.algebra.round(a,b)};JXG.Board.prototype.cosh=function(a){return this.algebra.cosh(a)};JXG.Board.prototype.sinh=function(a){return this.algebra.sinh(a)};JXG.Board.prototype.D=function(a){return this.algebra.D(a)};JXG.Board.prototype.I=function(a,b){return this.algebra.I(a,b)};JXG.Board.prototype.root=function(b,a){return this.algebra.root(b,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(b){if(b<0){return NaN}else{var a=1;while(b>1){a*=b;b--}return a}};JXG.Point.prototype.setPositionX=function(c,a){var b=(c==JXG.COORDS_BY_USER)?this.coords.usrCoords[2]:this.coords.scrCoords[2];this.setPosition(c,a,b)};JXG.Point.prototype.setPositionY=function(c,b){var a=(c==JXG.COORDS_BY_USER)?this.coords.usrCoords[1]:this.coords.scrCoords[1];this.setPosition(c,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.intersectionFunc=function(c,a,b){return function(){return c.board.algebra.meet(c.stdform,a.stdform)[b]}};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.Options=function(){this.fontSize=12;this.grid=new Object();this.grid.hasGrid=false;this.grid.gridX=2;this.grid.gridY=2;this.grid.gridColor="#C0C0C0";this.grid.gridOpacity="1";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.withTicks=false;this.line.ticks.ticksDelta=1;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(b){b.hasGrid=this.grid.hasGrid;b.gridX=this.grid.gridX;b.gridY=this.grid.gridY;b.gridColor=this.grid.gridColor;b.gridOpacity=this.grid.gridOpacity;b.gridDash=this.grid.gridDash;b.snapToGrid=this.grid.snapToGrid;b.snapSizeX=this.grid.SnapSizeX;b.snapSizeY=this.grid.SnapSizeY;for(var a in b.objects){if(b.objects[a].type==JXG.OBJECT_TYPE_POINT){b.objects[a].visProp.fillColor=this.point.fillColor;b.objects[a].visProp.highlightFillColor=this.point.highlightFillColor;b.objects[a].visProp.strokeColor=this.point.strokeColor;b.objects[a].visProp.highlightStrokeColor=this.point.highlightStrokeColor}else{if(b.objects[a].type==JXG.OBJECT_TYPE_LINE){b.objects[a].visProp.fillColor=this.line.fillColor;b.objects[a].visProp.highlightFillColor=this.line.highlightFillColor;b.objects[a].visProp.strokeColor=this.line.strokeColor;b.objects[a].visProp.highlightStrokeColor=this.line.highlightStrokeColor}else{if(b.objects[a].type==JXG.OBJECT_TYPE_CIRCLE){b.objects[a].visProp.fillColor=this.circle.fillColor;b.objects[a].visProp.highlightFillColor=this.circle.highlightFillColor;b.objects[a].visProp.strokeColor=this.circle.strokeColor;b.objects[a].visProp.highlightStrokeColor=this.circle.highlightStrokeColor}else{if(b.objects[a].type==JXG.OBJECT_TYPE_ANGLE){b.objects[a].visProp.fillColor=this.angle.fillColor;b.objects[a].visProp.highlightFillColor=this.angle.highlightFillColor;b.objects[a].visProp.strokeColor=this.angle.strokeColor}else{if(b.objects[a].type==JXG.OBJECT_TYPE_ARC){b.objects[a].visProp.fillColor=this.arc.fillColor;b.objects[a].visProp.highlightFillColor=this.arc.highlightFillColor;b.objects[a].visProp.strokeColor=this.arc.strokeColor;b.objects[a].visProp.highlightStrokeColor=this.arc.highlightStrokeColor}else{if(b.objects[a].type==JXG.OBJECT_TYPE_POLYGON){b.objects[a].visProp.fillColor=this.polygon.fillColor;b.objects[a].visProp.highlightFillColor=this.polygon.highlightFillColor;b.objects[a].visProp.fillOpacity=this.polygon.fillOpacity;b.objects[a].visProp.highlightFillOpacity=this.polygon.highlightFillOpacity}else{if(b.objects[a].type==JXG.OBJECT_TYPE_CURVE){b.objects[a].visProp.strokeColor=this.curve.strokeColor}}}}}}}}for(var a in b.objects){if(b.objects[a].type==JXG.OBJECT_TYPE_SECTOR){b.objects[a].arc.visProp.fillColor=this.sector.fillColor;b.objects[a].arc.visProp.highlightFillColor=this.sector.highlightFillColor;b.objects[a].arc.visProp.fillOpacity=this.sector.fillOpacity;b.objects[a].arc.visProp.highlightFillOpacity=this.sector.highlightFillOpacity}}b.fullUpdate=true;b.update();b.fullUpdate=false;if(b.hasGrid){b.renderer.removeGrid(b);b.renderer.drawGrid(b)}};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(d){if(d=="none"){return d}var e=new JXG.RGBColor(d);var j=e.r;var h=e.g;var c=e.b;var a=0.3*j+0.59*h+0.11*c;var k="0123456789ABCDEF";var f=k.charAt((a>>4)&15)+k.charAt(a&15);d="#"+f+""+f+""+f;return d};JXG.RGBColor=function(g){this.ok=false;if(g.charAt(0)=="#"){g=g.substr(1,6)}g=g.replace(/ /g,"");g=g.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 c in a){if(g==c){g=a[c]}}var h=[{re:/^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/,example:["rgb(123, 234, 45)","rgb(255,234,245)"],process:function(j){return[parseInt(j[1]),parseInt(j[2]),parseInt(j[3])]}},{re:/^(\w{2})(\w{2})(\w{2})$/,example:["#00ff00","336699"],process:function(j){return[parseInt(j[1],16),parseInt(j[2],16),parseInt(j[3],16)]}},{re:/^(\w{1})(\w{1})(\w{1})$/,example:["#fb0","f0f"],process:function(j){return[parseInt(j[1]+j[1],16),parseInt(j[2]+j[2],16),parseInt(j[3]+j[3],16)]}}];for(var b=0;b<h.length;b++){var e=h[b].re;var d=h[b].process;var f=e.exec(g);if(f){channels=d(f);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 d=this.r.toString(16);var c=this.g.toString(16);var a=this.b.toString(16);if(d.length==1){d="0"+d}if(c.length==1){c="0"+c}if(a.length==1){a="0"+a}return"#"+d+c+a};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(c,d){var b=this.createPrimitive("text","licenseText");b.setAttributeNS(null,"x","20");b.setAttributeNS(null,"y",2+d);b.setAttributeNS(null,"style","font-family:Arial,Helvetica,sans-serif; font-size:"+d+"px; fill:#356AA0;  opacity:0.3;");var a=document.createTextNode(c);b.appendChild(a);this.appendChildPrimitive(b,"images")};JXG.SVGRenderer.prototype.drawAxis=function(b){var c=this.createPrimitive("line",b.id);c.setAttributeNS(null,"stroke",b.visProp.strokeColor);c.setAttributeNS(null,"stroke-width",b.visProp.strokeWidth);var a=this.createArrowHead(b);a.setAttributeNS(null,"fill",b.visProp.strokeColor);this.defs.appendChild(a);c.setAttributeNS(null,"marker-end","url(#"+b.id+"Triangle)");this.lines.appendChild(c);b.rendNode=c;b.rendNodeTriangle=a;this.updateAxisTicks(b,0);this.updateAxis(b)};JXG.SVGRenderer.prototype.updateAxis=function(c){var b=new JXG.Coords(JXG.COORDS_BY_USER,[c.point1.coords.usrCoords[1],c.point1.coords.usrCoords[2]],c.board);var a=new JXG.Coords(JXG.COORDS_BY_USER,[c.point2.coords.usrCoords[1],c.point2.coords.usrCoords[2]],c.board);if(c.visProp.straightFirst||c.visProp.straightLast){this.calcStraight(c,b,a)}var d=$(c.id);if(c.point1.coords.scrCoords[1]==c.point2.coords.scrCoords[1]){this.updateLinePrimitive(d,c.board.origin.scrCoords[1],c.board.canvasHeight,c.board.origin.scrCoords[1],0)}else{this.updateLinePrimitive(d,0,c.board.origin.scrCoords[2],c.board.canvasWidth,c.board.origin.scrCoords[2])}this.setStrokeProp(d,c.visProp);this.updateAxisTicksInnerLoop(c,0)};JXG.SVGRenderer.prototype.drawArc=function(b){var c=this.createPrimitive("path",b.id);b.rendNode=c;var g=b.getRadius();var d=b.board.algebra.trueAngle(b.point2,b.midpoint,b.point3);var a={};a.midpoint=b.midpoint;a.getRadius=function(){return g};var h=b.board.algebra.projectPointToCircle(b.point3,a);var e="M "+b.point2.coords.scrCoords[1]+" "+b.point2.coords.scrCoords[2]+" A ";e+=Math.round(g*b.board.unitX*b.board.zoomX)+" "+Math.round(g*b.board.unitY*b.board.zoomY)+" 0 ";if(d>=180){e+="1 "}else{e+="0 "}e+="0 ";e+=h.scrCoords[1]+" "+h.scrCoords[2];this.updatePathPrimitive(c,e);this.setStrokeProp(c,b.visProp);c.setAttributeNS(null,"fill","none");this.setDashStyle(c,b.visProp);var l;var k;if(b.visProp.firstArrow){var l=this.createArrowHead(b,"Start");this.defs.appendChild(l);b.rendNodeTriangleStart=l;c.setAttributeNS(null,"marker-end","url(#"+b.id+"TriangleStart)")}if(b.visProp.lastArrow){var l=this.createArrowHead(b,"End");this.defs.appendChild(l);b.rendNodeTriangleEnd=l;c.setAttributeNS(null,"marker-start","url(#"+b.id+"TriangleEnd)")}var j=this.createPrimitive("path",b.id+"_fill");var f="M "+b.midpoint.coords.scrCoords[1]+" "+b.midpoint.coords.scrCoords[2];f+=" L "+b.point2.coords.scrCoords[1]+" "+b.point2.coords.scrCoords[2]+" A ";f+=Math.round(g*b.board.unitX*b.board.zoomX)+" "+Math.round(g*b.board.unitY*b.board.zoomY)+" 0 ";if(d>=180){f+="1 "}else{f+="0 "}f+="0 ";f+=h.scrCoords[1]+" "+h.scrCoords[2];f+=" L "+b.midpoint.coords.scrCoords[1]+" "+b.midpoint.coords.scrCoords[2]+" z";this.updatePathPrimitive(j,f);this.setFillProp(j,b.visProp);j.setAttributeNS(null,"stroke","none");this.arcs.appendChild(c);this.sectors.appendChild(j);b.rendNodeFill=j;this.setDraft(b);if(!b.visProp.visible){b.hideElement()}};JXG.SVGRenderer.prototype.drawAngle=function(e){var h=e.board.algebra.trueAngle(e.point1,e.point2,e.point3);var g={};g.midpoint=e.point2;g.getRadius=function(){return e.radius};var d=e.board.algebra.projectPointToCircle(e.point1,g);var b=e.board.algebra.projectPointToCircle(e.point3,g);var f=this.createPrimitive("path",e.id+"_1");var c="M "+e.point2.coords.scrCoords[1]+" "+e.point2.coords.scrCoords[2];c+=" L "+d.scrCoords[1]+" "+d.scrCoords[2]+" A ";c+=Math.round(e.radius*e.board.unitX*e.board.zoomX)+" "+Math.round(e.radius*e.board.unitY*e.board.zoomY)+" 0 ";if(h>=180){c+="1 "}else{c+="0 "}c+="0 ";c+=b.scrCoords[1]+" "+b.scrCoords[2];c+=" L "+e.point2.coords.scrCoords[1]+" "+e.point2.coords.scrCoords[2]+" z";f.setAttributeNS(null,"d",c);f.setAttributeNS(null,"fill",e.visProp.fillColor);f.setAttributeNS(null,"fill-opacity",e.visProp.fillOpacity);f.setAttributeNS(null,"stroke","none");var a=this.createPrimitive("path",e.id+"_2");var c="M "+d.scrCoords[1]+" "+d.scrCoords[2]+" A ";c+=Math.round(e.radius*e.board.unitX*e.board.zoomX)+" "+Math.round(e.radius*e.board.unitY*e.board.zoomY)+" 0 ";if(h>=180){c+="1 "}else{c+="0 "}c+="0 ";c+=b.scrCoords[1]+" "+b.scrCoords[2];a.setAttributeNS(null,"d",c);a.setAttributeNS(null,"id",e.id+"_2");a.setAttributeNS(null,"fill","none");a.setAttributeNS(null,"stroke",e.visProp.strokeColor);a.setAttributeNS(null,"stroke-opacity",e.visProp.strokeOpacity);this.appendChildPrimitive(f,"angles");e.rendNode1=f;this.appendChildPrimitive(a,"angles");e.rendNode2=a;this.setObjectStrokeWidth(e,e.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;var c=this.createPrimitive("image",b.id);c.setAttributeNS(this.xlinkNamespace,"xlink:href",a);this.appendChildPrimitive(c,b.displayLevel);b.rendNode=c;this.updateImage(b)};JXG.SVGRenderer.prototype.transformImage=function(b,a){var c=b.rendNode;var d=c.getAttributeNS(null,"transform");d+=" "+this.joinTransforms(b,a);c.setAttributeNS(null,"transform",d)};JXG.SVGRenderer.prototype.joinTransforms=function(d,b){var e="";for(var a=0;a<b.length;a++){var c=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];e+="matrix("+c+") "}return e};JXG.SVGRenderer.prototype.transformImageParent=function(c,a){if(a!=null){var b=a[1][1]+","+a[2][1]+","+a[1][2]+","+a[2][2]+","+a[1][0]+","+a[2][0];var d="matrix("+b+")"}else{var d=""}c.rendNode.setAttributeNS(null,"transform",d)};JXG.SVGRenderer.prototype.removeGrid=function(a){a.hasGrid=false;var b=this.grid;while(b.childNodes.length>0){b.removeChild(b.firstChild)}};JXG.SVGRenderer.prototype.setObjectDash=function(a){if(a.elementClass!=JXG.OBJECT_CLASS_POINT){var b;if(a.type==JXG.OBJECT_TYPE_ANGLE){b=a.rendNode2}else{b=a.rendNode}if(a.visProp.dash>0){var c=a.visProp.dash;b.setAttributeNS(null,"stroke-dasharray",this.dashArray[c-1])}else{if(b.hasAttributeNS(null,"stroke-dasharray")){b.removeAttributeNS(null,"stroke-dasharray")}}}};JXG.SVGRenderer.prototype.setObjectStrokeColor=function(d,a,b){if(b==undefined){b=1}var g,f;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){var 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){var e=d.rendNode;e.setAttributeNS(null,"stroke",g);e.setAttributeNS(null,"stroke-opacity",f)}else{var 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){if(b==undefined){b=1}var g,f;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){var 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{var e=d.rendNode;e.setAttributeNS(null,"fill",g);e.setAttributeNS(null,"fill-opacity",f)}}}else{if(d.visProp.style>=3&&d.visProp.style<=9){var e=d.rendNode;e.setAttributeNS(null,"fill",g);e.setAttributeNS(null,"fill-opacity",f)}else{var 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.hide=function(a){if(JXG.IsPoint(a)){if(a.visProp.style>=3&&a.visProp.style<=9){var b=a.rendNode;b.setAttributeNS(null,"display","none");b.style.visibility="hidden"}else{var 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){var 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){var 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{var b=a.rendNode;b.setAttributeNS(null,"display","none");b.style.visibility="hidden"}}}};JXG.SVGRenderer.prototype.show=function(a){if(JXG.IsPoint(a)){if(a.visProp.style>=3&&a.visProp.style<=9){var b=a.rendNode;b.setAttributeNS(null,"display","inline");b.style.visibility="inherit"}else{var 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){var 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){var 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{var b=a.rendNode;b.setAttributeNS(null,"display","inline");b.style.visibility="inherit"}}}};JXG.SVGRenderer.prototype.remove=function(a){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.setStrokeProp=function(b,a){if(a.strokeColor!=null){b.setAttributeNS(null,"stroke",a.strokeColor)}if(a.strokeOpacity!=null){b.setAttributeNS(null,"stroke-opacity",a.strokeOpacity)}if(a.strokeWidth!=null){b.setAttributeNS(null,"stroke-width",a.strokeWidth)}};JXG.SVGRenderer.prototype.setFillProp=function(b,a){if(a.fillColor!=null){b.setAttributeNS(null,"fill",a.fillColor)}if(a.fillOpacity!=null){b.setAttributeNS(null,"fill-opacity",a.fillOpacity)}};JXG.SVGRenderer.prototype.setDashStyle=function(b,a){if(a.dash>0){var c=a.dash;b.setAttributeNS(null,"stroke-dasharray",this.dashArray[c-1])}};JXG.SVGRenderer.prototype.createPrimitive=function(a,c){var b=this.container.ownerDocument.createElementNS(this.svgNamespace,a);b.setAttributeNS(null,"id",c);b.style.position="absolute";return b};JXG.SVGRenderer.prototype.createArrowHead=function(c,e){var d=c.id+"Triangle";if(e!=null){d+=e}var b=this.createPrimitive("marker",d);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",c.visProp.strokeColor);b.setAttributeNS(null,"stroke-opacity",c.visProp.strokeOpacity);b.setAttributeNS(null,"fill",c.visProp.strokeColor);b.setAttributeNS(null,"fill-opacity",c.visProp.strokeOpacity);var a=this.container.ownerDocument.createElementNS(this.svgNamespace,"path");if(e=="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(c,b,d){var a=this.createArrowHead(b,d);this.defs.appendChild(a);c.setAttributeNS(null,"marker-end","url(#"+b.id+"Triangle)");b.rendNodeTriangle=a};JXG.SVGRenderer.prototype.makeArrows=function(b){if(b.visProp.firstArrow){var 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{var a=b.rendNodeTriangleStart;if(a!=null){this.remove(a)}}if(b.visProp.lastArrow){var 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{var a=b.rendNodeTriangleEnd;if(a!=null){this.remove(a)}}};JXG.SVGRenderer.prototype.updateLinePrimitive=function(e,b,a,d,c){e.setAttributeNS(null,"x1",b);e.setAttributeNS(null,"y1",a);e.setAttributeNS(null,"x2",d);e.setAttributeNS(null,"y2",c)};JXG.SVGRenderer.prototype.updateCirclePrimitive=function(c,a,d,b){c.setAttributeNS(null,"cx",(a));c.setAttributeNS(null,"cy",(d));c.setAttributeNS(null,"r",(b))};JXG.SVGRenderer.prototype.updateEllipsePrimitive=function(b,a,e,d,c){b.setAttributeNS(null,"cx",(a));b.setAttributeNS(null,"cy",(e));b.setAttributeNS(null,"rx",(d));b.setAttributeNS(null,"ry",(c))};JXG.SVGRenderer.prototype.updateRectPrimitive=function(d,a,e,b,c){d.setAttributeNS(null,"x",(a));d.setAttributeNS(null,"y",(e));d.setAttributeNS(null,"width",(b));d.setAttributeNS(null,"height",(c))};JXG.SVGRenderer.prototype.updatePathPrimitive=function(a,b){a.setAttributeNS(null,"d",b);a.setAttributeNS(null,"stroke-linecap","round");a.setAttributeNS(null,"stroke-linejoin","round")};JXG.SVGRenderer.prototype.updatePathPrimitive2=function(a,c){var b=a.rendNode;b.setAttributeNS(null,"d",c);b.setAttributeNS(null,"stroke-linecap","round");b.setAttributeNS(null,"stroke-linejoin","round")};JXG.SVGRenderer.prototype.updatePathStringPrimitive=function(d){if(d.numberPoints<=0){return""}var g=" M ";var f="";var c=2*d.board.canvasHeight;var a=2*d.board.canvasWidth;for(var b=0;b<d.numberPoints;b++){var e=d.points[b].scrCoords;if(isNaN(e[1])||isNaN(e[2])||Math.abs(e[1])>a||Math.abs(e[2])>c){g=" M "}else{f+=g+e[1]+" "+e[2];g=" L "}}return f};JXG.SVGRenderer.prototype.updatePolygonePrimitive=function(d,b){d.setAttributeNS(null,"stroke","none");var e="";for(var a=0;a<b.vertices.length-1;a++){var c=b.vertices[a].coords.scrCoords;e=e+c[1]+","+c[2];if(a<b.vertices.length-2){e+=" "}}d.setAttributeNS(null,"points",e)};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.curves.appendChild(a);break;case"circles":this.circles.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,c){if(a=="stroked"){return}b.setAttributeNS(null,a,c)};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");var b=a.ownerDocument.createStyleSheet();b.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(c,d){var b=this.createPrimitive("textbox","licenseText");b.style.left=20;b.style.top=(2);b.style.fontSize=(d);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(c);b.appendChild(a);this.appendChildPrimitive(b,"images")};JXG.VMLRenderer.prototype.drawAxis=function(b){var c;c=this.container.ownerDocument.createElement("v:line");c.style.position="absolute";if(b.point1.coords.scrCoords[1]==b.point2.coords.scrCoords[1]){c.setAttribute("from",(b.board.origin.scrCoords[1])+"px,"+(b.board.canvasHeight)+"px");c.setAttribute("to",(b.board.origin.scrCoords[1])+"px,0px")}else{c.setAttribute("from","0px,"+(b.board.origin.scrCoords[2])+"px");c.setAttribute("to",(b.board.canvasWidth)+"px,"+(b.board.origin.scrCoords[2])+"px")}this.setStrokeProp(c,b.visProp);c.style.zIndex="4";c.setAttribute("id",b.id);b.rendNode=c;var a=this.container.ownerDocument.createElement("v:stroke");a.setAttribute("endarrow","block");a.setAttribute("endarrowlength","long");c.appendChild(a);this.updateAxisTicks(b,0);this.container.appendChild(c)};JXG.VMLRenderer.prototype.updateAxis=function(d){var e=$(d.id);if(d.point1.coords.scrCoords[1]==d.point2.coords.scrCoords[1]){e.setAttribute("from",(d.board.origin.scrCoords[1])+"px,"+(d.board.canvasHeight)+"px");e.setAttribute("to",(d.board.origin.scrCoords[1])+"px,0px")}else{e.setAttribute("from","0px,"+(d.board.origin.scrCoords[2])+"px");e.setAttribute("to",(d.board.canvasWidth)+"px,"+(d.board.origin.scrCoords[2])+"px")}this.setStrokeProp(e,d.visProp);for(var b=0;b<d.ticks.length;b++){var f=d.ticks[b];var a=$(d.id+"tick"+b);a.setAttribute("from",f.scrCoords[1]+"px,"+f.scrCoords[2]+"px");if(d.point1.coords.scrCoords[1]==d.point2.coords.scrCoords[1]){a.setAttribute("to",(f.scrCoords[1]-d.r)+"px,"+(f.scrCoords[2])+"px")}else{a.setAttribute("to",(f.scrCoords[1])+"px,"+(f.scrCoords[2]+d.r)+"px")}a.setAttribute("stroked","true");a.setAttribute("strokecolor",d.visProp.strokeColor,1);a.setAttribute("strokeweight",d.visProp.strokeWidth)}};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 d=this.createPrimitive("arc",b.id);d.setAttribute("filled","false");this.setStrokeProp(d,b.visProp);d.style.left=(b.midpoint.coords.scrCoords[1]-Math.round(j*b.board.unitX*b.board.zoomX))+"px";d.style.top=(b.midpoint.coords.scrCoords[2]-Math.round(j*b.board.unitY*b.board.zoomY))+"px";d.style.width=(Math.round(j*b.board.unitX*b.board.zoomX)*2)+"px";d.style.height=(Math.round(j*b.board.unitY*b.board.zoomY)*2)+"px";d.setAttribute("startangle",h);d.setAttribute("endangle",g);var c=this.container.ownerDocument.createElement("v:stroke");if(b.visProp.lastArrow){c.setAttribute("endarrow","block");c.setAttribute("endarrowlength","long")}if(b.visProp.firstArrow){c.setAttribute("startarrow","block");c.setAttribute("startarrowlength","long")}c.setAttribute("id",b.id+"stroke");var f=b.visProp.dash;c.setAttribute("dashstyle",this.dashArray[f]);d.appendChild(c);var q=this.createPrimitive("shape",b.id+"_fill");if(b.visProp.fillColor=="none"){q.setAttribute("filled","false")}else{q.setAttribute("filled","true");q.setAttribute("fillcolor",b.visProp.fillColor)}q.setAttribute("stroked","false");var o=Math.round(j*b.board.unitX*b.board.zoomX);var m=Math.round(j*b.board.unitY*b.board.zoomY);q.style.width=o;q.style.height=m;q.setAttribute("coordsize",o+","+m);var l=this.container.ownerDocument.createElement("v:path");l.setAttribute("id",b.id+"path");var n=b.board.algebra.projectPointToCircle(b.point3,b);var e="m "+b.midpoint.coords.scrCoords[1]+","+b.midpoint.coords.scrCoords[2]+" l ";e+=b.point2.coords.scrCoords[1]+","+b.point2.coords.scrCoords[2]+" at ";e+=(b.midpoint.coords.scrCoords[1]-o)+","+(b.midpoint.coords.scrCoords[2]-m)+",";e+=(b.midpoint.coords.scrCoords[1]+o)+","+(b.midpoint.coords.scrCoords[2]+m);e+=" "+b.point2.coords.scrCoords[1]+","+b.point2.coords.scrCoords[2];e+=", "+n.scrCoords[1]+","+n.scrCoords[2]+" l ";e+=b.midpoint.coords.scrCoords[1]+","+b.midpoint.coords.scrCoords[2]+" x e";l.setAttribute("v",e);q.appendChild(l);var k=this.container.ownerDocument.createElement("v:fill");k.setAttribute("id",b.id+"_fillnode");k.setAttribute("opacity",(b.visProp.fillOpacity*100)+"%");q.appendChild(k);this.appendChildPrimitive(d,"lines");this.appendChildPrimitive(q,"angles");b.rendNode=d;b.rendNodeFill=q;if(b.visProp.draft){this.setDraft(b)}};JXG.VMLRenderer.prototype.drawAngle=function(c){var d=this.container.ownerDocument.createElement("v:shape");d.style.position="absolute";d.setAttribute("filled","true");d.setAttribute("fillcolor",c.visProp.fillColor);d.setAttribute("stroked","false");d.style.zIndex="2";d.setAttribute("id",c.id+"_1");var l=Math.round(c.radius*c.board.unitX*c.board.zoomX);var k=Math.round(c.radius*c.board.unitY*c.board.zoomY);d.style.width=l;d.style.height=k;d.setAttribute("coordsize",l+","+k);var a={};a.midpoint=c.point2;a.getRadius=function(){return c.radius};var o=c.board.algebra.projectPointToCircle(c.point1,a);var n=c.board.algebra.projectPointToCircle(c.point3,a);var j=this.container.ownerDocument.createElement("v:path");j.setAttribute("id",c.id+"_path");var e="m "+c.point2.coords.scrCoords[1]+","+c.point2.coords.scrCoords[2]+" l ";e+=o.scrCoords[1]+","+o.scrCoords[2]+" at ";e+=(c.point2.coords.scrCoords[1]-l)+","+(c.point2.coords.scrCoords[2]-k)+",";e+=(c.point2.coords.scrCoords[1]+l)+","+(c.point2.coords.scrCoords[2]+k);e+=" "+o.scrCoords[1]+","+o.scrCoords[2];e+=", "+n.scrCoords[1]+","+n.scrCoords[2]+" l ";e+=c.point2.coords.scrCoords[1]+","+c.point2.coords.scrCoords[2]+" x e";j.setAttribute("v",e);d.appendChild(j);var h=this.container.ownerDocument.createElement("v:fill");h.setAttribute("opacity",c.visProp.fillOpacity*10+"%");h.setAttribute("id",c.id+"_fillnode");d.appendChild(h);var b={};b.coords=new JXG.Coords(JXG.COORDS_BY_USER,[c.point2.coords.usrCoords[1],c.board.origin.scrCoords[2]/(c.board.unitY*c.board.zoomY)],c.board);var f=c.board.algebra.trueAngle(c.point1,c.point2,b);var g=c.board.algebra.trueAngle(c.point3,c.point2,b);if(f<g){g-=360}var m=this.container.ownerDocument.createElement("v:arc");m.style.position="absolute";m.style.left=(c.point2.coords.scrCoords[1]-Math.round(c.radius*c.board.unitX*c.board.zoomX))+"px";m.style.top=(c.point2.coords.scrCoords[2]-Math.round(c.radius*c.board.unitY*c.board.zoomY))+"px";m.style.width=(Math.round(c.radius*c.board.unitX*c.board.zoomX)*2)+"px";m.style.height=(Math.round(c.radius*c.board.unitY*c.board.zoomY)*2)+"px";m.setAttribute("startangle",g);m.setAttribute("endangle",f);m.setAttribute("stroked","true");m.setAttribute("strokecolor",c.visProp.strokeColor);m.setAttribute("strokeweight",c.visProp.strokeWidth);m.setAttribute("filled","false");m.style.zIndex="4";m.setAttribute("id",c.id+"_2");this.container.appendChild(d);this.container.appendChild(m);c.rendNode1=d;c.rendNode2=m;if(!c.visProp.visible){c.hideElement(c)}};JXG.VMLRenderer.prototype.updateAngle=function(a){this.remove(a.rendNode1);this.remove(a.rendNode2);this.drawAngle(a);return};JXG.VMLRenderer.prototype.drawImage=function(b){var a="data:image/png;base64,"+b.imageBase64String;var c=this.container.ownerDocument.createElement("img");c.style.position="absolute";c.setAttribute("id",b.id);c.setAttribute("src",a);this.container.appendChild(c);this.appendChildPrimitive(c,b.displayLevel);c.style.filter="progid:DXImageTransform.Microsoft.Matrix(M11='1.0', sizingMethod='auto expand')";b.rendNode=c;this.updateImage(b)};JXG.VMLRenderer.prototype.transformImage=function(c,b){var d=c.rendNode;var a=this.joinTransforms(c,b);d.style.left=(c.coords.scrCoords[1]+a[1][0])+"px";d.style.top=(c.coords.scrCoords[2]-c.size[1]+a[2][0])+"px";d.filters.item(0).M11=a[1][1];d.filters.item(0).M12=a[1][2];d.filters.item(0).M21=a[2][1];d.filters.item(0).M22=a[2][2]};JXG.VMLRenderer.prototype.joinTransforms=function(d,c){var a=[[1,0,0],[0,1,0],[0,0,1]];for(var b=0;b<c.length;b++){a=d.board.algebra.matMatMult(c[b].matrix,a)}return a};JXG.VMLRenderer.prototype.transformImageParent=function(b,a){};JXG.VMLRenderer.prototype.removeGrid=function(b){b.hasGrid=false;for(var a=0;a<=this.gridXsize;a++){var d=$("gridx"+a);while(d.childNodes.length>0){d.removeChild(d.firstChild)}d.remove()}for(var a=0;a<=this.gridYsize;a++){var d=$("gridy"+a);while(d.childNodes.length>0){d.removeChild(d.firstChild)}d.remove()}};JXG.VMLRenderer.prototype.hide=function(a){if(!JXG.IsPoint(a)){if(a.type!=JXG.OBJECT_TYPE_ANGLE){var b=a.rendNode;b.style.visibility="hidden";if(a.type==JXG.OBJECT_TYPE_ARC){b=a.rendNodeFill;b.style.visibility="hidden"}}else{var b=a.rendNode1;b.style.visibility="hidden";b=a.rendNode2;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)){if(a.type!=JXG.OBJECT_TYPE_ANGLE){var b=a.rendNode;b.style.visibility="inherit";if(a.type==JXG.OBJECT_TYPE_ARC){b=a.rendNodeFill;b.style.visibility="inherit"}}else{var b=a.rendNode1;b.style.visibility="inherit";b=a.rendNode2;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 c=b.rendNode2;var a=b.visProp.dash;c.setAttribute("dashstyle",this.dashArray[a])}else{var c=$(b.id+"stroke");if(c){var a=b.visProp.dash;c.setAttribute("dashstyle",this.dashArray[a])}}}};JXG.VMLRenderer.prototype.setObjectStrokeColor=function(d,a,b){var g,f;if(typeof a=="function"){g=a()}else{g=a}if(d.elementClass!=JXG.OBJECT_CLASS_POINT){if(d.type==JXG.OBJECT_TYPE_ANGLE){var e=d.rendNode2;e.setAttribute("stroked","true");e.setAttribute("strokecolor",g)}else{if(d.type==JXG.OBJECT_TYPE_TEXT){d.rendNode.style.color=g}else{var e=d.rendNode;e.setAttribute("stroked","true");e.setAttribute("strokecolor",g)}}}else{if(d.visProp.style>=3&&d.visProp.style<=9){var e=d.rendNode;e.setAttribute("stroked","true");e.setAttribute("strokecolor",g)}else{var e=d.rendNodeX1;e.setAttribute("stroked","true");e.setAttribute("strokecolor",g);var e=d.rendNodeX2;e.setAttribute("stroked","true");e.setAttribute("strokecolor",g)}}};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){f=e.rendNodeFill;if(h=="none"){f.setAttribute("filled","false")}else{f.setAttribute("filled","true");f.setAttribute("fillcolor",h)}}else{if(e.type==JXG.OBJECT_TYPE_ANGLE){f=e.rendNode1;if(h=="none"){f.setAttribute("filled","false")}else{f.setAttribute("filled","true");f.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;if(h=="none"){f.setAttribute("filled","false")}else{f.setAttribute("filled","true");f.setAttribute("fillcolor",h)}}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=$(e.id+"_fillnode");if(g!=undefined){d.setAttribute("opacity",(g*100)+"%")}}};JXG.VMLRenderer.prototype.remove=function(a){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.setStrokeProp=function(c,a){if(a.strokeColor=="none"){c.setAttribute("stroked","false")}else{c.setAttribute("stroked","true");var b=["strokeColor","strokeWidth"];var d=["strokecolor","strokeweight"];this.setAttributes(c,b,d,a)}};JXG.VMLRenderer.prototype.setFillProp=function(c,b){if(b.fillColor==null||b.fillColor=="none"){c.setAttribute("filled","false")}else{c.setAttribute("filled","true");c.setAttribute("fillcolor",b.fillColor)}var a=this.container.ownerDocument.createElement("v:fill");a.setAttribute("id",c.id+"_fillnode");a.setAttribute("opacity",(b.fillOpacity*100)+"%");c.appendChild(a)};JXG.VMLRenderer.prototype.setAttributes=function(d,c,g,b){var f;for(var a=0;a<c.length;a++){var e=c[a];if(b[e]!=null){if(typeof b[e]=="function"){f=b[e]();f=(f>0)?f:0}else{f=b[e]}d.setAttribute(g[a],f)}}};JXG.VMLRenderer.prototype.setDashStyle=function(c,b){if(b.dash>=0){var a=this.container.ownerDocument.createElement("v:stroke");a.setAttribute("id",c.id+"stroke");a.setAttribute("dashstyle",this.dashArray[b.dash]);c.appendChild(a)}};JXG.VMLRenderer.prototype.createPrimitive=function(a,c){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",c);return b};JXG.VMLRenderer.prototype.makeArrow=function(c,b,d){var a=this.container.ownerDocument.createElement("v:stroke");a.setAttribute("endarrow","block");a.setAttribute("endarrowlength","long");c.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(e,b,a,d,c){e.setAttribute("from",[b,a].join(","));e.setAttribute("to",[d,c].join(","))};JXG.VMLRenderer.prototype.updateCirclePrimitive=function(c,a,d,b){c.style.left=(a-b)+"px";c.style.top=(d-b)+"px";c.style.width=(b*2)+"px";c.style.height=(b*2)+"px"};JXG.VMLRenderer.prototype.updateRectPrimitive=function(d,a,e,b,c){d.style.left=(a)+"px";d.style.top=(e)+"px";d.style.width=(b)+"px";d.style.height=(c)+"px"};JXG.VMLRenderer.prototype.updateEllipsePrimitive=function(b,a,e,d,c){b.style.left=(a-d)+"px";b.style.top=(e-c)+"px";b.style.width=(d*2)+"px";b.style.height=(c*2)+"px"};JXG.VMLRenderer.prototype.updatePathPrimitive2=function(b,d){var c=b.rendNode;var a=b.board.canvasWidth;var e=b.board.canvasHeight;c.style.width=a;c.style.height=e;c.setAttribute("coordsize",a+","+e);c.setAttribute("path",d.join(""))};JXG.VMLRenderer.prototype.updatePathStringPrimitive=function(e){if(e.numberPoints<=0){return""}var j=" m ";var g=[];var d=2*e.board.canvasHeight;var b=2*e.board.canvasWidth;var a=Math.min(e.numberPoints,8192);for(var c=0;c<a;c++){var f=e.points[c].scrCoords;if(isNaN(f[1])||isNaN(f[2])||Math.abs(f[1])>b||Math.abs(f[2])>d){j=" m "}else{g.push(j+f[1]+", "+f[2]);j=" l "}}g.push(" e");return g};JXG.VMLRenderer.prototype.updatePathStringPrimitiveOld=function(d){var c=2*d.board.canvasHeight;var a=2*d.board.canvasWidth;var g="";var e;var b=0;var f=d.numberPoints%8;if(f>0){do{e=d.points[b++].scrCoords;if(!isNaN(e[1])&&!isNaN(e[2])&&Math.abs(e[1])<=a&&Math.abs(e[2])<=c){g+=e[1]+","+e[2]+" "}}while((--f)>0)}f=parseInt(d.numberPoints/8);if(f>0){do{e=d.points[b++].scrCoords;if(!isNaN(e[1])&&!isNaN(e[2])&&Math.abs(e[1])<=a&&Math.abs(e[2])<=c){g+=e[1]+","+e[2]+" "}e=d.points[b++].scrCoords;if(!isNaN(e[1])&&!isNaN(e[2])&&Math.abs(e[1])<=a&&Math.abs(e[2])<=c){g+=e[1]+","+e[2]+" "}e=d.points[b++].scrCoords;if(!isNaN(e[1])&&!isNaN(e[2])&&Math.abs(e[1])<=a&&Math.abs(e[2])<=c){g+=e[1]+","+e[2]+" "}e=d.points[b++].scrCoords;if(!isNaN(e[1])&&!isNaN(e[2])&&Math.abs(e[1])<=a&&Math.abs(e[2])<=c){g+=e[1]+","+e[2]+" "}e=d.points[b++].scrCoords;if(!isNaN(e[1])&&!isNaN(e[2])&&Math.abs(e[1])<=a&&Math.abs(e[2])<=c){g+=e[1]+","+e[2]+" "}e=d.points[b++].scrCoords;if(!isNaN(e[1])&&!isNaN(e[2])&&Math.abs(e[1])<=a&&Math.abs(e[2])<=c){g+=e[1]+","+e[2]+" "}e=d.points[b++].scrCoords;if(!isNaN(e[1])&&!isNaN(e[2])&&Math.abs(e[1])<=a&&Math.abs(e[2])<=c){g+=e[1]+","+e[2]+" "}e=d.points[b++].scrCoords;if(!isNaN(e[1])&&!isNaN(e[2])&&Math.abs(e[1])<=a&&Math.abs(e[2])<=c){g+=e[1]+","+e[2]+" "}}while((--f)>0)}return g};JXG.VMLRenderer.prototype.updatePathStringPrimitiveOld2=function(c){var e="";var b="";for(var a=0;a<c.numberPoints;a++){var d=c.points[a].scrCoords;b+=d[1]+","+d[2]+" ";if(!isNaN(d[1])&&!isNaN(d[2])){e+=d[1]+","+d[2]+" "}}return e};JXG.VMLRenderer.prototype.updatePolygonePrimitive=function(e,c){e.setAttribute("stroked","false");var f=c.vertices[0].coords.scrCoords[1];var b=c.vertices[0].coords.scrCoords[1];var d=c.vertices[0].coords.scrCoords[2];var a=c.vertices[0].coords.scrCoords[2];for(var g=1;g<c.vertices.length-1;g++){var l=c.vertices[g].coords.scrCoords;if(l[1]<f){f=l[1]}if(l[1]>b){b=l[1]}if(l[2]<d){d=l[2]}if(l[2]>a){a=l[2]}}var k=Math.round(b-f);var j=Math.round(a-d);e.style.width=k;e.style.height=j;e.setAttribute("coordsize",k+","+j);var h=[];h.push("m ");var l=c.vertices[0].coords.scrCoords;h.push(l[1]+","+l[2]);h.push(" l ");for(var g=1;g<c.vertices.length-1;g++){var l=c.vertices[g].coords.scrCoords;h.push(l[1]+","+l[2]);if(g<c.vertices.length-2){h.push(", ")}}h.push(" x e");e.setAttribute("path",h.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="2";break;case"circles":a.style.zIndex="3";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(e,d,f){var c="";switch(d){case"stroke":c="strokecolor";break;case"stroke-width":c="strokeweight";break;case"stroke-dasharray":c="dashstyle";break}if(d=="stroke-dasharray"){var a=this.container.ownerDocument.createElement("v:stroke");a.setAttribute("id",e.id+"stroke");a.setAttribute("dashstyle","Dash");e.appendChild(a)}else{if(c!=""){var b;if(typeof f=="function"){b=f()}else{b=f}e.setAttribute(c,b)}}};