// JavaScript Document
	var map;
	var markers = []; 
	var infoWindow; 
	var locationSelect; 
	var shadow = [];
	var Qx;
	var TypeArray = [];
	
	var QDate = Yesterday + "_" + Duration;
	var IconA = IconStr.split("|");
	var TypeA = TypeStr.split("|");
	var nozoom = true;
	var ReCenterMapV = 1;
	for (var id in IconA){
		TypeArray[IconA[id]] = TypeA[id]; 	
	}
    function load() {
		var NorthPlatte = new google.maps.LatLng(41.1282, -100.7639);
		var mapOptions = {
			center: NorthPlatte,
			zoom: 13,
			mapTypeId: google.maps.MapTypeId.ROADMAP,
			streetViewControl: false,
			mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU}		
		};
        map = new google.maps.Map(document.getElementById("map"), mapOptions);

//		map = new google.maps.Map(document.getElementById("map"), { mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU},center: new google.maps.LatLng(41.1282, -100.7639), zoom: 13, mapTypeId: 'roadmap',streetViewControl: true });
		infoWindow = new google.maps.InfoWindow;
		shadow[1] = new google.maps.MarkerImage('http://heartlandne.com/images/CrimeMap/1shadow.png', new google.maps.Size(30, 24), new google.maps.Point(0,0), new google.maps.Point(15, 12));		
		shadow[2] = new google.maps.MarkerImage('http://heartlandne.com/images/CrimeMap/2shadow.png', new google.maps.Size(30, 24), new google.maps.Point(0,0), new google.maps.Point(15, 12));
		shadow[3] = new google.maps.MarkerImage('http://heartlandne.com/images/CrimeMap/3shadow.png', new google.maps.Size(30, 24), new google.maps.Point(0,0), new google.maps.Point(15, 12));
		shadow[4] = new google.maps.MarkerImage('http://heartlandne.com/images/CrimeMap/4shadow.png', new google.maps.Size(40, 32), new google.maps.Point(0,0), new google.maps.Point(20, 16));
		shadow[5] = new google.maps.MarkerImage('http://heartlandne.com/images/CrimeMap/5shadow.png', new google.maps.Size(60, 49), new google.maps.Point(0,0), new google.maps.Point(28, 23));
		UpdateMap(QDate);
		AdjustStart();
    }
	function ReCenterMap(){
		ReCenterMapV = 10;
		UpdateMap(Qx);
		
	}
	function UpdateMap(Q) { 
		var TValArray = [];
		var TValStr = "";
		var C = 0;
		var Icon;
		if (Q){Qx = Q;}
		clearLocations();
		for ( var Icon in CheckedArray ){
			if( CheckedArray[Icon] == true) TValArray[C] = TypeArray[Icon];
			C = C + 1;
		} 
		TValStr = TValArray.join(",").split(" ").join("+");
		if(TValStr.length > 4){
			var searchUrl = "/NPCrimeXML.php?q=" + TValStr + ",-" + Qx + All;
			downloadUrl(searchUrl, function(data) {
				var xml = parseXml(data); 
				var markerNodes = xml.documentElement.getElementsByTagName("marker"); 
				if(markerNodes.length > 0){
					if((ReCenterMapV > 3) && (markerNodes.length >= 3)){
						var bounds = new google.maps.LatLngBounds(); 
					}
					for (var i = 0; i < markerNodes.length; i++) { 
						var V = markerNodes[i].getAttribute("V");
						var Vx = V.split("|");
						var html = "<b>" + Vx[0] + "</b><br>Near: " +  Vx[1] + "<br><br> ";	
						html = html.split("##").join("<img src='http://npcrime.com/images/CrimeIcons/Menu/").split("@@").join("' border='0' align='left'/>").split("**").join("<div id='t'>").split("^^").join("</div>");
						var point = new google.maps.LatLng( parseFloat(Vx[2]), parseFloat(Vx[3])); 
						var icon ='/images/CrimeIcons/' + Vx[4];
						var count = parseInt(Vx[5]);
						count = (count >= 5) ? 5 : count;
						var Shad = shadow[count];
						createMarker(point, icon, Shad, infoWindow, html);
						if((ReCenterMapV > 3) && (markerNodes.length >= 3)){
							bounds.extend(point); 
						}
					} 
					if((ReCenterMapV > 3) && (markerNodes.length >= 3)){
						map.fitBounds(bounds); 
					}
				}
				ReCenterMapV = 0;
			}
			
			); 
		}
		
    } 
	function createMarker(point, icon, shadow, infoWindow, html) { 
	  var marker = new google.maps.Marker({ 
			map: map,
			position: point,
			icon: icon,
			shadow: shadow
	  }); 
	  bindInfoWindow(marker, map, infoWindow, html);
	  markers.push(marker); 
	}
    function bindInfoWindow(marker, map, infoWindow, html) {
      google.maps.event.addListener(marker, 'click', function() {
        infoWindow.setContent(html);
        infoWindow.open(map, marker);
      });
    }
	function clearLocations() { 
     infoWindow.close(); 
     for (var i = 0; i < markers.length; i++) { 
       markers[i].setMap(null); 
     } 
     markers.length = 0; 
   } 
    function downloadUrl(url, callback) {
      var request = window.ActiveXObject ?
          new ActiveXObject('Microsoft.XMLHTTP') :
          new XMLHttpRequest;
      request.onreadystatechange = function() {
        if (request.readyState == 4) {
          request.onreadystatechange = doNothing;
          callback(request.responseText, request.status);
        }
      };
      request.open('GET', url, true);
      request.send(null);
    }
    function parseXml(str) {
      if (window.ActiveXObject) {
        var doc = new ActiveXObject('Microsoft.XMLDOM');
        doc.loadXML(str);
        return doc;
      } else if (window.DOMParser) {
        return (new DOMParser).parseFromString(str, 'text/xml');
      }
    }
    function doNothing() {}
	function MM_preloadImages() { //v3.0
	  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
		var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
		if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
	}
	function MM_findObj(n, d) { //v4.01
	  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
		d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
	  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
	  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
	  if(!x && d.getElementById) x=d.getElementById(n); return x;
	}
	function swapImage(obj) { 
	  var s,Dn,Fn,Fnx,x; 
	  x=MM_findObj(obj)
	  s = x.src.split("Menux");
	  Dn = (Show = (s.length != 2)) ? "http://npcrime.com/images/CrimeIcons/Menux/":"http://npcrime.com/images/CrimeIcons/Menu/" ;
	  Fnx = x.src.split("/");
	  Fn = Fnx.pop();
	  x.src = Dn + Fn;
	  CheckedArray[Fn] = !CheckedArray[Fn]; 
	  UpdateMap(Qx);  
	}
	function swapImagex(obj) { 
	  var s,Dn,Fn,Fnx,x; 
	  x=MM_findObj(obj)
	  s = x.src.split("Menux");
	  Dn = (Show = (s.length != 2)) ? "http://npcrime.com/images/CrimeIcons/Menux/":"http://npcrime.com/images/CrimeIcons/Menu/" ;
	  Fnx = x.src.split("/");
	  Fn = Fnx.pop();
	  x.src = Dn + Fn;
	}
	function DropDown(obj,visibilityVal){
		x=MM_findObj(obj);
		x.style.visibility = visibilityVal;
		
	}
	// this is simply a shortcut for the eyes and fingers
	function $(id){
		return document.getElementById(id);
	}
	var _startX = 0;			// mouse starting positions
	var _startY = 0;
	var _offsetX = 0;			// current element offset
	var _offsetY = 0;
	var _dragElement;			// needs to be passed from OnMouseDown to OnMouseMove
	var _oldZIndex = 0;			// we temporarily increase the z-index during drag
	var _debug = $('debug');	// makes life easier
	InitDragDrop();
	function InitDragDrop(){
		document.onmousedown = OnMouseDown;
		document.onmouseup = OnMouseUp;
	}
	function OnMouseDown(e){
		// IE is retarded and doesn't pass the event object
		if (e == null) 
			e = window.event; 
		
		// IE uses srcElement, others use target
		var target = e.target != null ? e.target : e.srcElement;
		
	//	_debug.innerHTML = target.className == 'drag' ? 'draggable element clicked' : 'NON-draggable element clicked';
	 
		// for IE, left click == 1
		// for Firefox, left click == 0
		if ((e.button == 1 && window.event != null || 
			e.button == 0) && 
			target.className == 'drag')
		{
			// grab the mouse position
			_startX = e.clientX;
			_startY = e.clientY;
			
			// grab the clicked element's position
			_offsetX = ExtractNumber(target.style.left);
			_offsetY = ExtractNumber(target.style.top);
			
			// bring the clicked element to the front while it is being dragged
			_oldZIndex = target.style.zIndex;
			target.style.zIndex = 10000;
			
			// we need to access the element in OnMouseMove
			_dragElement = target;
	 
			// tell our code to start moving the element with the mouse
			document.onmousemove = OnMouseMove;
			
			// cancel out any text selections
			document.body.focus();
			
			// prevent text selection in IE
			document.onselectstart = function () { return false; };
			// prevent IE from trying to drag an image
			target.ondragstart = function() { return false; };
			
			// prevent text selection (except IE)
			return false;
		}
	}
	function ExtractNumber(value){
		var n = parseInt(value);
		return n == null || isNaN(n) ? 0 : n;
	}
	function OnMouseMove(e){
		if (e == null) 
			var e = window.event; 
		var Y;
		Y = e.clientY - 6;
		Y = "" + parseFloat(((Y-(IHeight - 129)) / 3)+1);
		YY = Y.split(".");	
		Y = YY[0];
		Y = (Y < 1) ? 1 : ((Y > 30) ? 30 : Y);
		Yshift = (((Y - 1) * 3) + (IHeight - 129));
		_dragElement.style.top = Yshift + 'px';
		Duration = Y;
		_dragElement.innerHTML = "&nbsp;&nbsp;" + Y ;	
	}
	function OnMouseUp(e){
		if (_dragElement != null)	{
			_dragElement.style.zIndex = _oldZIndex;
			// we're done with these events until the next OnMouseDown
			document.onmousemove = null;
			document.onselectstart = null;
			_dragElement.ondragstart = null;
			// this is how we know we're not dragging
			_dragElement = null;
	//		_debug.innerHTML = 'mouse up';
			UpdateMap(Yesterday + "_" + Duration);
		}
	}
	function AdjustStart(){
		dragElement = document.getElementById('DurationMarker');
		Yshift = (((Duration - 1) * 3) + (IHeight - 129));
		dragElement.style.top = Yshift + 'px';
		dragElement.innerHTML = "&nbsp;&nbsp;" + Duration ;
		dragElement = null;
	}

