/* 
GDSearchHoodMap.js: by randy bacon 07.02.09
	handle the hood map interaction JS
*/

function searchHood(gdHood)
{
	//show loading
	document.getElementById('dvMapLoading').style.display = "block";
	document.getElementById('dvCountDisplay').style.display = "none";
	if( !isClientBuilder )
		document.getElementById('dvViewResults').style.display = "none";
	if( !isSingle )
	{
		document.getElementById('spHoodTitle').innerHTML = "";
		document.getElementById('dvHoodBrowser').style.display = "none";
		document.getElementById('dvMapSearch').style.display = "none";
	}		

	//clear map points
	gdMap.clearOverlays();
	
	//fire XML request
	GDownloadUrl(wsULR, function(data) {
        ParseXMLResult(data);
    }, wsQStr + gdHood, "application/x-www-form-urlencoded");
    
}

function ParseXMLResult(data)
{
	var xml = GXml.parse(data);
    var resultCode = xml.documentElement.getElementsByTagName("NR");
    var errorOcc = false;

    if (resultCode != null && resultCode.length > 0) 
    {
    	errorOcc = true;
    }

	if (!errorOcc) 
	{
		var tmpNode = HoodBrowserSearch.FindXMLNodes(xml, "HT");
		var tmpTitle = tmpNode != null ? tmpNode[0].firstChild.nodeValue : "";		
		document.getElementById('spNT').innerHTML = tmpTitle;
		var tmpTitleSpacer = isSingle ? "" : " - ";
		document.getElementById('spHoodTitle').innerHTML = tmpTitleSpacer + tmpTitle; 
		if( isSingle )
			document.getElementById('spInstHoodTitle').innerHTML = tmpTitle; 
			
		tmpNode = HoodBrowserSearch.FindXMLNodes(xml, "HC");	
		var thisHood = tmpNode != null ? tmpNode[0].firstChild.nodeValue : "";

		//get the hood points
		var points = xml.documentElement.getElementsByTagName("PS");
        var polyBounds = new GLatLngBounds();

        if (points != null && points.length > 0) {
            var ptArray = new Array();
			for(var i=0;i<points.length;i++)
			{
				var tmpPoint = points[i].firstChild.nodeValue.toString().split(':');	
                ptArray[i] = new GLatLng(tmpPoint[0], tmpPoint[1]);
			}

            //add the listings                
            var listings = xml.documentElement.getElementsByTagName("L");
            var totalListings = 0;
            var pntBounds = new GLatLngBounds();
            
            if( listings != null && listings.length > 0)
            {
            	totalListings = listings.length;

            	//build gdSearchString
            	var thisSearchStr = searchString + "|gdHood=" +  thisHood;

            	for(var i=0;i<listings.length;i++)
				{
					var tmpLat = listings[i].getElementsByTagName("LT")[0].firstChild.nodeValue;
    				var tmpLong = listings[i].getElementsByTagName("LN")[0].firstChild.nodeValue;
    				var tmpLN = listings[i].getElementsByTagName("LH")[0].firstChild.nodeValue;
    				var tmpRow = parseInt(listings[i].getElementsByTagName("CR")[0].firstChild.nodeValue) + 1;

    				//start iframe HTML
    				var thisIframeHTML = iframeHTML;
					thisIframeHTML = thisIframeHTML.replace("[%ln%]", tmpLN);
					thisIframeHTML = thisIframeHTML.replace("[%gdSearchString%]", thisSearchStr);
					thisIframeHTML = thisIframeHTML.replace("[%gdHood%]", thisHood);
					thisIframeHTML = thisIframeHTML.replace("[%gdCount2%]", totalListings);
					thisIframeHTML = thisIframeHTML.replace("[%startrow%]", tmpRow);
    				
    				//add marker to map
					gdMap.addOverlay(createMarker(new GLatLng(parseFloat(tmpLat),parseFloat(tmpLong)), thisIframeHTML));
					pntBounds.extend(new GLatLng(parseFloat(tmpLat),parseFloat(tmpLong)));
				}	
            }

            document.getElementById('spCount').innerHTML = totalListings;

            //set up our poly
            gdPoly = new GPolygon(ptArray,"#CC0202",4);
            gdMap.addOverlay(gdPoly);
            var polyBounds = gdPoly.getBounds();
            gdMap.setCenter(polyBounds.getCenter(), gdMap.getBoundsZoomLevel(polyBounds));
            
            //set form for post on
            tmpNode = HoodBrowserSearch.FindXMLNodes(xml, "HC");	
            document.getElementById('gdHood').value = tmpNode != null ? tmpNode[0].firstChild.nodeValue : "";
            	
            //on valid search result we will do this
            document.getElementById('gdMap').style.display = "block";
            document.getElementById('dvCountDisplay').style.display = "block";
            if( totalListings > 0 && !isClientBuilder)
            	document.getElementById('dvViewResults').style.display = "block";
            
            if( !isSingle )	
				document.getElementById('dvMapSearch').style.display = "block";
				
			if( !mapDisplayed && !isSingle && !isClientBuilder )
			{
				mapDisplayed = true;
				document.getElementById('dvHoodClose').style.display = "block";
			}
			
			if( isClientBuilder)
				changeUseOnlyState(true);
        }
		else
			errorOcc = true;
	}		

	if(errorOcc)
	{
		showMapNotValid();
	}

	//when done hide loading
	document.getElementById('dvMapLoading').style.display = "none";
}

function createMarker(point,html) 
{
    var marker = new GMarker(point,pointIcon);
    marker.bindInfoWindowHtml(html);
    return marker;
}

/* hood browser UI */
//set up gdSearch what not here (events and stuff)
function searchEnd()
{
	//pointer
	var results = gdHoodSearch.Results;

	if( gdHoodSearch.ResultsFound && results != null && results.ResultItems != null && results.ResultItems.length > 0)
	{
		document.getElementById('searchResultsBox').style.display = "block";
		document.getElementById('dvNoResults').style.display = "none";
		//always set bread crumbs
		SetBreadCrumb(results.SearchParams);
		//set the inner result text
		var j = 0;
		for(var x=0;x<numCols;x++)
		{
			var tmpNode = document.getElementById('dvSR' + x);
			while (tmpNode.hasChildNodes())
			{
				tmpNode.removeChild(tmpNode.firstChild);
			}
		}
		var colElem = document.getElementById('dvSR' + j);
		
		for(var i=0;i<results.ResultItems.length;i++)
		{
			if( i > 0 && (i % itemsPerCol) == 0 )
			{
				j++;
				colElem = document.getElementById('dvSR' + j);
			}
			if( results.IsGroup)
			{
				colElem.appendChild(AddGroupToCol(results.SearchParams.Group, results.ResultItems[i]));
			}
			else
				colElem.appendChild(AddItemToCol(results.ResultItems[i]));
		}
		
		//set up filter if there is any
		if( !results.IsGroup )
		{
			document.getElementById('searchFilter').style.display = "block";
			SetFilter(results.SearchParams, results.FilterOptions);
		}
		else
			document.getElementById('searchFilter').style.display = "none";
		
		//set up paging
		SetPaging(results);
	}
	else
	{
		document.getElementById('searchResultsBox').style.display = "none";
		document.getElementById('dvNoResults').style.display = "block";
	}

	//done hide loading
	document.getElementById('dvSRLoading').style.display = "none";
}

function SetPaging(results)
{
	if( parseInt(results.ResultCount) <= parseInt(results.PageCount))
	{
		document.getElementById('dvPager').style.display = "none";
	}
	else
	{
		document.getElementById('dvPager').style.display = "block";
		if( parseInt(results.StartRow) > 0 )
		{
			document.getElementById('dvPagerPrev').style.display = "block";
			var prevRow = parseInt(results.StartRow) - pageSize;
			if( prevRow < 0)
				prevRow = 0;
			//set href
			if( results.IsGroup )
			{
				document.getElementById('dvPagerPrev').innerHTML = '<a href="javascript:searchGroup(' + returnGroupByGroupName(results.SearchParams.Group) + ',' + prevRow + ');">Previous</a>';
			}
			else
			{
				document.getElementById('dvPagerPrev').innerHTML = '<a href="javascript:searchInGroup(\'' + results.SearchParams.Group.replace("'", "\\'") + '\', \'' + results.SearchParams.GroupKey.replace("'", "\\'") + '\', \'' + results.SearchParams.SearchFilter + '\',' + prevRow + ');">Previous</a>';
			}
		}
		else
			document.getElementById('dvPagerPrev').style.display = "none";

		//pager count display
		document.getElementById('dvPagerCount').innerHTML = "Viewing " + new String( parseInt(results.StartRow) + 1) + "-" + new String( parseInt(results.StartRow) + parseInt(results.PageCount) )  + " of " + results.ResultCount + " results";

		//next
		if( (parseInt(results.StartRow) + pageSize)  < parseInt(results.ResultCount) )
		{
			document.getElementById('dvPagerNext').style.display = "block";
			var nextRow = parseInt(results.StartRow) + parseInt(results.PageCount);
			//set href
			if( results.IsGroup)
			{
				document.getElementById('dvPagerNext').innerHTML = '<a href="javascript:searchGroup(' + returnGroupByGroupName(results.SearchParams.Group) + ',' + nextRow + ');">Next</a>';
			}
			else
			{
				document.getElementById('dvPagerNext').innerHTML = '<a href="javascript:searchInGroup(\'' + results.SearchParams.Group.replace("'", "\\'") + '\', \'' + results.SearchParams.GroupKey.replace("'", "\\'") + '\', \'' + results.SearchParams.SearchFilter + '\',' + nextRow + ');">Next</a>';
			}
		}
		else
		{
			document.getElementById('dvPagerNext').style.display = "none";
		}
	}
}

function SetFilter(searchParams, filterOptions)
{
	if( filterOptions != "")
	{
		//clear previous
		var parentNode = document.getElementById('filterOptions');
		while (parentNode.hasChildNodes())
		{
			parentNode.removeChild(parentNode.firstChild);
		}
		//set up new
		var filterItems = filterOptions.split('|');
		for(var i=0;i<filterItems.length;i++)
		{
			var innerItem = filterItems[i].split(',');
			var newdiv = document.createElement('div');
			newdiv.className = "item";
			var name = innerItem[0].toUpperCase();
			if( name == "0")
				name = "ALL";
			else if(name == "1")
				name = "1-9";
			if( innerItem[1] == "1")
			{
				var aClass = "";
				if( searchParams.SearchFilter == innerItem[0].toLowerCase() || searchParams.SearchFilter == "" && innerItem[0].toLowerCase() == "0" )
				{
					aClass = ' class="selected" ';
				}
				newdiv.innerHTML = '<a ' + aClass +'href="javascript:searchInGroup(\'' + searchParams.Group.replace("'", "\\'") + '\', \'' + searchParams.GroupKey.replace("'", "\\'") + '\', \'' + innerItem[0].toLowerCase() + '\', 0);">' + name + '</a>';
			}
			else
			{
				newdiv.innerHTML = name;
			}
			parentNode.appendChild(newdiv);
		}
	}
	else
		document.getElementById('searchFilter').style.display = "none";
}

function searchStart()
{
	document.getElementById('dvSRLoading').style.display = "block";
}

//UI what not
function AddGroupToCol(group, resultItem)
{
	var newdiv = document.createElement('div');
	newdiv.className = "item";

	newdiv.innerHTML = '<a href="javascript:searchInGroup(\'' + group.replace("'", "\\'") + '\', \'' + resultItem.Name.replace("'", "\\'") + '\', \'0\', 0);">' + resultItem.Name + '</a>';

	return newdiv;
}

function AddItemToCol(resultItem)
{
	var newdiv = document.createElement('div');
	newdiv.className = "item";

	newdiv.innerHTML = '<a href="javascript:ViewMap(\'' + resultItem.Name.replace("'", "\\'") + '\', \'' + resultItem.Code.replace("'", "\\'") + '\');">' + resultItem.Name + '</a>'; 

	return newdiv;
}

function SetBreadCrumb(searchParams)
{
	var breadCrumbElem = document.getElementById('searchBreadCrumb');
	while (breadCrumbElem.hasChildNodes())
	{
		breadCrumbElem.removeChild(breadCrumbElem.firstChild);
	}

	var spacerDiv = null

	var newdiv = document.createElement('div');
	newdiv.setAttribute('id', "label");
	newdiv.className = "item";

	newdiv.innerHTML = 'Viewing: ';

	breadCrumbElem.appendChild(newdiv);
			
	newdiv = document.createElement('div');
	newdiv.setAttribute('id', "parent");
	newdiv.className = "item";

	newdiv.innerHTML = '<a href="javascript:searchGroup(' + returnGroupByGroupName(searchParams.Group) + ', 0);">' + unescape(searchParams.Group) + '</a>';

	breadCrumbElem.appendChild(newdiv);			

	//the group key
	if( searchParams.GroupKey != "" )
	{
		spacerDiv = document.createElement('div');
		spacerDiv.className = "spacer";
		spacerDiv.innerHTML = "&gt;";
		breadCrumbElem.appendChild(spacerDiv);	
		
		newdiv = document.createElement('div');
		newdiv.setAttribute('id', "child0");
		newdiv.className = "item";

		newdiv.innerHTML = '<a href="javascript:searchInGroup(\'' + searchParams.Group.replace("'", "\\'") + '\', \'' + searchParams.GroupKey.replace("'", "\\'") + '\', \'0\', 0);">' + unescape(searchParams.GroupKey) + '</a>';

		breadCrumbElem.appendChild(newdiv);			
	}

	//and the filter if there is one
	if( searchParams.SearchFilter != "" && searchParams.SearchFilter != "0")
	{
		spacerDiv = document.createElement('div');
		spacerDiv.className = "spacer";
		spacerDiv.innerHTML = "&gt;";
		breadCrumbElem.appendChild(spacerDiv);	
		
		newdiv = document.createElement('div');
		newdiv.setAttribute('id', "child1");
		newdiv.className = "item";

		newdiv.innerHTML = '<a href="javascript:searchInGroup(\'' + searchParams.Group.replace("'", "\\'") + '\', \'' + searchParams.GroupKey.replace("'", "\\'") + '\', \'' + searchParams.SearchFilter.toLowerCase() + '\', 0);">' + searchParams.SearchFilter.toUpperCase() + '</a>';

		breadCrumbElem.appendChild(newdiv);		
	}
	
}

function searchGroupNoSR(groupId, searchItem)
{
	searchGroup(groupId, 0, searchItem);
}

//search in a group - searchItem is optional
function searchGroup(groupId, startRow, searchItem) 
{
	var group = "area";
	switch(groupId)
	{
		case 1:
			group = "county";
			break;
		case 2:
			group = "city";
			break;
		case 3:
			group = "zip";
			break;
	}
	
	if( searchItem )
		startRow = 0;
	else
		searchItem = "";

	if( lastIdSelected > -1 )
		document.getElementById('so' + lastIdSelected).className = "";

	document.getElementById('so' + groupId).className = "selected";
	lastIdSelected = groupId;

	var searchParams = SetNReturnSearchParams(group, "", "", startRow, searchItem);
	gdHoodSearch.Search(searchParams);
}

function searchInGroup(group, groupKey, filter, startRow)
{
	var searchParams = SetNReturnSearchParams(group, groupKey, filter, startRow, "");
	gdHoodSearch.Search(searchParams);
}

function searchInGroupNoSR(group, groupKey, filter, searchItem)
{
	var searchParams = SetNReturnSearchParams(group, groupKey, filter, 0, searchItem);
	gdHoodSearch.Search(searchParams);
}

function returnGroupByGroupName(group)
{
	switch(group.toLowerCase())
	{
		case "county":
			return 1;
		case "city":
			return 2;
		case "zip":
			return 3;
		default:
			return 0;
	}
}


