var rb = new jsGraphics("rubberband"); //rubberbandlayer
var pl = new jsGraphics("polyline"); // polylinelayer
var linecolor = "#ff0000";
var fillcolor = "#c0c0c0";
var linewidth = 2;
var handlesHeight = 4;
var handlesWidth = 4;
var showLength = true; // Show length information..or not.
var showRubberbandLength = true; // Show the length of the rubberband
var savePoly = false;
var Xpoints = new Array();
var Ypoints = new Array();
var savedXpoints = new Array();
var savedYpoints = new Array();
var startX = 0;
var startY = 0;
var currentX = 0;
var currentY = 0;
var circleCenterX = 0;
var circleCenterY = 0;
var activate_rb = false;
var close_pl = false;
var startNewSelection = true;
var circleCentreSaved=false;
rb.setStroke(linewidth);
rb.setColor(linecolor);
pl.setColor(linecolor);
pl.setStroke(linewidth);
function activateRubberband(e)
{
if (startNewSelection)
{
clickCount = 0;
startNewSelection = false;
}
currentX = mouseX;
currentY = mouseY;
getMapXY(currentX,currentY);
clickPointX[clickCount]=mapX;
clickPointY[clickCount]=mapY;
if ((toolMode==22)&&(!circleCentreSaved)) // Save circle centre points
{
circleCenterX = mapX;
circleCenterY = mapY;
circleCentreSaved=true;
}
clickCount += 1;
activate_rb = true;
// Get hold of the starting coordinates.
if (clickCount == 1)
{
resetPolyline(); // Delete polygon.
pl.setColor(linecolor);
startX = currentX;
startY = currentY;
drawHandles();
if (toolMode==22) {
//calcDistance(mapX,mapY);
clickCount--; // If we're using circle selection, just use rubberband.
}
}
// Start drawing the polyline.
if (clickCount > 1)
{
drawPolyline();
}
}
function deactivateRubberband()
{
rb.clear();
activate_rb = false;
}
function resetPolyline()
{
pl.clear();
}
function drawRubberband(e)
{
var x1 = mouseX;
var y1 = mouseY;
rb.clear();
rb.drawLine(currentX,currentY,x1,y1); // coordinates related to the document.
// Show rubberband length when measure and circleselection
if ((showRubberbandLength)&&((toolMode==20)||(toolMode==22))) displayRubberbandLength();
if (toolMode==22) drawDynamicCircle(e); // Draw the circle when moving mouse.
if (clickCount > 1)
{
if (toolMode==13) {
rb.setStroke(-1);
rb.drawLine(x1,y1,startX,startY);
rb.setStroke(1);
}
}
rb.paint();
}
function drawPolyline(e)
{
addElement();
drawHandles();
pl.drawLine(Xpoints[Xpoints.length - 1],Ypoints[Ypoints.length - 1],Xpoints[Xpoints.length - 2],Ypoints[Ypoints.length - 2]);
if ((showLength)&&(toolMode==20))
{
displayLength();    // hide when measure area

}
pl.paint();
}
function drawDynamicCircle(e)
{
var x1 = mouseX;
var y1 = mouseY;
var dx = parseInt(x1-currentX);
var dy = parseInt(y1-currentY);
var ch = Math.round(2*(Math.sqrt((Math.pow(dx,2))+(Math.pow(dy,2)))))/1;
var cx = parseInt(currentX-(ch/2));
var cy = parseInt(currentY-(ch/2));
rb.drawEllipse(cx,cy,ch,ch);
}
function drawHandles()
{
var eCen = parseInt((handlesHeight/2));
if (clickCount>1)
{
for (i=0;i<Xpoints.length;i++)
{
pl.drawRect((Xpoints[i]-eCen),(Ypoints[i]-eCen),handlesWidth,handlesHeight);
}
}
else pl.drawRect((startX-eCen),(startY-eCen),handlesWidth,handlesHeight);
pl.paint();
}
function closePolyline(e)
{
close_pl = true;
// Draw the last line
drawPolyline(e);
close_pl = false;
if (savePoly) {
for (var i=0;i<Xpoints.length;i++)
{
savedXpoints[i] = Xpoints[i];
savedYpoints[i] = Ypoints[i];
}
}

// Reset mapclicks and x,y array.
Xpoints.length = null;
Ypoints.length = null;

// Starover to draw the polyline
startNewSelection = true;
resetPolyline();
}
function addElement()
{
var xsize = Xpoints.length;
var ysize = Ypoints.length;
if ((xsize>0) && (ysize>0)) // Add more points...
{
// Keep on adding more coordinates.
if (!close_pl)
{
Xpoints[xsize] = currentX;
Ypoints[ysize] = currentY;
}
else
{
Xpoints[xsize] = currentX;
Ypoints[ysize] = currentY;
Xpoints[xsize+1] = startX;
Ypoints[ysize+1] = startY;
}
}
else // Add the FIRST coordinates.
{
Xpoints[0] = startX;
Xpoints[1] = currentX;
Ypoints[0] = startY;
Ypoints[1] = currentY;
}
}
function drawSavedPolygon()
{
if ((savedXpoints.length > 0) && (savedYpoints.length > 0))
{
pl.setColor(fillcolor);
pl.fillPolygon(savedXpoints,savedYpoints);
pl.paint();
}
else
{
alert("No polygon in memory!\nLängd: "+savedXpoints);
}
}
function displayLength()
{
var xsize = Xpoints.length;
var ysize = Ypoints.length;
var textX, textY;
var dx = parseInt(Xpoints[xsize-1])-(Xpoints[xsize-2]);
var dy = parseInt(Ypoints[ysize-1])-(Ypoints[ysize-2]);
//var l = Math.round(Math.sqrt((Math.pow(dx,2))+(Math.pow(dy,2))))/1;
// Fix text X placement
if (dx<0) textX = parseInt(Xpoints[xsize-2]+(dx/2));
else textX  = parseInt((Xpoints[xsize-2]+(dx/2)));
// Fix text Y placement
if (dy<0) textY = parseInt(Ypoints[ysize-2]+(dy/2));
else textY = parseInt(Ypoints[ysize-2]+(dy/2));
pl.setFont("verdana","10px",Font.ITALIC);
pl.drawString(currentMeasure,textX,textY);
}
function displayRubberbandLength()
{
var textX, textY;
var x1 = mouseX;
var y1 = mouseY;
var dx = parseInt(x1-currentX);
var dy = parseInt(y1-currentY);
// Fix text X placement
if (dx<0) textX = parseInt(currentX+(dx/2));
else textX  = parseInt((currentX+(dx/2)));
// Fix text Y placement
if (dy<0) textY = parseInt(currentY+(dy/2));
else textY = parseInt(currentY+(dy/2));
rb.setFont("verdana","10px",Font.ITALIC);
rb.drawString(currentMeasure,textX,textY);
}
