// JScript File
//<![CDATA[

function setupTabs(tabDefault, tabnavname, tabsname) {
    if (document.getElementById) {
        // get tab navigator
        var tabnav = document.getElementById(tabnavname);
        if (tabnav) {

            // get list items in tab navigator
            var tablist = tabnav.getElementsByTagName('li');
            // loop through list items
            for (i = 0; i < tablist.length; i++) {
                // get tab links (i.e. anchor tags)
                var tablinks = tablist[i].getElementsByTagName('a');
                // loop through tab links
                for (j = 0; j < tablinks.length; j++) {
                    // get hash for current tablink (i.e. the #tabname portion)
                    var hash = tablinks[j].hash;
                    // set onclick attribute to toggle the tabs (does not work in IE)
                    tablinks[j].setAttribute("onclick", "toggleTabs('" + hash.substring(1) + "','" + tabnavname + "','" + tabsname + "'); return false;");
                    // detect IE (other browsers don't support attachEvent)
                    if (tablinks[j].attachEvent) {
                        // set onclick to toggle tabs
                        tablinks[j].onclick = Function("toggleTabs('" + hash.substring(1) + "','" + tabnavname + "','" + tabsname + "');  return false;");
                    }
                    // if has is default tab
                    if (hash == ("#" + tabDefault)) {
                        // set parent nodes css class to 'activetab' (i.e. 'li' tag) and show tab
                        tablinks[j].parentNode.className = "activetab";
                        showTab(tabDefault);

                    } else {
                        // set parent nodes css class to empty (i.e. 'li' tag) and hide tab
                        tablinks[j].parentNode.className = ""
                        hideTab(hash.substring(1));
                    }
                }
            }
        }
    }

}
function showTab(tabId) {
    if (document.getElementById) {
        // get current tab
        var currentTab = document.getElementById(tabId);
        // show tab by setting display style to blank string
        currentTab.style.display = "";
        // get anchor tags in current tab
        var currentTabAnchors = currentTab.getElementsByTagName('a');
        // loop through anchor tags
        for (k = 0; k < currentTabAnchors.length; k++) {
            // if anchor tag has same name as current tag id, hide it
            if (currentTabAnchors[k].name == tabId) {
                currentTabAnchors[k].style.display = "none";
            }
        }
    }
}
function hideTab(tabId) {
    if (document.getElementById) {
        document.getElementById(tabId).style.display = "none";
    }
}
function toggleTabs(tabId, tabnavname, tabsname) {
    if (document.getElementById) {
        // an array of all the sections
        var sectionnames = new Array();
        // get tab navigator
        var tabnav = document.getElementById(tabnavname);
        // get list items in tab navigator
        var tablist = tabnav.getElementsByTagName('li');
        // loop through list items
        for (i = 0; i < tablist.length; i++) {
            // get tab links (i.e. anchor tags)
            var tablinks = tablist[i].getElementsByTagName('a');
            // loop through tab links
            for (j = 0; j < tablinks.length; j++) {
                // get hash for current tablink (i.e. the #tabname portion)
                var hash = tablinks[j].hash;
                // add has to sections array
                sectionnames.push(hash.substr(1));
                // if hash is selected tab
                if (hash == ("#" + tabId)) {
                    // set parent nodes css class to 'activetab' (i.e. 'li' tag)
                    tablinks[j].parentNode.className = "activetab";
                } else {
                    // set parent nodes css class to empty (i.e. 'li' tag)
                    tablinks[j].parentNode.className = ""
                }
            }
        }
        // get tabs
        var tabs = document.getElementById(tabsname);
        // get tab sections
        var sections = tabs.childNodes;
        // loop through sections
        for (i = 0; i < sections.length; i++) {
            // if node is not a div, then continue to next loop item
            if (sections[i].nodeName != 'DIV') continue;
            // if current section id matches tabId show it
            if (sections[i].id == tabId) {
                showTab(sections[i].id);
            } else {
                // get child anchor nodes
                var atags = sections[i].getElementsByTagName("a");
                // if anchor nodes have been found
                if (atags.length > 0) {
                    // loop through the section names
                    for (j = 0; j < sectionnames.length; j++) {
                        // if first anchor tags name matches the current section id, hide the tab
                        if (sectionnames[j] == atags[0].getAttribute("name")) {
                            hideTab(sections[i].id);
                        }
                    }
                }

            }
        }
    }
    return false;
}








//global variables ------------------------------------------------------------------------//
var map;
var progressBar;
var DistrictOverlays = new Array();
var SchoolOverlays = new Array();
//var currLegend = new Legend();

var baseIcon = new GIcon(G_DEFAULT_ICON);
baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
baseIcon.iconSize = new GSize(20, 34);
baseIcon.shadowSize = new GSize(37, 34);
baseIcon.iconAnchor = new GPoint(9, 34);
baseIcon.infoWindowAnchor = new GPoint(9, 2);


var MarkerCounter =0;
var markers; 





function LoadDistrictData(data, responseCode) {
try {
    if (data.length > 0) {
        document.getElementById("data_column").innerHTML = data;
    }
} catch (e) { alert("LoadMarkers Exception  name:" + e.name + ". Error message:" + e.message); }
}








function ZoomEntity(data, responseCode) {
try {
    if (data != "") {
        var xys = data.split(",");
        //coordinates comes in like this: minx, miny, maxx,maxy, centerx, centery
        map.setZoom(map.getBoundsZoomLevel(new GLatLngBounds(new GLatLng(xys[0], xys[1]), new GLatLng(xys[2], xys[3]))) + 1);
        map.setCenter(new GLatLng(xys[5], xys[4]));
    }
} catch (e) { alert("ZoomEntity Exception  name:" + e.name + ". Error message:" + e.message); }
}


//used to zoom an extra level for some school districts
function ZoomEntity2(data, responseCode) {
    try {
        if (data != "") {
            var xys = data.split(",");
            //coordinates comes in like this: minx, miny, maxx,maxy, centerx, centery
            map.setZoom(map.getBoundsZoomLevel(new GLatLngBounds(new GLatLng(xys[0], xys[1]), new GLatLng(xys[2], xys[3]))) + 2);
            map.setCenter(new GLatLng(xys[5], xys[4]));
        }
    } catch (e) { alert("ZoomEntity Exception  name:" + e.name + ". Error message:" + e.message); }
}






function LoadOutlines(data, responseCode) {
try {
    var activeOutlines = new Array();
    if (data != "") {
        var xml = GXml.parse(data);
        dist_id = parseFloat(xml.documentElement.getAttribute("dist_id"));
        if (DistrictOverlays[dist_id] == null) {
            var dist_polylines = new Array();
            activeOutlines[dist_id] = 'onMap';
            var polylines = xml.getElementsByTagName("PolyLine");
            for (var x = 0; x < polylines.length; x++) {
                var points = polylines[x].getElementsByTagName("Point");
                var poly = new Array();
                for (var i = 0; i < points.length; i++) {
                    var point = new GLatLng(parseFloat(points[i].getAttribute("lat")), parseFloat(points[i].getAttribute("lng")));
                    poly.push(point);
                }
                var polyline = new GPolyline(poly);
                dist_polylines.push(polyline);
                map.addOverlay(polyline);
            }
            DistrictOverlays[dist_id] = dist_polylines;
        }
    }
    var tempDistrictOverlays = new Array();
    for (distOvrs in DistrictOverlays) {
        if (activeOutlines[distOvrs] == 'onMap') {
            tempDistrictOverlays[distOvrs] = DistrictOverlays[distOvrs];
        }
        else {
            for (x in DistrictOverlays[distOvrs]) {
                map.removeOverlay(DistrictOverlays[distOvrs][x]);
            }
        }
    }
    DistrictOverlays = tempDistrictOverlays;
} catch (e) { alert("LoadOutlines Exception  name:" + e.name + ". Error message:" + e.message); }
}


function getMarker(pt, i, info, id, tooltip,district_num,school_num) {
try {
    //alert(i);
   
    var letteredIcon = new GIcon(baseIcon);
    if      (i < 26) {letteredIcon.image = "GoogleIcons/red_Marker" + String.fromCharCode("A".charCodeAt(0) + i) + ".png";}
    else if (i < 52) { letteredIcon.image = "GoogleIcons/brown_Marker" + String.fromCharCode("A".charCodeAt(0) + i - 26) +".png";}
    else if (i < 78) {letteredIcon.image = "GoogleIcons/blue_Marker" + String.fromCharCode("A".charCodeAt(0) + i - 52) + ".png";}
    else if (i < 104) {letteredIcon.image = "GoogleIcons/Green_Marker" + String.fromCharCode("A".charCodeAt(0) + i - 78) + ".png";}
    else if (i < 130) {letteredIcon.image = "GoogleIcons/purple_Marker" + String.fromCharCode("A".charCodeAt(0) + i - 104) + ".png";}
    else if (i < 156) {letteredIcon.image = "GoogleIcons/yellow_Marker" + String.fromCharCode("A".charCodeAt(0) + i - 130) + ".png";}
    else if (i < 182) {letteredIcon.image = "GoogleIcons/pink_Marker" + String.fromCharCode("A".charCodeAt(0) + i - 156) + ".png";}
    else if (i < 208) {letteredIcon.image = "GoogleIcons/paleblue_Marker" + String.fromCharCode("A".charCodeAt(0) + i - 182) + ".png";}
    else if (i < 234) {letteredIcon.image = "GoogleIcons/orange_Marker" + String.fromCharCode("A".charCodeAt(0) + i - 208) + ".png";}
    
    var mrk = new GMarker(pt, { icon: letteredIcon, title: tooltip });
    var tab = new GInfoWindowTab("School Info", '<div id="info_text">' + info + '</div>');
    var tabs = new Array();
    tabs.push(tab);
    GEvent.addListener(mrk, "click", function() { mrk.openInfoWindowTabsHtml(tabs,{maxWidth: 200});
                                                  ShowSchoolInfo (school_num,district_num);      
                                            
                                                });
    
    return mrk;
} catch (e) { alert("getMarker Exception  name:" + e.name + ". Error message:" + e.message); }
}



function rLoadMarkers() {
try {
    var activeMarkers = new Array();
    if (MarkerCounter < markers.length) 
    {
            if (progressBar) { progressBar.updateLoader(1);}
            var school_id = markers[MarkerCounter].getAttribute("school_id");
            activeMarkers[school_id] = 'onMap';
            var point = new GLatLng(parseFloat(markers[MarkerCounter].getAttribute("lat")), parseFloat(markers[MarkerCounter].getAttribute("lng")));
            var info = "<div id=\"info_text\"><p><span class=\"title\">" + markers[MarkerCounter].getAttribute("school_name") + "</span></p> " +                       
                       "<p><span class=\"label\">Grades: </span>" + markers[MarkerCounter].getAttribute("grades") + "</p>" +
                       //"<hr><center><img border=\"0\" width=\"160px\" src=\"./GetSchoolPicture.aspx?method=picture&LongDOESchoolID=" + markers[MarkerCounter].getAttribute("district_num") + markers[MarkerCounter].getAttribute("school_num") + "\"/><br/>" +
                       "<hr><center><br/>" +
                       //"<a onclick=\"var popupwin =window.open('./SchoolPictures.aspx?LongDOESchoolID=" + markers[MarkerCounter].getAttribute("district_num") + markers[MarkerCounter].getAttribute("school_num") + "','SchoolPictures','status=0,toolbar=0,menubar=0,directories=0,location=0,width=1020,height=630');popupwin.focus();\">View Pictures</a></center>"
                       "</div>";
           
                       
            var tooltip = markers[MarkerCounter].getAttribute("school_name") + " (" + markers[MarkerCounter].getAttribute("school_type") + ")";
            var marker = getMarker(point, MarkerCounter, info, school_id, tooltip,markers[MarkerCounter].getAttribute("district_num") , markers[MarkerCounter].getAttribute("school_num"));
            if (SchoolOverlays[school_id] != null) {map.removeOverlay(SchoolOverlays[school_id]);}
            SchoolOverlays[school_id] = marker;
            map.addOverlay(marker);
            MarkerCounter = MarkerCounter + 1;
            setTimeout('rLoadMarkers()',5);
	    }
	    else 
	    {
		    progressBar.remove();
	    }

	} catch (e) { alert("rLoadMarkers Exception  name:" + e.name + ". Error message:" + e.message); }
}



function LoadMarkers(data, responseCode) {
try {
    if (data != "") 
    {
        MarkerCounter = 0;
        var xml = GXml.parse(data);
        markers = xml.documentElement.getElementsByTagName("marker");
        if (progressBar) { progressBar.start(markers.length) }
        setTimeout('rLoadMarkers()', 10);
    }

    
    
} catch (e) { alert("LoadMarkers Exception  name:" + e.name + ". Error message:" + e.message); }
}







    //selects the District Polygon and zooms the Map to the district
function ChangeDistrict(town_gis_id) {
try {
        if (town_gis_id.length != "") 
        {
            document.getElementById("SchoolTabInfo").style.visibility = "hidden";
                      
        map.clearOverlays()
        var DistrictOverlays = new Array();
        var SchoolOverlays = new Array();

        var x = "./GetInfo.aspx?method=GET_TOWN_INFO&town_gis_id=" + town_gis_id;
        GDownloadUrl(x, LoadDistrictData);

        var url = "./GetInfo.aspx?method=GET_FRAME&town_gis_id=" + town_gis_id;
       // if (town_gis_id==194 || town_gis_id==34 || town_gis_id==50 || town_gis_id==134 ||town_gis_id==213) {GDownloadUrl(url, ZoomEntity2);}
       // else {GDownloadUrl(url, ZoomEntity);}
       GDownloadUrl(url, ZoomEntity);


        url = "./GetInfo.aspx?method=TOWN_OUTLINE&town_gis_id=" + town_gis_id;
        GDownloadUrl(url, LoadOutlines);

        url = "./GetInfo.aspx?method=SCHOOLS_IN_TOWN&town_gis_id=" + town_gis_id;
        GDownloadUrl(url, LoadMarkers);
        
        }
    } catch (e) { alert("ChangeDistrict Exception name: " + e.name + ". Error message: " + e.message); }
}





    //utility functions -----------------------------------------------------------------------//
    // function used in tile generation - gets some coordinates that are useful for each of the tile layers.
    function build_url(tile, zoom) 
    {
        var mercator = G_NORMAL_MAP.getProjection()
        var northwestPt = new GPoint(tile.x * 256, tile.y * 256 + 256);
        var northwestCoord = mercator.fromPixelToLatLng(northwestPt, zoom);
        var southeastPt = new GPoint(tile.x * 256 + 256, tile.y * 256);
        var southeastCoord = mercator.fromPixelToLatLng(southeastPt, zoom);
        var url = './maphandler.aspx?northwestX=' + northwestCoord.lng() + '&northwestY=' + northwestCoord.lat() + '&southeastX=' + southeastCoord.lng() + '&southeastY=' + southeastCoord.lat();
        return url;
    }



    function getNormalLayer(name) 
    {
        var tile_layers = new Array(2);
        var temp_layers = G_NORMAL_MAP.getTileLayers();

        tile_layers[0] = temp_layers[0];

        var new_layer = new GTileLayer(new GCopyrightCollection(''), 1, 17);
        new_layer.isPng = function() { return true; };
        new_layer.getTileUrl = function(tile, zoom) {
            var url = build_url(tile, zoom);
            return url;
        }
        new_layer.getOpacity = function() { return 1; }
        map.addControl(new GScaleControl());
        tile_layers[1] = new_layer;
        var custommap = new GMapType(tile_layers, G_NORMAL_MAP.getProjection(), name);
        return custommap;
    }
    
    
    

    //end utility functions -------------------------------------------------------------------//

    





























    function RetrieveDistrictInfo(data, responseCode) 
    {
        if (data != "") {
            var x = "./GetInfo.aspx?method=get_district_info&dist_id=" + data;
            GDownloadUrl(x, LoadDistrictData);
            var url = "./GetInfo.aspx?method=district_outline&dist_id=" + data;
            GDownloadUrl(url, LoadOutlines);
        }
    }











    function ZoomToDistrict(id) 
    {
          if (id != "") {
            var url = "./GetInfo.aspx?method=get_frame&dist_id=" + id;
            GDownloadUrl(url, ZoomEntity);
        }
    }


    function ZoomToSchool(GIS_id,SchoolNo,DistrictNo) 
    {
        var url = "./GetInfo.aspx?method=get_school_location&school_id=" + GIS_id;
        GDownloadUrl(url, function(data, responseCode) {
            var school_xy = data.split(",");
            map.setZoom(15);
            map.setCenter(new GLatLng(school_xy[1], school_xy[0]));
        });
        map.removeOverlay(SchoolOverlays[GIS_id]);
        map.addOverlay(SchoolOverlays[GIS_id]);
        GEvent.trigger(SchoolOverlays[GIS_id], "click");
        

    }
    
    
    
    function ShowSchoolInfo (SchoolNo,DistrictNo)
    {
        document.getElementById("tab_1").innerHTML = "<p>Loading School Information ....</p>"

        //populate the school info tab
        url = "./GetInfo.aspx?method=get_school_info&school_no=" + SchoolNo +"&district_no=" + DistrictNo;
        GDownloadUrl(url, function(data, responseCode) {
            document.getElementById("tab_1").innerHTML = data;
        });
        
        
        //populate the school SOI tab
        url = "./GetInfo.aspx?method=get_school_soi&school_no=" + SchoolNo +"&district_no=" + DistrictNo;
        GDownloadUrl(url, function(data, responseCode) {
            document.getElementById("tab_2").innerHTML = data;
        });
        
        //populate the school projects  
        url = "./GetInfo.aspx?method=get_school_project&school_no=" + SchoolNo +"&district_no=" + DistrictNo;
        GDownloadUrl(url, function(data, responseCode) {
            document.getElementById("tab_3").innerHTML = data;
        });
    
    
        document.getElementById("SchoolTabInfo").style.visibility = "visible";
        setupTabs("tab_1", "tabnav2", "tabs2");
    }
    
    
    
    
    
    
    function LoadTabInfo(data, responseCode) 
    {
        //var ReportServerUrl;
        if (data != "") 
        {
            var xml = GXml.parse(data);
            var tabs = xml.getElementsByTagName("tabInfo");
            if (tabs.length > 0) 
            {
                var tab = tabs[0];
                ptx = tab.getAttribute("lng");
                pty = tab.getAttribute("lat");
                pt = new GLatLng(ptx, pty);
                var info_html = "<div id=\"info_text\"><b>" + tab.getAttribute("name") + "</b><hr>" + "<b>DOE#: </b>" +
	            tab.getAttribute("doenum") + "<br><b>Enrollment: </b>" + tab.getAttribute("currenroll") + "<br><b>Square Footage: </b>" +
            	tab.getAttribute("sqft") + "<br><b>Sq. Ft. Per Student: </b>" + tab.getAttribute("sfpstu") + "<br><b>Average Building Age: </b>" +
            	tab.getAttribute("avgage") + "</div>";
                map.openInfoWindowHtml(pt, info_html, { maxWidth: 200 });
            }
        }
    var tempSchoolOverlays = new Array();
    for (schOvers in SchoolOverlays) 
        {
            if (activeMarkers[schOvers] == 'onMap') 
            {
                tempSchoolOverlays[schOvers] = SchoolOverlays[schOvers];
            }
            else {
                map.removeOverlay(SchoolOverlays[schOvers]);
            }
        }
        SchoolOverlays = tempSchoolOverlays;
    }

//end AJAX callbacks ----------------------------------------------------------------------//
















//Map Loading & Event Registration---------------------------------------------------------//
function load() {
try {
    setupTabs("tab1", "tabnav", "tabs");
   
    
    if (GBrowserIsCompatible()) {
        //set defaults
        map = new GMap2(document.getElementById("map"));
        progressBar = new ProgressbarControl(map);
        map.setCenter(new GLatLng(42.16239, -71.718), 8);

        // LAYERING
        var districtLayer = getNormalLayer("Map");
        map.addMapType(districtLayer);
        map.removeMapType(G_HYBRID_MAP);
        map.removeMapType(G_NORMAL_MAP);
        map.setMapType(districtLayer);

        //EVENTS
        GEvent.addListener(map, "addoverlay", function(overlay) { });
        GEvent.addListener(map, "removeoverlay", function(overlay) { });
        //END EVENTS

       
        
        map.addControl(new GLargeMapControl3D());
        map.addControl(new GMapTypeControl());

       }
    else {
        alert("Your browser is not compatible with Google Maps, we are sorry for the inconvenience.");
    }
} catch (e) { alert("ZoomEntity Exception  name:" + e.name + ". Error message:" + e.message); }
}






//End Map Loading & Event Registration ----------------------------------------------------//
//]]>
