﻿var DrawMode = false;
var map = null;
var DrawAreas = null;
var g_shapePoints = new Array();
var g_tempShape = null;
var g_tempPoints = null;
var DrawAreaLayer = null;
var MapObjectCurrentInstance = null;
var DrawAreaCounter = 0;
var DeleteDrawArea = null;
var g_areaStyle = 'font-family:Verdana;font-weight:bold;font-size:10px;text-decoration:none;background-color:#000000;color:#FFFFFF';
var arrDrawAreasToSearch = new Array();

$().ready(function() {
    setTimeout("initMap()", 1000);
})

function onMouseOverListing(Index) {
    var Multipler = ($.browser.mozilla) ? 3 : 1;   // Only FF creates 3 a, all the other create only 1 
    Index = parseInt(Index) + (DrawAreaCounter * Multipler);
    $('#VELayerListDiv div a:eq(' + Index + ') div').mouseover();
}

function initMap() {
    if (map == null) {
        map = $find(AgoraVirtualMapID)._map;
        if (DrawAreaLayer == null) {
            DrawAreaLayer = new VEShapeLayer();
            map.AddShapeLayer(DrawAreaLayer);
        }
        $("#" + AgoraVirtualMapID + " > div:eq(0)").append('<div class="DrawingBox" id="DrawingBoxContainer"><u>To draw square box over interested area:</u><br/><br/>1.	Place hand near area of interest<br/><br/>2.	Left click on the first location<br/><br/>3.	Left click to create couple more points<br/><br/>4.	Right click on the last point to finish the drawing</div>');
        map.AttachEvent("onendzoom", oPowerMap_OnEndZoom);
        oPowerMap_OnEndZoom();
        
    }
}


function oPowerMap_OnEndZoom() {
    var ZoomLevel = map.GetZoomLevel();
    if (ZoomLevel < 13) {
        $("#" + StartDrawElemID).attr("href", "javascript:DrawNotAvailable();");
    } else {
    $("#" + StartDrawElemID).attr("href", "javascript:StartDraw();");
    }
}

function DrawNotAvailable() {alert('You have to zoom close to use draw area function');}

function StartDraw() {
    g_shapePoints = new Array();
    g_tempShape = null;
    g_tempPoints = null;
    DrawMode = true;
    hideStartDrawButton();
    if (map != null) {
        $(map).css('cursor', 'crosshair');
        map.AttachEvent('onclick', drawPolygonMouseClick);
        map.AttachEvent('onmousemove', drawPolygonMouseMove);
    }
}

function StopDraw() {
    DrawMode = false;
    $(map).css('cursor', 'default');
    map.DetachEvent('onclick', drawPolygonMouseClick);
    map.DetachEvent('onmousemove', drawPolygonMouseMove);
    showStartDrawButton();
    $('.DrawingBox').hide();
}

function hideStartDrawButton(){
    $("#StopDraw").show();
    $("#StartDraw").hide();
    $('.DrawingBox').show();
}

function showStartDrawButton(){
    $("#StopDraw").hide();
    $("#StartDraw").show();
    $('.DrawingBox').hide();    
}

function GetAllDraw() {
    UpdateDrawPoints();
    return DrawAreas;
}

function toAgoraAreaSearch(arrString) {
    var aLatLong = arrString;
    var aOutput = new Array();
    var iO = 0;
    var iI;
    var aOutputLatLong;
    //How many draws?
    for (iO; iO < aLatLong.length; iO++) {

        if (aLatLong[iO] != null) {
            aOutputLatLong = null;
            aOutputLatLong = new Array();
            //Getting the draw's points
            for (iI = 0; iI < aLatLong[iO].LatLong.length; iI++) {
                aOutputLatLong.push((aLatLong[iO].LatLong[iI].Lat + ',' + aLatLong[iO].LatLong[iI].Long));
            }
            aOutput.push(aOutputLatLong.join('|'));
        }
    }
    return (aOutput.join("?"));
}

function ResetMap() {
    map.DeleteShapeLayer(DrawAreaLayer);
    DrawAreaLayer = new VEShapeLayer();
    map.AddShapeLayer(DrawAreaLayer);
    //ID should be defined in Map .aspx
    $("#" + AgoraDrewAreaTextID).val("");
    DrawAreaCounter = 0;
    $("#StartDraw").show();
}

function ResetSearch() {
    $(".mapsearchbox select").val(-1);
    $(".mapsearchbox input").attr("checked", false);
}


drawPolygonMouseClick = function(e) {
    try {
        cursorX = e.mapX;
        cursorY = e.mapY;

        g_shapePoints.push(map.PixelToLatLong(new VEPixel(cursorX, cursorY)));

        if (e.rightMouseButton && g_shapePoints.length >= 3) {

            try {
                map.DetachEvent('onmousemove', drawPolygonMouseMove);
                map.DetachEvent('onclick', drawPolygonMouseClick);
                DrawAreaLayer.DeleteShape(g_tempShape);
            }
            catch (err) { alert("drawPolygonMouseClick 1 (E):" + err); }

            var newDrawArea = new VEShape(VEShapeType.Polygon, g_shapePoints);
            try { DrawAreaLayer.AddShape(newDrawArea); } catch (err) { alert("drawPolygonMouseClick 2 (E):" + err); }


            SetDraw(newDrawArea, 'New Area' + (++DrawAreaCounter), MapObjectCurrentInstance);

            UpdateDrawPoints();
            DrawMode = false;
            
            //Resubmit the search
            __doPostBack(AgoraSubmitButtonServerID, '');
        }
        else {
            $(map).css('cursor', 'crosshair');
        }
    }
    catch (err) { alert("drawPolygonMouseClick (E):" + err); }
}

drawPolygonMouseMove = function(e) {
    $(map).css('cursor', 'crosshair');
    try {

        g_tempPoints = g_shapePoints.slice(0, g_shapePoints.length);

        if (g_tempPoints.length >= 1) {
            cursorX = e.mapX;
            cursorY = e.mapY;

            g_tempPoints.push(map.PixelToLatLong(new VEPixel(cursorX, cursorY)));

            try {
                DrawAreaLayer.DeleteShape(g_tempShape);
            }
            catch (err) { }

            if (g_tempPoints.length >= 2) {
                g_tempShape = new VEShape(VEShapeType.Polyline, g_tempPoints);
                g_tempShape.HideIcon();
                try {
                    DrawAreaLayer.AddShape(g_tempShape);
                } catch (err) { alert("In drawPolygonMouseMove 2(E):" + e); }

                DrawAreaLayer.Show();
            }
        }
    }
    catch (err) { alert("drawPolygonMouseMove (E):" + err); }
}

SetDraw = function(objectDraw, drawTitle, currentIntance) {
    //var $this = (currentIntance != null) ? this : currentIntance; //Trick
    var g_lineColor = new VEColor(0, 0, 255, 0.5);
    var g_fillColor = new VEColor(0, 128, 0, 0.3);

    objectDraw.SetTitle(drawTitle);
    /*if (DeleteDrawArea != null && DeleteDrawArea != undefined)
    objectDraw.SetDescription('<a href="javascript:' + DeleteDrawArea + '(\'' + objectDraw.GetID() + '\', \'' + drawTitle + '\')">Remove this Area</a>');*/
    objectDraw.SetCustomIcon('<span style="' + g_areaStyle + '"><nobr>' + drawTitle + '</nobr></span>');

    $(map).css('cursor', 'url(http://maps.live.com/cursors/grab.cur)');
    DrawAreaLayer.Show();

    var arrAllDraw = GetAllDraw();
    var arrCheckAreaToSearch = new Array();
    for (iCkA = 0; iCkA < arrAllDraw.length; iCkA++) {
        arrCheckAreaToSearch.push(arrAllDraw[iCkA]);
    }
    showStartDrawButton();
    $("#StartDraw").hide();
    //ID should be defined in Map .aspx
    $("#" + AgoraDrewAreaTextID).val(toAgoraAreaSearch(arrCheckAreaToSearch));
    //Resubmit Search
}

UpdateDrawPoints = function() {
    try {
        DrawAreas = new Array();

        if (DrawAreaLayer) {
            for (var i = 0; i < DrawAreaLayer.GetShapeCount(); i++) {
                var LatLongPoints = [];
                var curShape = DrawAreaLayer.GetShapeByIndex(i);
                var curAnchor = curShape.GetIconAnchor();
                GUID = curShape.GetID();
                Title = escape(curShape.GetTitle());
                Latitude = curAnchor.Latitude;
                Longitude = curAnchor.Longitude;

                var curPoints = curShape.GetPoints();
                TotalPoints = curPoints.length;

                for (var j = 0; j < curPoints.length - 1; j++)
                    LatLongPoints[j] = { 'Lat': curPoints[j].Latitude, 'Long': curPoints[j].Longitude };

                DrawAreas.push({ 'Guid': GUID, 'Title': Title, 'TotalPoints': TotalPoints, 'Latitude': Latitude, 'Longitude': Longitude, 'LatLong': LatLongPoints });
            }

        }
    }
    catch (err) {
        alert("UpdateDrawPoints (E):" + err);
    }
}
