
//-------------------------LOC POINTS-----------------------------//
//---on clear----
function initLocPoints()
{

	TrueCoords = Oz.createSVGPoint();
	GrabPoint = Oz.createSVGPoint();
	Oz.setAttribute("onclick","LocatePnt(evt)")
	BackDrop=Wizard.getElementById("canvas")
	BackDrop.setAttribute("pointer-events","all")

	SelectString=","
	PrevX=0
	PrevY=0

}

//----onclick, when svg cleared-----
var SelectNum=0
//--provided at command form; ref for relative points---
var PrevX=0
var PrevY=0
var TagLocTag
var RelPointArray=[]; //--each relative point and its refX, refy value
RelPointArray[0]="" //--remains 'blank'---
RelPointArray[1]=""
RelPointArray[2]=""
RelPointArray[3]=""
RelPointArray[4]=""
RelPointArray[5]=""
RelPointArray[6]=""
RelPointArray[7]=""
RelPointArray[8]=""
RelPointArray[9]=""
RelPointArray[10]=""


function LocatePnt(evt)
{


	var target=evt.target()
	if(target.nodeName!="circle" && Command!="" && ShowInit==false) //---showInit prevents locPnt until change after show select---
	{
		//---only one loc point per x,y loc---
		if(SelectString.indexOf(","+SelectNum+",")==-1)
		{
			if(SelectNum==1 && YellowBrickRoad.getAttribute("d")=="")
			{
				importTextValue.value="OK, now select the next command. Then click to locate its point(s) sequentially..."
				select1Span.disabled=true
				select2Span.disabled=false
				select2Span.style.borderWidth=2

			}
			var cx=evt.clientX
			var cy=evt.clientY


			//---compute relative points----
				var relCom="achlmqstvz"
			//---add command to circle----
			if(Command!="+" && Command!="C2")  //---C3 is 3rd point of c/C command---
			{
				var textElem=Wizard.createElement("text")
				textElem.setAttribute("id","TagLoc"+SelectNum)
				textElem.setAttribute("x",0)
				textElem.setAttribute("y",8)
				textElem.setAttribute("font-size",20)
				textElem.setAttribute("font-family","arial")
				textElem.setAttribute("font-weight","bold")
				textElem.setAttribute("fill","black")
				textElem.setAttribute("text-anchor","middle")
				textElem.setAttribute("pointer-events","none")
				var textNode=Wizard.createTextNode(Command)
				textElem.appendChild(textNode)

				textElem.setAttribute("transform","translate("+cx+" "+cy+")")
				LocLayer.appendChild(textElem)
			}
			else
			{
				var textElem=Wizard.createElement("text")
				textElem.setAttribute("id","NumLoc"+SelectNum)
				textElem.setAttribute("x",0)
				textElem.setAttribute("y",8)
				textElem.setAttribute("font-size",20)
				textElem.setAttribute("font-family","arial")
				textElem.setAttribute("font-weight","bold")
				textElem.setAttribute("fill","black")
				textElem.setAttribute("text-anchor","middle")
				textElem.setAttribute("pointer-events","none")
				var textNode=Wizard.createTextNode(SelectNum)
				textElem.appendChild(textNode)
				textElem.setAttribute("transform","translate("+cx+" "+cy+")")
				LocLayer.appendChild(textElem)

			}

			var circle=Wizard.createElement("circle")
				circle.setAttribute("cx",0)
				circle.setAttribute("cy",0)
				circle.setAttribute("r",15)
				circle.setAttribute("opacity",.6)
				circle.setAttribute("fill","white")
				circle.setAttribute("stroke","none")
				circle.setAttribute("pnt",SelectNum)
	 		   	circle.setAttribute("SelectNum",SelectNum)
				circle.setAttribute("transform","translate("+cx+" "+cy+")")




				LocLayer.appendChild(circle)

				//----relative point----
				if(relCom.indexOf(Command)!=-1)
				{

					var x=cx-PrevX
					var y=cy-PrevY
					circle.setAttribute("prevX",PrevX)
					circle.setAttribute("prevY",PrevY)
					//---used in point drag/drop---
					RelPointArray[SelectNum]=[PrevX,PrevY]

				}
				else
				{
					var x=cx
					var y=cy
				}


				//----holds value for relative point---
				PrevX=cx
				PrevY=cy


				eval("xCom"+SelectNum+"Value.value="+x)
				eval("yCom"+SelectNum+"Value.value="+y)
				eval("xCom"+SelectNum+"Value.style.borderColor=''")
				eval("yCom"+SelectNum+"Value.style.borderColor=''")
				SelectString+=SelectNum+","
/*
				//-----next point increment(C3=3rd pnt of c/C command---
				if(Command=="C3"|| Command=="C2"|| Command=="S" || Command=="s"   ||Command=="Q" || Command=="q"||Command=="A" || Command=="a")
				{

					SelectNum++
					if(Command=="C3")
						Command="C2"
						else
						Command=""

					CommXLocValue=eval("xCom"+SelectNum+"Value")
					CommYLocValue=eval("yCom"+SelectNum+"Value")

				}
					//--increment 2 points---
				else if(Command=="C" || Command=="c" )
				{
					SelectNum++
					Command="C3"
					CommXLocValue=eval("xCom"+SelectNum+"Value")
					CommYLocValue=eval("yCom"+SelectNum+"Value")

				}
*/

   				//--increment 1 point---
				 if(Command=="S" || Command=="s"  || Command=="Q"  || Command=="q" || Command=="A"  || Command=="a" )
				 {
					 SelectNum++
					 Command=SelectNum
					 CommXLocValue=eval("xCom"+SelectNum+"Value")
					 CommYLocValue=eval("yCom"+SelectNum+"Value")
					 eval("select"+(SelectNum )+"Span.style.borderWidth=2")
					 eval("xCom"+(SelectNum )+"Value.style.borderColor='lightgreen'")
					 eval("yCom"+(SelectNum )+"Value.style.borderColor='lightgreen'")


				 }
				 else if(Command=="C" || Command=="c"   )
				 {
					 SelectNum++
					 Command="C2"
					 CommXLocValue=eval("xCom"+SelectNum+"Value")
					 CommYLocValue=eval("yCom"+SelectNum+"Value")
					 eval("select"+(SelectNum )+"Span.style.borderWidth=2")
					 eval("xCom"+(SelectNum )+"Value.style.borderColor='lightgreen'")
					 eval("yCom"+(SelectNum )+"Value.style.borderColor='lightgreen'")


				 }

				 else if(Command=="C2" )
				 {
					 SelectNum++
					 Command=SelectNum
					 CommXLocValue=eval("xCom"+SelectNum+"Value")
					 CommYLocValue=eval("yCom"+SelectNum+"Value")
					 eval("select"+(SelectNum )+"Span.style.borderWidth=2")
					 eval("xCom"+(SelectNum )+"Value.style.borderColor='lightgreen'")
					 eval("yCom"+(SelectNum )+"Value.style.borderColor='lightgreen'")


				 }

				 else

					if(SelectNum<10)
					{
						eval("select"+(SelectNum+1)+"Span.disabled=false")
						eval("select"+(SelectNum+1)+"Span.style.borderWidth=2")
					}

			//----if existing Z, cancel previous and send to this/last point
			for(var k=2;k<SelectNum;k++)
			{
				var zSelect=eval("z"+k+"Select")
				if(zSelect.selectedIndex!=0)
				{
					zIndex=zSelect.selectedIndex
					eval("z"+SelectNum+"Select.selectedIndex="+zIndex)
					zSelect.selectedIndex=0
				}
			}

		       circle.setAttribute("onmousedown","StartDragLoc(evt)")
		       circle.setAttribute("onmousemove","DragLoc(evt)")
		       circle.setAttribute("onmouseup","DropLoc(evt)")

	   		showButton.disabled=false


	   }



	}


}

var DragLocTarget
function StartDragLoc(evt)
{
     if(evt.target!=BackDrop && evt.target.parentNode==LocLayer)
    {
		BackDrop.setAttribute("pointer-events","none")
        DragLocTarget= evt.target;
        //DragLocTarget.setAttribute('pointer-events', 'none');
		Pnt=parseInt(DragLocTarget.getAttribute("pnt"))
		PntTag=Wizard.getElementById("TagLoc"+Pnt)
		NumTag=Wizard.getElementById("NumLoc"+Pnt)


        var transMatrix = DragLocTarget.getCTM();
        CosA=transMatrix.a
        SinA=transMatrix.b
        GrabPoint.x = TrueCoords.x - Number(transMatrix.e);
        GrabPoint.y = TrueCoords.y - Number(transMatrix.f);
    }
};

var XlocValue
var YlocValue
function DragLoc(evt)
{
    TrueCoords.x = (evt.clientX)
    TrueCoords.y = (evt.clientY)
    if (DragLocTarget)
    {
        var newX = TrueCoords.x - GrabPoint.x;
        var newY = TrueCoords.y - GrabPoint.y;

          var matrix = "matrix(" + round2(CosA) +"," + round2(SinA) + "," + round2(-SinA) + ","
        + round2(CosA) + ","+ round2(newX) + "," + round2(newY) + ")";

        DragLocTarget.setAttribute("transform",matrix)
		if(PntTag)PntTag.setAttribute("transform",matrix)
		if(NumTag)NumTag.setAttribute("transform",matrix)

		XlocValue=newX
		YlocValue=newY
    }
};

function DropLoc(evt)
{
    if ( DragLocTarget )
    {
        DragLocTarget.setAttribute('pointer-events',"all");
		var SelectNum=DragLocTarget.getAttribute("SelectNum")

		   //---compute relative values---
		   if(DragLocTarget.getAttribute("prevX"))
		   {

					prevX=DragLocTarget.getAttribute("prevX")
					prevY=DragLocTarget.getAttribute("prevY")

		   			var x=XlocValue-prevX
					var y=YlocValue-prevY

		   }
		   else
		   {


		   			var x=XlocValue
					var y=YlocValue


		   }

		eval("xCom"+SelectNum+"Value.value="+x)
		eval("yCom"+SelectNum+"Value.value="+y)

          DragLocTarget = null;

		BackDrop.setAttribute("pointer-events","all")
    }
};




//---places the drag/drop circles in the path image---
//----values(prev point ref value) needed for v/V,h/H points to locate its circle--
var Vx=null
var Hy=null
function loadDragCircles()
{

	//---remove previous drag circles----
	if(Rainbow.childNodes.length>0)
	{
		for(var k=Rainbow.childNodes.length-1;k>=0;k--)
		{
			Rainbow.removeChild(Rainbow.childNodes.item(k))
		}
	}
	if(LocLayer.childNodes.length>0)
	{
		for(var k=LocLayer.childNodes.length-1;k>=0;k--)
		{
			LocLayer.removeChild(LocLayer.childNodes.item(k))
		}
	}

	Points=YellowBrickRoad.getAttribute("d")
	var points=Points

	//--remove ALL z/Z's----
	var reZ=/,Z/g
	var rez=/,z/g
   //points=points.replace(reZ,"")
   //points=points.replace(rez,"")

	var commaSplit=points.split(",")
	var commaCnt=commaSplit.length
	/*
	//--extract LAST z/Z----
	if(points.indexOf("Z")==-1&&Points.indexOf("z")==-1)
	var commaCnt=commaSplit.length
	else
	var commaCnt=commaSplit.length-1
	*/

	var z=false
	pntCnt=0
	pointNum=1
	var comString="ACHLMQSTVZachlmqstvz"

	for(var k=0;k<commaCnt;k++)
	{
		var valueSplit=commaSplit[k].split(" ")

		//---add text elem to drag circle----
		var command=valueSplit[0]



		if(comString.indexOf(command)==-1)
			command=""

		if(valueSplit.length!=1) //----arc: angle, sw1,sw2---
		{
		   	if(valueSplit.length==3) //---command at start---
			{
				var x=parseInt(valueSplit[1])
				var y=parseInt(valueSplit[2])
			}
			else if(valueSplit.length==2)
			{
				//---is this a v,h command?----
				var vs0=valueSplit[0]

				if(vs0.indexOf("h")==-1 && vs0.indexOf("H")==-1
					&& vs0.indexOf("v")==-1 && vs0.indexOf("V")==-1)
				{
					var x=parseInt(valueSplit[0])
					var y=parseInt(valueSplit[1])
				}
				else
				{
					if(vs0.indexOf("h")!=-1 || vs0.indexOf("H")!=-1)
					{
						var x=parseInt(valueSplit[1])
						var y=Hy

					}
					else if(vs0.indexOf("v")!=-1 || vs0.indexOf("V")!=-1)
					{
						var y=parseInt(valueSplit[1])
						var x=Vx
					}
				}
			}
				//----hold prev values for V/v,H/h drag circle---
				Vx=x
				Hy=y
		//---add command to circle----

			if(command!="")
			{


				var fill="black"
				//---is this a relative point?----
				var relPnt=RelPointArray[pointNum]
		   		var relX=false
				var relY=false
				if(relPnt!="")
				{
					relX=relPnt[0]
					relY=relPnt[1]

					x=relX+x
					y=relY+y
					if( command=="v")
					{
						//x=Vx

					}
					if( command=="h")
					{
						y=Hy
					}

					//---italic, non bold command?----
				}

				var textElem=Wizard.createElement("text")
				textElem.setAttribute("id","Tag"+pntCnt)
				textElem.setAttribute("x",0)
				textElem.setAttribute("y",6)
				textElem.setAttribute("font-size",20)
				textElem.setAttribute("font-family","arial")
				if(relX==false)
					textElem.setAttribute("font-weight","bold")
				else
					textElem.setAttribute("font-style","italic")
				textElem.setAttribute("fill",fill)
				textElem.setAttribute("text-anchor","middle")
				textElem.setAttribute("pointer-events","none")
				var textNode=Wizard.createTextNode(command)
				textElem.appendChild(textNode)
				textElem.setAttribute("transform","translate("+x+" "+y+")")
				Rainbow.appendChild(textElem)

				///----add subscript-----
				var textElem=Wizard.createElement("text")
				textElem.setAttribute("id","Sub"+pntCnt)
				textElem.setAttribute("x",12)
				textElem.setAttribute("y",10)
				textElem.setAttribute("font-size",15)
				textElem.setAttribute("font-family","arial")
        		 if(relX!=false)
					textElem.setAttribute("font-style","italic")

				textElem.setAttribute("fill",fill)
				textElem.setAttribute("text-anchor","middle")
				textElem.setAttribute("pointer-events","none")
				if(z==false) mySub=pntCnt+1
				else
				mySub=pntCnt
				var textNode=Wizard.createTextNode(mySub)
				textElem.appendChild(textNode)
				textElem.setAttribute("transform","translate("+x+" "+y+")")
				Rainbow.appendChild(textElem)


			}
			else //add pnt num to circle
			{


				var textElem=Wizard.createElement("text")
				textElem.setAttribute("id","Num"+pntCnt)
				textElem.setAttribute("x",0)
				textElem.setAttribute("y",6)
				textElem.setAttribute("font-size",22)
				textElem.setAttribute("font-family","arial")
			   //textElem.setAttribute("font-weight","bold")
				textElem.setAttribute("fill","black")
				textElem.setAttribute("text-anchor","middle")
				textElem.setAttribute("pointer-events","none")

				if(z==false) myNum=pointNum
				else
				myNum=pointNum-1
				var textNode=Wizard.createTextNode(myNum)
				textElem.appendChild(textNode)

				textElem.setAttribute("transform","translate("+x+" "+y+")")
				Rainbow.appendChild(textElem)

			}

			for(m=0;m<PlusPointArray.length;m++)
			{
					var plus=PlusPointArray[m]
				   	if(plus==pointNum)
					{
						textElem.setAttribute("fill","magenta")
						break;
					}
			}


	        var circle=Wizard.createElement("circle")
			circle.setAttribute("cx",0)
			circle.setAttribute("cy",0)
			circle.setAttribute("r",12)
			circle.setAttribute("opacity",0)
			circle.setAttribute("fill","white")
			circle.setAttribute("stroke","none")
			circle.setAttribute("pnt",pntCnt)
			circle.setAttribute("pntNum",pointNum)
			if(relX!=false)
			{
				circle.setAttribute("RefX",relX)
				circle.setAttribute("RefY",relY)
			}

 			circle.setAttribute("transform","translate("+x+" "+y+")")
			Rainbow.appendChild(circle)

			pointNum++
		}
		else
		{

			if(command=="Z"||command=="z")
				var z=true
			else
				var z=false

		}
		pntCnt++
	}



	initDragDrop()



}


//=====================drag/Drop======================

function initDragDrop()
{
  	TrueCoords = Oz.createSVGPoint();
  	GrabPoint = Oz.createSVGPoint();
   //---add needed events to Oz and canvas---
      Oz.setAttribute("onmousedown","StartDragDrop(evt)")
      Oz.setAttribute("onmousemove","Drag(evt)")
      Oz.setAttribute("onmouseup","Drop(evt)")
     Oz.setAttribute("onclick","LocatePnt(evt)")
     BackDrop=Wizard.getElementById("canvas")
     BackDrop.setAttribute("pointer-events","all")
}
var BackDrop
var TrueCoords
var GrabPoint
var DragTarget = null;
//---needed for matrix tranform---
var SinA=null
var CosA=null
var Pnt
var PntTag
var NumTag
var SubTag
var Relative=false
var RefX
var RefY
var PointArray=[]
var Zend=""
var DragOnly=false //---added points----
var newScale=1;
var translation=null;
var TransX=0;
var TransY=0;
function StartDragDrop(evt)
{
     if(evt.target!=BackDrop && evt.target.parentNode==Rainbow)
    {
		newScale = Oz.currentScale;
		translation = Oz.currentTranslate;
		TransX=translation.x
		TransY=translation.y
        DragTarget= evt.target;
			DragTarget.setAttribute('pointer-events', 'none');
			Zend=""
			PointArray=[]

			Pnt=parseInt(DragTarget.getAttribute("pnt"))
			PntTag=Wizard.getElementById("Tag"+Pnt)
			NumTag=Wizard.getElementById("Num"+Pnt)
			SubTag=Wizard.getElementById("Sub"+Pnt)
			//---relative points----
			if(DragTarget.getAttribute("RefX"))
			{
				RefX= DragTarget.getAttribute("RefX")
				RefY= DragTarget.getAttribute("RefY")
				Relative=true
			}
			else
				Relative=false

			var pointSplit=Points.split(",")
			var commaCnt=pointSplit.length
			/*
			if(Points.indexOf("Z")!=-1 || Points.indexOf("z")!=-1)
			{
				if(Points.indexOf("Z")!=-1)
					Zend=",Z"
				else
					Zend=",z"
				commaCnt=pointSplit.length-1
			}
			*/
			for(var k=0;k<commaCnt;k++)
			{
				PointArray[PointArray.length]=pointSplit[k]
			}


        var transMatrix = DragTarget.getCTM();
        CosA=transMatrix.a
        SinA=transMatrix.b
        GrabPoint.x = TrueCoords.x - Number(transMatrix.e);
        GrabPoint.y = TrueCoords.y - Number(transMatrix.f);
    }
};

function Drag(evt)
{
	TrueCoords.x = (evt.clientX - TransX)/newScale;
	TrueCoords.y = (evt.clientY - TransY)/newScale;
    if (DragTarget)
    {
        var newX = TrueCoords.x - GrabPoint.x;
        var newY = TrueCoords.y - GrabPoint.y;

          var matrix = "matrix(" + round2(CosA) +"," + round2(SinA) + "," + round2(-SinA) + ","
        + round2(CosA) + ","+ round2(newX) + "," + round2(newY) + ")";

        DragTarget.setAttribute("transform",matrix)
		if(PntTag)PntTag.setAttribute("transform",matrix)
		if(NumTag)NumTag.setAttribute("transform",matrix)
		if(SubTag)SubTag.setAttribute("transform",matrix)

			 command=""
			 thisPnt=PointArray[Pnt]
			 spaceSplit=thisPnt.split(" ")

			if(spaceSplit.length==3)
			{
				command=spaceSplit[0]+" "

		 	}
			//--relative points---
			if(Relative==true)
			{
				newX=newX-RefX
				newY=newY-RefY
			}

			XlocValue=newX
			YlocValue=newY


			//-----horizontal or vertical line---
			var space=" "
			var ss0=spaceSplit[0]
			if(ss0=="V"||ss0=="v"||ss0=="H"||ss0=="h")
			{
				command=spaceSplit[0]+" "
				if(command=="V "||command=="v ")
				{
					newX=""
					space=""
				}
				if(command=="H "||command=="h ")
				{
					newY=""
					space=""
				}
			}

			//if(PointArray[Pnt]=="Z"||PointArray[Pnt]=="z")
				//Pnt=Pnt+1
			PointArray[Pnt]=command+newX+space+newY

			newPoints=""
			for(var k=0;k<PointArray.length;k++)
			{
				if(k<PointArray.length-1)
				newPoints+=PointArray[k]+","
				else
				newPoints+=PointArray[k]
			}


			newPoints+=Zend

		YellowBrickRoad.setAttribute("d", newPoints)

    }
};

function Drop(evt)
{
    if ( DragTarget )
    {
		DragTarget.setAttribute('pointer-events',"all");
		var pntNum=DragTarget.getAttribute("pntNum")
		DragTarget = null;
		Points=YellowBrickRoad.getAttribute("d")
		importTextValue.value=Points
			//----update form----

	   			var x=XlocValue
				var y=YlocValue

		eval("xCom"+(pntNum)+"Value.value="+x)
		eval("yCom"+(pntNum)+"Value.value="+y)

		//----recompute rel points, x,y to 'image' locs, ---




    }
};
//---on zoom---
//---Adobe Viewer requires the onzoom call to be resident---
function resetMatrix()
{
	newScale = Oz.currentScale;
	translation = Oz.currentTranslate;
	TransX=translation.x
	TransY=translation.y
}



