﻿<!-- 
//<![CDATA[
var mmViewer;

var mmTxtLocation, mmDivMapArea, mmDivMessageArea, mmDivMessageAreaText, mmDdlRange, mmDivKeyArea, mmUlResultText, mmDivResultText, mmDivResultTextQuick, mmSpanResultTextQuickCount, mmSpanResultTextQuickCount; 
var mmGeocoder, mmDivGeoCodeDidYouMean, mmUlGeoCodeDidYouMean;
var mmGeoCodeResults = new Array();
var mmMaxGeoCodeResult = 5;
var mmWebServiceUrl, mmRegion, mmCounty, mmCategory;
var mmFilters = "";
var mmLocations = new Array();
var mmRegions;
var mmCounties = new Array();
var mmClusters = new Array();
var mmLocationMarkers = new Array();
var mmMaxZindex = 999;
var mmClusterGrouping = "";
var mmCurrentZoom = 7;
var mmCurrentMarker = null;
var mmCurrentObj = null;
var mmJson = null;
var mmLocationMarker = null;
var mmCurrentGeoMarkerIndex = -1;
var mmCurrentGeoMarker = null;
var mmLatLng = null;
var mmZoomLevel = 7;
var mmGeoRequest = "";
var mmPropertyId = 0;
var mmImageIcon = "";
var mmImageIconCluster = "";
var mmBuffer = null;
var mmBufferRun = true;
var mmLocation = null;
var mmGeoFilter = false;
var mmIconDimensions = null;
var mmIconPoint = null;
var mmLoaded = false;
var mmAlphabet = "abcdefghijklmnopqrstuvwxyz";
var mmThisProperty = null;
var mmNearbyProperties = null;
var mmMapLoadType = "full";
var mmFirstLoad = true;
//var mmPopUpPan = false;
var mmShowMarker = false;
var mmStateLat = null;
var mmStateLng = null;
var mmStateZoom = null;
var mmStateNorthWest = null;
var mmStateSouthEast = null;
var mmStateFilter = null;
var mmStateGeoLat = null;
var mmStateGeoLng = null;
var mmStateGeoAddress = null;
var mmStateInfoId = null;
var mmBounds = null;
var mmCheckingBounds = false;
var mmGeoRequestQueryString = false;
var mmPropertyCategory = "";

function mmGetParameterByName(name) {
    name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
    var regexS = "[\\?&]" + name + "=([^&#]*)";
    var regex = new RegExp(regexS);
    var results = regex.exec(window.location.href);
    if (results == null)
        return "";
    else
        return results[1].replace("%27","'");
}

function mmSubmitForm(e, obj) 
{
    evt = e || window.event;
    var keyPressed = evt.which || evt.keyCode;
    if (keyPressed == 13) 
        return true;
    else
        return false;    
}        

function mmGetJQueryDomObjectById(id)
{
    return $("#"+id);
}

function mmGetJQueryDomObjectByClass(className)
{
    return $("#"+className);
}

function mmEnableUI(enable) 
{    
    enable ? 
        mmGetJQueryDomObjectById("divMultimapWait").css("display", "none")
        : 
        mmGetJQueryDomObjectById("divMultimapWait").css("display", "");
}

function mmShowMessage(txt)
{
    mmDivMessageAreaText.html(txt);
    mmDivMessageArea.css("display","");
    mmEnableUI(true);
}

function mmOnLoad(lat, lng, region, county, category, request, controlId, latCenter, lngCenter, serviceUrl, propertyId, zoomCenter, mapLoadType, propertyCategory)
{    
    if (mmLoaded) return;
        
    if(MMIsSupportedBrowser()) 
    {
        mmLoaded = true;
           
        mmDivMapArea = mmGetJQueryDomObjectById("mapcontrols");
        mmTxtLocation = mmGetJQueryDomObjectById("search_map");
        mmDivMessageArea = mmGetJQueryDomObjectById("divMultimapMessage");
        mmDivMessageAreaText = mmGetJQueryDomObjectById("divMultimapMessageText");
        mmUlGeoCodeDidYouMean = mmGetJQueryDomObjectById("ulMultimapDidYouMean");
        mmDivGeoCodeDidYouMean = mmGetJQueryDomObjectById("divMultimapDidYouMean");
        mmDivKeyArea = mmGetJQueryDomObjectById("divMapKey");
        mmDdlRange = mmGetJQueryDomObjectById("ddlMultimapRange");
        mmUlResultText = mmGetJQueryDomObjectById("ulMultimapResultText");
        mmDivResultText = mmGetJQueryDomObjectById("divMultimapResultText");
        mmDivResultTextQuick = mmGetJQueryDomObjectById("divMultimapResultTextQuick");
        mmSpanResultTextCount = mmGetJQueryDomObjectById("spanMultimapResultCount");
        mmSpanResultTextQuickCount = mmGetJQueryDomObjectById("spanMultimapResultTextCount");
        mmStateLat = mmGetJQueryDomObjectById("txtMMStateLat");
        mmStateLng = mmGetJQueryDomObjectById("txtMMStateLng");
        mmStateZoom = mmGetJQueryDomObjectById("txtMMStateZoom");
        mmStateNorthWest = mmGetJQueryDomObjectById("txtMMStateNorthWestBound");
        mmStateSouthEast = mmGetJQueryDomObjectById("txtMMStateSouthEastBound");
        mmStateFilter = mmGetJQueryDomObjectById("txtMMStateFilter");
        mmStateGeoLat = mmGetJQueryDomObjectById("txtMMStateGeoLat");
        mmStateGeoLng = mmGetJQueryDomObjectById("txtMMStateGeoLng");
        mmStateGeoAddress = mmGetJQueryDomObjectById("txtMMStateGeoAddress");
        mmStateInfoId = mmGetJQueryDomObjectById("txtMMStateInfoId");
              
        mmMapLoadType = mapLoadType;
        mmWebServiceUrl = serviceUrl;
        mmRegion = region;
        mmCounty = county;
        mmCategory = category;
        mmGeoRequest = request;
        mmPropertyId = propertyId;
        mmPropertyCategory = propertyCategory;
        
        //Ralph, Spencer change dimensions here anchor points below
        //The size of the icon in pixels.
        mmIconDimensions = new MMDimensions(25,25);
        //The point on the icon to which info boxes should be anchored, in pixels
        mmIconPoint = new MMPoint(16,16);
        
        //7 = 100 miles
        //8 = 50 miles
        //9 = 25 miles
        //10 = 10 miles
        //11 = 5 miles
        //12 = 3 miles
        //13 = 1 miles
        
        //var preferences = new Array("904","917","904","854","913","830","855","868","828","827","866","819","867","821","810","820","817","815","809","812","811","808","807","863","856","861","858","865","872","845","853","848","847","846","862","841","837","806","915","1004","910","911","1001","916","938","914","929","923","937","1000","931","932","925","928","908","909","921","922"); //Prefernces to display OS
        //var preferences = new Array("931","904","917","854","913","830","855","868","828","827","866","819","867","821","810","820","817","815","809","812","811","808","807","863","856","861","858","865","872","845","853","848","847","846","862","841","837","806","915","1004","910","911","1001","916","938","914","929","923","937","1000","931","932","925","928","908","909","921","922"); //Prefernces to display Colins
        
        //MMDataResolver.setDataPreferences(4,preferences); //MAP (4), AERIAL (32)        
        
        mmViewer = MMFactory.createViewer(document.getElementById("divMultimapMap"));
        
        var mapLatLng;
        
        mapLatLng = new MMLatLon(latCenter, lngCenter)
                   
        var zoomLevel = zoomCenter; //mmGetDefaultZoomLevel(region);
        
//        alert(latCenter);
//        alert(lngCenter);
//        alert(zoomLevel);
       
        if(mmCategory != "StaticMap")
        {
            mmViewer.addWidget (new MMPanZoomWidget() );
            mmViewer.addWidget (new MMMapTypeWidget() );     
                          
            mmGeocoder = MMFactory.createGeocoder(mmProcessGeocodeResults);
            
//            mmViewer.addEventHandler("declutterStart",declutterStartEvent);
//            mmViewer.addEventHandler("declutterEnd",declutterEndEvent);
            mmViewer.addEventHandler("declutterCluster",mmDeclutterClusterEvent);
//            mmViewer.addEventHandler("click",onClickEvent);
            mmViewer.addEventHandler("changeZoom",mmChangeZoom);
            mmViewer.addEventHandler("openInfoBox",mmOpenInfoBoxEvent);
            mmViewer.addEventHandler("closeInfoBox",mmCloseInfoBoxEvent);
//            mmViewer.addEventHandler("changeMapType",changeMapTypeEvent);
//            mmViewer.addEventHandler("dataPreferencesChanged",dataPreferencesChangedEvent);
            mmViewer.addEventHandler("endPan",mmEndPan);
            mmViewer.addEventHandler("moveMap",mmCheckBounds);
            
            //mmBounds = new MMBounds( new MMLatLon(49.5,-10), new MMLatLon(59,2.6) );
            mmBounds = new MMBounds( new MMLatLon(49.76707,-10.19531), new MMLatLon(56.23114,5.1416));
            
            //mmViewer.setMappingAPI('multimap');
            //alert(mapLatLng);
            
            mmViewer.setAllowedZoomFactors(7);
            
            mmLatLng = mapLatLng;
            mmZoomLevel = zoomLevel;
           
            mmViewer.goToPosition(mmLatLng,mmZoomLevel);
                        
//            mmSearchCounties();
//            mmSearchRegions();
            
            mmSearchMap();
            
            //mmDrawCircle(latCenter,lngCenter,25,"#000000",1,
            //mmIsPointCircle(20.0, latCenter, lngCenter);
            
            mmDivResultText.css("display","none");
            mmDivResultTextQuick.css("display","");                        
            
        }
        else
        {
        
            if(mmThisProperty == null)
            {            
                mmDivMapArea.css("display","none");
                return;
            }
            
            if(!mmValidateLatLng(mmThisProperty.lt,mmThisProperty.lg))
            {
                mmDivMapArea.css("display","none");
                return;
            }
        
            mmLocationMarkers = new Array();

            var icon = MM_DEFAULT_ICON.copy();
            icon.iconSize = mmIconDimensions;
            icon.iconAnchor = mmIconPoint;
            icon.image = '/static/images/eh_pin_prop.png';
            icon.groupName  = "";
        

            var latLng = new MMLatLon(mmThisProperty.lt,mmThisProperty.lg);   
            var marker = mmViewer.createMarker(latLng, { "label" : mmThisProperty.t, "text" : "", "icon" : icon, "zIndex" : 1000 });
            mmLocationMarkers.push(marker);            
            
            if(mmNearbyProperties != null)
            {
            
                $(mmNearbyProperties).each(function(i)
                {
                    if(mmValidateLatLng(mmNearbyProperties[i].lt,mmNearbyProperties[i].lg))
                    {
                        icon.image = "/static/images/eh_pin_prop_" + mmAlphabet.substring(i,i+1) + ".png";
                        var nearBylatLng = new MMLatLon(mmNearbyProperties[i].lt,mmNearbyProperties[i].lg);
                        var nearByMarker = mmViewer.createMarker(nearBylatLng, { "label" : mmNearbyProperties[i].t, "text" : "", "icon" : icon, "zIndex" : i });
                        mmLocationMarkers.push(nearByMarker);
                    }
                });
                           
            }
            
            if(mmLocationMarkers.length > 0)
            {
                var newLocation = mmViewer.getAutoScaleLocation(mmLocationMarkers);
                mmViewer.goToPosition(newLocation);
                if(mmViewer.getZoomFactor() > 9)
                {
                    mmViewer.setZoomFactor(9); 
                }
            }
            else
            {
                mmShowMessage("There is an error with the geospatial data.");
            }            
            
           
            mmEnableUI(true);

        }
              
    }
    else
    {
        mmShowMessage("NEED TO SHOW A LIST OF PROPERTIES HERE");
//        var ns = mapviewer_node.getElementsByTagName('noscript')[0];
//        mapviewer_node.innerHTML = ns.innerHTML;
        
    }
}

function mmValidateLatLng(lat,lng)
{
    if(lat == null || lng == null)
        return false;
        
    if(lat == "-1000" || lng == "-1000")
        return false;
                
    if (!isNaN(lat) || !isNaN(lng))
    {
        return true;
    }
    else
    {
        return false;
    }
}

function mmCheckBounds() {
    var mapcentre = mmViewer.getCurrentPosition();
    var out = false;
    var sw = mmBounds.getSouthWest();
    var ne = mmBounds.getNorthEast();
    if ( mapcentre.lon > ne.lon )     {
        out = true;
        mapcentre.lon = ne.lon;
    } else if( mapcentre.lon < sw.lon )  {
        out = true;
        mapcentre.lon = sw.lon;
    }
    if( mapcentre.lat > ne.lat ) {
        out = true;
        mapcentre.lat = ne.lat;
    } else if( mapcentre.lat < sw.lat ) {
        out = true;
        mapcentre.lat = sw.lat;
    }
    if( out ) {
        if( mmCheckingBounds ) {
        // Don't get stuck in a recursive loop
        } else {
            var smoothPan = mmViewer.getOption( 'smoothpan' );
            mmViewer.setOption( 'smoothpan', false );
            mmCheckingBounds = true;
            mmViewer.goToPosition( mapcentre, null, null, true );
            mmCheckingBounds = false;
            mmViewer.setOption( 'smoothpan', smoothPan );
        }
    }
}


function mmDrawCircle(lat, lng, radius, strokeColor, strokeWidth, strokeOpacity, fillColor, fillOpacity) 
{

      
  //var polygon = new MMPolyLineOverlay(Cpoints, {opacity : strokeOpacity, color : strokeColor, thickness : strokeWidth, fill : fillColor});
  
  var polygon = new MMPolyLineOverlay(Cpoints,{color:'#FF3300',thickness:'0.5'});
  
  mmViewer.addOverlay(polygon);
  

}

function mmGetGeoSearchPolygon(radius, latCenter, lngCenter)
{
    
    var points = [];

    var d2r = Math.PI/180;
    var r2d = 180/Math.PI;
    var Clat = radius * 0.014483;  // Convert statute miles into degrees latitude
    var Clng = Clat/Math.cos(latCenter*d2r); 

    for (var i = 0; i < 33; i++) 
    { 
        var theta = Math.PI * (i/16); 
        var Cy = latCenter + (Clat * Math.sin(theta)); 
        var Cx = lngCenter + (Clng * Math.cos(theta)); 
        var P = new MMLatLon(Cy,Cx); 
        points.push(P); 
    }
  
  
    var polygon = new MMPolyLineOverlay(points,{color:'#FF3300',thickness:'0.5'});
  
    mmViewer.addOverlay(polygon);
    
    return points;
}

function mmIsPointCircle(points, lat, lng)
{
    var i;
    var j = points.length - 1;
    var inPoly = false;
    
//    alert("lat:"+lat);
//    alert("lng:"+lng);

    for (i = 0; i < points.length; i++)
    {
        var latPointI = points[i].lat;
        var longPointI = points[i].lon;
        
        var latPointJ = points[j].lat;
        var longPointJ = points[j].lon;

        if (longPointI < lng && longPointJ >= lng || longPointJ < lng && longPointI >= lng)
        {
            if (latPointI + (lng - longPointI) / (longPointJ - longPointI) * (latPointJ - latPointI) < lat)
            {
                inPoly = !inPoly;
            }
        }
        j = i;
    }
    return inPoly;
}



//function onClickEvent()
//{
//    //mmShowMessage(mmViewer.getCurrentPosition().lat + "," + mmViewer.getCurrentPosition().lon);
//}

//function dataPreferencesChangedEvent(eventType, eventTarget, arg1, arg2, arg3)
//{
//    //alert("MAP: " + arg1 + "PREF: " + arg2);
//}

//function changeMapTypeEvent(eventType, eventTarget, arg1, arg2, arg3)
//{
//    //alert("OLD MAP: " + arg1 + "NEW MAP: " + arg2);
//}

function mmChangeZoom(eventType, eventTarget, arg1, arg2, arg3)
{

    if(!mmFirstLoad)
    {
        mmDivGeoCodeDidYouMean.css("display", "none");
        mmDivMessageArea.css("display", "none");
        
//        if(mmMapLoadType == "ondemand")
//        {
//            mmViewer.removeAllOverlays();
//            if(mmCurrentMarker != null)
//            {
//                mmCurrentMarker.closeInfoBox();
//            }
//            
//            //Need to requery data
//            //if((mmCurrentZoom <= 8 && mmViewer.getZoomFactor() > 8) || (mmCurrentZoom > 8 && mmViewer.getZoomFactor() <= 8))
//            //{
//                mmSearchMap();
//            //}
//            //else
//            //{
//                mmCurrentZoom = mmViewer.getZoomFactor();
//            //}
//            
//            //mmCreateInitialList();
//            return;
//        }  

        if(mmMapLoadType == "ondemand")
        {  
            if(arg3.indexOf("-control") > -1)
            {
                mmSearchMap();
            }
        }
        else
        {
            if((mmCurrentZoom <= 8 && mmViewer.getZoomFactor() > 8) || (mmCurrentZoom > 8 && mmViewer.getZoomFactor() <= 8))
            {
                mmViewer.removeAllOverlays();
                if(mmCurrentMarker != null)
                {
                    mmCurrentMarker.closeInfoBox();
                }
                
                mmClusterCustom();
                
//                if(mmCurrentGeoMarkerIndex > -1)
//                {
//                    mmCreateGeoMarker(mmGeoCodeResults[mmCurrentGeoMarkerIndex],mmGeoCodeResults[mmCurrentGeoMarkerIndex].address.display_name);
//                    mmCurrentGeoMarker = marker;
//                }
                        
            }
            else
            {
                mmCurrentZoom = mmViewer.getZoomFactor();
            }
        }
        
//        if(arg3.indexOf("-control") > -1)
//        {      
//            mmCreateInitialList();
//        }
        
    }
    if(arg3.indexOf("-control") > -1)
    {      
        mmCreateInitialList();
    }    
    mmSetStateValues();
}

function mmSetStateValues()
{
    if(!mmFirstLoad)
    {
        mmStateZoom.val(mmViewer.getZoomFactor());
        mmStateLat.val(mmViewer.getCurrentPosition().lat);
        mmStateLng.val(mmViewer.getCurrentPosition().lon);
        mmStateNorthWest.val(mmViewer.getMapBounds().getNorthWest().toString().replace("(","").replace(")",""));
        mmStateSouthEast.val(mmViewer.getMapBounds().getSouthEast().toString().replace("(","").replace(")",""));
    }
}

function mmEndPan(eventType, eventTarget, arg1, arg2, arg3)
{
    //if(!mmFirstLoad && !mmPopUpPan)
    if(!mmFirstLoad && !(arg3 == "infobox"))
    {
        if(mmMapLoadType == "ondemand")
        {
            //Need to requery data
//            mmViewer.removeAllOverlays();
//            if(mmCurrentMarker != null)
//            {
//                mmCurrentMarker.closeInfoBox();
//            }    
            //Need to requery data
            //if((mmCurrentZoom <= 8 && mmViewer.getZoomFactor() > 8) || (mmCurrentZoom > 8 && mmViewer.getZoomFactor() <= 8))
            //{
            //if(mmViewer.getZoomFactor() > 8)
            //{
                mmSearchMap();
            //}
            //}
            //else
            //{
                //mmCurrentZoom = mmViewer.getZoomFactor();
            //}
            
            //mmCreateInitialList();  
        }
        else
        {
            //mmCreateInitialList();
        }
    }
    mmCreateInitialList();
    //mmPopUpPan = false;
    mmSetStateValues();
}
//function declutterStartEvent(eventType, eventTarget, arg1, arg2, arg3)
//{
//    //alert("declutterStart");
//}

//function declutterEndEvent(eventType, eventTarget, arg1, arg2, arg3)
//{
//    //alert("declutterEnd");
//}



function mmDeclutterClusterEvent(eventType, eventTarget, arg1, arg2, arg3)
{
    //alert(arg1);
    //return true;
    //arguments[5].reset( null, { 'label' : 'My label 2' } );
    //alert(arguments[5]);
    //arguments[5].reset( null, { 'label' : 'My label 2' } );
    
//    var title = "";
//    var regexS = "";
//    var regex = new RegExp(regexS);
//    var results = regex.exec(arguments[6].index_title);
//    if (results != null) title =  results[1];
    
    if(mmViewer.getZoomFactor() <= 8)
    {    
        if(mmMapLoadType != "ondemand")
        {
            arguments[5].reset( null, { 'label' : arguments[6].index_title.replace("<div class='clustertitle'>","").replace("</div>","").replace("[0]",arg3.length) } );
            arguments[6].index_title = arguments[6].index_title.replace("[0]",arg3.length);
        }
    }
    else
    {
        arguments[5].reset( null, { 'label' : "Cluster of " + arg3.length + " properties"} );
        arguments[6].index_title = "<div class='clustertitle'>Cluster of " + arg3.length + " properties</div>";
    }
    
    
//   for (var x = 0; x < arguments.length; x++) 
//   {
//      var y = arguments[x];
//   };    
}

//function mmGetLocationFromArray(id,region, county)
//{
//    
//    return returnLocation;
//}

function mmCloseInfoBoxEvent(eventType, eventTarget, arg1, arg2, arg3)
{
    mmStateInfoId.val("0");
}

function mmOpenInfoBoxEvent(eventType, eventTarget, arg1, arg2, arg3)
{


    //Work arounds here as there is a bug with the MM API relating to setInfoboxContent see TFS bug 1152 point 1 for further details


    mmStateInfoId.val("0");
    
    //mmPopUpPan = true;
    
    var obj;

    $("div.MMcontent").each(function()
    {                                        
        if($(this).css('display') == "block")
        {
            obj = $(this);
        }
    });
   
    mmDivGeoCodeDidYouMean.css("display", "none");
    mmDivMessageArea.css("display", "none");    
    
    if(obj != null)
    {
    
        mmLocation = arg1.getAttribute("data");
               
        if(mmLocation != null)
        {

            var json;

            $.ajax({
                type: "GET",
                url: mmWebServiceUrl + "multimapGetDetailHandler.ashx?tagkey="+mmCategory+"&id=" + mmLocation.id,
                async: false,
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                data: "",
                success: function(msg) { json = msg; },
                error: function(msg) { mmSearchError(msg); }                
             });
             
             mmLocation.s = json.summary;
             mmLocation.tu = json.thumbnailUrl;
             mmLocation.ta = json.thumbnailAlt;
             mmLocation.lt = json.geoLatitude;
             mmLocation.lg = json.geoLongitude;
             mmLocation.p = json.Path;
             
             if(mmCategory == "DiscoveryVisitVenue") mmLocation.dvp = json.discoveryVisitVenuePath;
             
             mmCurrentMarker = arg1;
             
            mmStateInfoId.val(mmLocation.id);
                
                    
            var html = "";
            var anchor=""; 
            
            if(mmViewer.getZoomFactor() < 15)
            {
                anchor = "<a id='mmZoomLink' href='javascript: mmZoomIn();'>zoom in</a> | ";
            }            
            
            switch(mmCategory)
            {
                case "Gap" :
                {
                
                    if(mmViewer.getZoomFactor() < 15)
                    {
                        anchor = "<a id='mmZoomLink' href='javascript: mmZoomInAfterLoad("+mmLocation.id+");'>zoom in</a> | ";
                    }                  
                
                    html = "<table class='popuplayouttable'> \
                             <tr> \
                                <td>"+mmLocation.s+"</td> \
                             </tr> \
                             <tr class='trbottom'> \
                                <td colspan='2'> \
                                     " + anchor + "<a href='"+mmLocation.p+"' title='"+mmLocation.t+"'>property detail</a> \
                                </td> \
                             </tr> \
                            </table>";
                    break;
                }        
                case "DiscoveryVisitVenue" :
                {
                    html = "<table class='popuplayouttable'> \
                            <tr> \
                              <td> \
                                <a href='"+mmLocation.dvp+"' title='"+mmLocation.t+"'> \
                                  <img src='"+mmLocation.tu+"' title='"+mmLocation.ta+"' alt='"+mmLocation.ta+"' /> \
                                </a> \
                              </td> \
                              <td>"+mmLocation.s+"</td> \
                            </tr> \
                            <tr class='trbottom'> \
                              <td colspan='2'> \
                                " + anchor + "<a href='"+mmLocation.dvp+"' title='"+mmLocation.t+"'>discovery visits</a> \
                              </td> \
                            </tr> \
                            </table>";
                    break;
                }
                case "HolidayCottage" :
                {
                    html = "<table class='popuplayouttable'> \
                            <tr> \
                              <td> \
                                <a href='"+mmLocation.p+"' title='"+mmLocation.t+"'> \
                                  <img src='"+mmLocation.tu+"' title='"+mmLocation.ta+"' alt='"+mmLocation.ta+"' /> \
                                </a> \
                              </td> \
                              <td> \
                                "+mmLocation.s+" \
                                <ul> \
                                " + mmGetCottageList(mmLocation.cl) + " \
                                </ul> \
                              </td> \
                            </tr> \
                            <tr class='trbottom'> \
                              <td colspan='2'> \
                                " + anchor + " \
                                <a href='"+mmLocation.p+"' title='"+mmLocation.t+"'>property detail</a> \
                              </td> \
                            </tr> \
                            </table>";
                    break;
                }
                default:
                {
                                   
                    html = "<table class='popuplayouttable'> \
                            <tr> \
                              <td> \
                                <a href='"+mmLocation.p+"' title='"+mmLocation.t+"'> \
                                  <img src='"+mmLocation.tu+"' title='"+mmLocation.ta+"' alt='"+mmLocation.ta+"' /> \
                                </a> \
                              </td> \
                              <td>"+mmLocation.s+"</td> \
                            </tr> \
                            <tr class='trbottom'> \
                              <td colspan='2'> \
                                " + anchor + "<a href='"+mmLocation.p+"' title='"+mmLocation.t+"'>property detail</a> \
                              </td> \
                            </tr> \
                            </table>";            
                    break;
                }
            }

            //$("table").remove(".popuplayouttablelarge");            
            //$("table").remove("#popuplayouttable");
            $("table").remove(".popuplayouttable_dummy");
            $("table").remove(".popuplayouttable");
            //$(".popuplayouttable").empty();
            //$(".popuplayouttable").remove();
            //$("#popuplayouttitlecontainer_"+mmLocation.id).append(html);
            //obj.remove(".popuplayouttable");
            obj.append(html);
            //alert($(".popuplayouttable").html());
            //$(".popuplayouttitle").remove();
            //alert($("table .popuplayouttable"));
            //$("table tr td .popuplayouttable").html("blaa");
            //alert($("table .popuplayouttable").css("height"));
            
            //document.getElementById("popuplayouttitlecontainer_"+mmLocation.id).innerHTML = "rararra";
        }
        else
        {
            var countyObj = arg1.getAttribute("countydata");
            
            if(countyObj != null)
            {
                switch(mmCategory)
                {
                    case "Gap" :
                    {
                        html = "<table class='popuplayouttable'> \
                                 <tr> \
                                    <td>"+countyObj.name + " contains " + countyObj.properties + " grant aided places. Use the link below to zoom the map into " +countyObj.name+ ".</td> \
                                 </tr> \
                                 <tr class='trbottom'> \
                                    <td> \
                                        <a id='mmZoomLink' href='javascript: mmZoomInByLatLng("+countyObj.lat+","+countyObj.lng+","+countyObj.zoom+");'>zoom in</a> \
                                    </td> \
                                 </tr> \
                                </table>";
                        break;
                    }
                }                
                
                $("table").remove(".popuplayouttable");
                obj.append(html);   
            }
            
        }
        if(mmViewer.getZoomFactor() >= 15)
        {
           $(".mmZoomLink").attr("href","");
           $(".mmZoomLink").css("display","none");
        }
    }
}

function mmGetCottageList(cottageList){
    // Turn csv list of cottages and urls into
    // list of <li><a href="url">name</a></li>
    var html = "";
    
    for (var i = 0; i < cottageList.length; i++){
        var c = cottageList[i];
        html += '<li><a href="' + c.p + '">' + c.n + ', Sleeps: ' + c.o + '</a></li>';
    }
    
    return html;
}

function mmIsNullOrEmptyString(txt)
{
    if(txt == null || txt.length == 0)
        return true
    else
        return false;
}

function mmIsOsViewValid()
{
    for(var i = 0; i< mmViewer.getAvailableMapTypes().length; i++)
    {
        if(mmViewer.getAvailableMapTypes()[i] == 4);
        {
            return true;
        }
    }
    return false;
}

function mmZoomInById(id)
{

    mmLocation = null;
    
    if(mmMapLoadType == "ondemand")
    {
        for(var itemObj in mmJson)
        {
            //have to check for this as IE breaks because Json contains find() method, need to omit somehow but not sure where is best todo this at present
            if(itemObj != "find")
            {
                var item = mmJson[itemObj];
                if(id == item.id)
                {
                    mmLocation = item;
                    break;
                }
            }
        }     
    }
    else
    {
        for(var region in mmJson)
        {
            var regionObj = mmJson[region];
            for(var county in regionObj)
            {
                var countyObj = regionObj[county];
                for(var i = 0; i < countyObj.properties.length; i++)
                {
                    var item = countyObj.properties[i];                    
                    if(id == item.id)
                    {
                        mmLocation = item;
                        break;
                    }
                }
                if(mmLocation != null)
                    break;
            }
            if(mmLocation != null)
                break;        
        }
    } 
    
    if(mmLocation != null)
    {
        //mmZoomIn();
        $(mmLocationMarkers).each(function(i)
        {     
            if(mmLocationMarkers[i].getAttribute("data").id == mmLocation.id)
            {
                mmCurrentMarker = mmLocationMarkers[i];
                mmCurrentMarker.openInfoBox();
                return false;
            }
        });        
    }   
}

function mmZoomInByLatLng(lat, lng, zoom)
{
    //mmPopUpPan = false;
    var latLng = new MMLatLon(lat,lng);
    var location = new MMLocation(latLng);
       
    mmViewer.goToPosition(location,zoom);   
     
}

function mmZoomInAfterLoad(id)
{
    if(mmLocation != null)
    {
        mmShowMarker = true;
    
        //mmPropertyId = id;
    
        mmMinimizeResultText();

        var latLng = new MMLatLon(mmLocation.lt,mmLocation.lg);
        var location = new MMLocation(latLng);
           
        mmViewer.goToPosition(location,15);
    }
}

function mmZoomInShowMarker()
{
    mmShowMarker = false;
    if(mmLocation != null)
    {
        $(mmLocationMarkers).each(function(i)
        {     
            if(mmLocationMarkers[i].getAttribute("data").id == mmLocation.id)
            {
                mmCurrentMarker = mmLocationMarkers[i];
                mmCurrentMarker.openInfoBox();
                return false;
            }
        }); 
    }
}

function mmZoomIn()
{

    if(mmLocation != null)
    {

        mmMinimizeResultText();

        var latLng = new MMLatLon(mmLocation.lt,mmLocation.lg);
        var location = new MMLocation(latLng);
           
        mmViewer.goToPosition(location,15);
        
        //mmCurrentMarker.reset(location);
        
        
        $(mmLocationMarkers).each(function(i)
        {     
            if(mmLocationMarkers[i].getAttribute("data").id == mmLocation.id)
            {
                mmCurrentMarker = mmLocationMarkers[i];
                mmCurrentMarker.openInfoBox();
                return false;
            }
        });   
        
    }
       
}

function mmProcessGeocodeResults() 
{
    if (mmGeocoder.error_code && mmGeocoder.error_code != 'MM_GEOCODE_MULTIPLE_MATCHES') 
    {
        mmShowMessage("We are sorry - the following error occurred: <" + "/br><" + "em>" + mmGeocoder.error_code + "<" + "/em>");
        mmEnableUI(true);
        return false;
    }
    
    mmGeoCodeResults = mmGeocoder.result_set;
    
    var validResultCount = 0;
    
    mmUlGeoCodeDidYouMean.html("");
    
    $(mmGeoCodeResults).each(function(i)
    {
        if(mmGeoCodeResults[i].address.country_code == "GB")
        {    
            var li = $("<li>").attr({title: mmGeoCodeResults[i].address.display_name})
                    .click(function () {mmMoveToGeoCodeResult(i); })
                    .html(mmGeoCodeResults[i].address.display_name)
            ;
            mmUlGeoCodeDidYouMean.append(li);
            validResultCount++;
        }
    });

    switch(validResultCount)
    {
        case 0 :
        {
            mmShowMessage("The geocode request did not return any results.");
            mmEnableUI(true);
            break;
        }
        case 1 :
        {
            mmMoveToGeoCodeResult(0);
            break;
        }
        default :
        {
            mmDivGeoCodeDidYouMean.css("display", "block");
            mmEnableUI(true);        
            break;
        }                
    }    
    
}

function mmMoveToGeoCodeResult(i) 
{
    mmEnableUI(false);
    mmDivGeoCodeDidYouMean.css("display", "none");
    
    mmViewer.goToPosition(mmGeoCodeResults[i],10);
    
    if(mmLocationMarker != null)
    {
        mmViewer.removeOverlay(mmLocationMarker);
    }
    
    mmCurrentGeoMarkerIndex = i;

    mmStateGeoLat.val(mmGeoCodeResults[i].coords.lat);
    mmStateGeoLng.val(mmGeoCodeResults[i].coords.lon);   
    mmStateGeoAddress.val(mmGeoCodeResults[i].address.display_name); 
    
    mmCreateGeoMarker(mmGeoCodeResults[i],mmGeoCodeResults[i].address.display_name);
       
    //mmSearchMapPlotResults(mmJson);
    
    mmEnableUI(true);

}

function mmSearchMap()
{
    
    //mmGeoCodeResults.length > 0 ?
        //querystring = "?type=geo&region=&county=&location=" + mmTxtLocation.val() + "&lat=" + mmGeoCodeResults[i].coords.lat + "&lng=" + mmGeoCodeResults[i].coords.lon + "&within=" + mmDdlRange.val() + "&category=" + mmCategory + "&criteria="
    //:
    
    //ToDo: Build Tags From Region, County, Etc. Delimeter | (&region=" + mmRegion + "&county=" + mmCounty)
    
    querystring = "?tagkey=" + mmCategory + "&tags=";
    
    mmJson = null;
    
    var handlerUrl =   "multimapSearchHandler.ashx";
    
    if(mmMapLoadType == "ondemand")
    {
        if (mmValidateLatLng(mmStateLat.val(),mmStateLng.val()) && mmFirstLoad) 
        {
            if(mmStateZoom.val() > 8)
            {
                handlerUrl =   "multimapSearchOnDemandHandler.ashx";
                querystring += "&zoom="+mmStateZoom.val()+"&bnw="+mmStateNorthWest.val()+"&bse="+mmStateSouthEast.val();
            }            
        }
        else
        {
            if(mmViewer.getZoomFactor() > 8)
            {
                handlerUrl =   "multimapSearchOnDemandHandler.ashx";
                querystring += "&zoom="+mmViewer.getZoomFactor()+"&bnw="+mmViewer.getMapBounds().getNorthWest().toString().replace("(","").replace(")","")+"&bse="+mmViewer.getMapBounds().getSouthEast().toString().replace("(","").replace(")","");
            }        
        }
    }    
    
    $.ajax
    (
        {
            type: "GET",
            url: mmWebServiceUrl + handlerUrl + querystring,
            contentType: "application/json; charset=utf-8",
            data: "",
            dataType: "json",
            success: function(msg) { mmSearchMapPlotResults(msg); },
            error: function(msg) { mmSearchError(msg); }
        }
    );   
      
}


function mmSearchMapPlotResults(json) 
{
    
    if(json != null)
    {
        if(mmJson == null)
        {
            mmJson = json;
        }
       
        var clusterCount = 0;
       
        //mmEnableUI(true);
        //return;       
              
        if (mmValidateLatLng(mmStateLat.val(),mmStateLng.val()) && mmFirstLoad) 
        {
            var latLng = new MMLatLon(mmStateLat.val(),mmStateLng.val());
            var location = new MMLocation(latLng);
            mmFilters = mmStateFilter.val();
            mmViewer.goToPosition(location,mmStateZoom.val());
            mmClusterCustom();
            mmCreateInitialList();
            mmFirstLoad = false;
            if(mmStateInfoId.val() > 0)
            {
                mmZoomInById(mmStateInfoId.val());
            }
            
            if (mmValidateLatLng(mmStateGeoLat.val(),mmStateGeoLng.val())) 
            {
                latLng = new MMLatLon(mmStateGeoLat.val(),mmStateGeoLng.val());
                location = new MMLocation(latLng);   
                var address = new MMAddress();
                address.display_name = mmStateGeoAddress.val();
                location.address = address;
                mmGeoCodeResults.push(location);
                mmCurrentGeoMarkerIndex = 0;
                mmCreateGeoMarker(location,mmStateGeoAddress.val());
            }
                      
            mmEnableUI(true);
        }
        else
        {
            mmSetStateValues();
            mmClusterCustom();
            mmCreateInitialList();
            
            if(mmShowMarker)
            {
                mmZoomInShowMarker();
            }
            else
            {
                if(mmGeoRequest.length > 0)
                {
                    mmTxtLocation.val(mmGeoRequest);
                    mmGeoRequest = "";
                    mmGeoRequestQueryString = true;
                    mmGeocodeLocation();
                    mmGeoRequestQueryString = false;
                }        
                else
                {   
                    if(mmPropertyId > 0)
                    {
                        mmFirstLoad = false;
                        mmZoomIn();
                        mmPropertyId = 0;
                        mmEnableUI(true);
                    }
                    else
                    {
                        mmEnableUI(true);
                    }
                }
            }
            
            if(mmCategory == "Property" && mmFirstLoad && (mmPropertyCategory.length > 0))
            {
                mmFirstLoad = false;
                switch (mmPropertyCategory)
                {
                    case "Highlight Properties":
                    {
                        $("#chkHighLight").attr("checked","true");                        
                        mmSearchDaysOutMapCategory();
                        break;
                    }                  
                    case "Free to Enter":
                    {
                        $("#chkFree").attr("checked","true");                        
                        mmSearchDaysOutMapCategory();
                        break;
                    }                 
                    case "Castles":
                    {
                        $("#chkCastle").attr("checked","true");                        
                        mmSearchDaysOutMapCategory();
                        break;
                    }                  
                    case "Coastal":
                    {
                        $("#chkCoastal").attr("checked","true");                        
                        mmSearchDaysOutMapCategory();
                        break;
                    }                 
                    case "Gardens":
                    {
                        $("#chkGarden").attr("checked","true");                        
                        mmSearchDaysOutMapCategory();
                        break;
                    }                 
                    case "Hadrian's Wall":
                    {
                        $("#chkHadrian").attr("checked","true");                        
                        mmSearchDaysOutMapCategory();
                        break;
                    }                 
                    case "Houses and Palaces":
                    {
                        $("#chkPalace").attr("checked","true");                        
                        mmSearchDaysOutMapCategory();
                        break;
                    }                 
                    case "Monuments and Ruins":
                    {
                        $("#chkMonument").attr("checked","true");                        
                        mmSearchDaysOutMapCategory();
                        break;
                    }                 
                    case "Prehistoric Sites":
                    {
                        $("#chkPrehistoric").attr("checked","true");                        
                        mmSearchDaysOutMapCategory();
                        break;
                    }                
                    case "Roman Sites":
                    {
                        $("#chkRoman").attr("checked","true");                        
                        mmSearchDaysOutMapCategory();
                        break;
                    }
                    case "OVP":
                    {
                        $("#chkOVP").attr("checked","true");                        
                        mmSearchDaysOutMapCategory();
                        break;
                    }                    
                }
            }
            
        }
                       
    }
    else
    {
        mmShowMessage("There was an error returning results.");
    }  
    mmFirstLoad = false;
}

function mmCloseDidYouMean()
{
    mmDivGeoCodeDidYouMean.css("display","none");
}

function mmMinimizeResultText()
{
    mmDivResultText.css("display","none");
    mmDivResultTextQuick.css("display","");
}

function mmMaximizeResultText()
{
    mmDivResultText.css("display","");
    mmDivResultTextQuick.css("display","none");
}

function mmCloseMessageArea()
{
    mmDivMessageArea.css("display","none");
}

function mmCloseKeyArea()
{
    mmDivKeyArea.css("display","none");
}

function mmAppendBuffer(txt)
{
    if(mmBufferRun)
    {
        if(mmBuffer == null)
        {
            mmBuffer = new StringBuffer();
        }
        mmBuffer.append(txt);
    }
}

function mmClusterCustom()
{
  
    mmLocationMarkers = new Array();
    mmCounties = new Array();
    mmLocations = new Array();
    
    mmViewer.removeAllOverlays();
    
    var icon = MM_DEFAULT_ICON.copy();
    icon.iconSize = mmIconDimensions;
    icon.iconAnchor = mmIconPoint;
    
    switch (mmCategory)
    {
        case "Property" :
        {
            icon.image = '/static/images/eh_pin_prop_multiple.png';
            break;
        }
        default :
        {
            icon.image = '/static/images/eh_pin_prop_multiple.png';
            break;
        }        
    }
        
    var locationCount = 0;
  
    var circle = [];
    if(mmGeoFilter && mmCurrentGeoMarkerIndex > -1)
    {
        circle = mmGetGeoSearchPolygon(20,mmGeoCodeResults[mmCurrentGeoMarkerIndex].coords.lat,mmGeoCodeResults[mmCurrentGeoMarkerIndex].coords.lon);
    }
    
    var addToLocationArray = false;
    
    if(mmLocations.length == 0)
    {
        addToLocationArray = true;
    }
    
    if(mmMapLoadType == "ondemand")
    {
        if(mmViewer.getZoomFactor() <= 8)
        {
            for(var region in mmJson)
            {
                var regionObj = mmJson[region];
                for(var county in regionObj)
                {
                    var countyObj = regionObj[county];
                    var clusterTitle = countyObj.name + " contains " + countyObj.properties + " properties";
                    
                    var latLng = new MMLatLon(countyObj.lat,countyObj.lng);
                    
                    if(countyObj.properties > 0)
                    {
                        mmCreateClusterMarker(countyObj, latLng, countyObj.properties, clusterTitle, countyObj.name, countyObj.zoom);                
                        mmCounties.push(countyObj);
                        locationCount++;
                    }
                }
            }
            mmCounties.sort(compareCountyNames);          
        }
        else
        {
           
            mmViewer.declutterGroup("ondemand", {cluster_icon:icon}, MM_DECLUTTER_AGGREGATE, MM_CLUSTER_ACCURATE);
            
            for(var itemObj in mmJson)
            {
                //have to check for this  as IE breaks because Json contains find() method, need to omit somehow but not sure where is best todo this at present
                if(itemObj != "find")
                {
                    var item = mmJson[itemObj];
                    var latLng = new MMLatLon(item.lt,item.lg);
                    mmCreateMarker(item, latLng, locationCount, "ondemand");
                    
                    if(mmPropertyId == item.id)
                    {
                        mmLocation = item;
                    }
                    
                    mmLocations.push(item);
                    
                    locationCount++;
                }
            }                 
            
        }        
    }
    else
    {
        for(var region in mmJson)
        {
            var regionObj = mmJson[region];
            for(var county in regionObj)
            {
                var countyObj = regionObj[county];

                var countyPropertyCount = 0;
                
                if(mmViewer.getZoomFactor() <= 8)
                {
                    var clusterTitle = countyObj.name + " contains [0] properties";
                    //var clusterTitle = countyObj.name + " contains "+countyObj.properties.length+" properties";
                    mmViewer.declutterGroup(countyObj.name, {index_title:"<div class='clustertitle'>"+clusterTitle+"</div>",cluster_icon:icon}, MM_DECLUTTER_AGGREGATE, MM_CLUSTER_ACCURATE);
                }
                else
                {
                    mmViewer.declutterGroup(countyObj.name, {cluster_icon:icon}, MM_DECLUTTER_AGGREGATE, MM_CLUSTER_ACCURATE);
                }                

                for(var i = 0; i < countyObj.properties.length; i++)
                {
                    //if(county == "Cornwall")
                    //{
                        var item = countyObj.properties[i];
                        
                        var addIt = true;
                        var addItGeo = true;
                        
                        if(mmFilters.length > 0)
                        {
                            addIt = false;
                            
                            var filterList = mmFilters.split('|');
                            
                            for(var k = 0; k < item.ia.length; k++)
                            {
                                for(var j = 0; j<filterList.length; j++)
                                {
                                    if(item.ia[k] == filterList[j])
                                    {
                                        addIt = true;
                                        break;
                                    }
                                }
                                if(addIt)
                                {
                                    break;
                                }
                            }
                        }
                                            
                        if(addIt && addItGeo)
                        {            
                            var latLng;
                            if(mmViewer.getZoomFactor() <= 8)
                            {                
                                latLng = new MMLatLon(countyObj.lat,countyObj.lng);
                            }
                            else
                            {
                                latLng = new MMLatLon(item.lt,item.lg);
                            }
                            mmCreateMarker(item, latLng, locationCount, countyObj.name);
                            
                            locationCount++;
                            countyPropertyCount++
                        }
                        
                        if(mmPropertyId == item.id)
                        {
                            mmLocation = item;
                        }
                        
                        if(addToLocationArray)
                        {
                            mmLocations.push(item);
                        }
                    //}
                }
//                if(mmViewer.getZoomFactor() <= 8)
//                {
//                    var clusterTitle = countyObj.name + " contains " + countyPropertyCount + " properties";
//                    mmViewer.declutterGroup(countyObj.name, {index_title:"<div class='clustertitle'>"+clusterTitle+"</div>",cluster_icon:icon}, MM_DECLUTTER_AGGREGATE, MM_CLUSTER_ACCURATE);
//                }
//                else
//                {
//                    mmViewer.declutterGroup(countyObj.name, {cluster_icon:icon}, MM_DECLUTTER_AGGREGATE, MM_CLUSTER_ACCURATE);
//                }                
            }
        }
    }
        

    
    if(addToLocationArray)
    {
        mmLocations.sort(compareNames);
    }    
    
    if(mmCurrentGeoMarkerIndex > -1)
    {
//        if(mmGeoFilter)
//        {
//            var newLocation = mmViewer.getAutoScaleLocation(mmLocationMarkers);
//            mmViewer.goToPosition(newLocation);
//        }
//        else
//        {
            //mmViewer.goToPosition(mmGeoCodeResults[mmCurrentGeoMarkerIndex].coords,11);
            
            mmCreateGeoMarker(mmGeoCodeResults[mmCurrentGeoMarkerIndex],mmGeoCodeResults[mmCurrentGeoMarkerIndex].address.display_name);
            
        //}
    }
    
    mmCurrentZoom = mmViewer.getZoomFactor();
       
}

function mmCreateGeoMarker(location, address)
{

    if(mmCurrentGeoMarker != null)
    {
        mmViewer.removeOverlay(mmCurrentGeoMarker);
    }

    var iconLocation = MM_DEFAULT_ICON.copy();
    iconLocation.iconSize = new MMDimensions(35,35);;
    iconLocation.iconAnchor = mmIconPoint;
    iconLocation.image = '/static/images/eh_pin_locator.png';         
    
    iconLocation.zIndex = -1;
    
    var marker = mmViewer.createMarker(location, { "label" : address, "icon" : iconLocation, "text" : "", "zIndex" : "-1" });
    
    marker.zIndex = -1;
    
    mmCurrentGeoMarker = marker;    
}

function mmCreateInitialList()
{
    if(mmJson != null)
    {
        mmBuffer = null;
        
       
        mmUlResultText.html("");
        mmUlResultText.css("overflow","hidden");

        mmAppendBuffer("<ul>");
        
        //alert(mmJson);
        
        var locationCount = 0;
        var regionCount = 0;
        var countyCount = 0;
        var arrayElementToHide = new Array();
        
        
        
//        for(var region in mmJson)
//        {
//            //alert(region);
//            var regionObj = mmJson[region];
//            
//            var showRegion = false;
//            
//            //mmAppendBuffer("<li id='li_reg_"+regionCount+"'>" + region + "<ul id='ul_reg_"+regionCount+"'>");
//           
//            for(var county in regionObj)
//            {
//                var countyObj = regionObj[county];
//                
//                var showCounty = false;
//                
//                //mmAppendBuffer("<li id='li_con_"+countyCount+"'>" + county + "<ul id='ul_con_"+countyCount+"'>");

                for(var i = 0; i < mmLocations.length; i++)
                {
                    //if(county == "Cornwall")
                    //{
                        var item = mmLocations[i];
                        
                        var addIt = true;
                        var addItGeo = true;
                        
                        if(mmFilters.length > 0)
                        {
                            addIt = false;
                            
                            var filterList = mmFilters.split('|');
                            
                            for(var k = 0; k < item.ia.length; k++)
                            {
                                for(var j = 0; j<filterList.length; j++)
                                {
                                    if(item.ia[k] == filterList[j])
                                    {
                                        addIt = true;
                                        break;
                                    }
                                }
                                if(addIt)
                                {
                                    break;
                                }
                            }
                        }
                      
                        if(addIt && addItGeo)                
                        {
                            var newLatLng = new MMLatLon(item.lt,item.lg);
                                                                          
                            if(mmViewer.getMapBounds().contains(newLatLng))
                            {
                                mmAppendBuffer("<li><a href='javascript: mmZoomInById("+item.id+");'>"+item.t+"</a></li>");
                                locationCount++;
//                                showRegion = true;
//                                showCounty = true;
                            }
                        }
                        
                    //}
                }
                
                for(var i = 0; i < mmCounties.length; i++)
                {
                
                    var county = mmCounties[i];
                    
                    var newLatLng = new MMLatLon(county.lat,county.lng);
                                                                  
                    if(mmViewer.getMapBounds().contains(newLatLng))
                    {
                        mmAppendBuffer("<li><a href='javascript: mmZoomInByLatLng("+county.lat+","+county.lng+","+county.zoom+");'>"+county.name+" ("+county.properties+")</a></li>");
                        locationCount++;
                    }                
                }                
                
//                if(!showCounty)
//                {
//                    //document.getElementById("li_con_"+countyCount).style.display = "none";
//                    //arrayElementToHide.push("li_con_"+countyCount);
//                }
//                
//                //mmAppendBuffer("</ul></li>");
//                countyCount++;
//            }
//            
//            if(!showRegion)
//            {
//                //document.getElementById("li_reg_"+regionCount).style.display = "none";
//                //arrayElementToHide.push("li_reg_"+regionCount);
//            }        
//            
//            //mmAppendBuffer("</ul></li>");
//            regionCount++;
//        }
        
        mmAppendBuffer("</ul>"); 
        
        mmUlResultText.css("overflow","auto");
                      
        if(mmBufferRun)
            mmUlResultText.html(mmBuffer.toString());     
            
        mmSpanResultTextCount.html(locationCount);
        mmSpanResultTextQuickCount.html(locationCount);
        
//        for(var i = 0; i < arrayElementToHide.length; i++)
//        {   
//            document.getElementById(arrayElementToHide[i]).style.display = "none";
//        }
        
    }

}

function compareNames(a, b) 
{
    var nameA = a.t.toLowerCase();
    var nameB = b.t.toLowerCase();
    if (nameA < nameB) {return -1}
    if (nameA > nameB) {return 1}
    return 0;
}

function compareCountyNames(a, b) 
{
    var nameA = a.name.toLowerCase();
    var nameB = b.name.toLowerCase();
    if (nameA < nameB) {return -1}
    if (nameA > nameB) {return 1}
    return 0;
}

//function mmCreateList()
//{
//    
//    //alert(mmJson);
//    
//    var locationCount = 0;
//    var regCount = 0;
//    var countyCount = 0;
//    
//    if(mmUlResultText.html().length > 0)
//    {
//    
//    $('#ulMultimapResultText li').each(function(r) 
//    {
//	    //$(this).append(r.toString());
//	    alert(r.toString());
//    });    
//    
////        for(var r = 0; r < 1; r++)
////        {
////            var regionElement = document.getElementById("ulMultimapResultText").childNodes[0].childNodes[r].childNodes[0];
////            
////            alert("REGION: " + regionElement.innerHTML);

////            for(var c = 0; c < 1; c++)
////            {
////                var countyElement = regionElement.childNodes[0];
////                
////                alert(countyElement);
////                
////                alert("COUNTY: " + countyElement.innerHTML);
////                
//////                for(var i = 0; i < countyElement.childNodes[c].childNodes.length; i++)
//////                {
//////                    var itemElement = countyElement.childNodes[c].childNodes[i];
//////                    
//////                    document.getElementById("txtxTest").innerHTML = document.getElementById("txtxTest").innerHTML + itemElement.innerHTML;
//////                }                    
////            }             
////        }        
//    
////        //alert(mmUlResultText.html());
////        
////        var outerUL = mmUlResultText.children("ul");
////        
////        for(var region in mmJson)
////        {
////            //alert(region);
////            var regionObj = mmJson[region];
////           
////            var regionUL = outerUL.children("li")[regCount];
////            
////            alert(regionUL.innerHTML)
////            
////            countyCount = 0;
////            
////            for(var county in regionObj)
////            {
////                var countyObj = regionObj[county];
////                
////                //var countyUL = regionUL.childNodes[0].childNodes[countyCount];
////                
////                //alert(countyUL.innerHTML);
////                
////                for(var i = 0; i < countyObj.properties.length; i++)
////                {
////                    if(county == "Cornwall")
////                    {
////                        var item = countyObj.properties[i];
////                        
////                        var addIt = true;
////                        var addItGeo = true;
////                        
////                        if(mmFilters.length > 0)
////                        {
////                            addIt = false;
////                            
////                            var filterList = mmFilters.split('|');
////                            
////                            for(var j = 0; j<filterList.length; j++)
////                            {
////                                if(item.ia == filterList[j])
////                                {
////                                    addIt = true;
////                                    break;
////                                }
////                            }
////                        }                    
////                        
////                        if(addIt && addItGeo)                
////                        {
////                            var newLatLng = new MMLatLon(item.lt,item.lg);
////                                                                          
////                            if(mmViewer.getMapBounds().contains(newLatLng))
////                            {
////                                locationCount++;
////                            }
////                        }
////                        
////                    }
////                    countyCount++;
////                }
////            }
////            regCount++;
////        }
//        
//        //alert(locationCount);
//        
////        $(mmUlResultText).each(function(allCount, all) 
////        {  
////            alert(all.html());           
////        });

////        for(var r = 0; r < 1; r++)
////        {
////            var regionElement = document.getElementById("ulMultimapResultText").childNodes[0].childNodes[r];
////            
////            alert(regionElement.innerHTML);
////            
////            for(var c = 0; c < 1; c++)
////            {
////                var countyElement = regionElement.childNodes[0].childNodes[c];
////                
////                alert(countyElement.innerHTML);
////                
////                for(var i = 0; i < countyElement.childNodes[c].childNodes.length; i++)
////                {
////                    var itemElement = countyElement.childNodes[c].childNodes[i];
////                    
////                    document.getElementById("txtxTest").innerHTML = document.getElementById("txtxTest").innerHTML + itemElement.innerHTML;
////                }                    
////            }            
////        }
//        
//                
//        mmSpanResultTextCount.html(locationCount);
//        mmSpanResultTextQuickCount.html(locationCount);
//        
//    }

//}

function mmCheckCategory(item, category)
{
    for(var i = 0; i < item.ia.length; i++)
    {
        if(item.ia[i] == category)
        {
            return true;
        }
    }   
    return false;
}

function mmCreateClusterMarker(county, location, number, label, tag, zoom) 
{
    var icon = MM_DEFAULT_ICON.copy();
    icon.iconSize = mmIconDimensions;
    icon.iconAnchor = mmIconPoint;
    
    icon.image = '/static/images/eh_pin_prop_multiple.png';
        
    //icon.groupName  = text;
    
    //var marker = mmViewer.createMarker (location, { zIndex: (mmMaxZindex - number), "label" : label+".", "icon" : icon, "text" : ""} );
    var marker = mmViewer.createMarker (location, { "label" : label+".", "icon" : icon, "text" : ""} );
        
    var html = "";
//    
    //html = "<div class='popuplayouttitle'>"+label+", click <a href='javascript: mmZoomInByLatLng("+location.lat+","+location.lon+","+zoom+");'>here</a> to zoom in.</div>";
//    
    marker.setInfoBoxContent ( html, {index_title:tag} );
    marker.setAttribute("countydata", county);
//    mmLocationMarkers.push(marker);
}

function mmCreateMarker(item, location, number, groupName) 
{
    //var icon = iconMain.copy();
    //alert(title);
    var icon = MM_DEFAULT_ICON.copy();
    icon.iconSize = mmIconDimensions;
    icon.iconAnchor = mmIconPoint;
    
    //Ralph and Spensor, change icons below
    switch (mmCategory)
    {
        case "Property" :
        {
            if(mmCheckCategory(item, "Other Property"))
            {
                icon.image = '/static/images/eh_pin_prop_other.png';
            }
            else if(mmCheckCategory(item, "Highlight Properties"))
            {
                icon.image = '/static/images/eh_pin_prop_highlight.png';
            }
            else
            {
                icon.image = '/static/images/eh_pin_prop.png';
            }
            break;
        }
        default :
        {
            icon.image = '/static/images/eh_pin_prop.png';
            break;
        }        
    }
    
    icon.groupName  = groupName;
    //var marker = mmViewer.createMarker (location, { zIndex: (mmMaxZindex - number), "label" : item.t, "icon" : icon, "text" : ""} );
    
    var marker = mmViewer.createMarker (location, { "label" : item.t, "icon" : icon, "text" : ""} );
    
    //marker.zIndex = -1000;
    
    var html = "";
    
    if (mmCategory == "DiscoveryVisitVenue")
    {
        if(item.dv == 1)
            html = "<div class='popuplayouttitle'>"+item.t+" (" + item.dv + " Discovery Visit)</div>";
        else
            html = "<div class='popuplayouttitle'>"+item.t+" (" + item.dv + " Discovery Visits)</div>";
    }
    else
    {
        html = "<div class='popuplayouttitle'>"+item.t+"</div>";
    }
    
    html = html + "<table class='popuplayouttable_dummy'><tbody><tr><td></td></tr></tbody></table>"
    
    //html = html + "<div id='popuplayouttitlecontainer_"+item.id+"'></div>";
    
    marker.setInfoBoxContent ( html, {index_title:item.t} );
    marker.setAttribute("data", item);
    mmLocationMarkers.push(marker);
}

function mmSearchError(result) 
{
    mmShowMessage("There was an error returning the search results.");
    mmEnableUI(true); 
}

function mmGeocodeLocation() 
{

    if(mmTxtLocation.val().length == 0)
    {
        //mmSearchMap();
        return;
    }
    
    
    mmEnableUI(false);    
    
    mmStateGeoLat.val("-1000");
    mmStateGeoLng.val("-1000");
    mmStateGeoAddress.val("");

    if(mmCurrentGeoMarker != null)
    {
        mmViewer.removeOverlay(mmCurrentGeoMarker);
    }    
    
    mmCurrentGeoMarkerIndex = -1;
    mmCurrentGeoMarker = null;
    
    mmDivGeoCodeDidYouMean.css("display", "none");
    mmDivMessageArea.css("display", "none");
    
    
    if(mmCurrentMarker != null)
    {
        mmCurrentMarker.closeInfoBox();
        mmCurrentMarker = null;
    }    
    
    if(mmCategory == "Property")
    {
        if(mmDoQuickCountyRegionSearch())
        {
            return;
        }    
        if(mmDoQuickSearch())
        {
            return;
        }
    }
   
    //mmViewer.removeAllOverlays();
    
    var address = new MMAddress();
    address.qs = mmTxtLocation.val();
    //address.display_name = mmTxtLocation.val();
    address.country_code = "GB";

    mmGeocoder.count = mmMaxGeoCodeResult;
    mmGeocoder.geocode(address);
}

function mmDoQuickCountyRegionSearch()
{
    var val = mmTxtLocation.val().toLowerCase();
    
    var countyObj = null;
    
    for(var region in mmJson)
    {
        var regionObj = mmJson[region];
        
        for(var county in regionObj)
        {           
            if(val == county.toLowerCase())
            {
                countyObj = regionObj[county];
                break;
            }
        }
        if(countyObj != null) break;
    }
      
    if(countyObj != null)
    {
    
        if(mmViewer.getZoomFactor() <= 8)
        { 
            mmViewer.setZoomFactor(9);
            if(mmGeoRequestQueryString) mmClusterCustom();
        }
        
        var locationMarkers = new Array();
        
        for(var x = 0; x < mmLocationMarkers.length; x++)
        {
            var location = mmLocationMarkers[x].getAttribute("data");
            for(var i = 0; i < countyObj.properties.length; i++)
            {
                var item = countyObj.properties[i];
                if(item.id == location.id)
                {
                    locationMarkers.push(mmLocationMarkers[x]);
                    break;
                }
            }
        }
        
//        if(mmViewer.getZoomFactor() <= 8)
//        { 
//            mmViewer.setZoomFactor(9);
//            //mmClusterCustom();
//        }

        var latLng = new MMLatLon(countyObj.lat,countyObj.lng);
        var location = new MMLocation(latLng);   
        var address = new MMAddress();
        address.display_name = countyObj.name;
        location.address = address;
        mmGeoCodeResults.push(location);
        mmCurrentGeoMarkerIndex = 0;
        mmCreateGeoMarker(location,countyObj.name);

        mmStateGeoLat.val(countyObj.lat);
        mmStateGeoLng.val(countyObj.lng);
        mmStateGeoAddress.val(countyObj.name);
       
        if(locationMarkers.length > 0)
        {
            var newLocation = mmViewer.getAutoScaleLocation(locationMarkers);
            mmViewer.goToPosition(newLocation);

            if(mmViewer.getZoomFactor() > 10)
            {
                mmViewer.setZoomFactor(10); 
            }
        }
        else
        {         
            mmViewer.goToPosition(latLng,10);
        }
        
        mmEnableUI(true);

        return true;
    }
    else
    {
        return false;
    }
}

function mmDoQuickSearch()
{
    mmLocation = null;
    
    var val = mmTxtLocation.val().toLowerCase();
       
    $(mmLocationMarkers).each(function(i,marker)
    {
        var item = marker.getAttribute("data");
        
        var text = item.t.toLowerCase();
        
        if(text == val)
        {
            mmLocation = item;
        }
        else
        {
            if(item.a != null)
            {
                for (var num=0;num<item.a.length;num++)
                {
                    var term = item.a[num].toLowerCase();
                    
                    if(val == term)
                    {
                        mmLocation = item;
                        break;
                    }                
                }
            }
        }
        if(mmLocation != null)
            return false;
    });
       
    if(mmLocation != null)
    {
        
        mmZoomIn();
        mmPropertyId = 0;
        mmEnableUI(true);    
        return true;
    }
    else
    {
        return false;
    }
}

function mmSearchDaysOutMapCategoryAll()
{
    mmStateInfoId.val("0");
    mmEnableUI(false);
    mmDivGeoCodeDidYouMean.css("display", "none");
    mmDivMessageArea.css("display", "none");
    //mmCurrentGeoMarkerIndex = -1;
    //mmCurrentGeoMarker = null;    
    
    var elements = document.getElementById("propertyFilterInput").getElementsByTagName("input");    
    var i= 0;
    mmFilters = "";
    mmStateFilter.val("");
    
    while(i < elements.length)
    { 
        if(elements[i].title != "Everything")
        {
            elements[i].checked = false;
        }
        else
        {
            elements[i].checked = true;
            elements[i].disabled = true;
        }
        i++;
    }    
    
    //mmViewer.setZoomFactor(7);
    
    mmViewer.removeAllOverlays();
    mmSearchMapPlotResults(mmJson);
    
    if(mmCurrentGeoMarkerIndex > -1)
    {
        mmCreateGeoMarker(mmGeoCodeResults[mmCurrentGeoMarkerIndex],mmGeoCodeResults[mmCurrentGeoMarkerIndex].address.display_name);
    }
    
}

function mmSearchDaysOutMapCategory()
{
    mmStateInfoId.val("0");
    mmEnableUI(false);
    mmDivGeoCodeDidYouMean.css("display", "none");
    mmDivMessageArea.css("display", "none");
    //mmCurrentGeoMarkerIndex = -1;
    //mmCurrentGeoMarker = null; 
        
    var elements = document.getElementById("propertyFilterInput").getElementsByTagName("input");
    
    var i= 0;
    mmFilters = "";
    mmStateFilter.val("");
    var iChecked = 0;
    
    while(i < elements.length)
    { 
        if(elements[i].title != "Everything")
        {
            if(elements[i].checked)
            {
                if(mmFilters.length == 0)
                {
                    mmFilters = elements[i].title;
                }
                else
                {
                    mmFilters = mmFilters + "|" + elements[i].title;
                }
                iChecked ++;
            }
        }
        else
        {
            elements[i].checked = false;
            elements[i].disabled = false;
        }
        i++;
    }
    
    mmStateFilter.val(mmFilters);
    
    if(iChecked == 0)
    {
        document.getElementById("chkEverything").checked = true;
        document.getElementById("chkEverything").disabled = true;    
    }
    
    //mmViewer.setZoomFactor(7);
    
    mmViewer.removeAllOverlays();
    mmSearchMapPlotResults(mmJson);
    
    if(mmCurrentGeoMarkerIndex > -1)
    {
        mmCreateGeoMarker(mmGeoCodeResults[mmCurrentGeoMarkerIndex],mmGeoCodeResults[mmCurrentGeoMarkerIndex].address.display_name);
    }
    
}
//]]> 
// -->        

