//var decimalPlaces = 6;
//var maxLength = 1950;

function addFeature(feature) {
    showDrawingTools(false);

    var str = feature.feature.geometry.toString();
    //var str4326 = feature.feature.geometry.transform(new OpenLayers.Projection("EPSG:900913"), new OpenLayers.Projection("EPSG:4326")).toString();

    var geom = feature.feature.geometry.clone();
    var str4326 = geom.transform(new OpenLayers.Projection("EPSG:900913"), new OpenLayers.Projection("EPSG:4326")).toString();

    //	if (sPoints.length >= maxLength)
    //	    alert('Your polygon contained too many points and the extra points have been removed');

    //    if(sPoints.length > 0) {
    var theDate = new Date();
    newFeatureID = feature.feature.id;
    // TODO - We need to transform the geometry here to something sensible we can use for the download tool
    // Might need to store two geometries here.  One in 900913 for displaying on the web and another that's used in Arc
    OpenLayers.loadURL('Handlers/AddFeature.ashx', '?Points=' + str + '&Points4326=' + str4326 + '&FeatureType=' + gFeatureTypeID + '&TimeStamp=' + theDate.valueOf() + '&Scale=' + map.getScale(), this, addFeatureResponse);
    //}
    //}
}

function addFeatureResponse(data) {
    if (data != undefined) {
        var retmessage = data.responseText.split(',')[0];
        var geotype = data.responseText.split(',')[1];
        var sFeatureID = data.responseText.split(',')[2];
        var sXpos = data.responseText.split(',')[3];
        var sYpos = data.responseText.split(',')[4];
        if (sFeatureID != '') {
            // Set feature id for the new feature
            var feature = featureLayer.getFeatureById(newFeatureID);
            feature.id = sFeatureID;
            feature.attributes = { featureTypeID: gFeatureTypeID };

            showPopup(feature);
        }
    }
    else
        alert('Unable to save feature at this time');
}

function modifyFeature(feature) {
    showDrawingTools(false);

    var str = feature.feature.geometry.toString();
    //var str = feature.feature.geometry.transform(new OpenLayers.Projection("EPSG:900913"), new OpenLayers.Projection("EPSG:4326")).toString();
    var theDate = new Date();
    OpenLayers.loadURL('Handlers/ModifyFeature.ashx', '?FeatureID=' + feature.feature.id + '&Points=' + str + '&FeatureType=' + gFeatureTypeID + '&TimeStamp=' + theDate.valueOf(), this, modifyFeatureResponse);
}

function modifyFeatureResponse(data) {
    if (data != undefined) {
    }
    else
        alert('Unable to save feature at this time');
}

function createNewFeature(featureTypeID) {
    gFeatureTypeID = featureTypeID;

    //checkUserLogRole();  // What does this do?

    OpenLayers.loadURL('Handlers/CheckUserdetails.ashx', '', this, getCheckUserDetailsResponse);
}

function getCheckUserDetailsResponse(data) {
    if (data != undefined) {
        var xml = data.responseText;
        var wkt = xml.split(':')[0];
        var name = xml.split(':')[1];
        if (wkt == 'TRUE') {
            // Remove selecting points for the time being
            //getUserChoices();
            showDrawingTools(true);
            //alert('Click on the map to draw your shape');
            toggleGuidanceDiv();
        }
        else
            location = name;
    }
}

function getUserChoices() {
    var meta = document.getElementById('Meta');
    var ifr = document.createElement('iframe');
    ifr.setAttribute("id", "if1");
    ifr.setAttribute("scrolling", "no");
    ifr.setAttribute("frameborder", "no");
    ifr.style.border = "none";
    ifr.setAttribute("src", "DetailsMarks.aspx");
    ifr.style.width = "200px"
    ifr.style.height = "120px";
    ifr.style.position = "absolute";
    ifr.style.top = (screen.height / 2 - 200) + "px";
    ifr.style.left = (screen.width / 2 - 200) + "px";
    ifr.style.zIndex = 9000001;
    meta.appendChild(ifr);
}

function featureTypeSwitch(_type) {
    MarksType = "";
    if (_type == "DP") {
        //mapClickListener = GEvent.addListener(map, 'click', mapClick);
        showDrawingTools(true);
        alert("Click on the map to draw your shape");
    } else if (_type == "SF")
        getWMSMarkerPolys();

    var meta = document.getElementById('Meta');
    meta.innerHTML = "";
}

function getWMSMarkerPolys() {
    document.getElementById("message").innerHTML = "";
    //tempLayers = mapLayers;

    mapLayers = mapLayers + ",Marks";

    createWMSOverlay(mapLayers);
    getmarkerPolys();
}

var markPolyData = [];
function getmarkerPolys() {
    if (markPolyData.length == 0)
        OpenLayers.loadURL('MarkPoints.aspx', '?cmd=GRID', this, getMarkPointsResponse);
    else
        addMarkerPolys();
}

function getMarkPointsResponse(data) {
    if (data != undefined)
        if (data.responseText.length > 0) {
            var xml = data.responseText;
            if (xml.length > 0) {
                var polys = xml.split("|");
                for (var i = 0; i < polys.length; i++) {
                    var res = polys[i];
                    if (res.length > 0) {
                        var id = polys[i].split(":")[0];
                        var wkt = polys[i].split(":")[1];

                        // Use OpenLayers. Format.WKT instead

                        sWKT = wkt.replace("POLYGON((", "");
                        sWKT = sWKT.replace("))", "");
                        aWKT = sWKT.split(",");
                        var sw = new OpenLayers.LonLat(parseFloat(aWKT[0].split(" ")[0]), parseFloat(aWKT[0].split(" ")[1]));
                        var ne = new OpenLayers.LonLat(parseFloat(aWKT[2].split(" ")[0]), parseFloat(aWKT[2].split(" ")[1]));

                        var alatlngs = new Array;

                        for (var j = 0; j < aWKT.length; j++) {
                            aPt = aWKT[j].split(" ");
                            var gPt = new OpenLayers.LonLat(parseFloat(aPt[0]), parseFloat(aPt[1]));
                            alatlngs[j] = gPt;
                        }

                        var mp = drawMarkPoly(alatlngs, "#FFCC00", 2, 1, "#FFCC00", 0.0, id)
                        map.addOverlay(mp);
                        var polydata = new Array(id, sw, ne, wkt, mp);
                        markPolyData.push(polydata);
                    }
                }
            }
        }
        else
            alert("There is an Issue with the Server");
}

function drawMarkPoly(pts, lineColor, lineWeight, lineOpacity, fillColor, fillOpacity, mid) {
    var poly = new GPolygon(pts, lineColor, lineWeight, lineOpacity, fillColor, fillOpacity);
    polyClick = GEvent.addListener(poly, "click", function(para) {
        clickMarkPoly(mid);
    });

    return poly;
}

var marksData = [];
function clickMarkPoly(_id) {
    var poly = "";
    for (var i = 0; i < markPolyData.length; i++) {
        if (markPolyData[i][0] == _id) {
            var wkt = markPolyData[i][3]
            poly = wkt;
            var gllb = new OpenLayers.LonLat(markPolyData[i][2], markPolyData[i][1]);
            var c = gllb.getCenter();

            map.setCenter(c);
            map.setZoom(map.getBoundsZoomLevel(gllb));
            i = markPolyData.length;
        }
    }

    if (removeMarks() == true && marksData.length == 0)
        OpenLayers.loadURL('MarkPoints.aspx', '?cmd=POINTS&POLY=' + poly, this, getMarkPointsRemoveResponse);
}

function getMarkPointsRemoveResponse(data) {
    if (data != undefined) {
        var xml = data.responseText;
        if (xml.length > 0) {
            var polys = xml.split("|");

            var _html = "<table border='1px' width='300px' style='color:#454547;padding: 0px;font-size: 12px;margin: 5px 0px 10px;border-collapse: collapse; border: grey thin solid;background-color: #ffffff;'>"
            _html += "<tr><td style='text-align:center;'>Please Select from the following list ( you can select multiple locations by holding down the Ctrl Key)</td></tr>"
            _html += "<tr><td style='align:center;width:100%'>"

            var multiSelect = "<SELECT id='_S'  MULTIPLE SIZE=5>";
            for (var i = 0; i < polys.length; i++) {
                var res = polys[i];
                if (res.length > 0) {
                    var mname = polys[i].split(":")[0];
                    var wkt = polys[i].split(":")[1];
                    if (mname.length > 3)
                        multiSelect += "<OPTION VALUE='" + wkt + "'>" + mname;
                }
            }
        }
    }

    _html += multiSelect + "</td></tr>"
    _html += "<tr><td><input type='button' style='width:100%' value='Add Points' onclick='getIDs()'/>" + "</td></tr>"
    _html += "<tr><td style='text-align:center;'>Or You May Select Points by Drawing a Polygon</td></tr>"
    _html += "<tr><td><input type='button' style='width:100%' value='Select By Polygon' onclick='GetPointPoly()'/>" + "</td></tr>"
    _html += "</table>"

    map.openInfoWindowHtml(c, _html);
}

function addMarkerPolys() {
    for (var i = 0; i < markPolyData.length; i++)
        map.addOverlay(markPolyData[i][4]);
}

// Clone feature, refresh features list and map features and display metadata form
function cloneFeature(originalfeatureID) {
    OpenLayers.loadURL('Handlers/CloneFeature.ashx', '?FeatureID=' + originalfeatureID, this, cloneFeatureResponse,cloneFeatureError);
}

function cloneFeatureResponse(data) {
    drawFeatures();
    updateFeaturesList();
}


function cloneFeatureError(data) {

    alert('Error: ' + data);


}

// Delete feature and refresh features list and map features
function deleteFeature(featureID) {
    if (confirm('Are you sure you want to delete this feature?') == true)
        OpenLayers.loadURL('Handlers/DeleteFeature.ashx', '?FeatureID=' + featureID, this, deleteFeatureResponse);
}

function deleteFeatureResponse(data) {
    drawFeatures();
    updateFeaturesList();
}

// Refresh feature list
function updateFeaturesList() {
    // Turn off polygon tool
    showDrawingTools(false);

    // Refresh features table
    document.getElementById('RefreshUserFeatures').click();
}

// Gets WKT from responder and plots
function drawFeatures() {
    var theDate = new Date();
    OpenLayers.loadURL('Handlers/WKTResponder.ashx', '?TimeStamp=' + theDate.valueOf(), this, drawFeaturesResponse);
}

function drawFeaturesResponse(data) {
    featureLayer.destroyFeatures();

    if (data != undefined)
        if (data.responseText.length > 0) {
            var features = data.responseText.split('|');

            for (var i = 0; i < features.length; i++) {
                var sFeatureID = features[i].split(':')[0];
                var sWKT = features[i].split(':')[1];
                //var sGeoType = features[i].split(':')[2];
                var sFeatureTypeID = features[i].split(':')[3];
                //var sCenterX = features[i].split(':')[4];
                //var sCenterY = features[i].split(':')[5];
                //var sName = features[i].split(':')[6];

                var newGeometry = OpenLayers.Geometry.fromWKT(sWKT);
                //var newGeometry = OpenLayers.Geometry.fromWKT(sWKT).transform(new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection("EPSG:900913"));
                var newFeature = new OpenLayers.Feature.Vector(newGeometry, { featureTypeID: sFeatureTypeID })

                // Add attributes to feature
                newFeature.id = sFeatureID;
                featureLayer.addFeatures(newFeature);
            }
        }
}

