var COMMON_SEARCH_WORDS = new Array("the", "mtu", "michigan tech", "of");
var SEARCH_MARKER = [];
var SEARCH_MARKER_LABEL = [];
var SEARCH_MARKER_PRINT = [];
var SEARCH_MARKER_INFO = [];
var SEARCH_MARKER_POINT = [];
var SEARCH_MARKER_INDEX;
var FOUND_CAMPUS_NAMES = "";
var FOUND_COMMON_CAMPUS_NAMES = "";
var QUERY_LIST = "";
var QUERY_WORDS = [];
var testing = 0;
var searchClicked = [];

var bounds = new GLatLngBounds();
// Prototype trim function, necessary for xml variables
String.prototype.trim = function() { 
							return this.replace(/^\s+|\s+$/g, ''); 
						}

/**
 * This function will query xml files for given input,
 * and once found, will place anchor in the
 * search result placeholder linked to
 * the searched building marker on the map.
 */
 
function searchMap(strQuery)
{
	
	var strQuery = strQuery;
	SEARCH_RESULT = '<br><div class="staticText2" style="border-bottom:1px solid #989898;">NUMBER - Building Name</div><ul id="searchResult" class="locationMarker">';
	
	MTU_MAP.closeInfoWindow();
	

	var foundMarkerNames = [];
	if(SEARCH_MARKER_PRINT.length > 0){
		
		var xmlMarkers = MTU_XML_DOC_SEARCH.documentElement.getElementsByTagName("marker");
		var labels = MTU_XML_DOC_SEARCH.documentElement.getElementsByTagName("label");
		
		for (var h = 0; h < SEARCH_MARKER_PRINT.length; h++){
			var testStr = SEARCH_MARKER_PRINT[h];
			testStr = testStr.replace(/&(lt|gt);/g, function (strMatch, p1){
												return (p1 == "lt")? "<" : ">"; //trim all tags
			});
			var testStrStripped = testStr.replace(/<\/?[^>]+(>|$)/g, "");
			testStrStripped = testStrStripped.substring(testStrStripped.indexOf("-")+1, testStrStripped.indexOf("(") -1);
			testStrStripped=testStrStripped.replace( /( ){2,}/g," ");  //convert multiple spaces to a single space
			testStrStripped=testStrStripped.trim();                     //trim white space from ends of each line
			foundMarkerNames.push(testStrStripped);
		}
		
		for (var i = 0; i < SEARCH_MARKER.length; i++){
		
			for (var j = 0; j < foundMarkerNames.length; j++){
				
				var foundMarker = foundMarkerNames[j];
				foundMarker = foundMarker.trim();
				
				for (var k = 0; k < xmlMarkers.length; k++){
					
					var nodeTypeValue = xmlMarkers[k].childNodes[1].firstChild.nodeType;
					
					if(nodeTypeValue == 1){ // IE nodeType = 1
						var xmlMarker = xmlMarkers[k].childNodes[0].firstChild.nodeValue;
					} else if (nodeTypeValue == 3){ // other browsers nodeType = 3
						var xmlMarker = xmlMarkers[k].childNodes[1].firstChild.nodeValue;	
					}
					
					if(xmlMarker != null) xmlMarker = xmlMarker.trim();
					
					if(foundMarker == xmlMarker){
						
						var lat = parseFloat(xmlMarkers[k].getAttribute("lat"));
						var lng = parseFloat(xmlMarkers[k].getAttribute("lng"));
						var pointCoords = new GLatLng();
						pointCoords = SEARCH_MARKER[i].getPoint();
						var pointLat = parseFloat(pointCoords.lat());
						var pointLng = parseFloat(pointCoords.lng());
						if(pointLat == lat && pointLng == lng){
								
							MTU_MAP.removeOverlay(SEARCH_MARKER[i]);
					
						}
						
					}
				
				}
			
			}
			
		}
		
		for (var z = 0; z < SEARCH_MARKER_LABEL.length; z++){
			
			MTU_MAP.removeOverlay(SEARCH_MARKER_LABEL[z]);	
		
		}
		
	}
	
	
	/*
	var mylist=document.getElementById("legendInside");
	var myitems= mylist.getElementsByTagName("div");
	
	for (i=0; i<myitems.length; i++) {
		var currClass = myitems[i].className;
		if(currClass.match("active")) {
		var mycat = myitems[i].className.replace(/active/, "");
		mycat = mycat.replace(/ /, "");
		show("",mycat);
		}
	}
	*/
	//MTU_MAP.clearOverlays();
	
	SEARCH_MARKER = removeArrayContent(SEARCH_MARKER);
	SEARCH_MARKER_INFO = removeArrayContent(SEARCH_MARKER_INFO);
	SEARCH_MARKER_POINT = removeArrayContent(SEARCH_MARKER_POINT);
	SEARCH_MARKER_PRINT = removeArrayContent(SEARCH_MARKER_PRINT);
	SEARCH_MARKER_LABEL = removeArrayContent(SEARCH_MARKER_LABEL);
	MTU_MARKER_PRINT_DIV = removeArrayContent(MTU_MARKER_PRINT_DIV);
	SEARCH_MARKER_INDEX = 0;
	
	
	// remove any other markers from the map, reset map and input controls, recenter map
	
	/*MTU_MAP.closeInfoWindow();
    MTU_MAP.clearOverlays();
	MTU_MAP.setCenter(new GLatLng(47.115504, -88.544491), 15);
	
	setOpacity(60);
	opacitySlider.set(60);
	zoomSlider.set(15);
	
	document.getElementById("alllotsbox").checked = false;
	document.getElementById("allbox").checked = false;
	document.getElementById("academicbox").checked = false;
	document.getElementById("residencebox").checked = false;
	document.getElementById("otherbox").checked = false;
	document.getElementById("studentbox").checked = false;
	document.getElementById("facultystaffbox").checked = false;
	document.getElementById("visitorbox").checked = false;*/

	var oldcenter = MTU_MAP.getCenter();
	var oldzoom = MTU_MAP.getZoom();
	bounds = new GLatLngBounds();
	doSearch(MTU_XML_DOC_SEARCH, strQuery);
	//doSearch(MTU_XML_DOC_OTHERS, strQuery);
	//doSearch(MTU_XML_DOC_CLASSROOM, strQuery);
	//doSearch(MTU_XML_DOC_RESIDENCE, strQuery) ;
	
	//doSearch(MTU_XML_DOC_ALL_LOTS, strQuery);
	//doSearch(MTU_XML_DOC_STUDENT_LOTS, searchWord);
	//doSearch(MTU_XML_DOC_FACULTY_STAFF_LOTS, searchWord);
	//doSearch(MTU_XML_DOC_VISITOR_LOTS, searchWord);
		
	if(SEARCH_MARKER_INDEX == 0) //NO SEARCH RESULTS FOUND
	{
		SEARCH_RESULT = "<br><b>&nbsp;&nbsp;Sorry, no search results found.</b>";
		document.getElementById('searchResultDisplay').innerHTML = SEARCH_RESULT;
	}
	else
	{
		SEARCH_RESULT += "</ul>";
		document.getElementById('searchResultDisplay').innerHTML = SEARCH_RESULT;
	}
	FOUND_CAMPUS_NAMES = "";
	FOUND_COMMON_CAMPUS_NAMES = "";
	//displayLoadingInfo("off") ;

}

function isCommonWord(strCheck)
{
	for(var j = 0 ; j < COMMON_SEARCH_WORDS.length ; j++)
	
	{
		if(COMMON_SEARCH_WORDS[j] == strCheck)
		{
			return true;
		}
	}
	
	return false;
}


function doSearch(xmlFile, query)
{
	
	var bldId ;
	var bldName ;
	var bldCommonName;
	var imgId;
	var matchingMarkerIndex ;
		
	var infoTabs = [] ;
	var infoTabContents = [] ;
	
	// obtain the array of markers and loop through it
	var markers = xmlFile.documentElement.getElementsByTagName("marker");

	if(query != null){
		var querySets = query.split(" ");
	}
	
	for (var i = 0; i < markers.length; i++)
	{	
		bldId = markers[i].getElementsByTagName("label")[0].getAttribute("id") ;//xml label id value
		bldImgId = markers[i].getElementsByTagName("label")[0].getAttribute("imgId") ;
		bldName = GXml.value(markers[i].getElementsByTagName("label")[0]);//html building name value
		bldCommonName = markers[i].getElementsByTagName("label")[0].getAttribute("commonName");//html common building name value
		var bldNameHtml = "" ;
		
		if (query != null){
			for (var a = 0; a < querySets.length; a++){
				var queryWord = querySets[a];
				queryWord = queryWord.trim();
				
				if(isCommonWord(queryWord) == false){
					
					if(bldId) {
						if(bldId.toLowerCase() == queryWord.toLowerCase())//if query is building id
						{
							matchingMarkerIndex = i ;
							bldId = "<b>" + bldId + "</b>" ;
							bldNameHtml = bldName;
							
						}
					} else {
						bldId = '';
					}
				}
			}
		}
		
		var queryMatch = false;
		var tempBldName = bldName.split(" ") ;//building name word array
		if (query != null){
			for (var a= 0; a < tempBldName.length; a++){
				for (var b = 0; b < querySets.length; b++){
					var queryWord = querySets[b].toLowerCase();
					queryWord = queryWord.trim();
					if(queryWord.toLowerCase().indexOf(tempBldName[a].toLowerCase()) != -1){
						
						queryMatch = true;
						
					}
				}
			}
		}
		if(queryMatch == true){
				for(var a = 0; a < tempBldName.length; a++){
					for (var b = 0; b < querySets.length; b++){
						var queryWord = querySets[b].toLowerCase();
						queryWord = queryWord.trim();
						
						if(tempBldName[a].toLowerCase() == queryWord.toLowerCase()){
							
							if(isCommonWord(queryWord) == false){
								matchingMarkerIndex = i;
								
								if(bldNameHtml.indexOf(tempBldName[a]) != -1){
									//replace pre-written content
									bldNameHtml = bldNameHtml.replace(tempBldName[a], "");
									bldNameHtml += "<b>" + tempBldName[a] + "</b> " ;
									
								}else{
									bldNameHtml += "<b>" + tempBldName[a] + "</b> " ;
								}
							}
						}
						else{
							if (bldNameHtml.indexOf(tempBldName[a]) == -1){
								bldNameHtml += " " + tempBldName[a] + " ";
								
							}
						}
					}
				}
		}
		queryMatch = false;
		
		var tempCommonBldName = bldCommonName.split(",");//e.g., 0=ChemSci, 1=Chem Sci
		if (query != ""){
			for (var a = 0; a < tempCommonBldName.length; a++){
				
				var tempCommonBldNameElementStrings = tempCommonBldName[a].split(" ");//e.g., 0=Chem, 1=Sci
				for (var b = 0; b < tempCommonBldNameElementStrings.length; b++){
					
					for (var c = 0; c < querySets.length; c++){
						var queryWord = "";
						if(querySets[c] != null || querySets[c] != ""){
							queryWord = querySets[c].toLowerCase();
							queryWord = queryWord.trim();
						}
						
						queryMatchCommon = false;
					
						if(queryWord != "" && queryWord.toLowerCase() == tempCommonBldNameElementStrings[b].toLowerCase()){
							queryMatchCommon = true;
						
						}
						if(queryMatchCommon == true){
							
							if(isCommonWord(queryWord) == false){
								matchingMarkerIndex = i;
								
								if (queryWord.length > 0 && bldNameHtml == ""){
										
										
										bldNameHtml += bldName;
										bldNameHtml += "(";
										
										if(queryWord.toLowerCase() == tempCommonBldNameElementStrings[b].toLowerCase()){
											  for(var y = 0; y < tempCommonBldName.length; y++){
												var holder_a = tempCommonBldName[y].toLowerCase();
												holder_a = holder_a.trim();
												if (holder_a == query.toLowerCase())
													bldNameHtml += "<b>" + tempCommonBldName[y] + "</b>";
													
											  }
											  for (var x = 0; x < tempCommonBldNameElementStrings.length; x++){
												  if(queryWord.toLowerCase() == tempCommonBldNameElementStrings[x].toLowerCase()){
														var lastArray = tempCommonBldName[a].split(" ");
														for (var w = 0 ; w < lastArray.length; w++){
															if(bldNameHtml.toLowerCase().indexOf(tempCommonBldName[a].toLowerCase()) == -1){
																if (queryWord.toLowerCase() == lastArray[w].toLowerCase()){
																	
																	bldNameHtml += "<b>" + lastArray[w] + "</b>";	
																}
																else{
																	bldNameHtml += lastArray[w];	
																}
															}
														}
												  }
	  
											   }
										  
										}
										
								}
								else {
									
									bldNameHtml += "(";
									//query matched common words go here
									for (var b = 0; b < tempCommonBldName.length; b++)	{	
										var tempCommonBldNameElementStringsMatched = tempCommonBldName[b].split(" ");//e.g., 0=Chem, 1=Sci
										for (var d = 0; d < tempCommonBldNameElementStringsMatched.length; d++){
											
											for (var c = 0; c < querySets.length; c++){
												var queryWord = "";
												if(querySets[c] != null || querySets[c] != ""){
													queryWord = querySets[c].toLowerCase();
													queryWord = queryWord.trim();
												}
												if (queryWord.toLowerCase() == tempCommonBldNameElementStringsMatched[d].toLowerCase()){
													bldNameHtml += "<b>" + tempCommonBldNameElementStringsMatched[d] + "</b>";								   
												}
												else {
													bldNameHtml += tempCommonBldNameElementStringsMatched[d];	
												}

											}
	
										}
									}
								  	if(bldNameHtml.indexOf(")") == -1){
										bldNameHtml += ")";
								  	}
						 
								}
								
							}
							
						}
						
						if(bldNameHtml.length > 0){

							//non-query matched common words go here
							if (bldNameHtml.indexOf("(") == -1){
								bldNameHtml += "(";
							
							}
							
							if(bldNameHtml.toLowerCase().indexOf(tempCommonBldName[a].toLowerCase() != -1)){
											
								if(tempCommonBldName[a].indexOf(bldNameHtml) == -1){
									
									bldNameHtml += tempCommonBldName[a];
									
								}
										
							}

							if(bldNameHtml.indexOf(")") == -1){
								bldNameHtml += ")";
							}

						}

						queryMatchCommon = false;
						
					}//closes c loop
				}//closes b loop
			}//closes a loop
		}// closes query conditional
					
		if(matchingMarkerIndex == i)
		{
			//MTU_MAP.setCenter(new GLatLng(0,0),0);
			if(FOUND_CAMPUS_NAMES.indexOf(bldName) < 0){

				FOUND_CAMPUS_NAMES += bldName + " ";

				// obtain the attribues of each marker
				var lat = parseFloat(markers[i].getAttribute("lat"));
				var lng = parseFloat(markers[i].getAttribute("lng"));
				var point = new GLatLng(lat,lng);
				var markerIcon = new GIcon();
				
				var imgId = markers[i].getElementsByTagName("label")[0].getAttribute("imgId");
			
				markerIcon.iconSize = new GSize(20, 34);
				markerIcon.shadow = "google/images/map/customMarkerShadow.png";
				markerIcon.shadowSize = new GSize(36, 34);
				markerIcon.iconAnchor = new GPoint(10, 34);
				markerIcon.infoWindowAnchor = new GPoint(10,1);
				
				//cleanup bldId
				var bldIdStrip = bldId;
				if (bldId.indexOf("<b>") == 0){
					bldIdStrip = bldIdStrip.replace("<b>", "");	
					bldIdStrip = bldIdStrip.replace("</b>", "");
					
				}
							
				if(bldIdStrip)
					markerIcon.image = "google/images/map/" + bldIdStrip + ".png" ;
				else if(imgId)
					markerIcon.image = "google/images/map/" + imgId + ".png" ;
				
				bldNameHtml = bldNameHtml.substring(0, bldNameHtml.indexOf(")") + 1);
					
				//check full name in tempCommonBldName
				for (var b=0; b<tempCommonBldName.length;b++){

					var tempCommonBldNameElementStringsMatched = tempCommonBldName[b].split(" ");//e.g., 0=Chem, 1=Sci
					var textHolder = "";
					
					for (var a=0; a<tempCommonBldNameElementStringsMatched.length;a++){//e.g., Chem
	
						for (var c = 0; c < querySets.length; c++){
	
							var queryWord = "";
							if(querySets[c] != null || querySets[c] != ""){
								queryWord = querySets[c].toLowerCase();
								queryWord = queryWord.trim();
							}
					
							if (querySets.length > 1 && queryWord.length != 0){
								if(tempCommonBldNameElementStringsMatched[a].toLowerCase() == queryWord.toLowerCase()){
	
									if(textHolder.substring(textHolder.indexOf(tempCommonBldNameElementStringsMatched[a]) - 3, textHolder.indexOf(tempCommonBldNameElementStringsMatched[a]) - 0) != "<b>")								{
									
										if(textHolder.indexOf(tempCommonBldNameElementStringsMatched[a]) != -1){
											textHolder = textHolder.replace(tempCommonBldNameElementStringsMatched[a], "");	
										}
										textHolder += " <b>" + tempCommonBldNameElementStringsMatched[a] + "</b> ";
										
									}
								
								}
							
								else{
									
									if(textHolder.indexOf(tempCommonBldNameElementStringsMatched[a]) == -1) {
										textHolder += " " + tempCommonBldNameElementStringsMatched[a] + " ";
									}
									
								}
							}
							
							else if (querySets.length == 1 && queryWord.length != 0){
								if(tempCommonBldNameElementStringsMatched[a].toLowerCase().indexOf(queryWord.toLowerCase()) == 0){
	
									if(textHolder.substring(textHolder.indexOf(tempCommonBldNameElementStringsMatched[a]) - 3, textHolder.indexOf(tempCommonBldNameElementStringsMatched[a]) - 0) != "<b>")								{
									
										if(textHolder.indexOf(tempCommonBldNameElementStringsMatched[a]) != -1){
											textHolder = textHolder.replace(tempCommonBldNameElementStringsMatched[a], "");	
										}
										textHolder += " <b>" + tempCommonBldNameElementStringsMatched[a] + "</b> ";
										
									}
								
								}
							
								else{
									
									if(textHolder.indexOf(tempCommonBldNameElementStringsMatched[a]) == -1) {
										textHolder += " " + tempCommonBldNameElementStringsMatched[a] + " ";
									}
									
								}
								
							
							}
							
							
						}
						
						
					}

					tempCommonBldName[b] = tempCommonBldName[b].trim();
					
					if(queryWord.toLowerCase() == tempCommonBldName[b].toLowerCase()){
								textHolder = " <b>" + tempCommonBldName[b] + "</b> ";
					}
	
				}
			
				bldNameHtml = bldNameHtml.substring(0, bldNameHtml.indexOf("("));
				bldNameHtml += " (" + textHolder + ")";
									
				//write the label tag and then set the value and the id of the label
				if (bldId) {
					var label = "<span class='bldCode'>" + bldId + "&mdash;</span><span class='bldName'>" + bldNameHtml + "</span>";
				} else {
					var label = "<span class='bldName'>" + bldNameHtml + "</span>";
				}
				//obtain the html info for this <marker>
				
				/**
				 * Since the htmlInfo element also has multiple elements for tabs,
				 * loop over its child elements and save all the tabs in an array
				 */
				 
				var html = markers[i].getElementsByTagName("htmlInfo");
				var tabs = html[0].getElementsByTagName("tab");
				var tabLabel;
				var tabContent;
				
				//first loop over htmlInfo element to get all the tabs
				
				for (var j = 0 ; j < tabs.length ; j++){
					//now, for each tab get its label tag and content tag
					tabLabel = GXml.value(tabs[j].getElementsByTagName("tabLabel")[0]);
					tabContent = GXml.value(tabs[j].getElementsByTagName("tabContent")[0]);
					infoTabs.push(tabLabel) ;
					infoTabContents.push(tabContent) ;
				}
				
				var tabbedWindow = [];
				
				for (var j = 0 ; j < infoTabs.length ; j++){
					tabbedWindow.push(new GInfoWindowTab(infoTabs[j], infoTabContents[j]));
				}
				
				createSearchedMarker(point,label, bldName, tabbedWindow, markerIcon);
				infoTabs = removeArrayContent(infoTabs);
				infoTabContents = removeArrayContent(infoTabContents);
				tabbedWindow = removeArrayContent(tabbedWindow);
 
			}
			
		}
		
		bldNameHtml="";				
	}
 
		if(MTU_MAP.getBoundsZoomLevel(bounds) > 16) {
		var myzoom = 16;
		} else {
		var myzoom =  MTU_MAP.getBoundsZoomLevel(bounds);	
		}
		MTU_MAP.setZoom(myzoom);
		MTU_MAP.panTo(bounds.getCenter());
		

}

function createSearchedMarker(point,name, nameTooltip, markerTab, markerIcon)
{
	
	var marker = new GMarker(point, markerIcon);
	var tabs = [] ;
	
	GEvent.addListener(marker, "click", function(){
		marker.openInfoWindowTabsHtml(markerTab);
		var latitude = point.lat();
		latitude = latitude + 0.002;
		var centerCoords = new GLatLng(parseFloat(latitude), point.lng());
		//alert(centerCoords);
		//MTU_MAP.setCenter(centerCoords);
		//MTU_MAP.setZoom(16);
		//zoomSlider.set(16);
	});
		
	// save the info for later use in sidebar
	SEARCH_MARKER_PRINT.push(name);
	SEARCH_MARKER.push(marker);
	SEARCH_MARKER_INFO.push(markerTab);
	SEARCH_MARKER_POINT.push(point);
	
	var pointCoords = new GLatLng();
	pointCoords = SEARCH_MARKER[SEARCH_MARKER_INDEX].getPoint();
	var pointLat = parseFloat(pointCoords.lat());
	var pointLng = parseFloat(pointCoords.lng());
	latitude = pointLat + 0.002;//orient the info window to stay near center of map
	var centerCoords = new GLatLng(pointCoords.lat(), pointCoords.lng());
	//MTU_MAP.setCenter(centerCoords, 16);
	
	pointCoords = new GLatLng(parseFloat(pointLat), parseFloat(pointLng));
	bounds.extend(pointCoords);
	// An ELabel with complex contents
    var stuff = '<div id="stuff" onclick="javascript:displayInfo(' + SEARCH_MARKER_INDEX + ');" style="padding: 0px 0px 8px 8px; background: url(google/images/map/point_bottom_left.png) no-repeat bottom left;"><a><div style="background-color: #f2efe9; font-size: 9px ; font-family: Verdana, Arial, Helvetica, sans-serif ; z-index: -1; padding: 2px;"><b> Quick&nbsp;Search <\/b><\/div><\/a><\/div>';
    var label = new ELabel(pointCoords, stuff, null, null, 50);
	SEARCH_MARKER_LABEL.push(label);
	
	if(SEARCH_MARKER_INDEX >= 0){ 
		
		MTU_MAP.addOverlay(SEARCH_MARKER[SEARCH_MARKER_INDEX]);
		label.pixelOffset = new GSize(5,-20);
		MTU_MAP.addOverlay(label);
		
	}

	//create the search result
	SEARCH_RESULT += '<li class="markerList" onclick="javascript:displaySearchedMarker(' + SEARCH_MARKER_INDEX + ')"><a class="markerList" title = "' + nameTooltip + '" href = "javascript:displaySearchedMarker(' + SEARCH_MARKER_INDEX + ')">' + name + '</a></li>';
	SEARCH_MARKER_INDEX++;
	
	testing++;

}

function displaySearchedMarker(index)
{

	//add the new marker to the map, and set info window source parameter
	//MTU_MAP.addOverlay(SEARCH_MARKER[index]);
	SEARCH_MARKER[index].openInfoWindowTabsHtml(SEARCH_MARKER_INFO[index]);
	var coords = SEARCH_MARKER_POINT[index];
	var latitude = coords.lat();
	latitude = latitude + 0.002;
	var centerCoords = new GLatLng(parseFloat(latitude), coords.lng());
	//set the center of the map to this marker by using the point of the marker and set zoom level
	MTU_MAP.setCenter(centerCoords);
	//MTU_MAP.setZoom(16);
	//zoomSlider.set(16);
	setZoom();

}

function displayInfo(index){
	SEARCH_MARKER[index].openInfoWindowTabsHtml(SEARCH_MARKER_INFO[index]);
	var coords = SEARCH_MARKER_POINT[index];
	var latitude = coords.lat();
	latitude = latitude + 0.002;
	var centerCoords = new GLatLng(parseFloat(latitude), coords.lng());
	//set the center of the map to this marker by using the point of the marker and zoom level
	MTU_MAP.setCenter(centerCoords);
	//MTU_MAP.setZoom(16);
	//zoomSlider.set(16);
}
