﻿// JScript File
// TW Map Api Key = "ABQIAAAACpVVepRB_8LlWZS5c-WAKxSARb386zDFOwsQec9aq2PMEB-MjRSnLy0amVttuel5Fpyb928Fh0DQig"
var map = null;
//var gSearch = null;
var veLatLongArray = null;
var defaultLocation = new GLatLng(54.495567521874065,-4.526367187500011);
var mapZoomLevel, initialRequest, ajaxRequest, markers, loadingElement;
var topRight, bottomLeft;

function initialiseMap()
{
    veLatLongArray = Array();
    mapZoomLevel = 5;
    initialRequest = true;
    ajaxRequest = false;
    
    setupMap();
    getLatLongs();
}

function setupMap()
{
    if(map == null)
    {
        map = new GMap2(document.getElementById('myMap'), {size:new GSize(702, 370)});
        
        map.setCenter(defaultLocation, mapZoomLevel);
        
        gMapUiOpts = new GMapUIOptions(map.getSize());
        gMapUiOpts.maptypes.physical = false;
        
        map.setUI(gMapUiOpts);
        markers = new Array();        
    }
}

function getLatLongs()
{
    showLoading();
    
    var width = map.getSize().width;
    var height = map.getSize().height;

    var topLeft = map.fromContainerPixelToLatLng(new GPoint(0,0)).toString();
    var bottomRight = map.fromContainerPixelToLatLng(new GPoint(width,height)).toString();
    
    //strip parenthesises
    topLeft = topLeft.substr(1, topLeft.length - 2);
    bottomRight = bottomRight.substr(1, bottomRight.length - 2);
    
    CallWebService(map.getZoom(), width, height, topLeft, bottomRight);
}

var newStartupNodes = new Array();

function IncomingPinsJson(data)
{
    var serverData = getPinsArray(data);
    
    if(serverData != null)
    {
        var pinsCount = serverData["pins"].length;
                
        for(var i = 0; i < pinsCount; i++)
        {
            var pinData = serverData["pins"][i];
            
            addPin(pinData["lat"], pinData["long"], pinData["title"], pinData["description"], pinData["url"], pinData["image"], pinData["company"]);
            
            newStartupNodes[i] = new GLatLng(pinData["lat"], pinData["long"]);
        }
        
        if(initialRequest)
        {
            initialRequest = false;
            captureZoomAndPan();
            setMapView(startupNodes);
        }
        else if(ajaxRequest)
        {
            ajaxRequest = false;
            setMapView(newStartupNodes);
        }
        
        hideLoading();
    }
}

function captureZoomAndPan()
{
    GEvent.addListener(map, "moveend", function(oldLevel, newLevel){updateMap();});
}

function updateMap(setZoom)
{
    mapZoomLevel = map.getZoom();
    
    markers.length = 0;
    
    map.clearOverlays();
    veLatLongArray = Array();
    
    if(setZoom)
    {
        map.setZoom(mapZoomLevel);
    }

    getLatLongs();
}

function getPinsArray(data)
{
    var array = null;
    
    if(data.substring(0, 2) == "/*" && data.substring(data.length - 2) == "*/")
    {
        var formattedData = data.substring(2, data.length - 2);
        array = eval("(" + formattedData + ")");
    }
    
    return array;
}

function addPin(lat, lng, title, desc, url, image, company)
{
    var theme = getThemeFromHost(location.hostname);
    
    var redirect = (url.indexOf("DevelopmentRedirect.aspx") != -1);
    
    var cluster = (title == "Multiple developments");
    
    var houseIcon = new GIcon(G_DEFAULT_ICON);
    var imagePath = "/gw/App_Themes/" + theme + "/images/";
    
    houseIcon.image = cluster ? imagePath + "house_cluster.gif" : imagePath + "house_icon.gif";
    houseIcon.iconSize = cluster ? new GSize(24, 24) : new GSize(16, 16);
    houseIcon.iconAnchor = new GPoint(5,16);
    houseIcon.shadowSize = new GSize(0, 0);
    
    var loc = new GLatLng(lat, lng);
    
    var pin = new GMarker(loc, {icon:houseIcon});
    
    var infoOverlayHtml = new houseInfoOverlay(pin, generateInfoHtml(title, desc, url, image, company, redirect));
    
    map.addOverlay(pin);
    
    GEvent.addListener(pin, "mouseover", function() { displayHouseOverlay(pin, infoOverlayHtml); });
    GEvent.addListener(pin, "mouseout", function() { hideHouseOverlay(this); });
    
    markers.push(pin);
    veLatLongArray.push(loc);
}

function generateInfoHtml(title, desc, url, imageSrc, company, isRedirect)
{
    var cluster = (title == "Multiple developments");

    var outer = document.createElement("div");
    
    var container = document.createElement("div");
    container.className = "pinInfo";
    
    var titleDiv = document.createElement("div");
    titleDiv.className = "VE_Pushpin_Popup_Title";
    
    if(cluster)
    {
        titleDiv.innerHTML = "Developments from: <br/>";
    }
    else
    {    
        if(isRedirect)
        {
            titleDiv.innerHTML = "<p>Development from " + company + ":</p><a onclick=\"tb_show(null, '"+ url +"', false);\" class=\"linkNormal\">"+ (title.indexOf("<li>")>-1 ? title.substring(4) : title) +"</a>";
        }
        else
        {
            titleDiv.innerHTML = "<p>Development from " + company + ":</p><a href=\"" + url +"\" class=\"linkNormal\">"+ (title.indexOf("<li>")>-1 ? title.substring(4) : title) +"</a>";
        }
    }
    
    var bodyDiv = document.createElement("div");
    bodyDiv.className = "VE_Pushpin_Popup_Body";
    
    if(cluster)
    {
        bodyDiv.innerHTML = "<ul>" + unescape(desc) + "</ul>";
    }
    else
    {
        if(isRedirect)
        {
            bodyDiv.innerHTML = "<a onclick=\"tb_show(null, '"+ url +"', false);\" class=\"thickbox linkNormal\"><img src=\""+imageSrc+"\" class=\"thickbox\"></img></a><br/>"+desc;
        }
        else
        {
            bodyDiv.innerHTML = "<a class=\"linkNormal\" href=\"" + url +"\"><img src=\""+imageSrc+"\"></img></a><br/>"+desc;
        }
    }
    
    container.appendChild(titleDiv);
    container.appendChild(bodyDiv);
    
    outer.appendChild(container);
    
    return outer.innerHTML;
}