﻿//var updatesComplete=new Array();
var polygonComplete=false;
var myInterval
var polyInterval
var thereturnmessage
var thecontext

function processHits(returnmessage,context){
    return;
}

function processRefresh(returnmessage,context){
    if (returnmessage){
	    removePointsAndLines();
        removePolygons();
        if (bRadar){hideRadar()};
        
        workzoneLines.length=0;
      workzoneLines_Future.length=0;
        incidentLines.length=0;
        conditionStateLines.length=0;
        conditionLines.length=0;
        floodLines.length=0;
        
        thereturnmessage=returnmessage;
        thecontext=context;
        setTimeout("processUpdates();",10);
    }
    else {
        clearFeedback();
    }
}

function processUpdates(){
    markers.length=0;
    closedMarkers.length=0;
    
    var allUpdates=thereturnmessage.split('!');
    var type,result

    for (z=0;z<allUpdates.length;z++){
        type=allUpdates[z].substring(0,allUpdates[z].indexOf('='));
        result=allUpdates[z].substring(allUpdates[z].indexOf('=')+1,allUpdates[z].length);
        if (result!=''){
            switch (type){
            //ADD CASE "WZPoints_Future"
            case "WZPoints_Future":
             createPointArray(result,'workzones_future');
                    createMarkers('workzones_future');
                    break;
                case "WZPoints":
                    createPointArray(result,'workzones');
                    createMarkers('workzones');
                     break;
            case "WZLines_Future":
                storeLines(result,'workzones_future');
                    break;
                case "WZLines":
                    storeLines(result,'workzones');
                    break;
                case "RCPoints":
                    createPointArray(result,'conditions');
                    createMarkers('conditions');
                    break;
                case "RCLines":
                    storeLines(result,'conditions');
                    break;
                case "RCStateLines":
                    storeLines(result,'state_conditions');
                    break;
                case "FloodPoints":
                    createPointArray(result,'flood');
                    createMarkers('flood');
                    break;
                case "FloodLines":
                    storeLines(result,'flood');
                    break;
                case "IncidentPoints":
                    createPointArray(result,'incidents');
                    createMarkers('incidents');
                    break;
                case "IncidentLines":
                    storeLines(result,'incidents');
                    break;
            }
        }
    }
    GEvent.trigger(map,"moveend");
}

//function checkUpdates(){
//    
//    if (updatesComplete.length==9){
//        GEvent.trigger(map,"moveend");
//        updatesComplete.length=0;
//        clearInterval(myInterval);
//        return true;
//    }
//    else {
//        return false;
//    }
//}

function checkPolygon(){
    if (polygonComplete){
        polygonComplete=false;
        clearInterval(polyInterval);
        return true;
    }
    else {
        return false;
    }
}

function clearFeedback(){
    textMessage.style.visibility="hidden";
    contextmenu.style.visibility="hidden";
    document.getElementById('imgCity').style.visibility="hidden";
    document.getElementById('imgCounty').style.visibility="hidden";
    document.getElementById('imgDistrict').style.visibility="hidden";
    document.getElementById('imgIS').style.visibility="hidden";
    document.getElementById('imgUS').style.visibility="hidden";
    document.getElementById('imgMO').style.visibility="hidden";
}

function processPolygon(returnmessage,context){
    
    polygonComplete=false;
    
    if (returnmessage){
        contextmenu.style.visibility="hidden";
        removePointsAndLines();
        removePolygons();
        if (bRadar){hideRadar()};

        var midpoint=new GLatLng(returnmessage.split(",")[0],returnmessage.split(",")[1])
        var polyBounds=new GLatLngBounds(new GLatLng(returnmessage.split(",")[2],returnmessage.split(",")[3]),new GLatLng(returnmessage.split(",")[4],returnmessage.split(",")[5]))
        
        map.setCenter(midpoint,map.getBoundsZoomLevel(polyBounds));
    }
    else {
        clearFeedback();
    }
    
    polygonComplete=true;
}


function processEncodedPolygon(returnmessage,context){

    polygonComplete=false;
    
    if (returnmessage){
        contextmenu.style.visibility="hidden";
        removePointsAndLines();
        removePolygons();
        if (bRadar){hideRadar()};
        
        var result=returnmessage.split(";");
        
        var line=result[0];
        var levels=result[1];
        var sw=result[2];
        var ne=result[3];
        
        var minY=parseFloat(sw.split(",")[0]);
        var minX=parseFloat(sw.split(",")[1]);
        var maxY=parseFloat(ne.split(",")[0]);
        var maxX=parseFloat(ne.split(",")[1]);
        var midY=maxY-((maxY-minY)/2);
        var midX=maxX-((maxX-minX)/2);

        var polyBounds=new GLatLngBounds(new GLatLng(minY,minX),new GLatLng(maxY,maxX));
        var midpoint=new GLatLng(midY,midX);

        if (selectedPolygon){
            map.removeOverlay(selectedPolygon);
        }

        map.setCenter(midpoint,map.getBoundsZoomLevel(polyBounds));
        createEncodedPolygon(line,levels);
    }
    else {
        clearFeedback();
    }
    polygonComplete=true;
}

function processRoute(returnmessage,context){

    if (returnmessage){
        contextmenu.style.visibility="hidden";
        removePointsAndLines();
        removePolygons();
        if (bRadar){hideRadar()};

        var result=returnmessage.split(";");
        
        var line=result[0];
        var levels=result[1];
        var sw=result[2];
        var ne=result[3];
        
        var minY=parseFloat(sw.split(",")[0]);
        var minX=parseFloat(sw.split(",")[1]);
        var maxY=parseFloat(ne.split(",")[0]);
        var maxX=parseFloat(ne.split(",")[1]);
        var midY=maxY-((maxY-minY)/2);
        var midX=maxX-((maxX-minX)/2);
        
        var lineBounds=new GLatLngBounds(new GLatLng(minY,minX),new GLatLng(maxY,maxX));
        var midpoint=new GLatLng(midY,midX);
        
        if (selectedRoute){
            map.removeOverlay(selectedRoute);
        }
        
        selectedRoute=new GPolyline.fromEncoded({
              color: "#000000",
              weight: 18,
              opacity: 0.4,
              points: line,
              levels: levels,
              zoomFactor: 2,
              numLevels: 18
        });

        map.addOverlay(selectedRoute);
        map.setCenter(midpoint,map.getBoundsZoomLevel(lineBounds));
    }
    else {
        clearFeedback();
    }
}

function postMyError(returnmessage, context){
	alert("Callback Error: " + returnmessage + ", " + context);
}    
