// ****************************
// Map Client 
// ****************************

var GlState, GlRegion;
var GlLimit=100;
var GlResizeOption;

function createMarker(point,icon,html) {
  var marker = new GMarker(point,icon);
  GEvent.addListener(marker, 'mouseover', function() {
    marker.openInfoWindowHtml(html);
  });
  return marker;
}


ProcessURL=function (data) {
  // Draw Boundary
  var points=[];
  var firstTime=true;
  var bounds=new GLatLngBounds();

  var xmlDoc=GXml.parse(data);
  var Boundary=xmlDoc.getElementsByTagName("Boundary");
  var NBoundary=Boundary.length;
  var TotPts=0;
  var NoMapID=new Array();
  var NoMapName=new Array();

  map.clearOverlays();
//  map.removeOverlay(marker);
  for(var i=0;i<NBoundary;i++){
    var strLat=Boundary[i].getAttribute("Latitude");
    var strLng=Boundary[i].getAttribute("Longitude");

    var LatPts=new Array();
    var LngPts=new Array();
    LatPts=strLat.split(',');
    LngPts=strLng.split(',');
    var NPts=LatPts.length;

    var LastLat=parseInt(LatPts[0]);
    var LastLng=parseInt(LngPts[0]);

    for(var k=0;k<NPts;k++) {
      var lat=parseInt(LatPts[k]);
      var lng=parseInt(LngPts[k]);
      if(k > 0){
	lat=lat+LastLat;
	lng=lng+LastLng;
	LastLat=lat;
	LastLng=lng;
      }
      lat=lat/1000000.0;
      lng=lng/1000000.0;
      var point=new GLatLng(lat,lng);
      bounds.extend(point);
      points.push(point);

      if(k % 225==0 && k!=0 && GlState!='US')
      {
	map.addOverlay(new GPolyline(points, "#056FCA", 3, 1));
	points=[];
	points.push(point);
      }
    }

    if(NPts>1 && GlState!='US'){
      map.addOverlay(new GPolyline(points, "#056FCA", 3, 1));
    }
    points=[];					
    TotPts+=NPts;
  }


  if(GlRegion=='State' && GlState!='US'){
    // Update SelectCounty
    var County=xmlDoc.getElementsByTagName("County");
    var CountyDesig=County[0].getAttribute("Desig");
    var strCID=County[0].getAttribute("CID");
    var strCName=County[0].getAttribute("CName");
    var CID=new Array();
    var CName=new Array();
    CID=strCID.split(',');
    CName=strCName.split(',');
    var NCounties=CID.length;
    var HTML;
    HTML='<FORM><select name="SelCounty" id="leftform" onchange=\'javascript:UpdateMap("'+GlState+'","'+CountyDesig+'",this.form.SelCounty.options[this.form.SelCounty.selectedIndex].value);\'>';
    HTML=HTML+'<option value="0">Choose '+CountyDesig+'</option>';

    for(var k=0;k<NCounties;k++) {
      HTML=HTML+'<option value="'+CID[k]+'">'+CName[k]+'</option>';
    }
    HTML=HTML+'</select></FORM>';
    document.getElementById("SelectCounty").innerHTML=HTML;
  }
  else{
    var Total=xmlDoc.getElementsByTagName("Total");
    if(Total.length>0){
      var NSchools=Total[0].getAttribute("N");
      NSchools=parseInt(NSchools);
    }
    else{
      var NSchools=0;
    }

    // Show school markers
    var icon=new Array();
    icon[0] = new GIcon();
    icon[0].image = "http://www.psk12.com/rating/images/Elem.png";
    icon[0].shadow = "http://www.psk12.com/rating/images/shadow.png";
    icon[0].iconSize = new GSize(12, 20);
    icon[0].shadowSize = new GSize(22, 20);
    icon[0].iconAnchor = new GPoint(6, 20);
    icon[0].infoWindowAnchor = new GPoint(5, 1);
    icon[1] = new GIcon();
    icon[1].image = "http://www.psk12.com/rating/images/Middle.png";
    icon[1].shadow = "http://www.psk12.com/rating/images/shadow.png";
    icon[1].iconSize = new GSize(12, 20);
    icon[1].shadowSize = new GSize(22, 20);
    icon[1].iconAnchor = new GPoint(6, 20);
    icon[1].infoWindowAnchor = new GPoint(5, 1);
    icon[2] = new GIcon();
    icon[2].image = "http://www.psk12.com/rating/images/High.png";
    icon[2].shadow = "http://www.psk12.com/rating/images/shadow.png";
    icon[2].iconSize = new GSize(12, 20);
    icon[2].shadowSize = new GSize(22, 20);
    icon[2].iconAnchor = new GPoint(6, 20);
    icon[2].infoWindowAnchor = new GPoint(5, 1);

    // Rating
    var RatingHTML=new Array();
    RatingHTML[0]='Rating: N/A';
    RatingHTML[1]='Rating: <img src="http://www.psk12.com/review/images/stars-1-0.gif">';
    RatingHTML[2]='Rating: <img src="http://www.psk12.com/review/images/stars-2-0.gif">';
    RatingHTML[3]='Rating: <img src="http://www.psk12.com/review/images/stars-3-0.gif">';
    RatingHTML[4]='Rating: <img src="http://www.psk12.com/review/images/stars-4-0.gif">';
    RatingHTML[5]='Rating: <img src="http://www.psk12.com/review/images/stars-5-0.gif">';

    var School=xmlDoc.getElementsByTagName("School");
    var Nlevel=School.length;
    var TotSch=0;
    var markers=[];
    for(var i=0;i<Nlevel;i++){
      var strLat=School[i].getAttribute("Latitude");
      var strLng=School[i].getAttribute("Longitude");
      var strSchID=School[i].getAttribute("SchID");
      var strSchName=School[i].getAttribute("SchName");
      var strRate=School[i].getAttribute("Rate");
      var LatPts=new Array();
      var LngPts=new Array();
      LatPts=strLat.split(',');
      LngPts=strLng.split(',');
      var NPts=LatPts.length;
      if(strLat==''){
	NPts=0;
      }

      var SchID=new Array();
      var SchName=new Array();
      var Rating=new Array();
      SchID=strSchID.split(',');
      SchName=strSchName.split(',');
      Rating=strRate.split(',');

      var LastLat=parseInt(LatPts[0]);
      var LastLng=parseInt(LngPts[0]);

      for(var k=0;k<NPts;k++) {
	var lat=parseInt(LatPts[k]);
	var lng=parseInt(LngPts[k]);
	if(k > 0){
	  lat=lat+LastLat;
	  lng=lng+LastLng;
	  LastLat=lat;
	  LastLng=lng;
	}
	if(lat!=0 || lng!=0){
	  lat=lat/1000000.0;
	  lng=lng/1000000.0;
	  var point=new GLatLng(lat,lng);
	  bounds.extend(point);
	  var HTML='<div style=\'width: 200px; text-align: left;\'>';
	  if(SchID[k]>0){
	    HTML+='<a href="http://www.psk12.com/rating/USindivphp/SchID_'+SchID[k]+'.html" TARGET="_blank">'+SchName[k]+'</a>';
	  }
	  else{
            var NCESid=0-SchID[k];
	    HTML+='<a href="http://www.psk12.com/rating/NCESindivphp/SchID_'+NCESid+'.html" TARGET="_blank">'+SchName[k]+'</a>';
	  }
	  HTML+='<a href="http://www.psk12.com/rating/MapHelp.php" TARGET="_blank"><img src="http://www.psk12.com/rating/images/Help.png" style="vertical-align:middle; float:right;" border=0 ALT="How to use this map, What this rating means" Title="How to use this map, What this rating means" /></a>';
	  HTML+='<br>';
	  HTML+=RatingHTML[Rating[k]];
	  HTML+='</div>';
	  var marker=createMarker(point,icon[i],HTML);
	  markers.push(marker);
	  map.addOverlay(marker);
	  ++TotSch;
	}
	else{
	  NoMapID.push(SchID[k]);
	  NoMapName.push(SchName[k]);
	}
      }
    }
    if(NSchools>GlLimit){
      var HTML='<div style="padding-top:5px; padding-left:5px; padding-right:5px; padding-bottom: 5px">';
      HTML+='<img onClick="CloseStatus()"; src="http://www.psk12.com/rating/images/close.gif" align="right"><br>';
      HTML+='There are '+NSchools+' schools in the selected area. ';
      HTML+='We are showing only '+GlLimit+' of them. ';
      HTML+='Zoom In and Click <br><center><a href="#" onClick="ShowSchools()";>Show Schools</a></center>';
      HTML+='to see more.<br><br><br><center><a href="#" onClick="CloseStatus()";>Close</a></center>';
      HTML+='</div>';
      document.getElementById("status").innerHTML=HTML;
      document.getElementById("status").style.zIndex=3;
    }
  }

  if((TotPts>1 || TotSch>0 || NSchools>GlLimit) && GlResizeOption==1){
    var Zoom=map.getBoundsZoomLevel(bounds);
    if(Zoom>0){
      map.setZoom(Zoom);
      var clat=(bounds.getNorthEast().lat() + bounds.getSouthWest().lat()) /2;
      var clng=(bounds.getNorthEast().lng() + bounds.getSouthWest().lng()) /2;
      map.setCenter(new GLatLng(clat,clng));
    }
  }
  if(NoMapID.length>0){
    var HTML='<div style="padding-top:5px; padding-left:5px; padding-right:5px; padding-bottom: 5px">';
    HTML+='<img onClick="CloseStatus()"; src="http://www.psk12.com/rating/images/close.gif" align="right"><br>';
    HTML+='Can&#39;t locate:';
    HTML+='<br><br>';
    for(var k=0;k<NoMapID.length;k++) {
      HTML+='<a href="http://www.psk12.com/rating/USindivphp/SchID_'+NoMapID[k]+'.html" TARGET="_blank">'+NoMapName[k]+'<br>';
    }
    HTML+='<br><center><a href="#" onClick="CloseStatus()";>Close</a><br></center>';
    HTML+='</div>';
    document.getElementById("status").innerHTML=HTML;
    document.getElementById("status").style.zIndex=3;
  }
  // Hide Wait Cursor
  document.body.style.cursor = "auto";
}


function CloseStatus() {
  document.getElementById("status").style.zIndex=-1;
}



function UpdateMap(State,Region,RegionID) {
  var url='http://www.psk12.com/rating/MapServer.php?STATE='+State+'&Region='+Region+'&RegionID='+RegionID;

  GlState=State;
  GlRegion=Region;
  // Hide status box
  document.getElementById("status").style.zIndex=-1;

  // Show Wait Cursor
  document.body.style.cursor = "wait";
  GlResizeOption=1;
  GDownloadUrl(url, ProcessURL);
}



function ShowSchools() {
  // Get the current map boundary
  var maxLat=map.getBounds().getNorthEast().lat();
  var maxLng=map.getBounds().getNorthEast().lng();
  var minLat=map.getBounds().getSouthWest().lat();
  var minLng=map.getBounds().getSouthWest().lng();
  var url='http://www.psk12.com/rating/MapServer.php?STATE=XX&maxLat='+maxLat+'&minLat='+minLat+'&maxLng='+maxLng+'&minLng='+minLng;

  // Hide status box
  document.getElementById("status").style.zIndex=-1;

  // Show Wait Cursor
  document.body.style.cursor = "wait";
  GlResizeOption=0;
  GDownloadUrl(url, ProcessURL);
}
