////////////////////////////////////////////////////////////////////////////////
//
// Copyright 2002 Earth Resource Mapping Pty Ltd.
// Copyright 2005 Digitech International S.A.
//
// This code is derieved from the original with changed colors and some functions:
// /ecwplugins/lib/Scripts/DTOverlayRect.js
//
////////////////////////////////////////////////////////////////////////////////

function DTOverlayRect()
{
	this.dOverlayWorldTLX = 0.0;
	this.dOverlayWorldTLY = 0.0;
	this.dOverlayWorldBRX = 0.0;
	this.dOverlayWorldBRY = 0.0;

	this.ECWViewController = null;
	this.ECWViewSlave = null;

    this.foreground = "#0000FF";
    this.background = "#FFFFFF";
    this.transparency = 0.25;
}

function DTOverlayRect_ResetLayers()
{
	var top   = this.ECWViewController.GetNumberLayers();
	var index = this.ECWViewController.GetLayerIndex("DTOverlayRect");
	this.ECWViewController.MoveLayer(index, top-1);
}

function DTOverlayRect_Init(controllView, slaveView)
{
	if(controllView == null || slaveView == null)
        return;

    this.ECWViewController = controllView;
    this.ECWViewSlave = slaveView;
}

function DTOverlayRect_Move(dWorldX, dWorldY, bUpdateSlave)
{
	var dWorldTLX, dWorldTLY, dWorldBRX, dWorldBRY;
	var halfWidthX, halfWidthY;

	halfWidthX = (this.dOverlayWorldBRX - this.dOverlayWorldTLX)/2.0;
	if(this.dOverlayWorldBRY > this.dOverlayWorldTLY) {
		halfWidthY = (this.dOverlayWorldBRY - this.dOverlayWorldTLY)/2.0;
	} else {
		halfWidthY = (this.dOverlayWorldTLY - this.dOverlayWorldBRY)/2.0;
	}

	dWorldTLX = dWorldX - halfWidthX;
	dWorldBRX = dWorldX + halfWidthX;

	if(this.dOverlayWorldBRY > this.dOverlayWorldTLY) {
		dWorldTLY = dWorldY - halfWidthY;
		dWorldBRY = dWorldY + halfWidthY;
	} else {
		dWorldTLY = dWorldY + halfWidthY;
		dWorldBRY = dWorldY - halfWidthY;
	}

	this.SetRect(dWorldTLX, dWorldTLY, dWorldBRX, dWorldBRY, bUpdateSlave);
}

// Changes rect position
function DTOverlayRect_SetRect(dWorldTLX, dWorldTLY, dWorldBRX, dWorldBRY, bUpdateSlave)
{
    if(this.ECWViewController == null || this.ECWViewSlave == null)
        return;

	var sParams = "";

	this.dOverlayWorldTLX = dWorldTLX;
	this.dOverlayWorldTLY = dWorldTLY;
	this.dOverlayWorldBRX = dWorldBRX;
	this.dOverlayWorldBRY = dWorldBRY;

	var vecObject = "";
    vecObject += "linewidth=1;color=" + this.foreground + ";fillcolor=" + this.background + ";filledpolygon1=";
    vecObject += dWorldTLX + "," + dWorldTLY + "|";
    vecObject += dWorldBRX + "," + dWorldTLY + "|";
    vecObject += dWorldBRX + "," + dWorldBRY + "|";
    vecObject += dWorldTLX + "," + dWorldBRY + ";";
    this.ECWViewController.SetLayerParameter("DTOverlayRect", vecObject);
    this.ECWViewController.SetLayerTransparency("DTOverlayRect", this.background, this.transparency);

	if(bUpdateSlave)
		this.ECWViewSlave.SetExtents(dWorldTLX, dWorldTLY, dWorldBRX, dWorldBRY);
}

// Create new rect
function DTOverlayRect_Create(dWorldTLX, dWorldTLY, dWorldBRX, dWorldBRY)
{
    if(this.ECWViewController == null || this.ECWViewSlave == null)
        alert("DTOverlayRect.Create() has a null controller or slave. Use DTOverlayRect.Init() to initialize the controlling view.");
    else if(this.ECWViewController.GetNumberLayers() == 0)
        alert("You must add valid layers to the view before creating an overlay rect.");
    else
    {
        // If the inputs are negative one, pick our own starting rectangle, in the center.
        if(dWorldTLX == -1 && dWorldTLY == -1 &&  dWorldBRX == -1 && dWorldBRY == -1)
        {
            dWorldTLX = this.ECWViewSlave.GetTopLeftWorldCoordinateX();
            dWorldTLY = this.ECWViewSlave.GetTopLeftWorldCoordinateY();
            dWorldBRX = this.ECWViewSlave.GetBottomRightWorldCoordinateX();
            dWorldBRY = this.ECWViewSlave.GetBottomRightWorldCoordinateY();

            var dWorldX = dWorldTLX + ((dWorldBRX - dWorldTLX) / 2.0);
            var dWorldY = dWorldTLY + ((dWorldBRY - dWorldTLY) / 2.0);

            dWorldTLX = dWorldX - (dWorldBRX - dWorldTLX) / 7.0;
            dWorldBRX = dWorldX + (dWorldBRX - dWorldTLX) / 7.0;

            if(dWorldBRY > dWorldTLY)
            {
                dWorldTLY = dWorldY - (dWorldBRY - dWorldTLY) / 7.0;
                dWorldBRY = dWorldY + (dWorldBRY - dWorldTLY) / 7.0;
            }
            else
            {
                dWorldTLY = dWorldY + (dWorldTLY - dWorldBRY) / 7.0;
                dWorldBRY = dWorldY - (dWorldTLY - dWorldBRY) / 7.0;
            }
        }

        // Add a simple vector layer to the view
        if(this.ECWViewController.AddLayer("simplevector", "", "DTOverlayRect", ";") >= 0)
            DTOverlayRect_SetRect(dWorldTLX, dWorldTLY, dWorldBRX, dWorldBRY, this.ECWViewSlave != null);
    }
}

// Initialize prototypes
DTOverlayRect.prototype.Init	= DTOverlayRect_Init;
DTOverlayRect.prototype.SetRect	= DTOverlayRect_SetRect;
DTOverlayRect.prototype.Move	= DTOverlayRect_Move;
DTOverlayRect.prototype.Create 	= DTOverlayRect_Create;
