var map;
var stores = new Array();
var localSearch = new GlocalSearch();

var icon = new GIcon();
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 SearchPostcode(postcodeId) {
    var postcode = document.getElementById(postcodeId).value;
    usePointFromPostcode(postcode, setCenterToPoint);
}

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("holland "+postcode + ", NL");
}

//=========================================================
// search by point
//=========================================================
function placeMarkerAtPoint(point) {
    //var marker = new GMarker(point, icon);
    map.addOverlay(createMarker(point));
}

function createMarker(point) {
    var newIcon = MapIconMaker.createMarkerIcon({ width: 32, height: 32, primaryColor: "#00ff00" });
    var marker = new GMarker(point, { icon: newIcon });
    var html = "<b>tribal</b> <br/>&nbsp; Holland";
    GEvent.addListener(marker, 'click', function() {
        marker.openInfoWindowHtml(html);
    });
    return marker;
}

function setCenterToPoint(point) {
    map.setCenter(point, 16);
    placeMarkerAtPoint(point);
}

var _callSetCenterToStoresTotalCount = 0;
var _callSetCenterToStoresCurrentIndex = 0;
function usePointFromObj(objs, distance, startPostcode, callbackFunction) {
    var count = 0;
    _callSetCenterToStoresTotalCount = objs.length;
    _callSetCenterToStoresCurrentIndex = 0;
    for (var i = 0; i < objs.length; i++) {
        localSearch.setSearchCompleteCallback(null,
		function() {
		    //when this function (callback) fires, it is not the same sequence as when the executed fired.
		    _callSetCenterToStoresCurrentIndex++;
		    if (localSearch.results[0]) {
		        var resultLat = localSearch.results[0].lat;
		        var resultLng = localSearch.results[0].lng;
		        //var city = localSearch.results[0].city;
		        var point = new GLatLng(resultLat, resultLng);
		        var objItem = objs[count];
		        var shopname = objItem.Name;
		        var postcode = objItem.Postcode;
		        var address = objItem.Address;
		        var city = objItem.City;
		        var store = { point: point, name: shopname, postcode: "holland "+postcode, city: city, address: address };
		        if (postcode == startPostcode) {
		            store.star = true;
		        }
		        else {
		            store.star = false;
		        }
		        stores.push(store);
		        count++;
		        //if (objs.length == stores.length)
		        callbackFunction(stores, distance);
		    } else {
		        //alert("Postcode not found!");
		    }
		});
        if (objs[i].Postcode.length >= 6) {
            localSearch.execute("holland " + objs[i].Postcode.substring(0, 6) + ", NL");
            //alert(objs[i].Postcode.substring(0, 6));
        }
        //localSearch.execute(objs[i].Postcode.toString() + ", NL");

    }
}

function setCenterToStores(stores, distance) {
    if (_callSetCenterToStoresCurrentIndex < _callSetCenterToStoresTotalCount - 1)
        return;
    //alert(_callSetCenterToStoresCurrentIndex + " " + _callSetCenterToStoresTotalCount);
    var zoom;
    if (distance <= 0) {
        zoom = 16;
    }
    else if (distance > 0 && distance <= 10) {
        zoom = 12;
    }
    else if (distance > 10 && distance <= 100) {
        zoom = 7;
    }
    if (distance <= 0 && stores.length > 1) {
        zoom = 7;
    }
    if (stores.length > 0) {
        //        map.setCenter(stores[0].point, zoom);
        //        map.addOverlay(createStarMarkerStore(stores[0]));
        for (var i = 0; i < stores.length; i++) {
            //alert(stores[i].postcode + " " + stores[i].name + " " + stores[i].point);
            var store = stores[i];
            if (store.postcode.length > 4) {
                if (store.star == true) {
                    map.setCenter(store.point, zoom);
                    map.addOverlay(createStarMarkerStore(store, i + 1));
                }
                else
                    map.addOverlay(createMarkerStore(store, i + 1));
            }
        }
    }
}
//end search by point
//=========================================================


//==========================================================
//search by store
//==========================================================
function placeMarkerAtStore(store) {
    map.addOverlay(createMarkerStore(store));
}

function createMarkerStore(store, i) {
    //var newIcon = MapIconMaker.createMarkerIcon({ width: 32, height: 32, primaryColor: "#00ff00" });
    var newIcon = MapIconMaker.createLabeledMarkerIcon({ addStar: false, label: i + " ", primaryColor: "#00ff00" });
    var marker = new GMarker(store.point, { icon: newIcon });
    var html = "<b>" + store.name + "</b> <br/>" + store.address + " " + store.city;
    GEvent.addListener(marker, 'click', function() {
        marker.openInfoWindowHtml(html);
    });
    return marker;
}

function createStarMarkerStore(store, i) {
    //var newIcon = MapIconMaker.createMarkerIcon({ width: 32, height: 32, primaryColor: "#00ff00" });
    var newIcon = MapIconMaker.createLabeledMarkerIcon({ addStar: true, label: i + " ", primaryColor: "#00ff00" });
    var marker = new GMarker(store.point, { icon: newIcon });
    var html = "<b>" + store.name + "</b> <br/>" + store.address + " " + store.city;
    GEvent.addListener(marker, 'click', function() {
        marker.openInfoWindowHtml(html);
    });
    return marker;
}

function createClusteredMarker(stores) {
    var newIcon = MapIconMaker.createMarkerIcon({ width: 44, height: 44, primaryColor: "#00ff00" });
    var marker = new GMarker(stores[0].point, { icon: newIcon });
    var html = "";
    for (var i = 0; i < stores.length; i++) {
        html += "<b>" + stores[i].name + "</b> <br/>" + stores[i].title + "<br/>";
    }
    GEvent.addListener(marker, 'click', function() {
        marker.openInfoWindowHtml(html);
    });
    return marker;
}
//end search by store
//==============================================================
function showPointLatLng(point) {
    alert("Latitude: " + point.lat() + "\nLongitude: " + point.lng());
}

function mapLoad() {
    if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("googleMap"));
        map.addControl(new GLargeMapControl());
        map.addControl(new GMapTypeControl());
        map.setCenter(new GLatLng(52.187405, 5.053711), 6); //Holland location
    }
}

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();
        }
    }
}

//addLoadEvent(mapLoad);
addUnLoadEvent(GUnload);


