//
function getLocationsToPlot() {
  var xmlDoc;
  var orgName, orgCourses;
  var orgID,specID, orgPC, orgLat, orgLng;
  var lblHTML, markerColour;
  var ajax_connection = createRequest();
 // alert("In getLocationsToPlot"); 
 // alert("Type of connection is " + typeof ajax_connection)

  
  // setup the function to deal with the reply
  ajax_connection.onreadystatechange = function(){
  //  alert("onreadystatchange: readyState = " + ajax_connection.readyState) 
    if ((ajax_connection.readyState == 4)){
   //   alert("readyState returned is " + ajax_connection.readyState);
   //   alert("status returned is " + ajax_connection.status);
      xmlDoc = ajax_connection;
   //   alert("responseXML object created " + typeof xmlDoc);

     var allOrgs=xmlDoc.responseXML.getElementsByTagName("AllResearchOrgs"); 
     var orgs=allOrgs[0].getElementsByTagName("ResearchOrg");
   //  alert("Breakpoint");
     var HTML = "<dl>";
     for(var i=0; i<orgs.length; i++) { 
         orgName=orgs[i].getElementsByTagName("OrgName")[0].firstChild.nodeValue;
         var atts =  orgs[i].getElementsByTagName("OrgName")[0].attributes;
         orgID = atts.getNamedItem("ID").nodeValue;
         specID = atts.getNamedItem("SEID").nodeValue;
         orgPC = atts.getNamedItem("PC").nodeValue;
         orgLat = atts.getNamedItem("Lat").nodeValue;
         orgLng = atts.getNamedItem("Lng").nodeValue;
         HTML += "<dt>" + orgName + "[" + orgID + "/"+specID+"/"+orgPC+"/"+orgLat+"/"+orgLng+"]";
         HTML += "</dt>";
         var courses = orgs[i].getElementsByTagName("Course")
         for(var j=0; j<courses.length; j++) {
            var courseName = courses[j].firstChild.nodeValue;
            var courseAtts = courses[j].attributes;
            var courseID = courseAtts.getNamedItem("ID").nodeValue;
            HTML += "<dd>" + courseName + "[" + courseID + "]" + "</dd>";
            };
         
        if (orgPC != "NA") {
            lblHTML = buildHTMLForLabel(orgName, orgID, courses);
            markerColour = getMarkerColour(specID);
            placeMarkerAtPoint(orgLat, orgLng, lblHTML, markerColour);
         }
     };
     HTML += "</dl>";
     document.getElementById("Span3").innerHTML = HTML; 

    //  alert("That's it folks");
    }
  }  
  // NOTE: open made with synchronous request - so following showGroup works
  ajax_connection.open('get', "MapSEXML.aspx", false);
  ajax_connection.send(null);
  showGroup();
  
} //end of function getLocationsToPlot

function getMarkerColour(specID) {
var result = null;
switch (specID) {
case '56': result = '1'; break;
case '57': result = '2'; break;
case '58': result = '3'; break;
case '59': result = '4'; break;
case '60': result = '5'; break;
case '61': result = '6'; break;
case '63': result = '7'; break;
default: result = '1';
};
return result
} //end of function getMarkerColour

function createRequest() {
  
  // create an Ajax Request
  
  var ajaxRequest;
  
  try
  {
    ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
  }    
    catch (e1)
    {
      try
      {
        ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
      }
        catch (e2)
        {
          ajaxRequest = new XMLHttpRequest();
        }
    }
  
  return ajaxRequest;
} // End of function createRequest



function buildHTMLForLabel (strOrg, OrgID, colCourses) {
var courseName, courseID, courseAtts;
CourseID = "TEMP";
lblHTML =   lblHTML = "<div class='bubble'><A target = '-blank' href='";
lblHTML += "http://www.rdlearning.org.uk/OrganisationDetails.asp?ID="+OrgID;
lblHTML += "'>"+strOrg+"</A><dl>";
for(var j=0; j<colCourses.length; j++) {
     courseName = colCourses[j].firstChild.nodeValue;
     courseAtts = colCourses[j].attributes;
     courseID = courseAtts.getNamedItem("ID").nodeValue;
     lblHTML += "<dt><A target = '-blank' href='http://www.rdlearning.org.uk/coursedetails.asp?ID=" + courseID
     lblHTML += "'>" + courseName + "</A></dt>";
   } ;
   lblHTML += "</dl></div>";

return lblHTML

} //End of function buildHTMLForLabel


function placeMarkerAtPoint(Lat, Lng, html, colour)
{
    var point = new GLatLng(Lat,Lng);
    var icon1 = new customIcon(colour);
	opts = { "icon": icon1,
	         "clickable": true,
	         "labelOffset": new GSize(-6, -10)};
	var marker = new LabeledMarker(point, opts);
	marker.BaseColour = colour;
	markerGroups[colour].push(marker);
	GEvent.addListener(marker, "click", function() {marker.openInfoWindowHtml(html);});
	GEvent.addListener(marker, "mouseover", function() { 
	  marker.setImage('../images/MarkerOver.png');
	});
    GEvent.addListener(marker, "mouseout", function() { 
      marker.setImage('../images/Marker'+ marker.BaseColour+'.png')
    });
	map.addOverlay(marker);
//	marker.hide();
} //End of function placeMarkerAtPoint

function customIcon(colour) 
{
    var icon = new GIcon();
    icon.iconSize = new GSize(10,16);
    icon.shadowSize = "";/*no marker shadow used in favour of map usability */
    icon.iconAnchor = new GPoint(5,16);
    icon.infoWindowAnchor = new GPoint(5,7);
    icon.image = "../images/Marker"+colour+".png";
    return icon
} //End of function customIcon


function mapLoad() {
	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("map"));
		map.addControl(new GLargeMapControl());
//		map.addControl(new GMapTypeControl());
		// Centre on Wartland, UK 53.677729, -2.08513
		map.setCenter(new GLatLng(53.677729,-2.08513), 6, G_NORMAL_MAP);
	}
} //End of function mapLoad

function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      oldonload();
      func();
    }
  }
} //End of function addLoadEvent

function addUnLoadEvent(func) {
	var oldonunload = window.onunload;
	if (typeof window.onunload != 'function') {
	  window.onunload = func;
	} else {
	  window.onunload = function() {
	    oldonunload();
	    func();
	  }
	}
} //End of function addUnLoadEvent

function toggleGroup(type) {
   for (var i=0; i < markerGroups[type].length; i++) {
      var marker = markerGroups[type][i];
      if (marker.isHidden()) {
         marker.show();
      } else {
         marker.hide() ;
      }
   }
} //End of function toggleGroup 

function showMarkerGroup(type) {
   for (var i=0; i < markerGroups[type].length; i++) {
      var marker = markerGroups[type][i];
      marker.show();
   }
} //End of function showMarkerGroup   


function showGroup() {
   var ddl = document.getElementById("selGroup") ;
   var group = ddl.options[ddl.selectedIndex].value ;
//   alert("Selected Group = " + group);
   var cbox = 'chk'+ group.substr(3,3);
//   alert("corresponding checkbox id is " + cbox);
   var gtype = lookupGroup[group];
//   alert("Group Type = " + gtype);
   var mType = new Array();
   var t;
   var checkBox;
   mType[0] = '1';
   mType[1] = '2';
   mType[2] = '3';
   mType[3] = '4';
   mType[4] = '5';
   mType[5] = '6';
   mType[6] = '7';
   for (var j in mType) {
      t = mType[j];
//    alert("Length Group " + t + " = " + markerGroups[t].length);
//    Set all checkboxes off
      switch (t) {
            case '1': checkBox = document.getElementById("chkDem");checkBox.checked= false; break;
            case '2': checkBox = document.getElementById("chkDia");checkBox.checked= false; break;
            case '3': checkBox = document.getElementById("chkMed");checkBox.checked= false; break;
            case '4': checkBox = document.getElementById("chkMen");checkBox.checked= false; break;
            case '5': checkBox = document.getElementById("chkCan");checkBox.checked= false; break;
            case '6': checkBox = document.getElementById("chkStr");checkBox.checked= false; break;
            case '7': checkBox = document.getElementById("chkPri");checkBox.checked= false; break;
      };
//    Check relevant checkbox         
      document.getElementById(cbox).checked = true;   
//    Hide all markers      
      for (var i=0; i < markerGroups[t].length; i++) {
         var marker = markerGroups[t][i];
         marker.hide()
      };
//    Toggle relevant markers
      showMarkerGroup(gtype);      
   }
} //End of function showGroup     

var map;
var localSearch = new GlocalSearch();
var ignoreme;
var markerGroups = {"1":[], "2":[], "3":[],"4":[],"5":[],"6":[],"7":[]};
var lookupGroup = {"selDem":'1',"selDia":'2',"selMed":'3',"selMen":'4',"selCan":'5',"selStr":'6',"selPri":'7'};

addLoadEvent(mapLoad);
addLoadEvent(getLocationsToPlot);
addUnLoadEvent(GUnload);

