﻿var lines=new Array();
var closedLines=new Array();

var workzoneLines=new Array();
//added for future workzones
var workzoneLines_Future = new Array();
var incidentLines=new Array();
var conditionStateLines=new Array();
var conditionLines=new Array();
var floodLines=new Array();

var selectedRoute

function clearLines(type){
    for (c=0;c<lines.length;c++){
        if (lines[c].type.toUpperCase()==type.toUpperCase()){
            map.removeOverlay(lines[c]);
            lines[c].inMap=false;
        }
    }
    
    var holdLines=new Array();
    
    for (c=0;c<lines.length;c++){
        if (lines[c].type.toUpperCase()!=type.toUpperCase()){
            holdLines.push(lines[c]);
        }
    }
    
    lines=holdLines;
    
    chkEnable();
    hideLoading();
}

function createLines(type,impact){
    var x3,x4,y3,y4
    var line
    
    var mapBounds=map.getBounds();
    var lineBounds
    
    switch(type.toUpperCase()){
        case "CONDITIONS":
            for (c=0;c<conditionLines.length;c++){
                //var x1=parseFloat(map.getBounds().getSouthWest().lng());
                //var y1=parseFloat(map.getBounds().getSouthWest().lat());
                //var x2=parseFloat(map.getBounds().getNorthEast().lng());
                //var y2=parseFloat(map.getBounds().getNorthEast().lat());
                
                y3=parseFloat(conditionLines[c][6]);
                x3=parseFloat(conditionLines[c][7]);
                y4=parseFloat(conditionLines[c][8]);
                x4=parseFloat(conditionLines[c][9]);
                
                lineBounds=new GLatLngBounds(new GLatLng(y3,x3),new GLatLng(y4,x4))
                
                if (!(impact)||impact.toUpperCase()==conditionLines[c][3].toUpperCase()){
                    //if ((((y3>y1)&&(y3<y2))||((y4>y1)&&(y4<y2)))&&(((x3<x1)&&(x3>x2))||((x4<x1)&&(x4>x2)))){
                    if ((lineBounds.intersects(mapBounds)||mapBounds.intersects(lineBounds)||lineBounds.containsBounds(mapBounds)||mapBounds.containsBounds(lineBounds))){
                    
                        var holdColor
                        var holdTransparency
                        var holdmessage
                        
                        switch (conditionLines[c][3].toUpperCase()){
                            case "CLEAR":
                                holdColor="#2A7F00";
                                holdTransparency=.8;
                                holdmessage='Clear';
                                break;
                            case "COVERED":
                                holdColor="#DA70D6";
                                holdTransparency=.8;
                                holdmessage='Covered';
                                break;
                            case "PARTLY COVERED":
                                holdColor="#0000FF";
                                holdTransparency=.4;
                                holdmessage='Partly Covered';
                                break;
                            case "CLOSED":
                                holdColor="#FF0000";
                                holdTransparency=.8;
                                holdmessage='Closed';
                                break;
                        }

                        line=new GPolyline.fromEncoded({
                            color: holdColor,
                            weight: 10,
                            opacity: holdTransparency,
                            points: conditionLines[c][0][0],
                            levels: conditionLines[c][0][1],
                            zoomFactor: 2,
                            numLevels: 18
                        });
                        
                        line.bottom=y3;
                        line.top=y4;
                        line.left=x3;
                        line.right=x4;
                        line.inMap=true;
                        line.type=type;
                        line.id=lineCount;
                        line.message=holdmessage
                        lineCount+=1;
                        
                        if (conditionLines[c][3].toUpperCase()=="CLOSED"){
                            closedLines.push(line);
//                            GEvent.addListener(closedLines[closedLines.length-1], "click", function() { 
//                                window.status=this.message;
//                            });
                        } else {
                            lines.push(line);
//                            GEvent.addListener(lines[lines.length-1], "click", function() { 
//                                window.status=this.message;
//                            });
                        }
                    }
                }
            }
            break;
        case "STATE_CONDITIONS":
            for (c=0;c<conditionStateLines.length;c++){
            
                y3=parseFloat(conditionStateLines[c][6]);
                x3=parseFloat(conditionStateLines[c][7]);
                y4=parseFloat(conditionStateLines[c][8]);
                x4=parseFloat(conditionStateLines[c][9]);
                
                lineBounds=new GLatLngBounds(new GLatLng(y3,x3),new GLatLng(y4,x4))
                
                if (!(impact)||impact.toUpperCase()==conditionStateLines[c][3].toUpperCase()){
                    if ((lineBounds.intersects(mapBounds)||mapBounds.intersects(lineBounds)||lineBounds.containsBounds(mapBounds)||mapBounds.containsBounds(lineBounds))){

                        var holdColor
                        var holdTransparency
                        var holdmessage
                        
                        switch (conditionStateLines[c][3].toUpperCase()){
                            case "CLEAR":
                                holdColor="#2A7F00";
                                holdTransparency=.8;
                                holdmessage='Clear';
                                break;
                            case "COVERED":
                                holdColor="#DA70D6";
                                holdTransparency=.8;
                                holdmessage='Covered';
                                break;
                            case "PARTLY COVERED":
                                holdColor="#0000FF";
                                holdTransparency=.4;
                                holdmessage='Partly Covered';
                                break;
                            case "CLOSED":
                                holdColor="#FF0000";
                                holdmessage='Closed';
                                break;
                        }
                        
                        line=new GPolyline.fromEncoded({
                            color: holdColor,
                            weight: 8,
                            opacity: holdTransparency,
                            points: conditionStateLines[c][0][0],
                            levels: conditionStateLines[c][0][1],
                            zoomFactor: 2,
                            numLevels: 18
                        });
                                               
                        line.bottom=y3;
                        line.top=y4;
                        line.left=x3;
                        line.right=x4;
                        line.inMap=true;
                        line.type=type;
                        line.id=lineCount;
                        line.message=holdmessage
                        lineCount+=1;

                        if (conditionStateLines[c][3].toUpperCase()=="CLOSED"){
                            closedLines.push(line);
                            GEvent.addListener(closedLines[closedLines.length-1], "click", function() { 
                                window.status=this.message;
                            });
                        } else {
                            lines.push(line);
                            GEvent.addListener(lines[lines.length-1], "click", function() { 
                                window.status=this.message;
                            });
                        }
                    }
                }
            }
            break;
            
            //ADD WORKZONES_FUTURE HERE, COPY FROM BELOW CHANGE COLOR
                    case "WORKZONES_FUTURE":
            for (c=0;c<workzoneLines_Future.length;c++){
                y3=parseFloat(workzoneLines_Future[c][16]);
                x3=parseFloat(workzoneLines_Future[c][17]);
                y4=parseFloat(workzoneLines_Future[c][18]);
                x4=parseFloat(workzoneLines_Future[c][19]);
                
                lineBounds=new GLatLngBounds(new GLatLng(y3,x3),new GLatLng(y4,x4))
                
                if (!(impact)||impact.toUpperCase()==workzoneLines_Future[c][15].toUpperCase()){
                    
                    if ((lineBounds.intersects(mapBounds)||mapBounds.intersects(lineBounds)||lineBounds.containsBounds(mapBounds)||mapBounds.containsBounds(lineBounds))){
                        
                        var holdColor
                        
                        switch (workzoneLines_Future[c][15].toUpperCase()){
                            case "LOW":
                                holdColor="#0000FF";
                                break;
                            case "MEDIUM":
                                holdColor="#0000FF";
                                break;
                            case "HIGH":
                                holdColor="#0000FF";
                                break;
                            case "CLOSED":
                                holdColor="#0000FF";
                                break;
                        }
                        
                        line=new GPolyline.fromEncoded({
                            color: holdColor,
                            weight: 5,
                            opacity: 1,
                            points: workzoneLines_Future[c][0][0],
                            levels: workzoneLines_Future[c][0][1],
                            zoomFactor: 2,
                            numLevels: 18
                        });
                        
                        line.bottom=y3;
                        line.top=y4;
                        line.left=x3;
                        line.right=x4;
                        line.inMap=true;
                        line.type=type;
                        line.id=lineCount;
                        lineCount+=1;

                        //if (workzoneLines_Future[c][15].toUpperCase()=="CLOSED"){
                         //   closedLines.push(line);
                        //} else {
                            lines.push(line);
                        //}
                    }
                }
            }
            break;
        case "WORKZONES":
            for (c=0;c<workzoneLines.length;c++){
                y3=parseFloat(workzoneLines[c][16]);
                x3=parseFloat(workzoneLines[c][17]);
                y4=parseFloat(workzoneLines[c][18]);
                x4=parseFloat(workzoneLines[c][19]);
                
                lineBounds=new GLatLngBounds(new GLatLng(y3,x3),new GLatLng(y4,x4))
                
                if (!(impact)||impact.toUpperCase()==workzoneLines[c][15].toUpperCase()){
                    
                    if ((lineBounds.intersects(mapBounds)||mapBounds.intersects(lineBounds)||lineBounds.containsBounds(mapBounds)||mapBounds.containsBounds(lineBounds))){
                        
                        var holdColor
                        
                        switch (workzoneLines[c][15].toUpperCase()){
                            case "LOW":
                                holdColor="#2A7F00";
                                break;
                            case "MEDIUM":
                                holdColor="#D4D42A";
                                break;
                            case "HIGH":
                                holdColor="#D47F2A";
                                break;
                            case "CLOSED":
                                holdColor="#FF0000";
                                break;
                        }
                        
                        line=new GPolyline.fromEncoded({
                            color: holdColor,
                            weight: 5,
                            opacity: 1,
                            points: workzoneLines[c][0][0],
                            levels: workzoneLines[c][0][1],
                            zoomFactor: 2,
                            numLevels: 18
                        });
                        
                        line.bottom=y3;
                        line.top=y4;
                        line.left=x3;
                        line.right=x4;
                        line.inMap=true;
                        line.type=type;
                        line.id=lineCount;
                        lineCount+=1;

                        if (workzoneLines[c][15].toUpperCase()=="CLOSED"){
                            closedLines.push(line);
                        } else {
                            lines.push(line);
                        }
                    }
                }
            }
            break;
        case "INCIDENTS":
            for (c=0;c<incidentLines.length;c++){
                y3=parseFloat(incidentLines[c][14]);
                x3=parseFloat(incidentLines[c][15]);
                y4=parseFloat(incidentLines[c][16]);
                x4=parseFloat(incidentLines[c][17]);
                
                lineBounds=new GLatLngBounds(new GLatLng(y3,x3),new GLatLng(y4,x4))
                
                var holdColor
                
                if ((lineBounds.intersects(mapBounds)||mapBounds.intersects(lineBounds)||lineBounds.containsBounds(mapBounds)||mapBounds.containsBounds(lineBounds))){
                
                    switch (incidentLines[c][23].toUpperCase()){
                        case "POSSIBLE DELAYS":
                            holdColor="#D4D42A";
                            break;
                        case "EXPECT DELAYS":
                            holdColor="#D47F2A";
                            break;
                        case "CLOSED":
                            holdColor="#FF0000";
                            break;
                    }
                
                    line=new GPolyline.fromEncoded({
                        color: holdColor,
                        weight: 5,
                        opacity: 1,
                        points: incidentLines[c][0][0],
                        levels: incidentLines[c][0][1],
                        zoomFactor: 2,
                        numLevels: 18
                    });
                    
                    line.bottom=y3;
                    line.top=y4;
                    line.left=x3;
                    line.right=x4;
                    line.inMap=true;
                    line.type=type;
                    line.id=lineCount;
                    lineCount+=1;

                    if (incidentLines[c][23].toUpperCase()=="CLOSED"){
                        closedLines.push(line);
                    } else {
                        lines.push(line);
                    }
                }
            }
            break;
        case "FLOOD":
            for (c=0;c<floodLines.length;c++){
                y3=parseFloat(floodLines[c][12]);
                x3=parseFloat(floodLines[c][13]);
                y4=parseFloat(floodLines[c][14]);
                x4=parseFloat(floodLines[c][15]);
                
                lineBounds=new GLatLngBounds(new GLatLng(y3,x3),new GLatLng(y4,x4))
                
                var holdColor="#FF0000";
                
                if ((lineBounds.intersects(mapBounds)||mapBounds.intersects(lineBounds)||lineBounds.containsBounds(mapBounds)||mapBounds.containsBounds(lineBounds))){
                    line=new GPolyline.fromEncoded({
                        color: holdColor,
                        weight: 5,
                        opacity: 1,
                        points: floodLines[c][0][0],
                        levels: floodLines[c][0][1],
                        zoomFactor: 2,
                        numLevels: 18
                    });
                    
                    line.bottom=y3;
                    line.top=y4;
                    line.left=x3;
                    line.right=x4;
                    line.inMap=true;
                    line.type=type;
                    line.id=lineCount;
                    lineCount+=1;

                    closedLines.push(line);
                }
            }
            break;
    }
}

function drawLines(){

    for (c=0;c<lines.length;c++){
        if (lines[c].inMap){
            map.addOverlay(lines[c]);
        }
    }
    
    for (c=0;c<closedLines.length;c++){
        if (closedLines[c].inMap){
            map.addOverlay(closedLines[c]);
        }
    }
    
    chkEnable();
    hideLoading();
}

function storeLines(lineArray,type){

	var globalLines = lineArray.split("#");

    var holdLines=globalLines[0].split(",");
    var holdLevels=globalLines[1].split(",");
    var holdAttributes=globalLines[2].split(";");
    
    switch (type.toUpperCase()){
    //ADD CASE("WORKZONES_FUTURE") COPY CODE FROM BELOW 
       case ("WORKZONES_FUTURE"):
            for (c=0;c<holdLines.length;c++){
                workzoneLines_Future[c]=new Array();
                workzoneLines_Future[c][0]=new Array();
                workzoneLines_Future[c][0][0]=holdLines[c];
                workzoneLines_Future[c][0][1]=holdLevels[c];
	    	
		var tempa = holdAttributes[c].split(",");
		var cnt = tempa.length;
                for (n=0;n<cnt;n++){
                    workzoneLines_Future[c][n+1]=tempa[n];
                }
            }
            
            var holdArray1=new Array();
            var holdArray2=new Array();
            var holdArray3=new Array();
            //can possibly combine to one for this 
            for (c=0;c<workzoneLines_Future.length;c++){
                if (workzoneLines_Future[c][15]=="MEDIUM"){
                    holdArray1.push(workzoneLines_Future[c]);
                }
                else if (workzoneLines_Future[c][15]=="HIGH"){
                    holdArray2.push(workzoneLines_Future[c]);
                }
                else if (workzoneLines[c][15]=="CLOSED"){
                    holdArray3.push(workzoneLines_Future[c]);
                }
            }
            var newArray=new Array();
            workzoneLines_Future=newArray.concat(holdArray1,holdArray2,holdArray3);
            
            break;
        case ("WORKZONES"):
            for (c=0;c<holdLines.length;c++){
                workzoneLines[c]=new Array();
                workzoneLines[c][0]=new Array();
                workzoneLines[c][0][0]=holdLines[c];
                workzoneLines[c][0][1]=holdLevels[c];
		
		var tempa = holdAttributes[c].split(",");
		var cnt = tempa.length;
                for (n=0;n<cnt;n++){
                    workzoneLines[c][n+1]=tempa[n];
                }
            }
            
            var holdArray1=new Array();
            var holdArray2=new Array();
            var holdArray3=new Array();
            
            for (c=0;c<workzoneLines.length;c++){
                if (workzoneLines[c][15]=="MEDIUM"){
                    holdArray1.push(workzoneLines[c]);
                }
                else if (workzoneLines[c][15]=="HIGH"){
                    holdArray2.push(workzoneLines[c]);
                }
                else if (workzoneLines[c][15]=="CLOSED"){
                    holdArray3.push(workzoneLines[c]);
                }
            }
            var newArray=new Array();
            workzoneLines=newArray.concat(holdArray1,holdArray2,holdArray3);
            
            break;
        case ("INCIDENTS"):
            for (c=0;c<holdLines.length;c++){
                incidentLines[c]=new Array();
                incidentLines[c][0]=new Array();
                incidentLines[c][0][0]=holdLines[c];
                incidentLines[c][0][1]=holdLevels[c];
		
		var tempa = holdAttributes[c].split(",");
		var cnt = tempa.length; 
                for (n=0;n<cnt;n++){
                    incidentLines[c][n+1]=tempa[n];
                }
            }
            
            var holdArray1=new Array();
            var holdArray2=new Array();
            var holdArray3=new Array();
            
            for (c=0;c<incidentLines.length;c++){
                if (incidentLines[c][23]=="POSSIBLE DELAYS"){
                    holdArray1.push(incidentLines[c]);
                }
                else if (incidentLines[c][23]=="EXPECT DELAYS"){
                    holdArray2.push(incidentLines[c]);
                }
                else if (incidentLines[c][23]=="CLOSED"){
                    holdArray3.push(incidentLines[c]);
                }
            }
            
            var newArray=new Array();
            incidentLines=newArray.concat(holdArray1,holdArray2,holdArray3);

            break;
        case ("CONDITIONS"):
            for (c=0;c<holdLines.length;c++){
                conditionLines[c]=new Array();
                conditionLines[c][0]=new Array();
                conditionLines[c][0][0]=holdLines[c];
                conditionLines[c][0][1]=holdLevels[c];
		
		var tempa = holdAttributes[c].split(",");
		var cnt = tempa.length;
                for (n=0;n<cnt;n++){
                    conditionLines[c][n+1]=tempa[n];
                }
            }
            
            var holdArray1=new Array();
            var holdArray2=new Array();
            var holdArray3=new Array();
            var holdArray4=new Array();
            var holdArray5=new Array();
            
            for (c=0;c<conditionLines.length;c++){
                if (conditionLines[c][3]=="CLEAR"){
                    holdArray1.push(conditionLines[c]);
                }
                else if (conditionLines[c][3]=="DRY"){
                    holdArray1.push(conditionLines[c]);
                }
                else if (conditionLines[c][3]=="WET"){
                    holdArray2.push(conditionLines[c]);
                }
                else if (conditionLines[c][3]=="PARTLY COVERED"){
                    holdArray3.push(conditionLines[c]);
                }
                else if (conditionLines[c][3]=="COVERED"){
                    holdArray4.push(conditionLines[c]);
                }
                else if (conditionLines[c][3]=="CLOSED"){
                    holdArray5.push(conditionLines[c]);
                }
            }
            
            var newArray=new Array();
            conditionLines=newArray.concat(holdArray1,holdArray2,holdArray3,holdArray4,holdArray5);
            
            break;
        case ("FLOOD"):
            for (c=0;c<holdLines.length;c++){
                floodLines[c]=new Array();
                floodLines[c][0]=new Array();
                floodLines[c][0][0]=holdLines[c];
                floodLines[c][0][1]=holdLevels[c];
		
		var tempa = holdAttributes[c].split(",");
		var cnt = tempa.length; 
                for (n=0;n<cnt;n++){
                    floodLines[c][n+1]=tempa[n];
                }
            }
            break;
        case ("STATE_CONDITIONS"):
            for (c=0;c<holdLines.length;c++){
                conditionStateLines[c]=new Array();
                conditionStateLines[c][0]=new Array();
                conditionStateLines[c][0][0]=holdLines[c];
                conditionStateLines[c][0][1]=holdLevels[c];
		
		var tempa = holdAttributes[c].split(",");
		var cnt = tempa.length;
                for (n=0;n<cnt;n++){
                    conditionStateLines[c][n+1]=tempa[n];
                }
            }
            var holdArray1=new Array();
            var holdArray2=new Array();
            var holdArray3=new Array();
            var holdArray4=new Array();
            var holdArray5=new Array();
            
            for (c=0;c<conditionStateLines.length;c++){
                if (conditionStateLines[c][3]=="CLEAR"){
                    holdArray1.push(conditionStateLines[c]);
                }
                else if (conditionStateLines[c][3]=="DRY"){
                    holdArray1.push(conditionStateLines[c]);
                }
                else if (conditionStateLines[c][3]=="WET"){
                    holdArray2.push(conditionStateLines[c]);
                }
                else if (conditionStateLines[c][3]=="PARTLY COVERED"){
                    holdArray3.push(conditionStateLines[c]);
                }
                else if (conditionStateLines[c][3]=="COVERED"){
                    holdArray4.push(conditionStateLines[c]);
                }
                else if (conditionStateLines[c][3]=="CLOSED"){
                    holdArray5.push(conditionStateLines[c]);
                }
            }
            
            var newArray=new Array();
            conditionStateLines=newArray.concat(holdArray1,holdArray2,holdArray3,holdArray4,holdArray5);
            
            break;
    }
}

