var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();
/* Global Variables
 * hints - An Array of strings (Hints for using the map)
 * lasthint - Holds the position of the current hint being displayed (Used to prevent displaying the same hint twice in a row)
 * doSearch - Used to prevent searching from switching between regular and birdeye views
 * CurrentRow - Used to determine which image is being displayed when a listing has multiple images
 */
var hints=new Array();
var lasthint;
var doSearch = true;
var CurrentRow = 0;
var pinEx = ".gif";
hints[0] = "In addition to double-clicking, you can zoom in and out with your mouse wheel!";
hints[1] = "You can use your keyboard to pan up,down,left,right or zoom in(+) and out(-)!";
hints[2] = "Click on a pin to check out the Bird's Eye View (where available)";

//No hint
lasthint = hints.length+1;
if (BrowserDetect.browser == "Explorer" && BrowserDetect.version < 7)
{
	pinEx = ".gif";	
}
else
{
	pinEx = ".png";
}
function LoadStartUP() 
{
	DisplayHints();
	setInterval("DisplayHints()",8000);
	
	//alert(BrowserDetect.browser);
	//alert(BrowserDetect.version);
	

}
/**
* This function switches the search type and runs CheckForProps if the zoom level high enough.
* Current search types are "ALL", "NHC", and "SCHOOLS"
*
* @param {string} searchFor Search Type
* 
*/
function DisplayHints()
{
	var randomnumber=Math.floor(Math.random()*hints.length)

	//No need to display the same hint twice in a row
	while (randomnumber == lasthint)
		randomnumber=Math.floor(Math.random()*hints.length);
	
	$('#hints').fadeOut("slow", function() {	
		$(this).html("Hint: " + hints[randomnumber]).fadeIn("slow");
		lasthint = randomnumber;
	});
}
function CityStateSearch()
{
	var city = $('#city').attr("value");
	var state = $('#state').attr("value");
	var zip = $('#zip').attr("value");
	
	if ( (city && state) || zip)
	{
		var myurl = '/HomesCom/MapSearch/CityStateSearch.cfm';
		var modurl = "";
		
		modurl = modurl + "rand=" + parseInt(Math.random()*99999999);
		if (city)
			modurl = modurl + "&city=" + city;
		if (state)
			modurl = modurl + "&state=" + state;
		if (zip)
			modurl = modurl + "&zip=" + zip;
		
		$('#CityStateSearchArea').block('<img src=\"/Images/busy.gif\"/> <strong>Searching</strong>', { border: '3px solid #3658AF' }); 		
		$.ajax({
			url: myurl,
			data: modurl,
			success: function(msg) 
			{
				$('#CityStateSearchArea').unblock();
				//alert(msg);
				var aResp =msg.split("/");
				
				if (aResp[0] && aResp[1])
				{
					if (map.GetZoomLevel() == 10)
					{
						try
						{
							map.SetCenterAndZoom(new VELatLong(aResp[0],aResp[1]),10);
							CheckForProps(map.GetCenter(), PropType,1);
						}
						catch(e)
						{
							map.ShowMessage("Invalid City/State Combination or Zipcode.  Please Try Again.");
						}
					}
					else
					{
						try
						{
							map.SetCenterAndZoom(new VELatLong(aResp[0],aResp[1]),10);
						}
						catch(e)
						{
							map.ShowMessage("Invalid City/State Combination or Zipcode.  Please Try Again.");
						}	
					}
				}
				else
				{
					map.ShowMessage("Invalid City/State Combination or Zipcode.  Please Try Again.");
				}
				
			}
			});
			
	}
	else
	{
		alert("Please enter a city/state combination or zipcode.");
		return;
	}
}
function SwitchType(searchFor)
{
	PropType = searchFor;
	if (map.GetZoomLevel() >= 9)
	{
		CheckForProps(map.GetCenter(), PropType,1);
	}
}
/**
* This function display a set of VE PushPins
*
* @param {float} latitude Comma delimited list of Latitudes
* @param {float} longitude Comma delimited list of Longitudes
* @param {String} label -- delimited list of label
*/
function makePinAndStore(address,city,state,zip,propid,type,label,order)
{
	var myurl = '/JAABA/jsp/callmappoint.jsp';
		var modurl = "";
		modurl = modurl + "addressline=" + address + "&primarycity=" + city + "&subdivision=" + state + "&postalcode=" + zip;
		modurl = modurl + "&rand=" + parseInt(Math.random()*99999999);
		jQuery.ajax({
			url: myurl,
			data: modurl,
			success: function(msg) {
				var Resp = msg.split("/");
				//alert("makePin(" + Resp[0] + "," + Resp[1] + "," + label + "," + order + ");");
				if (Resp[0].length > 1 && Resp[1].length > 1)
				{					
					makePin(Resp[0],Resp[1],label,order);
					StoreLatLong(Resp[0],Resp[1],propid,type);
					var LL = new VELatLong(parseFloat(Resp[0]),parseFloat(Resp[1]));		
					a.push(LL);
				}
				
			
				try{map.SetMapView(a);}catch(e){alert("error while zooming.")}
				}
			});
}
function makePin(lat,lng,label,count)
{
	if (lat == 0.0 || lng == 0.0)
	{
		//alert("TEST");
		map.ShowMessage("We were unable to map a listing.");
	}
	else
	{
	var pointHolder = new VELatLong(parseFloat(lat),parseFloat(lng));
	var letter = String.fromCharCode("A".charCodeAt(0) + parseInt(count));
	
	if (count > 8)
		var imageSTR = "/JAABA/images/map/pin-blue" + pinEx;
	else
		var imageSTR = "/JAABA/images/map/pin-blue" + letter + pinEx;
	
	pinInfo[count] = map.AddPushpin(pointHolder);
	pinInfo[count].SetCustomIcon(imageSTR);
	pinInfo[count].SetTitle("");
	pinInfo[count].SetDescription(label);
	map.AttachEvent("onclick",showBirdsEye);
	}
}
function makePinPlat(lat,lng,label,count)
{
	var pointHolder = new VELatLong(parseFloat(lat),parseFloat(lng));
	var letter = String.fromCharCode("A".charCodeAt(0) + parseInt(count));
	
	if (count > 8)
		var imageSTR = "/JAABA/images/map/pin-orange" + pinEx;
	else
		var imageSTR = "/JAABA/images/map/pin-orange" + letter + pinEx;
	
	pinInfo[count] = map.AddPushpin(pointHolder);
	pinInfo[count].SetCustomIcon(imageSTR);
	pinInfo[count].SetTitle("");
	pinInfo[count].SetDescription(label);
	map.AttachEvent("onclick",showBirdsEye);
}
function makePinSchool(lat,lng,label,count)
{
	var pointHolder = new VELatLong(parseFloat(lat),parseFloat(lng));
	var letter = String.fromCharCode("A".charCodeAt(0) + parseInt(count));
	
	if (count > 8)
		var imageSTR = "/JAABA/images/map/pin-school" + pinEx;
	else
		var imageSTR = "/JAABA/images/map/pin-school" + letter + pinEx;
	
	pinInfo[count] = map.AddPushpin(pointHolder);
	pinInfo[count].SetCustomIcon(imageSTR);
	pinInfo[count].SetTitle("");
	pinInfo[count].SetDescription(label);
	map.AttachEvent("onclick",showBirdsEye);
}

function makePinCity(lat,lng,label,count)
{
	var pointHolder = new VELatLong(parseFloat(lat),parseFloat(lng));
	pinInfo[count] = map.AddPushpin(pointHolder);
	pinInfo[count].SetTitle("");
	pinInfo[count].SetDescription(label);
	map.AttachEvent("onclick",zoomToCity);
}

function zoomToCity(e)
{
	if (e.elementID != null)
	{
		var shapeHold = map.GetShapeByID(e.elementID);
		var pointHold = shapeHold.GetPoints();
		map.SetCenterAndZoom(pointHold[0],9);
	}
}
function showBirdsEye(e)
{
	if (e.elementID != null)
	{
		var shapeHold = map.GetShapeByID(e.elementID);
		var pointHold = shapeHold.GetPoints();
		if (map.GetMapStyle == "o")
		{
			map.SetMapStyle("r");
			map.SetCenter(pointHold[0]);
		}
		else
		{
			if (map.IsBirdseyeAvailable())
			{
				map.SetMapStyle("o");
				map.SetCenter(pointHold[0]);
				doSearch = false;
			}
		}
	}
}
function myclick(pinID)
{
	if (map)
	{
		if(pinInfo[pinID])
		{
			var points = pinInfo[pinID].GetPoints();
			
			map.PanToLatLong(points[0]);
			map.ShowInfoBox(pinInfo[pinID]);
		}
	}
}

function closeWindows()
{
	map.HideInfoBox();
}
function ClearPin()
{
	try 
	{
		map.DeleteAllShapes();
	}
	catch(e){}
	map.Clear();
}

function SetOverlay(latitude,longitude,label)
{
	//alert(latitude + " " + longitude + " " + label + " ");
	var latArray=new Array();
	var longArray=new Array();
	var labelArray=new Array();
	var i=0;
	
	map.DetachEvent("onclick",zoomToCity);
	map.DetachEvent("onclick",showBirdsEye);
	/*
	 * Create the Arrays
	 */
	latArray = latitude.split(",");
	longArray = longitude.split(",");
	labelArray = label.split("--");
	
	var count = 0;
	
	for (x in latArray)
	{
		if (PropType == "ALL")
		{
			makePin(latArray[x],longArray[x],labelArray[x],x);
		}
		else if (PropType == "SCHOOLS")
		{
			makePinSchool(latArray[x],longArray[x],labelArray[x],x);
		}
		else if (PropType == "NHC")
		{
			makePin(latArray[x],longArray[x],labelArray[x],x);
		}
		else if (PropType == "Cities")
		{
			makePinCity(latArray[x],longArray[x],labelArray[x],x);
		}
		count++;
	}
	
}
/**
* This function finds the properties
* Current search types are "ALL", "NHC", and "SCHOOLS"
*
* @param {string} centerPoint Geocoding Lat/Long in the form "(Lat,Long)"
* @param {string} type The type of search
*/

function CheckForProps(centerPoint, type,startPoint) 
{
		if (!doSearch)
		{
			doSearch = true;
			return;
		}
		if (document.propType.noSearch.checked)
			return;
		
		$('#cmMap').block('<img src=\"/Images/busy.gif\"/> <strong>Searching</strong>', { border: '3px solid #3658AF' }); 
      
	  	var myurl = '/HomesCom/MapSearch/AjaxSearchMapper.cfm';
		var modurl = "";
		modurl = modurl + "centerpoint=" + centerPoint + "&type=" + type + "&startPoint=" + startPoint;
		modurl = modurl + "&rand=" + parseInt(Math.random()*99999999);
		$.ajax({
			url: myurl,
			data: modurl,
			success: function(msg) {
				//alert(msg);
				var aResp =msg.split("||");
				document.getElementById("latLong").innerHTML = aResp[0];
				ClearPin();
				$('#cmMap').unblock();
				SetOverlay(aResp[1],aResp[2],aResp[3]);
				}
			});
}
function paginateSearch(startPoint,centerPoint)
{
	//alert(centerPoint);
	var point = 1;
	if (startPoint != 1)
	{
		//alert(startPoint);
		for (i=1;i<startPoint;i++)
			point += 25;
			
		point--;
	}
	else
	{
		point = startPoint;
	}
	//alert(point);
	CheckForProps(centerPoint,PropType,point);
}
function showDetails(id)
{
	var myurl = '/HomesCom/MapSearch/GetDetails.cfm';
	var modurl = 'id=' + id + '&type=' + PropType;
	$('#details').block('<img src=\"/Images/busy.gif\"/>', { border: '3px solid #3658AF' }); 	
	$.ajax({
		url: myurl,
		data: modurl,
		error: function(msg) {
			var aResp = msg;
			document.getElementById("details").innerHTML = aResp;
		},
		success: function(msg) {
			//alert(msg);
			var aResp = msg;
			document.getElementById("details").innerHTML = aResp;
			$('#details').unblock();		
			$('#details').corner("round");
			$('a.IMGhide').fadeOut("fast");					
			}
		});
}
function RotateImage(which)
{
	/* 
	 * Fade Out the Current Image with a callback
	 * The callback determines the next image to display and fades it in
	 */
	$("a.IMGshow").fadeOut("slow", function() {
		$(this).removeClass("IMGshow").addClass("IMGhide");
		var hiders = $("a.IMGhide");
		CurrentRow = CurrentRow + which;
		if (CurrentRow < 0)
			CurrentRow = hiders.length;
		if (CurrentRow > hiders.length-1)
			CurrentRow = 0;
		hiders.eq(CurrentRow).removeClass("IMGhide").fadeIn("slow").addClass("IMGshow");
	});
}