﻿/**
* Global mapping functions
*/

//var searchBackendUrl = "http://webdata.carterjonas.co.uk/propertysearchfx/flashservices/services/search_martin"; //used to generate map icons at the moment

var map = null;
var markers = [];
var datasetMarkers = [];
var debug = null;
var knownIcons = [];
var oldLatitude = 0;
var closeTimeout = null;
var popups = [];
var currentPopup = null;
var popupEvent = null;
var isPlotting = false;
var plottingTimeout = null;
var loadingTimeout = null;
var progress = 0;
var svc = null;
var popupPage = 0;



var maxZoomLevel = 1;
var minZoomLevel = 26;

function debugAdd(comment)
{
    //document.getElementById("debug").innerHTML+="<br/>"+comment;
}

function initMap()
{
//    var minLat1 = parseFloat(getQueryVariable('latMin'));
//    var minLng1 = parseFloat(getQueryVariable('lngMin'));
//    var maxLat1 = parseFloat(getQueryVariable('latMax'));
//    var maxLng1 = parseFloat(getQueryVariable('lngMax'));

//    if (isNaN(minLat1) || isNaN(minLng1) || isNaN(maxLat1) || isNaN(maxLng1))
//    {
//        minLat1 = roundNumber(jsMapBounds.latMin, 5);
//        maxLat1 = roundNumber(jsMapBounds.latMax, 5);
//        minLng1 = roundNumber(jsMapBounds.lngMin, 5);
//        maxLng1 = roundNumber(jsMapBounds.lngMax, 5);
//    }

//    var centreLat = (maxLat1 + minLat1) / 2;
//    var centreLng = (maxLng1 + minLng1) / 2;

//    var bestFit = map.getBoundsZoomLevel(new GLatLngBounds(new GLatLng(minLat1, minLng1), new GLatLng(maxLat1, maxLng1)));

    var searchCategory = getQueryVariable('sc');

    var legend = searchCategory == "4" ? $(".mapLegend .farms") : $(".mapLegend .resi")
    legend.removeClass("hidden");

    centreLat = jsMapBounds.location.GPSPoint.lat;
    centreLng = jsMapBounds.location.GPSPoint.lng;
    bestFit = jsMapBounds.zoom;

    map.setCenter(new GLatLng(centreLat, centreLng), bestFit);
}

function reCentreMap()
{

    var minLat = $("#minLat").val();
    var minLng = $("#minLng").val();
    var maxLat = $("#maxLat").val();
    var maxLng = $("#maxLng").val();


    var centreLat = (maxLat + minLat) / 2;
    var centreLng = (maxLng + minLng) / 2;

    var bestFit = map.getBoundsZoomLevel(new GLatLngBounds(new GLatLng(minLat, minLng), new GLatLng(maxLat, maxLng)));


    //map.setCenter(new GLatLng(centreLat, centreLng), bestFit);

}

function Zend_ProgressBar_Update(percent)
{
    if (loadingTimeout)
    {
        return;
    }

    progress = percent;

    if (document.getElementById('zend-progressbar-container'))
    {
        if (document.getElementById('zend-progressbar-container').style.display == "none")
        {
            document.getElementById('zend-progressbar-container').style.display = "block";
        }
        document.getElementById('zend-progressbar-done').style.width = percent + '%';
        document.getElementById('zend-progressbar-done').innerHTML = " &nbsp; " + percent + "%";
    }

    if (percent == 100)
    {
        loadingTimeout = setTimeout("clearLoadingTimeout()", 1500);
    }
}

function updateDatasets()
{
    url = getMapSearchUrl();
    GDownloadUrl(url,
    function(data, responseCode)
    {
        //	alert ('got other icons' + data);

        var xml = GXml.parse(data);
        var ms = xml.documentElement.getElementsByTagName("m");
        var head = xml.documentElement.getElementsByTagName("total");

        var marker = null;
        var onMap = [];
        var oldMarkers = datasetMarkers;

        for (var i = 0; i < ms.length; i++)
        {

            var id = ms[i].getAttribute("type") + "," + ms[i].getAttribute("id");
            onMap[id] = true;
            if (datasetMarkers[id])
            {
                //alert("HAVE:" + id);
            }
            else
            {
                if (parseFloat(ms[i].getAttribute("lat")) > $("#maxLat").val() || $("#maxLat").val() == '')
                {
                    $("#maxLat").val(ms[i].getAttribute("lat"));
                }
                if (parseFloat(ms[i].getAttribute("lat")) < $("#minLat").val() || $("#minLat").val() == '')
                {
                    $("#minLat").val(ms[i].getAttribute("lat"));
                }
                if (parseFloat(ms[i].getAttribute("lng")) > $("#maxLng").val() || $("#maxLng").val() == '')
                {
                    $("#maxLng").val(ms[i].getAttribute("lng"));
                }
                if (parseFloat(ms[i].getAttribute("lng")) < $("#minLng").val() || $("#minLng").val() == '')
                {
                    $("#minLng").val(ms[i].getAttribute("lng"));
                }

                var point = new GLatLng(parseFloat(ms[i].getAttribute("lat")), parseFloat(ms[i].getAttribute("lng")));
                var myIcon = new GIcon();

                myIcon.image = searchBackendUrl + "/Graphics/Icon.php?type=" + ms[i].getAttribute("type") + "&count=" + ms[i].getAttribute("count") + "&exact=exact";
                //myIcon.image = "mapicon.png";
                myIcon.title = ms[i].getAttribute("label");
                myIcon.iconSize = new GSize(30, 45);
                myIcon.iconAnchor = new GPoint(13, 13);

                //    var o = new Object();
                //   o.title=ms[i].getAttribute("label");

                marker = new GMarker(point, myIcon);
                datasetMarkers[id] = marker;
                markers[id] = marker;
                //      alert("ADD:" + id);
                eval("GEvent.addListener(marker, \"mouseover\", function () {showOverlay(this, '" + ms[i].getAttribute("id") + "','mapPopup')})");
                eval("GEvent.addListener(marker, \"mouseout\", function () {closeTimeout = setTimeout('hideOverlay()',500);})");
                eval("GEvent.addListener(marker, \"click\", function () {showFullDetails('" + ms[i].getAttribute("id") + "')})");

                map.addOverlay(marker);
            }
        }
        for (i in oldMarkers)
        {
            if (!onMap[i] && datasetMarkers[i])
            {
                //	 alert("REMOVE:" + i);
                map.removeOverlay(datasetMarkers[i]);
                datasetMarkers[i] = null;
            }


        }
        Zend_ProgressBar_Update(100);
    }
);
}

function updateCoords()
{
    var bounds = map.getBounds();
    var southWest = bounds.getSouthWest();
    var northEast = bounds.getNorthEast();
    var latMax = northEast.lat();
    var lngMax = northEast.lng();
    var latMin = southWest.lat();
    var lngMin = southWest.lng();
    zoom = map.getZoom();

    var lat = (latMax + latMin) / 2;
    var lng = (lngMax + lngMin) / 2;
    
    //only update coords once map has been moved
    if (!firstLoad)
    {
        searchForm.updateBoundary(lat, lng, latMin, latMax, lngMin, lngMax, zoom);
    }
    //var jsMapBounds = { "zoom": zoom, "latMin": latMin, "latMax": latMax, "lngMin": lngMin, "lngMax": lngMax };

    //updateMapBoundary(jsMapBounds);
}

function workOutLength(text)
{
    var length = 0;
    for (i = 0; i < text.length; i++)
    {
        if (text[i] == "i" || text[i] == "l" || text[i] == "t" || text[i] == "r")
        {
            length += 6;
        } else
        {
            length += 15;
        }
    }
    return length;
}

function debugClear()
{
    if (document.getElementById("debug"))
    {
        document.getElementById("debug").innerHTML = "";
    }

}

function updateMarkers()
{
    debugClear();

    Zend_ProgressBar_Update(0);

    url = getMapSearchUrl();
    GDownloadUrl(url,
    function(data, responseCode)
    {
        Zend_ProgressBar_Update(25);
        var xml = GXml.parse(data);
        var ms = xml.documentElement.getElementsByTagName("m");
        var head = xml.documentElement.getElementsByTagName("total");

        //searchForm.setPredictedPropertiesNumberText(head[0].getAttribute("count"));
        var marker = null;
        var onMap = [];
        var oldMarkers = markers;

        $("#numberFound").html(head[0].getAttribute("count") + ' properties found');

        for (var i = 0; i < ms.length; i++)
        {
            if (i == ms.length / 2)
            {
                Zend_ProgressBar_Update(42);
            }
            var id = ms[i].getAttribute("id");
            onMap[id] = true;
            if (markers[id])
            {

            }
            else
            {
                var point = new GLatLng(parseFloat(ms[i].getAttribute("lat")), parseFloat(ms[i].getAttribute("lng")));
                var count = parseFloat(ms[i].getAttribute("count"));


                var a = ms[i].getAttribute("exact") == 1 ? "exact" : "nearby";
                var t = ms[i].getAttribute("type");
                var c = ms[i].getAttribute("count");

                var iconKey = "" + t + "_" + c + "_" + a;

                if (!knownIcons[iconKey])
                {
                    var myIcon = new GIcon();

                    if (ms[i].getAttribute("type") == "l")
                    {
                        var width = workOutLength(ms[i].getAttribute("label"));

                        myIcon.image = searchBackendUrl + "/graphics/maplabel/text/" + ms[i].getAttribute("label") + "/width/" + width;
                        myIcon.title = ms[i].getAttribute("label");
                        myIcon.iconSize = new GSize(width, 26);
                        myIcon.iconAnchor = new GPoint(Math.ceil(width / 2), 13);
                    } else
                    {
                        myIcon.image = searchBackendUrl + "/Graphics/Icon.php?type=" + t + "&count=" + c + "&exact=" + a;
                        myIcon.iconSize = new GSize(30, 45);
                        myIcon.iconAnchor = new GPoint(13, 13);
                    }
                    knownIcons[iconKey] = myIcon;
                }

                marker = new GMarker(point, knownIcons[iconKey]);
                //eval ("markers['" + ms[i].getAttribute("id") + "'] = " + marker);
                markers[ms[i].getAttribute("id")] = marker;

                if (ms[i].getAttribute("type") == "l")
                {
                    eval("GEvent.addListener(marker, \"click\", function () {centerCounty('" + ms[i].getAttribute("label") + "')})");

                } else
                {
                    eval("GEvent.addListener(marker, \"mouseover\", function () {showOverlay(this, '" + ms[i].getAttribute("id") + "','mapPopup')})");
                    eval("GEvent.addListener(marker, \"mouseout\", function () {closeTimeout = setTimeout('hideOverlay()',500);})");
                    eval("GEvent.addListener(marker, \"click\", function () {showFullDetails('" + ms[i].getAttribute("id") + "')})");
                }


                map.addOverlay(marker);
            }
        }
        for (i in oldMarkers)
        {
            if (!onMap[i] && markers[i])
            {

                map.removeOverlay(markers[i]);
                markers[i] = null;
            }


        }
        isPlotting = false;
        Zend_ProgressBar_Update(50);

        //if (oldLatitude!=searchForm.getMaxLat() && map.getZoom()>=11) {
        updateDatasets();
        //} else {
        //  Zend_ProgressBar_Update (100);
        //}
        //oldLatitude = searchForm.getMaxLat();
	firstLoad = false;
    }
);
}

function updateStreetView()
{
    svc.getNearestPanoramaLatLng(map.getCenter(), function(data)
    {
        if (data === null)
        {
            $("#panoramainfo").html('');
        } else
        {
            lat = data.lat();
            lng = data.lng();
            $("#panoramainfo").html("<a href='javascript:void(openPanorama(" + lat + "," + lng + "))'><b>Open panorama view</b></a>");
        }
    }
);
}

function updateMap()
{
    if (isPlotting)
    {
        plottingTimeout = setTimeout("updateMap", 4000);
        return;
    }
    if (plottingTimeout)
    {
        plottingTimeout = null;
    }
    isPlotting = true;

    //updateStreetView();
    updateCoords();
    //updateLocation();
    updateMarkers();


}

function loadMap()
{
    if (GBrowserIsCompatible())
    {

        var mapTypes = G_DEFAULT_MAP_TYPES;
        for (var i = 0; i < mapTypes.length; i++)
        {
            mapTypes[i].getMaximumResolution = function(latlng) { return minZoomLevel; };
            mapTypes[i].getMinimumResolution = function(latlng) { return maxZoomLevel; };
        }

        map = new GMap2(document.getElementById("gmap"), { mapTypes: mapTypes });

        GEvent.addListener(map, "moveend", updateMap);
        initMap();

        updateDatasets();

        //reCentreMap();
        map.addControl(new GScaleControl());
        map.addControl(new GMenuMapTypeControl());
        map.addControl(new GLargeMapControl3D());
        //	  map.addOverlay(new GStreetviewOverlay());
        svc = new GStreetviewClient();
    }
}


function updateOffices(bitArrayGeneral, bitArrayCustom)
{
    progress = 100;
    GDownloadUrl("/searchajax/additionaldatasetsxml/bitArrayGeneral/" + bitArrayGeneral + '/bitArrayCustom/' + bitArrayCustom,
    function(data, responseCode)
    {
        var xml = GXml.parse(data);
        var ms = xml.documentElement.getElementsByTagName("m");
        var head = xml.documentElement.getElementsByTagName("total");

        var marker = null;
        var onMap = [];
        var oldMarkers = datasetMarkers;

        for (var i = 0; i < ms.length; i++)
        {
            var id = ms[i].getAttribute("type") + "," + ms[i].getAttribute("id");
            onMap[id] = true;
            if (!datasetMarkers[id])
            {
                var point = new GLatLng(parseFloat(ms[i].getAttribute("lat")), parseFloat(ms[i].getAttribute("lng")));
                var myIcon = new GIcon();

                myIcon.image = searchBackendUrl + "/Graphics/Icon.php?type=" + ms[i].getAttribute("type") + "&count=1&exact=exact";
                myIcon.title = ms[i].getAttribute("label");
                myIcon.iconSize = new GSize(30, 45);
                myIcon.iconAnchor = new GPoint(13, 13);
                marker = new GMarker(point, myIcon);
                datasetMarkers[id] = marker;
                eval("GEvent.addListener(marker, \"mouseover\", function () {showOverlay(this, '" + id + "','officePopup')})");
                eval("GEvent.addListener(marker, \"mouseout\", function () {closeTimeout = setTimeout('hideOverlay()',500);})");

                map.addOverlay(marker);
            }
        }
        for (i in oldMarkers)
        {
            if (!onMap[i] && datasetMarkers[i])
            {
                map.removeOverlay(datasetMarkers[i]);
                datasetMarkers[i] = null;
            }
        }
    }
);
}


function hideOverlay()
{
    $("#mapPopup").get(0).style.display = "none";
    //$("#officePopup").get(0).style.display="none";
    if (popupEvent)
    {
        GEvent.removeListener(popupEvent);
        popupEvent = null;
    }
}


function setUpMapTimeouts()
{
    clearTimeout(closeTimeout);
    if (popupEvent) { return; }
    popupEvent = GEvent.addListener(map, 'mousemove', hideOverlay);
}

function updateLocation()
{
    var center = map.getCenter();
    GDownloadUrl("/locationsearch/nearesttown/lat/" + center.lat() + "/lng" + center.lng(),
    function(data, responseCode)
    {
        $("#mapLocationId").val($.evalJSON(data).geoLocationId);
        $("#mapLocationType").val("town");
        $("#mapLocationName").val($.evalJSON(data).location);
        $("#currentTown").get(0).innerHTML = $.evalJSON(data).location;
    }
);
}

function swapSearch()
{
    switchToLocationSearch();
    $('#geoLocationType').val($("#mapLocationType").val());
    $('#geoLocationId').val($("#mapLocationId").val());
    $('#location').val($("#mapLocationName").val());
    //$('#resultType-map').checked();
}

function alterMapPopupSrc(url, id)
{
    GDownloadUrl(url,
    function(data, responseCode)
    {
        $("#mapPopup").html(data);
        popups[id] = data;
    }
);
}



function workOutQuadrant(top, left)
{
    var g = $("#gmap").get(0);
    var mHeight = parseInt(g.style.height.replace("px", ""), 10) + 100;
    var mWidth = parseInt(g.style.width.replace("px", ""), 10);
    var cHeight = Math.round(mHeight / 2);
    var cWidth = Math.round(mWidth / 2);

    if (top > 0 && top < cHeight && left > 0 && left < cWidth) { return "topLeft"; }
    if (top > 0 && top < cHeight && left >= cWidth && left < mWidth) { return "topRight"; }
    if (top >= cHeight && top < mHeight && left > 0 && left < cWidth) { return "bottomLeft"; }
    return "bottomRight";
}

function getMapPopupPosition(popup, marker)
{

    var mOHeight = parseInt(popup.style.height.replace("px", ""), 10);
    var mOWidth = parseInt(popup.style.width.replace("px", ""), 10);

    var top = map.fromLatLngToContainerPixel(marker.getPoint()).y;
    var left = map.fromLatLngToContainerPixel(marker.getPoint()).x;

    popup.style.display = "block";


    var quadrant = workOutQuadrant(top, left);


    if (quadrant == "topLeft")
    {
        left = left + (8);
        top = top + (-15);
    }

    if (quadrant == "topRight")
    {
        left = left + (-52) - mOWidth;
        top = top + (-15);
    }

    if (quadrant == "bottomLeft")
    {
        left = left + (8);
        top = top + (20) - mOHeight;
    }

    if (quadrant == "bottomRight")
    {
        left = left + -52 - mOWidth;
        top = top + 20 - mOHeight;
    }


    return [left, top, quadrant];
}

function showOverlay(marker, id, popUpId)
{

    if (progress < 100)
    {
        //return;
    }

    hideOverlay();
    if (closeTimeout)
    {
        clearTimeout(closeTimeout);
    }


    var mo = $("#" + popUpId).get(0);

    position = getMapPopupPosition(mo, marker);
    //alert(position[1]);
    //alert(position[0]);
    mo.style.top = position[1] + "px";
    mo.style.left = position[0] + "px";



    mo.className = position[2];

    if (popups[id])
    {
        mo.innerHTML = popups[id];
    }
    else
    {
        currentPopup = id;
        $("#" + popUpId).html("LOADING...");

        if (popUpId == 'mapPopup')
        {
            popupPage = 0;
            ids = id.split(',');
            propertyId = (ids[popupPage]);
            var purchaseType = getQueryVariable('pt');
            vars = '{"purchaseType":"' + purchaseType + '","id":"' + propertyId + '","allids":"' + ids + '"}';
            //url = 'includes/php/get.php?method=getPropertyDetailsForMapPopup&vars=' + vars;
            method = 'getPropertyDetailsForMapPopup';
            url = searchSettings.jsonGateway2 + '?method=' + method + '&vars=' + vars;            
        }
        else
        {
            var bits = id.split(",");
            url = "/searchajax/datasetmapview/id/" + bits[1] + "/type/" + bits[0];
        }

        GDownloadUrl(url,
        function(data, responseCode)
        {
            $("#" + popUpId).html(data);
        }
    );
    }

}

function hideDiv(id)
{
    $("#" + id).hide();
}

function showFullDetails(id)
{
    if ($("#fullDetailsPopUp").css('display') == 'block')
    {
        $("#fullDetailsPopUp").hide(200);
    }

    ids = id.split(',');

    propertyId = (ids[popupPage]);
    var purchaseType = getQueryVariable('pt');
    vars = '{"purchaseType":"' + purchaseType + '","id":"' + propertyId + '"}';
    //url = 'includes/php/get.php?method=getPropertyDetailsForMapSlide&vars=' + vars;
    method = 'getPropertyDetailsForMapSlide';
    url = searchSettings.jsonGateway2 + '?method=' + method + '&vars=' + vars;
    GDownloadUrl(url,
        function(data, responseCode)
        {

            //$("#"+popUpId).html(data);
            //popup = '<div><img src="images/htmlSearch/dummyMapPopUp.gif" /><p class="title">Water end, alwalton, cambs</p><p class="price">Guide price &pound;410,000</p></div>'
            $("#fullDetailsPopUp").html(data);
            $("#mapPopup").hide();

            //userId = 0;
            if (userId != 0)
            {
                $("#saveProperty").removeClass('loggedOut');

                var isSaved = jQuery.inArray(propertyId, jsSavedProperties);
                if (isSaved >= 0)
                {
                    $("#cbSavedProperty_" + propertyId).attr("checked", "checked");
                }

                /*$("#saveMe").click(function()
                {
                toggleSaved(this, userId, propertyId, purchaseType);
                });
                $("#saveMeLink").click(function()
                {
                toggleSaved(this, userId, propertyId, purchaseType);
                });*/

            }
            else
            {
                $("#saveSpan").html('save');
                $("#cbSavedProperty_" + propertyId).attr('disabled', 'disabled');
            }

            $("#fullDetailsPopUp").show(200);
            initCarousel();
        }
        );
}


/*this was refactored so now only showOverlay is being used for both
function showDataSetOverlay(marker,id)
{
if (progress<100) {
return;
}
	
hideOverlay();
if (closeTimeout) {
clearTimeout(closeTimeout);
}
	
var mo = $("#officePopup").get(0);
	
position = getMapPopupPosition(mo,marker);
	
mo.style.top = position[1] + "px";
mo.style.left= position[0] + "px";

mo.className= position[2];
if (popups[id])
{
mo.innerHTML = popups[id];
debugAdd("have popup " + id);
}
else
{
currentPopup=id;
$("#officePopup").html("LOADING...");
		
var bits = id.split(",");
GDownloadUrl("/searchajax/datasetmapview/id/"+bits[1]+"/type/"+bits[0],
function(data, responseCode)
{
$("#officePopup").get(0).innerHTML = data;
popups[currentPopup] = data;
debugAdd("getting popup " + currentPopup);
}
);
}
}
*/


function centerCounty(county)
{
    GDownloadUrl("/locationsearch/predictive/?q=" + county + "&limit=1&countyonly=true",
    function(item, responseCode)
    {
        $('#geoLocationType').val($.evalJSON(item).geoLocationType);
        $('#location').val($.evalJSON(item).location);
        $('#geoLocationId').val($.evalJSON(item).geoLocationId);
        searchForm.switchCenterTypeToGeoName();

        $.ajax({
            url: searchForm.getSearchEngineUrl('getboundary'),
            success: function(msg)
            {
                $('#geoLocationType').val($.evalJSON(item).geoLocationType);
                $('#geoLocationId').val($.evalJSON(item).geoLocationId);
                searchForm.updateBoundary($.evalJSON(msg).minLat, $.evalJSON(msg).maxLat, $.evalJSON(msg).minLng, $.evalJSON(msg).maxLng);
                reCentreMap();
                updateMarkers();
                lastLocation = $('#location').val();
            }
        });
    }
);
}

function openPanorama(lat, lng)
{
    var ll = new GLatLng(lat, lng);
    panoramaOptions = { latlng: ll };

    $("#panorama").get(0).style.display = 'block';
    var myPano = new GStreetviewPanorama(document.getElementById("panorama"), panoramaOptions);

    $("#panoramainfo").get(0).innerHTML = "<a href='javascript:void(closePanorama())'>Close Panorama</a>";
}

function closePanorama()
{
    document.getElementById("panorama").style.display = 'none';
}

function loadLocationMap(lat, lng, icon, zoom)
{
    if (GBrowserIsCompatible())
    {
        map = new GMap2(document.getElementById("gmap"));
        map.addControl(new GSmallMapControl());
        map.setCenter(new GLatLng(lat, lng), zoom);

        var point = new GLatLng(lat, lng);
        var myIcon = new GIcon();

        myIcon.image = searchBackendUrl + "/Graphics/Icon.php?type=" + icon + "&count=1&exact=exact";
        myIcon.iconSize = new GSize(30, 45);
        myIcon.iconAnchor = new GPoint(13, 13);
        marker = new GMarker(point, myIcon);
        map.addOverlay(marker);
    }
}

function loadOfficeListingMap(lat, lng, zoom, bitArrayGeneral, bitArrayCustom)
{
    if (GBrowserIsCompatible())
    {
        map = new GMap2(document.getElementById("gmap"));
        map.setCenter(new GLatLng(lat, lng), zoom);
        map.addControl(new GLargeMapControl3D());
        updateOffices(bitArrayGeneral, bitArrayCustom);
    }
}

function clearLoadingTimeout()
{
    if (document.getElementById('zend-progressbar-container'))
    {
        document.getElementById('zend-progressbar-container').style.display = 'none';
    }

    loadingTimeout = null;
}

var firstLoad = isNaN(parseFloat(getQueryVariable('z'))) ? true : false;



/**
* @TODO: this needs to get criteria from search form
* will call somethign like this
* http://carterjonas.waidev5.com/propertysearchfx/flashservices/json.php/search_peter.SearchCJ.executeSearch/%7B%22criteriaIds%22:%5B%22new%22,%22sld%22%5D,%22locations%22:%5B%5D,%22searchTerm%22:%22Oxford%22,%22purchaseType%22:%22buy%22,%22propertyType%22:%22all%22,%22priceMin%22:0,%22priceMax%22:50000000,%22bedsMin%22:0,%22bedsMax%22:0,%22searchType%22:null,%22pageIndex%22:null,%22orderBy%22:null,%22orderDirection%22:null,%22id%22:%22%22,%22locationId%22:null,%22areaType%22:null,%22pid%22:null%7D
*/
function getMapSearchUrl()
{
    var bounds = map.getBounds();
    var southWest = bounds.getSouthWest();
    var northEast = bounds.getNorthEast();
    var maxLat = northEast.lat();
    var maxLng = northEast.lng();
    var minLat = southWest.lat();
    var minLng = southWest.lng();
    var purchaseType = getQueryVariable('pt');
    var priceMin = getQueryVariable('np');
    var priceMax = getQueryVariable('xp');
    var bedsMin = getQueryVariable('nb');

    var locationData = getQueryVariable('ldt');

    var incNew = getQueryVariable('c');
    var criteriaIds;

    if (incNew != undefined)
    {
        if (incNew.indexOf('new') >= 0)
        {
            criteriaIds = '"new"';
        }

        if (incNew.indexOf('sld') >= 0)
        {
            if (criteriaIds == '')
            {
                criteriaIds = '"sld"';
            }
            else
            {
                criteriaIds += ',"sld"';
            }
        }
    } 
    else
    {
        criteriaIds = "";
    }
    
    var searchCategory = getQueryVariable('sc');
    var searchType = firstLoad === true && searchCategory != 8 ? getQueryVariable('st') : 1;
    
   
    var searchTerm = getQueryVariable('q');
    
    zoom = map.getZoom();
    vars = '{"output":"xml","mapBounds":{"latMax":"' + maxLat + '","latMin":"' + minLat
    + '","lngMax":"' + maxLng + '","lngMin":"' + minLng + '","zoom":' + zoom + '},"criteriaIds":['
    + criteriaIds + '],"locations":[],"searchTerm":"'+searchTerm+'","purchaseType":"' + purchaseType
    + '","propertyType":"all","priceMin":' + priceMin + ',"priceMax":' + priceMax + ',"bedsMin":'
    + bedsMin + ',"bedsMax":0,"searchType":' + searchType + ',"pageIndex":null,"orderBy":null,"orderDirection":null,' +
    '"id":"","locationId":null,"areaType":null,"pid":null,"zoom":"' + zoom + 
    '","searchCategory":"'+searchCategory+'","locationData":"'+locationData+'"}';
    method = 'executeSearch';
    //url = 'includes/php/get.php?vars=' + vars + '&method=' + method;
    url = searchSettings.jsonGateway2 + '?method=' + method + '&vars=' + vars;
    //alert(url);   
    return url;
}

function swap(propertyId, allids)
{
    var purchaseType = getQueryVariable('pt');
    vars = '{"purchaseType":"' + purchaseType + '","id":"' + propertyId + '","allids":"' + allids + '"}';
    //url = 'includes/php/get.php?method=getPropertyDetailsForMapPopup&vars=' + vars;
    method = 'getPropertyDetailsForMapPopup';
    url = searchSettings.jsonGateway2 + '?method=' + method + '&vars=' + vars;     
    GDownloadUrl(url,
        function(data, responseCode)
        {
            $("#mapPopup").html(data);
        }
    );
}

/*
* @TODO: junk to be stored

var geocoder = new GClientGeocoder();
geocoder.getLocations(map.getCenter(), function (c) 
{ 
try 
{
var place = c.Placemark[0];
if (place)
{
var town = place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName;
var area = place.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName;
document.getElementById("whereyouare").innerHTML=town + ", " + area;
}
	  			
}
catch (e) {}
}
);
*/

/*  
var polygon = new GPolygon([ new GLatLng(minLat,minLng),
new GLatLng(maxLat,minLng),
new GLatLng(maxLat,maxLng),
new GLatLng(minLat,maxLng)
], "#f33f00", 1, 1, "#ff0000", 0.1);  
map.addOverlay(polygon);
*/


var currentThumb = null;
var changeImageId = null;

function fadeOutCurrent()
{

    $('#mainimage img').fadeOut(300, function() { setMainImage(); });
}

function setMainImage()
{
    clearTimeout(changeImageId);
    if (currentThumb != null)
    {
        $('.thumbnail').removeClass("selected");
        $("#" + currentThumb).addClass("selected");
        src = $("#" + currentThumb).attr('src');


        reg = new RegExp(/w=\d+/);
        src = src.replace(reg, "w=313");
        reg = new RegExp(/h=\d+/);
        src = src.replace(reg, "h=235");

        $('#mainimage img').attr('src', src);

        $('#mainimage img').load(function()
        {
            $('#mainimage img').fadeIn(500);
        });

        currentThumb = null;
    }
}

function initCarousel()
{
    jQuery('#thumbnails').jcarousel({
        vertical: false,
        scroll: 2
    });
    $('#mainimage').css("background-color", "#fff");
    $('#mainimage img').css("background-color", "#fff");

    $('.thumbnail').click(function()
    {
        clearTimeout(changeImageId);
        if (currentThumb != $(this).attr("id"))
        {
            currentThumb = $(this).attr("id");
            changeImageId = setTimeout('fadeOutCurrent()', 400);
        }
    }, null);

    $('.thumbnail').click(function()
    {
        clearTimeout(changeImageId);
        currentThumb = $(this).attr("id");
        fadeOutCurrent();
    });

    currentThumb = 'thumb_1';
    setMainImage();
}

function getQueryVariable(variable)
{
    var query = window.location.search.substring(1);
    var vars = query.split("&");
    for (var i = 0; i < vars.length; i++)
    {
        var pair = vars[i].split("=");
        if (pair[0] == variable)
        {
            return pair[1];
        }
    }
}

