
var gMap;var gMarkers=[];var refMarker;var refLatLng;var geocoder;var attPolyID=-1;var displayedPolygonIndex=-1;var gPolygons=[];var linewidth;var linecolor;var lineopacity;var polyfill;var polyoutline;var polycolor;var polyopacity;var kmlBasePath="http://internet2.trincoll.edu/GMaps/Xml/SmartChoiceKML/";var feedback;var txtAddress;var hartZone;var gradeChoice;var userDiv;var sortBar;var sortColumn;var chkInsideDistrict;var chkInterDistrict;var mapContainer;var btnSearch;var working;var results;var resultsHeader;var isResultsHeaderHidden=true;var scrollResults=false;var userID=0;var isWorkshop=false;var randomSortCol=true;var selectedColumn=-1;var sortColor="#e0eae8";var col0;var col1;var col2;var col3;var col4;var sacell;var isDebug=false;var SmartChoiceResults_ajax;var getResultsUrl='http://internet2.trincoll.edu/uRest/SmartChoiceSearchResults.aspx';var PostMimeType='application/x-www-form-urlencoded';var busy=false;var SmartChoiceInit_ajax;var initSmartChoiceUrl='http://internet2.trincoll.edu/uRest/SmartChoiceInit.aspx';function SmartChoiceInit()
{var args=getQueryStringArgs();isDebug=args.debug||false;scrollResults=args.sr||false;selectedColumn=args.sid?(isNaN(parseInt(args.sid))?-1:parseInt(args.sid)):-1;isWorkshop=args.w?(args.w=='1'?true:false):false;if(isWorkshop)
randomSortCol=true;else
randomSortCol=args.rs?(args.rs=='1'?true:false):true;if(selectedColumn!=-1)
randomSortCol=false;SmartChoiceResults_ajax=new Ajax();SmartChoiceResults_ajax.complete=SmartChoiceResults_callback;SmartChoiceInit_ajax=new Ajax();SmartChoiceInit_ajax.complete=SmartChoiceInit_callback;feedback=getObjRef('feedback');txtAddress=getObjRef('txtAddress');hartZone=getObjRef('hartZone');gradeChoice=getObjRef('gradeChoice');userDiv=getObjRef('userDiv');sortBar=getObjRef('sortBar');sortColumn=getObjRef('sortColumn');chkInsideDistrict=getObjRef('chkInsideDistrict');chkInterDistrict=getObjRef('chkInterDistrict');btnSearch=getObjRef('btnSearch');mapContainer=getObjRef('mapContainer');results=getObjRef('results');resultsHeader=getObjRef('resultsheader');working=getObjRef('working');if(sortBar)
hide(sortBar);if(hartZone)
hide(hartZone);col0=getObjRef('col0');col1=getObjRef('col1');col2=getObjRef('col2');col3=getObjRef('col3');col4=getObjRef('col4');sacell=getObjRef('sacell');if(results&&scrollResults)
{var resultsStyle=getObjStyle(results);if(resultsStyle)
{resultsStyle.height="300px";resultsStyle.overflow="auto";}}
setSize(mapContainer,636,420);gMap=new GMap2(mapContainer);gMap.addControl(new GLargeMapControl());gMap.addControl(new GMapTypeControl());gMap.addControl(new GScaleControl());gMap.enableContinuousZoom();gMap.enableScrollWheelZoom();gMap.setCenter(new GLatLng(41.766558512059326,-72.67359495162964),11);geocoder=new GClientGeocoder();baseIcon=new GIcon();baseIcon.shadow="http://maps.google.com/mapfiles/ms/micons/msmarker.shadow.png";baseIcon.iconSize=new GSize(32,32);baseIcon.shadowSize=new GSize(59,32);baseIcon.iconAnchor=new GPoint(16,32);baseIcon.dragCrossAnchor=new GPoint(2,8);baseIcon.infoWindowAnchor=new GPoint(9,2);setEventListeners();if(txtAddress)
{if(txtAddress.addEventListener)
txtAddress.addEventListener("blur",getAddressLatLng,false);else
txtAddress.onblur=getAddressLatLng;}
if(gradeChoice)
{if(gradeChoice.addEventListener)
gradeChoice.addEventListener("change",gradeSelected,false);else
gradeChoice.onchange=gradeSelected;}
if(sortColumn)
{if(sortColumn.addEventListener)
sortColumn.addEventListener("change",sortColumnSelected,false);else
sortColumn.onchange=sortColumnSelected;}
if(chkInsideDistrict)
{if(chkInsideDistrict.addEventListener)
chkInsideDistrict.addEventListener("click",checkboxChange,false);else
chkInsideDistrict.onclick=checkboxChange;}
if(chkInterDistrict)
{if(chkInterDistrict.addEventListener)
chkInterDistrict.addEventListener("click",checkboxChange,false);else
chkInterDistrict.onclick=checkboxChange;}
if(btnSearch)
{if(btnSearch.addEventListener)
btnSearch.addEventListener("click",getResults,false);else
btnSearch.onclick=getResults;btnSearch.disabled=true;}
getUserID(isWorkshop,randomSortCol);if(feedback){feedback.innerHTML="Please enter your address.";}}
function getAddressLatLng(evt)
{evt=(evt)?evt:((window.event)?event:null);if(!evt)return;if(geocoder)
{if(btnSearch)
{btnSearch.disabled=true;if(working){show(working);}}
geocoder.getLatLng(this.value,function(point)
{refLatLng=point;if(refMarker)
{try{gMap.removeOverlay(refMarker)}catch(e){}}
if(point)
{if(refMarker)
{refMarker.setLatLng(refLatLng);}
else
{var icon=new GIcon(baseIcon);icon.shadow='http://maps.google.com/mapfiles/ms/micons/pushpin_shadow.png';icon.image='http://maps.google.com/mapfiles/ms/micons/red-pushpin.png';refMarker=new GMarker(refLatLng,{icon:icon,title:'Student\'s address'});}
gMap.setCenter(refLatLng);gMap.addOverlay(refMarker);if(gPolygons&&gPolygons.length>0)
{if(feedback&&isDebug){feedback.innerHTML="Finding polygon...";}
for(var i=0;i<gPolygons.length;i++)
{if(gPolygons[i].contains(refLatLng))
{if(displayedPolygonIndex!=i)
{if(displayedPolygonIndex>=0&&displayedPolygonIndex<gPolygons.length)
try{gMap.removeOverlay(gPolygons[displayedPolygonIndex]);}catch(e){}
displayedPolygonIndex=i;attPolyID=gPolygons[i].my_ID;gMap.addOverlay(gPolygons[i])
if(feedback&&isDebug){feedback.innerHTML="Done: polygon ID = "+attPolyID.toString();}}
else
if(feedback&&isDebug){feedback.innerHTML="Same polygon: ID = "+attPolyID.toString();}
break;}}
if(i>=gPolygons.length)
{if(feedback){feedback.innerHTML="Sorry, your address is outside our current map.<br />The results will show Interdistrict schools only.<br />Click the Search button to see/update the data.";}
btnSearch.disabled=false;attPolyID=-1;if(displayedPolygonIndex>=0&&displayedPolygonIndex<gPolygons.length)
try{gMap.removeOverlay(gPolygons[displayedPolygonIndex]);}catch(e){}
displayedPolygonIndex=-1;if(chkInsideDistrict&&chkInterDistrict)
{chkInsideDistrict.checked=false;chkInterDistrict.checked=true;chkInsideDistrict.disabled=true;}}
else if(feedback&&!isDebug)
{if(chkInsideDistrict)
{chkInsideDistrict.disabled=false;chkInsideDistrict.checked=true;}
feedback.innerHTML="Click the Search button to see/update the data.";btnSearch.disabled=false;}}
else
{if(feedback)
{if(isDebug){feedback.innerHTML="No KML file loaded.";}
else{feedback.innerHTML="Please select a grade.";}}
attPolyID=-1;displayedPolygonIndex=-1;}}
else
{if(feedback){feedback.innerHTML="Unable to find this address";}
attPolyID=-1;if(gPolygons&&displayedPolygonIndex>=0&&displayedPolygonIndex<gPolygons.length)
{try{gMap.removeOverlay(gPolygons[displayedPolygonIndex]);}catch(e){}}
displayedPolygonIndex=-1;}
if(hartZone)
{if(attPolyID>=1&&attPolyID<=4)
{show(hartZone);hartZone.innerHTML="You live in Hartford zone "+attPolyID.toString();}
else
hide(hartZone);}
if(working){hide(working);}});}}
function gradeSelected(evt)
{evt=(evt)?evt:((window.event)?event:null);if(!evt)return;if(gradeChoice)
{if(btnSearch)
{btnSearch.disabled=true;}
var grade=gradeChoice.value;if(grade>0)
{if(working){show(working);}
GDownloadUrl(kmlBasePath+grade.toString()+".xml",processZoneKML);}
else if(feedback){feedback.innerHTML="Please select a grade.";}}}
function sortColumnSelected(evt)
{evt=(evt)?evt:((window.event)?event:null);if(!evt)return;if(!chkInsideDistrict.checked&&!chkInterDistrict.checked)
alert("Please select District schools and/or Interdistrict schools.");else
{if(btnSearch)
{btnSearch.disabled=true;if(working){show(working);}}
busy=false;fetchResults();}}
function checkboxChange(evt)
{evt=(evt)?evt:((window.event)?event:null);if(!evt)return;if(feedback){feedback.innerHTML="Click the Search button to see/update the data.";}}
function getResults(evt)
{evt=(evt)?evt:((window.event)?event:null);if(!evt)return;if(!chkInsideDistrict.checked&&!chkInterDistrict.checked)
alert("Please select District schools and/or Interdistrict schools.");else
{if(btnSearch)
{btnSearch.disabled=true;if(working){show(working);}}
busy=false;fetchResults();}
if(use_dom2)
{evt.preventDefault();return true;}
else
return false;}
function setEventListeners()
{GEvent.addListener(gMap,"click",function(overlay,point)
{if(overlay&&overlay.my_html)
overlay.openInfoWindowHtml('<div style="padding-top:10px;">'+overlay.my_html+'</div>');});}
function rsClick(markerID)
{if(gMarkers)
{for(i=0;i<gMarkers.length;i++)
{if(gMarkers[i].my_ID==markerID)
{gMarkers[i].openInfoWindowHtml('<div style="padding-top:10px;">'+gMarkers[i].my_html+'</div>');break;}}}}
function getUserID(isWorkshop,randomSortCol)
{if(!initSmartChoiceUrl)
return;var content='';if(isWorkshop)
content='w=1';if(randomSortCol)
{if(content.length>0)
content+='&s=1';else
content='s=1';}
SmartChoiceInit_ajax.post(initSmartChoiceUrl,PostMimeType,content.length,encodeURI(content));}
function fetchResults(content)
{if(busy)
{if(!content||content.length==0)
feedback.innerHTML='Processing. Please wait...';else
alert('Processing. Please wait a few seconds and try again.');return;}
busy=true;var arg;if(!content||content.length==0)
{content='';if(refLatLng)
content='refLng='+refLatLng.lng()+'&refLat='+refLatLng.lat();if(attPolyID&&attPolyID>=0)
{if(content.length>0)
content+='&';content+='&attPolyID='+attPolyID;}
if(content.length>0)
content+='&';content+='gradeID='+gradeChoice.value;if(content.length>0)
content+='&';if(chkInsideDistrict.checked)
content+='includeDistrict=true';else
content+='includeDistrict=false';if(content.length>0)
content+='&';if(chkInterDistrict.checked)
content+='includeInterDistrict=true';else
content+='includeInterDistrict=false';if(content.length>0)
content+='&';content+='uid='+userID;if(content.length>0)
content+='&';content+='sortby='+sortColumn.value;arg=new CallerContext(fetchResults,content);SmartChoiceResults_ajax.post(getResultsUrl,PostMimeType,content.length,encodeURI(content),{callerContext:arg,sortColumnIndex:sortColumn.value});}
else
{var SmartChoiceResults_ajax1=new Ajax();SmartChoiceResults_ajax1.complete=SmartChoiceResults_callback;SmartChoiceResults_ajax.post(getResultsUrl,PostMimeType,content.length,encodeURI(content));}}
function SmartChoiceInit_callback(status,statusText,responseText,responseXML,args)
{var init_vals=responseText.split(',');if(init_vals)
{if(init_vals.length>0)
{userID=isNaN(parseInt(init_vals[0]))?-1:parseInt(init_vals[0]);if(init_vals.length>1&&randomSortCol)
selectedColumn=isNaN(parseInt(init_vals[1]))?0:parseInt(init_vals[1]);}}
if(userID&&userID>=0&&userDiv&&isWorkshop)
userDiv.innerHTML='User: '+userID.toString();if(selectedColumn<0||selectedColumn>4)
selectedColumn=0;if(selectedColumn>0)
{if(sortColumn)
sortColumn.selectedIndex=selectedColumn;}}
function SmartChoiceResults_callback(status,statusText,responseText,responseXML,args)
{busy=false;if(responseText.substring(0,5)!="ERROR:")
{var tmp=responseXML.documentElement.getElementsByTagName("resultsTable")[0];var resultsTable;if(tmp.textContent)
resultsTable=tmp.textContent;else
resultsTable=tmp.firstChild.data;setBGColor(col0,"white");setBGColor(col1,"white");setBGColor(col2,"white");setBGColor(col3,"white");setBGColor(col4,"white");setBGColor(sacell,"white");var sortTD=getObjRef('col'+args.sortColumnIndex.toString());if(sortTD)
{setBGColor(sortTD,sortColor);if(args.sortColumnIndex==3||args.sortColumnIndex==4)
setBGColor(sacell,sortColor);}
if(resultsTable&&results)
{if(isResultsHeaderHidden)
show(resultsHeader);results.innerHTML=resultsTable;}
if(gMarkers)
gMarkers.splice(0,gMarkers.length);gMap.clearOverlays();if(refMarker)
{refMarker.setLatLng(refLatLng);gMap.addOverlay(refMarker);}
if(gPolygons&&displayedPolygonIndex>=0&&displayedPolygonIndex<gPolygons.length)
gMap.addOverlay(gPolygons[displayedPolygonIndex]);markers=responseXML.documentElement.getElementsByTagName("marker");if(markers)
{if(feedback)
{if(markers.length==0)
feedback.innerHTML='No matches found.';else if(markers.length==1)
feedback.innerHTML='One school found.';else
feedback.innerHTML=markers.length+' schools found.';}}
var blueicon=new GIcon(baseIcon);blueicon.image='http://maps.google.com/mapfiles/ms/micons/blue.png';var greenicon=new GIcon(baseIcon);greenicon.image='http://maps.google.com/mapfiles/ms/micons/green.png';for(var i=0;i<markers.length;i++)
{var lat=parseFloat(markers[i].getAttribute("lat"));var lng=parseFloat(markers[i].getAttribute("lng"));var htmlAddress=markers[i].getElementsByTagName("htmlAddress")[0].firstChild.data;var label=markers[i].getAttribute("label");var color=markers[i].getAttribute("color");var marker;if(color=='blue')
marker=new GMarker(new GLatLng(lat,lng),{icon:blueicon,title:label});else if(color=='green')
marker=new GMarker(new GLatLng(lat,lng),{icon:greenicon,title:label});marker.my_html=htmlAddress;var markerID=markers[i].getAttribute("markerID");marker.my_ID=markerID;gMap.addOverlay(marker);gMarkers.push(marker);}}
if(btnSearch)
{btnSearch.disabled=false;if(working){hide(working);}}
if(sortBar)
show(sortBar);}
GPolygon.prototype.contains=function(point)
{var j=0;var oddNodes=false;var x=point.lng();var y=point.lat();for(var i=0;i<this.getVertexCount();i++)
{j++;if(j==this.getVertexCount()){j=0;}
var xi=this.getVertex(i).lng();var yi=this.getVertex(i).lat();var xj=this.getVertex(j).lng();var yj=this.getVertex(j).lat();if(yi==y&&yj==y)
{if((xi<=x&&xj>=x)||(xi>=x&&xj<=x))
return true;else
continue;}
if(((yi<y)&&(yj>=y))||((yj<y)&&(yi>=y)))
{if(xi+(y-yi)*(xj-xi)/(yj-yi)<x)
{oddNodes=!oddNodes}}}
return oddNodes;}
function getXmlValue(e)
{a=GXml.value(e);a=a.replace(/^\s*/,"");a=a.replace(/\s*$/,"");return a;}
function processZoneKML(doc,httpStatus)
{if(doc)
{if(feedback&&isDebug){feedback.innerHTML="Loading KML file...";}
var xmlDoc=GXml.parse(doc);var style=xmlDoc.documentElement.getElementsByTagName("Style")[0];var styleID=style.getAttribute("id");var linestyles=style.getElementsByTagName("LineStyle");if(linestyles.length>0)
{linewidth=parseInt(GXml.value(linestyles[0].getElementsByTagName("width")[0]));if(!linewidth||linewidth<1){linewidth=1;}
var color=getXmlValue(linestyles[0].getElementsByTagName("color")[0]);var aa=color.substr(0,2);var bb=color.substr(2,2);var gg=color.substr(4,2);var rr=color.substr(6,2);linecolor="#"+rr+gg+bb;lineopacity=isNaN(parseInt(aa,16))?1:parseInt(aa,16)/255;var polystyles=style.getElementsByTagName("PolyStyle");if(polystyles.length>0)
{polyfill=isNaN(parseInt(GXml.value(polystyles[0].getElementsByTagName("fill")[0])))?1:parseInt(GXml.value(polystyles[0].getElementsByTagName("fill")[0]));polyoutline=isNaN(parseInt(GXml.value(polystyles[0].getElementsByTagName("outline")[0])))?1:parseInt(GXml.value(polystyles[0].getElementsByTagName("outline")[0]));polycolor=getXmlValue(polystyles[0].getElementsByTagName("color")[0]);var aa=color.substr(0,2);var bb=color.substr(2,2);var gg=color.substr(4,2);var rr=color.substr(6,2);color="#"+rr+gg+bb;polyopacity=isNaN(parseInt(aa,16)/255)?1:parseInt(aa,16)/255;if(!polyoutline){polyopacity=0;}}}
if(gPolygons)
{if(displayedPolygonIndex>=0&&displayedPolygonIndex<gPolygons.length)
{try{gMap.removeOverlay(gPolygons[displayedPolygonIndex]);}catch(e){}}
gPolygons.splice(0,gPolygons.length);}
displayedPolygonIndex=-1;attPolyID=-1;var placemarks=xmlDoc.documentElement.getElementsByTagName("Placemark");for(var i=0;i<placemarks.length;i++)
{var polygonID=parseInt(getXmlValue(placemarks[i].getElementsByTagName("name")[0]));var coords=GXml.value(placemarks[i].getElementsByTagName("coordinates")[0]);coords=coords.replace(/\s+/g," ");coords=coords.replace(/^ /,"");coords=coords.replace(/ $/,"");coords=coords.replace(/, /,",");var path=coords.split(" ");if(path.length>1)
{var points=[];for(var j=0;j<path.length;j++)
{var bits=path[j].split(",");var point=new GLatLng(parseFloat(bits[1]),parseFloat(bits[0]));points.push(point);}
var polygonoptions={};var poly=new GPolygon(points,linecolor,linewidth,lineopacity,polycolor,polyopacity,polygonoptions)
poly.my_ID=polygonID;gPolygons.push(poly);if(refLatLng&&poly.contains(refLatLng))
{attPolyID=poly.my_ID;displayedPolygonIndex=i;gMap.addOverlay(poly);}}}
if(feedback)
{if(attPolyID>=0&&isDebug)
feedback.innerHTML="Done processing KML file! Polygon ID = "+attPolyID.toString();else if(!refLatLng)
feedback.innerHTML="Please enter an address.";else if(isDebug)
feedback.innerHTML="Done processing KML file!";else if(refLatLng&&gPolygons&&gPolygons.length>0)
{if(attPolyID<0)
{feedback.innerHTML="Sorry, your address is outside our current map.<br />The results will show Interdistrict schools only.<br />Click the Search button to see/update the data.";if(chkInsideDistrict&&chkInterDistrict)
{chkInsideDistrict.checked=false;chkInterDistrict.checked=true;chkInsideDistrict.disabled=true;}}
else
{feedback.innerHTML="Click the Search button to see/update the data.";if(chkInsideDistrict)
{chkInsideDistrict.disabled=false;chkInsideDistrict.checked=true;}}
btnSearch.disabled=false;}}}
else
{if(feedback){feedback.innerHTML="Unable to retrieve grade information! Please try again.";}
attPolyID=-1;displayedPolygonIndex=-1;}
if(hartZone)
{if(attPolyID>=1&&attPolyID<=4)
{show(hartZone);hartZone.innerHTML="You live in Hartford zone "+attPolyID.toString();}
else
hide(hartZone);}
if(working){hide(working);}}