/* GENERAL */

var zoomLevel = 12;

/* CITY MAP */

var cityMap = null;
var cityMarker = null;
var cityMarkers =[];
var locationMarker = null;
var locationMarkers =[];
var cityMarkerManager = null;
var cityMapInited = false;
var iconsInited = false;
var customLegendControlInited = false;
var cityBounds;

if (urlPrefix == null) {
    var urlPrefix = '';
}

var blueIcon;
var blueMarker;

var orangeIcon;
var orangeMarker;

var redIcon;
var redMarker;

var greenIcon;
var greenMarker;

var yellowIcon;
var yellowMarker;


/* start - custom legend control */
function CustomLegendControl() {
}

function initCustomLegendControl() {
    if (! customLegendControlInited) {
        CustomLegendControl.prototype = new GControl(false, false);
        
        CustomLegendControl.prototype.getDefaultPosition = function () {
            return new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(10, 650));
        };
        
        CustomLegendControl.prototype.initialize = function (gmapref) {
            var container = gmapref.getContainer();
            var c = document.createElement("div");
            c.innerHTML = "<div id='legend'><div id='legend-availability'>Availability Colour Key: </div> <div class='good'>Good Availability</div><div class='limited'>Limited Availability</div><div class='last'>Last Rooms Remaining</div><div class='sold'>Sold Out</div></div>";
            
            container.appendChild(c);
            return c;
        }
    }
    customLegendControlInited = true;
}
/* end - custom legend control */

function initIcons() {
    if (! iconsInited) {
        
        blueIcon = new GIcon(G_DEFAULT_ICON);
        blueIcon.image = urlPrefix + "assets/design/img/googleMaps/blue-dot.png";
        blueMarker = {
            icon: blueIcon
        };
        
        orangeIcon = new GIcon(G_DEFAULT_ICON);
        orangeIcon.image = urlPrefix + "assets/design/img/googleMaps/orange-dot.png";
        orangeMarker = {
            icon: orangeIcon
        };
        
        redIcon = new GIcon(G_DEFAULT_ICON);
        redIcon.image = urlPrefix + "assets/design/img/googleMaps/red-dot.png";
        redMarker = {
            icon: redIcon
        };
        
        greenIcon = new GIcon(G_DEFAULT_ICON);
        greenIcon.image = urlPrefix + "assets/design/img/googleMaps/green-dot.png";
        greenMarker = {
            icon: greenIcon
        };
        
        yellowIcon = new GIcon(G_DEFAULT_ICON);
        yellowIcon.image = urlPrefix + "assets/design/img/googleMaps/yellow-dot.png";
        yellowMarker = {
            icon: yellowIcon
        };
    }
    
    iconsInited = true;
}

function newInitCityMap() {
    if (GBrowserIsCompatible()) {
        if (! cityMapInited) {
            initIcons();
            initCustomLegendControl();
            var cityMapDiv = document.getElementById("cityMap");
            cityMap = new GMap2(cityMapDiv);
            cityMap.setCenter(new GLatLng(0, 0), zoomLevel);
            cityMap.addControl(new GSmallMapControl());
            cityMap.addControl(new GMapTypeControl());
            cityMap.addControl(new GOverviewMapControl());
            cityMarkerManager = new GMarkerManager(cityMap);
            cityMap.addControl(new CustomLegendControl());
            cityBounds = new GLatLngBounds();
            cityMarkers =[];
            locationMarkers =[];
            cityMapInited = true;
        }
    }
}

function putMarkerInAvailabilityColor(point,availability){
	var new_marker;
    availability = availability.toLowerCase();
	 switch (availability) {
       case 'good':
    	 new_marker = new GMarker(point, greenMarker);
         break;
       case 'limited':
    	 new_marker = new GMarker(point, yellowMarker);
         break;
       case 'last':
    	 new_marker = new GMarker(point, orangeMarker);
         break;
       case 'sold':
    	 new_marker = new GMarker(point, redMarker);
         break;
       default:
         new_marker = new GMarker(point);
    }
	return new_marker;
}

function newCreateCityMarker(latitude, longitude, name, availability) {
    
    newInitCityMap();
    
    if (cityMap != null) {
        
        cityMap.checkResize();
        
        var point = new GLatLng(latitude, longitude);
        cityBounds.extend(point);
        
        cityMarker = putMarkerInAvailabilityColor(point, availability);
       
        GEvent.addListener(cityMarker, "click", function () {
            var myHtml = "<div style='width: 490px; height: 220px;'>"+$('#item-' + name).html()+"</div>";
            cityMap.openInfoWindowHtml(point, myHtml);
            
        });
        
        //cityMap.setCenter(point, zoomLevel);
        cityMarkers.push(cityMarker);
        //cityMap.addOverlay(cityMarker);
    }
}

function newCreateLocationMarker(latitude, longitude, name) {
    
    newInitCityMap();
    
    if (cityMap != null) {
        cityMap.checkResize();
        var point = new GLatLng(latitude, longitude);
        cityBounds.extend(point);
        locationMarker = new GMarker(point, blueMarker);
        GEvent.addListener(locationMarker, "click", function () {
            cityMap.openInfoWindowHtml(point, name);
        });
        cityMap.setCenter(point, zoomLevel);
        locationMarkers.push(locationMarker);
    }
}

function newLoadCityMap() {
    if (cityMap != null) {
        cityMarkerManager.addMarkers(cityMarkers, 1, 17);
        cityMarkerManager.addMarkers(locationMarkers, 1, 17);
        cityMarkerManager.refresh
        //set zoom with maximum zoom of level of zoomLevel
        var currentZoomLevel;
        if (cityMap.getBoundsZoomLevel(cityBounds) > zoomLevel){
                currentZoomLevel = zoomLevel;
        }
        else{
                currentZoomLevel = cityMap.getBoundsZoomLevel(cityBounds);
        }
      cityMap.setCenter(cityBounds.getCenter(),currentZoomLevel);

    }
    //cityMap.setCenter(new GLatLng(51, 17),zoomLevel);
}

/* PROPERTY MAP */

var propertyMap = null;
var propertyMarker = null;
var propertyMapInited = false;
//var propertyMarkerManager = null;

function newInitPropertyMap() {
    
    if (GBrowserIsCompatible()) {
        if (! propertyMapInited) {
            initIcons();	
        }
            propertyMap = new GMap2(document.getElementById("propertyMap"));
            propertyMap.setCenter(new GLatLng(0, 0), zoomLevel);
            propertyMap.addControl(new GSmallMapControl());
            propertyMap.addControl(new GMapTypeControl());
            propertyMap.addControl(new GOverviewMapControl());
            propertyMarkerManager = new GMarkerManager(propertyMap);
            propertyMapInited = true;
    }
}

function newCreatePropertyMarker(latitude, longitude, name, availability) {
    
    newInitPropertyMap();
    
    if (propertyMap != null) {
        
        propertyMap.checkResize();
        
        if (propertyMarker != null)
        propertyMap.removeOverlay(propertyMarker);
        
        var point = new GLatLng(latitude, longitude);
        propertyMarker = putMarkerInAvailabilityColor(point, availability);
        
        
        GEvent.addListener(propertyMarker, "click", function () {
            var myHtml = "<div style='width: 490px; height: 220px;'>"+$('#item-' + name).html()+"</div>";
            propertyMap.openInfoWindowHtml(point, myHtml);
        });
        
        propertyMap.setCenter(point, zoomLevel);
        
        propertyMap.addOverlay(propertyMarker);
    }
}
