﻿
var mapquestutil = {

	setGlobals: function() {
		$browser = new mapquestutil.Browser;
	},
	
	/*
	* Browser detection code
	*/
	Browser: function () {
		var name = navigator.appName;
		if (name == "Netscape")
			this.name = "ns";
		else if (name == "Microsoft Internet Explorer")
			this.name = "ie";

		this.version = navigator.appVersion;
		this.vMajor = parseInt(this.version);
		this.isNS = (this.name == "ns" && this.vMajor >= 4);
		this.isNS4 = (this.name == "ns" && this.vMajor == 4);
		this.isNS6 = (this.name == "ns" && this.vMajor == 5);
		this.isIE = (this.name == "ie" && this.vMajor >= 4);
		this.isIE4 = (this.version.indexOf('MSIE 4') > 0);
		this.isIE5 = (this.version.indexOf('MSIE 5') > 0);
		this.isDOM = (document.createElement
						&& document.appendChild
						&& document.getElementsByTagName) ? true : false;

		var ua = navigator.userAgent.toLowerCase();
		if (ua.indexOf("win") > -1)
			this.platform = "win";
		else if (ua.indexOf("mac") > -1)
			this.platform = "mac";
		else
			this.platform = "other";
	},
	
	/*
	* Map control code
	*/
	Map: function (id, level, sessionId) {
		this.id = id;
		this.level = level;
		this.sessionId = sessionId;
		this.element = document.getElementById(id);
		this.offset_x = 0;
		this.offset_y = 0;

		if (this.element) {
			var el = this.element;
			this.url = el.src;
			if ($browser.isDOM && !$browser.isIE) {
				while (el.offsetParent) {
					this.offset_x += el.offsetLeft;
					this.offset_y += el.offsetTop;
					el = el.offsetParent;
				}
			}
		}

		this.recenter = function(x, y) {
			if (this.element) {
				this.element.src = this.url + "&mapbrowse=center&x=" + (x - this.offset_x) + "&y=" + (y - this.offset_y) + "&rand=" + Math.random();
			}
		};
		this.zoom = function(level) {
			if (this.element) {
				this.element.src = this.url + "&mapbrowse=zoom_" + level + "&rand=" + Math.random();
				this.level = level;
			}
		};

		this.pan = function(dir) {
			if (this.element) {
				this.element.src = this.url + "&mapbrowse=pan_" + dir + "&rand=" + Math.random();
			}
		};

		this.recenterzoom = function(x, y) {
			if (this.element) {
				this.element.src = this.url + "&mapbrowse=center_zoom&x=" + (x - this.offset_x) + "&y=" + (y - this.offset_y) + "&rand=" + Math.random();
				if (this.level < 10) {
					++this.level;
					mapquestutil.showZoomState();
					mapquestutil.showVendor();
				}
			}
		};

		this.identify = function(x, y) {
			url = window.location.protocol + "//"
				+ window.location.host + window.location.pathname
				+ '?template=identify&transaction=locMap&identifyIcon='
				+ this.sessionId
				+ '&x=' + (x - this.offset_x) + '&y=' + (y - this.offset_y);

			var width = 255;
			var height = 255;
			infoWindow = window.open(url,
					   Math.floor(Math.random() * 100000),
					   "height=" + height + ",width=" + width + ",toolbar=no,scrollbars=no,resize=yes");
			infoWindow.moveTo((screen.width - width) / 2, (screen.height - height) / 2);
		};

		//Hanson Addition
		this.zoomToLocation = function(latitude, longitude) {
			if (this.element) {
				this.element.src = this.url + "&mapbrowse=zoom_8&mapLatitude=" + latitude + "&mapLongitude=" + longitude + "&rand=" + Math.random();
				this.level = 8;
				mapquestutil.showZoomState();
			}
		};
	},

	mqaMapClick: function(e) {
		var x, y;
		if ($browser.isIE) {
			if (!(event.button == 1 || ($browser.platform == "mac" && event.button == 0))) return;
			x = event.offsetX;
			y = event.offsetY;
		} else if ($browser.isDOM) {
			if (e.which != 1) return;
			x = e.pageX;
			y = e.pageY;
		}

		if (document.mapClick.clickAction[0].checked) {
			// Zoom
			mapquestutil.mqaMapZoomIn();
		} else if (document.mapClick.clickAction[1].checked) {
			// Recenter
			$map.recenter(x, y)
		} else if (document.mapClick.clickAction[2].checked) {
			// Identify Icon
			if (document.mapClick.clickAction[2].value == 'identify') {
				$map.identify(x, y);
			} else {
				$map.recenterzoom(x, y);
			}
		}
	},

	mqaMapInit: function(id, level, sessionId) {
		$map = new mapquestutil.Map(id, level, sessionId);
		if ($map.element) {
			if ($browser.isIE) {
				$map.element.onmouseup = mapquestutil.mqaMapClick;
			} else if ($browser.isDOM) {
				$map.element.addEventListener("mouseup", mapquestutil.mqaMapClick, true);
			}
			mapquestutil.showZoomState();
			mapquestutil.showVendor();
		}
	},

	mqaMapZoom: function(level) {
		if (!$map) {
			alert('you must call mqaMapInit(mapurl) before you can call this function');
		} else {
			$map.zoom(level);
			mapquestutil.showZoomState();
			mapquestutil.showVendor();
		}
	},

	mqaMapZoomIn: function(name) {
		if ($map.level < 10)
			mapquestutil.mqaMapZoom($map.level + 1);
	},

	mqaMapZoomOut: function(name) {
		if ($map.level > 1)
			mapquestutil.mqaMapZoom($map.level - 1);
	},

	showZoomState: function() {
		for (var i = 1; i <= 10; ++i) {
			var image = i == $map.level ? 'zoom_on.gif' : 'zoom.gif';
			//eval("document.zoom" + i + ".src='images/" + image + "'");
		}
	},

	showVendor: function() {
		if (!document.vendor) return;

		if (($map.level <= 10) && ($map.level >= 6)) {
			var vendImage = 'navteq.gif';
		} else {
			var vendImage = 't.gif';
		}
		//eval("document.vendor.src='images/" + vendImage + "'");
	},

	mqaMapPan: function(dir) {
		if (!$map) {
			alert('you must call mqaMapInit(mapurl) before you can call this function');
		} else {
			$map.pan(dir);
		}
	},

	//Hanson Addition
	mqaHansonZoomToLocation: function(latitude, longitude) {
		if (!$map) {
			alert('you must call mqaMapInit(mapurl) before you can call this function');
		} else {
			$map.zoomToLocation(latitude, longitude);
		}
	}

};

$(document).ready(function() {
	mapquestutil.setGlobals();
});
