/* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
'	MOVEWITHUS MAP SEARCH INTERFACE
' -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~*/
var map;
var marker;
var strSiteURL = globalpath;
var wwwSysPath = wwwSysPath; 
var propertyDetailsBaloon = false;
var dupPoint = new Array();
var arrForSalePrices = ["25,000","50,000","75,000","100,000","125,000","150,000","175,000","200,000","225,000","250,000","275,000","300,000","325,000","350,000","375,000","400,000","450,000","500,000","600,000","700,000","800,000","900,000","1,000,000","2,000,000","3,000,000"];
var arrToLetPrices = ["100","200","300","400","500","600","700","800","900","1,000","1,250","1,500","1,750","2,000","2,250","2,500","2,750","3,000","3,250","3,500","3,750","4,000","4,250","4,500","4,750","5,000","5,250","5,500"];

function EnableBaloon() { propertyDetailsBaloon = true; }

/* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
'	THE INITIALIZE FUNCTION THAT PREPARES AND ZOOMS IN
' -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~*/

function displayMap(lon,lat,zoom,agentgrpid,propertysearchcontainerID,bonX1,bonX2,bonY1,bonY2){
	if (GBrowserIsCompatible()) {
		var mapTypes = G_DEFAULT_MAP_TYPES;
		for(var i = 0; i < mapTypes.length; i++){
			mapTypes[i].getMaximumResolution = function(latlng){ return 18;};
			mapTypes[i].getMinimumResolution = function(latlng){ return 10;};
		}
		map = new GMap2(document.getElementById("map"));
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
		map.addControl(new GScaleControl());
		strAgentGrpID = agentgrpid; 
		strX1 = bonX1;
		strX2 = bonX2;
		strY1 = bonY1;
		strY2 = bonY2;
		strPropertySearchContainerID = propertysearchcontainerID;
		ZoomIntoTown(lat,lon,zoom);
		
		// move map requery 
		GEvent.addListener(map,"moveend", 
			function(overlay) 
			   { 
			       if(propertyDetailsBaloon==true){propertyDetailsBaloon = false
			   } 
			 else 
			   { 
				RequeryMapData(); 
			   }  
			});
		// zoom map requery 
		GEvent.addListener(map, "zoomend", function(oldZoom, newZoom) 
	{	if (map.getZoom()>18){ map.setZoom(18);	};	RequeryMapData(); });
		// Set Property Search Type - For Sale or To Let
		vow = $('#drpHouseStatus').val();
		lettingsPriceDescription = $('#drplettingsPriceDescription').val();
		changePricing(vow,lettingsPriceDescription);
		
		// set default price criteria 
		if (vow == 'L') {  
			for (i=0; i<arrToLetPrices.length; i++) { 
				if (arrToLetPrices[i] == $('#drpStrMinPriceInx').val()) { document.getElementById('txtPmin').selectedIndex = i+1 }
				if (arrToLetPrices[i] == $('#drpStrMaxPriceInx').val()) { document.getElementById('txtPmax').selectedIndex = i+1 };
			} 
		}
		else if (vow == 'R') {  
			for (i=0; i<arrForSalePrices.length; i++) { 
				if (arrForSalePrices[i] == $('#drpStrMinPriceInx').val()) { document.getElementById('txtPmin').selectedIndex = i+1 }
				if (arrForSalePrices[i] == $('#drpStrMaxPriceInx').val()) { document.getElementById('txtPmax').selectedIndex = i+1 };
			} 
		}
			
		// get properties
		RequeryMapData(); 
	  }
	else {
	  alert("Sorry, the Google Maps API is not compatible with this browser");
	}
}

/* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
'	ENABLE LEFT HAND SEARCH FIELDS
' -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~*/

function EnableSearchFields(){
	document.getElementById("txtPmin").disabled = false;
	//document.getElementById("txtPmax").disabled = false;
	document.getElementById("drpMinRooms").disabled = false;
	document.getElementById("drpHouseStatus").disabled = false;
}

function changePricing(propType,letPriceDesc) {
	// For Sale Properties
	if(propType=='R') {
		$('#txtPmin').find('option').remove();
		$('#txtPmin').append('<option value="">Minimum</option>');
		$.each(arrForSalePrices,function(i,objValue) {
			$('#txtPmin').append('<option value="' + objValue.replace(/,/gi, "") +'">' + objValue + '</option>');
		});
		$('#txtPmax').find('option').remove();
		$('#txtPmax').append('<option value="">Maximum</option>');
		$.each(arrForSalePrices,function(i,objValue) {
			$('#txtPmax').append('<option value="' + objValue.replace(/,/gi, "") +'">' + objValue + '</option>');
		});
	} 
	// Letting Properties
	else {
		$('#txtPmin').find('option').remove();
		$('#txtPmin').append('<option value="">Minimum</option>');
		$.each(arrToLetPrices,function(i,objValue) {
			$('#txtPmin').append('<option value="' + objValue.replace(/,/gi, "") +'">' + objValue + ' ' + letPriceDesc + '</option>');
		});
		$('#txtPmax').find('option').remove();
		$('#txtPmax').append('<option value="">Maximum</option>');
		$.each(arrToLetPrices,function(i,objValue) {
			$('#txtPmax').append('<option value="' + objValue.replace(/,/gi, "") +'">' + objValue + ' ' + letPriceDesc + '</option>');
		});
	}
}

/* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
'	GENERIC ZOOM FUNCTION
' -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~*/

function ZoomIntoTown(lat,lon,zoomlevel){
	
	map.setCenter(new GLatLng(parseFloat(lat), parseFloat(lon)), zoomlevel);
	
}

/* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
'	GENERIC METHOD TO REQUERY THE DATABASE
' -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~*/

function RequeryMapData(){
	priceChange = true;
	lettingsPriceDescription = $('#drplettingsPriceDescription').val(); 
	if($('#drpHouseStatus').val()==vow) {
		priceChange = false;
	}
	EnableSearchFields();
	// Change pricing based on For Sale or To Let and if required
	if(priceChange) {
		if(vow=='R') {
			changePricing('L',lettingsPriceDescription);
			vow = 'L';
		} else {
			changePricing('R');
			vow = 'R';
		}
	}
	
	//create new empty bounds object 
	var bounds = map.getBounds(); 
	
	//get rid of existing markers
	map.clearOverlays();

	var strQuery = '';

	
	//search criteria 
	strQuery = 'minLat=' + bounds.getSouthWest().y + '&maxLat=' + bounds.getNorthEast().y + '&minLon=' + bounds.getSouthWest().x + '&maxLon='+ bounds.getNorthEast().x;
	strVow = vow;
	/*if (strX1 > 0){ strQuery = 'minLat=' + strX1 + '&maxLat=' + strX2 + '&minLon=' + strY1 + '&maxLon='+ strY2;}
	else { strQuery = 'minLat=' + bounds.getSouthWest().x + '&maxLat=' + bounds.getNorthEast().x + '&minLon=' + bounds.getSouthWest().y + '&maxLon='+ bounds.getNorthEast().y; }
	*/
	var pmin = document.getElementById('txtPmin').options[document.getElementById('txtPmin').selectedIndex].value;

	if ( pmin != '' ) { strQuery += '&minPrice=' + pmin }

	var pmax = document.getElementById('txtPmax').options[document.getElementById('txtPmax').selectedIndex].value;

	if ( pmax != '' ) { strQuery += '&maxPrice=' + pmax }

	var pbeds = document.getElementById('drpMinRooms').options[document.getElementById('drpMinRooms').selectedIndex].value;

	if(pbeds != '') { strQuery += '&beds=' + pbeds; }
	
	if(document.getElementById('strtype1') != null){
	    var ptype1 = document.getElementById('strtype1').options[document.getElementById('strtype1').selectedIndex].value;
	    if(ptype1 != '') {  strQuery += '&type1=' + ptype1; }
	}


	var strURL = strSiteURL + "/shared/mapsearch/action.refreshmap.cfm?groupid=" + strAgentGrpID + "&sstc=Y&vow=" + strVow + "&" + strQuery;
//alert(strURL);
	document.getElementById("prpCount").innerHTML ="Map Search - Loading Data...";
	
	// Read the data from example.xml
	
	var request = GXmlHttp.create();
	request.open("GET", strURL, true);
	request.onreadystatechange = function() {
	if (request.readyState == 4) {

		var JSONObject = eval( "(" + request.responseText + ")"); 
		var numberProps = JSONObject.ROWCOUNT;
//alert(JSONObject);
		var clusterProps = new Array();

		// create cluster lookup table 
		var clusterTable = new Array(numberProps);
		for (var i = 0; i < clusterTable.length; i++) {
			var lat = JSONObject.DATA.LATITUDE[i];
			var lng = JSONObject.DATA.LONGITUDE[i];
			clusterTable[i] = lat + '-' + lng; 
		}


		if(numberProps > 250){
			numberProps = 250;
		}
		
		
			// Check for duplicate entries
			for (var j = 0; j < numberProps; j++) { 
				
				var lat = parseFloat(JSONObject.DATA.LATITUDE[j]);
				var lng = parseFloat(JSONObject.DATA.LONGITUDE[j]);
				var point = new GLatLng(lat,lng);
				propid = JSONObject.DATA.PID[j];
				
				// add cluster property ids 
				for (var i = (j+1); i < clusterTable.length; i++) {
					if (clusterTable[j] == clusterTable[i]) { 
						propidTwo = JSONObject.DATA.PID[i];
						clusterProps[i] = propid;
					}
				}
					
				// create single property
				if (clusterProps.length == 0){
					var marker = createMarker(point, propid);
					map.addOverlay(marker);
				}
				
				clusterProps.length = 0

				
			}
			if(numberProps == 250)
				document.getElementById("prpCount").innerHTML = "Map Search - " + numberProps  + "+ Properties";			
			else
				document.getElementById("prpCount").innerHTML = "Map Search - " + numberProps  + " Properties";
		}

	}

	request.send(null);
}

function recallWindow(path,mygeolon,mygeolat,mycontainer,type){

	var urlpath = path +'/08,' + mygeolon + ',' +mygeolat + ',%20,%20,1,' + myContainerID + ',00.htm&d=l';
	if(type=='L'){
		urlpath = urlpath + '&type= ' + type;
	}
	//alert(urlpath);
	window.location=urlpath;
	}


/* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
'	CREATE MARKER
' -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~*/

function createMarker(point,propid) {
	var myIcon = new GIcon(); 
	myIcon.image = mapIcon; 
	myIcon.iconSize = new GSize(16, 16); 
	myIcon.iconAnchor = new GPoint(5, 5); 
	myIcon.infoWindowAnchor = new GPoint(5, 2);

	var marker = new GMarker(point,myIcon);
	GEvent.addListener(marker, "click", function() { showPropertyInfoWindowHtml(marker,propid); });
	return marker;
}

function createTabbedMarker(point,clusterProps) {
	var myIcon2 = new GIcon(); 
	myIcon2.image = strSiteURL + "/shared/mapsearch/m/p_icon2.gif";
	myIcon2.iconSize = new GSize(21, 25); 
	myIcon2.iconAnchor = new GPoint(5, 5); 
	myIcon2.infoWindowAnchor = new GPoint(5, 2);

	var marker2 = new GMarker(point,myIcon2);
	GEvent.addListener(marker2, "click", function() { showPropertyInfoWindowTabsHtml(marker2); });
	return marker2;
}

/* -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
'	POP UP PROPERTY DETAILS
' -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~*/
function showPropertyInfoWindowHtml(marker,propid) {
	
		var strGetPropURL = strSiteURL + "/shared/mapsearch/action.getPropertyDetailsMap.cfm?propertyID=" + propid;
//alert(strGetPropURL);
	var strBaloonProperties = "";
	var request = GXmlHttp.create();
	var regexp = new RegExp("[0-9]+","g");

	
	request.open("GET", strGetPropURL, true);
	request.onreadystatechange = function() {
		if (request.readyState == 4) {
			
			var JSONObject = eval( "(" + request.responseText + ")"); 
			//alert(JSONObject.COLUMNS);
			var propertyID = JSONObject.DATA.PID;
			var Address1 = JSONObject.DATA.ADDRESS;
			Address1 = Address1.toString();
			Address1 = Address1.replace(regexp,""); 
			var Address1SEO = Address1.toLowerCase();
			var blurb = JSONObject.DATA.SUMMARY;
			var Bedrooms = JSONObject.DATA.BEDS;
			var recps = JSONObject.DATA.RECP;
			var baths = JSONObject.DATA.BATH;			
			var pcm = JSONObject.DATA.PRICEDESC;
			var Type1 = JSONObject.DATA.TYPE1;
			var Type2 = JSONObject.DATA.TYPE2;
			var priceDesc = JSONObject.DATA.priceDesc;
			if ( priceDesc == 'P.O.A.' ) {
				var onMarketPrice = 'P.O.A.'; 
			} else { 
				var onMarketPrice = '&pound;' + JSONObject.DATA.PRICE; 
			}; 
			var Town = JSONObject.DATA.TOWN;
			Town = Town.toString();
			var TownSEO = Town.toLowerCase();
			var postCode = JSONObject.DATA.POSTCODE;
			postCode = postCode.toString();
			var postCodeSEO = postCode.toLowerCase();			
			postCodeSEO = postCodeSEO.replace(/ /gi,'');
			
			EnableBaloon();
			addVar = "'add'";
			strBaloonProperties = marker.openInfoWindowHtml('<div class="mapInfoWindow" style="width:310px;height:150px;"><div class="mapPropertyImage"><img src="' + wwwSysPath + '/propertyImage.asp?h=0&w=120&pid=' + propertyID + '" /></div><div class="mapPropertyInfo"><h4>' + Address1 + '</h4><p>' + onMarketPrice + pcm + '<br />' + Bedrooms + ' Bedroom ' + Type1 + ' ' + Type2 + '<br /><br /><a href="' + Address1SEO + '-' + TownSEO + '-' + postCodeSEO + '/07,0,0,0,' + propertyID + ',' + strPropertySearchContainerID + ',00.htm">&rsaquo; Read More</a><br /><a href="#" class="shortListLink" onclick="updateShortcuts(' + propertyID + ',' + addVar + ')">&rsaquo; Add to Shortlist</a></p></div></div>');
			}
		}
	request.send(null);
	return strBaloonProperties;
}
