var viewingRoute = 0;
var overlayArray = new Object();
var markerArray = new Array();
var lineCacheArray = new Array();
var progressBarCounter = 0;
var cookie;
var geoCoder = new GClientGeocoder();
var detailLayer = new GTileLayer(new GCopyrightCollection("Fred Leefarr"));
var fullScreen = false;
var fullScreenModeDesired = true;
var fullScreenMap;
var overviewMapControl = new GOverviewMapControl();

detailLayer.getTileUrl = function(E, F){
    var D = "main";
    if (tilePath == "remote") {
        return url = "http://emu.appspot.com/tile?x=" + E.x + "&y=" + E.y + "&zoom=" + F + "&template=" + D
    }
    else {
        return url = "http://localhost:8085/tile?x=" + E.x + "&y=" + E.y + "&zoom=" + F + "&template=" + D
    }
};
detailLayer.getOpacity = function(){
    var B = (mainOverlayOpacity / 100);
    if (isNaN(B)) {
        return 0.5
    }
    else {
        return B
    }
};
detailLayer.isPng = function(){
    return true
};
detailMapLayers = G_NORMAL_MAP.getTileLayers();
detailMapLayers.push(detailLayer);
detailMapLayers = G_SATELLITE_MAP.getTileLayers();
detailMapLayers.push(detailLayer);
detailMapLayers = G_PHYSICAL_MAP.getTileLayers();
detailMapLayers.push(detailLayer);
$(document).ready(function(){
    init();
});
function init(){

    $("tr:odd").addClass("odd");
    $("tr:even").addClass("even");
    if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("mapdiv"));
        map.enableContinuousZoom();
        map.addMapType(G_PHYSICAL_MAP);
        map.setMapType(G_PHYSICAL_MAP);
        map.removeMapType(G_HYBRID_MAP);
		map.enableScrollWheelZoom();
        G_PHYSICAL_MAP.getMaximumResolution = function(){
            return 14
        };
        G_HYBRID_MAP.getMaximumResolution = function(){
            return 14
        };
        G_NORMAL_MAP.getMaximumResolution = function(){
            return 14
        };
        cookie = new Cookie("visitordata");
        if (!cookie.startLat || !cookie.startLng || !cookie.startZoom || !cookie.startMapType) {
            GeoLocate()
        }
        else {
            var B = map.getMapTypes()[parseInt(cookie.startMapType)];
            initialiseMap(cookie.startLat, cookie.startLng, cookie.startZoom, B, false)
        }
        GEvent.addListener(map, "moveend", onMapMove);
        GEvent.addListener(map, "maptypechanged", saveMapTypeCookie)
    }
    else {
        alert("Sorry, this browser is not compatible with Google Maps")
    }
	
	registerListeners();
  
}

function registerListeners() {
	
	$("#trigger").click(function(A){
        A.preventDefault();
        $("#box").slideToggle()
    });
    $("#box a").click(function(A){
        A.preventDefault();
        $("#box").slideUp()
    });
    $("#addressSearchForm").submit(function(A){
        findLocation();
        return false
    });
}

function findLocation(){
    geoCoder.getLocations($("#addressSearchText").val(), findLocationResult)
}

function findLocationResult(I){
    map.clearOverlays();
    $("#alternativeLocations").html("");
    if (I.Status && I.Status.code == 200) {
        try {
            var L = I.Placemark[0].Point.coordinates[0];
            var M = I.Placemark[0].Point.coordinates[1];
            highlightLocation(M, L);
            if (I.Placemark.length > 1) {
                var D = "";
                var K = 5;
                if (I.Placemark.length < 5) {
                    K = I.Placemark.length
                }
                for (var H = 0; H < K; H++) {
                    var J = I.Placemark[H].Point.coordinates[1];
                    var G = I.Placemark[H].Point.coordinates[0];
                    D += '<a href="javascript:highlightLocation(' + I.Placemark[H].Point.coordinates[1].toString() + "," + I.Placemark[H].Point.coordinates[0].toString() + ')">';
                    D += I.Placemark[H].AddressDetails.Country.CountryName;
                    D += ", " + I.Placemark[H].AddressDetails.Country.AdministrativeArea.AdministrativeAreaName;
                    D += "</a>";
                    D += "<br />"
                }
                $("#alternativeLocations").html(D)
            }
        } 
        catch (B) {
        }
    }
    else {
        alert("Sorry, address could not be found")
    }
}

function highlightLocation(E, A){
    var C = new GLatLng(E, A);
    map.setZoom(6);
    map.panTo(C);
    var F = new GMarker(C);
    map.addOverlay(F)
}

function initialiseMap(F, I, G, H, J){
    map.setCenter(new GLatLng(parseFloat(F), parseFloat(I)), parseInt(G));
    map.addControl(new GSmallMapControl());
    map.addControl(overviewMapControl);
    map.addControl(new GMapTypeControl(), new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(160, 10)));
    //map.addControl(new FullScreenControl("right"), new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(10, 10)));
    map.addControl(new FullScreenControl(), new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(10, 10)));
    
	map.setMapType(H);
    if (J) {
        saveMapSettingsCookie();
        saveMapTypeCookie()
    }
    map.clearOverlays();
    GetInfoMarkers()
}

function GeoLocate(){
    if (country == "uk" || country == "GB" || country == "unknown") {
        initialiseMap(53.940312757160115, -4.334410858154297, 6, map.getMapTypes()[2], true)
    }
    else {
        if (country == "US") {
            initialiseMap(38, -100, 5, map.getMapTypes()[2], true)
        }
        else {
            geoCoder.getLocations(country, GeoLocateResult)
        }
    }
}

function GeoLocateResult(C){
    if (!C || C.Status.code != 200) {
        initialiseMap(0, 0, 1, map.getMapTypes()[2], true)
    }
    else {
        var D = C.Placemark[0].Point.coordinates;
        zoomLevel = 4;
        initialiseMap(D[1], D[0], zoomLevel, map.getMapTypes()[2], true)
    }
}

function GetLinesByRouteViewResponse(L){
    map.clearOverlays();
    viewingRoute = 1;
    var J = new GLatLngBounds();
    var N = L[0].lineArray;
    for (var H = 0; H < N.length; H++) {
        var K = new GLatLng(N[H]["maxLat"], N[H]["maxLng"]);
        J.extend(K);
        var I = new GLatLng(N[H]["minLat"], N[H]["minLng"]);
        J.extend(I);
        var M = GPlolylineFromJSONString(N[H]);
        map.addOverlay(M)
    }
    map.setZoom(map.getBoundsZoomLevel(J));
    map.panTo(J.getCenter());
    viewingRoute = 0
}

function handleSegmentCallBack(C){
    var D = addSegmentsToMap(map, C, "thin")
}

function handleMarkerCallBack(F, G){
    for (var E = 0; E < F.length; E++) {
        var H = createMarker(new GLatLng(F[E]["lat"], F[E]["lng"]), "test", getViewMarkerHTML(F[E], 0, G), F[E]["type"]);
        map.addOverlay(H)
    }
}

function handleDetailsCallBack(B){
}

function handleTagsCallBack(B){
}

function onRouteLoadingComplete(){
}

function addMark(D){
    var C = createMarker(new GLatLng(D.lat, D.lng), "test", "yo!", D.type);
    map.addOverlay(C)
}

function onMapMove(B){
    GetInfoMarkers();
    saveMapSettingsCookie()
}

function GetRouteInfoPointsResult(F){
    map.clearOverlays();
    for (var E = 0; E < F.length; E++) {
        var D = createMarker(new GLatLng(F[E]["lat"], F[E]["lon"]), "Number ", F[E]["info"]);
        map.addOverlay(D)
    }
};

