// Copyright (C) 2009 FirstAuto, Inc.  All rights reserved.
// Version 1.0

// 12-Jun-09 Added 'Click for details...' string in vehicle description.

var map;

var layer      = 100;
var maxZoom    = 19;
var view       = 'viewport';
var infoWindow = 'closed';
var initialMap = true;

var tooltip;
var prevZoom;

var clusters = new Array(); 
var dealers  = new Array();
var groups   = new Array();

var markers  = new Object();

var clusterID     = new Object();
var clusterLatLng = new Object();
var clusterPoint  = new Object();

var groupDealers = new Object();
var groupName    = new Object();

var groupDealersInCluster = new Object();

var zoomLevel   = new Object();
var zoomMin     = new Object();
var zoomMax     = new Object();

var grayMarkers = new Object();
var redMarkers  = new Object();

// Cluster variables
var grayClusters = new Object();
var redClusters  = new Object();
var tooltipText  = new Object();

var clusterDealers = new Object();

var markerIndex = new Object();
var dealerIndex = new Object();
var dealerName  = new Object();
var dealerPoint = new Object();
var dealerZoom  = new Object();

var debug = new Object();

var markerIcon = new GIcon(G_DEFAULT_ICON, "/images/marker_gray_blank.png");

var grayMarker = new GIcon(G_DEFAULT_ICON, "/images/marker_gray_blank.png");
var redMarker  = new GIcon(G_DEFAULT_ICON, "/images/marker_red_blank.png");

var grayCluster = new GIcon(G_DEFAULT_ICON, "/images/marker_gray_plus.png");
var redCluster  = new GIcon(G_DEFAULT_ICON, "/images/marker_red_plus.png");



window.onunload = GUnload;

if (document.getElementById('iframe')) {
	// Do nothing
}

else {
	window.onresize = handleResize;
}

function blurAllDealers() {
	var seenCluster = new Object();
	
	var zoom = map.getZoom();

	for (var i=0; i< dealers.length; i++) {
		var data = dealers[i].split(';');
											
		var dealer = data[0];
		
		var x = zoom + ":" + dealer;
					
		if (clusterID[x] == undefined) {
			redMarkers[dealer].hide();
			grayMarkers[dealer].show();
		}
					
		else {
			var cluster = clusterID[x];
						
			if (seenCluster[cluster]) {
				continue;
			}
						
			else {
				redClusters[cluster].hide();
				grayClusters[cluster].show();
		
				seenCluster[cluster] = true;
			}
		}
	}
}

function blurDealers() {
	var view  = document.getElementById('view').value;
	
	if (view == 'dealer') {
	
	}

	else if (view == 'group') {
	
	}
	
	else if (view == 'global') {
		var seenCluster = new Object();
		var zoom = map.getZoom();
			
		for (var i=0; i< dealers.length; i++) {
			var data = dealers[i].split(';');
										
			var dealer = data[0];
	
			var x = zoom + ":" + dealer;
				
			if (clusterID[x] == "" || clusterID[x] == null) {
				redMarkers[dealer].hide();
				grayMarkers[dealer].show();
			}
				
			else {
				var cluster = clusterID[x];
					
				if (seenCluster[cluster]) {
					continue;
				}
					
				else {
					redClusters[cluster].hide();
					grayClusters[cluster].show();
	
					seenCluster[cluster] = true;
				}
			}
		}
	}
}


//
// This function returns an arbitrarily large number for a marker\'s z-index.
//
function bringForward(marker,b) {
	return 1000;
}

//
// This function returns the value of an elements CSS global or external style value.
//
function cssStyle(element, cssProperty, cssPropertyNS){
	var value;
	
	if (element.currentStyle) { // IE5+
		value = element.currentStyle[cssProperty];
	}
	
	else if (window.getComputedStyle) {	// NS6+
		var elementStyle=window.getComputedStyle(element, "");
		value = elementStyle.getPropertyValue(cssPropertyNS);
	}
	
	value = parseFloat(value);
	
	return value;
}

function createClusterMarkers() {
	for (var i=0; i< clusters.length; i++) {
		var clusterData = clusters[i].split(';');
										
		var cluster = clusterData[0];
		var latlng  = clusterData[1];
		
		var coordinates = latlng.split(',');
																							
		var lat = parseFloat(coordinates[0]);
		var lng = parseFloat(coordinates[1]);
							
		var point = new GLatLng(lat,lng);
		
		clusterPoint[cluster] = point;
		
		createGrayCluster(cluster,point);
		createRedCluster(cluster,point);
	}
}

function createDealerMarkers() {
	for (var i=0; i< dealers.length; i++) {
		var data   = dealers[i].split(';');
		var dealer = data[0];
		
		var point  = dealerPoint[dealer];
				
		createGrayMarker(dealer,point);
		createRedMarker(dealer,point)
	}
}

function createGrayCluster(cluster,point) {
	var marker = new GMarker(point,{icon:grayCluster});

	// Marker "mouseover" listener
	marker.mouseover = GEvent.addListener(marker, "mouseover", function() {
		marker.setImage("/images/marker_gray_dot.png");
		showDealerTooltip(marker);
	});
		
	// Marker "mouseout" listener
	marker.mouseout = GEvent.addListener(marker, "mouseout", function() {
		marker.setImage("/images/marker_gray_plus.png");
		tooltip.style.visibility = "hidden";
	});
	
	// Marker "click" listener
	marker.click = GEvent.addListener(marker, "click", function() {
		document.getElementById('view').value = 'global';
		
		//redClusters[cluster].hide();
		//grayClusters[cluster].hide();
		
		zoomToCluster(cluster);
	});

	
	var data = clusterDealers[cluster].split(',');
	
	for (var i=0; i< data.length; i++) {
		var dealer = data[i];
		
		if (tooltipText[cluster] == undefined) {
			tooltipText[cluster] = dealerName[dealer];
		}
		
		else {
			tooltipText[cluster] += "<br>" + dealerName[dealer];
		}
	}
		
	marker.tooltip = '<div class="tooltip"><nobr>'+ tooltipText[cluster] +'</nobr></div>';
		
	grayClusters[cluster] = marker;
			 
	map.addOverlay(marker);
	
	marker.hide();
}

function createGrayMarker(dealer,point) {
	var marker = new GMarker(point,{icon:grayMarker});
		
	// Marker "mouseover" listener
	marker.mouseover = GEvent.addListener(marker, "mouseover", function() {
		marker.setImage("/images/marker_gray_dot.png");
		showDealerTooltip(marker);
	});
		
	// Marker "mouseout" listener
	marker.mouseout = GEvent.addListener(marker, "mouseout", function() {
		marker.setImage("/images/marker_gray_blank.png");
		tooltip.style.visibility = "hidden";
	});
	
	marker.tooltip = '<div class="tooltip"><nobr>'+ dealerName[dealer] +'</nobr></div>';
		
	grayMarkers[dealer] = marker;
			 
	map.addOverlay(marker);
	
	marker.hide();
}

function createMarkers() {
	createDealerMarkers();
	
	if (clusters != "") {
		createClusterMarkers();
	}
}


function createRedCluster(cluster,point) {
	var marker = new GMarker(point,{icon:redCluster,zIndexProcess:bringForward});
		
	// Marker "mouseover" listener
	marker.mouseover = GEvent.addListener(marker, "mouseover", function() {
		marker.setImage("/images/marker_red_dot.png");
		showDealerTooltip(marker);
	});
		
	// Marker "mouseout" listener
	marker.mouseout = GEvent.addListener(marker, "mouseout", function() {
		marker.setImage("/images/marker_red_plus.png");
		tooltip.style.visibility = "hidden";
	});
	
	// Marker "click" listener
	marker.click = GEvent.addListener(marker, "click", function() {
		document.getElementById('view').value = 'global';
		
		redClusters[cluster].hide();
		grayClusters[cluster].hide();
		
		zoomToCluster(cluster);
		//zoomToCluster_new(cluster);
	});
	
	marker.tooltip = '<div class="tooltip"><nobr>'+ tooltipText[cluster] +'</nobr></div>';
	
	redClusters[cluster] = marker;
				 
	map.addOverlay(marker);
	
	marker.hide();
}


function createRedMarker(dealer,point) {
	var marker = new GMarker(point,{icon:redMarker,zIndexProcess:bringForward});
		
	// Marker "mouseover" listener
	marker.mouseover = GEvent.addListener(marker, "mouseover", function() {
		marker.setImage("/images/marker_red_dot.png");
		showDealerTooltip(marker);
	});
		
	// Marker "mouseout" listener
	marker.mouseout = GEvent.addListener(marker, "mouseout", function() {
		marker.setImage("/images/marker_red_blank.png");
		tooltip.style.visibility = "hidden";
	});
	
	// Marker "click" listener
	marker.click = GEvent.addListener(marker, "click", function() {
		document.getElementById('view').value = 'dealer';
		document.getElementById('dealer').value = dealer;
			
		tooltip.style.visibility = "hidden";
		
		document.getElementById("pulldown_menus").style.visibility  = "hidden";
			
		getVehicles();
	});
	
	// Marker "infowindowclose" listener
	GEvent.addListener(marker, "infowindowclose", function() {
		document.getElementById('sort').value = 'make';
		
		var group = document.getElementById('group').value;
		
		if (group == "") {
			document.getElementById('view').value = 'global';
		}
		
		else {
			document.getElementById('view').value = 'group';
		}
		
		// Marker "mouseover" listener
		marker.mouseover = GEvent.addListener(marker, "mouseover", function() {
			marker.setImage("/images/marker_red_dot.png");
			showDealerTooltip(marker);
		});
				
		// Marker "mouseout" listener
		marker.mouseout = GEvent.addListener(marker, "mouseout", function() {
			marker.setImage("/images/marker_red_blank.png");
			tooltip.style.visibility = "hidden";
		});
			
		// Marker "click" listener
		marker.click = GEvent.addListener(marker, "click", function() {
			document.getElementById('view').value = 'dealer';
			document.getElementById('dealer').value = dealer;
	
			tooltip.style.visibility = "hidden";
			
			document.getElementById("pulldown_menus").style.visibility  = "hidden";
					
			getVehicles();
		});
		
		//moveEndListener();
		
		redMarkers[dealer].setImage("/images/marker_red_blank.png");
		redMarkers[dealer].hide();
		
		grayMarkers[dealer].show();
		
		resetHeader();

		//pullDownMenus();
			
		document.getElementById("pulldown_menus").style.visibility  = "visible";
			
		getDealers();
			
		infoWindow = 'closed';
	});
	
	marker.tooltip = '<div class="tooltip"><nobr>'+ dealerName[dealer] +'</nobr></div>';
		
	redMarkers[dealer] = marker;
			 
	map.addOverlay(marker);
	
	marker.hide();
}

function cursor_wait() {
	document.body.style.cursor = 'wait';
}

function cursor_clear() {
	document.body.style.cursor = 'default';
}

//
// This function creates the Dealers pull-down menu
//
function dealersMenu() {
	var view = document.getElementById('view').value;
	
	var dealersMenu = "<tr><td align='right'><span class='bold'>Dealers:</span></td><td><select id='dealers' name='dealers' onChange='selectedDealer(this)'><option value=''>Select...</option>";
	
	if (view == 'group') {
		var group = document.getElementById('group').value;
		
		var data = groupDealers[group].split(',');
						
		for (var i=0; i< data.length; i++) {
			var dealer = data[i];
			
			dealersMenu += "<option value=\"" + dealer + "\">" + dealerName[dealer] + "</option>";
		}
	}
	
	else if (view == 'global') {
		for (var i=0; i< dealers.length; i++) {
			var data = dealers[i].split(';');
								
			var dealer = data[0];

			dealersMenu += "<option value='" + dealer + "'>" + dealerName[dealer] + "</option>";
		}
	}
	
	dealersMenu += "<option value=''>------------------</option>"
		+ "<option value='all'>All Dealers</option>"
		+ "</select></td></tr>";
	
	return dealersMenu;
}

//
// This function 'focuses' dealer marker
//
function focusDealer(dealer) {
	var view = document.getElementById('view').value;
	
	var marker = redMarkers[dealer];
	
	grayMarkers[dealer].hide();
	
	if (view == 'dealer') {
		//document.getElementById("pulldown_menus").style.visibility = "hidden";
			
		GEvent.removeListener(marker.click);
		GEvent.removeListener(marker.mouseover);
		GEvent.removeListener(marker.mouseout);
			
		if (infoWindow == 'closed') {
			showDealerInfoWindow(dealer);
						
			infoWindow = 'open';
		}
			
		redMarkers[dealer].show();
			
		redMarkers[dealer].setImage("/images/marker_red_dot.png");
	}
	
	//else if (view == 'group') {
	//	redMarkers[dealer].show();
	//}
	
	else if (view == 'global' || view == 'group') {
		var zoom = map.getZoom();
		
		var x = zoom + ":" + dealer;
					
		//if (clusterID[x] == "" || clusterID[x] == null) {
		if (clusterID[x] == undefined) {
			redMarkers[dealer].show();
		}
		
		else {
			var cluster = clusterID[x];
			
			redClusters[cluster].show();
		}
	}
}

//
// This function determines which dealer icon in the veiwport is red and which is gray 
// based upon a list of dealers whose vehicles are in vehicles sidebar.
//
function focusDealers(resultsDealerList) {
	var view = document.getElementById('view').value;
	var zoom = map.getZoom();
	
	blurAllDealers(zoom);
	
	var resultsDealer = new Object();
	
	var data = resultsDealerList.split(',');
		
	for (var i=0; i< data.length; i++) {
		var dealer = data[i];
		resultsDealer[dealer] = true;
	}
	
	if (view == 'dealer') {
		var dealer = data[0];
		
		focusDealer(dealer);
	} 
	
	else if (view == 'group') {
		var group = document.getElementById('group').value;
		
		var data = groupDealers[group].split(',');
			
		for (var i=0; i< data.length; i++) {
			var dealer = data[i];
								
			if (resultsDealer[dealer]) {
				focusDealer(dealer);
			}
		}
	}
	
	else if (view == 'global') {
		for (var i=0; i< dealers.length; i++) {
			var data = dealers[i].split(';');						
			var dealer = data[0];
			
			if (resultsDealer[dealer]) {
				focusDealer(dealer);
			}
		}
	}
}

function getClusterIDs() {
	var today     = new Date();
	var todayInMS = today.getTime();
	
	var url = "/cgi-bin/ajax/getClusterIDs?state=" 
		+ myState 
		+ ";market=" 
		+ myMarket 
		+ ";media=" 
		+ myMedia 
		+ ";time=" 
		+ todayInMS;
	
	var request = GXmlHttp.create();

	request.open("GET", url, true);
	request.onreadystatechange = function() {
		if (request.readyState == 4) {
			var response = request.responseText;
			
			var regExp = /\n/g;
			response = response.replace(regExp,'');
			
			if (response != "") {
				var data = response.split('|');
			
				for (var i=0; i< data.length; i++) {
					var clusterData = data[i].split(';');
								
					var dealer = clusterData[0];
					var list   = clusterData[1];
				
					var values = list.split(',');
				
					for (var j=0; j< values.length; j++) {
						var cluster = values[j];

						var regExp = /\d+/;
						var zoom = cluster.match(regExp);
					
						var x = zoom + ":" + dealer;
					
						clusterID[x] = cluster;
					
						if (clusterDealers[cluster] == undefined) {
							clusterDealers[cluster] = dealer;
						}
					
						else {
							clusterDealers[cluster] += "," + dealer;
						}	
					}
				}
			}
			
			getClusterPoints();
		}
	}
	request.send(null);
}

function getClusterPoints() {
	var today     = new Date();
	var todayInMS = today.getTime();
	
	var url = "/cgi-bin/ajax/getClusterPoints?state=" 
		+ myState 
		+ ";market=" 
		+ myMarket 
		+ ";media=" 
		+ myMedia 
		+ ";time=" 
		+ todayInMS;
	
	var request = GXmlHttp.create();

	request.open("GET", url, true);
	request.onreadystatechange = function() {
		if (request.readyState == 4) {
			var response = request.responseText;
			
			var regExp = /\n/g;
			response = response.replace(regExp,'');
			
			clusters = response.split('|');
			
			getDealersAll();
		}
	}
	request.send(null);
}

//
// This function takes the lat/lng bounds of the map viewport and returns an
// comma delimited string containing the dealers within the viewport.
//
function getDealers() {
	var view = document.getElementById('view').value;
	
	// Obtain lat/lng bounds for map viewport
	var bounds    = map.getBounds();
	var southWest = bounds.getSouthWest();
	var northEast = bounds.getNorthEast();
	var lat1      = southWest.lat(); 
	var lng1      = northEast.lng();
	var lat2      = northEast.lat();
	var lng2      = southWest.lng();
			
	//var viewport  = "latitude<" + lat2 + "+latitude>" + lat1 + "+longitude<" + lng1 + "+longitude>" + lng2;
	var viewport  = "latitude+lt+"
		+ lat2
		+ "+latitude+gt+"
		+ lat1
		+ "+longitude+lt+"
		+ lng1
		+ "+longitude+gt+"
		+ lng2;
	
	var today = new Date();
	var todayInMS = today.getTime();
	
	if (view == 'dealer') {
		getVehicles();
		return;
	}
	
	else if (view == 'group') {
		var group = document.getElementById('group').value;
		
		var url = "/cgi-bin/ajax/beta/getDealers_serverside?market=" 
			+ myMarket 
			+ ";media=" 
			+ myMedia 
			+ ";group=" 
			+ group 
			+ ";bounds=" 
			+ viewport 
			+ ";time=" 
			+ todayInMS;
	}
	
	else {
		var url = "/cgi-bin/ajax/beta/getDealers_serverside?market=" 
			+ myMarket 
			+ ";media=" 
			+ myMedia 
			+ ";bounds=" 
			+ viewport 
			+ ";time=" 
			+ todayInMS;
	}

	var request = GXmlHttp.create();
		
	request.open("GET", url, true);
	request.onreadystatechange = function() {
		if (request.readyState == 4) {
			var response = request.responseText
			
			var regExp = /\n/g;
			response = response.replace(regExp,'');

			document.getElementById('dealer').value = response;
			
			if (myQuery != "") {
				myQuery = "";
			}
			
			else {
				getVehicles();
			}
		}
	}
	request.send(null);
}

function getDealersAll() {
	var today     = new Date();
	var todayInMS = today.getTime();
	
	var url = "/cgi-bin/ajax/beta/getDealersAll_serverside?state=" 
		+ myState 
		+ ";market=" 
		+ myMarket 
		+ ";media=" 
		+ myMedia 
		+ ";time=" 
		+ todayInMS;
	
	var request = GXmlHttp.create();

	request.open("GET", url, true);
	request.onreadystatechange = function() {
		if (request.readyState == 4) {
			var response = request.responseText;
			
			var regExp = /\n/g;
			response = response.replace(regExp,'');
			
			var data = response.split('&');
			var dealerData = data[0];
			var groupData  = data[1];
			
			dealers = dealerData.split('|');
			
			for (var i=0; i< dealers.length; i++) {
				var dealerData = dealers[i].split(';');
								
				var dealer    = dealerData[0];
				var name      = dealerData[1];
				var latlng    = dealerData[2];
				var zoomLevel = dealerData[9];

				var coordinates = latlng.split(',');
																			
				var lat = parseFloat(coordinates[0]);
				var lng = parseFloat(coordinates[1]);
			
				var point = new GLatLng(lat,lng);
				
				dealerIndex[dealer] = i;
				dealerName[dealer]  = name;
				dealerPoint[dealer] = point;
				dealerZoom[dealer]  = zoomLevel;
			}
			
			if (groupData != "") {
				groups = groupData.split('|');
							
				for (var i=0; i< groups.length; i++) {
					var data = groups[i].split(';');
															
					var group      = data[0];
					var name       = data[1];
					var dealerList = data[2];
								
					groupDealers[group] = dealerList;
					groupName[group]    = name;
				}
			}
			
			createMarkers();
			
			pullDownMenus();
			
			if (myQuery != "") {
				muclQuery();
			}
			
			else {
				zoomToDealers();
			}
		}
	}
	request.send(null);
}

function getMap() {		
	handleResize();
	
	// Create the map
	map = new GMap2(document.getElementById("map"));
		
	map.addControl(new GSmallMapControl());
	//map.addControl(new GLargeMapControl());
		
	if (GMapTypeControl == 'no') {
		// Do nothing
	}

	else {
		map.addControl(new GMapTypeControl());
	}

	if (GOverviewMapControl == 'no') {
		// Do nothing
	}

	else {
		var ovControl = new GOverviewMapControl(new GSize(160,120));
		map.addControl(ovControl);
		ovControl.hide(true);
	}
	
	// Add drag zoom control
	try {
		if (dragZoomEnabled == 'yes') {
			map.enableKeyDragZoom({	
				key: "shift", 
				boxStyle: {border: "2px dashed black", backgroundColor: "transparent", opacity: 1},
				paneStyle: { backgroundColor: "gray", opacity: 0.1 }
			});
		}
	}
		
	catch(e) {
	// Do nothing
	}	
		
	// Location of GCADA
	map.setCenter(new GLatLng(39.30006671942496,-84.41911697387695),4);
		
	map.disableDoubleClickZoom();
	map.disableScrollWheelZoom();
		
	// Set up marker mouseover tooltip div
	tooltip = document.createElement("div");
	map.getPane(G_MAP_FLOAT_PANE).appendChild(tooltip);
	tooltip.style.visibility = "hidden";
		
	document.getElementById('query').value = "";
	document.getElementById('sort').value  = "make";
				
	if (myDealer != "") {
		document.getElementById('view').value = 'dealer';
		document.getElementById('dealer').value = myDealer;
	}
		
	else if (myGroup != "") {
		document.getElementById('view').value = 'group';
		document.getElementById('group').value = myGroup;
	}
					
	else {
		document.getElementById('view').value = 'global';
	}
		
	if (myQuery != "") {
		var regExp = /\+/g;
		var query = myQuery.replace(regExp,' ');
		document.getElementById('query').value = query;
	}
		
	zoomEndListener();
	moveStartListener();
		
	getClusterIDs();
}

//
// This functions returnes a vehicle listing of multiple models
//
function getModels(make,model,sort) {
	var dealer = document.getElementById('dealer').value;
	var query  = document.getElementById('query').value;
	//var sort = document.getElementById('sort').value;
	var view   = document.getElementById('view').value;
	
	var regExp = /\=/g;
	query = query.replace(regExp,'%3D');

	var webModel = model.replace('&','');
	//var webModel = myModel.replace('/ /g','+');
	//webModel     = webModel.replace('&amp;','&');
	
	var content = document.getElementById(model).innerHTML;
	
	var today = new Date();
	var todayInMS = today.getTime();
	
	//var url = "/cgi-bin/ajax/beta/getVehicles_serverside?market=" + myMarket + ";media=" + myMedia + ";dealer=" + dealer + ";make=" + make + ";model=" + webModel + ";sort=" + sort + ";query=" + query + ";view=" + view + ";time=" + todayInMS;

	var url = "/cgi-bin/ajax/beta/getVehicles_serverside_testbed?state=" + myState + ";market=" + myMarket + ";media=" + myMedia + ";dealer=" + dealer + ";make=" + make + ";model=" + webModel + ";sort=" + sort + ";query=" + query + ";view=" + view + ";time=" + todayInMS;

	if (content == "") {
		cursor_wait();
		
		var request = GXmlHttp.create();
				
		request.open("GET", url, true);
		request.onreadystatechange = function() {
			if (request.readyState == 4) {
				var html = request.responseText;
				
				document.getElementById(model).style.display = 'block';
				document.getElementById(model).style.height = 'auto';
				document.getElementById(model).innerHTML = html;
				
				cursor_clear();
			}
		}
		request.send(null);
	}
		
	else {
		document.getElementById(model).style.display = 'none';
		document.getElementById(model).innerHTML = "";
		//document.getElementById(model).style.height = '0px';
	}
}

function getSort(sort) {
	document.getElementById("sort").value = sort;
	
	getVehicles();
}

function getThumbnail(vehicleData) {
	var data = vehicleData.split(';');
	var dealer   = data[0];
	var stockNum = data[1];
	var year     = data[2];
	var make     = data[3];
	var model    = data[4];
	var body     = data[5];
	var miles    = data[6];
	var price    = data[7];
	var photo    = data[8];
	var thumbURL = data[9];
	
	var today     = new Date();
	var todayInMS = today.getTime();
	
	var url = "/cgi-bin/ajax/getThumbnail?dealer=" + dealer + ";stockNum=" + stockNum + ";time=" + todayInMS;
		
	var request = GXmlHttp.create();
	request.open("GET", url, true);
	request.onreadystatechange = function() {
		if (request.readyState == 4) {
			var response = request.responseText;
	
			var regExp = /\n/g;
			response = response.replace(regExp,'');
			
			// Handle response text if later required.
			
			showVehicleInfo(vehicleData);
		}
	}
	request.send(null);
}


function getVehicles() {
	var dealer = document.getElementById('dealer').value;
	var query  = document.getElementById('query').value;
	var sort   = document.getElementById('sort').value;
	var view   = document.getElementById('view').value;
	
	var today     = new Date();
	var todayInMS = today.getTime();
	
	if (view == 'global') {
		document.getElementById('group').value = "";
		document.title = globalTitle;
	}
	
	else if (view == 'group') {
		var group  = document.getElementById('group').value;
		document.title = "Used Cars, Trucks, Vans and SUVs at " + groupName[group];
	}
	
	else if (view == 'dealer') {
		document.title = "Used Cars, Trucks, Vans and SUVs at " + dealerName[dealer];
	}
	
	document.getElementById('header').style.display = "none";
	document.getElementById('menu').style.display = "none";
	
	//document.getElementById('vehicles').style.display = "none";
	document.getElementById('vehicles').innerHTML = "&nbsp;";
	
	document.getElementById('status').style.display = "block";	
	//document.getElementById('status').innerHTML = "Searching vehicles...";
	document.getElementById('status').innerHTML = "&nbsp;";
	
	document.getElementById('vehicles').style.backgroundImage = "url(/images/ajax-loader.gif)";
	
	document.getElementById("query_results_summary").innerHTML = "Searching vehicles...";
	
	var element = document.getElementById('content');
		
	var marginTop = cssStyle(element, "marginTop", "margin-top");
	marginTop = parseFloat(marginTop);
		
	var marginBottom = cssStyle(element, "marginBottom", "margin-bottom");
	marginBottom = parseFloat(marginBottom);
		
	var offset = marginTop + marginBottom;
	
	var vehiclesHeight = windowHeight() - offset;
	
	// Format query string
	//var regExp = /\=/g;
	//query = query.replace(regExp,'%3D');
	
	reqExp = / /g;
	//query = query.replace(regExp,'+');
	
	//var url = "/cgi-bin/ajax/beta/getVehicles_serverside?market=" + myMarket + ";media=" + myMedia + ";group=" + myGroup + ";dealer=" + dealer + ";sort=" + sort + ";query=" + query + ";view=" + view
	
	var url = "/cgi-bin/ajax/beta/getVehicles_serverside_testbed?state=" + myState + ";market=" + myMarket + ";media=" + myMedia + ";group=" + group + ";dealer=" + dealer + ";sort=" + sort + ";query=" + query + ";view=" + view + ";time=" + todayInMS;

	var request = GXmlHttp.create();
	request.open("GET", url, true);
	request.onreadystatechange = function() {
		if (request.readyState == 4) {
			var response = request.responseText;
			
			var regExp = /\n/g;
			response = response.replace(regExp,'');
			
			var data = response.split('|');
			
			var queryResultsSummary = data[0];
			var headerGraphicHeight = data[1];
			var vehicleList         = data[2];
			var resultsDealers      = data[3];
			
			if (view == 'dealer') {
				document.getElementById('status').style.display = "none";
				
				document.getElementById('header').style.display = "block";
				document.getElementById('menu').style.display = "block";
				
				document.getElementById("header").style.height = headerGraphicHeight + 'px';
				
				var titleHeight  = document.getElementById('title').offsetHeight;
				var headerHeight = document.getElementById('header').offsetHeight;
				var menuHeight   = document.getElementById('menu').offsetHeight;
				
				var i = dealerIndex[dealer];	
				var data = dealers[i].split(';');
				var name = data[1];
				var url  = data[6];
			
				document.getElementById("header").innerHTML = "<a href='" + url + "' target='new' title='Click for the " + name + " web site...'><img src=/dealers/" + dealer + "/images/mucl_logo.gif border='0'></a>";
				
				vehiclesHeight = vehiclesHeight - (titleHeight + headerHeight + menuHeight);
												
				document.getElementById('vehicles').style.height = vehiclesHeight + 'px';
			}
			
			else if (view == 'group') {
				document.getElementById('status').style.display = "none";
				
				if (headerGraphicHeight == 0) {
				
					document.getElementById('menu').style.display = "block";
								
					var titleHeight = document.getElementById('title').offsetHeight;
					var menuHeight = document.getElementById('menu').offsetHeight;
				
					vehiclesHeight = vehiclesHeight - (titleHeight + menuHeight);				
				}
				
				else {
					document.getElementById('header').style.display = "block";
					document.getElementById('menu').style.display = "block";
							
					document.getElementById('header').style.height = headerGraphicHeight + 'px';
							
					var titleHeight  = document.getElementById('title').offsetHeight;
					var headerHeight = document.getElementById('header').offsetHeight;
					var menuHeight   = document.getElementById('menu').offsetHeight;
						
					document.getElementById('header').innerHTML = "<img src=/used-cars/" + myState + "/" + myMarket +  "/groups/" + group + "/images/group_logo.jpg>";
							
					vehiclesHeight = vehiclesHeight - (titleHeight + headerHeight + menuHeight);
				}
															
				document.getElementById('vehicles').style.height = vehiclesHeight + 'px';
			}
			
			else if (view == 'global') {
				document.getElementById('status').style.display = "none";
				
				document.getElementById('menu').style.display = "block";
								
				var titleHeight = document.getElementById('title').offsetHeight;
				var menuHeight = document.getElementById('menu').offsetHeight;
				
				vehiclesHeight = vehiclesHeight - (titleHeight + menuHeight);
								
				document.getElementById('vehicles').style.height = vehiclesHeight + 'px';
			}
			
			
			document.getElementById("query_results_summary").innerHTML = queryResultsSummary;
			
			if (vehicleList == "") {
				document.getElementById("vehicles").style.backgroundImage = 'none';
				document.getElementById("vehicles").innerHTML = "<div id=\"no_results\">No vehicles matched your search query of '<strong>" + query + "</strong>'.<p>Please try another query.<p>For tips on searching, click <a href=\"javascript:openPageWin('/searching_tips.htm')\">here</a>.<br><p>To return, click <a href=\"javascript:submitSearch('null')\">here</a>.</div>";
			}
			
			else {
				if (query != "") {
					vehicleList += "<div id=\"no_results\" class=\"all_vehicles\">For all vehicles, click <a href=\"javascript:submitSearch('null')\">here</a>.</div>";
				}

				document.getElementById("vehicles").style.backgroundImage = 'none';
				document.getElementById("vehicles").innerHTML = vehicleList;
			}
			
			if (infoWindow == 'closed') {
				if (myQuery != "") {
					zoomToQuery(resultsDealers);
					
					myQuery = "";
				}
			
				focusDealers(resultsDealers);
			}
			
			document.getElementById('header').style.visibility = "visible";
			
			if (vehicleList == "") {
				//document.getElementById('menu').style.visibility = "hidden";
				document.getElementById('menu').style.display      = "none";
			}
			
			else {
				document.getElementById('status').style.display  = "none";
				
				//document.getElementById('menu').style.display    = "block";
				document.getElementById('menu').style.visibility = "visible";
			}
			
			document.getElementById('vehicles').style.display = "block";
			document.getElementById('vehicles').style.visibility = "visible";

			//document.getElementById("test").innerHTML = " Zoom: " + map.getZoom();
		}
			
	}
	request.send(null);
}

//
// This function creates the Groups pull-down menu
//
function groupsMenu() {
	var view = document.getElementById('view').value;
	var selectedGroup = "";
	
	if (view == 'group') {
		selectedGroup = document.getElementById('group').value;
	}
		
	var groupsMenu = "<tr><td align='right'><span class='bold'>Groups:</span></td><td><select id='groups' name='groups' onChange='selectedGroup(this)'><option value='all'>Select...</option>";
				
	for (var i=0; i< groups.length; i++) {
		var groupData = groups[i].split(';');
								
		var group = groupData[0];
		var name  = groupData[1];
					
		if (group == selectedGroup) {
			groupsMenu += "<option value='" + group + "' selected='yes'>" + name + "</option>";
		}
		
		else {
			groupsMenu += "<option value='" + group + "'>" + name + "</option>";
		}
	}
	
	groupsMenu += "<option value=''>------------------</option>"
		+ "<option value=\"all\">All Dealers</option>"		
		+ "</select></td></tr>";
	
	return groupsMenu;
}

//
// This function adjusts the heights of all page components
//
function handleResize() {
	var element = document.getElementById('content');
	
	var marginTop    = cssStyle(element, "marginTop", "margin-top");
	var marginBottom = cssStyle(element, "marginBottom", "margin-bottom");
	var marginRight  = cssStyle(element, "marginRight", "margin-right");

	var offset = marginTop + marginBottom;
	
	var winHeight = windowHeight();
	var winWidth  = windowWidth();
	
	var height = winHeight - offset;
	
	document.getElementById('map').style.height = height + 'px';
	document.getElementById('sidebar').style.height = height + 'px';
	
	// Calculate <div id="vehicles"> height
	var titleHeight  = document.getElementById('title').offsetHeight;
	var headerHeight = document.getElementById('header').offsetHeight;
	var menuHeight   = document.getElementById('menu').offsetHeight;
		
	var vehiclesHeight = height - (titleHeight + headerHeight + menuHeight);
		
	document.getElementById('vehicles').style.height = vehiclesHeight + 'px';
	
	// Calculate <div id="links"> top & width
	if (document.getElementById('links')) {
		var linksTop = winHeight - marginBottom;
		
		document.getElementById('links').style.display = "block";
		document.getElementById('links').style.top = linksTop + 'px';
		
		var element = document.getElementById('sidebar');
		
		var sidebarWidth = cssStyle(element, "width", "width");
		
		var linksWidth = winWidth - sidebarWidth;
		
		document.getElementById('links').style.width = linksWidth + 'px';
	}
	
	// Calculate <div id="footer_text"> top & width
	if (document.getElementById('footer_text')) {
		var footerTextTop = winHeight - marginBottom;
		
		document.getElementById('footer_text').style.display = "block";
		document.getElementById('footer_text').style.top = footerTextTop + 'px';
		
		var element = document.getElementById('sidebar');
		
		var sidebarWidth = cssStyle(element, "width", "width");
		
		var footerTextWidth = winWidth - sidebarWidth;
		
		document.getElementById('footer_text').style.width = footerTextWidth + 'px';
	}
	
	// Calculate <div id="facebook_like"> left
	if (document.getElementById('facebook_like')) {
		var width = parseFloat($('#facebook_like').css('width'));
		var left  = (winWidth - marginRight) - width;
		
		document.getElementById('facebook_like').style.display = "block";
		document.getElementById('facebook_like').style.left = left + 'px';
		
		//var element = document.getElementById('sidebar');
		
		//var sidebarWidth = cssStyle(element, "width", "width");
		
		//var footerTextWidth = winWidth - sidebarWidth;
		
		//document.getElementById('footer_text').style.width = footerTextWidth + 'px';
	}
	
	// Calculate <div id="firstauto"> placement
	if (document.getElementById('firstauto')) {
		var firstautoTop = winHeight - marginBottom;
		
		document.getElementById('firstauto').style.display = "block";
		document.getElementById('firstauto').style.top = firstautoTop + 'px';
		
		var element = document.getElementById('sidebar');
		
		var sidebarWidth = cssStyle(element, "width", "width");
		var sidebarRight =cssStyle(element, "right", "right");
				
		var firstautoLeft = winWidth - (sidebarWidth + marginRight + sidebarRight + 1); // Add 1 to account for 1px border
				
		document.getElementById('firstauto').style.width = sidebarWidth + 'px';
		document.getElementById('firstauto').style.left = firstautoLeft + 'px';
		
		document.getElementById('firstauto').style.visibility = "visible";
	}
}

function hideAllMarkers(zoom) {
	var seenCluster = new Object();
				
	for (var i=0; i< dealers.length; i++) {
		var data = dealers[i].split(';');					
		var dealer = data[0];
		
		var x = zoom + ":" + dealer;
					
		if (clusterID[x] == undefined) {
			grayMarkers[dealer].hide();
			redMarkers[dealer].hide();
		}
					
		else {
			var cluster = clusterID[x];
						
			if (seenCluster[cluster]) {
				continue;
			}
						
			else {
				grayClusters[cluster].hide();
				redClusters[cluster].hide();
				
				seenCluster[cluster] = true;
			}
		}
	}
}

//
// This function hides all dealer markers
//
function hideDealers() {
	for (var i=0; i< dealers.length; i++) {
		var data   = dealers[i].split(';');
		var dealer = data[0];
		
		redMarkers[dealer].hide();
		grayMarkers[dealer].hide();
	}
	
	for (var i=0; i< clusters.length; i++) {
		var data    = clusters[i].split(';');
		var cluster = data[0];
	
		redClusters[cluster].hide();
		grayClusters[cluster].hide();
	}
}

//
// This function hides the vehicle thumbnail and description in the dealer info window
//
function hideVehicle(dealer,view) {
	var view = document.getElementById('view').value;
	
	if (view == 'dealer') {
		document.getElementById('iw_vehicleInfo').style.display = "none";
	}
	
	else {
		var zoom = map.getZoom();
		
		var x = zoom + ":" + dealer;
		
		if (clusterID[x] == undefined) {
			redMarkers[dealer].setImage("/images/marker_red_blank.png");
			
			tooltip.style.visibility = "hidden";
		}
		
		else {
			var cluster = clusterID[x];
			
			redClusters[cluster].setImage("/images/marker_red_plus.png");

			tooltip.style.visibility="hidden";
		}
	}	
}

function init1() {
	if (GBrowserIsCompatible()) {
		// Handle URL query string
		var queryString = document.location.search;
		
		var vehicleURL = false;
			
		if (queryString != "" || queryString == null) {
			var regExp = /\?/g;
			queryString = queryString.replace(regExp,'');
			
			var queryPairs = queryString.split('&');
			
			for (i=0; i<queryPairs.length; i++) {
				var queryPair = queryPairs[i].split('=');
			
				var key   = queryPair[0];
				var value = queryPair[1];
					
				if (key == 'query') {
					myQuery = value;
				}

				else if (key == 'dealer') {
					myDealer = value;
				}
				
				else if (key == 'medium') {
					if (document.getElementById('medium')) {
						document.getElementById('medium').value = value;
					}
				}

				else if (key == 'vendor') {
					if (document.getElementById('vendor')) {
						document.getElementById('vendor').value = value;
					}
				}
				
				else if (key == 'stock') {
					vehicleURL = true;
					var stockNum = value;
				}
			}
		}
		
		if (document.getElementById('referrer')) {
			var referrer = $('#referrer').attr('value');
		
			var position = referrer.indexOf('facebook');
		
			if (position >= 0) {
				if (document.getElementById('medium')) {
					$('#medium').attr('value','facebook');
				}
				
				if (document.getElementById('vendor')) {
					$('#vendor').attr('value','hubbard');
				}
			}
		}
		
		if (vehicleURL) {
			//alert('Go to vehicle web page on dealer web site.');
			
			//var stockNum = 'C20081';
			
			openDealerVehicleWin('cincinnati','gcada',myDealer,stockNum,'','','1000','9999')
		}
		
		else {
			getMap();
		}
	}
	
	else {
		alert("Sorry, this FirstAuto application is not compatible with this browser");
	}
}

function moveEndListener() {
	map.moveend = GEvent.addListener(map, "moveend", function() {
		var view = document.getElementById('view').value;
		
		if (view == 'dealer') {
			// Possibly do something...
		}
		
		else if (view == 'group') {
			var answer = confirm("Do you want to refresh vehicle listing to match map view?");
			
			if (answer) {
				blurAllDealers();
				getDealers();
			}
			
			else {
				//Do nothing
			}
			
			document.getElementById('view').value = 'global';
			document.getElementById('group').value = '';
			
			pullDownMenus();
			
			GEvent.removeListener(map.moveend);
		}
		
		else if (view == 'global') {
			var answer = confirm("Do you want to refresh vehicle listing to match map view?");
			
			if (answer) {
				blurAllDealers();
				getDealers();
			}
			
			else {
				//Do nothing
			}
			
			GEvent.removeListener(map.moveend);
		}
	});
}

function moveStartListener() {
	map.movestart = GEvent.addListener(map, "movestart", function() {
		var view = document.getElementById('view').value;
		
		if (initialMap) {
			return;
		}
							
		if (view != 'dealer') {
			//blurDealers();
				
			//document.getElementById("query_results_summary").innerHTML = "";
				
			//document.getElementById('header').style.visibility = "hidden";
			//document.getElementById('menu').style.visibility = "hidden";
			//document.getElementById('vehicles').style.visibility = "hidden";
			
			moveEndListener();
		}
	});
}

function muclIframeLog() {
	var today = new Date();
	var todayInMS = today.getTime();
	
	var url = "/cgi-bin/ajax/mucl_iframe_log?market=" + myMarket + "&media=" + myMedia + "&time=" + todayInMS;
	
	var request = GXmlHttp.create();

	request.open("GET", url, true);
	request.onreadystatechange = function() {
		if (request.readyState == 4) {
			var response = request.responseText;
		}
	}
	request.send(null);
}

function muclQuery() {
	var dealerList = '';
	
	for (var i=0; i< dealers.length; i++) {
		var dealerData = dealers[i].split(';');
								
		var dealer = dealerData[0];
		
		if (dealerList == '') {
			dealerList = dealer;
		}
		
		else {
			dealerList += "," + dealer;
		}
	}

	document.getElementById('dealer').value = dealerList;
	
	getVehicles();
}

//
// This function creates & displays the pull-down menus
//
function pullDownMenus() {
	var pullDownMenu = "<table cellspacing=\"1\" cellpadding=\"1\">";
	
	var dealersMenuHTML = dealersMenu();
	var groupsMenuHTML  = groupsMenu();
	
	pullDownMenu += groupsMenuHTML;
	pullDownMenu += dealersMenuHTML;
	pullDownMenu += "</table>";
				
	document.getElementById("pulldown_menus").innerHTML = pullDownMenu;
}

//
// This function resets the header div
//
function resetHeader () {
	//document.getElementById('header').innerHTML = "";

	//document.getElementById("header").style.height = "0px";
	
	document.getElementById('header').style.visibility   = "hidden";
	document.getElementById('menu').style.visibility     = "hidden";
	
	//document.getElementById('vehicles').style.visibility = "hidden";
	
	document.getElementById("header").style.height = "0px";
}

//
// This function determines the dealer selected from Dealers pull-down menu
//
function selectedDealer(dealer) {
	var selectedDealer = dealer.options[dealer.selectedIndex].value;
	
	if (selectedDealer == 'all') {
		document.getElementById('view').value = 'global';
		document.getElementById('group').value = '';
	}
	
	else {
		document.getElementById('view').value = 'dealer';
		document.getElementById('dealer').value = selectedDealer;
		
		document.getElementById("pulldown_menus").style.visibility  = "hidden";
	}
	
	document.getElementById('query').value = "";
	
	blurAllDealers();
	
	pullDownMenus();

	zoomToDealers();
}

//
// This function determines the group selected from Groups pull-down menu
//
function selectedGroup(group) {
	var selectedGroup = group.options[group.selectedIndex].value;
	
	if (selectedGroup == 'all') {
		document.getElementById('view').value = 'global';
		document.getElementById('group').value = '';
		
		//pullDownMenus();
	}
	
	else {
		document.getElementById('view').value = 'group';
		document.getElementById('group').value = selectedGroup;
	}
	
	document.getElementById('query').value = "";
	
	//hideDealers();
	
	pullDownMenus();

	zoomToDealers();
}

function showAllMarkers(zoom) {
	var seenCluster = new Object();
	//var zoom = map.getZoom();
		
	for (var i=0; i< dealers.length; i++) {
		var data = dealers[i].split(';');					
		var dealer = data[0];

		var x = zoom + ":" + dealer;
			
		if (clusterID[x] == undefined) {
			grayMarkers[dealer].show();
		}
			
		else {
			var cluster = clusterID[x];
				
			if (seenCluster[cluster]) {
				continue;
			}
				
			else {
				grayClusters[cluster].show();
				seenCluster[cluster] = true;
			}
		}
	}
}

function showDealerInfoWindow(dealer) {
	var i = dealerIndex[dealer];
		
	var data    = dealers[i].split(';');
	var name    = data[1];
	var street  = data[3];
	var city    = data[4];
	var phone   = data[5];
	var link    = data[6];
	var bcname  = data[7];
	var bctitle = data[8];
		
	var regExp = /http:\/\//;
	var linkTxt = link.replace(regExp,'');
	
	var dealerInfo = "<span class='bold'>" + name +"</span><br />" + street + "<br />" + city + "<br />" + phone + "<br /><a href='" + link + "' target=new>" + linkTxt + "</a><p>" + bcname + "<br /><span class='italic'>" + bctitle + "</span></p>";
	
	var html = "<div id='iw'>";
	html += "<div id='iw_dealerInfo'>" + dealerInfo + "</div>";
	html += "<div id='iw_vehicleInfo'>";
	html += "<div id='iw_vehiclePhoto'></div>";
	html += "<div id='iw_vehicleDesc'></div>";
	html += "</div>";
	html += "</div>";
	
	var marker = redMarkers[dealer];
						
	marker.openInfoWindowHtml(html);
}

//
// This function displays dealer name next to dealer marker
//
function showDealerTooltip(marker) {
	tooltip.innerHTML = marker.tooltip;
	
	var mapProjection = map.getCurrentMapType().getProjection();
	var zoomLevel = map.getZoom();
		
	var latlng  = marker.getLatLng();
	var point   = mapProjection.fromLatLngToPixel(latlng,zoomLevel);
	var markerX = point.x;
		
	var latlng = map.getBounds().getNorthEast();
	var point  = mapProjection.fromLatLngToPixel(latlng,zoomLevel);
	var mapX   = point.x;
	
	var point  = map.getCurrentMapType().getProjection().fromLatLngToPixel(map.fromDivPixelToLatLng(new GPoint(0,0),true),map.getZoom());
	var offset = map.getCurrentMapType().getProjection().fromLatLngToPixel(marker.getPoint(),map.getZoom());
	var anchor = marker.getIcon().iconAnchor;
	var width  = marker.getIcon().iconSize.width;
	var height = tooltip.clientHeight;
	var tooltipWidth = tooltip.clientWidth;
	
	if ((mapX - markerX) < tooltipWidth) {
		// Left side tooltip placement
		var pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(offset.x - point.x  - tooltipWidth - anchor.x + 2, offset.y - point.y - anchor.y - height + 2));
	}
	
	else {
		// Rigth side tooltip placement
		var pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(offset.x - point.x - anchor.x + width - 2, offset.y - point.y -anchor.y - height + 2));
	}

	pos.apply(tooltip);

	tooltip.style.visibility = "visible";
}


//
// This function displays vehicle information (i.e. data & photo)
// in a format dependent on the view.
//
function showVehicleInfo(vehicleData) {
	var view = document.getElementById('view').value;

	var data = vehicleData.split(';');
	var dealer   = data[0];
	var stockNum = data[1];
	var year     = data[2];
	var make     = data[3];
	var model    = data[4];
	var body     = data[5];
	var miles    = data[6];
	var price    = data[7];
	var photo    = data[8];
	var thumbURL = data[9];
	
	var milesTxt = miles;
	if (milesTxt == "") {
		milesTxt = 'Call for miles';
	}
	
	else if (milesTxt == 'Call for miles') {
		milesTxt = 'Call for miles';
	}
	
	else {
		milesTxt += " miles";
	}
	
	
	var photoHTML = "";
	
	if (view == 'dealer') {
		if (photo == '1') {
			if (thumbURL == "") {
				photoHTML = "<img src=/dealers/" + dealer + "/photos/" + stockNum + "_120.jpg border=0 />";
			}
			
			else {
				photoHTML = "<img src=" + thumbURL + " width=120 height=90 border=0 />";
			}
		}
		
		else if (photo == '1x') {
			photoHTML = '&nbsp;';
		}
	
		else {
			photoHTML = "<img src=/images/no_photo_120.jpg border=0 />";
		}
	
		var text = year
			+ " "
			+ make
			+ "<br>"
			+ model
			+ "<br>";
			
		if (body != 'Unclassified') {
			text += body
				+ "<br>";
		}
		
		text += milesTxt
			+ "<br>"
			+ price;
	
		document.getElementById('iw_vehiclePhoto').innerHTML = "<table cellpadding='0' cellspacing='0' width='100%' height='100%'><tr><td valign='middle'>" + photoHTML + "</td></tr></table>";
		
		document.getElementById('iw_vehicleDesc').innerHTML = "<table cellpadding='0' cellspacing='0' width='100%' height='100%'><tr><td valign='middle'>" + text + "</td></tr></table>";
		
		document.getElementById('iw_vehicleInfo').style.display = "block";
		
		
		if (photo == '1x') {
			document.getElementById('iw_vehiclePhoto').style.backgroundImage = "url(/images/ajax-loader.gif)";
			
			var today     = new Date();
			var todayInMS = today.getTime();
						
			var url = "/cgi-bin/ajax/getThumbnail?dealer=" + dealer + ";stockNum=" + stockNum + ";time=" + todayInMS;
							
			var request = GXmlHttp.create();
			request.open("GET", url, true);
			request.onreadystatechange = function() {
				if (request.readyState == 4) {
					var response = request.responseText;
						
					var regExp = /\n/g;
					response = response.replace(regExp,'');
								
					// Handle response text if later required.
								
					photoHTML = "<img src=/dealers/" + dealer + "/photos/" + stockNum + "_120.jpg border=0 />";	
							
					document.getElementById('iw_vehiclePhoto').innerHTML = "<table cellpadding='0' cellspacing='0' width='100%' height='100%'><tr><td valign='middle'>" + photoHTML + "</td></tr></table>";
					
					document.getElementById('iw_vehiclePhoto').style.backgroundImage = "none";
					
					var regExp = /;1x;/;
					vehicleData = vehicleData.replace(regExp,';1;');
					
					document.getElementById(stockNum).onmouseover = function() {
						showVehicleInfo(vehicleData);
					}
				}
			}
			request.send(null);
			
		}
		
	}

	else {
		var zoom = map.getZoom();
		
		var x = zoom + ":" + dealer;
		
		if (clusterID[x] == undefined) {
			var marker = redMarkers[dealer];
		}
		
		else {
			var cluster = clusterID[x];
			var marker  = redClusters[cluster];
		}
		
		var mapProjection = map.getCurrentMapType().getProjection();
		var zoomLevel = map.getZoom();
			
		var latlng  = marker.getLatLng();
		var point   = mapProjection.fromLatLngToPixel(latlng,zoomLevel);
		var markerX = point.x;
			
		var latlng = map.getBounds().getNorthEast();
		var point  = mapProjection.fromLatLngToPixel(latlng,zoomLevel);
		var mapX   = point.x;
		
		if ((mapX - markerX) < 142) {
			var pointer = 'pointer_right.gif';
			var pointerLeft = '122px';
		}
		
		else {
			var pointer = 'pointer_left.gif';
			var pointerLeft = '-5px;';
		}
				
		marker.setImage("/images/marker_red_dot.png");
		
		var photoHTML = "";
		
		if (photo == '0') {
			var text = year + " " + make + "<br>" + model + "<br>" + price + "<br><i>" + dealerName[dealer] + "</i>";
			
			
			if (window.ActiveXObject) {
				// Internet Explorer
				tooltip.innerHTML = '<div class="pointer" style="top: 15px;left: ' + pointerLeft + '"><img src="/images/' + pointer + '" width="5" height="9" /></div><div id="detail" style="top: -25px; border-top: 1px solid black;">' + text + '</div>';
			}
		
			else {
				tooltip.innerHTML = '<div class="pointer" style="top: 15px;left: ' + pointerLeft + '"><img src="/images/' + pointer + '" width="5" height="9" /></div><div id="detail" style="top: -25px; border-top: 1px solid black;">' + text + '</div>';
			}

			var point  = map.getCurrentMapType().getProjection().fromLatLngToPixel(map.fromDivPixelToLatLng(new GPoint(0,0),true),map.getZoom());
			var offset = map.getCurrentMapType().getProjection().fromLatLngToPixel(marker.getPoint(),map.getZoom());
		
			var anchor = marker.getIcon().iconAnchor;
			var width  = marker.getIcon().iconSize.width + 6;

			var d  = document.getElementById('detail');
			var dh = d.offsetHeight;

			//var height = tooltip.clientHeight - dh - 20;
			var height = tooltip.clientHeight - dh - 0;
			
			
			if ((mapX - markerX) < 142) {
				// Left side tooltip placement
				var pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(offset.x - point.x - anchor.x - 128, offset.y - point.y -anchor.y -height));
			}
			
			else {	
				// Right side tooltip placement
				var pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(offset.x - point.x - anchor.x + width, offset.y - point.y -anchor.y -height));
			}

			pos.apply(tooltip);
		}
		
		else if (photo == '1' || photo == '1x') {
			photoHTML = '&npsb;';
			
			var text = year + " " + make + "<br>" + model + "<br>" + price + "<br><span class=italic>" + dealerName[dealer] + "</span>";
			
			//tooltip.innerHTML = '<div class="tooltip" style="width: 120px;height: 90px;padding: 0px;background-color: gray;">' + photoHTML +  '</div><div class="pointer" style="top: -5px;left: ' + pointerLeft + '"><img src="/images/' + pointer + '" width="5" height="9" /></div><div id="detail">' + text + '</div>';
	
			tooltip.innerHTML = '<div class="thumbnail">' + photoHTML +  '</div><div class="pointer" style="top: -5px;left: ' + pointerLeft + '"><img src="/images/' + pointer + '" width="5" height="9" /></div><div id="detail">' + text + '</div>';
				
			var point  = map.getCurrentMapType().getProjection().fromLatLngToPixel(map.fromDivPixelToLatLng(new GPoint(0,0),true),map.getZoom());
			var offset = map.getCurrentMapType().getProjection().fromLatLngToPixel(marker.getPoint(),map.getZoom());
		
			var anchor = marker.getIcon().iconAnchor;
			var width  = marker.getIcon().iconSize.width + 6;

			var d  = document.getElementById('detail');

			var dh = d.offsetHeight;
			var height = tooltip.clientHeight - dh - 20;


			if ((mapX - markerX) < 142) {
				// Left side tooltip placement
				var pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(offset.x - point.x - anchor.x - 128, offset.y - point.y -anchor.y -height));
			}
			
			else {
				// Right side tooltip placement
				var pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(offset.x - point.x - anchor.x + width, offset.y - point.y -anchor.y -height));
			}

			pos.apply(tooltip);
		}
		
		tooltip.style.visibility="visible";
		
		if (photo == '1') {
			if (thumbURL == "") {
				photoHTML = "<img src=/dealers/" + dealer + "/photos/" + stockNum + "_120.jpg border=0 />";
			}
					
			else {
				photoHTML = "<img src=" + thumbURL + " width=120 height=90 border=0 />";
			}
			
			//tooltip.innerHTML = '<div class="tooltip" style="width: 120px;height: 90px;padding: 0px;background-color: gray;">' + photoHTML +  '</div><div class="pointer" style="top: -5px;left: ' + pointerLeft + '"><img src="/images/' + pointer + '" width="5" height="9" /></div><div id="detail">' + text + '</div>';
			
			tooltip.innerHTML = '<div class="thumbnail">' + photoHTML +  '</div><div class="pointer" style="top: -5px;left: ' + pointerLeft + '"><img src="/images/' + pointer + '" width="5" height="9" /></div><div id="detail">' + text + '</div>';
		}
		
		else if (photo == '1x') {
			photoHTML = '&nbsp;';
		
			//tooltip.innerHTML = '<div class="tooltip" style="width: 120px;height: 90px;padding: 0px;background-image: url(/images/ajax-loader.gif);background-position: center;background-repeat: no-repeat;">' + photoHTML +  '</div><div class="pointer" style="top: -5px;left: ' + pointerLeft + '"><img src="/images/' + pointer + '" width="5" height="9" /></div><div id="detail">' + text + '</div>';
			
			tooltip.innerHTML = '<div class="thumbnail">' + photoHTML +  '</div><div class="pointer" style="top: -5px;left: ' + pointerLeft + '"><img src="/images/' + pointer + '" width="5" height="9" /></div><div id="detail">' + text + '</div>';
			
			var today     = new Date();
			var todayInMS = today.getTime();
				
			var url = "/cgi-bin/ajax/getThumbnail?dealer=" + dealer + ";stockNum=" + stockNum + ";time=" + todayInMS;
					
			var request = GXmlHttp.create();
			request.open("GET", url, true);
			request.onreadystatechange = function() {
				if (request.readyState == 4) {
					var response = request.responseText;
				
					var regExp = /\n/g;
					response = response.replace(regExp,'');
						
					// Handle response text if later required.
						
					photoHTML = "<img src=/dealers/" + dealer + "/photos/" + stockNum + "_120.jpg border=0 />";	
					
					//tooltip.innerHTML = '<div class="tooltip" style="width: 120px;height: 90px;padding: 0px;background-color: gray;">' + photoHTML +  '</div><div class="pointer" style="top: -5px;left: ' + pointerLeft + '"><img src="/images/' + pointer + '" width="5" height="9" /></div><div id="detail">' + text + '</div>';
					
					tooltip.innerHTML = '<div class="thumbnail">' + photoHTML +  '</div><div class="pointer" style="top: -5px;left: ' + pointerLeft + '"><img src="/images/' + pointer + '" width="5" height="9" /></div><div id="detail">' + text + '</div>';
					
					
					var regExp = /;1x;/;
					vehicleData = vehicleData.replace(regExp,';1;');
										
					document.getElementById(dealer + ":" + stockNum).onmouseover = function() {
						showVehicleInfo(vehicleData);
					}
					
					
				}
			}
			request.send(null);

		}
		
	}
}

function submitSearch(value) {
	if (value == 'null') {
		document.getElementById('query').value = "";
	}
	
	blurDealers();
	
	getVehicles();
}

//
// This function returns the height of the browser window
//
function windowHeight() {
	if (document.getElementById('iframe')) {
		return myWinHeight;
	}
	
	else {
		// Standard browsers (Mozilla, Safari, etc.)
		if (self.innerHeight) {
			return self.innerHeight;
		}
	
		// IE 6
		if (document.documentElement && document.documentElement.clientHeight) {
			return document.documentElement.clientHeight;
		}
	
		// IE 5
		if (document.body) {
			return document.body.clientHeight;
		}
	
		// Just in case.
		//return 0;
	}
}

function windowWidth() {
	if (document.getElementById('iframe')) {
		return myWinWidth;
	}
	
	else {
		// Standard browsers (Mozilla, Safari, etc.)
		if (self.innerWidth) {
			return self.innerWidth;
		}
	
		// IE 6
		if (document.documentElement && document.documentElement.clientWidth) {
			return document.documentElement.clientWidth;
		}
	
		// IE 5
		if (document.body) {
			return document.body.clientWidth;
		}
	
		// Just in case.
		//return 0;
	}
}

function zoomEndListener() {
	var view = document.getElementById('view').value;

	map.zoomend = GEvent.addListener(map, "zoomend", function(oldZ,newZ) {
		if (initialMap) {
			return;
		}
		
		hideAllMarkers(oldZ);
		
		blurAllDealers();
		
		if (view == 'dealer') {
			getVehicles();
		}
		
		else if (view == 'group') {
			getVehicles();
		}
		
		else if (view == 'global') {
			getDealers();
		}
	});
}

function zoomToCluster(cluster) {
	pullDownMenus();
	
	var bounds = new GLatLngBounds();
	
	var data = clusterDealers[cluster].split(',');
	
	for (var i=0; i< data.length; i++) {
		var dealer = data[i];
		var point  = dealerPoint[dealer];
		
		bounds.extend(point);
	}
	
	var zoom = map.getBoundsZoomLevel(bounds);
	
	map.setCenter(bounds.getCenter(),zoom);
	var mapProjection = map.getCurrentMapType().getProjection();
	var bounds = new GLatLngBounds();
	
	for (var i=0; i< data.length; i++) {
		var dealer = data[i];							
						
		var point = mapProjection.fromLatLngToPixel(dealerPoint[dealer],zoom);
								
		// SW
		var x = point.x - 12;
		var y = point.y + 52;
		var xy = new GPoint(x,y);
								
		var pointSW = mapProjection.fromPixelToLatLng(xy,zoom);
								
		bounds.extend(pointSW);
								
	 	// NE
		var x = point.x + 12;
		var y = point.y - 118;
		var xy = new GPoint(x,y);
								
		var pointNE = mapProjection.fromPixelToLatLng(xy,zoom);
								
		bounds.extend(pointNE);
	}
	
	map.setZoom(map.getBoundsZoomLevel(bounds));			
	map.setCenter(bounds.getCenter());
}

function zoomToCluster_new(cluster) {
	pullDownMenus();
	
	var point = clusterPoint[cluster];
	
	var data = clusterDealers[cluster].split(',');
	
	var minZoom = 19;
		
	for (var i=0; i< data.length; i++) {
		var dealer = data[i];
		
		for (var zoom=1; zoom<= 19; zoom++) {
			var x = zoom + ':' + dealer;
				
			if (clusterID[x] == undefined) {
				if (zoom <= minZoom) {
					minZoom = zoom;
				}
			}
		}
	}
				
	map.setCenter(point,minZoom);
}

function zoomToDealers() {
	var view = document.getElementById('view').value;
	
	var seenCluster = new Object();
	
	if (view == 'dealer') {
		var dealer = document.getElementById('dealer').value;
		var point  = dealerPoint[dealer];
		
		for (var zoom=1; zoom<= 19; zoom++) {
			var x = zoom + ':' + dealer;
		
			if (clusterID[x] == undefined) {
				break;
			}		
		}
		
		if (zoom < 11) {
			zoom = 11;	// Minimum zoom level for dealer view
		}
		
		map.setCenter(point,zoom);
		
		getVehicles();
	}
	
	else if (view == 'group') {
		var group = document.getElementById('group').value;
		
		var today     = new Date();
		var todayInMS = today.getTime();
		
		var url = "/cgi-bin/ajax/beta/getDealers_serverside?market=" 
			+ myMarket 
			+ ";media=" 
			+ myMedia 
			+ ";group=" 
			+ group 
			+ ";time=" 
			+ todayInMS;
	
		var request = GXmlHttp.create();
		
		request.open("GET", url, true);
		request.onreadystatechange = function() {
			if (request.readyState == 4) {
				var response = request.responseText
				
				var regExp = /\n/g;
				response = response.replace(regExp,'');
				
				var data = response.split('|');
				
				var dealerList = data[0];
				var groupName  = data[1];
				
				//var group = document.getElementById('group').value;
				
				//dealerName[group] = groupName;
				
				document.getElementById('dealer').value = dealerList;
				
				var data = dealerList.split(',');
				   
				var bounds = new GLatLngBounds();
				
				for (var i=0; i< data.length; i++) {
					var dealer = data[i]; 
					var point  = dealerPoint[dealer];
					
					bounds.extend(point);
				}
				
				GEvent.removeListener(map.zoomend);
				
				var zoom = map.getBoundsZoomLevel(bounds);	
				var mapProjection = map.getCurrentMapType().getProjection();	
				var bounds = new GLatLngBounds();
		
				for (var i=0; i< data.length; i++) {
					var dealer = data[i];
					
					var point = mapProjection.fromLatLngToPixel(dealerPoint[dealer],zoom);
							
					// SW
					var x = point.x - 12;
					var y = point.y + 52;
					var xy = new GPoint(x,y);
							
					var pointSW = mapProjection.fromPixelToLatLng(xy,zoom);
							
					bounds.extend(pointSW);
							
					// NE
					var x = point.x + 12;
					var y = point.y - 118;
					var xy = new GPoint(x,y);
							
					var pointNE = mapProjection.fromPixelToLatLng(xy,zoom);
							
					bounds.extend(pointNE);
				}
				
				zoomEndListener();
		
				map.setZoom(map.getBoundsZoomLevel(bounds));			
				map.setCenter(bounds.getCenter());
			}
		}
		request.send(null);
	}
	
	else if (view == 'global') {
		var bounds = new GLatLngBounds();
		
		for (var i=0; i< dealers.length; i++) {
			var data   = dealers[i].split(';');
			var dealer = data[0];

			var point = dealerPoint[dealer];

			bounds.extend(point);
		}
		
		var zoom = map.getBoundsZoomLevel(bounds);	
		var mapProjection = map.getCurrentMapType().getProjection();	
		var bounds = new GLatLngBounds();
		
		for (var i=0; i< dealers.length; i++) {
			var data   = dealers[i].split(';');							
			var dealer = data[0];
					
			var point = mapProjection.fromLatLngToPixel(dealerPoint[dealer],zoom);
							
			// SW
			var x = point.x - 12;
			var y = point.y + 52;
			var xy = new GPoint(x,y);
							
			var pointSW = mapProjection.fromPixelToLatLng(xy,zoom);
							
			bounds.extend(pointSW);
							
			// NE
			var x = point.x + 12;
			var y = point.y - 118;
			var xy = new GPoint(x,y);
							
			var pointNE = mapProjection.fromPixelToLatLng(xy,zoom);
							
			bounds.extend(pointNE);
		}
		
		map.setZoom(map.getBoundsZoomLevel(bounds));			
		map.setCenter(bounds.getCenter());
		
		if (myMarket == 'baltimore' && myMedia == 'channel11') {
			map.zoomIn();
		}

		else if (myMarket == 'kirksville') {
			map.zoomOut();
			map.zoomOut();
			map.zoomOut();
		}
		
		initialMap = false;
		
		getDealers();
		
		if (document.getElementById('curtain')) {
			document.getElementById('curtain').style.visibility = "hidden";
		}
	}
}

function zoomToQuery(dealerList) {
	var bounds = new GLatLngBounds();
	
	var data = dealerList.split(',');
	
	if (data.length == 1) {
		var dealer = data[0];
		var point  = dealerPoint[dealer]
			
		for (var zoom=1; zoom<= 19; zoom++) {
			var x = zoom + ':' + dealer;
			
			if (clusterID[x] == undefined) {
				break;
			}		
		}
			
		if (zoom < 11) {
			zoom = 11;	// Minimum zoom level for dealer view
		}
			
		map.setCenter(point,zoom);
		
		initialMap = false;
	}
	
	else {
		for (var i=0; i<data.length; i++) {
			var dealer = data[i];
			var point  = dealerPoint[dealer]
		
			bounds.extend(point);
		}
		
		var zoom = map.getBoundsZoomLevel(bounds);	
		var mapProjection = map.getCurrentMapType().getProjection();	
		var bounds = new GLatLngBounds();
		
		for (var i=0; i< data.length; i++) {						
			var dealer = data[i];
					
			var point  = mapProjection.fromLatLngToPixel(dealerPoint[dealer],zoom);
							
			// SW
			var x = point.x - 12;
			var y = point.y + 52;
			var xy = new GPoint(x,y);
							
			var pointSW = mapProjection.fromPixelToLatLng(xy,zoom);
							
			bounds.extend(pointSW);
							
			// NE
			var x = point.x + 12;
			var y = point.y - 118;
			var xy = new GPoint(x,y);
							
			var pointNE = mapProjection.fromPixelToLatLng(xy,zoom);
							
			bounds.extend(pointNE);
		}
		
		map.setZoom(map.getBoundsZoomLevel(bounds));			
		map.setCenter(bounds.getCenter());
		
		initialMap = false;
	}
}

