﻿// JScript File
var map;
var gDir;
var gSearch;
var directionsSummaryDiv;
var markers;
var myMapWidth = 546;
var myMapHeight = 370;

function initialiseMap()
{        
    setupMap(); 
}

function setupMap()
{
    if(map == null)
    {
        map = new GMap2(document.getElementById("myMap"), {size: new GSize(myMapWidth, myMapHeight)});
        
        showLoading();        
        
        GEvent.addListener(map, "tilesloaded", function(){ mapLoaded(); });
        
        map.setCenter(new GLatLng(devLatitude, devLongitude), zoomLevel);  
    }
}

function mapLoaded()
{       
    addIcons();
        
    setupSearch();
    setupDirections();   
        
    map.addControl(new GLargeMapControl3D()); 
    map.addControl(new GMapTypeControl()); 
    map.addControl(new GOverviewMapControl());

    map.enableScrollWheelZoom();    
}

function addIcons()
{    
    markers = new Array();
    
    var pinItem;
    while(pinItem = pinArray.pop())
    {
        var lat = pinItem[0];
        var lng = pinItem[1];
        
        var loc = new GLatLng(lat, lng);
        
        var title = pinItem[2];
        var desc = pinItem[3];
        var icon = pinItem[4];
        
        var houseIcon = new GIcon();
        
//        alert(title + " :: " + icon);
        
        houseIcon.image = icon;
        houseIcon.iconSize = (icon.indexOf("red-house-new")>-1) ? new GSize(33, 38) : new GSize(16,16);
        houseIcon.iconAnchor = new GPoint(20,16);
        houseIcon.shadowSize = new GSize(0, 0);
        
        var pin = new GMarker(loc, {icon:houseIcon});    
        
        var infoOverlay = new houseInfoOverlay(pin, generateInfoHtml(title, desc, icon, loc));
        
        map.addOverlay(pin);
        
        addEventListeners(pin, infoOverlay);
        
        markers.push(loc);
    }
    
    setMapView(markers);
    
    hideLoading();
}

function addEventListeners(pin, infoOverlay)
{
    //GEvent.addListener(pin, "mouseover", function(){ displayHouseOverlay(pin, infoOverlay); } );
    //GEvent.addListener(pin, "mouseout", function(){ hideHouseOverlay(this); } );
    
    //GEvent.addListener(pin, "click", function() { displayHouseOverlay(pin, infoOverlayHtml); });
}

function generateInfoHtml(title, desc, icon, loc)
{
    var container = document.createElement("div");
    container.id = "overlaycontainer";
    container.className = "#CLSS#";    
    
    var dmrtop = document.createElement("div");
    dmrtop.className = "dmrtop";
        
    var dmr = document.createElement("div");
    dmr.className = "dmr";
    
    if(icon.indexOf("red-house-new") > -1)
    {
        var dmrHeader = document.createElement("h1");
        dmrHeader.className = "dmrh1";
        dmrHeader.innerHTML = "Development Name:";
        
        dmr.appendChild(dmrHeader);
    }
    
    dmr.innerHTML += title;
    dmr.innerHTML += desc;    
    dmr.innerHTML += "<br class=\"clearfloat\"/>";
        
    var dmrzoom = document.createElement("div");
    dmrzoom.className = "dmrzoom";
    
    var zoomAnchor = document.createElement("a");
    zoomAnchor.className = "zoombutton";
    
    var onclickAttr = document.createAttribute("onclick");
    onclickAttr.nodeValue = "centerAndZoom(" + loc.lat() + "," + loc.lng() + ");";
    
    zoomAnchor.setAttributeNode(onclickAttr);
    
    dmrzoom.appendChild(zoomAnchor);
    
    // Close button    
    var closeAnchor = document.createElement("a");
    closeAnchor.className = "closebutton-map";  
    closeAnchor.innerText = "Close";
    
    var closeOnClickAttr = document.createAttribute("onclick");
    closeOnClickAttr.nodeValue = "hideHouseOverlayNow();";
    
    closeAnchor.setAttributeNode(closeOnClickAttr);
    
    dmrzoom.appendChild(closeAnchor);
    
    container.appendChild(dmrtop);
    container.appendChild(dmr);
    container.appendChild(dmrzoom);
    
    return container.outerHTML || new XMLSerializer().serializeToString(container);
}

function setupSearch()
{
    gSearch = new GlocalSearch();
    
    gSearch.setSearchCompleteCallback(null, function() {performDirectionsLoad(gSearch.results[0]);}); 
}

function setupDirections()
{
    directionsSummaryDiv = document.getElementById("drivingDirections");

    gDir = new GDirections(map, directionsSummaryDiv);
    
    GEvent.addListener(gDir, "load", onDirectionsLoad);
    GEvent.addListener(gDir, "error", onDirectionsError);
    GEvent.addListener(gDir, "addoverlay", onDirectionsOverlayComplete);
}

function getDirections()
{
    var val = document.getElementById("mapPostcode").value;
    
    if(val == null) return;
    
    gSearch.execute(val + ", UK");
}

function performDirectionsLoad(loc)
{
    var query = "from:" + loc.lat + "," + loc.lng + " to:" + devLatitude + "," + devLongitude;
    
    gDir.load(query);
}

function onDirectionsLoad()
{
    directionsSummaryDiv.style.display = "block";
}

function onDirectionsError()
{
    alert("There was a problem calculating this route, please ensure your input address is valid and try again.\nIf this error continues please contact the website administrator.\n" + gDir.getStatus().code + ": " + gDir.getStatus().request);
}

function onDirectionsOverlayComplete()
{
    map.removeOverlay(gDir.getMarker(gDir.getNumGeocodes() - 1));
}
