/*
	-------------------------------  		
	 	 Portal Settings
	-------------------------------  		 	    
*/   

// Make Center
var centerLat = 34.045268;
var centerLon = -118.249932;

// Starting Zoom Level
var startZoom = 14;

// Max Zoom Level
var maxZoomLevel = 18;

// Min Zoom Level
var minZoomLevel = 14;

// Restrict pan? 
var panRestrict = true;

// Active Tracker
var activateTracker = false;

// North Boundary
var northBound = 34.075643;

// East Boundary
var eastBound = -118.220766;

// South Boundary
var southBound = 34.022111 ;

// West Boundary
var westBound = -118.276888;

// Document root
var cakeRoot = '/dcbid/';

// Tray close delay
var displayTrayCloseDelay = 16000;

// Tray open duration
var trayOpenDuration = 1000;

// Zoom/Pan Out When Adding Markers
var zoomPanOutWhenAddingMarkers = false;

// Missing Tile Error Message
var missingTileErrorMessage = "<div style='line-height: 160%; width: 150px;'>We're sorry, <br /> Cartifact doesn't have any <br/> detail in this area.  <br /> Click the arrow to move to <br/> Downtown Los Angeles or use <br /> it as a guide to pan.</div>	";

// Missing Tile Error Message
var missingTileErrorMessageLens = "<div style='line-height: 160%; width: 150px;'>We're sorry, this historic map is not available at this zoom level. Please zoom out or try another historic map.</div>	";


// Lens Tool maginification level and quadrant arrays
var lensMagLevel = [];
var lensQuadrant = [];

// Custom maps
var customMapDirectory = [];
var customMapFormat = [];

// Lens Tool quadrant map types
var lensQuadrantMapType = [];

// Lens Tool mag level zoom depth
var lensZoomDepth = [];

// Set the actual values here	
function setLensToolConfig(){
	
	lensMagLevel[0] = '1';
	lensMagLevel[1] = '2';
	lensMagLevel[2] = '4';
	
	lensQuadrant[0] = 'ne';	
	lensQuadrant[1] = 'se';	
	lensQuadrant[2] = 'sw';	
	lensQuadrant[3] = 'nw';	
	
	lensQuadrantMapType['ne'] = G_SATELLITE_MAP;
	lensQuadrantMapType['se'] = ''; // This has to be set later as its our current map type
	lensQuadrantMapType['sw'] = G_NORMAL_MAP;
	lensQuadrantMapType['nw'] = G_HYBRID_MAP;

	lensZoomDepth[1] = 0;
	lensZoomDepth[2] = 1;
	lensZoomDepth[4] = 2;

	customMapDirectory[1] = '1981';
	customMapDirectory[2] = '1928';
	customMapDirectory[4] = '1880';

	customMapFormat[1] = 'gif';
	customMapFormat[2] = 'gif';
	customMapFormat[4] = 'gif';

}

// Map Background color
var mapBackgroundColor = '#FFFFFF';

// Drag Zoom box style
var boxStyle = {
	border: '1px solid #204560'
}	

// Enable Drag Zoom ?
var enableDragZoom = true;

// Check for IE
var is_ie/*@cc_on = {
  // quirksmode : (document.compatMode=="BackCompat"),
  version : parseFloat(navigator.appVersion.match(/MSIE (.+?);/)[1])
}@*/;



/*
	-------------------------------  		
		 	Libraries
	-------------------------------  		 	    
*/   

// Load google APIs
google.load('maps', '2');
google.load('search', '1',{"nocss" : true});

// Require Dojo Animation Library
dojo.require("dojo.fx");
dojo.require("dojo.dnd.move");


/*
	-------------------------------  		
			Portal Code
	-------------------------------  		 	    
*/   

// Loads all code after DOM has loaded
dojo.addOnLoad(function(){ 


	// Create new Google Map object
    var map = new google.maps.Map2(document.getElementById("google_map"),{backgroundColor: mapBackgroundColor });

	
	// Create xml marker data object
	var mapXmlData;

	// Create variables for Local Search
    var localSearch;
    var gSelectedResults = [];
    var localSearchCurrentResults = [];
    var localSearchForm;
    var localSearchIcon = null;

  	/*
  		-------------------------------  		
  		 	Google Map Bounds Function
  		-------------------------------  		 	    
  	*/   

	if (panRestrict == true){

		var allowedBounds;
			  	
	  	function setMapBounds(){
	  	
	
			// North East bound point
			var mapBoundNE = new google.maps.LatLng(northBound,eastBound);
	
			// South West bound point
			var mapBoundSW = new google.maps.LatLng(southBound,westBound);
		
			if (map.getZoom() > 15){
				// Get map bounds
				var mapBounds = map.getBounds();
				
				// Get map size and aspect ratio
				var mapSize = map.getSize();
				var mapAspectRatio = mapSize.width/mapSize.height;
				var invertedMapAspectRatio = mapSize.height/mapSize.width;
		
				// Calculate distance from edge of screen to center of map
				var halfDiagonalDistance = mapBounds.getNorthEast().distanceFrom(mapBounds.getSouthWest()) / 2;
		
				// Scaling constant
				var scalingConstant = 28;
				
				var pi = Math.PI;
		
				// Move NE SW by halfDiagonalDistance 		
				var mapBoundNENewLat = mapBoundNE.lat()+(((1/3600)*halfDiagonalDistance*invertedMapAspectRatio/(scalingConstant))*Math.cos(-(225*(pi/180)))); 
				var mapBoundNENewLon = mapBoundNE.lng()+(((1/3600)*halfDiagonalDistance*mapAspectRatio/(scalingConstant))*-Math.sin(-(225*(pi/180)))); 
				
				// Move SW NE by halfDiagonalDistance
				var mapBoundSWNewLat = mapBoundSW.lat()+(((1/3600)*halfDiagonalDistance*invertedMapAspectRatio/(scalingConstant))*Math.cos(-(45*(pi/180)))); 
				var mapBoundSWNewLon = mapBoundSW.lng()+(((1/3600)*halfDiagonalDistance*mapAspectRatio/(scalingConstant))*-Math.sin(-(45*(pi/180)))); 
					
		
				// Set new NE bound point
				var mapBoundNENew = new google.maps.LatLng(mapBoundNENewLat,mapBoundNENewLon);
				
				// Set new SW bound point
				var mapBoundSWNew = new google.maps.LatLng(mapBoundSWNewLat,mapBoundSWNewLon);
				
		
				// Set Map Bounds
				allowedBounds = new google.maps.LatLngBounds(mapBoundSWNew,mapBoundNENew);
			} else{
				allowedBounds = new google.maps.LatLngBounds(mapBoundSW,mapBoundNE);
			}
		}
	
	}

  	/*
  		-------------------------------  		
  		 	Google Map Function
  		-------------------------------  		 	    
  	*/   
	
	// Create dtlaMap
	var dtlaMap = '';
	
	// Load google map function
	function loadGoogleMap(){
		if (google.maps.BrowserIsCompatible()){
		
			// Get tile URL from coordinate		    	    
		    var dtlaTiles = function (a,b) {
				var f = cakeRoot + "img/tiles/" + TileToQuadKey(a.x,a.y,b) + ".gif";
				return f;
			}
	
			// Define attributes for custom tile layer
			var dtlaLayer = new Array();
			dtlaLayer[0] = new google.maps.TileLayer();
			dtlaLayer[0].getTileUrl = dtlaTiles;

			// Create cutom tile layer object for custom tiles
	        dtlaMap = new google.maps.MapType(dtlaLayer,G_SATELLITE_MAP.getProjection(),'Cartifact Map',{maxResolution:maxZoomLevel, minResolution:minZoomLevel}); 
			dtlaMap.getErrorMessage = function() { return missingTileErrorMessage; } 
			
			// Set map to custom tile overlay
			map.setMapType(dtlaMap); 
			
			// Enable scroll wheel and continous zoom
			map.enableScrollWheelZoom();
			map.enableContinuousZoom();	


		  	

   			// Center map
			map.setCenter(new google.maps.LatLng(centerLat,centerLon), startZoom);
		
			// Set Zoom Level		
		   	setZoomSelectedIcon(map.getZoom());
		   	
		   	

		   	/*
		  		-------------------------------  		
			  		 Map Pan Boundary Check
		  		-------------------------------  				  	    
		  	*/     
		  	
		  	if (panRestrict == true){
			
				setMapBounds();
				
				// Function that checks map and moves back if user trys to scroll out of bounds			
				function checkBounds() {
	
					
					// Perform the check and return if OK
					if (allowedBounds.contains(map.getCenter())) {
						return;
					}
					
					// If out of bounds move back to center
					var C = map.getCenter();
					var X = C.lng();
					var Y = C.lat();
					
					// Get bounding points
					var AmaxX = allowedBounds.getNorthEast().lng();
					var AmaxY = allowedBounds.getNorthEast().lat();
					var AminX = allowedBounds.getSouthWest().lng();
					var AminY = allowedBounds.getSouthWest().lat();
					
					// Check to see if position is inside bounds
					if (X < AminX){
						X = AminX;
					}
					if (X > AmaxX){
						X = AmaxX;
					}
					if (Y < AminY){
						Y = AminY;
					}
					if (Y > AmaxY){
						Y = AmaxY;
					}
					
					// Recenter map if out of bounds
					map.setCenter(new google.maps.LatLng(Y,X));
				}
				
				// Check bounds when user moves map
				google.maps.Event.addListener(map, "move", function() {
					checkBounds();
				});	
			}
			
			
			/*
				---------------------------------  		
					Google Local Search Loader
				--------------------------------- 		 	    
			*/   
	
			// Add local search icon
			localSearchIcon = new google.maps.Icon();
			localSearchIcon.image = cakeRoot + "img/sm_red_marker.png";
			localSearchIcon.iconSize = new google.maps.Size(16, 16);
			localSearchIcon.iconAnchor = new google.maps.Point(8, 8);
			localSearchIcon.infoWindowAnchor = new google.maps.Point(8, 0);
			
			// Create local search form
			localSearchForm = new google.search.SearchForm(true, document.getElementById("google_search_field_column"));
			localSearchForm.setOnSubmitCallback(null, CaptureForm);
			localSearchForm.setOnClearCallback(null, ClearForm);
			localSearchForm.input.focus();
			

			// Detect IE7
			if ((document.all && !window.opera && window.XMLHttpRequest) == false){			
				// Change the submit button to an image
				var localSearchFormSubmit = dojo.query('input.gsc-search-button')[0];
				dojo.attr(localSearchFormSubmit, 'type','image');
				dojo.attr(localSearchFormSubmit, 'src', cakeRoot + 'img/button_search.jpg');
			}
			
			// Initialize the local searcher
			localSearch = new google.search.LocalSearch();
			localSearch.setCenterPoint(map);
			localSearch.setSearchCompleteCallback(null, OnLocalSearch);
			localSearch.setResultSetSize(google.search.Search.LARGE_RESULTSET);


		}
	}

	/*
	-------------------------------  		
	  Load Google Map Points
	-------------------------------  				  	    
	*/  
	
	// Creat an empty boundary to hold the markers in for bound zoom
	var markerBounds = new google.maps.LatLngBounds(new google.maps.LatLng(southBound,westBound),new google.maps.LatLng(northBound,eastBound));
	
	// Create a variable to determine if extents zoom/pan should happen
	var panZoomExtents = false;
	
	// Array of Current Markers
	var currentMarkers = [];
	
	// Load map points function
	function loadGoogleMapPoints(data){


		// Clear existing points
		for (var i = 0; i < currentMarkers.length; i++) {
			map.removeOverlay(currentMarkers[i]);
		}
		
		// Parse the incoming xml
		var xml = google.maps.Xml.parse(data);
	  
	  
		  // Create marker object from incoming xml
		  var markers = xml.documentElement.getElementsByTagName("marker");
		  
		  if (markers.length > 0 && zoomPanOutWhenAddingMarkers == true){
		  	panZoomExtents = true;
		  }else{
		  	panZoomExtents = false;
		  			  
		  }		  
		  var marker = new Array(markers.length);
		  for (var i = 0; i < markers.length; i++){
				
				
			// Parse lat,lon from xml
			var point_lat = parseFloat(markers[i].getAttribute("lat"));
		    var point_lon = parseFloat(markers[i].getAttribute("lng"));
		    var projectID = markers[i].getAttribute("id");
		    var projectName = markers[i].getAttribute("name");
			var projectType = markers[i].getAttribute("category");
			var url = cakeRoot + 'projects/view/' + projectID				
			
			// Create point object 
		    var point = new google.maps.LatLng(point_lat,point_lon);			

			// Grow the marker boundary to include the new point
			markerBounds.extend(point);
	
		  	/*
	  		-------------------------------  		
		  		  Detail Bubble
	  		-------------------------------  				  	    
		  	*/  

			// Create a custom marker			  
			 var cartifactIcon = new google.maps.Icon();
			if (projectType == "office"){    
			       cartifactIcon.image = cakeRoot + 'img/marker_office.png';                                                    
			}else if(projectType == "hotel"){
			       cartifactIcon.image = cakeRoot + 'img/marker_hotel.png';
			}else if (projectType == "residential" || projectType == "mixed"){
			       cartifactIcon.image = cakeRoot + 'img/marker_residential.png';
			}
			cartifactIcon.iconSize = new google.maps.Size(31, 31);
			cartifactIcon.iconAnchor = new google.maps.Point(15, 12);
			cartifactIcon.infoWindowAnchor = new google.maps.Point(15, 0);
		  

			// Add marker		      
			marker[i] = new google.maps.Marker(point,cartifactIcon);
			addMapBubble(marker[i],url,projectName);
	          
	         

			// Add point on map
		    map.addOverlay(marker[i]);
	  }
	  currentMarkers = marker;
	}
	
 	/*
		-------------------------------  		
  		  Detail Bubble Tabs
		-------------------------------  				  	    
  	*/  

	google.maps.Event.addDomListener(map, 'extinfowindowupdate',function(){
        var windowContent = document.getElementById("bubble");
        var tabs = new Array(document.getElementById("tab0"),document.getElementById("tab1"),document.getElementById("tab2"));
        if( tabs.length > 0 ){
          var tabContentsArray = new Array(tabs.length);
          for( i=0; i < tabs.length; i++){
            tabContentsArray[i] = document.getElementById("tab"+i+"_content");
            if( i > 0){
            //  hide(tabContentsArray[i]);
            }
            tabs[i].setAttribute("name", i.toString());
          
            google.maps.Event.addDomListener(tabs[i],"click",function(){
              var tabIndex = this.getAttribute("name");
            
              for(tabContentIndex=0; tabContentIndex < tabs.length; tabContentIndex++){
                if( tabContentIndex == tabIndex ){
          		  document.getElementById("tab_"+tabContentIndex+"_image").src = cakeRoot + 'img/tab_'+tabContentIndex+'_active.png';
                  show(tabContentsArray[tabContentIndex]);
                }else{
          		  document.getElementById("tab_"+tabContentIndex+"_image").src = cakeRoot + 'img/tab_'+tabContentIndex+'.png';
                  hide(tabContentsArray[tabContentIndex]);
                }
              }
            });
          }
        }
    });
	
	// Helper function to hide the given DOM element
	function hide(element){
		element.style.display = "none";
		if (is_ie){
		}else{
			element.style.position = "absolute";
		}
	}
	// Helper function to show the given DOM element
	function show(element){
		element.style.display = "block";
		if (is_ie){
		}else{
			element.style.position = "relative";
		}
	}
	
		

	
	// Function to add bubble listener
	function addMapBubble(marker,url,projectName){
		google.maps.Event.addListener(marker, 'click', 
	        function(){ 
	   			closeDisplayTray();
	   			closeLegendPanel();
	   			closeHelpPanel();
	     		map.disableScrollWheelZoom();
				

	           this.openExtInfoWindow(
	            map,
	            "bubble",
	            "<div id='' class='tabs'>"+
					"<div class='tabs_header'>"+
						"<div id='tab0' class='tab'><img src='"+cakeRoot+"img/tab_0_active.png' id='tap_0_image' /></div> "+
						"<div id='tab1' class='tab'><img src='"+cakeRoot+"img/tab_1.png' id='tap_1_image' /></div> "+
						"<div id='tab2' class='tab'><img src='"+cakeRoot+"img/tab_2.png' id='tap_2_image' /></div> "+
					"</div>"+
					"<div class='tab_contents'>"+
						"<div id='tab0_content'>"+
							"<div class='tab_title'>"+projectName+"</div>"+
							"<div class='tab_info' >"+
							"<div class='tab_info_image'>"+
								"Loading "+projectName+"..."+
							"</div>"+
							"<div class='tab_info_col'>"+
								"<div class='tab_info_label'></div> <div class='tab_info_item'> </div>"+
								"<div class='tab_info_label'></div> <div class='tab_info_item'> </div>"+
								"<div class='tab_info_label'></div> <div class='tab_info_item'><br/><br/></div>"+
								"<div class='tab_info_label'></div> <div class='tab_info_item'></div>"+
								"<div class='tab_info_label'></div> <div class='tab_info_item'></div>"+
								"<div class='tab_info_label'></div> <div class='tab_info_item'></div>"+
							"</div>"+
						"</div>"+
						"</div>"+
						"<div id='tab1_content'>"+
							"<div class='tab_title'>"+projectName+"</div>"+
							"<div class='tab_info'>"+
								"<p>"+
								"Loading "+projectName+"..."+
								"</p>"+
							"</div>"+
						"</div>"+
						"<div id='tab2_content'>"+
							"<div class='tab_title'>"+projectName+"</div>"+
							"<div class='tab_info'>"+
								"<p>"+
								"Loading "+projectName+"..."+
								"</p>"+
							"</div>"+
						"</div>"+
					"</div>"+
				"</div>",
	            {ajaxUrl: url, beakOffset: 9}
	          );
	        }
	      );
	}
	
	// Listen for Bubble close to turn back on scroll wheel zoom
	google.maps.Event.addListener(map, "extinfowindowclose", function() {
		map.enableScrollWheelZoom();
	});	

	google.maps.Event.addListener(map, "extinfowindowopen", function() {
		hideLensTool();
	});	


	// Convert exported tile coordinates to google QuadKey function
	function TileToQuadKey ( tx,  ty,  zl){
		var quad;
		quad = "";
		for (var i = zl; i > 0; i--){
			var mask = 1 << (i - 1);
			var cell = 0;
			if ((tx & mask) != 0)
				cell++;
			if ((ty & mask) != 0)
				cell += 2;
			quad += cell;
			}
		return quad;
	}

	// Load Initial Map and Points    
	loadGoogleMap();
	

	
	/*
		// Load initial marker data [Disabled in case we want to add all points on load]
		var file_to_parse = cakeRoot + "projects/search.xml";
		// Grab Map Points			
		GDownloadUrl(file_to_parse, function(data, responseCode) {
			loadGoogleMapPoints(data);
		});
    */
	
  		/*
  		-------------------------------  		
	  		Tracker
  		-------------------------------  		 	    
  	*/  
	if (activateTracker == true){

	
			var tracker;
			var tackerBounds;
			checkZoomLevelForTracker();
			tracker = new BoundsTracker(trackerBounds, map);	
			// Create tracker
			tracker.enable();
		
	}	
	
	function createNewMapTracker(nb,eb,sb,wb) {
		if (activateTracker == true){

			
			// North East bound point
			var mapBoundNE = new google.maps.LatLng(nb, eb);
			
			// South West bound point
			var mapBoundSW = new google.maps.LatLng(sb, wb);
		
			// Create boundary that tracker activates when outside of	
			trackerBounds = new google.maps.LatLngBounds(mapBoundSW, mapBoundNE);
			if (typeof tracker == "object"){
				tracker.updateBounds(trackerBounds);
			}
		}	
	}
	
	
		// Check zoom levels for tracker bounds
	function checkZoomLevelForTracker(){
		if (currentZoomLevel < 14){
		//11-13 top left 34.329545, -118.874989 bottom right 33.691460, -117.875919 
			createNewMapTracker(  34.329545,-117.875919, 33.691460, -118.874989);
		}	
		else if (currentZoomLevel == 14 || currentZoomLevel == 15 ){
		//14-15 top left 34.117614, -118.373947 bottom right 33.971908, -118.122661 
			createNewMapTracker( 34.117614, -118.122661, 33.971908, -118.373947);

		}else{	
		//16-18 top left 34.075883, -118.277376 bottom right 34.021800, -118.220272
			createNewMapTracker(34.075883, -118.220272, 34.021800, -118.277376);
		}
	}






  	/*
  		-------------------------------  		
	  		Google Local Search
  		-------------------------------  		 	    
  	*/  
  	
  	
    var localSearch;
    var localSearchCurrentResults = [];
	var searchWell = dojo.byId("search_well");
	
	// Style submit button
	if (is_ie){
			// Eventually style button
	}else{
	   	dojo.attr(dojo.query("input.gsc-search-button")[0], 'type', 'image');
	   	dojo.attr(dojo.query("input.gsc-search-button")[0], 'src', cakeRoot + 'img/button_search.png');
	}
	
    function OnLocalSearch() {
		if (!localSearch.results) return;
		
		// Clear the map and the old search well
		//searchWell.innerHTML = "";
 
 	 	if(localSearch.cursor.currentPageIndex==0){ 
			removeLocalOverlays();
		} 

		// If IE7 just run one search to fix blank bubble bug 
		var localSearchPages = 2;
		if (is_ie){
			localSearchPages = 0;
		}
		
		if(localSearch.cursor.currentPageIndex<localSearchPages){ 
			localSearch.gotoPage(localSearch.cursor.currentPageIndex+1);
		}
		
		for (var i = 0; i < localSearch.results.length; i++) {
			 localSearchCurrentResults.push(new LocalResult(localSearch.results[i]));
		}
			 
		// Show the search well
		//var attribution = localSearch.getAttribution();
		//if (attribution) {
		//	searchWell.appendChild(attribution);
		//}
		//dojo.style(searchWell,"opacity","0")
		//dojo.style(searchWell,"display","block")
		//dojo.fadeIn({ duration:500, node: searchWell }).play();
		// move the map to the first result
		//var first = localSearch.results[0];
		//map.panTo(new google.maps.LatLng(first.lat, first.lng));
    }

	// Cancel the form submission, executing an AJAX Search API search.
	function CaptureForm(searchForm) {
		localSearch.execute(searchForm.input.value);
		return false;
	}

	// Cancel the form submission, executing an AJAX Search API search.
	function ClearForm(searchForm) {
		searchForm.input.value = '';
		removeLocalOverlays();
		return false;
	}

	function removeLocalOverlays(){
		for (var i = 0; i < localSearchCurrentResults.length; i++) {
			map.removeOverlay(localSearchCurrentResults[i].marker());
		}	
	}


	// A class representing a single Local Search result returned by the
	// Google AJAX Search API.
	function LocalResult(result) {
		this.result_ = result;
	    this.resultNode_ = this.myHtml();
      	//document.getElementById("search_well").appendChild(this.resultNode_);
		map.addOverlay(this.marker(localSearchIcon));
	}

	// Returns the GMap marker for this result, creating it with the given
	// icon if it has not already been created.
	LocalResult.prototype.marker = function(opt_icon) {
		if (this.marker_) return this.marker_;	
		var marker = new google.maps.Marker(new google.maps.LatLng(parseFloat(this.result_.lat),parseFloat(this.result_.lng)),opt_icon);
		google.maps.Event.bind(marker, "click", this, function() {		
			marker.openInfoWindow(this.myHtml());
			hideLensTool();

		});
		this.marker_ = marker;
		return marker;
	}


  // Returns the HTML we display for a result before it has been "saved"
    LocalResult.prototype.myHtml = function() {
      var container = document.createElement("div");
      container.className = "unselected";
      container.appendChild(this.result_.html.cloneNode(true));
      return container;
    }


	
  	/*
  		-------------------------------  		
	  		 	Lens Tool
  		-------------------------------  		 	    
  	*/  
  	
  	// Lens Tool state for toggle
  	var lensToolState = 0;
	var lens_tool_div = document.getElementById("lens_tool");
	var lens_tool_map_div = document.getElementById("lens_tool_map");
//	var lensTool = new GxMagnifier(map, null, lens_tool_map_div);

  	// Toggle Lens Tool state
  	function toggleLensTool(){
		if (lensToolState == 0){
			showLensTool();
		if (is_ie){
			hideLensTool();
			showLensTool();
		}
		}else{
			// Hide Lens Tool	
			hideLensTool();
		}
	}  	
  	function showLensTool(){

		// Close Info Window
		map.closeExtInfoWindow();


		lensTool = new GxMagnifier(map, null, lens_tool_map_div);
		
		lensToolState = 1;
	
		// Set Lens Tool map size
		lensTool.setSize(new google.maps.Size(270, 270));
		
		// Set Default Magnification Level
		lensTool.setMagnification(0);
		
		// Disable Default Mouse Tracking
		lensTool.disableMouseTracking();
		
		// Sync with map position and zoom
		lensTool.enableMapSync();
		
		// Enable prefetching
		//lensTool.enablePrefetch();
				
		var constraintContainer = function() {
	        var marginBox = dojo.marginBox("google_map");
	        boundary = {};
	        // Top, Left, Width, Height
	        boundary["t"] = 40;
	        boundary["l"] = 0;
	        boundary["w"] = marginBox.l + marginBox.w;
	        boundary["h"] = marginBox.h + marginBox.t - 35;
	        return boundary;
	    }
	
		// Make draggable
		var draggingLensTool = new dojo.dnd.move.constrainedMoveable(lens_tool_div, {
	        constraints: constraintContainer,
	        within: true
	    });
	
		// Move map in lens when dragging lens tool
		dojo.connect(draggingLensTool, "onMove", function(){
			lensTool.dragLens();
		}); 

		// Setup lens listners
		walkLensListenerArray();

		// Show Lens Tool 
		lens_tool_div.style.display = "block";
		lens_tool_map_div.style.display = "block";
		
		// Center map in tool
		lensTool.setCenterForOverlay();

		// Set inital lens state and lens listners
		changeLensState('se', 1);
		
		// Enable panning at edges
		//lensTool.enableAutoPan();
  	}
  	
	function hideLensTool(){
		lens_tool_div.style.display = "none";
		lens_tool_map_div.style.display = "none";
		dojo.byId("historic_credit").style.display = 'none';		
		lensToolState = 0;
		//delete lensTool;  	
  	}

  	// Grab click from Lens Tool button
	dojo.connect(dojo.byId("button_lens_tool_image"),"onclick",function(e){
		e.preventDefault();
		toggleLensTool();
 	});	
 	

	// Initialize the lens tool variables
	setLensToolConfig();

 	// Set current map to SE map type
 	lensQuadrantMapType['se'] = map.getCurrentMapType(); // This has to be set later as its our current map type
	
 	var lensZoomLevel = 1;

 	// Change lens state depending on click
 	function changeLensState(quadrant, level, changeZoom){

 		// Reset lens state
 		resetLensState();
		
		if (changeZoom == false){
			level = lensZoomLevel;
		}

		lensZoomLevel = level;

 		// Set active zoom level marker
 		var level1 = '';
 		var level2 = '';
 		var level3 = '';		
 		if (level == lensMagLevel[0]){level1 = '_selected';}
 		if (level == lensMagLevel[1]){level2 = '_selected';}
 		if (level == lensMagLevel[2]){level3 = '_selected';} 		 		
	
		// Change BG Image
		dojo.byId('lens_tool_bg').style.backgroundImage = "url('" + cakeRoot + "img/bg_lens_" + quadrant + ".png')";

		// Set images for current state
		dojo.byId("button_lens_" + quadrant + "_1x_image").src = cakeRoot + 'img/button_lens_' + quadrant + '_1x_active' + level1 + '.png';
		dojo.byId("button_lens_" + quadrant + "_2x_image").src = cakeRoot + 'img/button_lens_' + quadrant + '_2x_active' + level2 + '.png';
		dojo.byId("button_lens_" + quadrant + "_4x_image").src = cakeRoot + 'img/button_lens_' + quadrant + '_4x_active' + level3 + '.png';
		dojo.byId("button_lens_" + quadrant + "_title_image").src = cakeRoot + 'img/button_lens_' + quadrant + '_title_active.png';

		if (lensQuadrantMapType[quadrant] == 'custom'){
			
			// Set special custom map
			lensTool.omap.setMapType(createCustomMap(customMapDirectory[level],customMapFormat[level]));			

			// Set Magnification Level
			lensTool.setMagnification(0); 	

			
			// Show custom credit
			dojo.byId("historic_credit").style.display = 'block';
		
		}else{
			
			// Set Map 
			lensTool.omap.setMapType(lensQuadrantMapType[quadrant]);

			// Set Magnification Level
			lensTool.setMagnification(lensZoomDepth[level]); 	

			// Hide custom credit
			dojo.byId("historic_credit").style.display = 'none';		
		}
		
	}
 	
 	// Reset lens state
 	function resetLensState(){
		var quadrant, level;
		// Walk array of zoom levels and create listeners 
		for (i = 0; i < lensQuadrant.length; i++){
			quadrant = lensQuadrant[i];
			// Change BG Image
			dojo.byId("button_lens_" + quadrant + "_title_image").src = cakeRoot + 'img/button_lens_' + quadrant + '_title.png';
			for (ii = 0; ii < lensMagLevel.length; ii++){
				level = lensMagLevel[ii];
				// Set images for current state
				dojo.byId("button_lens_" + quadrant + "_"+ level +"x_image").src = cakeRoot + 'img/button_lens_' + quadrant + '_' + level + 'x.png';
			}	
		}
 	}

	// Create listener for click on lens buttons
	function createLensListener(quadrant, level, title){
		var button, changeZoom;
		if (title == true){
			button = 'title';
			changeZoom = false;
		}else{
			button = level + 'x_image';
			changeZoom = true;
		}
		dojo.connect(dojo.byId("button_lens_" + quadrant + "_"+button),"onclick",function(e){
			e.preventDefault();
			changeLensState(quadrant, level, changeZoom);
	 	});		
	}
	
	// Set up listeners for lens clicks
	function walkLensListenerArray(){
		// Walk array of zoom levels and create listeners 
		for (i = 0; i < lensQuadrant.length; i++){
				createLensListener(lensQuadrant[i],1,true);
			for (ii = 0; ii < lensMagLevel.length; ii++){
				createLensListener(lensQuadrant[i],lensMagLevel[ii],false);
			}	
		}
	}

	// Check zoom levels
	function checkZoomLevelForLens(){
		// Hide 2x if zoom level > 17 on se map
		if (currentZoomLevel > 17){
			dojo.byId("button_lens_se_2x").style.display = 'none';
		}else{
			dojo.byId("button_lens_se_2x").style.display = 'block';		
		}		
		
		// Hide 4x if zoom level > 16 on se map
		if (currentZoomLevel > 16){
			dojo.byId("button_lens_se_4x").style.display = 'none';
		}else{
			dojo.byId("button_lens_se_4x").style.display = 'block';		
		}		
	}
	
	// Create custom map objects
	function createCustomMap(directory,format){
			
			// Get tile URL from coordinate		    	    
		    var customTiles = function (a,b) {
				var f = cakeRoot + "img/tiles/" + directory + "/" + TileToQuadKey(a.x,a.y,b) + "." + format;
				return f;
			}
	
			// Define attributes for custom tile layer
			var customLayer = new Array();
			customLayer[0] = new google.maps.TileLayer();
			customLayer[0].getTileUrl = customTiles;


			// Create cutom tile layer object for custom tiles
	        customMap = new google.maps.MapType(customLayer,G_SATELLITE_MAP.getProjection(),'Cartifact Map',{maxResolution:maxZoomLevel, minResolution:minZoomLevel}); 
			customMap.getErrorMessage = function() { return missingTileErrorMessageLens; } 
			
			// Set map to custom tile overlay
			return customMap;
	}
  	
  	/*
  		-------------------------------  		
	  		 	Drag Zoom 
  		-------------------------------  		 	    
  	*/  

	if (enableDragZoom == true){

		// Hide the default button
		var otherOpts = { 
			buttonStartingStyle: {display: 'none'},
			buttonStyle: {display: 'none'},
			buttonZoomingHTML: 'Drag a region on the map (click here to reset)',
			buttonZoomingStyle: {display: 'none'},
			overlayRemoveTime: 2000
		} 
		
		// Create Drag Zoom object
		var dragZoom = new DragZoomControl(boxStyle, otherOpts, {});
		map.addControl(dragZoom);
	
		// Call Drag Zoom when clicking on button
		dojo.connect(dojo.byId("button_drag_zoom_image"),"onclick",function(e){
			e.preventDefault();
			map.closeExtInfoWindow();
			dragZoom.initiateZoom();
	 	});
	
	}
	
	

  	/*
  		-------------------------------  		
	  		 	Map Zoom Control
  		-------------------------------  		 	    
  	*/   
  	
  	var currentZoomLevel = map.getZoom();
	
	checkZoomLevelForLens();
	checkZoomLevelForLegend();
	checkZoomLevelForTracker();
	
	// Create Zoom button click listener
	function createZoomClickListner(level){
		dojo.connect(dojo.byId("button_zoom_"+level),"onclick",function(e){
			e.preventDefault();
	    	resetZoomSelectedIcon(currentZoomLevel);
	    	map.setZoom(level);
	    	setZoomSelectedIcon(currentZoomLevel);
	     });	
	}
	
	// Walk zoom levels
	for (i = minZoomLevel; i <= maxZoomLevel; i++){
		createZoomClickListner(i);
	}

  	// Grab click from Zoom In button
	dojo.connect(dojo.byId("button_zoom_in"),"onclick",function(e){
		e.preventDefault();
    	resetZoomSelectedIcon(currentZoomLevel);
    	map.zoomIn();
		currentZoomLevel = map.getZoom();
    	setZoomSelectedIcon(currentZoomLevel);
     });	

  	// Grab click from Zoom Out button
	dojo.connect(dojo.byId("button_zoom_out"),"onclick",function(e){
		e.preventDefault();
    	resetZoomSelectedIcon(currentZoomLevel);
    	map.zoomOut();
		currentZoomLevel = map.getZoom();
    	setZoomSelectedIcon(currentZoomLevel);
    });	 
    
    // Reset previous Zoom Selected icon
    function resetZoomSelectedIcon(zoomLevel){
    	var icon = "#button_zoom_"+zoomLevel+" img";
    	dojo.attr(dojo.query(icon)[0], 'src', cakeRoot + 'img/button_zoom_level.png');
    } 
    
    // Set Zoom Selected icon
    function setZoomSelectedIcon(zoomLevel){
    	var icon = "#button_zoom_"+zoomLevel+" img";
    	dojo.attr(dojo.query(icon)[0], 'src', cakeRoot + 'img/button_zoom_level_selected.png');
    } 
    
    // Track Zoom
	google.maps.Event.addListener(map, "zoomend", function() {
    	resetZoomSelectedIcon(currentZoomLevel);
		currentZoomLevel = map.getZoom();
    	setZoomSelectedIcon(currentZoomLevel);    	    	
		if (panRestrict == true){
			setMapBounds();
		}
		checkZoomLevelForLens();
		checkZoomLevelForLegend();
		checkZoomLevelForTracker();
	});

  	/*
  		-------------------------------  		
  		 	Display Tray Animation
  		-------------------------------  		  	    
  	*/   

	// Create Display Tray animations objects
	var openTray = dojo.fx.slideTo({node: "display_tray",duration: trayOpenDuration, left: 0, top: 0});
	var tuckTray = dojo.fx.slideTo({node: "display_tray",duration: trayOpenDuration, left: 0, top: -212});
	var closeTray = dojo.fx.slideTo({node: "display_tray",duration: trayOpenDuration, left: 0, top: -250});

	// Tray state, closed=0 up=1, down=2
	var trayState = 0; 

	// Open Display Tray and flip images
	function openDisplayTray(){
		if (legendState == 2){
 			closeLegendPanel();    	
		}
		if (helpState == 2){
 			closeHelpPanel();    	
		}
		if (searchTrayState > 0){
			closeGoogleSearch();    	
		}
		
		openTray.play();
		dojo.byId("display_tray_handle_image").src = cakeRoot + 'img/bg_display_tray_handle_down.png';
		dojo.byId("button_find_building_image").src = cakeRoot + 'img/button_find_building_up.png';
		map.closeExtInfoWindow();
		startRollUpDisplayTrayTimer();
		trayState = 2;

	}

	// Close Display Tray and flip images
	function closeDisplayTray(){
		if (trayState > 0){
			if (checkForFormData() == 0){
				closeTray.play();			
				dojo.byId("button_find_building_image").src = cakeRoot + 'img/button_find_building.png';
				trayState = 0;		
			}else{
				tuckTray.play();
				dojo.byId("display_tray_handle_image").src = cakeRoot + 'img/bg_display_tray_handle_up.png';
				dojo.byId("button_find_building_image").src = cakeRoot + 'img/button_find_building.png';
				trayState = 1;		
			}
		}
	}

	// Check to see if any checkboxes are selected or form fields have data: 0 for no content, 1 for content
	function checkForFormData(){
		var formContent = 0;
		var displayTrayCheckboxes = dojo.query('#displayTrayForm input[type=checkbox]');
		// Check for checked checkboxes
		for (i = 0; i < checkboxLabels.length; i++){
			var displayTrayCheckbox = displayTrayCheckboxes[i];
			if (displayTrayCheckbox.checked == true){
				formContent = 1;
			}
		}
		// Check for data in form fields
		if (dojo.byId("SearchBuildingName").value != ''){
			formContent = 1;
		}
		if (dojo.byId("SearchAddress").value != ''){
			formContent = 1;
		}		
		return formContent;	
	}
	

	
	// Toggle Display Tray
	function toggleDisplayTray(){
		if (trayState == 1 || trayState == 0){
			openDisplayTray();    				
		}else{
			closeDisplayTray();    	
		}
	}

   	// Grab click from find building button
	dojo.connect(dojo.byId("button_find_building"),"onclick",function(e){
		e.preventDefault();
    	toggleDisplayTray();
    });	   

   	// Grab click from Display Tray handle	    
	dojo.connect(dojo.byId("display_tray_handle"),"onclick",function(e){
		e.preventDefault();
    	toggleDisplayTray();
    });	
    
    // Roll up Display Tray after 8 seconds
    var rollUpDisplayTrayTimer;
	function startRollUpDisplayTrayTimer(){
			clearTimeout(rollUpDisplayTrayTimer);
			rollUpDisplayTrayTimer = setTimeout(function(){closeDisplayTray();}, displayTrayCloseDelay);
	 }
	 
	 // Reset timer on any clicks on Display Tray
	dojo.connect(dojo.byId("display_tray"),"onclick",function(e){
    	startRollUpDisplayTrayTimer();
    });	   
    
	
	 
	 /*
  		-------------------------------  		
	  		 	Legend Animation
  		-------------------------------  		  	    
  	*/   

	// Create Legend animations objects
	var openLegend = dojo.fx.slideTo({node: "legend",duration: trayOpenDuration, left: 0, top: -20});
	var closeLegend = dojo.fx.slideTo({node: "legend",duration: trayOpenDuration, left: 0, top: -180});

	// Legend state, up=1, down=2
	var legendState = 1; 

	// Open Legend 
	function openLegendPanel(){
		openLegend.play();
		map.closeExtInfoWindow();
		closeHelpPanel();
		legendState = 2;
	}

	// Close Legend
	function closeLegendPanel(){
		closeLegend.play();
		legendState = 1;		
	}
	
	// Toggle Legend
	function toggleLegend(){
		if (legendState == 1){
			openLegendPanel();    				
		}else{
			closeLegendPanel();    	
		}
	}

   	// Grab click from legend button
	dojo.connect(dojo.byId("button_legend_image"),"onclick",function(e){
		e.preventDefault();
    	closeDisplayTray();
		closeGoogleSearch();    	
    	toggleLegend();
    });	
    
    	// Check zoom levels
	function checkZoomLevelForLegend(){
		//legend_1=11,12,13
		//legend_2=14,15
		//legend_3=16,17,18

		if (currentZoomLevel < 14){
				dojo.byId("legend_image").src = cakeRoot + 'img/legend_1.png';	
		} else if (currentZoomLevel == 14 || currentZoomLevel == 15 ){
				dojo.byId("legend_image").src = cakeRoot + 'img/legend_2.png';	
		
		} else {
				dojo.byId("legend_image").src = cakeRoot + 'img/legend_3.png';	
		
		}	
	}

	/*
  		-------------------------------  		
  		 	Welcome Animation
  		-------------------------------  		  	    
  	*/   
	
	// Create Welcome animations objects
	var hideWelcome = dojo.fadeOut({node: "welcome_screen",duration: trayOpenDuration});

	function removeWelcome(){
			dojo.style(dojo.byId("welcome_screen"),'display','none');
	}
	

	
   	// Grab click from welcome 
	dojo.connect(dojo.byId("welcome_screen"),"onclick",function(e){
		e.preventDefault();
		setTimeout(function(){removeWelcome();}, trayOpenDuration);
		hideWelcome.play();
		
    });	
	
   	// Grab click from welcome 
	dojo.connect(dojo.byId("welcome_screen"),"onclick",function(e){
		e.preventDefault();
		if (is_ie){
			if (is_ie.version < 7){
				location.href = 'http://www.microsoft.com/windows/downloads/ie/getitnow.mspx';
			}
		}
			setTimeout(function(){removeWelcome();}, trayOpenDuration);
			hideWelcome.play();
		
    });	


	 /*
  		-------------------------------  		
	  		 	Help Animation
  		-------------------------------  		  	    
  	*/   

	// Create Help animations objects
	var openHelp = dojo.fx.slideTo({node: "help",duration: trayOpenDuration, left: 0, top: -20});
	var closeHelp = dojo.fx.slideTo({node: "help",duration: trayOpenDuration, left: 0, top: -320});

	// Help state, up=1, down=2
	var helpState = 1; 

	// Open Help 
	function openHelpPanel(){
		openHelp.play();
		map.closeExtInfoWindow();
		closeLegendPanel();
		helpState = 2;
	}

	// Close Help
	function closeHelpPanel(){
		closeHelp.play();
		helpState = 1;		
	}
	
	// Toggle Help
	function toggleHelp(){
		if (helpState == 1){
			openHelpPanel();    				
		}else{
			closeHelpPanel();    	
		}
	}

   	// Grab click from help button
	dojo.connect(dojo.byId("button_help_image"),"onclick",function(e){
		e.preventDefault();
    	closeDisplayTray();
		closeGoogleSearch();    	
    	toggleHelp();
    });	

	 

	/*
  		-------------------------------  		
  		 	Google Search Tray Animation
  		-------------------------------  		  	    
  	*/   

	// Create Google Search animations objects
	var openSearchTray = dojo.fx.slideTo({node: "google_search",duration: trayOpenDuration, left: 0, top: 0});
	var tuckSearchTray = dojo.fx.slideTo({node: "google_search",duration: trayOpenDuration, left: 0, top: -72});
	var closeSearchTray = dojo.fx.slideTo({node: "google_search",duration: trayOpenDuration, left: 0, top: -150});

	// SearchTray state, closed=0 up=1, down=2
	var searchTrayState = 0; 

	// Open Google Search and flip images
	function openGoogleSearch(){
		if (legendState == 2){
 			closeLegendPanel();    	
		}
		if (helpState == 2){
 			closeHelpPanel();    	
		}


		//if (searchTrayState > 0){
			closeDisplayTray();    	
		//}
		
		
		openSearchTray.play();
		dojo.byId("google_search_handle_image").src = cakeRoot + 'img/bg_display_tray_handle_down.png';
		dojo.byId("button_google_search_image").src = cakeRoot + 'img/button_google_search_up.png';
		map.closeExtInfoWindow();
		startRollUpGoogleSearchTimer();
		searchTrayState = 2;

	}

	// Close Google Search and flip images
	function closeGoogleSearch(){
		if (searchTrayState > 0){
			if (checkForFormData() == 0){
				closeSearchTray.play();			
				dojo.byId("button_google_search_image").src = cakeRoot + 'img/button_google_search.png';
				searchTrayState = 0;		
			}else{
				tuckSearchTray.play();
				dojo.byId("google_search_handle_image").src = cakeRoot + 'img/bg_display_tray_handle_up.png';
				dojo.byId("button_google_search_image").src = cakeRoot + 'img/button_google_search.png';
				searchTrayState = 1;		
			}
			//dojo.fadeOut({ duration:500, node: "search_well" }).play();
			//setTimeout(function(){dojo.style("search_well","display","none");}, 700);
		}
	}

	// Check to see if any checkboxes are selected or form fields have data: 0 for no content, 1 for content
	function checkForFormData(){
		var formContent = 0;
		// Check for data in form fields
		//if (googleSearchField.value != ''){
		//	formContent = 1;
		//}
		
		return formContent;	
	}
	

	
	// Toggle Google Search
	function toggleGoogleSearch(){
		if (searchTrayState == 1 || searchTrayState == 0){
			openGoogleSearch();    				
		}else{
			closeGoogleSearch();    	
		}
	}

   	// Grab click from find building button
	dojo.connect(dojo.byId("button_google_search"),"onclick",function(e){
		e.preventDefault();
    	toggleGoogleSearch();
    });	   

   	// Grab click from Google Search handle	    
	dojo.connect(dojo.byId("google_search_handle"),"onclick",function(e){
		e.preventDefault();
    	toggleGoogleSearch();
    });	

   	// Grab click from Map handle	    
	dojo.connect(dojo.byId("google_map"),"onclick",function(e){
    	closeGoogleSearch();
    });	
    
    // Roll up Google Search after 8 seconds
    var rollUpGoogleSearchTimer;
	function startRollUpGoogleSearchTimer(){
			clearTimeout(rollUpGoogleSearchTimer);
			rollUpGoogleSearchTimer = setTimeout(function(){closeGoogleSearch();}, displayTrayCloseDelay);
	 }
	 
	 // Reset timer on any clicks on Google Search
	dojo.connect(dojo.byId("google_search"),"onclick",function(e){
    	startRollUpGoogleSearchTimer();
    });	   
    

	
	
	 /*
  		-------------------------------  		
  		 	Display Tray AJAX
  		-------------------------------  		  	    
  	*/    
    
	// AJAX submit Display Tray form function
	var formSubmitAjax = function(e){
		// Submit the form	
		dojo.xhrPost({
				url:  cakeRoot + "projects/search.xml",
				form: "displayTrayForm",
				handleAs: "text",
				handle: function(data,args){
				// Set map points 			
				loadGoogleMapPoints(data);

				if (panZoomExtents == true){
				// Set the center to fit the boundary
				map.setCenter(markerBounds.getCenter());
				
				// Set the zoom level to find the boundary
				map.setZoom(map.getBoundsZoomLevel(markerBounds));
				}
			}

		});
	};
	
	
	// Grab form submit
	dojo.connect(dojo.byId("displayTrayForm"),"onsubmit",function(e){
		e.preventDefault();
		dojo.attr(dojo.byId('searchAddressPopup'),'style','display: none');			
		dojo.attr(dojo.byId('searchBuildingNamePopup'),'style','display: none');			

	});
	
	// Check checkbox when title is clicked
	var checkboxLabels = dojo.query('#displayTrayForm label');
	var displayTrayCheckboxes = dojo.query('#displayTrayForm input[type=checkbox]');
	for (i = 0; i < checkboxLabels.length; i++){
		var checkboxLabel = checkboxLabels[i];
		var displayTrayCheckbox = displayTrayCheckboxes[i];
		checkCheckbox(checkboxLabel,displayTrayCheckbox);
	}

	//  Enable Sale Prices when Condos checkboxes are clicked
	var salesDivs = dojo.query('.sale_type');
	for (i = 0; i < salesDivs.length; i++){
		//enableCheckboxes(salesDivs[i],'#sale_price input');
	}	
	
	// Enable Rental Prices when Rentals are clicked
	var salesDivs = dojo.query('.rental_type');
	for (i = 0; i < salesDivs.length; i++){
		//enableCheckboxes(salesDivs[i],'#rental_price input');
	}		
	
	// Enable checkboxes
	function enableCheckboxes(checkboxDiv,divToEnable){
		dojo.connect(checkboxDiv,"onclick",function(e){
			var enableMe = dojo.query(divToEnable);
			for (i = 0; i < enableMe.length; i++){
				enableMe[i].disabled = false;
			}	
		});
	}

	//	Checkbox checking function
	function checkCheckbox(checkboxLabel,checkbox){
		dojo.connect(checkboxLabel,"onclick",function(e){
			if (checkbox.checked == true){
				checkbox.checked = false;
			}else{
				checkbox.checked = true;
			}
		});
	}
	
	
	// Clear criteria
	dojo.connect(dojo.byId("button_clear_criteria"),"onclick",function(e){
		e.preventDefault();
		var displayTrayInputFields = dojo.query("#residential_search input");
		for (i = 0; i < displayTrayInputFields.length; i++){
			displayTrayInputFields[i].checked = false ;
		}
		var displayTrayInputFieldsToEnable = dojo.query("#residential_search input.initial_checked");
		for (i = 0; i < displayTrayInputFieldsToEnable.length; i++){
			displayTrayInputFieldsToEnable[i].checked = true ;
		}			
	});

	dojo.connect(dojo.byId("button_clear_criteria_office"),"onclick",function(e){
		e.preventDefault();
		var displayTrayInputFields = dojo.query("#office_search input");
		for (i = 0; i < displayTrayInputFields.length; i++){
			displayTrayInputFields[i].checked = false ;
		}
		var displayTrayInputFieldsToEnable = dojo.query("#office_search input.initial_checked");
		for (i = 0; i < displayTrayInputFieldsToEnable.length; i++){
			displayTrayInputFieldsToEnable[i].checked = true ;
		}			
	});
	
		dojo.connect(dojo.byId("button_clear_criteria_hotel"),"onclick",function(e){
		e.preventDefault();
		var displayTrayInputFields = dojo.query("#hotel_search input");
		for (i = 0; i < displayTrayInputFields.length; i++){
			displayTrayInputFields[i].checked = false ;
		}
		var displayTrayInputFieldsToEnable = dojo.query("#hotel_search input.initial_checked");
		for (i = 0; i < displayTrayInputFieldsToEnable.length; i++){
			displayTrayInputFieldsToEnable[i].checked = true ;
		}			
	});

	// Select Status:Completed on Housing Type clicl
	dojo.connect(dojo.byId("housing_types"),"onclick",function(){
		dojo.byId("status_completed").checked = true ;
	});	 
	

	// Submit form on click
	dojo.connect(dojo.byId("displayTrayForm"),"onclick",formSubmitAjax);

		
	// Load Default Map Points When Clear is Clicked    	
	dojo.connect(dojo.byId("button_clear"),"onclick",function(){
		dojo.byId("SearchBuildingName").value = '';
		dojo.byId("SearchAddress").value = '';	
		//formSubmitAjax();
	});	 

	
	 /*
  		-------------------------------  		
  		 	Auto-Complete
  		-------------------------------  		  	    
  	*/    	

	// Grab building address field on change and search
	dojo.connect(dojo.byId("SearchAddress"),"onkeyup",function(){
		dojo.attr(dojo.byId('searchBuildingNamePopup'),'style','display: none');
		startRollUpDisplayTrayTimer();
		dojo.xhrGet({
			url:  cakeRoot + "projects/building_addresses.xml",
			content: {name: dojo.byId("SearchAddress").value},
			handleAs: "text",
			handle: function(data,args){
				populatePopup(data,"searchAddressPopup");
			}
		})

	});	 

			
	// Grab building name field on change and search
	dojo.connect(dojo.byId("SearchBuildingName"),"onkeyup",function(){
		startRollUpDisplayTrayTimer();
		dojo.attr(dojo.byId('searchAddressPopup'),'style','display: none');
		dojo.xhrGet({
			url:  cakeRoot + "projects/building_names.xml",
			content: {name: dojo.byId("SearchBuildingName").value},
			handleAs: "text",
			handle: function(data,args){
				populatePopup(data,"searchBuildingNamePopup");
			}
		})
	});	 

 

	// Parse building names object and create box with options to click
	function populatePopup(data,popupNode){
			dojo.byId(popupNode).innerHTML = data;
			dojo.attr(dojo.byId(popupNode),'style','display: block');
			setupSearchOptionTrigges();
	}
	
	function setupSearchOptionTrigges(){
	  	// Grab click on Address options
		var optionFields = dojo.query('#searchAddressPopup li');
		for (i = 0; i < optionFields.length; i++){
			updateSearchField(optionFields[i],'searchAddressPopup','SearchAddress','SearchBuildingName');
		}
	
	  	// Grab click on Building Name options
		var optionFields = dojo.query('#searchBuildingNamePopup li');
		for (i = 0; i < optionFields.length; i++){
			updateSearchField(optionFields[i],'searchBuildingNamePopup','SearchBuildingName','SearchAddress');
		}
	}
	
	// Set search field and close box
	function updateSearchField(option,optionPopup,searchField,clearField){
		dojo.connect(option,"onclick",function(e){
			dojo.byId(searchField).value = option.innerHTML ;			
			dojo.byId(optionPopup).innerHTML = '';
			dojo.byId(clearField).value = '';	
			dojo.attr(dojo.byId(optionPopup),'style','display: none');			
			e.preventDefault();
		});
	}
	
	// Hide Address Popup on blur
	dojo.connect(dojo.byId("SearchAddress"),"onblur",function(e){
		e.preventDefault();
	});	 
	
	// Hide Building Name Popup on blur
	dojo.connect(dojo.byId("SearchBuildingName"),"onblur",function(e){
		e.preventDefault();
	});	
	
	
	
}); // End of Dojo On Load