var allData = [];
GDownloadUrl("map/Data.csv", function(dataDoc){
	allData = dataDoc.split("\n");});

function loadCSO(){
    var sqlUrl2 = "map/service.txt";	
    GDownloadUrl(sqlUrl2,  function(doc){
        var cso = doc.split("$");
    	for(var i=0; i < cso.length; i++){
                var area = cso[i].split(":");
    		var csoName =  area[0], spoly = [], pnts = area[2].split(";");
    		var centerXY =  area[1].split(",");
    		var csoCenter = new GLatLng(parseFloat(centerXY[1]),parseFloat(centerXY[0]));			
		   
    		var csoBorder = [];
    		for(var n = 0; n < pnts.length; n++){
                    var xy = pnts[n].split(",");
		    csoBorder.push(new GLatLng(parseFloat(xy[1]),parseFloat(xy[0])));			
    		}			  
                csoPoly.push(new CSOPoly(csoName,csoCenter,csoBorder));
            }
    	  addCSOPoly();
      });
  }
  
function loadService(){
    var sqlUrl = "map/separation.txt";
    GDownloadUrl(sqlUrl,  function(doc){
        var service = doc.split("$");
    	for(var i=0; i < service.length; i++){
                var area = service[i].split(":");
    		var sName =  area[0], spoly = [], pnts = area[2].split(";");
    		var centerXY =  area[1].split(",");
    		var centerPoint = new GLatLng(parseFloat(centerXY[1]),parseFloat(centerXY[0]));			
		   
    		var serviceBorder = [];
    		for(var n = 0; n < pnts.length; n++){
                    var xy = pnts[n].split(",");
		    serviceBorder.push(new GLatLng(parseFloat(xy[1]),parseFloat(xy[0])));			
    		}			  
                var popUp = getProjData(sName);
		pColor = popUp[1].replace(new RegExp("\\s", "g" ),"");
		servicePolys.push(new ServicePoly(sName,centerPoint,serviceBorder, popUp[0], pColor));
            }
    	  addServicePoly();
      });
  }
  
function addServicePoly(){
        for(var i1 = 0; i1  < servicePolys.length; i1++){ map.addOverlay(servicePolys[i1].overlay);  }
        //updateServiceInfo();
    }
    
function addCSOPoly(){
        for(var i1 = 0; i1  < csoPoly.length; i1++){ map.addOverlay(csoPoly[i1].overlay);  }
        updateCSOInfo();
    }
    
function getProjData(sName){	
	pName = sName.replace(new RegExp("\\s", "g" ),"");
	var popUp = [pName, 'F'];
	for(var i=1; i < allData.length; i++){
	    var projData = allData[i].split(":");
	    if (removeQuotes(projData[0]) == pName) {
		popUp = ['<body leftmargin="0" topmargin="0" bottommargin="0" rightmargin="0">' +
		    '<table border="1" width="300" cellpadding="2" cellspacing="0" style="font-size:10px">' +
		    '<tr bgcolor="#9CBCE2"><th align="left" colspan="2">' + removeQuotes(projData[1]) + '</th></tr>' +
		    '<tr><td>Project Type</td><td>' + removeQuotes(projData[2]) + '</td></tr>' +
		    '<tr><td>Project #</td><td>' + removeQuotes(projData[3]) + '</td></tr>' +
		    '<tr><td>Basin</td><td>' + removeQuotes(projData[4]) + '</td></tr>' +
		    '<tr><td>Project Desc</td><td>' + removeQuotes(projData[6]) + '</td></tr>' +
		    '<tr><td>Benefits</td><td>' + removeQuotes(projData[7]) + '</td></tr>' +
		    '<tr><td>Status</td><td>' + removeQuotes(projData[9]) + '</td></tr>' +
		    '<tr><td>Contact</td><td>' + removeQuotes(projData[10]) + ' (' + removeQuotes(projData[11]) + ')' + '</td></tr>' +
		    '<tr><td>' + removeQuotes(projData[15]) + '</td><td>' + removeQuotes(projData[12]) + ' (' + removeQuotes(projData[13]) + ')' + '</td></tr>' +
		    '<tr><td>Schedule</td><td>' + removeQuotes(projData[14]) + '</td></tr>' +
		    '</table></body></html>', removeQuotes(projData[16])];		
	    }
	}
	return popUp;
    }
    
function removeQuotes(string){
    var newString = string.replace(new RegExp("\"", "g"),"");
    return newString;
    }
 
// Algorithm from http://alienryderflex.com/polygon/ 
GPolygon.prototype.checkIn = function(pos) {
  var oddNodes = false;
  if(this.getVertexCount()!= undefined ){
    var j= this.getVertexCount()-1, x = parseFloat(pos.lng()), y = parseFloat(pos.lat());
    for (var i=0; i < this.getVertexCount(); i++) {
     var x1 = parseFloat(this.getVertex(i).lng()), x2 = parseFloat(this.getVertex(j).lng());
     var y1 = parseFloat(this.getVertex(i).lat()), y2 = parseFloat(this.getVertex(j).lat());
     var v1 = (x2-x1)*(y-y1)/(y2-y1) + x1;
     if (((y1 < y) && (y2 >= y)) || ((y2 < y) && (y1 >= y))) {    if (v1 < x ) { oddNodes = !oddNodes; }} j=i;}
   } return oddNodes;
}

function ServicePoly(id,cp,borderPath,pop,color){
        this.id = id;     this.tip = "";     this.color = color;
        switch(color)
	{
	    case 'A':
		this.overlay = new GPolygon(borderPath, "#FFFF00", 1, 1,"#FFFF00", 0.4);
		GEvent.addListener(this.overlay, "mouseover", function(){
		     document.getElementById("map").style.cursor = "pointer";
		});
		break;
	    case 'C':
		this.overlay = new GPolygon(borderPath, "#00CC00", 1, 1,"#00CC00", 0.4);
		GEvent.addListener(this.overlay, "mouseover", function(){
		     document.getElementById("map").style.cursor = "pointer";
		});
		break;
	    default:
		//this.overlay = new GPolygon(borderPath, "#0066B3", 1, 1,"#e2e2e2", 0.6);
		this.overlay = new GPolygon(borderPath, "#0666CC", 1, 1,"#0666CC", 0.2);
		GEvent.addListener(this.overlay, "mouseover", function(){
		     document.getElementById("map").style.cursor = "pointer";
		});
		break;
	}

        GEvent.addListener(this.overlay, "click",  function(){map.openInfoWindow(cp, pop);}); 
    }  
ServicePoly.prototype.highlight = function() { var bh = { color: "#0066B3",  weight: 3,  opacity: 1};  this.overlay.setStrokeStyle(bh); }   
ServicePoly.prototype.normal = function() {var bn = { color: "#0066B3",  weight: 2,  opacity: 1};	  	this.overlay.setStrokeStyle(bn);}      
ServicePoly.prototype.update = function(tip, fillColor){  this.tip = tip; var bh = { color: fillColor,  weight: 3,  opacity: 0.3};  this.overlay.setFillStyle(bh); }
ServicePoly.prototype.setTip = function(tip){ this.tip = tip; }       
ServicePoly.prototype.remove = function() {	map.removeOverlay(this.overlay);  }

function CSOPoly(id,cp,borderPath){
        this.id = id;     this.tip = "";
        this.overlay = new GPolygon(borderPath, "#848484", 2, 1,"#aaaaaa", 0.2);
	//GEvent.addListener(this.overlay, "click",  function(){map.openInfoWindow(cp, pop);}); 
    }  
CSOPoly.prototype.highlight = function() { var bh = { color: "#0066B3",  weight: 3,  opacity: 1};  this.overlay.setStrokeStyle(bh); }   
CSOPoly.prototype.normal = function() {var bn = { color: "#0066B3",  weight: 2,  opacity: 1};	  	this.overlay.setStrokeStyle(bn);}      
CSOPoly.prototype.update = function(tip){this.tip = tip;}
CSOPoly.prototype.setTip = function(tip){ this.tip = tip; }       
CSOPoly.prototype.remove = function() {	map.removeOverlay(this.overlay);  }

function updateCSOInfo(){
    for(var i1 = 0; i1  < csoPoly.length; i1++){  csoPoly[i1].setTip('');}
    var tooltipHTML = "CSO Service Area";
    var tip = '<div class="tooltip">' + tooltipHTML +'<\/div>';
  
    for(var s = 0; s < csoPoly.length; s++){ 
        csoPoly[s].update(tip);
	}			 
    //mousemovehandler = GEvent.addListener(map, 'mousemove', mouseMoveCB);  	 	 
}

var highCSO; 
function mouseMoveCB(pos){ 
    if(map.getZoom() <= cutLevel){
	//if(highCSO==null){highightCSO(pos);}else if(!highCSO.overlay.checkIn(pos)){removeHighightCSO(); highightCSO(pos);  }
	highightCSO(pos);
    }
}
function highightCSO(pos){    
    for(var i = 0; i < csoPoly.length; i++){
	if(csoPoly[i].overlay.checkIn(pos)){   		    			
	    for(var j = 0; j < servicePolys.length; j++){
		if(!servicePolys[j].overlay.checkIn(pos)){
		    var poly = csoPoly[i]; highCSO = poly; Tip(csoPoly[i].tip); break;
		}
		else{
		    tt_Hide();
		    highCSO = null;
		}
	    }
	}
    }
}
function removeHighightCSO(){
    if(highCSO!=null){tt_Hide();}
    highCSO =  null; 
}
//function removeHighightSep(){
//    if(highSep!=null){highSep.normal();}
//    highSep =  null; 
//}