0&&Math.abs(e.center.coords.usrCoords[0])>JXG.Math.eps&&!isNaN(d+e.center.coords.scrCoords[1]+e.center.coords.scrCoords[2])&&d*e.board.unitX<2000000){this.updateEllipsePrim(e.rendNode,e.center.coords.scrCoords[1],e.center.coords.scrCoords[2],(d*e.board.unitX),(d*e.board.unitY))}},drawPolygon:function(d){this.appendChildPrim(this.createPrim("polygon",d.id),d.visProp.layer);this.appendNodesToElement(d,"polygon");this.updatePolygon(d)},updatePolygon:function(d){this._updateVisual(d,{stroke:true,dash:true});this.updatePolygonPrim(d.rendNode,d)},displayCopyright:function(d,e){},drawInternalText:function(d){},updateInternalText:function(d){},drawText:function(d){var e,f;if(d.visProp.display==="html"){e=this.container.ownerDocument.createElement("div");e.style.position="absolute";e.className=d.visProp.cssclass;if(this.container.style.zIndex==""){f=0}else{f=parseInt(this.container.style.zIndex)}e.style.zIndex=f+d.board.options.layer.text;this.container.appendChild(e);e.setAttribute("id",this.container.id+"_"+d.id)}else{e=this.drawInternalText(d)}d.rendNode=e;d.htmlStr="";this.updateText(d)},updateText:function(d){var e=d.plaintext;if(d.visProp.visible){this.updateTextStyle(d,false);if(d.visProp.display==="html"){if(!isNaN(d.coords.scrCoords[1]+d.coords.scrCoords[2])){if(d.visProp.anchorx==="right"){d.rendNode.style.right=parseInt(d.board.canvasWidth-d.coords.scrCoords[1])+"px"}else{if(d.visProp.anchorx==="middle"){d.rendNode.style.left=parseInt(d.coords.scrCoords[1]-0.5*d.size[0])+"px"}else{d.rendNode.style.left=parseInt(d.coords.scrCoords[1])+"px"}}if(d.visProp.anchory==="top"){d.rendNode.style.top=parseInt(d.coords.scrCoords[2]+this.vOffsetText)+"px"}else{if(d.visProp.anchory==="middle"){d.rendNode.style.top=parseInt(d.coords.scrCoords[2]-0.5*d.size[1]+this.vOffsetText)+"px"}else{d.rendNode.style.top=parseInt(d.coords.scrCoords[2]-d.size[1]+this.vOffsetText)+"px"}}}if(d.htmlStr!==e){d.rendNode.innerHTML=e;d.htmlStr=e;if(d.visProp.usemathjax){MathJax.Hub.Queue(["Typeset",MathJax.Hub,d.rendNode])}else{if(d.visProp.useasciimathml){AMprocessNode(d.rendNode,false)}}}this.transformImage(d,d.transformations)}else{this.updateInternalText(d)}}},updateTextStyle:function(g,i){var d,k,l,f,h=g.visProp;if(i){l=h.highlightstrokecolor;k=h.highlightstrokeopacity;f=h.highlightcssclass}else{l=h.strokecolor;k=h.strokeopacity;f=h.cssclass}if(g.visProp.display==="html"||this.type!="canvas"){d=JXG.evaluate(g.visProp.fontsize);if(g.visPropOld.fontsize!=d){try{g.rendNode.style.fontSize=d+"px"}catch(j){g.rendNode.style.fontSize=d}g.visPropOld.fontsize=d}if(g.visPropOld.cssclass!=f){g.rendNode.className=f;g.visPropOld.cssclass=f}}if(g.visProp.display==="html"){this.setObjectStrokeColor(g,l,k)}else{this.updateInternalTextStyle(g,l,k)}return this},updateInternalTextStyle:function(e,f,d){this.setObjectStrokeColor(e,f,d)},drawImage:function(d){},updateImage:function(d){this.updateRectPrim(d.rendNode,d.coords.scrCoords[1],d.coords.scrCoords[2]-d.size[1],d.size[0],d.size[1]);this.updateImageURL(d);this.transformImage(d,d.transformations);this._updateVisual(d,{stroke:true,dash:true},true)},joinTransforms:function(n,o){var k=[[1,0,0],[0,1,0],[0,0,1]],g=n.board.origin.scrCoords[1],f=n.board.origin.scrCoords[2],e=n.board.unitX,d=n.board.unitY,r=[[1,0,0],[-g,1,0],[-f,0,1]],q=[[1,0,0],[0,1/e,0],[0,0,-1/d]],h=[[1,0,0],[0,e,0],[0,0,-d]],j=[[1,0,0],[g,1,0],[f,0,1]],l,p=o.length;for(l=0;l\nFunction Base64Encode(inData)\n Const Base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"\n Dim cOut, sOut, I\n For I = 1 To LenB(inData) Step 3\n Dim nGroup, pOut, sGroup\n nGroup = &H10000 * AscB(MidB(inData, I, 1)) + _\n &H100 * MyASC(MidB(inData, I + 1, 1)) + MyASC(MidB(inData, I + 2, 1))\n nGroup = Oct(nGroup)\n nGroup = String(8 - Len(nGroup), "0") & nGroup\n pOut = Mid(Base64, CLng("&o" & Mid(nGroup, 1, 2)) + 1, 1) + _\n Mid(Base64, CLng("&o" & Mid(nGroup, 3, 2)) + 1, 1) + _\n Mid(Base64, CLng("&o" & Mid(nGroup, 5, 2)) + 1, 1) + _\n Mid(Base64, CLng("&o" & Mid(nGroup, 7, 2)) + 1, 1)\n sOut = sOut + pOut\n Next\n Select Case LenB(inData) Mod 3\n Case 1: \'8 bit final\n sOut = Left(sOut, Len(sOut) - 2) + "=="\n Case 2: \'16 bit final\n sOut = Left(sOut, Len(sOut) - 1) + "="\n End Select\n Base64Encode = sOut\nEnd Function\n\nFunction MyASC(OneChar)\n If OneChar = "" Then MyASC = 0 Else MyASC = AscB(OneChar)\nEnd Function\n\nFunction BinFileReader(xhr)\n Dim byteString\n Dim b64String\n Dim i\n byteString = xhr.responseBody\n ReDim byteArray(LenB(byteString))\n For i = 1 To LenB(byteString)\n byteArray(i-1) = AscB(MidB(byteString, i, 1))\n Next\n b64String = Base64Encode(byteString)\n BinFileReader = b64String\nEnd Function\n<\/script>\n')}JXG.GeonextParser={};JXG.GeonextParser.replacePow=function(f){var k,n,l,j,m,g,d,e,h,q,o;f=f.replace(/(\s*)\^(\s*)/g,"^");h=f.indexOf("^");while(h>=0){e=f.slice(0,h);q=f.slice(h+1);if(e.charAt(e.length-1)==")"){k=1;n=e.length-2;while(n>=0&&k>0){l=e.charAt(n);if(l==")"){k++}else{if(l=="("){k--}}n--}if(k==0){j="";g=e.substring(0,n+1);d=n;while(d>=0&&g.substr(d,1).match(/([\w\.]+)/)){j=RegExp.$1+j;d--}j+=e.substring(n+1,e.length);j=j.replace(/([\(\)\+\*\%\^\-\/\]\[])/g,"\\$1")}else{throw new Error("JSXGraph: Missing '(' in expression")}}else{j="[\\w\\.]+"}if(q.match(/^([\w\.]*\()/)){k=1;n=RegExp.$1.length;while(n0){l=q.charAt(n);if(l==")"){k--}else{if(l=="("){k++}}n++}if(k==0){m=q.substring(0,n);m=m.replace(/([\(\)\+\*\%\^\-\/\[\]])/g,"\\$1")}else{throw new Error("JSXGraph: Missing ')' in expression")}}else{m="[\\w\\.]+"}o=new RegExp("("+j+")\\^("+m+")");f=f.replace(o,"JXG.Math.pow($1,$2)");h=f.indexOf("^")}return f};JXG.GeonextParser.replaceIf=function(e){var r="",f,q,h=null,d=null,l=null,g,p,j,m,k,n,o;g=e.indexOf("If(");if(g<0){return e}e=e.replace(/""/g,"0");while(g>=0){f=e.slice(0,g);q=e.slice(g+3);j=1;p=0;m=-1;k=-1;while(p0){n=q.charAt(p);if(n==")"){j--}else{if(n=="("){j++}else{if(n==","&&j==1){if(m<0){m=p}else{k=p}}}}p++}o=q.slice(0,p-1);q=q.slice(p);if(m<0){return""}if(k<0){return""}h=o.slice(0,m);d=o.slice(m+1,k);l=o.slice(k+1);h=this.replaceIf(h);d=this.replaceIf(d);l=this.replaceIf(l);r+=f+"(("+h+")?("+d+"):("+l+"))";e=q;h=null;d=null;g=e.indexOf("If(")}r+=q;return r};JXG.GeonextParser.replaceSub=function(f){if(f.indexOf){}else{return f}var e=f.indexOf("_{"),d;while(e>=0){f=f.substr(0,e)+f.substr(e).replace(/_\{/,"");d=f.substr(e).indexOf("}");if(d>=0){f=f.substr(0,d)+f.substr(d).replace(/\}/,"")}e=f.indexOf("_{")}e=f.indexOf("_");while(e>=0){f=f.substr(0,e)+f.substr(e).replace(/_(.?)/,"$1");e=f.indexOf("_")}return f};JXG.GeonextParser.replaceSup=function(f){if(f.indexOf){}else{return f}var e=f.indexOf("^{"),d;while(e>=0){f=f.substr(0,e)+f.substr(e).replace(/\^\{/,"");d=f.substr(e).indexOf("}");if(d>=0){f=f.substr(0,d)+f.substr(d).replace(/\}/,"")}e=f.indexOf("^{")}e=f.indexOf("^");while(e>=0){f=f.substr(0,e)+f.substr(e).replace(/\^(.?)/,"$1");e=f.indexOf("^")}return f};JXG.GeonextParser.replaceNameById=function(g,j){var l=0,d,k,h,f,e=["X","Y","L","V"];for(f=0;f=0){if(l>=0){d=g.indexOf(")",l+2);if(d>=0){k=g.slice(l+2,d);k=k.replace(/\\(['"])?/g,"$1");h=j.elementsByName[k];g=g.slice(0,l+2)+h.id+g.slice(d)}}d=g.indexOf(")",l+2);l=g.indexOf(e[f]+"(",d)}}l=g.indexOf("Dist(");while(l>=0){if(l>=0){d=g.indexOf(",",l+5);if(d>=0){k=g.slice(l+5,d);k=k.replace(/\\(['"])?/g,"$1");h=j.elementsByName[k];g=g.slice(0,l+5)+h.id+g.slice(d)}}d=g.indexOf(",",l+5);l=g.indexOf(",",d);d=g.indexOf(")",l+1);if(d>=0){k=g.slice(l+1,d);k=k.replace(/\\(['"])?/g,"$1");h=j.elementsByName[k];g=g.slice(0,l+1)+h.id+g.slice(d)}d=g.indexOf(")",l+1);l=g.indexOf("Dist(",d)}e=["Deg","Rad"];for(f=0;f=0){if(l>=0){d=g.indexOf(",",l+4);if(d>=0){k=g.slice(l+4,d);k=k.replace(/\\(['"])?/g,"$1");h=j.elementsByName[k];g=g.slice(0,l+4)+h.id+g.slice(d)}}d=g.indexOf(",",l+4);l=g.indexOf(",",d);d=g.indexOf(",",l+1);if(d>=0){k=g.slice(l+1,d);k=k.replace(/\\(['"])?/g,"$1");h=j.elementsByName[k];g=g.slice(0,l+1)+h.id+g.slice(d)}d=g.indexOf(",",l+1);l=g.indexOf(",",d);d=g.indexOf(")",l+1);if(d>=0){k=g.slice(l+1,d);k=k.replace(/\\(['"])?/g,"$1");h=j.elementsByName[k];g=g.slice(0,l+1)+h.id+g.slice(d)}d=g.indexOf(")",l+1);l=g.indexOf(e[f]+"(",d)}}return g};JXG.GeonextParser.replaceIdByObj=function(d){var e=/(X|Y|L)\(([\w_]+)\)/g;d=d.replace(e,'this.board.objects["$2"].$1()');e=/(V)\(([\w_]+)\)/g;d=d.replace(e,'this.board.objects["$2"].Value()');e=/(Dist)\(([\w_]+),([\w_]+)\)/g;d=d.replace(e,'this.board.objects["$2"].Dist(this.board.objects["$3"])');e=/(Deg)\(([\w_]+),([ \w\[\w_]+),([\w_]+)\)/g;d=d.replace(e,'JXG.Math.Geometry.trueAngle(this.board.objects["$2"],this.board.objects["$3"],this.board.objects["$4"])');e=/Rad\(([\w_]+),([\w_]+),([\w_]+)\)/g;d=d.replace(e,'JXG.Math.Geometry.rad(this.board.objects["$1"],this.board.objects["$2"],this.board.objects["$3"])');e=/N\((.+)\)/g;d=d.replace(e,"($1)");return d};JXG.GeonextParser.geonext2JS=function(e,g){var h,f,d,k=["Abs","ACos","ASin","ATan","Ceil","Cos","Exp","Factorial","Floor","Log","Max","Min","Random","Round","Sin","Sqrt","Tan","Trunc"],j=["Math.abs","Math.acos","Math.asin","Math.atan","Math.ceil","Math.cos","Math.exp","JXG.Math.factorial","Math.floor","Math.log","Math.max","Math.min","Math.random","this.board.round","Math.sin","Math.sqrt","Math.tan","Math.ceil"];e=e.replace(/</g,"<");e=e.replace(/>/g,">");e=e.replace(/&/g,"&");f=e;f=this.replaceNameById(f,g);f=this.replaceIf(f);f=this.replacePow(f);f=this.replaceIdByObj(f);for(d=0;d=0){i[f].addChild(h)}}}else{d=f.replace(/\[/g,"\\[");d=d.replace(/\]/g,"\\]");j=new RegExp("\\(([\\w\\[\\]'_ ]+,)*("+d+")(,[\\w\\[\\]'_ ]+)*\\)","g");if(e.search(j)>=0){i[f].addChild(h)}}}}};JXG.GeonextParser.gxt2jc=function(d,f){var e,h=["Sqrt"],g=["sqrt"];d=d.replace(/</g,"<");d=d.replace(/>/g,">");d=d.replace(/&/g,"&");e=d;e=this.replaceNameById2(e,f);e=e.replace(/True/g,"true");e=e.replace(/False/g,"false");e=e.replace(/fasle/g,"false");return e};JXG.GeonextParser.replaceNameById2=function(g,j){var l=0,d,k,h,f,e=["X","Y","L","V"];for(f=0;f=0){if(l>=0){d=g.indexOf(")",l+2);if(d>=0){k=g.slice(l+2,d);k=k.replace(/\\(['"])?/g,"$1");h=j.elementsByName[k];g=g.slice(0,l+2)+"$('"+h.id+"')"+g.slice(d)}}d=g.indexOf(")",l+2);l=g.indexOf(e[f]+"(",d)}}l=g.indexOf("Dist(");while(l>=0){if(l>=0){d=g.indexOf(",",l+5);if(d>=0){k=g.slice(l+5,d);k=k.replace(/\\(['"])?/g,"$1");h=j.elementsByName[k];g=g.slice(0,l+5)+"$('"+h.id+"')"+g.slice(d)}}d=g.indexOf(",",l+5);l=g.indexOf(",",d);d=g.indexOf(")",l+1);if(d>=0){k=g.slice(l+1,d);k=k.replace(/\\(['"])?/g,"$1");h=j.elementsByName[k];g=g.slice(0,l+1)+"$('"+h.id+"')"+g.slice(d)}d=g.indexOf(")",l+1);l=g.indexOf("Dist(",d)}e=["Deg","Rad"];for(f=0;f=0){if(l>=0){d=g.indexOf(",",l+4);if(d>=0){k=g.slice(l+4,d);k=k.replace(/\\(['"])?/g,"$1");h=j.elementsByName[k];g=g.slice(0,l+4)+"$('"+h.id+"')"+g.slice(d)}}d=g.indexOf(",",l+4);l=g.indexOf(",",d);d=g.indexOf(",",l+1);if(d>=0){k=g.slice(l+1,d);k=k.replace(/\\(['"])?/g,"$1");h=j.elementsByName[k];g=g.slice(0,l+1)+"$('"+h.id+"')"+g.slice(d)}d=g.indexOf(",",l+1);l=g.indexOf(",",d);d=g.indexOf(")",l+1);if(d>=0){k=g.slice(l+1,d);k=k.replace(/\\(['"])?/g,"$1");h=j.elementsByName[k];g=g.slice(0,l+1)+"$('"+h.id+"')"+g.slice(d)}d=g.indexOf(")",l+1);l=g.indexOf(e[f]+"(",d)}}return g};JXG.Board=function(d,i,e,n,m,l,k,j,f,g,h){this.BOARD_MODE_NONE=0;this.BOARD_MODE_DRAG=1;this.BOARD_MODE_MOVE_ORIGIN=2;this.BOARD_QUALITY_LOW=1;this.BOARD_QUALITY_HIGH=2;this.BOARD_MODE_ZOOM=17;this.BOARD_MODE_CONSTRUCT=16;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=d;this.containerObj=typeof document!="undefined"?document.getElementById(this.container):null;if(typeof document!="undefined"&&this.containerObj==null){throw new Error("\nJSXGraph: HTML container element '"+(d)+"' not found.")}this.renderer=i;this.grids=[];this.options=JXG.deepCopy(JXG.Options);this.dimension=2;this.jc=new JXG.JessieCode();this.jc.use(this);this.origin={};this.origin.usrCoords=[1,0,0];this.origin.scrCoords=[1,n[0],n[1]];this.zoomX=m;this.zoomY=l;this.unitX=k*this.zoomX;this.unitY=j*this.zoomY;this.canvasWidth=f;this.canvasHeight=g;if(JXG.exists(e)&&e!==""&&typeof document!="undefined"&&!JXG.exists(document.getElementById(e))){this.id=e}else{this.id=this.generateId()}this.eventHandlers={};this.hooks=[];this.dependentBoards=[];this.inUpdate=false;this.objects={};this.objectsList=[];this.groups={};this.animationObjects={};this.highlightedObjects={};this.numObjects=0;this.elementsByName={};this.mode=this.BOARD_MODE_NONE;this.updateQuality=this.BOARD_QUALITY_HIGH;this.isSuspendedRedraw=false;this.calculateSnapSizes();this.drag_dx=0;this.drag_dy=0;this.mouse=null;this.touches=[];this.xmlString="";this.cPos=[];this.touchMoveLast=0;this.downObjects=[];this.showCopyright=false;if((h!=null&&h)||(h==null&&this.options.showCopyright)){this.showCopyright=true;this.renderer.displayCopyright(JXG.JSXGraph.licenseText,this.options.text.fontSize)}this.needsFullUpdate=false;this.reducedUpdate=false;this.currentCBDef="none";this.geonextCompatibilityMode=false;if(this.options.text.useASCIIMathML&&translateASCIIMath){init()}else{this.options.text.useASCIIMathML=false}this.hasMouseHandlers=false;this.hasTouchHandlers=false;this.hasMouseUp=false;this.hasTouchEnd=false;this.addEventHandlers();this.methodMap={update:"update",on:"on",off:"off",setView:"setBoundingBox",setBoundingBox:"setBoundingBox",migratePoint:"migratePoint",colorblind:"emulateColorblindness"}};JXG.extend(JXG.Board.prototype,{generateName:function(f){if(f.type==JXG.OBJECT_TYPE_TICKS){return""}var l,h=2,e="",m="",n=[],d="",k,g;if(f.elementClass==JXG.OBJECT_CLASS_POINT){l=["","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{if(f.type==JXG.OBJECT_TYPE_ANGLE){if(false){l=["","α","β","γ","δ","ε","ζ","η","θ","ι","κ","λ","μ","ν","ξ","ο","π","ρ","σ","τ","υ","φ","χ","ψ","ω"]}else{l=["","α","β","γ","δ","ε","ζ","η","θ","ι","κ","λ","μ","ν","ξ","ο","π","ρ","σ","τ","υ","φ","χ","ψ","ω"]}}else{l=["","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"]}}if(f.elementClass!==JXG.OBJECT_CLASS_POINT&&f.elementClass!=JXG.OBJECT_CLASS_LINE&&f.type!=JXG.OBJECT_TYPE_ANGLE){if(f.type===JXG.OBJECT_TYPE_POLYGON){e="P_{"}else{if(f.elementClass===JXG.OBJECT_CLASS_CIRCLE){e="k_{"}else{if(f.type===JXG.OBJECT_TYPE_TEXT){e="t_{"}else{e="s_{"}}}m="}"}for(k=0;k0;k--){d+=l[n[k-1]]}if(this.elementsByName[d+m]==null){return d+m}}n[0]=l.length;for(k=1;k0&&(this.mode===JXG.BOARD_MODE_DRAG||this.mode===JXG.BOARD_MODE_MOVE_ORIGIN)){return this.cPos}if(!g.currentStyle&&f.defaultView){g=document.documentElement;e[0]+=d("margin-left");e[1]+=d("margin-top");e[0]+=d("border-left-width");e[1]+=d("border-top-width");e[0]+=d("padding-left");e[1]+=d("padding-top");g=this.containerObj}e[0]+=d("border-left-width");e[1]+=d("border-top-width");if(this.renderer.type!=="vml"){e[0]+=d("padding-left");e[1]+=d("padding-top")}this.cPos=e;return e},getMousePosition:function(h,f){var g=this.getCoordsTopLeftCorner(),d;d=JXG.getPosition(h,f);return[d[0]-g[0],d[1]-g[1]]},initMoveOrigin:function(d,e){this.drag_dx=d-this.origin.scrCoords[1];this.drag_dy=e-this.origin.scrCoords[2];this.mode=this.BOARD_MODE_MOVE_ORIGIN},initMoveObject:function(l,k,m,j){var h,e,i=[],f,g=this.objectsList.length,d={visProp:{layer:-10000}};for(e=0;e=d.visProp.layer){if(JXG.exists(d.label)&&h==d.label.content){continue}d=h;i[0]=d}}}if(i.length>0){this.mode=this.BOARD_MODE_DRAG}if(this.options.takeFirst){i.length=1}return i},moveObject:function(d,k,j,e,h){var f=new JXG.Coords(JXG.COORDS_BY_SCREEN,this.getScrCoordsOfMouse(d,k),this),g=j.obj,i;if(g.type!=JXG.OBJECT_TYPE_GLIDER){if(!isNaN(j.targets[0].Xprev+j.targets[0].Yprev)){g.setPositionDirectly(JXG.COORDS_BY_SCREEN,f.scrCoords.slice(1),[j.targets[0].Xprev,j.targets[0].Yprev])}j.targets[0].Xprev=f.scrCoords[1];j.targets[0].Yprev=f.scrCoords[2];this.update(g)}else{if(g.type==JXG.OBJECT_TYPE_GLIDER){i=g.coords;g.setPositionDirectly(JXG.COORDS_BY_USER,f.usrCoords.slice(1));if(g.slideObject.elementClass==JXG.OBJECT_CLASS_CIRCLE){g.coords=JXG.Math.Geometry.projectPointToCircle(g,g.slideObject,this)}else{if(g.slideObject.elementClass==JXG.OBJECT_CLASS_LINE){g.coords=JXG.Math.Geometry.projectPointToLine(g,g.slideObject,this)}}if(g.group.length!=0){g.group[g.group.length-1].dX=g.coords.scrCoords[1]-i.scrCoords[1];g.group[g.group.length-1].dY=g.coords.scrCoords[2]-i.scrCoords[2];g.group[g.group.length-1].update(this)}else{this.update(g)}}}g.triggerEventHandlers([h+"drag","drag"],e);this.updateInfobox(g);this.update();g.highlight(true)},twoFingerMove:function(j,h,i,e){var d,f,g;if(JXG.exists(i)&&JXG.exists(i.obj)){g=i.obj}else{return}d=new JXG.Coords(JXG.COORDS_BY_SCREEN,this.getScrCoordsOfMouse(j[0],j[1]),this);f=new JXG.Coords(JXG.COORDS_BY_SCREEN,this.getScrCoordsOfMouse(h[0],h[1]),this);if(g.elementClass===JXG.OBJECT_CLASS_LINE){this.moveLine(d,f,i,g)}else{if(g.elementClass===JXG.OBJECT_CLASS_CIRCLE){this.moveCircle(d,f,i,g)}}g.triggerEventHandlers(["touchdrag","drag"],e);i.targets[0].Xprev=d.scrCoords[1];i.targets[0].Yprev=d.scrCoords[2];i.targets[1].Xprev=f.scrCoords[1];i.targets[1].Yprev=f.scrCoords[2]},moveLine:function(z,g,s,u){var A,w,r,q,h,n,i,t,v,e,f,p,m,l,k,j;if(JXG.exists(s.targets[0])&&JXG.exists(s.targets[1])&&!isNaN(s.targets[0].Xprev+s.targets[0].Yprev+s.targets[1].Xprev+s.targets[1].Yprev)){A=z.usrCoords;w=g.usrCoords;r=(new JXG.Coords(JXG.COORDS_BY_SCREEN,[s.targets[0].Xprev,s.targets[0].Yprev],this)).usrCoords;q=(new JXG.Coords(JXG.COORDS_BY_SCREEN,[s.targets[1].Xprev,s.targets[1].Yprev],this)).usrCoords;n=[1,(r[1]+q[1])*0.5,(r[2]+q[2])*0.5];h=[1,(A[1]+w[1])*0.5,(A[2]+w[2])*0.5];t=JXG.Math.crossProduct(r,q);i=JXG.Math.crossProduct(A,w);e=JXG.Math.crossProduct(t,i);if(Math.abs(e[0])0){s.preventDefault();s.stopPropagation()}if(JXG.isWebkitAndroid()){var e=new Date();this.touchMoveLast=e.getTime()-200}this.options.precision.hasPoint=this.options.precision.mouse;this.triggerEventHandlers(["touchstart","down"],s);return this.touches.length>0},touchMoveListener:function(d){var e,g=0,j,h=d[JXG.touchProperty];if(this.mode!==this.BOARD_MODE_NONE){d.preventDefault();d.stopPropagation()}if(JXG.isWebkitAndroid()){var f=new Date();f=f.getTime();if(f-this.touchMoveLast<80){this.updateQuality=this.BOARD_QUALITY_HIGH;this.triggerEventHandlers(["touchmove","move"],d,this.mode);return false}else{this.touchMoveLast=f}}if(this.mode!=this.BOARD_MODE_DRAG){this.renderer.hide(this.infobox)}this.options.precision.hasPoint=this.options.precision.touch;if(!this.touchOriginMove(d)){if(this.mode==this.BOARD_MODE_DRAG){for(e=0;e-1&&this.touches[e].targets[1].num>-1){if(h[this.touches[e].targets[0].num]&&h[this.touches[e].targets[1].num]){this.touches[e].targets[0].X=h[this.touches[e].targets[0].num].screenX;this.touches[e].targets[0].Y=h[this.touches[e].targets[0].num].screenY;this.touches[e].targets[1].X=h[this.touches[e].targets[1].num].screenX;this.touches[e].targets[1].Y=h[this.touches[e].targets[1].num].screenY;this.twoFingerMove(this.getMousePosition(d,this.touches[e].targets[0].num),this.getMousePosition(d,this.touches[e].targets[1].num),this.touches[e],d)}}}}}}if(this.mode!=this.BOARD_MODE_DRAG){this.renderer.hide(this.infobox)}this.options.precision.hasPoint=this.options.precision.mouse;this.triggerEventHandlers(["touchmove","move"],d,this.mode);return this.mode===this.BOARD_MODE_NONE},touchEndListener:function(m){var f,e,d,o=this.options.precision.touch,l=[],n,g,h=m[JXG.touchProperty];this.triggerEventHandlers(["touchend","up"],m);this.renderer.hide(this.infobox);if(h.length>0){for(f=0;f0){this.zoomIn(f.usrCoords[1],f.usrCoords[2])}else{this.zoomOut(f.usrCoords[1],f.usrCoords[2])}d.preventDefault();return false},updateInfobox:function(e){var d,h,f,g;if(!e.visProp.showinfobox){return this}if(e.elementClass==JXG.OBJECT_CLASS_POINT){f=e.coords.usrCoords[1];g=e.coords.usrCoords[2];this.infobox.setCoords(f+this.infobox.distanceX/(this.unitX),g+this.infobox.distanceY/(this.unitY));if(typeof(e.infoboxText)!="string"){if(e.visProp.infoboxdigits==="auto"){d=JXG.autoDigits(f);h=JXG.autoDigits(g)}else{if(JXG.isNumber(e.visProp.infoboxdigits)){d=f.toFixed(e.visProp.infoboxdigits);h=g.toFixed(e.visProp.infoboxdigits)}else{d=f;h=g}}this.highlightInfobox(d,h,e)}else{this.highlightCustomInfobox(e.infoboxText,e)}this.renderer.show(this.infobox)}return this},highlightCustomInfobox:function(d){this.infobox.setText(d);return this},highlightInfobox:function(d,f,e){this.highlightCustomInfobox("("+d+", "+f+")");return this},dehighlightAll:function(){var e,f,d=false;for(e in this.highlightedObjects){f=this.highlightedObjects[e];if(this.hasMouseHandlers){f.noHighlight()}d=true}this.highlightedObjects={};if(this.options.renderer=="canvas"&&d){this.prepareUpdate();this.renderer.suspendRedraw(this);this.updateRenderer();this.renderer.unsuspendRedraw()}return this},getScrCoordsOfMouse:function(d,e){return[d,e]},getUsrCoordsOfMouse:function(f){var g=this.getCoordsTopLeftCorner(),e=JXG.getPosition(f),d=e[0]-g[0],i=e[1]-g[1],h=new JXG.Coords(JXG.COORDS_BY_SCREEN,[d,i],this);return h.usrCoords.slice(1)},getAllUnderMouse:function(d){var e=this.getAllObjectsUnderMouse(d);e.push(this.getUsrCoordsOfMouse(d));return e},getAllObjectsUnderMouse:function(i){var j=this.getCoordsTopLeftCorner(),d=JXG.getPosition(i),l=d[0]-j[0],k=d[1]-j[1],g=[],e,h,f=this.objectsList.length;for(e=0;e"),l=o.indexOf(""),k,h,g,q,d,f;if(n<0){return}while(n>=0){k=o.slice(n+6,l);h=k.indexOf("=");g=k.slice(0,h);q=k.slice(h+1);h=g.indexOf(".");d=g.slice(0,h);f=this.elementsByName[JXG.unescapeHTML(d)];var p=g.slice(h+1).replace(/\s+/g,"").toLowerCase();q=JXG.GeonextParser.geonext2JS(q,this);q=q.replace(/this\.board\./g,"this.");if(!JXG.exists(this.elementsByName[d])){JXG.debug("debug conditions: |"+d+"| undefined")}e+='el = this.objects["'+f.id+'"];\n';switch(p){case"x":e+="var y=el.coords.usrCoords[2];\n";e+="el.setPositionDirectly(JXG.COORDS_BY_USER,["+(q)+",y]);\n";e+="el.prepareUpdate().update();\n";break;case"y":e+="var x=el.coords.usrCoords[1];\n";e+="el.coords=new JXG.Coords(JXG.COORDS_BY_USER,[x,"+(q)+"],this);\n";e+="el.setPositionDirectly(JXG.COORDS_BY_USER,[x,"+(q)+"]);\n";e+="el.prepareUpdate().update();\n";break;case"visible":e+="var c="+(q)+";\n";e+="el.visProp.visible = c;\n";e+="if (c) {el.showElement();} else {el.hideElement();}\n";break;case"position":e+="el.position = "+(q)+";\n";e+="el.prepareUpdate().update(true);\n";break;case"stroke":e+="rgbo = JXG.rgba2rgbo("+(q)+");\n";e+="el.visProp.strokecolor = rgbo[0];\n";e+="el.visProp.strokeopacity = rgbo[1];\n";break;case"style":e+="el.setStyle("+(q)+");\n";break;case"strokewidth":e+="el.strokeWidth = "+(q)+";\n";break;case"fill":e+="var rgbo = JXG.rgba2rgbo("+(q)+");\n";e+="el.visProp.fillcolor = rgbo[0];\n";e+="el.visProp.fillopacity = rgbo[1];\n";break;case"label":break;default:JXG.debug("property '"+p+"' in conditions not yet implemented:"+q);break}o=o.slice(l+7);n=o.indexOf("");l=o.indexOf("")}e+="this.prepareUpdate().updateElements();\n";e+="return true;\n";e=e.replace(/</g,"<");e=e.replace(/>/g,">");e=e.replace(/&/g,"&");this.updateConditions=new Function(e);this.updateConditions()},updateConditions:function(){return false},calculateSnapSizes:function(){var f=new JXG.Coords(JXG.COORDS_BY_USER,[0,0],this),e=new JXG.Coords(JXG.COORDS_BY_USER,[this.options.grid.gridX,this.options.grid.gridY],this),d=f.scrCoords[1]-e.scrCoords[1],g=f.scrCoords[2]-e.scrCoords[2];this.options.grid.snapSizeX=this.options.grid.gridX;while(Math.abs(d)>25){this.options.grid.snapSizeX*=2;d/=2}this.options.grid.snapSizeY=this.options.grid.gridY;while(Math.abs(g)>25){this.options.grid.snapSizeY*=2;g/=2}return this},applyZoom:function(){var f,e,d=this.objectsList.length;for(e=0;ee){e=k.coords.usrCoords[1]}}if(k.coords.usrCoords[2]>d){d=k.coords.usrCoords[2]}else{if(k.coords.usrCoords[2]-1){this.objectsList.splice(d._pos,1);for(g=d._pos;g\n";for(g in this.objects){d=0;for(j in this.objects[g].childElements){d++}if(d>=0){e+=""+this.objects[g].id+": "}for(j in this.objects[g].childElements){e+=this.objects[g].childElements[j].id+"("+this.objects[g].childElements[j].name+"), "}e+="\n"}e+="
\n";h=window.open();h.document.open();h.document.write(e);h.document.close();return this},showXML:function(){var d=window.open("");d.document.open();d.document.write(""+JXG.escapeHTML(this.xmlString)+"
");d.document.close();return this},prepareUpdate:function(){var e,f,d=this.objectsList.length;for(e=0;en&&f[e]-1){this.eventHandlers[f].splice(d,1)}}else{this.eventHandlers[f].length=0}return this},removeEvent:JXG.shortcut(JXG.Board.prototype,"off"),updateHooks:function(d){arguments[0]=JXG.def(arguments[0],"update");this.triggerEventHandlers.apply(this,arguments);return this},triggerEventHandlers:function(l){var g,f,k,d,e=Array.prototype.slice.call(arguments,1);if(!JXG.isArray(l)){l=[l]}for(f=0;f=0;d--){if(this.dependentBoards[d]==e){this.dependentBoards.splice(d,1)}}return this},update:function(g){var f,e,h,d;if(this.inUpdate||this.isSuspendedUpdate){return this}this.inUpdate=true;this.prepareUpdate(g).updateElements(g).updateConditions();this.renderer.suspendRedraw(this);this.updateRenderer(g);this.renderer.unsuspendRedraw();this.triggerEventHandlers("update");e=this.dependentBoards.length;for(f=0;f-n){s=-A;o.applyOnce(j)}else{if(s>A&&s0){q=setInterval(this.rolling,e)}return this};this.stop=function(){clearInterval(q);return this};return this};return new d()}});JXG.Options={showCopyright:true,showNavigation:true,takeSizeFromFile:false,renderer:"svg",takeFirst:false,pan:true,animationDelay:35,zoom:{factorX:1.25,factorY:1.25,wheel:false},jc:{enabled:true,compile:true},navbar:{strokeColor:"#aaaaaa",fillColor:"#f5f5f5",padding:"2px",position:"absolute",fontSize:"10px",cursor:"pointer",zIndex:"100",right:"5px",bottom:"5px"},elements:{strokeColor:"#0000ff",highlightStrokeColor:"#C3D9FF",fillColor:"red",highlightFillColor:"none",strokeOpacity:1,highlightStrokeOpacity:1,fillOpacity:1,highlightFillOpacity:1,strokeWidth:2,highlightStrokeWidth:2,fixed:false,frozen:false,withLabel:false,visible:true,priv:false,layer:0,dash:0,shadow:false,trace:false,traceAttributes:{},highlight:true,needsRegularUpdate:true,snapToGrid:false,draft:{draft:false,strokeColor:"#565656",fillColor:"#565656",strokeOpacity:0.8,fillOpacity:0.8,strokeWidth:1}},ticks:{drawLabels:false,label:{},drawZero:false,insertTicks:false,minTicksDistance:50,minorHeight:4,majorHeight:10,minorTicks:4,scale:1,scaleSymbol:"",labels:[],ticksDistance:1,strokeOpacity:1,strokeWidth:1,strokeColor:"black",highlightStrokeColor:"#888888"},precision:{touch:30,touchMax:100,mouse:4,epsilon:0.0001,hasPoint:4},layer:{numlayers:20,text:9,point:9,glider:9,arc:8,line:7,circle:6,curve:5,turtle:5,polygon:3,sector:3,angle:3,integral:3,axis:2,grid:1,image:0,trace:0},angle:{withLabel:true,radius:0.5,type:"sector",orthoType:"square",orthoSensitivity:1,fillColor:"#FF7F00",highlightFillColor:"#FF7F00",strokeColor:"#FF7F00",fillOpacity:0.3,highlightFillOpacity:0.3,radiuspoint:{withLabel:false,visible:false,name:""},pointsquare:{withLabel:false,visible:false,name:""},dot:{visible:false,strokeColor:"none",fillColor:"black",size:2,face:"o",withLabel:false,name:""},label:{position:"top",offset:[0,0],strokeColor:"#0000FF"}},arc:{label:{},firstArrow:false,lastArrow:false,fillColor:"none",highlightFillColor:"none",strokeColor:"#0000ff",highlightStrokeColor:"#C3D9FF",useDirection:false},axis:{needsRegularUpdate:false,strokeWidth:1,strokeColor:"#666666",highlightStrokeWidth:1,highlightStrokeColor:"#888888",withTicks:true,straightFirst:true,straightLast:true,lastArrow:true,withLabel:false,ticks:{label:{offset:[4,-12+3]},needsRegularUpdate:false,strokeWidth:1,strokeColor:"#666666",highlightStrokeColor:"#888888",drawLabels:true,drawZero:false,insertTicks:true,minTicksDistance:10,minorHeight:4,majorHeight:-1,minorTicks:4,ticksDistance:1,strokeOpacity:0.25},point1:{needsRegularUpdate:false},point2:{needsRegularUpdate:false},label:{position:"lft",offset:[10,-20]}},bisector:{strokeColor:"#000000",point:{visible:false,fixed:false,withLabel:false,name:""}},bisectorlines:{line1:{strokeColor:"black"},line2:{strokeColor:"black"}},chart:{chartStyle:"line",colors:["#B02B2C","#3F4C6B","#C79810","#D15600","#FFFF88","#C3D9FF","#4096EE","#008C00"],highlightcolors:null,fillcolor:null,highlightonsector:false,highlightbysize:false},circle:{fillColor:"none",highlightFillColor:"none",strokeColor:"#0000ff",highlightStrokeColor:"#C3D9FF",center:{visible:false,withLabel:false,fixed:false,name:""},label:{position:"urt"}},circumcircle:{fillColor:"none",highlightFillColor:"none",strokeColor:"#0000ff",highlightStrokeColor:"#C3D9FF",center:{visible:false,fixed:false,withLabel:false,name:""}},circumcirclearc:{fillColor:"none",highlightFillColor:"none",strokeColor:"#0000ff",highlightStrokeColor:"#C3D9FF",center:{visible:false,withLabel:false,fixed:false,name:""}},circumcirclesector:{useDirection:true,fillColor:"#00FF00",highlightFillColor:"#00FF00",fillOpacity:0.3,highlightFillOpacity:0.3,strokeColor:"#0000ff",highlightStrokeColor:"#C3D9FF",point:{visible:false,fixed:false,withLabel:false,name:""}},conic:{fillColor:"none",highlightFillColor:"none",strokeColor:"#0000ff",highlightStrokeColor:"#C3D9FF",foci:{fixed:false,visible:false,withLabel:false,name:""}},curve:{strokeWidth:1,strokeColor:"#0000ff",fillColor:"none",handDrawing:false,curveType:null,RDPsmoothing:false,numberPointsHigh:1600,numberPointsLow:400,doAdvancedPlot:true,label:{position:"lft"}},glider:{label:{}},grid:{needsRegularUpdate:false,hasGrid:false,gridX:1,gridY:1,strokeColor:"#C0C0C0",strokeOpacity:"0.5",strokeWidth:1,dash:0,snapToGrid:false,snapSizeX:10,snapSizeY:10},image:{imageString:null,fillOpacity:1,rotate:0},incircle:{fillColor:"none",highlightFillColor:"none",strokeColor:"#0000ff",highlightStrokeColor:"#C3D9FF",center:{visible:false,fixed:false,withLabel:false,name:""}},infobox:{fontSize:12,isLabel:false,strokeColor:"#bbbbbb",display:"html",anchorX:"left",anchorY:"middle",cssClass:"JXGinfobox",rotate:0,visible:true},integral:{withLabel:true,strokeWidth:0,strokeOpacity:0,fillOpacity:0.8,curveLeft:{visible:true,layer:9},baseLeft:{visible:false,fixed:false,withLabel:false,name:""},curveRight:{visible:true,layer:9},baseRight:{visible:false,fixed:false,withLabel:false,name:""},label:{fontSize:20}},label:{strokeColor:"black",fixed:true,position:"urt",offset:[10,10]},legend:{style:"vertical",labels:["1","2","3","4","5","6","7","8"],colors:["#B02B2C","#3F4C6B","#C79810","#D15600","#FFFF88","#C3D9FF","#4096EE","#008C00"]},line:{firstArrow:false,lastArrow:false,straightFirst:true,straightLast:true,fillColor:"none",highlightFillColor:"none",strokeColor:"#0000ff",highlightStrokeColor:"#888888",withTicks:false,point1:{visible:false,withLabel:false,fixed:false,name:""},point2:{visible:false,withLabel:false,fixed:false,name:""},ticks:{drawLabels:true,label:{offset:[4,-12+3]},drawZero:false,insertTicks:false,minTicksDistance:50,maxTicksDistance:300,minorHeight:4,majorHeight:-1,minorTicks:4,defaultDistance:1,strokeOpacity:0.3},label:{position:"llft"}},locus:{translateToOrigin:false,translateTo10:false,stretch:false,toOrigin:null,to10:null},normal:{strokeColor:"#000000",point:{visible:false,fixed:false,withLabel:false,name:""}},orthogonalprojection:{},parallel:{strokeColor:"#000000",point:{visible:false,fixed:false,withLabel:false,name:""}},perpendicular:{strokeColor:"#000000",straightFirst:true,straightLast:true},perpendicularsegment:{strokeColor:"#000000",straightFirst:false,straightLast:false,point:{visible:false,fixed:true,withLabel:false,name:""}},point:{withLabel:true,label:{},style:5,face:"o",size:3,fillColor:"#ff0000",highlightFillColor:"#EEEEEE",strokeWidth:2,strokeColor:"#ff0000",highlightStrokeColor:"#C3D9FF",zoom:false,showInfobox:true,infoboxDigits:"auto",draft:false,attractors:[],attractorDistance:0,snatchDistance:0,snapToGrid:false,snapSizeX:1,snapSizeY:1,snapToPoints:false},polygon:{hasInnerPoints:false,fillColor:"#00FF00",highlightFillColor:"#00FF00",fillOpacity:0.3,highlightFillOpacity:0.3,withLines:true,borders:{withLabel:false,strokeWidth:1,highlightStrokeWidth:1,layer:5},vertices:{withLabel:true,strokeColor:"#ff0000",fillColor:"#ff0000",fixed:true},label:{offset:[0,0]}},riemannsum:{withLabel:false,fillOpacity:0.3,fillColor:"#ffff00"},sector:{fillColor:"#00FF00",highlightFillColor:"#00FF00",fillOpacity:0.3,highlightFillOpacity:0.3,label:{offset:[0,0]}},semicircle:{midpoint:{visible:false,withLabel:false,fixed:false,name:""}},slider:{snapWidth:-1,precision:2,firstArrow:false,lastArrow:false,withTicks:true,withLabel:true,layer:9,showInfobox:false,name:"",visible:true,strokeColor:"#000000",highlightStrokeColor:"#888888",fillColor:"#ffffff",highlightFillColor:"none",size:6,point1:{needsRegularUpdate:false,showInfobox:false,withLabel:false,visible:false,fixed:true,name:""},point2:{needsRegularUpdate:false,showInfobox:false,withLabel:false,visible:false,fixed:true,name:""},baseline:{needsRegularUpdate:false,name:"",strokeWidth:1,strokeColor:"#000000",highlightStrokeColor:"#888888"},ticks:{needsRegularUpdate:false,drawLabels:false,drawZero:true,insertTicks:true,minorHeight:4,majorHeight:10,minorTicks:0,defaultDistance:1,strokeOpacity:1,strokeWidth:1,strokeColor:"#000000"},highline:{strokeWidth:3,name:"",strokeColor:"#000000",highlightStrokeColor:"#888888"},label:{strokeColor:"#000000"}},text:{fontSize:12,digits:2,isLabel:false,strokeColor:"#000000",useASCIIMathML:false,useMathJax:false,display:"html",anchorX:"left",anchorY:"middle",cssClass:"JXGtext",highlightCssClass:"JXGtext",withLabel:false,rotate:0,visible:true},tracecurve:{strokeColor:"#000000",fillColor:"none",numberPoints:100},turtle:{strokeWidth:1,fillColor:"none",strokeColor:"#000000",arrow:{strokeWidth:2,withLabel:false,strokeColor:"#ff0000"}},shortcuts:{color:["strokeColor","fillColor"],opacity:["strokeOpacity","fillOpacity"],highlightColor:["highlightStrokeColor","highlightFillColor"],highlightOpacity:["highlightStrokeOpacity","highlightFillOpacity"],strokeWidth:["strokeWidth","highlightStrokeWidth"]}};JXG.Validator=(function(){var k=function(i){return/^[0-9]+px$/.test(i)},m=function(i){return(i in {html:0,internal:0})},n=function(i){return JXG.isString(i)},l=function(i){return JXG.exists(JXG.Point.prototype.normalizeFace.call(this,i))},p=function(i){return(Math.abs(i-Math.round(i))0},h=function(i){return i.length>=2&&p(i[0])&&p(i[1])},d=function(i){return(i in {vml:0,svg:0,canvas:0})},j=function(i){return i>0},g=function(i){return !(i<0)},f,o={},e={attractorDistance:g,color:n,defaultDistance:JXG.isNumber,display:m,doAdvancedPlot:false,draft:false,drawLabels:false,drawZero:false,face:l,factor:JXG.isNumber,fillColor:n,fillOpacity:JXG.isNumber,firstArrow:false,fontSize:p,dash:p,gridX:JXG.isNumber,gridY:JXG.isNumber,hasGrid:false,highlightFillColor:n,highlightFillOpacity:JXG.isNumber,highlightStrokeColor:n,highlightStrokeOpacity:JXG.isNumber,insertTicks:false,lastArrow:false,majorHeight:p,maxTicksDistance:q,minorHeight:p,minorTicks:q,minTicksDistance:q,numberPointsHigh:q,numberPointsLow:q,opacity:JXG.isNumber,radius:JXG.isNumber,RDPsmoothing:false,renderer:d,right:k,showCopyright:false,showInfobox:false,showNavigation:false,size:p,snapSizeX:j,snapSizeY:j,snapWidth:JXG.isNumber,snapToGrid:false,snatchDistance:g,straightFirst:false,straightLast:false,stretch:false,strokeColor:n,strokeOpacity:JXG.isNumber,strokeWidth:p,takeFirst:false,takeSizeFromFile:false,to10:false,toOrigin:false,translateTo10:false,translateToOrigin:false,useASCIIMathML:false,useDirection:false,useMathJax:false,withLabel:false,withTicks:false,zoom:false};for(f in e){o[f.toLowerCase()]=e[f]}return o})();JXG.useStandardOptions=function(h){var j=JXG.Options,g=h.hasGrid,f,e,i,d;h.options.grid.hasGrid=j.grid.hasGrid;h.options.grid.gridX=j.grid.gridX;h.options.grid.gridY=j.grid.gridY;h.options.grid.gridColor=j.grid.gridColor;h.options.grid.gridOpacity=j.grid.gridOpacity;h.options.grid.gridDash=j.grid.gridDash;h.options.grid.snapToGrid=j.grid.snapToGrid;h.options.grid.snapSizeX=j.grid.SnapSizeX;h.options.grid.snapSizeY=j.grid.SnapSizeY;h.takeSizeFromFile=j.takeSizeFromFile;d=function(k,l){k.visProp.fillcolor=l.fillColor;k.visProp.highlightfillcolor=l.highlightFillColor;k.visProp.strokecolor=l.strokeColor;k.visProp.highlightstrokecolor=l.highlightStrokeColor};for(f in h.objects){i=h.objects[f];if(i.elementClass==JXG.OBJECT_CLASS_POINT){d(i,j.point)}else{if(i.elementClass==JXG.OBJECT_CLASS_LINE){d(i,j.line);for(e in i.ticks){e.majorTicks=j.line.ticks.majorTicks;e.minTicksDistance=j.line.ticks.minTicksDistance;e.visProp.minorheight=j.line.ticks.minorHeight;e.visProp.majorheight=j.line.ticks.majorHeight}}else{if(i.elementClass==JXG.OBJECT_CLASS_CIRCLE){d(i,j.circle)}else{if(i.type==JXG.OBJECT_TYPE_ANGLE){d(i,j.angle)}else{if(i.type==JXG.OBJECT_TYPE_ARC){d(i,j.arc)}else{if(i.type==JXG.OBJECT_TYPE_POLYGON){d(i,j.polygon)}else{if(i.type==JXG.OBJECT_TYPE_CONIC){d(i,j.conic)}else{if(i.type==JXG.OBJECT_TYPE_CURVE){d(i,j.curve)}else{if(i.type==JXG.OBJECT_TYPE_SECTOR){i.arc.visProp.fillcolor=j.sector.fillColor;i.arc.visProp.highlightfillcolor=j.sector.highlightFillColor;i.arc.visProp.fillopacity=j.sector.fillOpacity;i.arc.visProp.highlightfillopacity=j.sector.highlightFillOpacity}}}}}}}}}}h.fullUpdate();if(g&&!h.hasGrid){h.removeGrids(h)}else{if(!g&&h.hasGrid){h.create("grid",[])}}};JXG.useBlackWhiteOptions=function(d){var e=JXG.Options;e.point.fillColor=JXG.rgb2bw(e.point.fillColor);e.point.highlightFillColor=JXG.rgb2bw(e.point.highlightFillColor);e.point.strokeColor=JXG.rgb2bw(e.point.strokeColor);e.point.highlightStrokeColor=JXG.rgb2bw(e.point.highlightStrokeColor);e.line.fillColor=JXG.rgb2bw(e.line.fillColor);e.line.highlightFillColor=JXG.rgb2bw(e.line.highlightFillColor);e.line.strokeColor=JXG.rgb2bw(e.line.strokeColor);e.line.highlightStrokeColor=JXG.rgb2bw(e.line.highlightStrokeColor);e.circle.fillColor=JXG.rgb2bw(e.circle.fillColor);e.circle.highlightFillColor=JXG.rgb2bw(e.circle.highlightFillColor);e.circle.strokeColor=JXG.rgb2bw(e.circle.strokeColor);e.circle.highlightStrokeColor=JXG.rgb2bw(e.circle.highlightStrokeColor);e.arc.fillColor=JXG.rgb2bw(e.arc.fillColor);e.arc.highlightFillColor=JXG.rgb2bw(e.arc.highlightFillColor);e.arc.strokeColor=JXG.rgb2bw(e.arc.strokeColor);e.arc.highlightStrokeColor=JXG.rgb2bw(e.arc.highlightStrokeColor);e.polygon.fillColor=JXG.rgb2bw(e.polygon.fillColor);e.polygon.highlightFillColor=JXG.rgb2bw(e.polygon.highlightFillColor);e.sector.fillColor=JXG.rgb2bw(e.sector.fillColor);e.sector.highlightFillColor=JXG.rgb2bw(e.sector.highlightFillColor);e.curve.strokeColor=JXG.rgb2bw(e.curve.strokeColor);e.grid.gridColor=JXG.rgb2bw(e.grid.gridColor);JXG.useStandardOptions(d)};JXG.JSXGraph={licenseText:"JSXGraph v0.95 Copyright (C) see http://jsxgraph.org",boards:{},elements:{},rendererType:(function(){var e=function(h){var f,g;if(JXG.rendererFiles[h]){f=JXG.rendererFiles[h].split(",");for(g=0;g0){this.board=h;this.type=g;this.elementClass=i||JXG.OBJECT_CLASS_OTHER;this.id=d.id;e=d.name;if(!JXG.exists(e)){e=this.board.generateName(this)}this.board.elementsByName[e]=this;this.name=e;this.needsRegularUpdate=d.needsregularupdate;JXG.clearVisPropOld(this);d=this.resolveShortcuts(d);for(f in d){this._set(f,d[f])}this.visProp.draft=d.draft&&d.draft.draft;this.visProp.gradientangle="270";this.visProp.gradientsecondopacity=this.visProp.fillopacity;this.visProp.gradientpositionx=0.5;this.visProp.gradientpositiony=0.5}};JXG.extend(JXG.GeometryElement.prototype,{addChild:function(f){var e,d;this.childElements[f.id]=f;this.addDescendants(f);f.ancestors[this.id]=this;for(e in this.descendants){this.descendants[e].ancestors[this.id]=this;for(d in this.ancestors){this.descendants[e].ancestors[this.ancestors[d].id]=this.ancestors[d]}}for(e in this.ancestors){for(d in this.descendants){this.ancestors[e].descendants[this.descendants[d].id]=this.descendants[d]}}return this},addDescendants:function(e){var d;this.descendants[e.id]=e;for(d in e.childElements){this.addDescendants(e.childElements[d])}return this},countChildren:function(){var g,e=0,f;f=this.childElements;for(g in f){if(f.hasOwnProperty(g)&&g.indexOf("Label")<0){e++}}return e},getName:function(){return this.name},addTransform:function(){},draggable:function(){return this.isDraggable&&!this.visProp.fixed&&!this.visProp.frozen&&this.type!=JXG.OBJECT_TYPE_GLIDER},generatePolynomial:function(){return[]},animate:function(g,f,q){q=q||{};var d,e,j=this.board.options.animationDelay,k=Math.ceil(f/(j*1)),h,n=this,m=false;this.animationData={};var o=function(w,v,t){var u,s,r,p,i;u=JXG.rgb2hsv(w);s=JXG.rgb2hsv(v);r=(s[0]-u[0])/(1*k);p=(s[1]-u[1])/(1*k);i=(s[2]-u[2])/(1*k);n.animationData[t]=new Array(k);for(h=0;h=0&&JXG.isString(d)&&d.length==9&&d.charAt(0)==="#"){d=JXG.rgba2rgbo(d);this.visProp[e]=d[0];this.visProp[e.replace("color","opacity")]=d[1]}else{this.visProp[e]=d}},resolveShortcuts:function(f){var e,d;for(e in JXG.Options.shortcuts){if(JXG.exists(f[e])){for(d=0;d/g,">");if(this.label!==null){this.label.content.setText(d)}return this},setAttribute:JXG.shortcut(JXG.GeometryElement.prototype,"setProperty"),setProperty:function(){var h,g,j,d,e,k,f={};for(h=0;h-1){this.eventHandlers[f].splice(d,1)}}else{this.eventHandlers[f].length=0}},removeEvent:JXG.shortcut(JXG.GeometryElement.prototype,"off")});JXG.COORDS_BY_USER=1;JXG.COORDS_BY_SCREEN=2;JXG.Coords=function(f,e,d){this.board=d;this.usrCoords=[];this.scrCoords=[];this.setCoordinates(f,e)};JXG.extend(JXG.Coords.prototype,{normalizeUsrCoords:function(){var d=JXG.Math.eps;if(Math.abs(this.usrCoords[0])>d){this.usrCoords[1]/=this.usrCoords[0];this.usrCoords[2]/=this.usrCoords[0];this.usrCoords[0]=1}},usr2screen:function(h){var g=Math.round,d=this.board,f=this.usrCoords,e=d.origin.scrCoords;if(h===null||h){this.scrCoords[0]=g(f[0]);this.scrCoords[1]=g(f[0]*e[1]+f[1]*d.unitX);this.scrCoords[2]=g(f[0]*e[2]-f[2]*d.unitY)}else{this.scrCoords[0]=f[0];this.scrCoords[1]=f[0]*e[1]+f[1]*d.unitX;this.scrCoords[2]=f[0]*e[2]-f[2]*d.unitY}},screen2usr:function(){var f=this.board.origin.scrCoords,e=this.scrCoords,d=this.board;this.usrCoords[0]=1;this.usrCoords[1]=(e[1]-f[1])/d.unitX;this.usrCoords[2]=(f[2]-e[2])/d.unitY},distance:function(e,j){var g=0,k,d=this.usrCoords,i=this.scrCoords,h;if(e===JXG.COORDS_BY_USER){k=j.usrCoords;h=d[0]-k[0];g=h*h;if(g>JXG.Math.eps){return Number.POSITIVE_INFINITY}h=d[1]-k[1];g+=h*h;h=d[2]-k[2];g+=h*h}else{k=j.scrCoords;h=i[1]-k[1];g+=h*h;h=i[2]-k[2];g+=h*h}return Math.sqrt(g)},setCoordinates:function(e,h,f){var d=this.usrCoords,g=this.scrCoords;if(e===JXG.COORDS_BY_USER){if(h.length===2){d[0]=1;d[1]=h[0];d[2]=h[1]}else{d[0]=h[0];d[1]=h[1];d[2]=h[2];this.normalizeUsrCoords()}this.usr2screen(f)}else{g[1]=h[0];g[2]=h[1];this.screen2usr()}return this}});JXG.Point=function(e,f,d){this.constructor(e,d,JXG.OBJECT_TYPE_POINT,JXG.OBJECT_CLASS_POINT);if(f==null){f=[0,0]}this.coords=new JXG.Coords(JXG.COORDS_BY_USER,f,this.board);this.initialCoords=new JXG.Coords(JXG.COORDS_BY_USER,f,this.board);this.position=null;this.onPolygon=false;this.slideObject=null;this.Xjc=null;this.Yjc=null;this.methodMap=JXG.deepCopy(this.methodMap,{move:"moveTo",glide:"makeGlider",X:"X",Y:"Y",free:"free",setPosition:"setGliderPosition"});this.group=[];this.elType="point";this.id=this.board.setId(this,"P");this.board.renderer.drawPoint(this);this.board.finalizeAdding(this);this.createLabel()};JXG.Point.prototype=new JXG.GeometryElement();JXG.extend(JXG.Point.prototype,{hasPoint:function(e,g){var d=this.coords.scrCoords,f;f=parseFloat(this.visProp.size)+parseFloat(this.visProp.strokewidth)*0.5;if(f1){for(k=0;k=0)?1:-1;m=Math.abs(m);this.position=j*m/(m+1)}else{if(Math.abs(r[0])0&&Math.abs(this._smax-this._smin)>=JXG.Math.eps){if(this.position<0){this.position=0}if(this.position>1){this.position=1}q=this.position*(this._smax-this._smin)+this._smin;q=Math.round(q/this.visProp.snapwidth)*this.visProp.snapwidth;this.position=(q-this._smin)/(this._smax-this._smin);this.update(true)}r=l.point1.coords.usrCoords;if(!l.visProp.straightfirst&&Math.abs(r[0])>JXG.Math.eps&&this.position<0){this.coords.setCoordinates(JXG.COORDS_BY_USER,r);this.position=0}n=l.point2.coords.usrCoords;if(!l.visProp.straightlast&&Math.abs(n[0])>JXG.Math.eps&&this.position>1){this.coords.setCoordinates(JXG.COORDS_BY_USER,n);this.position=1}}else{if(l.type==JXG.OBJECT_TYPE_TURTLE){this.updateConstraint();this.coords=JXG.Math.Geometry.projectPointToTurtle(this,l,this.board)}else{if(l.elementClass==JXG.OBJECT_CLASS_CURVE){if(l.type==JXG.OBJECT_TYPE_ARC||l.type==JXG.OBJECT_TYPE_SECTOR){this.coords=JXG.Math.Geometry.projectPointToCircle(this,l,this.board);g=JXG.Math.Geometry.rad(l.radiuspoint,l.center,this);h=0;p=JXG.Math.Geometry.rad(l.radiuspoint,l.center,l.anglepoint);this.position=g;if((l.visProp.type=="minor"&&p>Math.PI)||(l.visProp.type=="major"&&pp){this.position=p;if((gh*0.5)||(g>p&&g>p*0.5+Math.PI)){this.position=h}this.updateGliderFromParent()}}else{this.updateConstraint();this.coords=JXG.Math.Geometry.projectPointToCurve(this,l,this.board)}}else{if(l.elementClass==JXG.OBJECT_CLASS_POINT){this.coords=JXG.Math.Geometry.projectPointToPoint(this,l,this.board)}}}}}},updateGliderFromParent:function(){var e,g,h,f,d=this.slideObject,i;if(d.elementClass==JXG.OBJECT_CLASS_CIRCLE){h=d.Radius();this.coords.setCoordinates(JXG.COORDS_BY_USER,[d.center.X()+h*Math.cos(this.position),d.center.Y()+h*Math.sin(this.position)])}else{if(d.elementClass==JXG.OBJECT_CLASS_LINE){e=d.point1.coords.usrCoords;g=d.point2.coords.usrCoords;if(Math.abs(g[0])1){f=(f-1)/(f-2)}else{f=(1-f)/f}this.coords.setCoordinates(JXG.COORDS_BY_USER,[g[0]+f*e[0],g[1]+f*e[1],g[2]+f*e[2]])}else{f=this.position;this.coords.setCoordinates(JXG.COORDS_BY_USER,[e[0]+f*(g[0]-e[0]),e[1]+f*(g[1]-e[1]),e[2]+f*(g[2]-e[2])])}}}else{if(d.type==JXG.OBJECT_TYPE_TURTLE){this.coords.setCoordinates(JXG.COORDS_BY_USER,[d.Z(this.position),d.X(this.position),d.Y(this.position)]);this.updateConstraint();this.coords=JXG.Math.Geometry.projectPointToTurtle(this,d,this.board)}else{if(d.elementClass==JXG.OBJECT_CLASS_CURVE){this.coords.setCoordinates(JXG.COORDS_BY_USER,[d.Z(this.position),d.X(this.position),d.Y(this.position)]);if(d.type==JXG.OBJECT_TYPE_ARC||d.type==JXG.OBJECT_TYPE_SECTOR){i=JXG.Math.Geometry.rad([d.center.X()+1,d.center.Y()],d.center,d.radiuspoint);h=d.Radius();this.coords.setCoordinates(JXG.COORDS_BY_USER,[d.center.X()+h*Math.cos(this.position+i),d.center.Y()+h*Math.sin(this.position+i)])}else{this.updateConstraint();this.coords=JXG.Math.Geometry.projectPointToCurve(this,d,this.board)}}else{if(d.elementClass==JXG.OBJECT_CLASS_POINT){this.coords=JXG.Math.Geometry.projectPointToPoint(this,d,this.board)}}}}}},updateRenderer:function(){if(!this.needsUpdate){return this}if(this.visProp.visible&&this.visProp.size>0){var d=this.isReal;this.isReal=(!isNaN(this.coords.usrCoords[1]+this.coords.usrCoords[2]));this.isReal=(Math.abs(this.coords.usrCoords[0])>JXG.Math.eps)?this.isReal:false;if(this.isReal){if(d!=this.isReal){this.board.renderer.show(this);if(this.hasLabel&&this.label.content.visProp.visible){this.board.renderer.show(this.label.content)}}this.board.renderer.updatePoint(this)}else{if(d!=this.isReal){this.board.renderer.hide(this);if(this.hasLabel&&this.label.content.visProp.visible){this.board.renderer.hide(this.label.content)}}}}if(this.hasLabel&&this.visProp.visible&&this.label.content&&this.label.content.visProp.visible&&this.isReal){this.label.content.update();this.board.renderer.updateText(this.label.content)}this.needsUpdate=false;return this},X:function(){return this.coords.usrCoords[1]},Y:function(){return this.coords.usrCoords[2]},Z:function(){return this.coords.usrCoords[0]},XEval:function(){return this.coords.usrCoords[1]},YEval:function(){return this.coords.usrCoords[2]},ZEval:function(){return this.coords.usrCoords[0]},bounds:function(){return this.coords.usrCoords.slice(1).concat(this.coords.usrCoords.slice(1))},Dist:function(e){var g,i=e.coords.usrCoords,d=this.coords.usrCoords,h;h=d[0]-i[0];g=h*h;h=d[1]-i[1];g+=h*h;h=d[2]-i[2];g+=h*h;return Math.sqrt(g)},snapToGrid:function(){return this.handleSnapToGrid()},handleSnapToGrid:function(){var d,g,f=this.visProp.snapsizex,e=this.visProp.snapsizey;if(this.visProp.snaptogrid){d=this.coords.usrCoords[1];g=this.coords.usrCoords[2];if(f<=0&&this.board.defaultAxes&&this.board.defaultAxes.x.defaultTicks){f=this.board.defaultAxes.x.defaultTicks.ticksDelta*(this.board.defaultAxes.x.defaultTicks.visProp.minorticks+1)}if(e<=0&&this.board.defaultAxes&&this.board.defaultAxes.y.defaultTicks){e=this.board.defaultAxes.y.defaultTicks.ticksDelta*(this.board.defaultAxes.y.defaultTicks.visProp.minorticks+1)}if(f>0&&e>0){this.coords=new JXG.Coords(JXG.COORDS_BY_USER,[Math.round(d/f)*f,Math.round(g/e)*e],this.board)}}return this},handleSnapToPoints:function(){var g,j,e,h=0,f=Infinity,i=null;if(this.visProp.snaptopoints){for(g in this.board.objects){j=this.board.objects[g];if(j.elementClass==JXG.OBJECT_CLASS_POINT&&j!==this&&j.visProp.visible){e=JXG.Math.Geometry.projectPointToPoint(this,j,this.board);h=e.distance(JXG.COORDS_BY_USER,this.coords);if(h=this.visProp.snatchdistance){this.type=JXG.OBJECT_TYPE_POINT}}}return this},setPositionDirectly:function(d,j){var g,n,m,l,f,e,h=this.coords,k;this.coords=new JXG.Coords(d,j,this.board);this.handleSnapToGrid();this.handleSnapToPoints();this.handleAttractors();if(this.group.length!=0){n=this.coords.usrCoords[1]-h.usrCoords[1];m=this.coords.usrCoords[2]-h.usrCoords[2];l=this.coords.usrCoords[0]=h.usrCoords[0];for(g=0;g=0;g--){if(d===JXG.COORDS_BY_SCREEN){k=(new JXG.Coords(d,j,this.board)).usrCoords}else{if(j.length===2){j=[1].concat(j)}k=j}this.initialCoords=new JXG.Coords(JXG.COORDS_BY_USER,JXG.Math.matVecMult(JXG.Math.inverse(this.transformations[g].matrix),k),this.board)}this.update()}return this},setPositionByTransform:function(f,d){var e;d=new JXG.Coords(f,d,this.board);e=this.board.create("transform",d.usrCoords.slice(1),{type:"translate"});if(this.transformations.length>0&&this.transformations[this.transformations.length-1].isNumericMatrix){this.transformations[this.transformations.length-1].melt(e)}else{this.addTransform(this,e)}if(this.group.length==0){this.update()}return this},setPosition:function(e,d){return this.setPositionDirectly(e,d)},setGliderPosition:function(d){if(this.type=JXG.OBJECT_TYPE_GLIDER){this.position=d;this.board.update()}return this},makeGlider:function(d){this.slideObject=JXG.getRef(this.board,d);this.type=JXG.OBJECT_TYPE_GLIDER;this.elType="glider";this.visProp.snapwidth=-1;this.slideObject.addChild(this);this.isDraggable=true;this.generatePolynomial=function(){return this.slideObject.generatePolynomial(this)};this.updateGlider();return this},free:function(){var d;if(this.type!==JXG.OBJECT_TYPE_GLIDER){if(!this.isDraggable){this.isDraggable=true;this.type=JXG.OBJECT_TYPE_POINT;this.XEval=function(){return this.coords.usrCoords[1]};this.YEval=function(){return this.coords.usrCoords[2]};this.ZEval=function(){return this.coords.usrCoords[0]};this.Xjc=null;this.Yjc=null}else{return}}for(d in this.ancestors){delete this.ancestors[d].descendants[this.id];delete this.ancestors[d].childElements[this.id]}this.ancestors=[];this.slideObject=null;this.elType="point";this.type=JXG.OBJECT_TYPE_POINT},addConstraint:function(h){this.type=JXG.OBJECT_TYPE_CAS;var k=[],d,g,e,f,j=["X","Y"];this.isDraggable=false;for(g=0;gJXG.Math.eps)){this.setPosition(JXG.COORDS_BY_USER,k.usrCoords);return this.board.update(this)}p=p||{};var l=this.board.options.animationDelay,m=Math.ceil(f/(l*1)),n=new Array(m+1),e=this.coords.usrCoords[1],d=this.coords.usrCoords[2],h=(k.usrCoords[1]-e),g=(k.usrCoords[2]-d),j,o=function(q){if(p.effect&&p.effect=="<>"){return Math.pow(Math.sin((q/(m*1))*Math.PI/2),2)}return q/m};if(Math.abs(h)=0;j--){n[m-j]=[k.usrCoords[0],e+h*o(j),d+g*o(j)]}this.animationPath=n;this.animationCallback=p.callback;this.board.addAnimation(this);return this},visit:function(m,f,r){if(typeof r=="number"){r={repeat:r}}else{r=r||{};if(typeof r.repeat=="undefined"){r.repeat=1}}var n=this.board.options.animationDelay,o=Math.ceil(f/(n*r.repeat)),p=new Array(r.repeat*(o+1)),e=this.coords.usrCoords[1],d=this.coords.usrCoords[2],k=(m[0]-e),g=(m[1]-d),l,h,q=function(s){var j=(s"){return Math.pow(Math.sin((j)*Math.PI/2),2)}return j};for(h=0;h=0;l--){p[h*(o+1)+o-l]=[m[0],e+k*q(l),d+g*q(l)]}}this.animationPath=p;this.animationCallback=r.callback;this.board.addAnimation(this);return this},_anim:function(n,i){var e,l,j,h,g,f,m=1,d,k;this.intervalCount++;if(this.intervalCount>i){this.intervalCount=0}if(this.slideObject.elementClass==JXG.OBJECT_CLASS_LINE){e=this.slideObject.point1.coords.distance(JXG.COORDS_BY_SCREEN,this.slideObject.point2.coords);l=this.slideObject.getSlope();if(l!="INF"){g=Math.atan(l);j=Math.round((this.intervalCount/i)*e*Math.cos(g));h=Math.round((this.intervalCount/i)*e*Math.sin(g))}else{j=0;h=Math.round((this.intervalCount/i)*e)}if(n<0){f=this.slideObject.point2;if(this.slideObject.point2.coords.scrCoords[1]-this.slideObject.point1.coords.scrCoords[1]>0){m=-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){m=-1}}}}else{f=this.slideObject.point1;if(this.slideObject.point1.coords.scrCoords[1]-this.slideObject.point2.coords.scrCoords[1]>0){m=-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){m=-1}}}}this.coords.setCoordinates(JXG.COORDS_BY_SCREEN,[f.coords.scrCoords[1]+m*j,f.coords.scrCoords[2]+m*h])}else{if(this.slideObject.elementClass==JXG.OBJECT_CLASS_CURVE){if(n>0){d=Math.round(this.intervalCount/i*this.board.canvasWidth)}else{d=Math.round((i-this.intervalCount)/i*this.board.canvasWidth)}this.coords.setCoordinates(JXG.COORDS_BY_SCREEN,[d,0]);this.coords=JXG.Math.Geometry.projectPointToCurve(this,this.slideObject,this.board)}else{if(this.slideObject.elementClass==JXG.OBJECT_CLASS_CIRCLE){if(n<0){g=this.intervalCount/i*2*Math.PI}else{g=(i-this.intervalCount)/i*2*Math.PI}k=this.slideObject.Radius();this.coords.setCoordinates(JXG.COORDS_BY_USER,[this.slideObject.center.coords.usrCoords[1]+k*Math.cos(g),this.slideObject.center.coords.usrCoords[2]+k*Math.sin(g)])}}}this.board.update(this);return this},setStyle:function(d){var e=["cross","cross","cross","circle","circle","circle","circle","square","square","square","plus","plus","plus"],f=[2,3,4,1,2,3,4,2,3,4,2,3,4];this.visProp.face=e[d];this.visProp.size=f[d];this.board.renderer.changePointStyle(this);return this},normalizeFace:function(d){var e={cross:"x",x:"x",circle:"o",o:"o",square:"[]","[]":"[]",plus:"+","+":"+",diamond:"<>","<>":"<>",triangleup:"^",a:"^","^":"^",triangledown:"v",v:"v",triangleleft:"<","<":"<",triangleright:">",">":">"};return e[d]},remove:function(){if(this.hasLabel){this.board.renderer.remove(this.board.renderer.getElementById(this.label.content.id))}this.board.renderer.remove(this.board.renderer.getElementById(this.id))},getTextAnchor:function(){return this.coords},getLabelAnchor:function(){return this.coords},face:function(d){this.setProperty({face:d})},size:function(d){this.setProperty({size:d})},cloneToBackground:function(){var d={};d.id=this.id+"T"+this.numTraces;this.numTraces++;d.coords=this.coords;d.visProp=JXG.deepCopy(this.visProp,this.visProp.traceattributes,true);d.visProp.layer=this.board.options.layer.trace;d.elementClass=JXG.OBJECT_CLASS_POINT;d.board=this.board;JXG.clearVisPropOld(d);this.board.renderer.drawPoint(d);this.traces[d.id]=d.rendNode;return this},getParents:function(){var d=[this.Z(),this.X(),this.Y()];if(this.parents){d=this.parents}if(this.type==JXG.OBJECT_TYPE_GLIDER){d=[this.X(),this.Y(),this.slideObject.id]}return d}});JXG.createPoint=function(k,g,f){var j,e=false,h,d;d=JXG.copyAttributes(f,k.options,"point");for(h=0;hthis.board.options.precision.hasPoint*this.board.options.precision.hasPoint){return false}if(this.visProp.straightfirst&&this.visProp.straightlast){return true}else{p=this.point1.coords;g=this.point2.coords;m=(new JXG.Coords(JXG.COORDS_BY_SCREEN,m.slice(1),this.board)).usrCoords;f=p.distance(JXG.COORDS_BY_USER,g);p=p.usrCoords.slice(0);g=g.usrCoords.slice(0);if(f1){return false}return true}},update:function(){var d;if(!this.needsUpdate){return this}if(this.constrained){if(typeof this.funps!="undefined"){d=this.funps();if(d&&d.length&&d.length===2){this.point1=d[0];this.point2=d[1]}}else{if(typeof this.funp1==="function"){d=this.funp1();if(JXG.isPoint(d)){this.point1=d}else{if(d&&d.length&&d.length===2){this.point1.setPositionDirectly(JXG.COORDS_BY_USER,d)}}}if(typeof this.funp2==="function"){d=this.funp2();if(JXG.isPoint(d)){this.point2=d}else{if(d&&d.length&&d.length===2){this.point2.setPositionDirectly(JXG.COORDS_BY_USER,d)}}}}}this.updateSegmentFixedLength();this.updateStdform();if(this.visProp.trace){this.cloneToBackground(true)}return this},updateSegmentFixedLength:function(){var k,f,j,i,h,g,e,l;if(!this.hasFixedLength){return this}k=this.point1.Dist(this.point2);f=this.fixedLength();j=this.fixedLengthOldCoords[0].distance(JXG.COORDS_BY_USER,this.point1.coords);i=this.fixedLengthOldCoords[1].distance(JXG.COORDS_BY_USER,this.point2.coords);if(j>JXG.Math.eps||i>JXG.Math.eps||k!=f){h=this.point1.isDraggable&&(this.point1.type!=JXG.OBJECT_TYPE_GLIDER)&&!this.point1.visProp.fixed;g=this.point2.isDraggable&&(this.point2.type!=JXG.OBJECT_TYPE_GLIDER)&&!this.point2.visProp.fixed;if(k>JXG.Math.eps){if((j>i&&g)||(j<=i&&g&&!h)){this.point2.setPositionDirectly(JXG.COORDS_BY_USER,[this.point1.X()+(this.point2.X()-this.point1.X())*f/k,this.point1.Y()+(this.point2.Y()-this.point1.Y())*f/k]);this.point2.prepareUpdate().updateRenderer()}else{if((j<=i&&h)||(j>i&&h&&!g)){this.point1.setPositionDirectly(JXG.COORDS_BY_USER,[this.point2.X()+(this.point1.X()-this.point2.X())*f/k,this.point2.Y()+(this.point1.Y()-this.point2.Y())*f/k]);this.point1.prepareUpdate().updateRenderer()}}}else{e=Math.random()-0.5;l=Math.random()-0.5;k=Math.sqrt(e*e+l*l);if(g){this.point2.setPositionDirectly(JXG.COORDS_BY_USER,[this.point1.X()+e*f/k,this.point1.Y()+l*f/k]);this.point2.prepareUpdate().updateRenderer()}else{if(h){this.point1.setPositionDirectly(JXG.COORDS_BY_USER,[this.point2.X()+e*f/k,this.point2.Y()+l*f/k]);this.point1.prepareUpdate().updateRenderer()}}}this.fixedLengthOldCoords[0].setCoordinates(JXG.COORDS_BY_USER,this.point1.coords.usrCoords);this.fixedLengthOldCoords[1].setCoordinates(JXG.COORDS_BY_USER,this.point2.coords.usrCoords)}return this},updateStdform:function(){var d=JXG.Math.crossProduct(this.point1.coords.usrCoords,this.point2.coords.usrCoords);this.stdform[0]=d[0];this.stdform[1]=d[1];this.stdform[2]=d[2];this.stdform[3]=0;this.normalize()},updateRenderer:function(){var d;if(this.needsUpdate&&this.visProp.visible){d=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])&&(JXG.Math.innerProduct(this.stdform,this.stdform,3)>=JXG.Math.eps*JXG.Math.eps));if(this.isReal){if(d!=this.isReal){this.board.renderer.show(this);if(this.hasLabel&&this.label.content.visProp.visible){this.board.renderer.show(this.label.content)}}this.board.renderer.updateLine(this)}else{if(d!=this.isReal){this.board.renderer.hide(this);if(this.hasLabel&&this.label.content.visProp.visible){this.board.renderer.hide(this.label.content)}}}this.needsUpdate=false}if(this.hasLabel&&this.label.content.visProp.visible&&this.isReal){this.label.content.update();this.board.renderer.updateText(this.label.content)}return this},generatePolynomial:function(h){var g=this.point1.symbolic.x,f=this.point1.symbolic.y,j=this.point2.symbolic.x,i=this.point2.symbolic.y,e=h.symbolic.x,d=h.symbolic.y;return[["(",f,")*(",e,")-(",f,")*(",j,")+(",d,")*(",j,")-(",g,")*(",d,")+(",g,")*(",i,")-(",e,")*(",i,")"].join("")]},getRise:function(){if(Math.abs(this.stdform[2])>=JXG.Math.eps){return -this.stdform[0]/this.stdform[2]}else{return Infinity}},getSlope:function(){if(Math.abs(this.stdform[2])>=JXG.Math.eps){return -this.stdform[1]/this.stdform[2]}else{return Infinity}},getAngle:function(){return Math.atan2(this.point2.Y()-this.point1.Y(),this.point2.X()-this.point1.X())},setStraight:function(d,e){this.visProp.straightfirst=d;this.visProp.straightlast=e;this.board.renderer.updateLine(this);return this},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)},setLabelRelativeCoords:function(d){if(JXG.exists(this.label.content)){this.label.content.relativeCoords=new JXG.Coords(JXG.COORDS_BY_SCREEN,[d[0],-d[1]],this.board)}},getLabelAnchor:function(){var e,j,d=0,i=0,h=0,g=new JXG.Coords(JXG.COORDS_BY_USER,this.point1.coords.usrCoords,this.board),f=new JXG.Coords(JXG.COORDS_BY_USER,this.point2.coords.usrCoords,this.board);if(this.visProp.straightfirst||this.visProp.straightlast){JXG.Math.Geometry.calcStraight(this,g,f,0)}g=g.scrCoords;f=f.scrCoords;switch(this.label.content.visProp.position){case"lft":case"llft":case"ulft":if(g[1]<=f[1]){e=g[1];j=g[2]}else{e=f[1];j=f[2]}break;case"rt":case"lrt":case"urt":if(g[1]>f[1]){e=g[1];j=g[2]}else{e=f[1];j=f[2]}break;default:e=0.5*(g[1]+f[1]);j=0.5*(g[2]+f[2])}if(this.visProp.straightfirst||this.visProp.straightlast){if(JXG.exists(this.label.content)){i=parseFloat(this.label.content.visProp.offset[0]);h=parseFloat(this.label.content.visProp.offset[1]);d=this.label.content.visProp.fontsize}if(Math.abs(e)e&&e>this.board.canvasWidth-d-JXG.Math.eps){e=this.board.canvasWidth-i-d}else{e+=i}}if(JXG.Math.eps+d>j&&j>-JXG.Math.eps){j=h+d}else{if(this.board.canvasHeight+JXG.Math.eps>j&&j>this.board.canvasHeight-d-JXG.Math.eps){j=this.board.canvasHeight-h}else{j+=h}}}return new JXG.Coords(JXG.COORDS_BY_SCREEN,[e,j],this.board)},cloneToBackground:function(){var g={},e,d,f;g.id=this.id+"T"+this.numTraces;g.elementClass=JXG.OBJECT_CLASS_LINE;this.numTraces++;g.point1=this.point1;g.point2=this.point2;g.stdform=this.stdform;g.board=this.board;g.visProp=JXG.deepCopy(this.visProp,this.visProp.traceattributes,true);g.visProp.layer=this.board.options.layer.trace;JXG.clearVisPropOld(g);d=this.getSlope();e=this.getRise();g.getSlope=function(){return d};g.getRise=function(){return e};f=this.board.renderer.enhancedRendering;this.board.renderer.enhancedRendering=true;this.board.renderer.drawLine(g);this.board.renderer.enhancedRendering=f;this.traces[g.id]=g.rendNode;delete g;return this},addTransform:function(e){var f,g=JXG.isArray(e)?e:[e],d=g.length;for(f=0;f0&&this.point1.transformations[this.point1.transformations.length-1].isNumericMatrix){this.point1.transformations[this.point1.transformations.length-1].melt(e)}else{this.point1.addTransform(this.point1,e)}if(this.point2.transformations.length>0&&this.point2.transformations[this.point2.transformations.length-1].isNumericMatrix){this.point2.transformations[this.point2.transformations.length-1].melt(e)}else{this.point2.addTransform(this.point2,e)}return this},setPositionDirectly:function(j,h,g){var d,e,i=new JXG.Coords(j,h,this.board),f=new JXG.Coords(j,g,this.board);if(!this.point1.draggable()||!this.point2.draggable()){return this}d=JXG.Math.Statistics.subtract(i.usrCoords,f.usrCoords);e=this.board.create("transform",d.slice(1),{type:"translate"});e.applyOnce([this.point1,this.point2]);return this},snapToGrid:function(){if(this.visProp.snaptogrid){this.point1.snapToGrid();this.point2.snapToGrid()}return this},X:function(f){var e=this.stdform[2],d;d=(Math.abs(this.point1.coords.usrCoords[0])>JXG.Math.eps)?this.point1.coords.usrCoords[1]:this.point2.coords.usrCoords[1];f=(f-0.5)*2;if(f<0){f*=(-1);return(1-f)*d+f*e}else{return(1-f)*d-f*e}},Y:function(e){var d=this.stdform[1],f;f=(Math.abs(this.point1.coords.usrCoords[0])>JXG.Math.eps)?this.point1.coords.usrCoords[2]:this.point2.coords.usrCoords[2];e=(e-0.5)*2;if(e<0){e*=(-1);return(1-e)*f-e*d}else{return(1-e)*f+e*d}},Z:function(d){var e=(Math.abs(this.point1.coords.usrCoords[0])>JXG.Math.eps)?this.point1.coords.usrCoords[0]:this.point2.coords.usrCoords[0];d=(d-0.5)*2;if(d<0){d*=(-1)}return(1-d)*e},L:function(){return this.point1.Dist(this.point2)},minX:function(){return 0},maxX:function(){return 1},bounds:function(){var d=this.point1.coords.usrCoords,e=this.point2.coords.usrCoords;return[Math.min(d[1],e[1]),Math.max(d[2],e[2]),Math.max(d[1],e[1]),Math.min(d[2],e[2])]},addTicks:function(d){if(d.id==""||typeof d.id=="undefined"){d.id=this.id+"_ticks_"+(this.ticks.length+1)}this.board.renderer.drawTicks(d);this.ticks.push(d);return d.id},remove:function(){this.removeAllTicks();JXG.GeometryElement.prototype.remove.call(this)},removeAllTicks:function(){var e,d;for(d=this.ticks.length;d>0;d--){this.removeTicks(this.ticks[d-1])}this.ticks=new Array();this.board.update()},removeTicks:function(f){var e,d;if(this.defaultTicks!=null&&this.defaultTicks==f){this.defaultTicks=null}for(e=this.ticks.length;e>0;e--){if(this.ticks[e-1]==f){this.board.removeObject(this.ticks[e-1]);for(d=0;d1){l=JXG.copyAttributes(h,k.options,"line","point1");p=k.create("point",n[0],l)}else{if(JXG.isString(n[0])||n[0].elementClass==JXG.OBJECT_CLASS_POINT){p=JXG.getReference(k,n[0])}else{if((typeof n[0]=="function")&&(n[0]().elementClass==JXG.OBJECT_CLASS_POINT)){p=n[0]();g=true}else{if((typeof n[0]=="function")&&(n[0]().length&&n[0]().length===2)){l=JXG.copyAttributes(h,k.options,"line","point1");p=JXG.createPoint(k,n[0](),l);g=true}else{throw new Error("JSXGraph: Can't create line with parent types '"+(typeof n[0])+"' and '"+(typeof n[1])+"'.\nPossible parent types: [point,point], [[x1,y1],[x2,y2]], [a,b,c]")}}}}if(JXG.isArray(n[1])&&n[1].length>1){l=JXG.copyAttributes(h,k.options,"line","point2");o=k.create("point",n[1],l)}else{if(JXG.isString(n[1])||n[1].elementClass==JXG.OBJECT_CLASS_POINT){o=JXG.getReference(k,n[1])}else{if((typeof n[1]=="function")&&(n[1]().elementClass==JXG.OBJECT_CLASS_POINT)){o=n[1]();g=true}else{if((typeof n[1]=="function")&&(n[1]().length&&n[1]().length===2)){l=JXG.copyAttributes(h,k.options,"line","point2");o=JXG.createPoint(k,n[1](),l);g=true}else{throw new Error("JSXGraph: Can't create line with parent types '"+(typeof n[0])+"' and '"+(typeof n[1])+"'.\nPossible parent types: [point,point], [[x1,y1],[x2,y2]], [a,b,c]")}}}}l=JXG.copyAttributes(h,k.options,"line");f=new JXG.Line(k,p,o,l);if(g){f.constrained=true;f.funp1=n[0];f.funp2=n[1]}else{f.isDraggable=true}if(!f.constrained){f.parents=[p.id,o.id]}}else{if(n.length==3){e=true;for(j=0;j<3;j++){if(typeof n[j]=="number"){m[j]=function(i){return function(){return i}}(n[j])}else{if(typeof n[j]=="function"){m[j]=n[j];e=false}else{throw new Error("JSXGraph: Can't create line with parent types '"+(typeof n[0])+"' and '"+(typeof n[1])+"' and '"+(typeof n[2])+"'.\nPossible parent types: [point,point], [[x1,y1],[x2,y2]], [a,b,c]")}}}l=JXG.copyAttributes(h,k.options,"line","point1");if(e){p=k.create("point",[m[2]()*m[2]()+m[1]()*m[1](),m[2]()-m[1]()*m[0]()+m[2](),-m[1]()-m[2]()*m[0]()-m[1]()],l)}else{p=k.create("point",[function(){return(0+m[2]()*m[2]()+m[1]()*m[1]())*0.5},function(){return(m[2]()-m[1]()*m[0]()+m[2]())*0.5},function(){return(-m[1]()-m[2]()*m[0]()-m[1]())*0.5}],l)}l=JXG.copyAttributes(h,k.options,"line","point2");if(e){o=k.create("point",[m[2]()*m[2]()+m[1]()*m[1](),-m[1]()*m[0]()+m[2](),-m[2]()*m[0]()-m[1]()],l)}else{o=k.create("point",[function(){return m[2]()*m[2]()+m[1]()*m[1]()},function(){return -m[1]()*m[0]()+m[2]()},function(){return -m[2]()*m[0]()-m[1]()}],l)}p.prepareUpdate().update();o.prepareUpdate().update();l=JXG.copyAttributes(h,k.options,"line");f=new JXG.Line(k,p,o,l);f.isDraggable=e;if(e){f.parents=[m[0](),m[1](),m[2]()]}}else{if((n.length==1)&&(typeof n[0]=="function")&&(n[0]().length==2)&&(n[0]()[0].elementClass==JXG.OBJECT_CLASS_POINT)&&(n[0]()[1].elementClass==JXG.OBJECT_CLASS_POINT)){var d=n[0]();l=JXG.copyAttributes(h,k.options,"line");f=new JXG.Line(k,d[0],d[1],l);f.constrained=true;f.funps=n[0]}else{if((n.length==1)&&(typeof n[0]=="function")&&(n[0]().length==3)&&(typeof n[0]()[0]==="number")&&(typeof n[0]()[1]==="number")&&(typeof n[0]()[2]==="number")){d=n[0];l=JXG.copyAttributes(h,k.options,"line","point1");p=k.create("point",[function(){var i=d();return[(0+i[2]*i[2]+i[1]*i[1])*0.5,(i[2]-i[1]*i[0]+i[2])*0.5,(-i[1]-i[2]*i[0]-i[1])*0.5]}],l);l=JXG.copyAttributes(h,k.options,"line","point2");o=k.create("point",[function(){var i=d();return[i[2]*i[2]+i[1]*i[1],-i[1]*i[0]+i[2],-i[2]*i[0]-i[1]]}],l);l=JXG.copyAttributes(h,k.options,"line");f=new JXG.Line(k,p,o,l);f.constrained=true;f.funps=n[0]}else{throw new Error("JSXGraph: Can't create line with parent types '"+(typeof n[0])+"' and '"+(typeof n[1])+"'.\nPossible parent types: [point,point], [[x1,y1],[x2,y2]], [a,b,c]")}}}}return f};JXG.JSXGraph.registerElement("line",JXG.createLine);JXG.createSegment=function(h,e,d){var g,f;d.straightFirst=false;d.straightLast=false;g=h.create("line",e.slice(0,2),d);if(e.length==3){g.hasFixedLength=true;if(JXG.isNumber(e[2])){g.fixedLength=function(){return e[2]}}else{if(JXG.isFunction(e[2])){g.fixedLength=e[2]}else{throw new Error("JSXGraph: Can't create segment with third parent type '"+(typeof e[2])+"'.\nPossible third parent types: number or function")}}g.fixedLengthOldCoords=[];g.fixedLengthOldCoords[0]=new JXG.Coords(JXG.COORDS_BY_USER,g.point1.coords.usrCoords.slice(1,3),h);g.fixedLengthOldCoords[1]=new JXG.Coords(JXG.COORDS_BY_USER,g.point2.coords.usrCoords.slice(1,3),h)}g.elType="segment";return g};JXG.JSXGraph.registerElement("segment",JXG.createSegment);JXG.createArrow=function(g,e,d){var f;d.firstArrow=false;d.lastArrow=true;f=g.create("line",e,d).setStraight(false,false);f.type=JXG.OBJECT_TYPE_VECTOR;f.elType="arrow";return f};JXG.JSXGraph.registerElement("arrow",JXG.createArrow);JXG.createAxis=function(i,f,e){var d,h,j;if((JXG.isArray(f[0])||JXG.isPoint(f[0]))&&(JXG.isArray(f[1])||JXG.isPoint(f[1]))){d=JXG.copyAttributes(e,i.options,"axis");h=i.create("line",f,d);h.type=JXG.OBJECT_TYPE_AXIS;h.isDraggable=false;h.point1.isDraggable=false;h.point2.isDraggable=false;for(var g in h.ancestors){h.ancestors[g].type=JXG.OBJECT_TYPE_AXISPOINT}d=JXG.copyAttributes(e,i.options,"axis","ticks");if(JXG.exists(d.ticksdistance)){j=d.ticksdistance}else{if(JXG.isArray(d.ticks)){j=d.ticks}else{j=1}}h.defaultTicks=i.create("ticks",[h,j],d);h.defaultTicks.dump=false;h.elType="axis";h.subs={ticks:h.defaultTicks}}else{throw new Error("JSXGraph: Can't create point with parent types '"+(typeof f[0])+"' and '"+(typeof f[1])+"'.\nPossible parent types: [point,point], [[x1,y1],[x2,y2]]")}return h};JXG.JSXGraph.registerElement("axis",JXG.createAxis);JXG.createTangent=function(o,r,k){var d,q,m,n,l,h,e,s;if(r.length==1){d=r[0];q=d.slideObject}else{if(r.length==2){if(JXG.isPoint(r[0])){d=r[0];q=r[1]}else{if(JXG.isPoint(r[1])){q=r[0];d=r[1]}else{throw new Error("JSXGraph: Can't create tangent with parent types '"+(typeof r[0])+"' and '"+(typeof r[1])+"'.\nPossible parent types: [glider], [point,line|curve|circle|conic]")}}}else{throw new Error("JSXGraph: Can't create tangent with parent types '"+(typeof r[0])+"' and '"+(typeof r[1])+"'.\nPossible parent types: [glider], [point,line|curve|circle|conic]")}}if(q.elementClass==JXG.OBJECT_CLASS_LINE){s=o.create("line",[q.point1,q.point2],k)}else{if(q.elementClass==JXG.OBJECT_CLASS_CURVE&&!(q.type==JXG.OBJECT_TYPE_CONIC)){if(q.visProp.curvetype!="plot"){m=q.X;n=q.Y;s=o.create("line",[function(){return -d.X()*o.D(n)(d.position)+d.Y()*o.D(m)(d.position)},function(){return o.D(n)(d.position)},function(){return -o.D(m)(d.position)}],k);d.addChild(s);s.glider=d}else{s=o.create("line",[function(){l=Math.floor(d.position);if(l==q.numberPoints-1){l--}if(l<0){return 1}return q.Y(l)*q.X(l+1)-q.X(l)*q.Y(l+1)},function(){l=Math.floor(d.position);if(l==q.numberPoints-1){l--}if(l<0){return 0}return q.Y(l+1)-q.Y(l)},function(){l=Math.floor(d.position);if(l==q.numberPoints-1){l--}if(l<0){return 0}return q.X(l)-q.X(l+1)}],k);d.addChild(s);s.glider=d}}else{if(q.type==JXG.OBJECT_TYPE_TURTLE){s=o.create("line",[function(){l=Math.floor(d.position);for(h=0;h1){d=JXG.copyAttributes(e,k.options,"circle","center");l[h]=k.create("point",f[h],d)}else{l[h]=f[h]}}}d=JXG.copyAttributes(e,k.options,"circle");if(f.length==2&&JXG.isPoint(l[0])&&JXG.isPoint(l[1])){j=new JXG.Circle(k,"twoPoints",l[0],l[1],d)}else{if((JXG.isNumber(l[0])||JXG.isFunction(l[0])||JXG.isString(l[0]))&&JXG.isPoint(l[1])){j=new JXG.Circle(k,"pointRadius",l[1],l[0],d)}else{if((JXG.isNumber(l[1])||JXG.isFunction(l[1])||JXG.isString(l[1]))&&JXG.isPoint(l[0])){j=new JXG.Circle(k,"pointRadius",l[0],l[1],d)}else{if((l[0].elementClass==JXG.OBJECT_CLASS_CIRCLE)&&JXG.isPoint(l[1])){j=new JXG.Circle(k,"pointCircle",l[1],l[0],d)}else{if((l[1].elementClass==JXG.OBJECT_CLASS_CIRCLE)&&JXG.isPoint(l[0])){j=new JXG.Circle(k,"pointCircle",l[0],l[1],d)}else{if((l[0].elementClass==JXG.OBJECT_CLASS_LINE)&&JXG.isPoint(l[1])){j=new JXG.Circle(k,"pointLine",l[1],l[0],d)}else{if((l[1].elementClass==JXG.OBJECT_CLASS_LINE)&&JXG.isPoint(l[0])){j=new JXG.Circle(k,"pointLine",l[0],l[1],d)}else{if(f.length==3&&JXG.isPoint(l[0])&&JXG.isPoint(l[1])&&JXG.isPoint(l[2])){j=JXG.createCircumcircle(k,l,e)}else{throw new Error("JSXGraph: Can't create circle with parent types '"+(typeof f[0])+"' and '"+(typeof f[1])+"'.\nPossible parent types: [point,point], [point,number], [point,function], [point,circle], [point,point,point]")}}}}}}}}j.isDraggable=g;j.parents=[];for(h=0;h1){r[k]=n.create("point",p[k],j)}else{if(JXG.isPoint(p[k])){r[k]=JXG.getReference(n,p[k])}else{if((typeof p[k]=="function")&&(p[k]().elementClass===JXG.OBJECT_CLASS_POINT)){r[k]=p[k]()}else{if(JXG.isString(p[k])){r[k]=JXG.getReference(n,p[k])}else{throw new Error("JSXGraph: Can't create Ellipse with parent types '"+(typeof p[0])+"' and '"+(typeof p[1])+"'.\nPossible parent types: [point,point,point], [point,point,number|function]")}}}}}if(JXG.isNumber(p[2])){d=JXG.createFunction(p[2],n)}else{if((typeof p[2]=="function")&&(JXG.isNumber(p[2]()))){d=p[2]}else{if(JXG.isPoint(p[2])){e=JXG.getReference(n,p[2])}else{if(p[2].length>1){e=n.create("point",p[2],j)}else{if((typeof p[2]=="function")&&(p[2]().elementClass==JXG.OBJECT_CLASS_POINT)){e=p[2]()}else{if(JXG.isString(p[2])){e=JXG.getReference(n,p[2])}else{throw new Error("JSXGraph: Can't create Ellipse with parent types '"+(typeof p[0])+"' and '"+(typeof p[1])+"' and '"+(typeof p[2])+"'.\nPossible parent types: [point,point,point], [point,point,number|function]")}}}}d=function(){return e.Dist(r[0])+e.Dist(r[1])}}}if(typeof p[4]=="undefined"){p[4]=1.0001*Math.PI}if(typeof p[3]=="undefined"){p[3]=-1.0001*Math.PI}var o=n.create("point",[function(){return(r[0].X()+r[1].X())*0.5},function(){return(r[0].Y()+r[1].Y())*0.5}],j);var q=function(){var i=r[0].X(),B=r[0].Y(),w=r[1].X(),v=r[1].Y(),A,z,u;var t=(w-i>0)?1:-1;if(Math.abs(w-i)>1e-7){A=Math.atan2(v-B,w-i)+((t<0)?Math.PI:0)}else{A=((v-B>0)?0.5:-0.5)*Math.PI}z=Math.cos(A);u=Math.sin(A);var s=[[1,0,0],[o.X(),z,-u],[o.Y(),u,z]];return s};var f=n.create("curve",[function(i){return 0},function(i){return 0},p[3],p[4]],m);var g=function(u,s){var A=d()*0.5,i=A*A,t=r[1].Dist(r[0])*0.5,v=i-t*t,z=Math.sqrt(v),w=[[1,0,0],[0,1,0],[0,0,1]],C,B;if(!s){l=q();C=o.X();B=o.Y();w[0][0]=l[0][0];w[0][1]=0;w[0][2]=0;w[1][0]=C*(1-l[1][1])+B*l[1][2];w[1][1]=l[1][1];w[1][2]=l[2][1];w[2][0]=B*(1-l[1][1])-C*l[1][2];w[2][1]=l[1][2];w[2][2]=l[2][2];f.quadraticform=JXG.Math.matMatMult(JXG.Math.transpose(w),JXG.Math.matMatMult([[-1+C*C/(A*A)+B*B/v,-C/i,-C/v],[-C/i,1/i,0],[-B/v,0,1/v]],w))}return JXG.Math.matVecMult(l,[1,A*Math.cos(u),z*Math.sin(u)])};f.X=function(i,s){return g(i,s)[1]};f.Y=function(i,s){return g(i,s)[2]};f.midpoint=o;f.type=JXG.OBJECT_TYPE_CONIC;return f};JXG.createHyperbola=function(n,p,h){var r=[],e,d,k,l,j=JXG.copyAttributes(h,n.options,"conic","foci"),m=JXG.copyAttributes(h,n.options,"conic");for(k=0;k<2;k++){if(p[k].length>1){r[k]=n.create("point",p[k],attr_focu)}else{if(JXG.isPoint(p[k])){r[k]=JXG.getReference(n,p[k])}else{if((typeof p[k]=="function")&&(p[k]().elementClass==JXG.OBJECT_CLASS_POINT)){r[k]=p[k]()}else{if(JXG.isString(p[k])){r[k]=JXG.getReference(n,p[k])}else{throw new Error("JSXGraph: Can't create Hyperbola with parent types '"+(typeof p[0])+"' and '"+(typeof p[1])+"'.\nPossible parent types: [point,point,point], [point,point,number|function]")}}}}}if(JXG.isNumber(p[2])){d=JXG.createFunction(p[2],n)}else{if((typeof p[2]=="function")&&(JXG.isNumber(p[2]()))){d=p[2]}else{if(JXG.isPoint(p[2])){e=JXG.getReference(n,p[2])}else{if(p[2].length>1){e=n.create("point",p[2],j)}else{if((typeof p[2]=="function")&&(p[2]().elementClass==JXG.OBJECT_CLASS_POINT)){e=p[2]()}else{if(JXG.isString(p[2])){e=JXG.getReference(n,p[2])}else{throw new Error("JSXGraph: Can't create Hyperbola with parent types '"+(typeof p[0])+"' and '"+(typeof p[1])+"' and '"+(typeof p[2])+"'.\nPossible parent types: [point,point,point], [point,point,number|function]")}}}}d=function(){return e.Dist(r[0])-e.Dist(r[1])}}}if(typeof p[4]=="undefined"){p[4]=1.0001*Math.PI}if(typeof p[3]=="undefined"){p[3]=-1.0001*Math.PI}var o=n.create("point",[function(){return(r[0].X()+r[1].X())*0.5},function(){return(r[0].Y()+r[1].Y())*0.5}],j);var q=function(){var t=r[0].X(),s=r[0].Y(),z=r[1].X(),v=r[1].Y(),u;var w=(z-t>0)?1:-1;if(Math.abs(z-t)>1e-7){u=Math.atan2(v-s,z-t)+((w<0)?Math.PI:0)}else{u=((v-s>0)?0.5:-0.5)*Math.PI}var i=[[1,0,0],[o.X(),Math.cos(u),-Math.sin(u)],[o.Y(),Math.sin(u),Math.cos(u)]];return i};var f=n.create("curve",[function(i){return 0},function(i){return 0},p[3],p[4]],m);var g=function(u,s){var A=d()*0.5,i=A*A,t=r[1].Dist(r[0])*0.5,z=Math.sqrt(-A*A+t*t),v=z*z,w=[[1,0,0],[0,1,0],[0,0,1]],C,B;if(!s){l=q();C=o.X();B=o.Y();w[0][0]=l[0][0];w[0][1]=0;w[0][2]=0;w[1][0]=C*(1-l[1][1])+B*l[1][2];w[1][1]=l[1][1];w[1][2]=l[2][1];w[2][0]=B*(1-l[1][1])-C*l[1][2];w[2][1]=l[1][2];w[2][2]=l[2][2];f.quadraticform=JXG.Math.matMatMult(JXG.Math.transpose(w),JXG.Math.matMatMult([[-1+C*C/i+B*B/v,-C/i,B/v],[-C/i,1/i,0],[B/v,0,-1/v]],w))}return JXG.Math.matVecMult(l,[1,A/Math.cos(u),z*Math.tan(u)])};f.X=function(i,s){return g(i,s)[1]};f.Y=function(i,s){return g(i,s)[2]};f.midpoint=o;f.type=JXG.OBJECT_TYPE_CONIC;return f};JXG.createParabola=function(m,o,g){var k=o[0],e=o[1],i,h=JXG.copyAttributes(g,m.options,"conic","foci"),j=JXG.copyAttributes(g,m.options,"conic");if(o[0].length>1){k=m.create("point",o[0],h)}else{if(JXG.isPoint(o[0])){k=JXG.getReference(m,o[0])}else{if((typeof o[0]=="function")&&(o[0]().elementClass==JXG.OBJECT_CLASS_POINT)){k=o[0]()}else{if(JXG.isString(o[0])){k=JXG.getReference(m,o[0])}else{throw new Error("JSXGraph: Can't create Parabola with parent types '"+(typeof o[0])+"' and '"+(typeof o[1])+"'.\nPossible parent types: [point,line]")}}}}if(typeof o[3]=="undefined"){o[3]=10}if(typeof o[2]=="undefined"){o[2]=-10}var n=m.create("point",[function(){var l=[0,e.stdform[1],e.stdform[2]];l=JXG.Math.crossProduct(l,k.coords.usrCoords);return JXG.Math.Geometry.meetLineLine(l,e.stdform,0,m).usrCoords}],h);var p=function(){var r=Math.atan(e.getSlope()),q=(n.X()+k.X())*0.5,s=(n.Y()+k.Y())*0.5;r+=(k.Y()-n.Y()<0||(k.Y()==n.Y()&&k.X()>n.X()))?Math.PI:0;var l=[[1,0,0],[q*(1-Math.cos(r))+s*Math.sin(r),Math.cos(r),-Math.sin(r)],[s*(1-Math.cos(r))-q*Math.sin(r),Math.sin(r),Math.cos(r)]];return l};var d=m.create("curve",[function(l){return 0},function(l){return 0},o[2],o[3]],j);var f=function(s,u){var v=n.Dist(k)*0.5,r=[[1,0,0],[0,1,0],[0,0,1]],q=(n.X()+k.X())*0.5,l=(n.Y()+k.Y())*0.5;if(!u){i=p();r[0][0]=i[0][0];r[0][1]=0;r[0][2]=0;r[1][0]=q*(1-i[1][1])+l*i[1][2];r[1][1]=i[1][1];r[1][2]=i[2][1];r[2][0]=l*(1-i[1][1])-q*i[1][2];r[2][1]=i[1][2];r[2][2]=i[2][2];d.quadraticform=JXG.Math.matMatMult(JXG.Math.transpose(r),JXG.Math.matMatMult([[-l*4*v-q*q,q,2*v],[q,-1,0],[2*v,0,0]],r))}return JXG.Math.matVecMult(i,[1,s+q,s*s/(v*4)+l])};d.X=function(l,q){return f(l,q)[1]};d.Y=function(l,q){return f(l,q)[2]};d.type=JXG.OBJECT_TYPE_CONIC;return d};JXG.createConic=function(e,w,g){var j=[[1,0,0],[0,1,0],[0,0,1]],D,B,A,z,f=[[1,0,0],[0,1,0],[0,0,1]],o,n,t=[],u,r,C,m=[],s=JXG.copyAttributes(g,e.options,"conic","foci"),q=JXG.copyAttributes(g,e.options,"conic");if(w.length==5){C=true}else{if(w.length==6){C=false}else{throw new Error("JSXGraph: Can't create generic Conic with "+parent.length+" parameters.")}}if(C){for(u=0;u<5;u++){if(w[u].length>1){t[u]=e.create("point",w[u],s)}else{if(JXG.isPoint(w[u])){t[u]=JXG.getReference(e,w[u])}else{if((typeof w[u]=="function")&&(w[u]().elementClass==JXG.OBJECT_CLASS_POINT)){t[u]=w[u]()}else{if(JXG.isString(w[u])){t[u]=JXG.getReference(e,w[u])}else{throw new Error("JSXGraph: Can't create Conic section with parent types '"+(typeof w[u])+"'.\nPossible parent types: [point,point,point,point,point], [a00,a11,a22,a01,a02,a12]")}}}}}}else{r=[[0,0,0],[0,0,0],[0,0,0]];r[0][0]=(JXG.isFunction(w[2]))?function(){return w[2]()}:function(){return w[2]};r[0][1]=(JXG.isFunction(w[4]))?function(){return w[4]()}:function(){return w[4]};r[0][2]=(JXG.isFunction(w[5]))?function(){return w[5]()}:function(){return w[5]};r[1][1]=(JXG.isFunction(w[0]))?function(){return w[0]()}:function(){return w[0]};r[1][2]=(JXG.isFunction(w[3]))?function(){return w[3]()}:function(){return w[3]};r[2][2]=(JXG.isFunction(w[1]))?function(){return w[1]()}:function(){return w[1]}}var h=function(p){var F,E;for(F=0;F<3;F++){for(E=F;E<3;E++){p[F][E]+=p[E][F]}}for(F=0;F<3;F++){for(E=0;EG){f[F][G]=f[G][F]}}}}k.quadraticform=f;D=JXG.Math.Numerics.Jacobi(f);if(D[0][0][0]<0){D[0][0][0]*=(-1);D[0][1][1]*=(-1);D[0][2][2]*=(-1)}for(G=0;G<3;G++){p=0;for(F=0;F<3;F++){p+=D[1][F][G]*D[1][F][G]}p=Math.sqrt(p);for(F=0;F<3;F++){}}j=D[1];z=Math.sqrt(Math.abs(D[0][0][0]));B=Math.sqrt(Math.abs(D[0][1][1]));A=Math.sqrt(Math.abs(D[0][2][2]))}if(D[0][1][1]<=0&&D[0][2][2]<=0){E=JXG.Math.matVecMult(j,[1/z,Math.cos(H)/B,Math.sin(H)/A])}else{if(D[0][1][1]<=0&&D[0][2][2]>0){E=JXG.Math.matVecMult(j,[Math.cos(H)/z,1/B,Math.sin(H)/A])}else{if(D[0][2][2]<0){E=JXG.Math.matVecMult(j,[Math.sin(H)/z,Math.cos(H)/B,1/A])}}}E[1]/=E[0];E[2]/=E[0];E[0]=1;return E};k.X=function(i,p){return d(i,p)[1]};k.Y=function(i,p){return d(i,p)[2]};k.midpoint=e.create("point",[function(){var i=k.quadraticform;return[i[1][1]*i[2][2]-i[1][2]*i[1][2],i[1][2]*i[0][2]-i[2][2]*i[0][1],i[0][1]*i[1][2]-i[1][1]*i[0][2]]}],s);k.type=JXG.OBJECT_TYPE_CONIC;return k};JXG.JSXGraph.registerElement("ellipse",JXG.createEllipse);JXG.JSXGraph.registerElement("hyperbola",JXG.createHyperbola);JXG.JSXGraph.registerElement("parabola",JXG.createParabola);JXG.JSXGraph.registerElement("conic",JXG.createConic);JXG.Polygon=function(h,f,e){this.constructor(h,e,JXG.OBJECT_TYPE_POLYGON,JXG.OBJECT_CLASS_AREA);var g,k,d,j=JXG.copyAttributes(e,h.options,"polygon","borders");this.withLines=e.withlines;this.attr_line=j;this.vertices=[];for(g=0;gk)!=(this.vertices[f].coords.scrCoords[2]>k))&&(e<(this.vertices[f].coords.scrCoords[1]-this.vertices[g].coords.scrCoords[1])*(k-this.vertices[g].coords.scrCoords[2])/(this.vertices[f].coords.scrCoords[2]-this.vertices[g].coords.scrCoords[2])+this.vertices[g].coords.scrCoords[1])){h=!h}}}else{d=this.borders.length;for(g=0;gd){d=this.vertices[g].X()}if(this.vertices[g].Y()>e){e=this.vertices[g].Y()}if(this.vertices[g].Y()this.vertices.length-2){return this}for(f=1;f-1&&e-1;k--){h[d[k]]=-1;if(this.withLines&&(d[k]-1>d[k-1])){f[f.length-1][1]=d[k];f.push([d[k-1]])}}if(this.withLines){f[f.length-1][1]=d[0]}this.vertices=[];for(k=0;kl.length-1){g=l.length-1}}this.board.removeObject(this.borders[g]);l[g]=-1}if(f[k][1]!==0&&f[k][0]!==h.length-1){l[f[k][0]-1]=JXG.createSegment(this.board,[h[Math.max(f[k][1]-1,0)],h[Math.min(f[k][0]+1,this.vertices.length-1)]],this.attr_line)}}this.borders=[];for(k=0;k=g-2){l.id=l.ids[j-2]}d[j]=m.create("point",[d[j-2],e],l);d[j].type=JXG.OBJECT_TYPE_CAS}}l=JXG.copyAttributes(h,m.options,"polygon");f=m.create("polygon",d,l);f.elType="regularpolygon";return f};JXG.JSXGraph.registerElement("polygon",JXG.createPolygon);JXG.JSXGraph.registerElement("regularpolygon",JXG.createRegularPolygon);JXG.Curve=function(f,e,d){this.constructor(f,d,JXG.OBJECT_TYPE_CURVE,JXG.OBJECT_CLASS_CURVE);this.points=[];this.numberPoints=this.visProp.numberpointshigh;this.bezierDegree=1;this.dataX=null;this.dataY=null;if(e[0]!=null){this.varname=e[0]}else{this.varname="x"}this.xterm=e[1];this.yterm=e[2];this.generateTerm(this.varname,this.xterm,this.yterm,e[3],e[4]);this.updateCurve();this.id=this.board.setId(this,"G");this.board.renderer.drawCurve(this);this.board.finalizeAdding(this);this.createGradient();this.elType="curve";this.createLabel();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.extend(JXG.Curve.prototype,{minX:function(){if(this.visProp.curvetype=="polar"){return 0}else{var d=new JXG.Coords(JXG.COORDS_BY_SCREEN,[0,0],this.board);return d.usrCoords[1]}},maxX:function(){var d;if(this.visProp.curvetype=="polar"){return 2*Math.PI}else{d=new JXG.Coords(JXG.COORDS_BY_SCREEN,[this.board.canvasWidth,0],this.board);return d.usrCoords[1]}},Z:function(d){return 1},hasPoint:function(s,r,n){var u,B=Infinity,J,m,D,C,w,v,z,f,K,A,p,H,l,G,h,o,q,F=this.visProp.numberpointslow,I=(this.maxX()-this.minX())/F,e=this.board.options.precision.hasPoint/this.board.unitX,g,E,k=true;e=e*e;g=new JXG.Coords(JXG.COORDS_BY_SCREEN,[s,r],this.board);s=g.usrCoords[1];r=g.usrCoords[2];if(this.visProp.curvetype=="parameter"||this.visProp.curvetype=="polar"||this.visProp.curvetype=="functiongraph"){E=this.transformations.length;for(D=0,u=this.minX();D=JXG.Math.eps){o=H*G+l*h;p=o/q;B=H*H+l*l-p*o}else{p=0;B=H*H+l*l}if(p>=0&&p<=1&&B=JXG.Math.eps){i=(t*j+K*I)/J;if(i>0){if(i<=1){t-=i*j;K-=i*I}else{t-=j;K-=I}}}H=t*t+K*K;return Math.sqrt(H)};if(this.board.updateQuality==this.board.BOARD_QUALITY_LOW){F=15;s=10;k=10}else{F=21;s=0.7;k=0.7}A[0]=e-E;for(v=1;v1){C=l(this.points[u-2].scrCoords,[n,m],this.points[u-1].scrCoords);if(C<0.015){u--}}this.points[u]=new JXG.Coords(JXG.COORDS_BY_SCREEN,[n,m],this.board);this.updateTransform(this.points[u]);u++;B=n;f=m;o=p;q--;n=D[q][0];m=D[q][1];G=h[q]+1;v=w[q]*2}while(q>0&&u<500000);this.numberPoints=this.points.length;return this},isSegmentOutside:function(e,g,d,f){return(g<0&&f<0)||(g>this.board.canvasHeight&&f>this.board.canvasHeight)||(e<0&&d<0)||(e>this.board.canvasWidth&&d>this.board.canvasWidth)},isDistOK:function(f,d,g,e){return(Math.abs(f)0&&this.transformations[this.transformations.length-1].isNumericMatrix){this.transformations[this.transformations.length-1].melt(d)}else{this.addTransform(d)}return this},generateTerm:function(e,i,f,d,j){var h,g;if(JXG.isArray(i)){this.dataX=i;this.X=function(m){var l=parseInt(Math.floor(m)),k,n;if(m<0){l=0}else{if(m>this.dataX.length-2){l=this.dataX.length-2}}if(l==m){return this.dataX[l]}else{k=this.dataX[l];n=this.dataX[l+1];return k+(n-k)*(m-l)}};this.visProp.curvetype="plot";this.numberPoints=this.dataX.length}else{this.X=JXG.createFunction(i,this.board,e);if(JXG.isString(i)){this.visProp.curvetype="functiongraph"}else{if(JXG.isFunction(i)||JXG.isNumber(i)){this.visProp.curvetype="parameter"}}}if(JXG.isArray(f)){this.dataY=f;this.Y=function(m){var l=parseInt(Math.floor(m)),k,n;if(m<0){l=0}else{if(m>this.dataY.length-2){l=this.dataY.length-2}}if(l==m){if(JXG.isFunction(this.dataY[l])){return this.dataY[l]()}else{return this.dataY[l]}}else{if(JXG.isFunction(this.dataY[l])){k=this.dataY[l]()}else{k=this.dataY[l]}if(JXG.isFunction(this.dataY[l+1])){n=this.dataY[l+1]()}else{n=this.dataY[l+1]}return k+(n-k)*(m-l)}}}else{this.Y=JXG.createFunction(f,this.board,e)}if(JXG.isFunction(i)&&JXG.isArray(f)){h=JXG.createFunction(f[0],this.board,"");g=JXG.createFunction(f[1],this.board,"");this.X=function(k){return(i)(k)*Math.cos(k)+h()};this.Y=function(k){return(i)(k)*Math.sin(k)+g()};this.visProp.curvetype="polar"}if(d!=null){this.minX=JXG.createFunction(d,this.board,"")}if(j!=null){this.maxX=JXG.createFunction(j,this.board,"")}},notifyParents:function(d){JXG.GeonextParser.findDependencies(this,d,this.board)},getLabelAnchor:function(){var j,d,i,f=0.05*this.board.canvasWidth,e=0.05*this.board.canvasHeight,h=0.95*this.board.canvasWidth,g=0.95*this.board.canvasHeight;switch(this.visProp.label.position){case"ulft":d=f;i=e;break;case"llft":d=f;i=g;break;case"rt":d=h;i=0.5*g;break;case"lrt":d=h;i=g;break;case"urt":d=h;i=e;break;case"top":d=0.5*h;i=e;break;case"bot":d=0.5*h;i=g;break;case"lft":default:d=f;i=0.5*g;break}j=new JXG.Coords(JXG.COORDS_BY_SCREEN,[d,i],this.board);return JXG.Math.Geometry.projectCoordsToCurve(j.usrCoords[1],j.usrCoords[2],0,this,this.board)[0]},cloneToBackground:function(){var e={},d;e.id=this.id+"T"+this.numTraces;e.elementClass=JXG.OBJECT_CLASS_CURVE;this.numTraces++;e.points=this.points.slice(0);e.numberPoints=this.numberPoints;e.board=this.board;e.visProp=JXG.deepCopy(this.visProp,this.visProp.traceattributes,true);e.visProp.layer=this.board.options.layer.trace;e.visProp.curvetype=this.visProp.curvetype;JXG.clearVisPropOld(e);d=this.board.renderer.enhancedRendering;this.board.renderer.enhancedRendering=true;this.board.renderer.drawCurve(e);this.board.renderer.enhancedRendering=d;this.traces[e.id]=e.rendNode;return this},bounds:function(){var d=Infinity,h=-Infinity,j=Infinity,g=-Infinity,e=this.points.length,f;for(f=0;fthis.points[f].usrCoords[1]){d=this.points[f].usrCoords[1]}if(hthis.points[f].usrCoords[2]){j=this.points[f].usrCoords[2]}if(gMath.PI)||(this.visProp.type=="major"&&qJXG.Math.eps){if(q>=m){V=m;q-=m}else{V=q;q=0}w=Math.cos(u*V);W=Math.sin(u*V);P=[[1,0,0],[G*(1-w)+E*W,w,-W],[E*(1-w)-G*W,W,w]];I=JXG.Math.matVecMult(P,p);l=[I[0]/I[0],I[1]/I[0],I[2]/I[0]];H=p[1]-G;F=p[2]-E;S=l[1]-G;R=l[2]-E;T=Math.sqrt((H+S)*(H+S)+(F+R)*(F+R));if(Math.abs(R-F)>JXG.Math.eps){O=(H+S)*(K/T-0.5)/(R-F)*8/3}else{O=(F+R)*(K/T-0.5)/(H-S)*8/3}o=[1,p[1]-O*F,p[2]+O*H];n=[1,l[1]+O*R,l[2]-O*S];this.dataX=this.dataX.concat([o[1],n[1],l[1]]);this.dataY=this.dataY.concat([o[2],n[2],l[2]]);p=l.slice(0)}this.bezierDegree=3;this.updateStdform();this.updateQuadraticform()};h.Radius=function(){return this.radiuspoint.Dist(this.center)};h.getRadius=function(){return this.Radius()};h.hasPoint=function(q,p){var k=this.board.options.precision.hasPoint/(this.board.unitX),n=new JXG.Coords(JXG.COORDS_BY_SCREEN,[q,p],this.board),i=this.Radius(),o=this.center.coords.distance(JXG.COORDS_BY_USER,n),t=(Math.abs(o-i)Math.PI)||(this.visProp.type=="major"&&ss){t=false}}return t};h.hasPointSector=function(p,o){var m=new JXG.Coords(JXG.COORDS_BY_SCREEN,[p,o],this.board),i=this.Radius(),n=this.center.coords.distance(JXG.COORDS_BY_USER,m),s=(nMath.PI)||(this.visProp.type=="major"&&qq){s=false}}return s};h.getTextAnchor=function(){return this.center.coords};h.getLabelAnchor=function(){var l,t=10/(this.board.unitX),r=10/(this.board.unitY),p=this.point2.coords.usrCoords,i=this.center.coords.usrCoords,k=p[1]-i[1],s=p[2]-i[2],q,n,m,o;if(this.label.content!=null){this.label.content.relativeCoords=new JXG.Coords(JXG.COORDS_BY_SCREEN,[0,0],this.board)}l=JXG.Math.Geometry.rad(this.radiuspoint,this.center,this.anglepoint);if((this.visProp.type=="minor"&&l>Math.PI)||(this.visProp.type=="major"&&lJXG.Math.eps){if(p>=l){T=l;p-=l}else{T=p;p=0}t=Math.cos(T);U=Math.sin(T);N=[[1,0,0],[E*(1-t)+w*U,t,-U],[w*(1-t)-E*U,U,t]];G=JXG.Math.matVecMult(N,o);j=[G[0]/G[0],G[1]/G[0],G[2]/G[0]];F=o[1]-E;D=o[2]-w;Q=j[1]-E;P=j[2]-w;R=Math.sqrt((F+Q)*(F+Q)+(D+P)*(D+P));if(Math.abs(P-D)>JXG.Math.eps){M=(F+Q)*(I/R-0.5)/(P-D)*8/3}else{M=(D+P)*(I/R-0.5)/(F-Q)*8/3}n=[1,o[1]-M*D,o[2]+M*F];m=[1,j[1]+M*P,j[2]-M*Q];this.dataX=this.dataX.concat([n[1],m[1],j[1]]);this.dataY=this.dataY.concat([n[2],m[2],j[2]]);o=j.slice(0)}this.dataX=this.dataX.concat([j[1]+0.333*(E-j[1]),j[1]+0.666*(E-j[1]),E]);this.dataY=this.dataY.concat([j[2]+0.333*(w-j[2]),j[2]+0.666*(w-j[2]),w]);this.bezierDegree=3};g.Radius=function(){return this.point2.Dist(this.point1)};g.getRadius=function(){return this.Radius()};g.hasPoint=function(p,o){var j=this.board.options.precision.hasPoint/(this.board.unitX),m=new JXG.Coords(JXG.COORDS_BY_SCREEN,[p,o],this.board),i=this.Radius(),n=this.center.coords.distance(JXG.COORDS_BY_USER,m),s=(Math.abs(n-i)q){s=false}}return s};g.hasPointSector=function(i,o){var n=new JXG.Coords(JXG.COORDS_BY_SCREEN,[i,o],this.board),k=this.Radius(),m=this.point1.coords.distance(JXG.COORDS_BY_USER,n),j=(mJXG.Math.Geometry.rad(this.point2,this.point1,this.point3)){j=false}}return j};g.getTextAnchor=function(){return this.point1.coords};g.getLabelAnchor=function(){var k=JXG.Math.Geometry.rad(this.point2,this.point1,this.point3),s=13/(this.board.unitX),q=13/(this.board.unitY),o=this.point2.coords.usrCoords,i=this.point1.coords.usrCoords,j=o[1]-i[1],r=o[2]-i[2],p,m,l,n;if(this.label.content!=null){this.label.content.relativeCoords=new JXG.Coords(JXG.COORDS_BY_SCREEN,[0,0],this.board)}p=new JXG.Coords(JXG.COORDS_BY_USER,[i[1]+Math.cos(k*0.5)*j-Math.sin(k*0.5)*r,i[2]+Math.sin(k*0.5)*j+Math.cos(k*0.5)*r],this.board);m=p.usrCoords[1]-i[1];l=p.usrCoords[2]-i[2];n=Math.sqrt(m*m+l*l);m=m*(n+s)/n;l=l*(n+q)/n;return new JXG.Coords(JXG.COORDS_BY_USER,[i[1]+m,i[2]+l],this.board)};g.prepareUpdate().update();return g};JXG.JSXGraph.registerElement("sector",JXG.createSector);JXG.createCircumcircleSector=function(h,f,e){var g,i,d;if((JXG.isPoint(f[0]))&&(JXG.isPoint(f[1]))&&(JXG.isPoint(f[2]))){d=JXG.copyAttributes(e,h.options,"circumcirclesector","center");i=h.create("circumcenter",[f[0],f[1],f[2]],d);i.dump=false;d=JXG.copyAttributes(e,h.options,"circumcirclesector");g=h.create("sector",[i,f[0],f[2],f[1]],d);g.elType="circumcirclesector";g.parents=[f[0].id,f[1].id,f[2].id];g.center=i;g.subs={center:i}}else{throw new Error("JSXGraph: Can't create circumcircle sector with parent types '"+(typeof f[0])+"' and '"+(typeof f[1])+"' and '"+(typeof f[2])+"'.")}return g};JXG.JSXGraph.registerElement("circumcirclesector",JXG.createCircumcircleSector);JXG.createAngle=function(l,n,j){var g,f,e,o,m,h,k,d;if((JXG.isPoint(n[0]))&&(JXG.isPoint(n[1]))&&(JXG.isPoint(n[2]))){m=JXG.copyAttributes(j,l.options,"angle");o=m.name;if(typeof o=="undefined"||o==""){o=l.generateName({type:JXG.OBJECT_TYPE_ANGLE});m.name=o}h=JXG.copyAttributes(j,l.options,"angle","radiuspoint");f=l.create("point",[0,1,0],h);f.dump=false;h=JXG.copyAttributes(j,l.options,"angle","pointsquare");e=l.create("point",[0,1,1],h);e.dump=false;g=l.create("sector",[n[1],f,n[2]],m);g.elType="angle";g.parents=[n[0].id,n[1].id,n[2].id];g.subs={point:f,pointsquare:e};g.updateDataArraySquare=function(){var s=n[1],q,p,i,t;q=JXG.Math.crossProduct(e.coords.usrCoords,s.coords.usrCoords);p=[-f.X()*q[1]-f.Y()*q[2],f.Z()*q[1],f.Z()*q[2]];q=JXG.Math.crossProduct(f.coords.usrCoords,s.coords.usrCoords);i=[-e.X()*q[1]-e.Y()*q[2],e.Z()*q[1],e.Z()*q[2]];t=JXG.Math.crossProduct(p,i);t[1]/=t[0];t[2]/=t[0];this.dataX=[s.X(),f.X(),t[1],e.X(),s.X()];this.dataY=[s.Y(),f.Y(),t[2],e.Y(),s.Y()];this.bezierDegree=1};g.updateDataArrayNone=function(){this.dataX=[NaN];this.dataY=[NaN];this.bezierDegree=1};g.updateDataArraySector=g.updateDataArray;g.updateDataArray=function(){var i=this.visProp.type,p=JXG.Math.Geometry.trueAngle(n[0],n[1],n[2]);if(Math.abs(p-90)=3&&JXG.isPoint(f[0])&&JXG.isPoint(f[1])&&JXG.isPoint(f[2])){d=f[0];j=f[1];i=f[2];h=g.create("point",[function(){var m,l,n;m=Math.sqrt((j.X()-i.X())*(j.X()-i.X())+(j.Y()-i.Y())*(j.Y()-i.Y()));l=Math.sqrt((d.X()-i.X())*(d.X()-i.X())+(d.Y()-i.Y())*(d.Y()-i.Y()));n=Math.sqrt((j.X()-d.X())*(j.X()-d.X())+(j.Y()-d.Y())*(j.Y()-d.Y()));return new JXG.Coords(JXG.COORDS_BY_USER,[(m*d.X()+l*j.X()+n*i.X())/(m+l+n),(m*d.Y()+l*j.Y()+n*i.Y())/(m+l+n)],g)}],e);h.elType="incenter";h.parents=[f[0].id,f[1].id,f[2].id]}else{throw new Error("JSXGraph: Can't create incenter with parent types '"+(typeof f[0])+"', '"+(typeof f[1])+"' and '"+(typeof f[2])+"'.\nPossible parent types: [point,point,point]")}return h};JXG.createCircumcircle=function(h,g,f){var j,k,d;try{d=JXG.copyAttributes(f,h.options,"circumcircle","center");j=JXG.createCircumcircleMidpoint(h,g,d);j.dump=false;if(!JXG.exists(f.layer)){f.layer=h.options.layer.circle}d=JXG.copyAttributes(f,h.options,"circumcircle");k=JXG.createCircle(h,[j,g[0]],d);k.elType="circumcircle";k.parents=[g[0].id,g[1].id,g[2].id];k.subs={center:j}}catch(i){throw new Error("JSXGraph: Can't create circumcircle with parent types '"+(typeof g[0])+"', '"+(typeof g[1])+"' and '"+(typeof g[2])+"'.\nPossible parent types: [point,point,point]")}return k};JXG.createIncircle=function(i,h,f){var k,l,d,g;try{d=JXG.copyAttributes(f,i.options,"incircle","center");k=JXG.createIncenter(i,h,d);k.dump=false;if(!JXG.exists(f.layer)){f.layer=i.options.layer.circle}d=JXG.copyAttributes(f,i.options,"incircle");l=JXG.createCircle(i,[k,function(){var m=Math.sqrt((h[1].X()-h[2].X())*(h[1].X()-h[2].X())+(h[1].Y()-h[2].Y())*(h[1].Y()-h[2].Y())),e=Math.sqrt((h[0].X()-h[2].X())*(h[0].X()-h[2].X())+(h[0].Y()-h[2].Y())*(h[0].Y()-h[2].Y())),o=Math.sqrt((h[1].X()-h[0].X())*(h[1].X()-h[0].X())+(h[1].Y()-h[0].Y())*(h[1].Y()-h[0].Y())),n=(m+e+o)/2;return Math.sqrt(((n-m)*(n-e)*(n-o))/n)}],d);l.elType="incircle";l.parents=[h[0].id,h[1].id,h[2].id];l.center=k;l.subs={center:k}}catch(j){throw new Error("JSXGraph: Can't create circumcircle with parent types '"+(typeof h[0])+"', '"+(typeof h[1])+"' and '"+(typeof h[2])+"'.\nPossible parent types: [point,point,point]")}return l};JXG.createReflection=function(h,f,e){var d,j,i,g;if(f[0].elementClass==JXG.OBJECT_CLASS_POINT&&f[1].elementClass==JXG.OBJECT_CLASS_LINE){j=f[0];d=f[1]}else{if(f[1].elementClass==JXG.OBJECT_CLASS_POINT&&f[0].elementClass==JXG.OBJECT_CLASS_LINE){j=f[1];d=f[0]}else{throw new Error("JSXGraph: Can't create reflection point with parent types '"+(typeof f[0])+"' and '"+(typeof f[1])+"'.\nPossible parent types: [line,point]")}}g=JXG.createTransform(h,[d],{type:"reflect"});i=JXG.createPoint(h,[j,g],e);j.addChild(i);d.addChild(i);i.elType="reflection";i.parents=[f[0].id,f[1].id];i.prepareUpdate().update();i.generatePolynomial=function(){var l=d.point1.symbolic.x;var k=d.point1.symbolic.y;var r=d.point2.symbolic.x;var q=d.point2.symbolic.y;var t=j.symbolic.x;var s=j.symbolic.y;var n=i.symbolic.x;var m=i.symbolic.y;var p=["((",m,")-(",s,"))*((",k,")-(",q,"))+((",l,")-(",r,"))*((",n,")-(",t,"))"].join("");var o=["((",n,")-(",l,"))^2+((",m,")-(",k,"))^2-((",t,")-(",l,"))^2-((",s,")-(",k,"))^2"].join("");return[p,o]};return i};JXG.createMirrorPoint=function(g,e,d){var h,f;if(JXG.isPoint(e[0])&&JXG.isPoint(e[1])){h=JXG.createPoint(g,[function(){return JXG.Math.Geometry.rotation(e[0],e[1],Math.PI,g)}],d);for(f=0;f<2;f++){e[f].addChild(h)}h.elType="mirrorpoint";h.parents=[e[0].id,e[1].id]}else{throw new Error("JSXGraph: Can't create mirror point with parent types '"+(typeof e[0])+"' and '"+(typeof e[1])+"'.\nPossible parent types: [point,point]")}h.prepareUpdate().update();return h};JXG.createIntegral=function(i,z,m){var w,r,u,g=0,f=0,e,d,l,k,q=1,v,n,h,A,j,o,s;if(JXG.isArray(z[0])&&z[1].elementClass==JXG.OBJECT_CLASS_CURVE){w=z[0];r=z[1]}else{if(JXG.isArray(z[1])&&z[0].elementClass==JXG.OBJECT_CLASS_CURVE){w=z[1];r=z[0]}else{throw new Error("JSXGraph: Can't create integral with parent types '"+(typeof z[0])+"' and '"+(typeof z[1])+"'.\nPossible parent types: [[number|function,number|function],curve]")}}g=w[0];f=w[1];if(JXG.isFunction(g)){e=g;d=function(){return r.Y(e())};g=e()}else{e=g;d=r.Y(g)}if(JXG.isFunction(g)){l=f;k=function(){return r.Y(l())};f=l()}else{l=f;k=r.Y(f)}if(f0){return}var j=JXG.Math.Symbolic.generatePolynomials(f,g,true).join("|");if(j===h.spe){return}h.spe=j;var i=function(m,o,l,n){h.dataX=m;h.dataY=o;h.eq=l;h.ctime=n;h.generatePolynomial=(function(p){return function(r){var q="("+r.symbolic.x+")",u="("+r.symbolic.y+")",t=[],s;for(s=0;sl.usrCoords[2]-n;k-=n){h.dataX.push(m.usrCoords[1],l.usrCoords[1],NaN);h.dataY.push(k,k,NaN)}for(k=m.usrCoords[1];k=h-f&&j<=i+f)&&((d>=g-f&&d<=g+2*f)||(d>=e-2*f&&d<=e+f))},setTextJessieCode:function(e){var d;this.visProp.castext=e;if(typeof e==="function"){d=function(){return e().replace(//g,">")}}else{if(JXG.isNumber(e)){d=e}else{d=e.replace(//g,">")}}return this.setText(d)},setText:function(d){if(typeof d==="function"){this.updateText=function(){this.plaintext=d()}}else{if(JXG.isNumber(d)){this.content=(d).toFixed(this.visProp.digits)}else{if(this.visProp.useasciimathml){this.content="'`"+d+"`'"}else{this.content=this.generateTerm(d)}}this.updateText=new Function("this.plaintext = "+this.content+"; ")}this.updateText();this.prepareUpdate().update().updateRenderer();return this},updateSize:function(){var d;if(typeof document==="undefined"){return this}if(this.visProp.display=="html"&&this.board.renderer.type!="vml"){this.size=[this.rendNode.offsetWidth,this.rendNode.offsetHeight]}else{if(this.visProp.display=="internal"&&this.board.renderer.type=="svg"){try{d=this.rendNode.getBBox();this.size=[d.width,d.height]}catch(f){}}else{if(this.board.renderer.type=="vml"||(this.visProp.display=="internal"&&this.board.renderer.type=="canvas")){this.size=[parseFloat(this.visProp.fontsize)*this.plaintext.length*0.45,parseFloat(this.visProp.fontsize)*0.9]}}}return this},getSize:function(){return this.size},setCoords:function(d,e){if(JXG.isArray(d)&&d.length>1){e=d[1];d=d[0]}this.X=function(){return d};this.Y=function(){return e};this.coords=new JXG.Coords(JXG.COORDS_BY_USER,[d,e],this.board);this.prepareUpdate().update().updateRenderer();return this},free:function(){this.X=JXG.createFunction(this.X(),this.board,"");this.Y=JXG.createFunction(this.Y(),this.board,"");this.isDraggable=true},update:function(){var d,f,e;if(this.needsUpdate){if(this.relativeCoords){if(this.visProp.islabel){f=parseFloat(this.visProp.offset[0]);e=-parseFloat(this.visProp.offset[1]);d=this.element.getLabelAnchor();this.coords.setCoordinates(JXG.COORDS_BY_SCREEN,[f+this.relativeCoords.scrCoords[1]+d.scrCoords[1],e+this.relativeCoords.scrCoords[2]+d.scrCoords[2]])}else{d=this.element.getTextAnchor();this.coords.setCoordinates(JXG.COORDS_BY_USER,[this.relativeCoords.usrCoords[1]+d.usrCoords[1],this.relativeCoords.usrCoords[2]+d.usrCoords[2]])}}else{this.updateCoords()}this.updateText();if(this.needsSizeUpdate){this.updateSize()}this.updateTransform()}return this},updateRenderer:function(){if(this.needsUpdate){this.board.renderer.updateText(this);this.needsUpdate=false}return this},updateTransform:function(){var d;if(this.transformations.length==0){return}for(d=0;d/g,"∠");h=h.replace(//g,"√");var e;e=h.indexOf("");var d=h.indexOf("");if(e>=0){this.needsSizeUpdate=true;while(e>=0){k+=' + "'+JXG.GeonextParser.replaceSub(JXG.GeonextParser.replaceSup(h.slice(0,e)))+'"';f=h.slice(e+7,d);g=JXG.GeonextParser.geonext2JS(f,this.board);g=g.replace(/\\"/g,'"');g=g.replace(/\\'/g,"'");if(g.indexOf("toFixed")<0){if(JXG.isNumber((JXG.bind(new Function("return "+g+";"),this))())){k+="+("+g+").toFixed("+(this.visProp.digits)+")"}else{k+="+("+g+")"}}else{k+="+("+g+")"}h=h.slice(d+8);e=h.indexOf("");d=h.indexOf("")}}k+=' + "'+JXG.GeonextParser.replaceSub(JXG.GeonextParser.replaceSup(h))+'"';k=k.replace(//g,"");k=k.replace(/<\/overline>/g,"");k=k.replace(//g,"");k=k.replace(/<\/arrow>/g,"");k=k.replace(/&/g,"&");return k},notifyParents:function(f){var e=null;do{var d=/([\w\s\*\/\^\-\+\(\)\[\],<>=!]+)<\/value>/;e=d.exec(f);if(e!=null){JXG.GeonextParser.findDependencies(this,e[1],this.board);f=f.substr(e.index);f=f.replace(d,"")}}while(e!=null);return this},bounds:function(){var d=this.coords.usrCoords;return this.visProp.islabel?[0,0,0,0]:[d[1],d[2]+this.size[1],d[1]+this.size[0],d[2]]},setPositionDirectly:function(j,h,g){var e,d,i,f;if(this.relativeCoords){if(this.visProp.islabel){f=new JXG.Coords(j,g,this.board);i=new JXG.Coords(j,h,this.board);e=i.scrCoords[1]-f.scrCoords[1];d=i.scrCoords[2]-f.scrCoords[2];this.relativeCoords.scrCoords[1]+=e;this.relativeCoords.scrCoords[2]+=d}else{f=new JXG.Coords(j,g,this.board);i=new JXG.Coords(j,h,this.board);e=i.usrCoords[1]-f.usrCoords[1];d=i.usrCoords[2]-f.usrCoords[2];this.relativeCoords.usrCoords[1]+=e;this.relativeCoords.usrCoords[2]+=d}}else{i=new JXG.Coords(j,h,this.board);this.X=JXG.createFunction(i.usrCoords[1],this.board,"");this.Y=JXG.createFunction(i.usrCoords[2],this.board,"")}return this}});JXG.createText=function(h,f,e){var d,g,d=JXG.copyAttributes(e,h.options,"text");d.anchor=d.parent||d.anchor;g=new JXG.Text(h,f[f.length-1],f,d);if(typeof f[f.length-1]!=="function"){g.parents=f}if(JXG.evaluate(d.rotate)!=0&&d.display=="internal"){g.addRotation(JXG.evaluate(d.rotate))}return g};JXG.JSXGraph.registerElement("text",JXG.createText);JXG.Image=function(g,e,h,f,d){this.constructor(g,d,JXG.OBJECT_TYPE_IMAGE,JXG.OBJECT_CLASS_OTHER);this.initialCoords=new JXG.Coords(JXG.COORDS_BY_USER,h,this.board);if(!JXG.isFunction(h[0])&&!JXG.isFunction(h[1])){this.isDraggable=true}this.X=JXG.createFunction(h[0],this.board,"");this.Y=JXG.createFunction(h[1],this.board,"");this.W=JXG.createFunction(f[0],this.board,"");this.H=JXG.createFunction(f[1],this.board,"");this.coords=new JXG.Coords(JXG.COORDS_BY_USER,[this.X(),this.Y()],this.board);this.updateCoords=new Function("","this.coords.setCoordinates(JXG.COORDS_BY_USER,[this.X(),this.Y()]);");this.updateSize=new Function("","this.coords.setCoordinates(JXG.COORDS_BY_USER,[this.W(),this.H()]);");this.usrSize=[this.W(),this.H()];this.size=[this.usrSize[0]*g.unitX,this.usrSize[1]*g.unitY];this.url=e;this.parent=JXG.getRef(d.anchor);this.id=this.board.setId(this,"Im");this.board.renderer.drawImage(this);if(!this.visProp.visible){this.board.renderer.hide(this)}};JXG.Image.prototype=new JXG.GeometryElement;JXG.extend(JXG.Image.prototype,{hasPoint:function(d,h){var f=d-this.coords.scrCoords[1],e=this.coords.scrCoords[2]-h,g=this.board.options.precision.hasPoint;if(f>=-g&&f<=2*g&&e>=-g&&e<=g){return true}else{return false}},update:function(){if(this.needsUpdate){this.updateCoords();this.usrSize=[this.W(),this.H()];this.size=[this.usrSize[0]*this.board.unitX,this.usrSize[1]*this.board.unitY];this.updateTransform()}return this},updateRenderer:function(){if(this.needsUpdate){this.board.renderer.updateImage(this);this.needsUpdate=false}return this},updateTransform:function(){if(this.transformations.length==0){return}for(var d=0;d=0){v+=d*0.5/e.unitX}else{v-=d*r/e.unitX}m-=d*0.2/e.unitY;q=e.create("text",[v,m,f.labels[u]],f)}}else{s[0]=e.create("point",[o,0],z);s[1]=e.create("point",[o,v],z);s[2]=e.create("point",[k,v],z);s[3]=e.create("point",[k,0],z);if(JXG.exists(f.labels)&&JXG.exists(f.labels[u])){r=f.labels[u].toString().length;r=0.6*r*d/e.unitX;if(v>=0){v+=d*0.5/e.unitY}else{v-=d*1/e.unitY}q=e.create("text",[m-r*0.5,v,f.labels[u]],f)}}f.withlines=false;if(JXG.exists(f.colors)&&JXG.isArray(f.colors)){j=f.colors;f.fillcolor=j[u%j.length]}g[u]=e.create("polygon",s,f);if(JXG.exists(f.labels)&&JXG.exists(f.labels[u])){g[u].text=q}}return g},drawPoints:function(j,d,k,f){var g,h=[],e=f.infoboxarray;f.fixed=true;f.name="";for(g=0;gad[Y]){ad[Y]=R[aa][Y]}if(R[aa][Y]1){if(g.length==3){h=this.evalParam(1);l=this.evalParam(2)}else{h=g[1].X();l=g[1].Y()}this.matrix[1][0]=h*(1-k)+l*i;this.matrix[2][0]=l*(1-k)-h*i}}}else{if(e=="shear"){this.evalParam=JXG.createEvalFunction(f,g,1);this.update=function(){var h=this.evalParam(0);this.matrix[1][1]=Math.tan(h)}}else{if(e=="generic"){this.evalParam=JXG.createEvalFunction(f,g,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)}}}}}}}},apply:function(d){this.update();if(arguments[1]!=null){return JXG.Math.matVecMult(this.matrix,d.initialCoords.usrCoords)}else{return JXG.Math.matVecMult(this.matrix,d.coords.usrCoords)}},applyOnce:function(f){var g,d,e;if(!JXG.isArray(f)){this.update();g=JXG.Math.matVecMult(this.matrix,f.coords.usrCoords);f.coords.setCoordinates(JXG.COORDS_BY_USER,g)}else{d=f.length;for(e=0;e=8192){this.curve=this.board.create("curve",[[this.pos[0]],[this.pos[1]]],this._attributes);this.objects.push(this.curve)}}this.pos[0]+=f;this.pos[1]+=e;if(this.isPenDown){this.curve.dataX.push(this.pos[0]);this.curve.dataY.push(this.pos[1])}this.board.update();return this},back:function(d){return this.forward(-d)},right:function(e){this.dir-=e;this.dir%=360;if(!this.turtleIsHidden){var d=this.board.create("transform",[-e*Math.PI/180,this.turtle],{type:"rotate"});d.applyOnce(this.turtle2)}this.board.update();return this},left:function(d){return this.right(-d)},penUp:function(){this.isPenDown=false;return this},penDown:function(){this.isPenDown=true;this.curve=this.board.create("curve",[[this.pos[0]],[this.pos[1]]],this._attributes);this.objects.push(this.curve);return this},clean:function(){for(var d=0;d=8192){this.curve=this.board.create("curve",[[this.pos[0]],[this.pos[1]]],this._attributes);this.objects.push(this.curve)}}this.pos[0]=g[0];this.pos[1]=g[1];if(this.isPenDown){this.curve.dataX.push(this.pos[0]);this.curve.dataY.push(this.pos[1])}this.board.update()}return this},fd:function(d){return this.forward(d)},bk:function(d){return this.back(d)},lt:function(d){return this.left(d)},rt:function(d){return this.right(d)},pu:function(){return this.penUp()},pd:function(){return this.penDown()},ht:function(){return this.hideTurtle()},st:function(){return this.showTurtle()},cs:function(){return this.clearScreen()},push:function(){return this.pushTurtle()},pop:function(){return this.popTurtle()},evalAt:function(h,l){var g,f,k,e,d=this.objects.length;for(g=0,f=0;g=3){arguments[0]=[arguments[0],arguments[1],arguments[2]];arguments.length=1}n=arguments[0];if(JXG.isArray(n)){for(j=0;j<3;j++){e|=/\./.test(arguments[0][j].toString())}for(j=0;j<3;j++){e&=(arguments[0][j]>=0)&(arguments[0][j]<=1)}if(e){return[Math.ceil(arguments[0][0]*255),Math.ceil(arguments[0][1]*255),Math.ceil(arguments[0][2]*255)]}else{arguments[0].length=3;return arguments[0]}}else{if(typeof arguments[0]==="string"){n=arguments[0]}}if(n.charAt(0)=="#"){n=n.substr(1,6)}n=n.replace(/ /g,"").toLowerCase();var h={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"};n=h[n]||n;var m=[{re:/^\s*rgba\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*([\d\.]{1,3})\s*\)\s*$/,example:["rgba(123, 234, 45, 0.5)","rgba(255,234,245,1.0)"],process:function(g){return[parseInt(g[1]),parseInt(g[2]),parseInt(g[3])]}},{re:/^\s*rgb\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)\s*$/,example:["rgb(123, 234, 45)","rgb(255,234,245)"],process:function(g){return[parseInt(g[1]),parseInt(g[2]),parseInt(g[3])]}},{re:/^(\w{2})(\w{2})(\w{2})$/,example:["#00ff00","336699"],process:function(g){return[parseInt(g[1],16),parseInt(g[2],16),parseInt(g[3],16)]}},{re:/^(\w{1})(\w{1})(\w{1})$/,example:["#fb0","f0f"],process:function(g){return[parseInt(g[1]+g[1],16),parseInt(g[2]+g[2],16),parseInt(g[3]+g[3],16)]}}];for(j=0;j255)?255:d);l=(l<0||isNaN(l))?0:((l>255)?255:l);o=(o<0||isNaN(o))?0:((o>255)?255:o);return[d,l,o]};JXG.rgb2css=function(){var f,e,d;f=JXG.rgbParser.apply(JXG.rgbParser,arguments);e=f[1];d=f[2];f=f[0];return"rgb("+f+", "+e+", "+d+")"};JXG.rgb2hex=function(){var f,e,d;f=JXG.rgbParser.apply(JXG.rgbParser,arguments);e=f[1];d=f[2];f=f[0];f=f.toString(16);e=e.toString(16);d=d.toString(16);if(f.length==1){f="0"+f}if(e.length==1){e="0"+e}if(d.length==1){d="0"+d}return"#"+f+e+d};JXG.hex2rgb=function(h){var f,e,d;if(h.charAt(0)=="#"){h=h.slice(1)}f=parseInt(h.substr(0,2),16);e=parseInt(h.substr(2,2),16);d=parseInt(h.substr(4,2),16);return"rgb("+f+", "+e+", "+d+")"};JXG.hsv2rgb=function(o,k,j){var l,r,g,n,m,h,e,d,s;o=((o%360)+360)%360;if(k==0){if(isNaN(o)||o=360){h=0}else{h=o}h=h/60;m=Math.floor(h);n=h-m;e=j*(1-k);d=j*(1-(k*n));s=j*(1-(k*(1-n)));switch(m){case 0:l=j;r=s;g=e;break;case 1:l=d;r=j;g=e;break;case 2:l=e;r=j;g=s;break;case 3:l=e;r=d;g=j;break;case 4:l=s;r=e;g=j;break;case 5:l=j;r=e;g=d;break}}l=Math.round(l*255).toString(16);l=(l.length==2)?l:((l.length==1)?"0"+l:"00");r=Math.round(r*255).toString(16);r=(r.length==2)?r:((r.length==1)?"0"+r:"00");g=Math.round(g*255).toString(16);g=(g.length==2)?g:((g.length==1)?"0"+g:"00");return["#",l,r,g].join("")};JXG.rgb2hsv=function(){var d,m,p,n,e,i,f,q,l,u,t,o,j,k;d=JXG.rgbParser.apply(JXG.rgbParser,arguments);m=d[1];p=d[2];d=d[0];k=JXG.Math.Statistics;n=d/255;e=m/255;i=p/255;o=k.max([d,m,p]);j=k.min([d,m,p]);f=o/255;q=j/255;t=f;u=0;if(t>0){u=(t-q)/(t*1)}l=1/(f-q);if(u>0){if(o==d){l=(e-i)*l}else{if(o==m){l=2+(i-n)*l}else{l=4+(n-e)*l}}}l*=60;if(l<0){l+=360}if(o==j){l=0}return[l,u,t]};JXG.rgb2LMS=function(){var n,k,e,f,d,j,i,h=[[0.05059983,0.08585369,0.0095242],[0.01893033,0.08925308,0.01370054],[0.00292202,0.00975732,0.07145979]];n=JXG.rgbParser.apply(JXG.rgbParser,arguments);k=n[1];e=n[2];n=n[0];n=Math.pow(n,0.476190476);k=Math.pow(k,0.476190476);e=Math.pow(e,0.476190476);f=n*h[0][0]+k*h[0][1]+e*h[0][2];d=n*h[1][0]+k*h[1][1]+e*h[1][2];j=n*h[2][0]+k*h[2][1]+e*h[2][2];i=[f,d,j];i.l=f;i.m=d;i.s=j;return i};JXG.LMS2rgb=function(f,e,o){var d,h,j,i,k=[[30.830854,-29.832659,1.610474],[-6.481468,17.715578,-2.532642],[-0.37569,-1.199062,14.273846]];d=f*k[0][0]+e*k[0][1]+o*k[0][2];h=f*k[1][0]+e*k[1][1]+o*k[1][2];j=f*k[2][0]+e*k[2][1]+o*k[2][2];var n=function(l){var m=127,g=64;while(g>0){if(Math.pow(m,0.476190476)>l){m-=g}else{if(Math.pow(m+1,0.476190476)>l){return m}m+=g}g/=2}if(m==254&&13.994955247>4)&15)+h.charAt(e&15);f="#"+g+""+g+""+g;return f};JXG.rgb2cb=function(i,p){if(i=="none"){return i}var r,h,g,v,q,n,f,u,k,e,t,j,o;q=JXG.rgb2LMS(i);h=q.l;g=q.m;v=q.s;p=p.toLowerCase();switch(p){case"protanopia":f=-0.06150039994295001;u=0.08277001656812001;k=-0.013200141220000003;e=0.05858939668799999;t=-0.07934519995360001;j=0.013289415272000003;o=0.6903216543277437;n=v/g;if(n>4)&15)+d.charAt(r.r&15);i="#"+n;n=d.charAt((r.g>>4)&15)+d.charAt(r.g&15);i+=n;n=d.charAt((r.b>>4)&15)+d.charAt(r.b&15);i+=n;return i};JXG.extend(JXG.Board.prototype,{angle:function(d,f,e){return JXG.Math.Geometry.angle(d,f,e)},rad:function(d,f,e){return JXG.Math.Geometry.rad(d,f,e)},distance:function(e,d){return JXG.Math.Geometry.distance(e,d)},pow:function(e,d){return JXG.Math.pow(e,d)},round:function(d,e){return(d).toFixed(e)},cosh:function(d){return JXG.Math.cosh(d)},sinh:function(d){return JXG.Math.sinh(d)},sgn:function(d){return(d==0?0:d/(Math.abs(d)))},D:function(d,e){return JXG.Math.Numerics.D(d,e)},I:function(d,e){return JXG.Math.Numerics.I(d,e)},root:function(e,d,g){return JXG.Math.Numerics.root(e,d,g)},lagrangePolynomial:function(d){return JXG.Math.Numerics.lagrangePolynomial(d)},neville:function(d){return JXG.Math.Numerics.Neville(d)},riemannsum:function(g,i,e,h,d){return JXG.Math.Numerics.riemannsum(g,i,e,h,d)},abs:Math.abs,acos:Math.acos,asin:Math.asin,atan:Math.atan,ceil:Math.ceil,cos:Math.cos,exp:Math.exp,floor:Math.floor,log:Math.log,max:Math.max,min:Math.min,random:Math.random,sin:Math.sin,sqrt:Math.sqrt,tan:Math.tan,trunc:Math.ceil,factorial:function(d){return JXG.Math.factorial(d)},binomial:function(e,d){return JXG.Math.binomial(e,d)},getElement:function(d){return JXG.getReference(this,d)},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]]],intersection:function(g,e,f,d){g=JXG.getReference(this,g);e=JXG.getReference(this,e);if(g.elementClass==JXG.OBJECT_CLASS_CURVE&&e.elementClass==JXG.OBJECT_CLASS_CURVE){return function(){return JXG.Math.Geometry.meetCurveCurve(g,e,f,d,g.board)}}else{if((g.type==JXG.OBJECT_TYPE_ARC&&e.elementClass==JXG.OBJECT_CLASS_LINE)||(e.type==JXG.OBJECT_TYPE_ARC&&g.elementClass==JXG.OBJECT_CLASS_LINE)){return function(){return JXG.Math.Geometry.meet(g.stdform,e.stdform,f,g.board)}}else{if((g.elementClass==JXG.OBJECT_CLASS_CURVE&&e.elementClass==JXG.OBJECT_CLASS_LINE)||(e.elementClass==JXG.OBJECT_CLASS_CURVE&&g.elementClass==JXG.OBJECT_CLASS_LINE)){return function(){return JXG.Math.Geometry.meetCurveLine(g,e,f,g.board)}}else{return function(){return JXG.Math.Geometry.meet(g.stdform,e.stdform,f,g.board)}}}}},intersectionFunc:function(g,e,f,d){return this.intersection(g,e,f,d)},otherIntersection:function(e,d,f){e=JXG.getReference(this,e);d=JXG.getReference(this,d);return function(){var g=JXG.Math.Geometry.meet(e.stdform,d.stdform,0,e.board);if(Math.abs(f.X()-g.usrCoords[1])>JXG.Math.eps||Math.abs(f.Y()-g.usrCoords[2])>JXG.Math.eps||Math.abs(f.Z()-g.usrCoords[0])>JXG.Math.eps){return g}else{return JXG.Math.Geometry.meet(e.stdform,d.stdform,1,e.board)}}},pointFunc:function(){return[null]},pointOptions:["point",[[JXG.OBJECT_CLASS_POINT]]],lineFunc:function(){return arguments},lineOptions:["line",[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_POINT]]],linesegmentFunc:function(){return arguments},linesegmentOptions:["line",[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_POINT]]],linesegmentAtts:{straightFirst:false,straightLast:false},arrowFunc:function(){return arguments},arrowOptions:["arrow",[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_POINT]]],circleFunc:function(){return arguments},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]]],arrowparallelOptions:["arrowparallel",[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_LINE]]],arrowparallelFunc:function(){return arguments},bisectorOptions:["bisector",[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_POINT]]],bisectorFunc:function(){return arguments},circumcircleOptions:["circumcircle",[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_POINT]]],circumcircleFunc:function(){return arguments},circumcirclemidpointOptions:["circumcirclemidpoint",[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_POINT]]],circumcirclemidpointFunc:function(){return arguments},integralOptions:["integral",[[]]],integralFunc:function(){return arguments},midpointOptions:["midpoint",[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_POINT],[JXG.OBJECT_CLASS_LINE]]],midpointFunc:function(){return arguments},mirrorpointOptions:["mirrorpoint",[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_POINT]]],mirrorpointFunc:function(){return arguments},normalOptions:["normal",[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_LINE]]],normalFunc:function(){return arguments},parallelOptions:["parallel",[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_LINE]]],parallelFunc:function(){return arguments},parallelpointOptions:["parallelpoint",[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_POINT]]],parallelpointFunc:function(){return arguments},perpendicularOptions:["perpendicular",[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_LINE]]],perpendicularFunc:function(){return arguments},perpendicularpointOptions:["perpendicularpoint",[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_LINE]]],perpendicularpointFunc:function(){return arguments},reflectionOptions:["reflection",[[JXG.OBJECT_CLASS_POINT,JXG.OBJECT_CLASS_LINE]]],reflectionFunc:function(){return arguments}});JXG.Point.prototype.setPositionX=function(f,d){var e=(f==JXG.COORDS_BY_USER)?this.coords.usrCoords[2]:this.coords.scrCoords[2];this.setPosition(f,[d,e])};JXG.Point.prototype.setPositionY=function(f,e){var d=(f==JXG.COORDS_BY_USER)?this.coords.usrCoords[1]:this.coords.scrCoords[1];this.setPosition(f,[d,e])};JXG.Ticks=function(d,f,e){this.constructor(d.board,e,JXG.OBJECT_TYPE_TICKS,JXG.OBJECT_CLASS_OTHER);this.line=d;this.board=this.line.board;this.ticksFunction=null;this.fixedTicks=null;this.equidistant=false;if(JXG.isFunction(f)){this.ticksFunction=f;throw new Error("Function arguments are no longer supported.")}else{if(JXG.isArray(f)){this.fixedTicks=f}else{if(Math.abs(f)=C&&this.fixedTicks[K]JXG.Math.eps){N=this._adjustTickDistance(B,s,J,P.coords,p,o);B*=N;n*=N}if(!this.visProp.insertticks){B/=this.visProp.minorticks+1;n/=this.visProp.minorticks+1}this.ticksDelta=B;this.symbTicksDelta=n;T=this.board.getBoundingBox();H=(T[0]+T[2])*0.5;F=(T[1]+T[3])*0.5;M=[H*this.line.stdform[2]-F*this.line.stdform[1],-this.line.stdform[2],this.line.stdform[1]];e=JXG.Math.crossProduct(this.line.stdform,M);e[1]/=e[0];e[2]/=e[0];e[0]=1;w=new JXG.Coords(JXG.COORDS_BY_USER,e.slice(1),this.board);Q=P.coords.distance(JXG.COORDS_BY_USER,w);if((O.X()-P.X())*(e[1]-P.X())<0||(O.Y()-P.Y())*(e[2]-P.Y())<0){Q*=-1}D=Math.round(Q/B)*B;if(Math.abs(D)>JXG.Math.eps){R=Math.abs(D)/D}e[1]=P.coords.usrCoords[1]+p*D;e[2]=P.coords.usrCoords[2]+o*D;q=D;D=0;k=0;r=q/this.visProp.scale;H=e[1];F=e[2];K=0;I=0;do{w=new JXG.Coords(JXG.COORDS_BY_USER,[H,F],this.board);w.major=Math.round((R*D+q)/B)%(this.visProp.minorticks+1)===0;g=this._tickEndings(w,h,A,v,S,w.major);if(g.length==2){z=R*k+r;if((Math.abs(z)<=u&&this.visProp.drawzero)||(z>C&&z0);this.needsUpdate=true;this.updateRenderer()},_adjustTickDistance:function(e,l,k,m,g,d){var i,h,j=1;while(l>4*this.minTicksDistance){j/=10;i=m.usrCoords[1]+g*e*j;h=m.usrCoords[2]+d*e*j;l=m.distance(JXG.COORDS_BY_SCREEN,new JXG.Coords(JXG.COORDS_BY_USER,[i,h],this.board))}while(l=0&&o[1]<=f){j[g]=o[1];h[g]=0;g++}o=JXG.Math.crossProduct([0,1,0],[-d*z[1]-r*z[2],d,r]);o[2]/=o[0];if(o[2]>=0&&o[2]<=m){j[g]=0;h[g]=o[2];g++}if(g<2){o=JXG.Math.crossProduct([m*m,0,-m],[-d*z[1]-r*z[2],d,r]);o[1]/=o[0];if(o[1]>=0&&o[1]<=f){j[g]=o[1];h[g]=m;g++}}if(g<2){o=JXG.Math.crossProduct([f*f,-f,0],[-d*z[1]-r*z[2],d,r]);o[2]/=o[0];if(o[2]>=0&&o[2]<=m){j[g]=f;h[g]=o[2]}}}}if((j[0]>=0&&j[0]<=f&&h[0]>=0&&h[0]<=m)||(j[1]>=0&&j[1]<=f&&h[1]>=0&&h[1]<=m)){n=true}else{n=false}if(w=="finite"){j[0]=z[1]+l;h[0]=z[2]-k;j[1]=z[1]-l;h[1]=z[2]+k}if(n){return[j,h]}else{return[]}},_makeLabel:function(m,d,l,f,e,h){var g,n,k,j=typeof m==="number";if(!f){return null}g=m.toString();if(Math.abs(m)5||g.indexOf("e")!=-1)){g=m.toPrecision(3).toString()}if(j&&g.indexOf(".")>-1){g=g.replace(/0+$/,"");g=g.replace(/\.$/,"")}if(this.visProp.scalesymbol.length>0&&g==="1"){g=this.visProp.scalesymbol}else{if(this.visProp.scalesymbol.length>0&&g==="0"){g="0"}else{g=g+this.visProp.scalesymbol}}k={id:e+h+"Label",isLabel:true,layer:l.options.layer.line,highlightStrokeColor:l.options.text.strokeColor,highlightStrokeWidth:l.options.text.strokeWidth,highlightStrokeOpacity:l.options.text.strokeOpacity,visible:this.visProp.visible,priv:this.visProp.priv};k=JXG.deepCopy(k,this.visProp.label);n=JXG.createText(l,[d.usrCoords[1],d.usrCoords[2],g],k);n.isDraggable=false;n.dump=false;n.distanceX=this.visProp.label.offset[0];n.distanceY=this.visProp.label.offset[1];n.setCoords(d.usrCoords[1]+n.distanceX/(l.unitX),d.usrCoords[2]+n.distanceY/(l.unitY));n.visProp.visible=f;return n},removeTickLabels:function(){var d;if(this.labels!=null){if((this.board.needsFullUpdate||this.needsRegularUpdate)&&!(this.board.options.renderer=="canvas"&&this.board.options.text.display=="internal")){for(d=0;d>=1;if(ae==0){ae=g();ag=(ae&1);ae=(ae>>1)|128}return ag}function W(ag){var ai=0,ah=ag;while(ah--){ai=(ai<<1)|Y()}if(ag){ai=Z[ai]>>(8-ag)}return ai}function f(){aa=0}function A(ag){K++;k[aa++]=ag;p.push(String.fromCharCode(ag));if(aa==32768){aa=0}}function o(){this.b0=0;this.b1=0;this.jump=null;this.jumppos=-1}var h=288;var w=new Array(h);var Q=new Array(32);var L=0;var ab=null;var s=null;var P=new Array(64);var M=new Array(64);var B=0;var F=new Array(17);F[0]=0;var R;var v;function l(){while(1){if(F[B]>=v){return -1}if(R[F[B]]==B){return F[B]++}F[B]++}}function H(){var ah=ab[L];var ag;if(G){document.write("
len:"+B+" treepos:"+L)}if(B==17){return -1}L++;B++;ag=l();if(G){document.write("
IsPat "+ag)}if(ag>=0){ah.b0=ag;if(G){document.write("
b0 "+ah.b0)}}else{ah.b0=32768;if(G){document.write("
b0 "+ah.b0)}if(H()){return -1}}ag=l();if(ag>=0){ah.b1=ag;if(G){document.write("
b1 "+ah.b1)}ah.jump=null}else{ah.b1=32768;if(G){document.write("
b1 "+ah.b1)}ah.jump=ab[L];ah.jumppos=L;if(H()){return -1}}B--;return 0}function n(ak,ai,al,ah){var aj;if(G){document.write("currentTree "+ak+" numval "+ai+" lengths "+al+" show "+ah)}ab=ak;L=0;R=al;v=ai;for(aj=0;aj<17;aj++){F[aj]=0}B=0;if(H()){if(G){alert("invalid huffman tree\n")}return -1}if(G){document.write("
Tree: "+ab.length);for(var ag=0;ag<32;ag++){document.write("Places["+ag+"].b0="+ab[ag].b0+"
");document.write("Places["+ag+"].b1="+ab[ag].b1+"
")}}return 0}function E(aj){var ah,ai,al=0,ak=aj[al],ag;while(1){ag=Y();if(G){document.write("b="+ag)}if(ag){if(!(ak.b1&32768)){if(G){document.write("ret1")}return ak.b1}ak=ak.jump;ah=aj.length;for(ai=0;ai>1);if(au>23){au=(au<<1)|Y();if(au>199){au-=128;au=(au<<1)|Y()}else{au-=48;if(au>143){au=au+136}}}else{au+=256}if(au<256){A(au)}else{if(au==256){break}else{var aw,ap;au-=256+1;aw=W(U[au])+ad[au];au=Z[W(5)]>>3;if(C[au]>8){ap=W(8);ap|=(W(C[au]-8)<<8)}else{ap=W(C[au])}ap+=O[au];for(au=0;audistanceTree");for(var ay=0;ay"+Q[ay].b0+" "+Q[ay].b1+" "+Q[ay].jump+" "+Q[ay].jumppos)}}aq=ai+an;av=0;var aj=-1;if(G){document.write("
n="+aq+" bits: "+d+"
")}while(av"+aj+" i:"+av+" decode: "+au+" bits "+d+"
")}if(au<16){am[av++]=au}else{if(au==16){var ar;au=3+W(2);if(av+au>aq){f();return 1}ar=av?am[av-1]:0;while(au--){am[av++]=ar}}else{if(au==17){au=3+W(3)}else{au=11+W(7)}if(av+au>aq){f();return 1}while(au--){am[av++]=0}}}}aw=w.length;for(av=0;avliteralTree")}while(1){au=E(w);if(au>=256){var aw,ap;au-=256;if(au==0){break}au--;aw=W(U[au])+ad[au];au=E(Q);if(C[au]>8){ap=W(8);ap|=(W(C[au]-8)<<8)}else{ap=W(C[au])}ap+=O[au];while(aw--){var ax=k[(aa-ap)&32767];A(ax)}}else{A(au)}}}}}}while(!ak);f();r();return 0}JXG.Util.Unzip.prototype.unzipFile=function(ag){var ah;this.unzip();for(ah=0;ah>2;k=((n&3)<<4)|(l>>4);h=((l&15)<<2)|(j>>6);g=j&63;if(isNaN(l)){h=g=64}else{if(isNaN(j)){g=64}}d.push([this._keyStr.charAt(m),this._keyStr.charAt(k),this._keyStr.charAt(h),this._keyStr.charAt(g)].join(""))}return d.join("")},decode:function(g,f){var d=[],o,m,k,n,l,j,h,e=0;g=g.replace(/[^A-Za-z0-9\+\/\=]/g,"");while(e>4);m=((l&15)<<4)|(j>>2);k=((j&3)<<6)|h;d.push(String.fromCharCode(o));if(j!=64){d.push(String.fromCharCode(m))}if(h!=64){d.push(String.fromCharCode(k))}}d=d.join("");if(f){d=JXG.Util.Base64._utf8_decode(d)}return d},_utf8_encode:function(e){e=e.replace(/\r\n/g,"\n");var d="";for(var g=0;g127)&&(f<2048)){d+=String.fromCharCode((f>>6)|192);d+=String.fromCharCode((f&63)|128)}else{d+=String.fromCharCode((f>>12)|224);d+=String.fromCharCode(((f>>6)&63)|128);d+=String.fromCharCode((f&63)|128)}}}return d},_utf8_decode:function(d){var f=[],h=0,j=0,g=0,e=0;while(h191)&&(j<224)){g=d.charCodeAt(h+1);f.push(String.fromCharCode(((j&31)<<6)|(g&63)));h+=2}else{g=d.charCodeAt(h+1);e=d.charCodeAt(h+2);f.push(String.fromCharCode(((j&15)<<12)|((g&63)<<6)|(e&63)));h+=3}}}return f.join("")},_destrip:function(j,g){var e=[],h,f,d=[];if(g==null){g=76}j.replace(/ /g,"");h=j.length/g;for(f=0;f255){switch(f){case 8364:f=128;break;case 8218:f=130;break;case 402:f=131;break;case 8222:f=132;break;case 8230:f=133;break;case 8224:f=134;break;case 8225:f=135;break;case 710:f=136;break;case 8240:f=137;break;case 352:f=138;break;case 8249:f=139;break;case 338:f=140;break;case 381:f=142;break;case 8216:f=145;break;case 8217:f=146;break;case 8220:f=147;break;case 8221:f=148;break;case 8226:f=149;break;case 8211:f=150;break;case 8212:f=151;break;case 732:f=152;break;case 8482:f=153;break;case 353:f=154;break;case 8250:f=155;break;case 339:f=156;break;case 382:f=158;break;case 376:f=159;break;default:break}}return f};JXG.Util.utf8Decode=function(d){var f=[];var h=0;var k=0,j=0,g=0,e;if(!JXG.exists(d)){return""}while(h191)&&(k<224)){g=d.charCodeAt(h+1);f.push(String.fromCharCode(((k&31)<<6)|(g&63)));h+=2}else{g=d.charCodeAt(h+1);e=d.charCodeAt(h+2);f.push(String.fromCharCode(((k&15)<<12)|((g&63)<<6)|(e&63)));h+=3}}}return f.join("")};JXG.Util.genUUID=function(){var h="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),f=new Array(36),e=0,g;for(var d=0;d<36;d++){if(d==8||d==13||d==18||d==23){f[d]="-"}else{if(d==14){f[d]="4"}else{if(e<=2){e=33554432+(Math.random()*16777216)|0}g=e&15;e=e>>4;f[d]=h[(d==19)?(g&3)|8:g]}}}return f.join("")};JXG.PsTricks={convert:function(g){var h=new JXG.Coords(JXG.COORDS_BY_SCREEN,[0,0],g),j=new JXG.Coords(JXG.COORDS_BY_SCREEN,[g.canvasWidth,g.canvasHeight],g),e,f,d=[];d.push("\\begin{pspicture*}("+h.usrCoords[1]+","+j.usrCoords[2]+")("+j.usrCoords[1]+","+h.usrCoords[2]+")\n");for(e in g.objects){f=g.objects[e];if(f.visProp.visible){switch(f.elementClass){case JXG.OBJECT_CLASS_CIRCLE:d.push(this.addCircle(f));break;case JXG.OBJECT_CLASS_LINE:d.push(this.addLine(f));break;case JXG.OBJECT_CLASS_POINT:d.push(this.addPoint(f));break;default:switch(f.type){case JXG.OBJECT_TYPE_ARC:d.push(this.addArc(f));break;case JXG.OBJECT_TYPE_SECTOR:d.push(this.addArc(f));d.push(this.addSector(f));break;case JXG.OBJECT_TYPE_POLYGON:d.push(this.addPolygon(f));break;case JXG.OBJECT_TYPE_ANGLE:d.push(this.addAngle(f));break}break}}}d.push("\\end{pspicture*}");return d.join("\n")},setArrows:function(e){var d="";if(e.visProp.firstarrow&&e.visProp.lastarrow){d="{<->}"}else{if(e.visProp.firstarrow){d="{<-}"}else{if(e.visProp.lastarrow){d="{->}"}}}return d},drawWedge:function(f,g,h,e,j,i){var d="";if(f!="none"&&g>0){d+="\\pswedge[linestyle=none, fillstyle=solid, fillcolor="+this.parseColor(f)+", opacity="+g.toFixed(5)+"]";d+="("+h.join(",")+"){"+e+"}{"+j+"}{"+i+"}\n"}return d},addPoint:function(f){var d="\\psdot[linecolor="+this.parseColor(f.visProp.strokecolor)+",dotstyle=",g=f.normalizeFace(f.visProp.face)||"o",e=f.visProp.size>4?4:f.visProp.size,h=[0,0,"2pt 2","5pt 2","5pt 3"];if(g=="x"){d+="x, dotsize="+h[e]}else{if(g=="o"){d+="*, dotsize=";if(e==1){d+="2pt 2"}else{if(e==2){d+="4pt 2"}else{if(e==3){d+="6pt 2"}else{if(e==4){d+="6pt 3"}}}}}else{if(g=="[]"){d+="square*, dotsize="+h[e]}else{if(g=="+"){d+="+, dotsize="+h[e]}}}}d+="]("+f.coords.usrCoords.slice(1).join(",")+")\n";d+="\\rput("+(f.coords.usrCoords[1]+15/f.board.unitY)+","+(f.coords.usrCoords[2]+15/f.board.unitY)+"){\\small $"+f.name+"$}\n";return d},addLine:function(g){var f=new JXG.Coords(JXG.COORDS_BY_USER,g.point1.coords.usrCoords,g.board),e=new JXG.Coords(JXG.COORDS_BY_USER,g.point2.coords.usrCoords,g.board),d="\\psline[linecolor="+this.parseColor(g.visProp.strokecolor)+", linewidth="+g.visProp.strokewidth+"px]";if(g.visProp.straightfirst||g.visProp.straightlast){JXG.Math.Geometry.calcStraight(g,f,e)}d+=this.setArrows(g);d+="("+f.usrCoords.slice(1).join(",")+")("+e.usrCoords.slice(2).join(",")+")\n";return d},addCircle:function(f){var e=f.Radius(),d="\\pscircle[linecolor="+this.parseColor(f.visProp.strokecolor)+", linewidth="+f.visProp.strokewidth+"px";if(f.visProp.fillcolor!="none"&&f.visProp.fillopacity!=0){d+=", fillstyle=solid, fillcolor="+this.parseColor(f.visProp.fillcolor)+", opacity="+f.visProp.fillopacity.toFixed(5)}d+="]("+f.center.coords.usrCoords.slice(1).join("1")+"){"+e+"}\n";return d},addPolygon:function(f){var d="\\pspolygon[linestyle=none, fillstyle=solid, fillcolor="+this.parseColor(f.visProp.fillcolor)+", opacity="+f.visProp.fillopacity.toFixed(5)+"]",e;for(e=0;e0){w=w[0][0]}if(typeof w!="string"){return}q=window.JSON&&window.JSON.parse?window.JSON.parse(w):(new Function("return "+w))();if(q.type=="error"){this.handleError(q)}else{if(q.type=="response"){k=q.id;for(s=0;se){d[f]=parseFloat(this.data[f][e])}}return d},getRow:function(f){var d,e;if(typeof f=="string"){for(e=0;e-1;d--){if(JXG.exists(this.sstack[d][e])){return d}}return -1},isCreator:function(d){return !!JXG.JSXGraph.elements[d]},isMathMethod:function(d){return d!=="E"&&!!Math[d]},isBuiltIn:function(d){return !!this.builtIn[d]},getvar:function(g,d){var f,e;d=JXG.def(d,false);f=this.isLocalVariable(g);if(f>-1){return this.sstack[f][g]}if(this.isCreator(g)){return this.creator(g)}if(this.isMathMethod(g)){return Math[g]}if(this.isBuiltIn(g)){return this.builtIn[g]}if(!d){f=JXG.getRef(this.board,g);if(f!==g){return f}}return e},getvarJS:function(g,d,f){var e;d=JXG.def(d,false);f=JXG.def(f,false);if(JXG.indexOf(this.pstack[this.pscope],g)>-1){return g}e=this.isLocalVariable(g);if(e>-1){return"$jc$.sstack["+e+"]['"+g+"']"}if(this.isCreator(g)){return"(function () { var a = Array.prototype.slice.call(arguments, 0), props = "+(f?"a.pop()":"{}")+"; return $jc$.board.create.apply($jc$.board, ['"+g+"'].concat([a, props])); })"}if(this.isMathMethod(g)){return"Math."+g}if(this.isBuiltIn(g)){return this.builtIn[g].src||this.builtIn[g]}if(!d){if(JXG.isId(this.board,g)){return"$jc$.board.objects['"+g+"']"}else{if(JXG.isName(this.board,g)){return"$jc$.board.elementsByName['"+g+"']"}else{if(JXG.isGroup(this.board,g)){return"$jc$.board.groups['"+g+"']"}}}}return""},setProp:function(h,g,f){var e={},d,i;if(h.elementClass===JXG.OBJECT_CLASS_POINT&&(g==="X"||g==="Y")){g=g.toLowerCase();if(h.isDraggable&&typeof f==="number"){d=g==="x"?f:h.X();i=g==="y"?f:h.Y();h.setPosition(JXG.COORDS_BY_USER,[d,i])}else{if(h.isDraggable&&(typeof f==="function"||typeof f==="string")){d=g==="x"?f:h.coords.usrCoords[1];i=g==="y"?f:h.coords.usrCoords[2];h.addConstraint([d,i])}else{if(!h.isDraggable){d=g==="x"?f:h.XEval.origin;i=g==="y"?f:h.YEval.origin;h.addConstraint([d,i])}}}this.board.update()}else{if(h.type===JXG.OBJECT_TYPE_TEXT&&(g==="X"||g==="Y")){if(typeof f==="number"){h[g]=function(){return f}}else{if(typeof f==="function"){h.isDraggable=false;h[g]=f}else{if(typeof f==="string"){h.isDraggable=false;h[g]=JXG.createFunction(f,this.board,null,true);h[g+"jc"]=f}}}h[g].origin=f;this.board.update()}else{if(h.type&&h.elementClass&&h.visProp){e[g]=f;h.setProperty(e)}else{h[g]=f}}}},utf8_encode:function(e){var d=[],g,f;for(g=0;g0){for(h=0;h"+d.substr(p[h].offset,30)+'<, expecting "'+e[h].join()+'"')}}},snippet:function(i,f,e,h){var j,k,g,d;j="jxg__tmp__intern_"+JXG.Util.genUUID().replace(/\-/g,"");if(!JXG.exists(f)){f=true}if(!JXG.exists(e)){e=""}if(!JXG.exists(h)){h=false}g=this.sstack[0][j];this.countLines=false;k=j+" = "+(f?" function ("+e+") { return ":"")+i+(f?"; }":"")+";";this.parse(k,h);d=this.sstack[0][j];if(JXG.exists(g)){this.sstack[0][j]=g}else{delete this.sstack[0][j]}this.countLines=true;return d},replaceIDs:function(f){var e,d;if(f.replaced){d=this.board.objects[f.children[1].children[0].value];if(JXG.exists(d)&&JXG.exists(d)&&d.name!==""){f.type="node_var";f.value=d.name;f.children.length=0;delete f.replaced}}if(f.children){for(e=f.children.length;e>0;e--){if(JXG.exists(f.children[e-1])){f.children[e-1]=this.replaceIDs(f.children[e-1])}}}return f},replaceNames:function(f){var e,d;d=f.value;if(f.type=="node_op"&&d=="op_lhs"&&f.children.length===1){this.isLHS=true}else{if(f.type=="node_var"){if(this.isLHS){this.letvar(d,true)}else{if(!JXG.exists(this.getvar(d,true))&&JXG.exists(this.board.elementsByName[d])){f=this.createReplacementNode(f)}}}}if(f.children){for(e=f.children.length;e>0;e--){if(JXG.exists(f.children[e-1])){f.children[e-1]=this.replaceNames(f.children[e-1])}}}if(f.type=="node_op"&&f.value=="op_lhs"&&f.children.length===1){this.isLHS=false}return f},createReplacementNode:function(f){var d=f.value,e=this.board.elementsByName[d];f=this.createNode("node_op","op_execfun",this.createNode("node_var","$"),this.createNode("node_op","op_param",this.createNode("node_str",e.id)));f.replaced=true;return f},collectDependencies:function(h,d){var g,f,j;f=h.value;if(h.type=="node_var"){j=this.getvar(f);if(j&&j.visProp&&j.type&&j.elementClass&&j.id){d[j.id]=j}}if(h.type=="node_op"&&h.value=="op_execfun"&&h.children.length>1&&h.children[0].value=="$"&&h.children[1].children.length>0){j=h.children[1].children[0].value;d[j]=this.board.objects[j]}if(h.children){for(g=h.children.length;g>0;g--){if(JXG.exists(h.children[g-1])){this.collectDependencies(h.children[g-1],d)}}}},resolveProperty:function(g,d,f){f=JXG.def(f,false);if(g&&g.methodMap){if(d==="label"){g=g.label;d="content"}else{if(JXG.exists(g.subs)&&JXG.exists(g.subs[d])){g=g.subs}else{if(JXG.exists(g.methodMap[d])){d=g.methodMap[d]}else{g=g.visProp;d=d.toLowerCase()}}}}if(!JXG.exists(g)){this._error(g+" is not an object")}if(!JXG.exists(g[d])){this._error("unknown property "+d)}if(f&&typeof g[d]==="function"){return function(){return g[d].apply(g,arguments)}}return g[d]},execute:function(node){var ret,v,i,e,parents=[];ret=0;if(this.cancel){this._error("Max runtime exceeded")}if(!node){return ret}this.line=node.line;this.col=node.col;switch(node.type){case"node_op":switch(node.value){case"op_none":if(node.children[0]){this.execute(node.children[0])}if(node.children[1]){ret=this.execute(node.children[1])}break;case"op_assign":v=this.execute(node.children[0]);this.lhs[this.scope]=v[1];if(v[0].type&&v[0].elementClass&&v[0].methodMap&&v[1]==="label"){this._error("Left-hand side of assignment is read-only.")}if(v[0]!==this.sstack[this.scope]||(JXG.isArray(v[0])&&typeof v[1]==="number")){this.setProp(v[0],v[1],this.execute(node.children[1]))}else{this.letvar(v[1],this.execute(node.children[1]))}this.lhs[this.scope]=0;break;case"op_noassign":ret=this.execute(node.children[0]);break;case"op_if":if(this.execute(node.children[0])){ret=this.execute(node.children[1])}break;case"op_if_else":if(this.execute(node.children[0])){ret=this.execute(node.children[1])}else{ret=this.execute(node.children[2])}break;case"op_while":while(this.execute(node.children[0])){this.execute(node.children[1])}break;case"op_do":do{this.execute(node.children[0])}while(this.execute(node.children[1]));break;case"op_for":for(this.execute(node.children[0]);this.execute(node.children[1]);this.execute(node.children[2])){this.execute(node.children[3])}break;case"op_param":if(node.children[1]){this.execute(node.children[1])}ret=node.children[0];this.pstack[this.pscope].push(ret);if(this.dpstack[this.pscope]){this.dpstack[this.pscope].push({line:node.children[0].line,col:node.children[0].col})}break;case"op_paramdef":if(node.children[1]){this.execute(node.children[1])}ret=node.children[0];this.pstack[this.pscope].push(ret);break;case"op_proplst":if(node.children[0]){this.execute(node.children[0])}if(node.children[1]){this.execute(node.children[1])}break;case"op_proplst_val":this.propstack.push({});this.propscope++;this.execute(node.children[0]);ret=this.propstack[this.propscope];this.propstack.pop();this.propscope--;break;case"op_prop":this.propstack[this.propscope][node.children[0]]=this.execute(node.children[1]);break;case"op_array":var l;this.pstack.push([]);this.pscope++;this.execute(node.children[0]);ret=[];l=this.pstack[this.pscope].length;for(i=0;ithis.execute(node.children[1]);break;case"op_lot":ret=this.execute(node.children[0])=this.execute(node.children[1]);break;case"op_loe":ret=this.execute(node.children[0])<=this.execute(node.children[1]);break;case"op_or":ret=this.execute(node.children[0])||this.execute(node.children[1]);break;case"op_and":ret=this.execute(node.children[0])&&this.execute(node.children[1]);break;case"op_not":ret=!this.execute(node.children[0]);break;case"op_add":ret=JXG.Math.Statistics.add(this.execute(node.children[0]),this.execute(node.children[1]));break;case"op_sub":ret=JXG.Math.Statistics.subtract(this.execute(node.children[0]),this.execute(node.children[1]));break;case"op_div":ret=JXG.Math.Statistics.div(this.execute(node.children[0]),this.execute(node.children[1]));break;case"op_mod":ret=JXG.Math.Statistics.mod(this.execute(node.children[0]),this.execute(node.children[1]),true);break;case"op_mul":ret=this.mul(this.execute(node.children[0]),this.execute(node.children[1]));break;case"op_exp":ret=Math.pow(this.execute(node.children[0]),this.execute(node.children[1]));break;case"op_neg":ret=this.execute(node.children[0])*-1;break}break;case"node_var":ret=this.getvar(node.value);break;case"node_const":ret=Number(node.value);break;case"node_const_bool":ret=node.value.toLowerCase()!=="false";break;case"node_str":ret=node.value;break}return ret},compile:function(h,k){var f,g,j,d;f="";if(!JXG.exists(k)){k=false}if(!h){return f}switch(h.type){case"node_op":switch(h.value){case"op_none":if(h.children[0]){f=this.compile(h.children[0],k)}if(h.children[1]){f+=this.compile(h.children[1],k)}break;case"op_assign":j=this.compile(h.children[0],k);if(k){if(JXG.isArray(j)){f="$jc$.setProp("+j[0]+", '"+j[1]+"', "+this.compile(h.children[1],k)+");\n"}else{if(this.isLocalVariable(j)!==this.scope){this.sstack[this.scope][j]=true}f="$jc$.sstack["+this.scope+"]['"+j+"'] = "+this.compile(h.children[1],k)+";\n"}}else{f=j+" = "+this.compile(h.children[1],k)+";\n"}break;case"op_noassign":f=this.compile(h.children[0],k)+";\n";break;case"op_if":f=" if ("+this.compile(h.children[0],k)+") "+this.compile(h.children[1],k);break;case"op_if_else":f=" if ("+this.compile(h.children[0],k)+")"+this.compile(h.children[1],k);f+=" else "+this.compile(h.children[2],k);break;case"op_while":f=" while ("+this.compile(h.children[0],k)+") {\n"+this.compile(h.children[1],k)+"}\n";break;case"op_do":f=" do {\n"+this.compile(h.children[0],k)+"} while ("+this.compile(h.children[1],k)+");\n";break;case"op_for":f=" for ("+this.compile(h.children[0],k)+"; "+this.compile(h.children[1],k)+"; "+this.compile(h.children[2],k)+") {\n"+this.compile(h.children[3],k)+"\n}\n";break;case"op_param":if(h.children[1]){f=this.compile(h.children[1],k)+", "}f+=this.compile(h.children[0],k);break;case"op_paramdef":if(h.children[1]){f=this.compile(h.children[1],k)+", "}f+=h.children[0];break;case"op_proplst":if(h.children[0]){f=this.compile(h.children[0],k)+", "}f+=this.compile(h.children[1],k);break;case"op_prop":f=h.children[0]+": "+this.compile(h.children[1],k);break;case"op_proplst_val":f=this.compile(h.children[0],k);break;case"op_array":f="["+this.compile(h.children[0],k)+"]";break;case"op_extvalue":f=this.compile(h.children[0],k)+"["+this.compile(h.children[1],k)+"]";break;case"op_return":f=" return "+this.compile(h.children[0],k)+";\n";break;case"op_function":f=" function ("+this.compile(h.children[0],k)+") {\n"+this.compile(h.children[1],k)+"}";break;case"op_execfun":if(h.children[2]){j=(k?"{":"<<")+this.compile(h.children[2],k)+(k?"}":">>")}h.children[0].withProps=!!h.children[2];f=this.compile(h.children[0],k)+"("+this.compile(h.children[1],k)+(h.children[2]?", "+j:"")+")";if(k&&h.children[0].value==="$"){f="$jc$.board.objects["+this.compile(h.children[1],k)+"]"}break;case"op_property":if(k&&h.children[1]!=="X"&&h.children[1]!=="Y"){f="$jc$.resolveProperty("+this.compile(h.children[0],k)+", '"+h.children[1]+"', true)"}else{f=this.compile(h.children[0],k)+"."+h.children[1]}break;case"op_lhs":if(h.children.length===1){f=h.children[0]}else{if(h.children[2]==="dot"){if(k){f=[this.compile(h.children[1],k),h.children[0]]}else{f=this.compile(h.children[1],k)+"."+h.children[0]}}else{if(h.children[2]==="bracket"){if(k){f=[this.compile(h.children[1],k),this.compile(h.children[0],k)]}else{f=this.compile(h.children[1],k)+"["+this.compile(h.children[0],k)+"]"}}}}break;case"op_use":if(k){f="$jc$.use(JXG.JSXGraph.boards['"+h.children[0]+"'])"}else{f="use "+h.children[0]+";"}break;case"op_delete":f="delete "+h.children[0];break;case"op_equ":f="("+this.compile(h.children[0],k)+" == "+this.compile(h.children[1],k)+")";break;case"op_neq":f="("+this.compile(h.children[0],k)+" != "+this.compile(h.children[1],k)+")";break;case"op_approx":f="("+this.compile(h.children[0],k)+" ~= "+this.compile(h.children[1],k)+")";break;case"op_grt":f="("+this.compile(h.children[0],k)+" > "+this.compile(h.children[1],k)+")";break;case"op_lot":f="("+this.compile(h.children[0],k)+" < "+this.compile(h.children[1],k)+")";break;case"op_gre":f="("+this.compile(h.children[0],k)+" >= "+this.compile(h.children[1],k)+")";break;case"op_loe":f="("+this.compile(h.children[0],k)+" <= "+this.compile(h.children[1],k)+")";break;case"op_or":f="("+this.compile(h.children[0],k)+" || "+this.compile(h.children[1],k)+")";break;case"op_and":f="("+this.compile(h.children[0],k)+" && "+this.compile(h.children[1],k)+")";break;case"op_not":f="!("+this.compile(h.children[0],k)+")";break;case"op_add":if(k){f="JXG.Math.Statistics.add("+this.compile(h.children[0],k)+", "+this.compile(h.children[1],k)+")"}else{f="("+this.compile(h.children[0],k)+" + "+this.compile(h.children[1],k)+")"}break;case"op_sub":if(k){f="JXG.Math.Statistics.subtract("+this.compile(h.children[0],k)+", "+this.compile(h.children[1],k)+")"}else{f="("+this.compile(h.children[0],k)+" - "+this.compile(h.children[1],k)+")"}break;case"op_div":if(k){f="JXG.Math.Statistics.div("+this.compile(h.children[0],k)+", "+this.compile(h.children[1],k)+")"}else{f="("+this.compile(h.children[0],k)+" / "+this.compile(h.children[1],k)+")"}break;case"op_mod":if(k){f="JXG.Math.mod("+this.compile(h.children[0],k)+", "+this.compile(h.children[1],k)+", true)"}else{f="("+this.compile(h.children[0],k)+" % "+this.compile(h.children[1],k)+")"}break;case"op_mul":if(k){f="$jc$.mul("+this.compile(h.children[0],k)+", "+this.compile(h.children[1],k)+")"}else{f="("+this.compile(h.children[0],k)+" * "+this.compile(h.children[1],k)+")"}break;case"op_exp":if(k){f="Math.pow("+this.compile(h.children[0],k)+", "+this.compile(h.children[1],k)+")"}else{f="("+this.compile(h.children[0],k)+"^"+this.compile(h.children[1],k)+")"}break;case"op_neg":f="(-"+this.compile(h.children[0],k)+")";break}break;case"node_var":if(k){f=this.getvarJS(h.value,false,h.withProps)}else{f=h.value}break;case"node_const":f=h.value;break;case"node_const_bool":f=h.value;break;case"node_str":f="'"+h.value.replace(/'/g,"\\'")+"'";break}if(h.needsBrackets){f="{\n"+f+"}\n"}return f},X:function(d){return d.X()},Y:function(d){return d.Y()},V:function(d){return d.Value()},L:function(d){return d.L()},dist:function(e,d){if(!JXG.exists(e)||!JXG.exists(e.Dist)){this._error("Error: Can't calculate distance.")}return e.Dist(d)},mul:function(e,d){if(JXG.isArray(e)*JXG.isArray(d)){return JXG.Math.innerProduct(e,d,Math.min(e.length,d.length))}else{return JXG.Math.Statistics.multiply(e,d)}},use:function(d){this.board=d;this.builtIn["$board"]=d;this.builtIn["$board"].src="$jc$.board"},findSymbol:function(d,g){var f,e;g=JXG.def(g,-1);if(g===-1){g=this.scope}for(f=g;f>=0;f--){for(e in this.sstack[f]){if(this.sstack[f][e]===d){return[e,f]}}}return[]},defineBuiltIn:function(){var d=this,e={PI:Math.PI,EULER:Math.E,X:d.X,Y:d.Y,V:d.V,L:d.L,dist:d.dist,rad:JXG.Math.Geometry.rad,deg:JXG.Math.Geometry.trueAngle,factorial:JXG.Math.factorial,trunc:JXG.trunc,"$":d.getElementById,"$board":d.board};e.rad.sc=JXG.Math.Geometry;e.deg.sc=JXG.Math.Geometry;e.factorial.sc=JXG.Math;e.PI.src="Math.PI";e.EULER.src="Math.E";e.X.src="$jc$.X";e.Y.src="$jc$.Y";e.V.src="$jc$.V";e.L.src="$jc$.L";e.dist.src="$jc$.dist";e.rad.src="JXG.Math.Geometry.rad";e.deg.src="JXG.Math.Geometry.trueAngle";e.factorial.src="JXG.Math.factorial";e.trunc.src="JXG.trunc";e["$"].src="(function (n) { return JXG.getRef($jc$.board, n); })";if(e["$board"]){e["$board"].src="$jc$.board"}return e},_debug:function(d){if(typeof console!=="undefined"){console.log(d)}else{if(document&&document.getElementById("debug")!==null){document.getElementById("debug").innerHTML+=d+"
"}}},_error:function(f){var d=new Error("Error("+this.line+"): "+f);d.line=this.line;throw d},_warn:function(d){if(typeof console!=="undefined"){console.log("Warning("+this.line+"): "+d)}else{if(document&&document.getElementById(this.warnLog)!==null){document.getElementById(this.warnLog).innerHTML+="Warning("+this.line+"): "+d+"
"}}},_log:function(d){if(typeof window==="undefined"&&typeof self!=="undefined"&&self.postMessage){self.postMessage({type:"log",msg:"Log: "+d.toString()})}else{console.log("Log: ",arguments)}}});JXG.extend(JXG.JessieCode.prototype,{_lex:function(d){var h,e=-1,g=0,j=0,i,f;while(1){h=0;e=-1;g=0;j=0;i=d.offset+1+(g-j);do{i--;h=0;e=-2;j=i;if(d.src.length<=j){return 67}do{f=d.src.charCodeAt(i);switch(h){case 0:if((f>=9&&f<=10)||f==13||f==32){h=1}else{if(f==33){h=2}else{if(f==35){h=3}else{if(f==36||(f>=65&&f<=67)||(f>=71&&f<=72)||(f>=74&&f<=81)||f==83||f==86||(f>=88&&f<=90)||f==95||(f>=97&&f<=99)||(f>=103&&f<=104)||(f>=106&&f<=113)||f==115||f==118||(f>=120&&f<=122)){h=4}else{if(f==37){h=5}else{if(f==40){h=6}else{if(f==41){h=7}else{if(f==42){h=8}else{if(f==43){h=9}else{if(f==44){h=10}else{if(f==45){h=11}else{if(f==46){h=12}else{if(f==47){h=13}else{if((f>=48&&f<=57)){h=14}else{if(f==58){h=15}else{if(f==59){h=16}else{if(f==60){h=17}else{if(f==61){h=18}else{if(f==62){h=19}else{if(f==91){h=20}else{if(f==93){h=21}else{if(f==94){h=22}else{if(f==123){h=23}else{if(f==124){h=24}else{if(f==125){h=25}else{if(f==38){h=48}else{if(f==68||f==100){h=49}else{if(f==39){h=51}else{if(f==73||f==105){h=52}else{if(f==126){h=53}else{if(f==70||f==102){h=64}else{if(f==85||f==117){h=65}else{if(f==69||f==101){h=73}else{if(f==84||f==116){h=74}else{if(f==87||f==119){h=80}else{if(f==82||f==114){h=84}else{h=-1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}break;case 1:h=-1;e=2;g=i;break;case 2:if(f==61){h=26}else{h=-1}e=31;g=i;break;case 3:h=-1;e=41;g=i;break;case 4:if((f>=48&&f<=57)||(f>=65&&f<=90)||f==95||(f>=97&&f<=122)){h=4}else{h=-1}e=45;g=i;break;case 5:h=-1;e=35;g=i;break;case 6:h=-1;e=38;g=i;break;case 7:h=-1;e=39;g=i;break;case 8:h=-1;e=36;g=i;break;case 9:h=-1;e=32;g=i;break;case 10:h=-1;e=40;g=i;break;case 11:h=-1;e=33;g=i;break;case 12:if((f>=48&&f<=57)){h=29}else{h=-1}e=44;g=i;break;case 13:h=-1;e=34;g=i;break;case 14:if((f>=48&&f<=57)){h=14}else{if(f==46){h=29}else{h=-1}}e=47;g=i;break;case 15:h=-1;e=42;g=i;break;case 16:h=-1;e=20;g=i;break;case 17:if(f==60){h=30}else{if(f==61){h=31}else{h=-1}}e=28;g=i;break;case 18:if(f==61){h=32}else{h=-1}e=21;g=i;break;case 19:if(f==61){h=33}else{if(f==62){h=34}else{h=-1}}e=27;g=i;break;case 20:h=-1;e=16;g=i;break;case 21:h=-1;e=17;g=i;break;case 22:h=-1;e=37;g=i;break;case 23:h=-1;e=18;g=i;break;case 24:if(f==124){h=37}else{h=-1}e=43;g=i;break;case 25:h=-1;e=19;g=i;break;case 26:h=-1;e=23;g=i;break;case 27:h=-1;e=30;g=i;break;case 28:h=-1;e=46;g=i;break;case 29:if((f>=48&&f<=57)){h=29}else{h=-1}e=48;g=i;break;case 30:h=-1;e=14;g=i;break;case 31:h=-1;e=25;g=i;break;case 32:h=-1;e=22;g=i;break;case 33:h=-1;e=26;g=i;break;case 34:h=-1;e=15;g=i;break;case 35:if((f>=48&&f<=57)||(f>=65&&f<=90)||f==95||(f>=97&&f<=122)){h=4}else{h=-1}e=6;g=i;break;case 36:if((f>=48&&f<=57)||(f>=65&&f<=90)||f==95||(f>=97&&f<=122)){h=4}else{h=-1}e=3;g=i;break;case 37:h=-1;e=29;g=i;break;case 38:h=-1;e=24;g=i;break;case 39:if((f>=48&&f<=57)||(f>=65&&f<=90)||f==95||(f>=97&&f<=122)){h=4}else{h=-1}e=7;g=i;break;case 40:if((f>=48&&f<=57)||(f>=65&&f<=90)||f==95||(f>=97&&f<=122)){h=4}else{h=-1}e=9;g=i;break;case 41:if((f>=48&&f<=57)||(f>=65&&f<=90)||f==95||(f>=97&&f<=122)){h=4}else{h=-1}e=4;g=i;break;case 42:if((f>=48&&f<=57)||(f>=65&&f<=90)||f==95||(f>=97&&f<=122)){h=4}else{h=-1}e=12;g=i;break;case 43:if((f>=48&&f<=57)||(f>=65&&f<=90)||f==95||(f>=97&&f<=122)){h=4}else{h=-1}e=13;g=i;break;case 44:if((f>=48&&f<=57)||(f>=65&&f<=90)||f==95||(f>=97&&f<=122)){h=4}else{h=-1}e=5;g=i;break;case 45:if((f>=48&&f<=57)||(f>=65&&f<=90)||f==95||(f>=97&&f<=122)){h=4}else{h=-1}e=11;g=i;break;case 46:if((f>=48&&f<=57)||(f>=65&&f<=90)||f==95||(f>=97&&f<=122)){h=4}else{h=-1}e=10;g=i;break;case 47:if((f>=48&&f<=57)||(f>=65&&f<=90)||f==95||(f>=97&&f<=122)){h=4}else{h=-1}e=8;g=i;break;case 48:if(f==38){h=27}else{h=-1}break;case 49:if((f>=48&&f<=57)||(f>=65&&f<=68)||(f>=70&&f<=78)||(f>=80&&f<=90)||f==95||(f>=97&&f<=100)||(f>=102&&f<=110)||(f>=112&&f<=122)){h=4}else{if(f==79||f==111){h=35}else{if(f==69||f==101){h=81}else{h=-1}}}e=45;g=i;break;case 50:if(f==39){h=28}else{if((f>=0&&f<=38)||(f>=40&&f<=91)||(f>=93&&f<=254)){h=51}else{if(f==92){h=55}else{h=-1}}}e=46;g=i;break;case 51:if(f==39){h=28}else{if((f>=0&&f<=38)||(f>=40&&f<=91)||(f>=93&&f<=254)){h=51}else{if(f==92){h=55}else{h=-1}}}break;case 52:if((f>=48&&f<=57)||(f>=65&&f<=69)||(f>=71&&f<=90)||f==95||(f>=97&&f<=101)||(f>=103&&f<=122)){h=4}else{if(f==70||f==102){h=36}else{h=-1}}e=45;g=i;break;case 53:if(f==61){h=38}else{h=-1}break;case 54:if((f>=48&&f<=57)||(f>=65&&f<=81)||(f>=83&&f<=90)||f==95||(f>=97&&f<=113)||(f>=115&&f<=122)){h=4}else{if(f==82||f==114){h=39}else{h=-1}}e=45;g=i;break;case 55:if(f==39){h=50}else{if((f>=0&&f<=38)||(f>=40&&f<=91)||(f>=93&&f<=254)){h=51}else{if(f==92){h=55}else{h=-1}}}break;case 56:if((f>=48&&f<=57)||(f>=65&&f<=68)||(f>=70&&f<=90)||f==95||(f>=97&&f<=100)||(f>=102&&f<=122)){h=4}else{if(f==69||f==101){h=40}else{h=-1}}e=45;g=i;break;case 57:if((f>=48&&f<=57)||(f>=65&&f<=68)||(f>=70&&f<=90)||f==95||(f>=97&&f<=100)||(f>=102&&f<=122)){h=4}else{if(f==69||f==101){h=41}else{h=-1}}e=45;g=i;break;case 58:if((f>=48&&f<=57)||(f>=65&&f<=68)||(f>=70&&f<=90)||f==95||(f>=97&&f<=100)||(f>=102&&f<=122)){h=4}else{if(f==69||f==101){h=42}else{h=-1}}e=45;g=i;break;case 59:if((f>=48&&f<=57)||(f>=65&&f<=68)||(f>=70&&f<=90)||f==95||(f>=97&&f<=100)||(f>=102&&f<=122)){h=4}else{if(f==69||f==101){h=43}else{h=-1}}e=45;g=i;break;case 60:if((f>=48&&f<=57)||(f>=65&&f<=68)||(f>=70&&f<=90)||f==95||(f>=97&&f<=100)||(f>=102&&f<=122)){h=4}else{if(f==69||f==101){h=44}else{h=-1}}e=45;g=i;break;case 61:if((f>=48&&f<=57)||(f>=65&&f<=68)||(f>=70&&f<=90)||f==95||(f>=97&&f<=100)||(f>=102&&f<=122)){h=4}else{if(f==69||f==101){h=45}else{h=-1}}e=45;g=i;break;case 62:if((f>=48&&f<=57)||(f>=65&&f<=77)||(f>=79&&f<=90)||f==95||(f>=97&&f<=109)||(f>=111&&f<=122)){h=4}else{if(f==78||f==110){h=46}else{h=-1}}e=45;g=i;break;case 63:if((f>=48&&f<=57)||(f>=65&&f<=77)||(f>=79&&f<=90)||f==95||(f>=97&&f<=109)||(f>=111&&f<=122)){h=4}else{if(f==78||f==110){h=47}else{h=-1}}e=45;g=i;break;case 64:if((f>=48&&f<=57)||(f>=66&&f<=78)||(f>=80&&f<=84)||(f>=86&&f<=90)||f==95||(f>=98&&f<=110)||(f>=112&&f<=116)||(f>=118&&f<=122)){h=4}else{if(f==79||f==111){h=54}else{if(f==65||f==97){h=75}else{if(f==85||f==117){h=86}else{h=-1}}}}e=45;g=i;break;case 65:if((f>=48&&f<=57)||(f>=65&&f<=82)||(f>=84&&f<=90)||f==95||(f>=97&&f<=114)||(f>=116&&f<=122)){h=4}else{if(f==83||f==115){h=56}else{h=-1}}e=45;g=i;break;case 66:if((f>=48&&f<=57)||(f>=65&&f<=82)||(f>=84&&f<=90)||f==95||(f>=97&&f<=114)||(f>=116&&f<=122)){h=4}else{if(f==83||f==115){h=57}else{h=-1}}e=45;g=i;break;case 67:if((f>=48&&f<=57)||(f>=65&&f<=84)||(f>=86&&f<=90)||f==95||(f>=97&&f<=116)||(f>=118&&f<=122)){h=4}else{if(f==85||f==117){h=58}else{h=-1}}e=45;g=i;break;case 68:if((f>=48&&f<=57)||(f>=65&&f<=82)||(f>=84&&f<=90)||f==95||(f>=97&&f<=114)||(f>=116&&f<=122)){h=4}else{if(f==83||f==115){h=59}else{h=-1}}e=45;g=i;break;case 69:if((f>=48&&f<=57)||(f>=65&&f<=75)||(f>=77&&f<=90)||f==95||(f>=97&&f<=107)||(f>=109&&f<=122)){h=4}else{if(f==76||f==108){h=60}else{h=-1}}e=45;g=i;break;case 70:if((f>=48&&f<=57)||(f>=65&&f<=83)||(f>=85&&f<=90)||f==95||(f>=97&&f<=115)||(f>=117&&f<=122)){h=4}else{if(f==84||f==116){h=61}else{h=-1}}e=45;g=i;break;case 71:if((f>=48&&f<=57)||(f>=65&&f<=81)||(f>=83&&f<=90)||f==95||(f>=97&&f<=113)||(f>=115&&f<=122)){h=4}else{if(f==82||f==114){h=62}else{h=-1}}e=45;g=i;break;case 72:if((f>=48&&f<=57)||(f>=65&&f<=78)||(f>=80&&f<=90)||f==95||(f>=97&&f<=110)||(f>=112&&f<=122)){h=4}else{if(f==79||f==111){h=63}else{h=-1}}e=45;g=i;break;case 73:if((f>=48&&f<=57)||(f>=65&&f<=75)||(f>=77&&f<=90)||f==95||(f>=97&&f<=107)||(f>=109&&f<=122)){h=4}else{if(f==76||f==108){h=66}else{h=-1}}e=45;g=i;break;case 74:if((f>=48&&f<=57)||(f>=65&&f<=81)||(f>=83&&f<=90)||f==95||(f>=97&&f<=113)||(f>=115&&f<=122)){h=4}else{if(f==82||f==114){h=67}else{h=-1}}e=45;g=i;break;case 75:if((f>=48&&f<=57)||(f>=65&&f<=75)||(f>=77&&f<=90)||f==95||(f>=97&&f<=107)||(f>=109&&f<=122)){h=4}else{if(f==76||f==108){h=68}else{h=-1}}e=45;g=i;break;case 76:if((f>=48&&f<=57)||(f>=65&&f<=72)||(f>=74&&f<=90)||f==95||(f>=97&&f<=104)||(f>=106&&f<=122)){h=4}else{if(f==73||f==105){h=69}else{h=-1}}e=45;g=i;break;case 77:if((f>=48&&f<=57)||(f>=65&&f<=68)||(f>=70&&f<=90)||f==95||(f>=97&&f<=100)||(f>=102&&f<=122)){h=4}else{if(f==69||f==101){h=70}else{h=-1}}e=45;g=i;break;case 78:if((f>=48&&f<=57)||(f>=65&&f<=84)||(f>=86&&f<=90)||f==95||(f>=97&&f<=116)||(f>=118&&f<=122)){h=4}else{if(f==85||f==117){h=71}else{h=-1}}e=45;g=i;break;case 79:if((f>=48&&f<=57)||(f>=65&&f<=72)||(f>=74&&f<=90)||f==95||(f>=97&&f<=104)||(f>=106&&f<=122)){h=4}else{if(f==73||f==105){h=72}else{h=-1}}e=45;g=i;break;case 80:if((f>=48&&f<=57)||(f>=65&&f<=71)||(f>=73&&f<=90)||f==95||(f>=97&&f<=103)||(f>=105&&f<=122)){h=4}else{if(f==72||f==104){h=76}else{h=-1}}e=45;g=i;break;case 81:if((f>=48&&f<=57)||(f>=65&&f<=75)||(f>=77&&f<=90)||f==95||(f>=97&&f<=107)||(f>=109&&f<=122)){h=4}else{if(f==76||f==108){h=77}else{h=-1}}e=45;g=i;break;case 82:if((f>=48&&f<=57)||(f>=65&&f<=83)||(f>=85&&f<=90)||f==95||(f>=97&&f<=115)||(f>=117&&f<=122)){h=4}else{if(f==84||f==116){h=78}else{h=-1}}e=45;g=i;break;case 83:if((f>=48&&f<=57)||(f>=65&&f<=83)||(f>=85&&f<=90)||f==95||(f>=97&&f<=115)||(f>=117&&f<=122)){h=4}else{if(f==84||f==116){h=79}else{h=-1}}e=45;g=i;break;case 84:if((f>=48&&f<=57)||(f>=65&&f<=68)||(f>=70&&f<=90)||f==95||(f>=97&&f<=100)||(f>=102&&f<=122)){h=4}else{if(f==69||f==101){h=82}else{h=-1}}e=45;g=i;break;case 85:if((f>=48&&f<=57)||(f>=65&&f<=66)||(f>=68&&f<=90)||f==95||(f>=97&&f<=98)||(f>=100&&f<=122)){h=4}else{if(f==67||f==99){h=83}else{h=-1}}e=45;g=i;break;case 86:if((f>=48&&f<=57)||(f>=65&&f<=77)||(f>=79&&f<=90)||f==95||(f>=97&&f<=109)||(f>=111&&f<=122)){h=4}else{if(f==78||f==110){h=85}else{h=-1}}e=45;g=i;break}if(h>-1){if(f==10){d.line++;d.column=0;if(this.countLines){this.parCurLine=d.line}}d.column++;if(this.countLines){this.parCurColumn=d.column}}i++}while(h>-1)}while(2>-1&&e==2);if(e>-1){d.att=d.src.substr(j,g-j);d.offset=g;if(e==46){d.att=d.att.substr(1,d.att.length-2);d.att=d.att.replace(/\\\'/g,"'")}}else{d.att=new String();e=-1}break}return e},_parse:function(d,j,g){var s=[],r=[],k=0,p,n,m,f={la:0,act:0,offset:0,src:d,att:"",line:1,column:1,error_step:0};var l=new Array(new Array(0,1),new Array(49,2),new Array(49,0),new Array(51,2),new Array(51,0),new Array(52,3),new Array(52,1),new Array(52,0),new Array(54,3),new Array(54,1),new Array(54,0),new Array(55,3),new Array(56,3),new Array(56,1),new Array(56,0),new Array(57,3),new Array(57,1),new Array(60,3),new Array(50,3),new Array(50,5),new Array(50,3),new Array(50,5),new Array(50,9),new Array(50,3),new Array(50,2),new Array(50,2),new Array(50,2),new Array(50,2),new Array(50,3),new Array(50,1),new Array(59,3),new Array(59,4),new Array(59,1),new Array(53,3),new Array(53,3),new Array(53,3),new Array(53,3),new Array(53,3),new Array(53,3),new Array(53,3),new Array(53,1),new Array(62,3),new Array(62,3),new Array(62,2),new Array(62,1),new Array(61,3),new Array(61,3),new Array(61,1),new Array(63,3),new Array(63,3),new Array(63,3),new Array(63,1),new Array(65,3),new Array(65,1),new Array(64,2),new Array(64,2),new Array(64,1),new Array(58,4),new Array(58,4),new Array(58,5),new Array(58,3),new Array(58,1),new Array(66,1),new Array(66,1),new Array(66,1),new Array(66,3),new Array(66,1),new Array(66,7),new Array(66,3),new Array(66,3),new Array(66,1),new Array(66,1));var h=new Array(new Array(),new Array(3,3,5,4,6,5,7,6,9,7,11,8,10,9,18,12,20,13,45,17,31,18,47,22,48,23,38,24,46,25,8,26,14,27,16,28,12,29,13,30,33,32,32,33),new Array(),new Array(31,18,33,32,32,33,47,22,48,23,45,37,38,24,46,25,8,26,14,27,16,28,12,29,13,30),new Array(31,18,33,32,32,33,47,22,48,23,45,37,38,24,46,25,8,26,14,27,16,28,12,29,13,30),new Array(3,3,5,4,6,5,7,6,9,7,11,8,10,9,18,12,20,13,45,17,31,18,47,22,48,23,38,24,46,25,8,26,14,27,16,28,12,29,13,30,33,32,32,33),new Array(38,40),new Array(45,41),new Array(45,42),new Array(3,3,5,4,6,5,7,6,9,7,11,8,10,9,18,12,20,13,45,17,31,18,47,22,48,23,38,24,46,25,8,26,14,27,16,28,12,29,13,30,33,32,32,33),new Array(20,44),new Array(24,45,23,46,26,47,25,48,27,49,28,50,22,51,20,52),new Array(),new Array(),new Array(21,54),new Array(30,55,29,56),new Array(44,57,38,58,16,59,37,60),new Array(21,-32),new Array(31,18,33,32,32,33,47,22,48,23,45,37,38,24,46,25,8,26,14,27,16,28,12,29,13,30),new Array(32,62,33,63),new Array(),new Array(35,64,34,65,36,66),new Array(),new Array(),new Array(31,18,33,32,32,33,47,22,48,23,45,37,38,24,46,25,8,26,14,27,16,28,12,29,13,30),new Array(),new Array(38,68),new Array(45,71),new Array(31,18,33,32,32,33,47,22,48,23,45,37,38,24,46,25,8,26,14,27,16,28,12,29,13,30),new Array(),new Array(),new Array(),new Array(47,22,48,23,45,37,38,24,46,25,8,26,14,27,16,28,12,29,13,30),new Array(47,22,48,23,45,37,38,24,46,25,8,26,14,27,16,28,12,29,13,30),new Array(),new Array(24,45,23,46,26,47,25,48,27,49,28,50,22,51,3,3,5,4,6,5,7,6,9,7,11,8,10,9,18,12,20,13,45,17,31,18,47,22,48,23,38,24,46,25,8,26,14,27,16,28,12,29,13,30,33,32,32,33),new Array(44,77,38,58,16,78,37,60),new Array(),new Array(24,45,23,46,26,47,25,48,27,49,28,50,22,51,3,3,5,4,6,5,7,6,9,7,11,8,10,9,18,12,20,13,45,17,31,18,47,22,48,23,38,24,46,25,8,26,14,27,16,28,12,29,13,30,33,32,32,33),new Array(5,80),new Array(45,17,47,22,48,23,38,24,46,25,8,26,14,27,16,28,12,29,13,30),new Array(20,83),new Array(),new Array(),new Array(),new Array(31,18,33,32,32,33,47,22,48,23,45,37,38,24,46,25,8,26,14,27,16,28,12,29,13,30),new Array(31,18,33,32,32,33,47,22,48,23,45,37,38,24,46,25,8,26,14,27,16,28,12,29,13,30),new Array(31,18,33,32,32,33,47,22,48,23,45,37,38,24,46,25,8,26,14,27,16,28,12,29,13,30),new Array(31,18,33,32,32,33,47,22,48,23,45,37,38,24,46,25,8,26,14,27,16,28,12,29,13,30),new Array(31,18,33,32,32,33,47,22,48,23,45,37,38,24,46,25,8,26,14,27,16,28,12,29,13,30),new Array(31,18,33,32,32,33,47,22,48,23,45,37,38,24,46,25,8,26,14,27,16,28,12,29,13,30),new Array(31,18,33,32,32,33,47,22,48,23,45,37,38,24,46,25,8,26,14,27,16,28,12,29,13,30),new Array(),new Array(19,91,3,3,5,4,6,5,7,6,9,7,11,8,10,9,18,12,20,13,45,17,31,18,47,22,48,23,38,24,46,25,8,26,14,27,16,28,12,29,13,30,33,32,32,33),new Array(31,18,33,32,32,33,47,22,48,23,45,37,38,24,46,25,8,26,14,27,16,28,12,29,13,30),new Array(33,32,32,33,47,22,48,23,45,37,38,24,46,25,8,26,14,27,16,28,12,29,13,30),new Array(33,32,32,33,47,22,48,23,45,37,38,24,46,25,8,26,14,27,16,28,12,29,13,30),new Array(45,96),new Array(31,18,33,32,32,33,47,22,48,23,45,37,38,24,46,25,8,26,14,27,16,28,12,29,13,30),new Array(33,32,32,33,47,22,48,23,45,37,38,24,46,25,8,26,14,27,16,28,12,29,13,30),new Array(47,22,48,23,45,37,38,24,46,25,8,26,14,27,16,28,12,29,13,30),new Array(30,55,29,56),new Array(33,32,32,33,47,22,48,23,45,37,38,24,46,25,8,26,14,27,16,28,12,29,13,30),new Array(33,32,32,33,47,22,48,23,45,37,38,24,46,25,8,26,14,27,16,28,12,29,13,30),new Array(33,32,32,33,47,22,48,23,45,37,38,24,46,25,8,26,14,27,16,28,12,29,13,30),new Array(33,32,32,33,47,22,48,23,45,37,38,24,46,25,8,26,14,27,16,28,12,29,13,30),new Array(33,32,32,33,47,22,48,23,45,37,38,24,46,25,8,26,14,27,16,28,12,29,13,30),new Array(39,105,24,45,23,46,26,47,25,48,27,49,28,50,22,51),new Array(45,107),new Array(15,108,40,109),new Array(),new Array(42,110),new Array(17,111,40,112),new Array(24,45,23,46,26,47,25,48,27,49,28,50,22,51),new Array(),new Array(),new Array(4,113),new Array(45,114),new Array(33,32,32,33,47,22,48,23,45,37,38,24,46,25,8,26,14,27,16,28,12,29,13,30),new Array(),new Array(31,18,33,32,32,33,47,22,48,23,45,37,38,24,46,25,8,26,14,27,16,28,12,29,13,30),new Array(20,117),new Array(44,57,38,58,16,59),new Array(),new Array(30,55,29,56),new Array(30,55,29,56),new Array(30,55,29,56),new Array(30,55,29,56),new Array(30,55,29,56),new Array(30,55,29,56),new Array(30,55,29,56),new Array(),new Array(),new Array(24,45,23,46,26,47,25,48,27,49,28,50,22,51),new Array(32,62,33,63),new Array(32,62,33,63),new Array(21,-30),new Array(39,118,40,112),new Array(17,119,32,62,33,63),new Array(),new Array(35,64,34,65,36,66),new Array(35,64,34,65,36,66),new Array(),new Array(),new Array(),new Array(),new Array(39,120,40,121),new Array(),new Array(),new Array(45,71),new Array(31,18,33,32,32,33,47,22,48,23,45,37,38,24,46,25,8,26,14,27,16,28,12,29,13,30),new Array(),new Array(31,18,33,32,32,33,47,22,48,23,45,37,38,24,46,25,8,26,14,27,16,28,12,29,13,30),new Array(3,3,5,4,6,5,7,6,9,7,11,8,10,9,18,12,20,13,45,17,31,18,47,22,48,23,38,24,46,25,8,26,14,27,16,28,12,29,13,30,33,32,32,33),new Array(),new Array(17,126,32,62,33,63),new Array(24,45,23,46,26,47,25,48,27,49,28,50,22,51,20,127),new Array(31,18,33,32,32,33,47,22,48,23,45,37,38,24,46,25,8,26,14,27,16,28,12,29,13,30),new Array(47,22,48,23,45,37,38,24,46,25,8,26,14,27,16,28,12,29,13,30),new Array(21,-31),new Array(18,131),new Array(45,132),new Array(),new Array(24,45,23,46,26,47,25,48,27,49,28,50,22,51),new Array(24,45,23,46,26,47,25,48,27,49,28,50,22,51),new Array(),new Array(),new Array(),new Array(24,45,23,46,26,47,25,48,27,49,28,50,22,51,20,133),new Array(40,134),new Array(44,77,38,58,16,78),new Array(),new Array(),new Array(45,17,47,22,48,23,38,24,46,25,8,26,14,27,16,28,12,29,13,30),new Array(47,22,48,23,45,37,38,24,46,25,8,26,14,27,16,28,12,29,13,30),new Array(19,138,3,3,5,4,6,5,7,6,9,7,11,8,10,9,18,12,20,13,45,17,31,18,47,22,48,23,38,24,46,25,8,26,14,27,16,28,12,29,13,30,33,32,32,33),new Array(39,139),new Array(44,77,38,58,16,78),new Array(),new Array(3,3,5,4,6,5,7,6,9,7,11,8,10,9,18,12,20,13,45,17,31,18,47,22,48,23,38,24,46,25,8,26,14,27,16,28,12,29,13,30,33,32,32,33),new Array());var e=new Array(new Array(49,1),new Array(50,2,60,10,53,11,59,14,62,15,58,16,61,19,66,20,63,21,64,31,65,34),new Array(),new Array(53,35,62,15,61,19,63,21,64,31,65,34,58,36,66,20),new Array(53,38,62,15,61,19,63,21,64,31,65,34,58,36,66,20),new Array(50,39,60,10,53,11,59,14,62,15,58,16,61,19,66,20,63,21,64,31,65,34),new Array(),new Array(),new Array(),new Array(50,43,60,10,53,11,59,14,62,15,58,16,61,19,66,20,63,21,64,31,65,34),new Array(),new Array(),new Array(51,53),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(62,61,61,19,63,21,64,31,65,34,58,36,66,20),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(53,67,62,15,61,19,63,21,64,31,65,34,58,36,66,20),new Array(),new Array(),new Array(54,69,55,70),new Array(52,72,53,73,62,15,61,19,63,21,64,31,65,34,58,36,66,20),new Array(),new Array(),new Array(),new Array(65,74,58,36,66,20),new Array(65,75,58,36,66,20),new Array(),new Array(50,76,60,10,53,11,59,14,62,15,58,16,61,19,66,20,63,21,64,31,65,34),new Array(),new Array(),new Array(50,79,60,10,53,11,59,14,62,15,58,16,61,19,66,20,63,21,64,31,65,34),new Array(),new Array(60,81,59,14,58,82,66,20),new Array(),new Array(),new Array(),new Array(),new Array(62,84,61,19,63,21,64,31,65,34,58,36,66,20),new Array(62,85,61,19,63,21,64,31,65,34,58,36,66,20),new Array(62,86,61,19,63,21,64,31,65,34,58,36,66,20),new Array(62,87,61,19,63,21,64,31,65,34,58,36,66,20),new Array(62,88,61,19,63,21,64,31,65,34,58,36,66,20),new Array(62,89,61,19,63,21,64,31,65,34,58,36,66,20),new Array(62,90,61,19,63,21,64,31,65,34,58,36,66,20),new Array(),new Array(50,92,60,10,53,11,59,14,62,15,58,16,61,19,66,20,63,21,64,31,65,34),new Array(53,93,62,15,61,19,63,21,64,31,65,34,58,36,66,20),new Array(61,94,63,21,64,31,65,34,58,36,66,20),new Array(61,95,63,21,64,31,65,34,58,36,66,20),new Array(),new Array(52,97,53,73,62,15,61,19,63,21,64,31,65,34,58,36,66,20),new Array(61,98,63,21,64,31,65,34,58,36,66,20),new Array(65,99,58,36,66,20),new Array(),new Array(63,100,64,31,65,34,58,36,66,20),new Array(63,101,64,31,65,34,58,36,66,20),new Array(64,102,65,34,58,36,66,20),new Array(64,103,65,34,58,36,66,20),new Array(64,104,65,34,58,36,66,20),new Array(),new Array(56,106),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(61,115,63,21,64,31,65,34,58,36,66,20),new Array(),new Array(53,116,62,15,61,19,63,21,64,31,65,34,58,36,66,20),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(55,122),new Array(53,123,62,15,61,19,63,21,64,31,65,34,58,36,66,20),new Array(),new Array(53,124,62,15,61,19,63,21,64,31,65,34,58,36,66,20),new Array(50,125,60,10,53,11,59,14,62,15,58,16,61,19,66,20,63,21,64,31,65,34),new Array(),new Array(),new Array(),new Array(53,128,62,15,61,19,63,21,64,31,65,34,58,36,66,20),new Array(57,129,58,130,66,20),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(),new Array(51,135),new Array(),new Array(60,136,59,14,58,82,66,20),new Array(58,137,66,20),new Array(50,92,60,10,53,11,59,14,62,15,58,16,61,19,66,20,63,21,64,31,65,34),new Array(),new Array(),new Array(),new Array(50,140,60,10,53,11,59,14,62,15,58,16,61,19,66,20,63,21,64,31,65,34),new Array());var q=new Array(2,0,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,29,-1,40,53,64,-1,44,61,47,62,63,-1,66,-1,10,7,70,71,51,-1,-1,56,-1,53,64,-1,-1,-1,-1,24,25,26,-1,-1,-1,-1,-1,-1,-1,27,-1,-1,-1,-1,-1,7,-1,-1,43,-1,-1,-1,-1,-1,-1,14,-1,9,-1,-1,6,54,55,18,-1,-1,20,-1,-1,-1,23,39,38,37,36,35,34,33,28,3,17,42,41,60,-1,-1,52,46,45,50,49,48,65,-1,13,68,-1,-1,69,-1,-1,60,-1,-1,-1,58,57,-1,-1,8,11,5,19,57,21,-1,59,16,4,12,-1,-1,-1,-1,15,67,-1,22);var o=new Array("Program'","ERROR_RESYNC","WHITESPACE","IF","ELSE","WHILE","DO","FOR","FUNCTION","USE","RETURN","DELETE","TRUE","FALSE","<<",">>","[","]","{","}",";","=","==","!=","~=","<=",">=",">","<","||","&&","!","+","-","/","%","*","^","(",")",",","#",":","|",".","Identifier","String","Integer","Float","Program","Stmt","Stmt_List","Param_List","Expression","Prop_List","Prop","Param_Def_List","Attr_List","ExtValue","Lhs","Assign","AddSubExp","LogExp","MulDivExp","NegExp","ExpExp","Value","$");if(!j){j=[]}if(!g){g=[]}s.push(0);r.push(0);f.la=this._lex(f);while(true){f.act=142;for(m=0;m1&&f.act==142){s.pop();r.pop();for(m=0;m1&&f.act!=142){while(f.la!=67){f.act=142;for(m=0;m0){s.push(f.act);r.push(f.att);f.la=this._lex(f);if(f.error_step>0){f.error_step--}}else{p=f.act*-1;n=void (0);switch(p){case 0:n=r[r.length-1];break;case 1:this.execute(r[r.length-1]);break;case 2:n=r[r.length-0];break;case 3:n=this.createNode("node_op","op_none",r[r.length-2],r[r.length-1]);break;case 4:n=r[r.length-0];break;case 5:n=this.createNode("node_op","op_param",r[r.length-1],r[r.length-3]);break;case 6:n=this.createNode("node_op","op_param",r[r.length-1]);break;case 7:n=r[r.length-0];break;case 8:n=this.createNode("node_op","op_proplst",r[r.length-3],r[r.length-1]);break;case 9:n=r[r.length-1];break;case 10:n=r[r.length-0];break;case 11:n=this.createNode("node_op","op_prop",r[r.length-3],r[r.length-1]);break;case 12:n=this.createNode("node_op","op_paramdef",r[r.length-1],r[r.length-3]);break;case 13:n=this.createNode("node_op","op_paramdef",r[r.length-1]);break;case 14:n=r[r.length-0];break;case 15:n=this.createNode("node_op","op_param",r[r.length-1],r[r.length-3]);break;case 16:n=this.createNode("node_op","op_param",r[r.length-1]);break;case 17:n=this.createNode("node_op","op_assign",r[r.length-3],r[r.length-1]);break;case 18:n=this.createNode("node_op","op_if",r[r.length-2],r[r.length-1]);break;case 19:n=this.createNode("node_op","op_if_else",r[r.length-4],r[r.length-3],r[r.length-1]);break;case 20:n=this.createNode("node_op","op_while",r[r.length-2],r[r.length-1]);break;case 21:n=this.createNode("node_op","op_do",r[r.length-4],r[r.length-2]);break;case 22:n=this.createNode("node_op","op_for",r[r.length-7],r[r.length-5],r[r.length-3],r[r.length-1]);break;case 23:n=this.createNode("node_op","op_use",r[r.length-2]);break;case 24:n=this.createNode("node_op","op_delete",r[r.length-1]);break;case 25:n=this.createNode("node_op","op_return",r[r.length-1]);break;case 26:n=r[r.length-2];break;case 27:n=this.createNode("node_op","op_noassign",r[r.length-2]);break;case 28:n=r[r.length-2];n.needsBrackets=true;break;case 29:n=this.createNode("node_op","op_none");break;case 30:n=this.createNode("node_op","op_lhs",r[r.length-1],r[r.length-3],"dot");break;case 31:n=this.createNode("node_op","op_lhs",r[r.length-2],r[r.length-4],"bracket");break;case 32:n=this.createNode("node_op","op_lhs",r[r.length-1]);break;case 33:n=this.createNode("node_op","op_equ",r[r.length-3],r[r.length-1]);break;case 34:n=this.createNode("node_op","op_lot",r[r.length-3],r[r.length-1]);break;case 35:n=this.createNode("node_op","op_grt",r[r.length-3],r[r.length-1]);break;case 36:n=this.createNode("node_op","op_loe",r[r.length-3],r[r.length-1]);break;case 37:n=this.createNode("node_op","op_gre",r[r.length-3],r[r.length-1]);break;case 38:n=this.createNode("node_op","op_neq",r[r.length-3],r[r.length-1]);break;case 39:n=this.createNode("node_op","op_approx",r[r.length-3],r[r.length-1]);break;case 40:n=r[r.length-1];break;case 41:n=this.createNode("node_op","op_or",r[r.length-3],r[r.length-1]);break;case 42:n=this.createNode("node_op","op_and",r[r.length-3],r[r.length-1]);break;case 43:n=this.createNode("node_op","op_not",r[r.length-1]);break;case 44:n=r[r.length-1];break;case 45:n=this.createNode("node_op","op_sub",r[r.length-3],r[r.length-1]);break;case 46:n=this.createNode("node_op","op_add",r[r.length-3],r[r.length-1]);break;case 47:n=r[r.length-1];break;case 48:n=this.createNode("node_op","op_mul",r[r.length-3],r[r.length-1]);break;case 49:n=this.createNode("node_op","op_div",r[r.length-3],r[r.length-1]);break;case 50:n=this.createNode("node_op","op_mod",r[r.length-3],r[r.length-1]);break;case 51:n=r[r.length-1];break;case 52:n=this.createNode("node_op","op_exp",r[r.length-3],r[r.length-1]);break;case 53:n=r[r.length-1];break;case 54:n=this.createNode("node_op","op_neg",r[r.length-1]);break;case 55:n=r[r.length-1];break;case 56:n=r[r.length-1];break;case 57:n=this.createNode("node_op","op_extvalue",r[r.length-4],r[r.length-2]);break;case 58:n=this.createNode("node_op","op_execfun",r[r.length-4],r[r.length-2]);break;case 59:n=this.createNode("node_op","op_execfun",r[r.length-5],r[r.length-3],r[r.length-1],true);break;case 60:n=this.createNode("node_op","op_property",r[r.length-3],r[r.length-1]);break;case 61:n=r[r.length-1];break;case 62:n=this.createNode("node_const",r[r.length-1]);break;case 63:n=this.createNode("node_const",r[r.length-1]);break;case 64:n=this.createNode("node_var",r[r.length-1]);break;case 65:n=r[r.length-2];break;case 66:n=this.createNode("node_str",r[r.length-1]);break;case 67:n=this.createNode("node_op","op_function",r[r.length-5],r[r.length-2]);break;case 68:n=this.createNode("node_op","op_proplst_val",r[r.length-2]);break;case 69:n=this.createNode("node_op","op_array",r[r.length-2]);break;case 70:n=this.createNode("node_const_bool",r[r.length-1]);break;case 71:n=this.createNode("node_const_bool",r[r.length-1]);break}for(m=0;m> "}}else{return"null"}case"string":return"'"+g.replace(/(["'])/g,"\\$1")+"'";case"number":case"boolean":return new String(g);case"null":return"null"}},toJessie:function(f){var g=this.dump(f),d=[],e;for(e=0;e0){d.push("// "+g[e].attributes.name)}d.push("s"+e+" = "+g[e].type+"("+g[e].parents.join(", ")+") "+this.toJSAN(g[e].attributes).replace(/\n/,"\\n")+";");d.push("")}return d.join("\n")},toJavaScript:function(f){var g=this.dump(f),d=[],e;for(e=0;e0){e=this.joinTransforms(h,f);g=[e[1][1],e[2][1],e[1][2],e[2][2],e[1][0],e[2][0]].join(",");j+=" matrix("+g+") ";i.setAttributeNS(null,"transform",j)}},updateImageURL:function(e){var d=JXG.evaluate(e.url);e.rendNode.setAttributeNS(this.xlinkNamespace,"xlink:href",d)},appendChildPrim:function(d,e){if(!JXG.exists(e)){e=0}else{if(e>=JXG.Options.layer.numlayers){e=JXG.Options.layer.numlayers-1}}this.layer[e].appendChild(d)},appendNodesToElement:function(d){d.rendNode=this.getElementById(d.id)},createPrim:function(d,f){var e=this.container.ownerDocument.createElementNS(this.svgNamespace,d);e.setAttributeNS(null,"id",this.container.id+"_"+f);e.style.position="absolute";if(d==="path"){e.setAttributeNS(null,"stroke-linecap","butt");e.setAttributeNS(null,"stroke-linejoin","round")}return e},remove:function(d){if(JXG.exists(d)&&JXG.exists(d.parentNode)){d.parentNode.removeChild(d)}},makeArrows:function(e){var d;if(e.visPropOld.firstarrow===e.visProp.firstarrow&&e.visPropOld.lastarrow===e.visProp.lastarrow){return}if(e.visProp.firstarrow){d=e.rendNodeTriangleStart;if(!JXG.exists(d)){d=this._createArrowHead(e,"End");this.defs.appendChild(d);e.rendNodeTriangleStart=d;e.rendNode.setAttributeNS(null,"marker-start","url(#"+this.container.id+"_"+e.id+"TriangleEnd)")}else{this.defs.appendChild(d)}}else{d=e.rendNodeTriangleStart;if(JXG.exists(d)){this.remove(d)}}if(e.visProp.lastarrow){d=e.rendNodeTriangleEnd;if(!JXG.exists(d)){d=this._createArrowHead(e,"Start");this.defs.appendChild(d);e.rendNodeTriangleEnd=d;e.rendNode.setAttributeNS(null,"marker-end","url(#"+this.container.id+"_"+e.id+"TriangleStart)")}else{this.defs.appendChild(d)}}else{d=e.rendNodeTriangleEnd;if(JXG.exists(d)){this.remove(d)}}e.visPropOld.firstarrow=e.visProp.firstarrow;e.visPropOld.lastarrow=e.visProp.lastarrow},updateEllipsePrim:function(e,d,h,g,f){e.setAttributeNS(null,"cx",d);e.setAttributeNS(null,"cy",h);e.setAttributeNS(null,"rx",Math.abs(g));e.setAttributeNS(null,"ry",Math.abs(f))},updateLinePrim:function(h,e,d,g,f){if(!isNaN(e+d+g+f)){h.setAttributeNS(null,"x1",e);h.setAttributeNS(null,"y1",d);h.setAttributeNS(null,"x2",g);h.setAttributeNS(null,"y2",f)}},updatePathPrim:function(d,e){if(e==""){e="M 0 0"}d.setAttributeNS(null,"d",e)},updatePathStringPoint:function(h,e,g){var f="",j=h.coords.scrCoords,i=e*Math.sqrt(3)*0.5,d=e*0.5;if(g==="x"){f=" M "+(j[1]-e)+" "+(j[2]-e)+" L "+(j[1]+e)+" "+(j[2]+e)+" M "+(j[1]+e)+" "+(j[2]-e)+" L "+(j[1]-e)+" "+(j[2]+e)}else{if(g==="+"){f=" M "+(j[1]-e)+" "+(j[2])+" L "+(j[1]+e)+" "+(j[2])+" M "+(j[1])+" "+(j[2]-e)+" L "+(j[1])+" "+(j[2]+e)}else{if(g==="<>"){f=" M "+(j[1]-e)+" "+(j[2])+" L "+(j[1])+" "+(j[2]+e)+" L "+(j[1]+e)+" "+(j[2])+" L "+(j[1])+" "+(j[2]-e)+" Z "}else{if(g==="^"){f=" M "+(j[1])+" "+(j[2]-e)+" L "+(j[1]-i)+" "+(j[2]+d)+" L "+(j[1]+i)+" "+(j[2]+d)+" Z "}else{if(g==="v"){f=" M "+(j[1])+" "+(j[2]+e)+" L "+(j[1]-i)+" "+(j[2]-d)+" L "+(j[1]+i)+" "+(j[2]-d)+" Z "}else{if(g===">"){f=" M "+(j[1]+e)+" "+(j[2])+" L "+(j[1]-d)+" "+(j[2]-i)+" L "+(j[1]-d)+" "+(j[2]+i)+" Z "}else{if(g==="<"){f=" M "+(j[1]-e)+" "+(j[2])+" L "+(j[1]+d)+" "+(j[2]-i)+" L "+(j[1]+d)+" "+(j[2]+i)+" Z "}}}}}}}return f},updatePathStringPrim:function(d){var f=" M ",g=" L ",m=" C ",e=f,n=5000,j="",h,l,o=(d.visProp.curvetype!=="plot"),k;if(d.numberPoints<=0){return""}k=Math.min(d.points.length,d.numberPoints);if(d.bezierDegree==1){if(o&&d.board.options.curve.RDPsmoothing){d.points=JXG.Math.Numerics.RamerDouglasPeuker(d.points,0.5)}for(h=0;hn){l[1]=n}else{if(l[1]<-n){l[1]=-n}}if(l[2]>n){l[2]=n}else{if(l[2]<-n){l[2]=-n}}j+=e+l[1]+" "+l[2];e=g}}}else{if(d.bezierDegree==3){h=0;while(ht){r[1]=t}else{if(r[1]<-t){r[1]=-t}}if(r[2]>t){r[2]=t}else{if(r[2]<-t){r[2]=-t}}if(h==k){o+=[h,r[1]+0*q*(2*m*Math.random()-m)," ",r[2]+0*q*(2*m*Math.random()-m)].join("")}else{o+=[h,(g+(r[1]-g)*0.333+q*(2*m*Math.random()-m))," ",(d+(r[2]-d)*0.333+q*(2*m*Math.random()-m))," ",(g+2*(r[1]-g)*0.333+q*(2*m*Math.random()-m))," ",(d+2*(r[2]-d)*0.333+q*(2*m*Math.random()-m))," ",r[1]," ",r[2]].join("")}h=l;g=r[1];d=r[2]}}}return o},updatePolygonPrim:function(h,g){var j="",e,f,d=g.vertices.length;h.setAttributeNS(null,"stroke","none");for(f=0;f0){e.setAttributeNS(null,"stroke-dasharray",this.dashArray[f-1])}else{if(e.hasAttributeNS(null,"stroke-dasharray")){e.removeAttributeNS(null,"stroke-dasharray")}}},setGradient:function(f){var n=f.rendNode,g,i,h,m,l,e,d,k,j;i=JXG.evaluate(f.visProp.fillopacity);i=(i>0)?i:0;g=JXG.evaluate(f.visProp.fillcolor);if(f.visProp.gradient==="linear"){h=this.createPrim("linearGradient",f.id+"_gradient");e="0%";d="100%";k="0%";j="0%";h.setAttributeNS(null,"x1",e);h.setAttributeNS(null,"x2",d);h.setAttributeNS(null,"y1",k);h.setAttributeNS(null,"y2",j);m=this.createPrim("stop",f.id+"_gradient1");m.setAttributeNS(null,"offset","0%");m.setAttributeNS(null,"style","stop-color:"+g+";stop-opacity:"+i);l=this.createPrim("stop",f.id+"_gradient2");l.setAttributeNS(null,"offset","100%");l.setAttributeNS(null,"style","stop-color:"+f.visProp.gradientsecondcolor+";stop-opacity:"+f.visProp.gradientsecondopacity);h.appendChild(m);h.appendChild(l);this.defs.appendChild(h);n.setAttributeNS(null,"style","fill:url(#"+this.container.id+"_"+f.id+"_gradient)");f.gradNode1=m;f.gradNode2=l}else{if(f.visProp.gradient==="radial"){h=this.createPrim("radialGradient",f.id+"_gradient");h.setAttributeNS(null,"cx","50%");h.setAttributeNS(null,"cy","50%");h.setAttributeNS(null,"r","50%");h.setAttributeNS(null,"fx",f.visProp.gradientpositionx*100+"%");h.setAttributeNS(null,"fy",f.visProp.gradientpositiony*100+"%");m=this.createPrim("stop",f.id+"_gradient1");m.setAttributeNS(null,"offset","0%");m.setAttributeNS(null,"style","stop-color:"+f.visProp.gradientsecondcolor+";stop-opacity:"+f.visProp.gradientsecondopacity);l=this.createPrim("stop",f.id+"_gradient2");l.setAttributeNS(null,"offset","100%");l.setAttributeNS(null,"style","stop-color:"+g+";stop-opacity:"+i);h.appendChild(m);h.appendChild(l);this.defs.appendChild(h);n.setAttributeNS(null,"style","fill:url(#"+this.container.id+"_"+f.id+"_gradient)");f.gradNode1=m;f.gradNode2=l}else{n.removeAttributeNS(null,"style")}}},updateGradient:function(g){var e=g.gradNode1,d=g.gradNode2,f,h;if(!JXG.exists(e)||!JXG.exists(d)){return}h=JXG.evaluate(g.visProp.fillopacity);h=(h>0)?h:0;f=JXG.evaluate(g.visProp.fillcolor);if(g.visProp.gradient==="linear"){e.setAttributeNS(null,"style","stop-color:"+f+";stop-opacity:"+h);d.setAttributeNS(null,"style","stop-color:"+g.visProp.gradientsecondcolor+";stop-opacity:"+g.visProp.gradientsecondopacity)}else{if(g.visProp.gradient==="radial"){e.setAttributeNS(null,"style","stop-color:"+g.visProp.gradientsecondcolor+";stop-opacity:"+g.visProp.gradientsecondopacity);d.setAttributeNS(null,"style","stop-color:"+f+";stop-opacity:"+h)}}},setObjectFillColor:function(e,h,j){var f,g=JXG.evaluate(h),k,l,d=JXG.evaluate(j),i;d=(d>0)?d:0;if(e.visPropOld.fillcolor===g&&e.visPropOld.fillopacity===d){return}if(JXG.exists(g)&&g!==false){if(g.length!=9){k=g;i=d}else{l=JXG.rgba2rgbo(g);k=l[0];i=d*l[1]}f=e.rendNode;f.setAttributeNS(null,"fill",k);if(e.type===JXG.OBJECT_TYPE_IMAGE){f.setAttributeNS(null,"opacity",i)}else{f.setAttributeNS(null,"fill-opacity",i)}if(JXG.exists(e.visProp.gradient)){this.updateGradient(e)}}e.visPropOld.fillcolor=g;e.visPropOld.fillopacity=d},setObjectStrokeColor:function(e,h,i){var g=JXG.evaluate(h),k,l,d=JXG.evaluate(i),j,f;d=(d>0)?d:0;if(e.visPropOld.strokecolor===g&&e.visPropOld.strokeopacity===d){return}if(JXG.exists(g)&&g!==false){if(g.length!=9){k=g;j=d}else{l=JXG.rgba2rgbo(g);k=l[0];j=d*l[1]}f=e.rendNode;if(e.type===JXG.OBJECT_TYPE_TEXT){if(e.visProp.display==="html"){f.style.color=k;f.style.opacity=j}else{f.setAttributeNS(null,"style","fill:"+k);f.setAttributeNS(null,"style","fill-opacity:"+j)}}else{f.setAttributeNS(null,"stroke",k);f.setAttributeNS(null,"stroke-opacity",j)}if(e.type===JXG.OBJECT_TYPE_ARROW){this._setArrowAtts(e.rendNodeTriangle,k,j,e.visProp.strokewidth)}else{if(e.elementClass===JXG.OBJECT_CLASS_CURVE||e.elementClass===JXG.OBJECT_CLASS_LINE){if(e.visProp.firstarrow){this._setArrowAtts(e.rendNodeTriangleStart,k,j,e.visProp.strokewidth)}if(e.visProp.lastarrow){this._setArrowAtts(e.rendNodeTriangleEnd,k,j,e.visProp.strokewidth)}}}}e.visPropOld.strokecolor=g;e.visPropOld.strokeopacity=d},setObjectStrokeWidth:function(f,e){var d=JXG.evaluate(e),g;if(f.visPropOld.strokewidth===d){return}g=f.rendNode;this.setPropertyPrim(g,"stroked","true");if(JXG.exists(d)){this.setPropertyPrim(g,"stroke-width",d+"px");if(f.type===JXG.OBJECT_TYPE_ARROW){this._setArrowAtts(f.rendNodeTriangle,f.visProp.strokecolor,f.visProp.strokeopacity,d)}else{if(f.elementClass===JXG.OBJECT_CLASS_CURVE||f.elementClass===JXG.OBJECT_CLASS_LINE){if(f.visProp.firstarrow){this._setArrowAtts(f.rendNodeTriangleStart,f.visProp.strokecolor,f.visProp.strokeopacity,d)}if(f.visProp.lastarrow){this._setArrowAtts(f.rendNodeTriangleEnd,f.visProp.strokecolor,f.visProp.strokeopacity,d)}}}}f.visPropOld.strokewidth=d},setShadow:function(d){if(d.visPropOld.shadow===d.visProp.shadow){return}if(JXG.exists(d.rendNode)){if(d.visProp.shadow){d.rendNode.setAttributeNS(null,"filter","url(#"+this.container.id+"_f1)")}else{d.rendNode.removeAttributeNS(null,"filter")}}d.visPropOld.shadow=d.visProp.shadow},suspendRedraw:function(){},unsuspendRedraw:function(){},resize:function(d,e){this.svgRoot.style.width=parseFloat(d)+"px";this.svgRoot.style.height=parseFloat(e)+"px"}});JXG.VMLRenderer=function(d){this.type="vml";this.container=d;this.container.style.overflow="hidden";this.container.onselectstart=function(){return false};this.resolution=10;if(!JXG.exists(JXG.vmlStylesheet)){d.ownerDocument.namespaces.add("jxgvml","urn:schemas-microsoft-com:vml");JXG.vmlStylesheet=this.container.ownerDocument.createStyleSheet();JXG.vmlStylesheet.addRule(".jxgvml","behavior:url(#default#VML)")}try{!d.ownerDocument.namespaces.jxgvml&&d.ownerDocument.namespaces.add("jxgvml","urn:schemas-microsoft-com:vml");this.createNode=function(e){return d.ownerDocument.createElement("')}}catch(f){this.createNode=function(e){return d.ownerDocument.createElement("<"+e+' xmlns="urn:schemas-microsoft.com:vml" class="jxgvml">')}}this.dashArray=["Solid","1 1","ShortDash","Dash","LongDash","ShortDashDot","LongDashDot"]};JXG.VMLRenderer.prototype=new JXG.AbstractRenderer();JXG.extend(JXG.VMLRenderer.prototype,{_setAttr:function(g,f,i,d){try{if(document.documentMode===8){g[f]=i}else{g.setAttribute(f,i,d)}}catch(h){JXG.debug("_setAttr: "+f+" "+i+"
\n")}},updateTicks:function(h,j,e,k,g){var f=[],l,m,n,o,d=this.resolution;m=h.ticks.length;for(l=0;l0){q=g.rendNode.style.filter.toString();if(!q.match(/DXImageTransform/)){j.style.filter="progid:DXImageTransform.Microsoft.Matrix(M11='1.0', sizingMethod='auto expand') "+q}k=this.joinTransforms(g,r);f[0]=JXG.Math.matVecMult(k,g.coords.scrCoords);f[0][1]/=f[0][0];f[0][2]/=f[0][0];f[1]=JXG.Math.matVecMult(k,[1,g.coords.scrCoords[1]+g.size[0],g.coords.scrCoords[2]]);f[1][1]/=f[1][0];f[1][2]/=f[1][0];f[2]=JXG.Math.matVecMult(k,[1,g.coords.scrCoords[1]+g.size[0],g.coords.scrCoords[2]-g.size[1]]);f[2][1]/=f[2][0];f[2][2]/=f[2][0];f[3]=JXG.Math.matVecMult(k,[1,g.coords.scrCoords[1],g.coords.scrCoords[2]-g.size[1]]);f[3][1]/=f[3][0];f[3][2]/=f[3][0];e=f[0][1];l=f[0][1];d=f[0][2];h=f[0][2];for(n=1;n<4;n++){e=Math.max(e,f[n][1]);l=Math.min(l,f[n][1]);d=Math.max(d,f[n][2]);h=Math.min(h,f[n][2])}j.style.left=parseInt(l)+"px";j.style.top=parseInt(h)+"px";j.filters.item(0).M11=k[1][1];j.filters.item(0).M12=k[1][2];j.filters.item(0).M21=k[2][1];j.filters.item(0).M22=k[2][2]}},updateImageURL:function(e){var d=JXG.evaluate(e.url);this._setAttr(e.rendNode,"src",d)},appendChildPrim:function(d,e){if(!JXG.exists(e)){e=0}d.style.zIndex=e;this.container.appendChild(d)},appendNodesToElement:function(d,e){if(e==="shape"||e==="path"||e==="polygon"){d.rendNodePath=this.getElementById(d.id+"_path")}d.rendNodeFill=this.getElementById(d.id+"_fill");d.rendNodeStroke=this.getElementById(d.id+"_stroke");d.rendNodeShadow=this.getElementById(d.id+"_shadow");d.rendNode=this.getElementById(d.id)},createPrim:function(e,j){var f,d=this.createNode("fill"),i=this.createNode("stroke"),h=this.createNode("shadow"),g;this._setAttr(d,"id",this.container.id+"_"+j+"_fill");this._setAttr(i,"id",this.container.id+"_"+j+"_stroke");this._setAttr(h,"id",this.container.id+"_"+j+"_shadow");if(e==="circle"||e==="ellipse"){f=this.createNode("oval");f.appendChild(d);f.appendChild(i);f.appendChild(h)}else{if(e==="polygon"||e==="path"||e==="shape"||e==="line"){f=this.createNode("shape");f.appendChild(d);f.appendChild(i);f.appendChild(h);g=this.createNode("path");this._setAttr(g,"id",this.container.id+"_"+j+"_path");f.appendChild(g)}else{f=this.createNode(e);f.appendChild(d);f.appendChild(i);f.appendChild(h)}}f.style.position="absolute";f.style.left="0px";f.style.top="0px";this._setAttr(f,"id",this.container.id+"_"+j);return f},remove:function(d){if(JXG.exists(d)){d.removeNode(true)}},makeArrows:function(e){var d;if(e.visPropOld.firstarrow===e.visProp.firstarrow&&e.visPropOld.lastarrow===e.visProp.lastarrow){return}if(e.visProp.firstarrow){d=e.rendNodeStroke;this._setAttr(d,"startarrow","block");this._setAttr(d,"startarrowlength","long")}else{d=e.rendNodeStroke;if(JXG.exists(d)){this._setAttr(d,"startarrow","none")}}if(e.visProp.lastarrow){d=e.rendNodeStroke;this._setAttr(d,"id",this.container.id+"_"+e.id+"stroke");this._setAttr(d,"endarrow","block");this._setAttr(d,"endarrowlength","long")}else{d=e.rendNodeStroke;if(JXG.exists(d)){this._setAttr(d,"endarrow","none")}}e.visPropOld.firstarrow=e.visProp.firstarrow;e.visPropOld.lastarrow=e.visProp.lastarrow},updateEllipsePrim:function(e,d,h,g,f){e.style.left=parseInt(d-g)+"px";e.style.top=parseInt(h-f)+"px";e.style.width=parseInt(Math.abs(g)*2)+"px";e.style.height=parseInt(Math.abs(f)*2)+"px"},updateLinePrim:function(k,e,d,g,f,i){var h,j=this.resolution;if(!isNaN(e+d+g+f)){h=["m ",parseInt(j*e),", ",parseInt(j*d)," l ",parseInt(j*g),", ",parseInt(j*f)];this.updatePathPrim(k,h,i)}},updatePathPrim:function(f,g,e){var d=e.canvasWidth,h=e.canvasHeight;if(g.length<=0){g=["m 0,0"]}f.style.width=d;f.style.height=h;this._setAttr(f,"coordsize",[parseInt(this.resolution*d),parseInt(this.resolution*h)].join(","));this._setAttr(f,"path",g.join(""))},updatePathStringPoint:function(e,k,h){var j=[],f=Math.round,g=e.coords.scrCoords,i=k*Math.sqrt(3)*0.5,l=k*0.5,d=this.resolution;if(h==="x"){j.push([" m ",f(d*(g[1]-k)),", ",f(d*(g[2]-k))," l ",f(d*(g[1]+k)),", ",f(d*(g[2]+k))," m ",f(d*(g[1]+k)),", ",f(d*(g[2]-k))," l ",f(d*(g[1]-k)),", ",f(d*(g[2]+k))].join(""))}else{if(h==="+"){j.push([" m ",f(d*(g[1]-k)),", ",f(d*(g[2]))," l ",f(d*(g[1]+k)),", ",f(d*(g[2]))," m ",f(d*(g[1])),", ",f(d*(g[2]-k))," l ",f(d*(g[1])),", ",f(d*(g[2]+k))].join(""))}else{if(h==="<>"){j.push([" m ",f(d*(g[1]-k)),", ",f(d*(g[2]))," l ",f(d*(g[1])),", ",f(d*(g[2]+k))," l ",f(d*(g[1]+k)),", ",f(d*(g[2]))," l ",f(d*(g[1])),", ",f(d*(g[2]-k))," x e "].join(""))}else{if(h==="^"){j.push([" m ",f(d*(g[1])),", ",f(d*(g[2]-k))," l ",f(d*(g[1]-i)),", ",f(d*(g[2]+l))," l ",f(d*(g[1]+i)),", ",f(d*(g[2]+l))," x e "].join(""))}else{if(h==="v"){j.push([" m ",f(d*(g[1])),", ",f(d*(g[2]+k))," l ",f(d*(g[1]-i)),", ",f(d*(g[2]-l))," l ",f(d*(g[1]+i)),", ",f(d*(g[2]-l))," x e "].join(""))}else{if(h===">"){j.push([" m ",f(d*(g[1]+k)),", ",f(d*(g[2]))," l ",f(d*(g[1]-l)),", ",f(d*(g[2]-i))," l ",f(d*(g[1]-l)),", ",f(d*(g[2]+i))," l ",f(d*(g[1]+k)),", ",f(d*(g[2]))].join(""))}else{if(h==="<"){j.push([" m ",f(d*(g[1]-k)),", ",f(d*(g[2]))," l ",f(d*(g[1]+l)),", ",f(d*(g[2]-i))," l ",f(d*(g[1]+l)),", ",f(d*(g[2]+i))," x e "].join(""))}}}}}}}return j},updatePathStringPrim:function(e){var l=[],k,n,d=this.resolution,j=Math.round,g=" m ",h=" l ",o=" c ",f=g,p=(e.visProp.curvetype!=="plot"),m=Math.min(e.numberPoints,8192);if(e.numberPoints<=0){return""}m=Math.min(m,e.points.length);if(e.bezierDegree==1){if(p&&e.board.options.curve.RDPsmoothing){e.points=JXG.Math.Numerics.RamerDouglasPeuker(e.points,1)}for(k=0;k20000){n[1]=20000}else{if(n[1]<-20000){n[1]=-20000}}if(n[2]>20000){n[2]=20000}else{if(n[2]<-20000){n[2]=-20000}}l.push([f,j(d*n[1]),", ",j(d*n[2])].join(""));f=h}}}else{if(e.bezierDegree==3){k=0;while(k20000){u[1]=20000}else{if(u[1]<-20000){u[1]=-20000}}if(u[2]>20000){u[2]=20000}else{if(u[2]<-20000){u[2]=-20000}}if(h==l){q.push([h,n(d*(u[1]+0*t*(2*o*Math.random()-o)))," ",n(d*(u[2]+0*t*(2*o*Math.random()-o)))].join(""))}else{q.push([h,n(d*(k+(u[1]-k)*0.333+t*(2*o*Math.random()-o)))," ",n(d*(e+(u[2]-e)*0.333+t*(2*o*Math.random()-o)))," ",n(d*(k+2*(u[1]-k)*0.333+t*(2*o*Math.random()-o)))," ",n(d*(e+2*(u[2]-e)*0.333+t*(2*o*Math.random()-o)))," ",n(d*u[1])," ",n(d*u[2])].join(""))}h=m;k=u[1];e=u[2]}}}q.push(" e");return q},updatePolygonPrim:function(h,f){var e,d=f.vertices.length,g=this.resolution,j,k=[];this._setAttr(h,"stroked","false");j=f.vertices[0].coords.scrCoords;if(isNaN(j[1]+j[2])){return}k.push(["m ",parseInt(g*j[1]),",",parseInt(g*j[2])," l "].join(""));for(e=1;e=0){g.style.width=e+"px"}if(f>=0){g.style.height=f+"px"}},setPropertyPrim:function(g,f,h){var e="",d;switch(f){case"stroke":e="strokecolor";break;case"stroke-width":e="strokeweight";break;case"stroke-dasharray":e="dashstyle";break}if(e!==""){d=JXG.evaluate(h);this._setAttr(g,e,d)}},show:function(d){if(d&&d.rendNode){d.rendNode.style.visibility="inherit"}},hide:function(d){if(d&&d.rendNode){d.rendNode.style.visibility="hidden"}},setDashStyle:function(e,d){var f;if(d.dash>=0){f=e.rendNodeStroke;this._setAttr(f,"dashstyle",this.dashArray[d.dash])}},setGradient:function(e){var d=e.rendNodeFill;if(e.visProp.gradient==="linear"){this._setAttr(d,"type","gradient");this._setAttr(d,"color2",e.visProp.gradientsecondcolor);this._setAttr(d,"opacity2",e.visProp.gradientsecondopacity);this._setAttr(d,"angle",e.visProp.gradientangle)}else{if(e.visProp.gradient==="radial"){this._setAttr(d,"type","gradientradial");this._setAttr(d,"color2",e.visProp.gradientsecondcolor);this._setAttr(d,"opacity2",e.visProp.gradientsecondopacity);this._setAttr(d,"focusposition",e.visProp.gradientpositionx*100+"%,"+e.visProp.gradientpositiony*100+"%");this._setAttr(d,"focussize","0,0")}else{this._setAttr(d,"type","solid")}}},setObjectFillColor:function(e,h,i){var g=JXG.evaluate(h),k,l,d=JXG.evaluate(i),j,f=e.rendNode,m;d=(d>0)?d:0;if(e.visPropOld.fillcolor===g&&e.visPropOld.fillopacity===d){return}if(JXG.exists(g)&&g!==false){if(g.length!=9){k=g;j=d}else{l=JXG.rgba2rgbo(g);k=l[0];j=d*l[1]}if(k==="none"||k===false){this._setAttr(e.rendNode,"filled","false")}else{this._setAttr(e.rendNode,"filled","true");this._setAttr(e.rendNode,"fillcolor",k);if(JXG.exists(j)&&e.rendNodeFill){this._setAttr(e.rendNodeFill,"opacity",(j*100)+"%")}}if(e.type===JXG.OBJECT_TYPE_IMAGE){m=e.rendNode.style.filter.toString();if(m.match(/alpha/)){e.rendNode.style.filter=m.replace(/alpha\(opacity *= *[0-9\.]+\)/,"alpha(opacity = "+(j*100)+")")}else{e.rendNode.style.filter+=" alpha(opacity = "+(j*100)+")"}}}e.visPropOld.fillcolor=g;e.visPropOld.fillopacity=d},setObjectStrokeColor:function(f,i,j){var h=JXG.evaluate(i),l,m,e=JXG.evaluate(j),k,g=f.rendNode,d;e=(e>0)?e:0;if(f.visPropOld.strokecolor===h&&f.visPropOld.strokeopacity===e){return}if(JXG.exists(h)&&h!==false){if(h.length!=9){l=h;k=e}else{m=JXG.rgba2rgbo(h);l=m[0];k=e*m[1]}if(f.type===JXG.OBJECT_TYPE_TEXT){k=Math.round(k*100);g.style.filter=" alpha(opacity = "+k+")";g.style.color=l}else{if(l!==false){this._setAttr(g,"stroked","true");this._setAttr(g,"strokecolor",l)}d=f.rendNodeStroke;if(JXG.exists(k)&&f.type!==JXG.OBJECT_TYPE_IMAGE){this._setAttr(d,"opacity",(k*100)+"%")}}}f.visPropOld.strokecolor=h;f.visPropOld.strokeopacity=e},setObjectStrokeWidth:function(f,e){var d=JXG.evaluate(e),g;if(f.visPropOld.strokewidth===d){return}g=f.rendNode;this.setPropertyPrim(g,"stroked","true");if(JXG.exists(d)){this.setPropertyPrim(g,"stroke-width",d)}f.visPropOld.strokewidth=d},setShadow:function(d){var e=d.rendNodeShadow;if(!e||d.visPropOld.shadow===d.visProp.shadow){return}if(d.visProp.shadow){this._setAttr(e,"On","True");this._setAttr(e,"Offset","3pt,3pt");this._setAttr(e,"Opacity","60%");this._setAttr(e,"Color","#aaaaaa")}else{this._setAttr(e,"On","False")}d.visPropOld.shadow=d.visProp.shadow},suspendRedraw:function(){this.container.style.display="none"},unsuspendRedraw:function(){this.container.style.display=""}});JXG.CanvasRenderer=function(d){var e;this.type="canvas";this.canvasRoot=null;this.suspendHandle=null;this.canvasId=JXG.Util.genUUID();this.canvasNamespace=null;this.container=d;this.container.style.MozUserSelect="none";this.container.style.overflow="hidden";if(this.container.style.position===""){this.container.style.position="relative"}this.container.innerHTML=['