﻿// Adds markers to map and shows search results
//<![CDATA[

var qsParm = new Array();
var geocoder;
var newPoint;

if (GBrowserIsCompatible()) {
    xmlhttp = false;

    var getSearchTerm = "";
    var getType = 1;
    var getInitLat = "";
    var getInitLon = "";
    var ZOOM_LEVEL = 2;
    var results_bar_html = [];
    var gmarkers = [];
    var htmls = [];
    var i = 0;
    var altClass = 0;
    var map;
    var PROPERTY_MARKERS = "/map/GetPropertySearchResultMarkers.aspx";
    var TENANT_MARKERS = "/map/GetTenantSearchResultMarkers.aspx";
    var SearchType = 0;
    var intIndividualZoom = 13;   
    
    // search type constants
    var PROPERTY_SEARCH = 1;
    var TENANT_SEARCH = 2;
    var PAGE_SIZE = 5;
    
    var geoXml;       

    // hide paging
    document.getElementById('previousPage').style.display = 'none';
    document.getElementById('nextPage').style.display = 'none';
    
    // set up marker pins
    
    var duchyMarkerOptions = new Array();
    for (var i = 0; i <= PAGE_SIZE; i++) {
        duchyIcon = new GIcon();

        duchyIcon.image = "/upload/map/images/pin_" + i + ".png";
        duchyIcon.shadow = "/upload/map/images/pin_shadow.png";
        duchyIcon.iconSize = new GSize(24, 26);
        duchyIcon.shadowSize = new GSize(24, 26);
        duchyIcon.iconAnchor = new GPoint(12, 26);
        duchyIcon.infoWindowAnchor = new GPoint(5, 1);
        
        duchyMarkerOptions.push({icon:duchyIcon});
    }

    //function initialize() {
    
    G_PHYSICAL_MAP.getMinimumResolution = function() { return 6 };
    G_PHYSICAL_MAP.getMaximumResolution = function() { return 13 };

    if (GBrowserIsCompatible()) {
        qsParm['RegionID'] = 0;
        qsParm['PropertyID'] = 0;
        qsParm['TenantID'] = 0;
        qsParm['Search']=0;
        qsParm['CurrentPage'] = 0;
        qsParm['ShowEstates'] = 1;
        qsParm['ShowTenants'] = 1;
        
        ParseQueryStringVariables();
        
        document.getElementById("tbCurrentPage").value = parseInt(qsParm['CurrentPage']);

        if (qsParm['Search'] == 1) {
            SearchType = PROPERTY_SEARCH;            
        }
        else if (qsParm['Search'] == 2) {
            SearchType = TENANT_SEARCH;
        }
        
        geocoder = new GClientGeocoder();
        
        window.onunload = google.maps.Unload;
        map = new GMap2(document.getElementById("map_canvas"));
        var topRight = new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(10, 10));

        map.setCenter(new GLatLng(52.9, -2), 6, G_PHYSICAL_MAP);
        map.enableContinuousZoom();
        map.enableScrollWheelZoom();

        map.addControl(new GSmallZoomControl3D(), topRight);
        map.addControl(new GScaleControl());
        
        addRegionOverlays();
        
    }

       

    //A function to create the marker and set up the event window
    // also displays the link in search results bar
       
    function createMarker(point, markerInfo, int_id) {
        var marker;
        var markerInfoHtml;
        var markerInfoLink;
        var markerType;
        var pageURL;
        var propertyInfo;
        
        if (int_id < 1)  { int_id = 1;  }
        if (int_id > 10) { int_id = 10; }

        if (markerInfo.PageURL != "" && markerInfo.PageURL != undefined) {
            duchyMarkerOptions[int_id].icon.image = "/upload/map/images/pin_" + int_id + "_estates.png";
        }

        marker = new GMarker(point, duchyMarkerOptions[int_id]);
                
        
        // bubble information        
        if (SearchType == PROPERTY_SEARCH) {
            markerInfoHtml ="<div id='markerWindow'>";
            markerInfoHtml = markerInfoHtml + "<span class='markerTitle'>" + markerInfo.Name + "</span>" ;
            markerInfoHtml = markerInfoHtml + "</div>";
        }
        else
        {            
            markerInfoHtml ="<div id='markerWindow'>";
            markerInfoHtml = "<span class='markerTitle'>" + markerInfo.Name + "</span>" ;  
            markerInfoHtml = markerInfoHtml + "</div>";
        }

        gmarkers[int_id] = marker;

        var img = "/upload/map/images/pin_"+int_id;
        if (markerInfo.PageURL != "" && markerInfo.PageURL != undefined) {
            img += "_estates";
        }
        img += ".png";
        var markerImage = "<img class='markerNumber' src='"+img+"'>"

        markerInfoLink = "<br/>"
        markerInfoLink += markerImage + "<a class=\"markerLink\" href=\"#\" onclick=\"zoomLocation(" + markerInfo.lat + "," + markerInfo.lng + ","+intIndividualZoom+");return false;\">" + markerInfo.html + "</a>";

        if (markerInfo.Description != "" && markerInfo.Description != undefined) {
            markerInfoLink += "<p>" + markerInfo.Description + "</p>";
        }
        if (markerInfo.PageURL != "" && markerInfo.PageURL != undefined) {
            markerInfoLink += "<p><a href=\"" + markerInfo.PageURL + "\" class=\"more-details\">View details</a></p>";
        }

        if (SearchType == TENANT_SEARCH && markerInfo.Image.length > 0)
        {            
            markerInfoLink += "<img class='tenantImage' alt='" + markerInfo.Image + "' src='/upload/" + markerInfo.Image + "'>";
        }
        
        // show address and contact info for tenants
        if (SearchType == TENANT_SEARCH) {
            markerInfoLink += "<div id='contactinfo'>" + AppendIfNotEmpty(markerInfo.Town);            
            markerInfoLink += AppendIfNotEmpty(markerInfo.Phone);
            markerInfoLink += AppendIfNotEmpty(markerInfo.Fax);
            if (markerInfo.Email != "") {
                markerInfoLink += "<a href=\"mailto:" + markerInfo.Email + "\" class=\"more-details\">" + AppendIfNotEmpty(markerInfo.Email) + "</a>";
            }
            if (markerInfo.Web != "") {
                markerInfoLink += "<a href=\"http://" + markerInfo.Web + "\" class=\"more-details\">" + AppendIfNotEmpty(markerInfo.Web) + "</a>";
            }
            markerInfoLink += "</div>";
        }
        
        results_bar_html += markerInfoLink;

        htmls[i] = markerInfoHtml;
        i++;

        return marker;
    }

    function zoomLocation(lat, lng, zoom) {
        var latlon = new GLatLng(lat, lng);
        map.setCenter(latlon, zoom);
    }

    function AppendIfNotEmpty(strValue) {
        if (strValue.length > 0) {
            return strValue + "<br/>";
        }
        else {
            return "";
        }
    }
    

    //THIS FUNCTION PICKS UP THE CLICK EVENT AND OPENS CORRESPONDING INFO WINDOW
    function propertyClick(i) {
        gmarkers[i].openInfoWindowHtml(htmls[i]);        
    }     
    
    //JUST TO PROMPT USER DATA IS BEING LOADED
    document.getElementById("results_bar").innerHTML = "<p>Loading...</p>";

    //DEFINES THE FUNCTION THATS GOING TO PROCESS THE JSON FILE
    process_it = function(doc) {
    
        //PARSE THE JSON DOCUMENT
        var jsonData = eval('(' + doc + ')');

        if (SearchType != 0) {
            //PLOT THE MARKERS
            for (var i = 0; i < PAGE_SIZE; i++) {
                try {

                    var append = false;

                    if (qsParm['ShowEstates'] == 1) {
                        if (jsonData.markers[i].PageURL != "") {
                            append = true;
                        }
                    }
                    if (qsParm['ShowTenants'] == 1) {
                        if (jsonData.markers[i].PageURL == "") {
                            append = true
                        }
                    }

                    if (append) {
                        var point = new GLatLng(jsonData.markers[i].lat, jsonData.markers[i].lng);
                        var marker = createMarker(point, jsonData.markers[i], i + 1);
                        map.addOverlay(marker);
                    }
                }
                catch (err) {
                    //alert(err);
                }
                finally {
                    if (i == 0) {
                        map.setCenter(point)
                    }
                }
            }

            if (jsonData.markers.length > 1) {
                map.setZoom(8)
            } else {
                map.setZoom(intIndividualZoom)
            }


            ShowHidePagingControls(jsonData.markers.length);

            //Put the assembled results_bar_html contents into the results_bar div
            if (results_bar_html != "" && (getType == 1)) {
                document.getElementById("result_Message").innerHTML = '';
            }
            if (results_bar_html != "" && (getType == 0 || getType == 2)) {
                document.getElementById("result_Message").innerHTML = '';
            }
            if (results_bar_html == "" || results_bar_html == "") {
                map.setZoom(3)
                results_bar_html = "<p>Sorry there are no results for your search please try again</p>"
                document.getElementById('paging').style.display = 'none';
            }
        }

        var search = parseInt(qsParm['Search']);
        if (search > 0) {
            document.getElementById("results_bar").innerHTML = results_bar_html;
        }
        else {
            document.getElementById("results_bar").innerHTML = "";
        }
    }

    //FETCH THE JSON DATA FILE
    var searchCriteriaURL = GetSearchCriteriaURL(parseInt(qsParm['CurrentPage']))
    GDownloadUrl(searchCriteriaURL, process_it);
}
else {
    alert("Sorry, the Google Maps API is not compatible with this browser");
}

function ShowHidePagingControls(numberOfMarkers)
{   
    var currentPage = parseInt(document.getElementById("tbCurrentPage").value);
    
    if (currentPage <= 1) {
        document.getElementById('previousPage').style.display = 'none';
    }
    else {
        document.getElementById('previousPage').style.display = '';        
    }

    if (numberOfMarkers < PAGE_SIZE) {
        document.getElementById('nextPage').style.display = 'none';        
    }
    else {
        document.getElementById('nextPage').style.display = '';        
    }
}

function NextPage() {
    map.clearOverlays();
    addRegionOverlays();
    var currentPage = parseInt(document.getElementById("tbCurrentPage").value);
    var nextPage;

    if (currentPage == 0) {
        currentPage = 1;
    }

    nextPage = currentPage + 1;

    document.getElementById("tbCurrentPage").value = nextPage;
    
    var searchCriteriaURL = GetSearchCriteriaURL(nextPage)
    
    results_bar_html = '';
    
    GDownloadUrl(searchCriteriaURL, process_it);
}

function PreviousPage() {
    map.clearOverlays();
    addRegionOverlays();
    var currentPage = parseInt(document.getElementById("tbCurrentPage").value);
    var previousPage;

    if (currentPage == 0 || currentPage == null) {
        previousPage = 0;
    }
    else {
        previousPage = currentPage - 1;
    }

    document.getElementById("tbCurrentPage").value = previousPage;
    
    var searchCriteriaURL = GetSearchCriteriaURL(previousPage);
    
    results_bar_html = '';

    GDownloadUrl(searchCriteriaURL, process_it);
}

function GetSearchCriteriaURL(currentPage)
{
    document.getElementById('results_bar').style.display = '';
    
    if (SearchType == PROPERTY_SEARCH) {
        // Add search criteria to query string
       
        var regionID = parseInt(qsParm['RegionID']);
        var propertyID = parseInt(qsParm['PropertyID']);

        markersURL = PROPERTY_MARKERS + "?RegionID=" + regionID + "&PropertyID=" + propertyID + "&CurrentPage=" + currentPage;
    }
    else {
        // Add search criteria to query string       
        var regionID = parseInt(qsParm['RegionID']);
        var tenantID = parseInt(qsParm['TenantID']);
        var showEstates = parseInt(qsParm['ShowEstates']);
        var showTenants = parseInt(qsParm['ShowTenants']);

        markersURL = TENANT_MARKERS + "?RegionID=" + regionID + "&TenantID=" + tenantID + "&CurrentPage=" + currentPage + "&ShowEstates=" + showEstates + "&ShowTenants=" + showTenants;  
    }
    
    return  markersURL;
}

function ParseQueryStringVariables() 
{
    var query = window.location.search.substring(1);
    var parms = query.split('&');
    for (var i=0; i<parms.length; i++) 
    {
        var pos = parms[i].indexOf('=');
        if (pos > 0) 
        {
            var key = parms[i].substring(0,pos);
            var val = parms[i].substring(pos + 1);
            qsParm[key] = val;
        }
    }
}






function addRegionOverlays(obj) {

    if (SHOW_REGIONS) {
        var xml1 = new GGeoXml("http://duchyoflancaster.141i.com/upload/map/Lancashire.kml");
        var xml2 = new GGeoXml("http://duchyoflancaster.141i.com/upload/map/Yorkshire.kml");
        var xml3 = new GGeoXml("http://duchyoflancaster.141i.com/upload/map/Crewe.kml");
        var xml4 = new GGeoXml("http://duchyoflancaster.141i.com/upload/map/Needwood.kml");
        var xml5 = new GGeoXml("http://duchyoflancaster.141i.com/upload/map/Savoy.kml");
        
        map.addOverlay(xml1);
        map.addOverlay(xml2);
        map.addOverlay(xml3);
        map.addOverlay(xml4);
        map.addOverlay(xml5);
    }
    
}