﻿var request;
var map;
var bound;
var query;
var center;

function mapload(isprofile) {
	if (GBrowserIsCompatible()) {
	    if (document.getElementById("dmap")) {
		    map = new GMap2(document.getElementById("dmap"));
    		                       
		    // set map setting
		    map.addControl(new GLargeMapControl());
		    map.addControl(new GOverviewMapControl());
		    map.addControl(new GMapTypeControl());
		    //map.setCenter(new GLatLng(xlat, xlng), zoom, G_HYBRID_MAP);
		    map.setCenter(new GLatLng(xlat, xlng), zoom);		
           
//            // add listener for panning and zooming. 
//            // request updata data from server
//            GEvent.addListener(map, "moveend", function() {
//                center = map.getCenter();
//                zoom = map.getZoom();
//                bound = map.getBounds();                
//                              
//                request = GXmlHttp.create();
//                query = "/xml_map_service.aspx?clat=" + center.lat() + "&clng=" + center.lng();
//                query += "&nelat=" + bound.getNorthEast().lat() + "&nelng=" + bound.getNorthEast().lng();
//                query += "&swlat=" + bound.getSouthWest().lat() + "&swlng=" + bound.getSouthWest().lng();
//                query += "&zoom=" + zoom;
//                request.open("GET", query, true);
//                request.onreadystatechange = batchload;
//                request.send(null);
//            });

		    var batch = [];
            center = map.getCenter();
            zoom = map.getZoom();
            bound = map.getBounds();                
                          
            //request = GXmlHttp.create();
            query = "xml_map_service.aspx";
		    
            GDownloadUrl(query, function(data, responseCode) {	
		        var xml = GXml.parse(data);
		        var markers = xml.documentElement.getElementsByTagName("marker");		    
		        for (var i=0;i<markers.length;i++) {
			        var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));
//                    var myicon = new GIcon();
//	                myicon.image = "/images/icons/" + markers[i].getAttribute("icon");
//	                myicon.shadow = "/images/icons/shadow.png";
//	                myicon.iconSize = new GSize(16, 32);
//	                myicon.shadowSize = new GSize(32, 32);
//	                myicon.iconAnchor = new GPoint(4, 31);
//	                myicon.infoWindowAnchor = new GPoint(8, 9);

        			//Element
    			    //batch.push(new createMarker(point, myicon,
    			    batch.push(new createMarker(point,
    			            markers[i].getAttribute("nam"),
			                markers[i].getAttribute("ad1"),
				            markers[i].getAttribute("ad2"),
				            markers[i].getAttribute("cty"),
				            markers[i].getAttribute("sta"),
				            markers[i].getAttribute("phn"),
				            markers[i].getAttribute("url"),
				            markers[i].getAttribute("eml"),
				            markers[i].getAttribute("lgo")));
			    }
			    
			    // load overlay using markermanager
			    var mgr = new GMarkerManager(map);
			    mgr.addMarkers(batch, 1);
			    mgr.refresh();			    
			});						
		}		
	}
}

function batchload() {
    if (request.readyState == 4) {
        data = request.responseText;

	    var batch = [];
	    var xml = GXml.parse(data);
	    var markers = xml.documentElement.getElementsByTagName("marker");		    
	    for (var i=0;i<markers.length;i++) {
		    var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));
//            var myicon = new GIcon();
//            myicon.image = "/images/icons/" + markers[i].getAttribute("icon");
//            myicon.shadow = "/images/icons/shadow.png";
//            myicon.iconSize = new GSize(16, 32);
//            myicon.shadowSize = new GSize(32, 32);
//            myicon.iconAnchor = new GPoint(4, 31);
//            myicon.infoWindowAnchor = new GPoint(8, 9);
			
			//batch.push(new createMarker(point, myicon,
			batch.push(new createMarker(point,
    			            markers[0].getAttribute("nam"),
			                markers[0].getAttribute("ad1"),
				            markers[0].getAttribute("ad2"),
				            markers[0].getAttribute("cty"),
				            markers[0].getAttribute("sta"),
				            markers[0].getAttribute("phn"),
				            markers[0].getAttribute("url"),
				            markers[0].getAttribute("eml"),
				            markers[0].getAttribute("lgo")));
		}
		
		// load overlay using markermanager			
		var mgr = new GMarkerManager(map);
		mgr.addMarkers(batch, map.getZoom());
		mgr.refresh();        
    }
}

// *****************
// helper
// *****************

// Creates a marker at the given point
//function createMarker(point, myicon, myname, myadd1, myadd2, mycity, mystate, myphon, myurl, myemail, mylogo) {
function createMarker(point, myname, myadd1, myadd2, mycity, mystate, myphon, myurl, myemail, mylogo) {
    //var marker = new GMarker(point, myicon);
    var marker = new GMarker(point);
    GEvent.addListener(marker, "click", function() {
        var profile, chat;
        var thislogo;
        var thisadd2;
        var thisstate;
        var thisphon;
        var thisurl;
        var thisemail;
        var addrstring;

        thislogo = mylogo;
        thisadd2 = myadd2;
        thisstate = mystate;
        thisphon = myphon;
        thisurl = myurl;
        thisemail = myemail;

        // update null first
        if (thislogo != null && thislogo != "")
			thislogo = "<div style=\"border:solid 1px #ffffff;padding=2px;\"><img src=\"" + thislogo + "\" class=\"asdf1234\" border=0></div>";
        if (thisadd2 != null && thisadd2 != "")
			thisadd2 = thisadd2 + "<br />";
        if (thisstate != null && thisstate != "")
			thisstate = ", " + thisstate;
        if (thisphon != null && thisphon != "")			
			thisphon = "Phone Number: " + thisphon + "<br />";
        if (thisurl != null && thisurl != "")
        {
			if (thisurl.indexOf("http://") == -1)
				thisurl = "http://" + thisurl;

			thisurl = "Web: <a href=\"" + thisurl + "\" target=\"_blank\">" + thisurl + "</a><br />";
		}
        if (thisemail != null && thisemail != "")
        {
			thisemail = "E-mail: <a href=\"mailto:" + thisemail + "\">" + thisemail + "</a><br />";
		}
		
		addrstring = URLSafe(myadd1);

        if (myadd2 != null && myadd2 != "")
			addrstring = addrstring + "," + URLSafe(myadd2);

		addrstring = addrstring + "," + URLSafe(mycity);

        if (mystate != null && mystate != "")
			addrstring = addrstring + "," + URLSafe(mystate);

        profile = "<div style=\"overflow:auto; width:245px; height:80px; border:solid 1px #ABABAB;padding=2px;\">" +
			"<strong>" + myname + "</strong><br />" +
			myadd1 + "<br />" + thisadd2 +
			mycity + thisstate + "<br />" +
			thisphon + thisurl + thisemail +
			"<a href=\"http://maps.google.com/maps?saddr=&daddr=" + addrstring + "&hl=en\" \" target=\"_blank\">Driving directions</a><br />" +
			"</div>";

	    marker.openInfoWindowHtml("<div>" + thislogo + profile + "</div>");
    });
    return marker;
}

function URLSafe(strIn)
{
	var strOut;
	strOut = strIn;

	strOut = strOut.replace(/&/, "&amp;");
	strOut = strOut.replace(/>/, "&gt;");
	strOut = strOut.replace(/</, "&lt;");

	return strOut;
}

function showInfoWindow(myname, myadd1, myadd2, mycity, mystate, myphon, myurl, myemail, mylogo) {   
    var profile;
    var thislogo;
    var thisadd2;
    var thisstate;
    var thisphon;
    var thisurl;
    var thisemail;
    var addrstring;

    thislogo = mylogo;
    thisadd2 = myadd2;
    thisstate = mystate;
    thisphon = myphon;
    thisurl = myurl;
    thisemail = myemail;

    // update null first
    if (thislogo != null && thislogo != "")
			thislogo = "<div style=\"border:solid 1px #ffffff;padding=2px;\"><img src=\"" + thislogo + "\" class=\"asdf1234\" border=0></div>";
    if (thisadd2 != null && thisadd2 != "")
		thisadd2 = thisadd2 + "<br />";
    if (thisstate != null && thisstate != "")
		thisstate = ", " + thisstate;
    if (thisphon != null && thisphon != "")			
		thisphon = "Phone Number: " + thisphon + "<br />";
    if (thisurl != null && thisurl != "")
    {
		if (thisurl.indexOf("http://") == -1)
			thisurl = "http://" + thisurl;

		thisurl = "Web: <a href=\"" + thisurl + "\" target=\"_blank\">" + thisurl + "</a><br />";
	}
    if (thisemail != null && thisemail != "")
    {
		thisemail = "E-mail: <a href=\"mailto:" + thisemail + "\">" + thisemail + "</a><br />";
	}
	
	addrstring = URLSafe(myadd1);

    if (myadd2 != null && myadd2 != "")
		addrstring = addrstring + "," + URLSafe(myadd2);

	addrstring = addrstring + "," + URLSafe(mycity);

    if (mystate != null && mystate != "")
		addrstring = addrstring + "," + URLSafe(mystate);

    profile = "<div style=\"overflow:auto; width:245px; height:80px; border:solid 1px #ABABAB;padding=2px;\">" +
		"<strong>" + myname + "</strong><br />" +
		myadd1 + "<br />" + thisadd2 +
		mycity + thisstate + "<br />" +
		thisphon + thisurl + thisemail +
		"</div>";

    profile = "<div>" + thislogo + profile + "</div>";
    
    return profile;
}