var map;

var icon = new GIcon();
var localSearch = new GlocalSearch();

icon.image = "http://www.google.com/mapfiles/marker.png";
icon.shadow = "http://www.google.com/mapfiles/shadow50.png";
icon.iconSize = new GSize(20, 34);
icon.shadowSize = new GSize(37, 34);
icon.iconAnchor = new GPoint(10, 34);

function addLoadEvent(func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
        window.onload = func;
    } else {
        window.onload = function() {
            oldonload();
            func();
        }
    }
}

function addUnLoadEvent(func) {
    var oldonunload = window.onunload;
    if (typeof window.onunload != 'function') {
        window.onunload = func;
    } else {
        window.onunload = function() {
            oldonunload();
            func();
        }
    }
}

// Create a marker
function createMarker(point) {
    var marker = new GMarker(point);

    GEvent.addListener(marker, 'click', function() {

        GDownloadUrl("GetDesigner.aspx?lat=" + point.y + "&lng=" + point.x, function(data, responseCode) {
            var xml = GXml.parse(data);
            marker.openInfoWindowHtml(PopulateDetails(xml));
        });

    });

    return marker;
}

function mapLoad() {
    if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map"));
        map.addControl(new GLargeMapControl());
        map.addControl(new GMapTypeControl());
        // Centre of UK excluding islands
        map.setCenter(new GLatLng(53.825359, -2.420544), 6);
    }
}

function PopulateDetails(xml) {

    var markers = xml.documentElement.getElementsByTagName("marker");

    var addressLine1 = markers[0].getAttribute("addressLine1");
    var addressLine2 = markers[0].getAttribute("addressLine2");
    var businessName = markers[0].getAttribute("businessName");
    var comments = markers[0].getAttribute("comments");
    var county = markers[0].getAttribute("county");
    var email = markers[0].getAttribute("email");
    var fax = markers[0].getAttribute("fax");
    var firstName = markers[0].getAttribute("firstName");
    var lastName = markers[0].getAttribute("lastName");
    var lat = markers[0].getAttribute("lat");
    var lng = markers[0].getAttribute("lng");
    var mobile = markers[0].getAttribute("mobile");
    var postCode = markers[0].getAttribute("postCode");
    var qualifications = markers[0].getAttribute("qualifications");
    var sgd = markers[0].getAttribute("sgd");
    var telephone = markers[0].getAttribute("telephone");
    var town = markers[0].getAttribute("town");
    var url = markers[0].getAttribute("url");

    var html = '';

    html += '<div class="designer">' + firstName + ' ' + lastName;

    if (qualifications != '') {
        html += ' ' + qualifications;
    }

    if (sgd != '') {
        if (sgd == 'Registered Member') {
            html += ' MSGD';
        }
        if (sgd == 'Fellow') {
            html += ' FSGD';
        }
    }

    html += '</div>';

    if (businessName != '') {
        html += '<div class="designer">' + businessName + '</div>';
    }
    var address = '';
    if (addressLine1 != '') {
        address += addressLine1 + '<br/>';
    }
    if (addressLine2 != '') {
        address += addressLine2 + '<br/>';
    }
    if (town != '') {
        address += town + '<br/>';
    }
    if (county != '') {
        address += county + '<br/>';
    }
    if (postCode != '') {
        address += postCode + '<br/>';
    }
    if (address != '') {
        html += '<div class="website">' + address + '</div>';
    }
    if (telephone != '') {
        html += '<div class="website">Telephone: ' + telephone + '</div>';
    }
    if (fax != '') {
        html += '<div class="website">Fax: ' + fax + '</div>';
    }
    if (mobile != '') {
        html += '<div class="website">Mobile: ' + mobile + '</div>';
    }
    if (email != '') {
        html += '<div class="website">Email: ' + email + '</div>';
    }
    if (url != '') {
        html += '<div class="website">Website: <a href="http://' + url + '" target="_blank">' + url + '</a></div>';
    }
    if (comments != '') {
        if (comments.length > 750)
            comments = comments.substring(0, 750) + '...';
        html += '<div class="comments">' + comments + '</div>';
    }

    return html;
}

function populateMap() {
    GDownloadUrl("GetDesigners.aspx", function(data, responseCode) {
        var xml = GXml.parse(data);
        var markers = xml.documentElement.getElementsByTagName("marker");
        for (var i = 0; i < markers.length; i++) {

            var lat = markers[i].getAttribute("lat");
            var lng = markers[i].getAttribute("lng");
            var postCode = markers[i].getAttribute("postCode");

            var point = new GLatLng(parseFloat(lat), parseFloat(lng));

            var marker = createMarker(point);

            map.addOverlay(marker);
        }
    });
}

function usePointFromPostcode(postcode, callbackFunction) {

    localSearch.setSearchCompleteCallback(null,
		function() {

		    if (localSearch.results[0]) {
		        var resultLat = localSearch.results[0].lat;
		        var resultLng = localSearch.results[0].lng;
		        var point = new GLatLng(resultLat, resultLng);
		        callbackFunction(point);
		    } else {
		        alert("Postcode not found!");
		    }
		});

    localSearch.execute(postcode + ", UK");
}

addLoadEvent(mapLoad);
addLoadEvent(populateMap);
addUnLoadEvent(GUnload);

