var listingResultSet = [];
var agencyParam = "";

function initHomepage(agency)
{
	document.getElementById("hero-wrap").style.backgroundImage = "url(./assets/images/bkg-content-home" + (Math.floor(Math.random() * 4) + 1) + ".jpg)";
	
	document.getElementById("homepage-photos").className = "on";
	document.getElementById("homepage-map").className = "";
	document.getElementById("homepage-list").className = "";

	showPanel("home-no-results-view");
	
	disablePaneSelection();

	agencyParam = agency;
	updateListings(true);
}

function showPanel(p)
{
	var panels = [
		"home-loading-view",
		"home-no-results-view",
		"home-photo-view",
		"home-map-view",
		"home-list-view"
	];
	for(var i = 0; i < panels.length; i++)
		document.getElementById(panels[i]).style.display = panels[i] == p ? "block" : "none";
}

function setPanelSelection(p)
{
	var panels = [
		"homepage-photos",
		"homepage-map",
		"homepage-list"
	];
	for(var i = 0; i < panels.length; i++)
		document.getElementById(panels[i]).className = panels[i] == p ? "on" : "";
}

function enablePaneSelection()
{
	document.getElementById("homepage-photos").onclick = function() { showPhotoView(); return false; };
	document.getElementById("homepage-map").onclick = function() { showMapView(); return false; };
	document.getElementById("homepage-list").onclick = function() { showListView(); return false; };
}

function disablePaneSelection()
{
	document.getElementById("homepage-photos").onclick = function() { setPanelSelection("homepage-photos"); return false; };
	document.getElementById("homepage-map").onclick = function() { setPanelSelection("homepage-map"); return false; };
	document.getElementById("homepage-list").onclick = function() { setPanelSelection("homepage-list"); return false; };
}

function showPhotoView()
{
	setPanelSelection("homepage-photos");

	showPanel("home-photo-view");
	
	initPhotoView();
	populatePhotoView();
}

function showMapView()
{
	setPanelSelection("homepage-map");

	showPanel("home-map-view");
	
	initGoogleMap();
	populateGoogleMapView();
}

function showListView()
{
	setPanelSelection("homepage-list");

	showPanel("home-list-view");
	
	initListView();
	populateListView();
}

function showLoadingView()
{
	disablePaneSelection();
	showPanel("home-loading-view");
}

function hideLoadingView()
{
	if(!listingResultSet.length)
	{
		showPanel("home-no-results-view");
		return;
	}
	enablePaneSelection();
	if(document.getElementById("homepage-photos").className == "on")
		showPhotoView();
	if(document.getElementById("homepage-map").className == "on")
		showMapView();
	if(document.getElementById("homepage-list").className == "on")
		showListView();
}

function updateListings(initial)
{
	photoViewPopulated = false;
	googleMapPopulated = false;
	listViewPopulated = false;
	
	listingResultSet = [];
	
	var httpRequest = newXmlHttpRequest();
	httpRequest.onreadystatechange = function()
	{
		if(httpRequest.readyState == 4 && httpRequest.status != 200)
		{
			alert("Unable to load data.");
			return;
		}
		else if(httpRequest.readyState == 4)
		{
			if(!httpRequest.responseXML)
			{
				alert(httpRequest.responseText);
				return;
			}
	
			for(var i = 0; i < httpRequest.responseXML.childNodes.length; i++)
			{
				if(httpRequest.responseXML.childNodes[i].nodeName == "listings")
				{
					listingResultSet = [];
					for(var j = 0; j < httpRequest.responseXML.childNodes[i].childNodes.length; j++)
					{
						if(httpRequest.responseXML.childNodes[i].childNodes[j].nodeName == "listing")
						{
							var o = {
								search_id: "",
								price: "",
								source: "",
								type: "",
								style: "",
								address: "",
								area: "",
								city: "",
								township: "",
								schooldistrict: "",
								water: "",
								waterfront: "",
								baths: "",
								bedrooms: "",
								sq_ft: "",
								acres: "",
								latitude: "",
								longitude: "",
								icon: "",
								badge: "",
								image: "",
								imagelg: "",
								url: ""
							};
							for(var k = 0; k < httpRequest.responseXML.childNodes[i].childNodes[j].childNodes.length; k++)
							{
								if(httpRequest.responseXML.childNodes[i].childNodes[j].childNodes[k].firstChild)
									o[httpRequest.responseXML.childNodes[i].childNodes[j].childNodes[k].nodeName] = httpRequest.responseXML.childNodes[i].childNodes[j].childNodes[k].firstChild.nodeValue;
							}
							listingResultSet.push(o);
						}
					}
					hideLoadingView();
					return;
				}
			}
			alert("Unable to parse XML file.");
			return;
		}
	};

	var query = "?";
	
	if(initial)
	{
		query = "?s=7&agency=" + escape(agencyParam);
	}
	else
	{
		var form = document.getElementById("quicksearch");
		var selects = form.getElementsByTagName("select");
		query += "s=7&"
		for(var i = 0; i < selects.length; i++)
			query += escape(selects[i].name) + "=" + escape(selects[i].value) + "&";
		query = query.substring(0, query.length-1);
	}
	
	httpRequest.open("GET", "http://" + window.location.hostname + "/search-results.xml" + query, true);
	httpRequest.setRequestHeader("X-Requested-With", "XMLHttpRequest");
	httpRequest.send(null);
	
	showLoadingView();
}

// PHOTO VIEW

var photoViewStarted = false;
var photoViewPopulated = false;
var photoViewReady = false;
function initPhotoView()
{
	if(photoViewStarted)
		return;

	photoViewStarted = true;

	swfobject.embedSWF("http://" + window.location.hostname + "/assets/swf/listings.swf", "home-photo-view-listings", "778", "337", "9.0.0", false, { }, params = { wmode: "opaque" });
}

function setPhotoViewReady()
{
	photoViewReady = true;
	photoViewPopulated = false;
	populatePhotoView();
}

function populatePhotoView()
{
	if(!photoViewReady)
		return;

	if(photoViewPopulated)
		return;

	var isIE = navigator.appName.indexOf("Microsoft") != -1;
	var movie = (isIE) ? window["home-photo-view-listings"] : document["home-photo-view-listings"];
	if(!movie || !movie.importDataSet)
		return;

	dataSet = [];
	for(var i = 0; i < listingResultSet.length; i++)
	{
		dataSet.push({
			imageUrl: listingResultSet[i].imagelg,
			area: listingResultSet[i].area,
			address: listingResultSet[i].address,
			price: listingResultSet[i].price,
			clickUrl: listingResultSet[i].url
		});
	}

	movie.importDataSet(dataSet);

	photoViewPopulated = true;
}

// MAP VIEW

var googleMapsStarted = false;
var googleMapPopulated = false;
var googleMap = null;
function initGoogleMap()
{
	if(googleMapsStarted)
		return;
	googleMapsStarted = true;
	
	var mapOptions = {
		zoom: 7,
		center: new google.maps.LatLng(44.5, -85),
		mapTypeId: google.maps.MapTypeId.ROADMAP
	}

	googleMap = new google.maps.Map(document.getElementById("home-map-view"), mapOptions);
}

function populateGoogleMapView()
{
	if(googleMapPopulated)
		return;
	googleMapPopulated = true;
	

	if(googleMap.markers)
	{
		for(var i=0; i < googleMap.markers.length; i++)
			googleMap.markers[i].setMap(null);
	}
	googleMap.markers = new Array();


	
	var infoWindow = new google.maps.InfoWindow({
		content: ""
	});
	
	//var bounds = new google.maps.LatLngBounds();
	for(var i = 0; i < listingResultSet.length; i++)
	{
		if(listingResultSet[i].latitude != "" && listingResultSet[i].longitude != "")
		{
			var lat = parseFloat(listingResultSet[i].latitude);
			var long = parseFloat(listingResultSet[i].longitude);
			if(Math.abs(lat) > 0.0001 && Math.abs(long) > 0.0001)
			{
				var location = new google.maps.LatLng(lat, long);
				//bounds.extend(location);
				createMarker(
					infoWindow,
					location,
					listingResultSet[i].icon,
					listingResultSet[i].price,
					listingResultSet[i].address + "\n" + listingResultSet[i].city,
					listingResultSet[i].image,
					listingResultSet[i].url
				);
			}
		}
	}
	//googleMap.fitBounds(bounds);
	var center = new google.maps.LatLng(44.887012, -85.536804);
	googleMap.setCenter(center);
	googleMap.setZoom(9)
}

function createMarker(infoWindow, point, iconImage, title, message, image, url)
{
	var marker = new google.maps.Marker({
		position: point,
		map: googleMap,
		title: title,
		icon: iconImage,
		html: "<div class=\"marker\"><img src=\"" + escapeHtml(image) + "\" alt=\"\" style=\"width: 80px; height: 60px;\" /><strong>" + escapeHtml(title) + "</strong><br />" + escapeHtml(message) + "<br /><a href=\"" + escapeHtml(url) + "\">Listing Details</a></div>"
	});

	google.maps.event.addListener(marker, 'click', function() {
		infoWindow.setContent(marker.html);
		infoWindow.open(googleMap, marker);
	});
	
	googleMap.markers.push(marker);
}

// LIST VIEW

var listViewPopulated = false;

function initListView()
{
}

function populateListView()
{
	if(listViewPopulated)
		return;
	listViewPopulated = true;
	
	var container = document.getElementById("home-list-container");
	
	while(container.firstChild)
		container.removeChild(container.firstChild);

	for(var i = 0; i < listingResultSet.length; i++)
	{
		var parent = document.createElement("div");
		var parentLeft = document.createElement("a");
		var parentRight = document.createElement("div");
		var image = document.createElement("img");
		var h2 = document.createElement("h2");
		var a = document.createElement("a");
		var span = document.createElement("span");
		var left = document.createElement("div");
		var middle = document.createElement("div");
		var details = document.createElement("a");
		var right = document.createElement("img");
		
		parent.className = "listing clearing";
		if(!i)
			parent.style.marginTop = "0";
		
		image.src = listingResultSet[i].image;
		image.alt = "";
		
		parentLeft.className = "left";
		parentLeft.href = listingResultSet[i].url;
		parentLeft.appendChild(image);
		
		parentRight.className = "right clearing";
		
		a.appendChild(document.createTextNode(listingResultSet[i].address + ", " + listingResultSet[i].city));
		span.appendChild(document.createTextNode(listingResultSet[i].price));
		
		h2.appendChild(a);
		h2.appendChild(span);
		parent.appendChild(h2);
		
		left.className = "left";
		left.appendChild(document.createTextNode("Type of Home: " + listingResultSet[i].style));
		left.appendChild(document.createElement("br"));
		left.appendChild(document.createTextNode("Beds: " + listingResultSet[i].bedrooms + " " + nbsp + nbsp + " Baths: " + listingResultSet[i].baths));
		left.appendChild(document.createElement("br"));
		
		details.className = "details";
		details.href = listingResultSet[i].url;
		details.appendChild(document.createTextNode("Details"));
		left.appendChild(details);
		
		parentRight.appendChild(left);
		
		middle.className = "middle";
		middle.appendChild(document.createTextNode("School District: " + listingResultSet[i].schooldistrict));
		middle.appendChild(document.createElement("br"));
		middle.appendChild(document.createTextNode("MLS#: " + listingResultSet[i].search_id));
		parentRight.appendChild(middle);
		
		right.className = "right";
		right.alt = "";
		right.src = listingResultSet[i].badge;
		parentRight.appendChild(right);
		
		parent.appendChild(parentLeft);
		parent.appendChild(parentRight);
		container.appendChild(parent);
	}
}
