﻿
if (!terra.map.serviceArea) terra.map.serviceArea = {};

terra.map.serviceArea = {

    geoServiceURL: "http://voyager/ArcGIS/rest/services/ServiceArea/GPServer/Model",
    geoService: null,
    geoServicePoints: null,
    geoServiceResults: null,
    geoGraphList: null,

    getSelectedServiceFeatureSet: function(graphlist) {

        var featureSet = new esri.tasks.FeatureSet();

        var features = [];
        for (var i = 0; i < graphlist.length; i++) {
            features.push(graphlist[i].graph);
        }

        featureSet.features = features;

        return featureSet;

    },

    excecuteServiceArea: function(timeInMinutes, graphlist) {

        timeInMinutes = parseInt(timeInMinutes);

        if (graphlist == null || graphlist.length == 0) {

            $("#dialogNoDrivingPoints").dialog({
                autoOpen: false,
                bgiframe: true,
                modal: true,
                buttons: {
                    Ok: function() {
                        $(this).dialog('close');
                    }
                }
            });

            $("#dialogNoDrivingPoints").dialog('open');

            return;

        }

        if (timeInMinutes > 5 || timeInMinutes < 1 || graphlist.length < 1 || graphlist.length > 3) {

            $("#dialogDriveTimeLimit").dialog({
                autoOpen: false,
                bgiframe: true,
                modal: true,
                buttons: {
                    Ok: function() {
                        $(this).dialog('close');
                    }
                }
            });

            $("#dialogDriveTimeLimit").dialog('open');

            return;
        }


        this.geoGraphList = graphlist;

        var gp = new esri.tasks.Geoprocessor(this.geoServiceURL);
        var driveTimes = timeInMinutes;
        var featureSet = this.getSelectedServiceFeatureSet(graphlist);

        var params = { "Facilities": featureSet, "Default_break_values": driveTimes };

        this.clearGeoServices();
        
        $("#progressbar").show();
        gp.execute(params, terra.map.serviceArea.getDriveTimePolys);

    },

    clearGeoServices: function() {

        if (this.geoServiceResults == null) { return; }

        for (var j = 0; j < this.geoServiceResults.length; j++) {

            var features = this.geoServiceResults[j].value.features;

            for (var f = 0, fl = features.length; f < fl; f++) {

                var feature = features[f];
                map.graphics.remove(feature);

            }

        }

    },
    removeDrivingTime: function(j, f) {

        var f = terra.map.serviceArea.geoServiceResults[j].value.features[f];
        map.graphics.remove(f);

    },

    convertServiceToGraph: function(j, f) {

        var f = terra.map.serviceArea.geoServiceResults[j].value.features[f];

        //var symbol = new esri.symbol.SimpleFillSymbol("none", new esri.symbol.SimpleLineSymbol("dashdot", new dojo.Color([255, 0, 0]), 1), new dojo.Color([255, 255, 0, 0.25]));
        //var graphic = new esri.Graphic(f.geometry, symbol);

        gsvc.areasAndLengths([f], function(results) {

            //{"areas":[1585800.66264039],"lengths":[4963.70759158615]}

            var surface = results.areas[0];
            var perimeter = results.lengths[0];

            surface = surface / 1000000;
            perimeter = perimeter / 1000;

            //terra.map.graphManager.addNewGr(false, guid(), pointType, pointDesc + numb, pointDesc + numb + '<br/><br/>Επιφάνεια :<b>' + surface.toFixed(3) + " χλμ.2</b>" + '<br/>Περίμετρος :<b>' + perimeter.toFixed(3) + " χλμ.</b>", geometry);

            terra.map.graphManager.addNewGr(false, guid(), 2, f.desc, f.longDesc + '<br/><br/>Επιφάνεια :<b>' + surface.toFixed(3) + " χλμ.2</b>" + '<br/>Περίμετρος :<b>' + perimeter.toFixed(3) + " χλμ.</b>", f.geometry);
       
        });

            map.graphics.remove(f);
    },


    getDriveTimePolys: function(results, messages) {

    $("#progressbar").hide('fast');

        terra.map.serviceArea.geoServiceResults = results;

        var t = 0;

        for (var j = 0; j < terra.map.serviceArea.geoServiceResults.length; j++) {

            var features = terra.map.serviceArea.geoServiceResults[j].value.features;

            for (var f = 0, fl = features.length; f < fl; f++) {

                var feature = features[f];

                var polySymbolRed;

                var colorRND1 = (Math.floor(Math.random() * 256));
                var colorRND2 = (Math.floor(Math.random() * 256));
                var colorRND3 = (Math.floor(Math.random() * 256));

                //if (f == 0) {
               
                polySymbolRed = new esri.symbol.SimpleFillSymbol();
                polySymbolRed.setOutline(new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([colorRND1, colorRND2, colorRND3, 0.7]), 1));
                polySymbolRed.setColor(new dojo.Color([colorRND1, colorRND2, colorRND3, 0.5]));
                
                //terra.map.serviceArea.symbolDrives.push[polySymbolRed];
                
                //}

                //alert(colorRND1);
                //feature.setSymbol(terra.map.serviceArea.symbolDrives[t]);
                
                feature.setSymbol(polySymbolRed);
                t += 1;
                feature.desc = terra.map.serviceArea.geoGraphList[j].desc;
                feature.longDesc = terra.map.serviceArea.geoGraphList[j].longDesc;

                var lnk = "<br/><br/> <a style='margin-left:10px;' class='ui-state-default ui-corner-all' onclick='terra.map.serviceArea.convertServiceToGraph(" + j + "," + f + ");' href='#'>Μετατροπή σε γεωμετρία</a>";
                lnk += "<br/><br/> <a style='margin-left:10px;' class='ui-state-default ui-corner-all' onclick='terra.map.serviceArea.removeDrivingTime(" + j + "," + f + ");' href='#'>Αφαίρεση</a>";

                var infoW = new esri.InfoTemplate(feature.desc, feature.longDesc + lnk);
                feature.setInfoTemplate(infoW);

                map.graphics.add(feature);

            }

        }

    }

}
