var xmlreqs = new Array();
var cityCache = new Array();

function toggleReviewDetails(id) {
	var div = document.getElementById('reviewDetails' + id);
	var link = document.getElementById('reviewDetailsLink' + id);
	var newStyle="none";
	var newLinkText = "see all reviews";
	if (div.style.display=="none") {
		newStyle="";
		newLinkText = "hide all reviews";
	} 
	div.style.display=newStyle;
	clear(link);
	link.appendChild(document.createTextNode(newLinkText));
}

function CXMLReq(freed) {
		this.freed = freed;
		this.xmlhttp = false;
		if (window.XMLHttpRequest) {
				this.xmlhttp = new XMLHttpRequest();
		} else if (window.ActiveXObject) {
				this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
}

function xmlreqGET(url) {
		var pos = -1;
		for (var i=0; i < xmlreqs.length; i++) {
				if (xmlreqs[i].freed == 1) { pos = i; break; }
		}
		if (pos == -1) { pos = xmlreqs.length; xmlreqs[pos] = new CXMLReq(1); }
		if (xmlreqs[pos].xmlhttp) {
				xmlreqs[pos].freed = 0;
				xmlreqs[pos].xmlhttp.open("GET",url,true);
				xmlreqs[pos].xmlhttp.onreadystatechange = function() {
						if (typeof(xmlhttpChange) != 'undefined') { xmlhttpChange(pos); }
				}
				if (window.XMLHttpRequest) {
						xmlreqs[pos].xmlhttp.send(null);
				} else if (window.ActiveXObject) {
						xmlreqs[pos].xmlhttp.send();
				}
		}
}
function xmlhttpChange(pos) {
		if (typeof(xmlreqs[pos]) != 'undefined' && xmlreqs[pos].freed == 0 && xmlreqs[pos].xmlhttp.readyState == 4) {
				if (xmlreqs[pos].xmlhttp.status == 200 || xmlreqs[pos].xmlhttp.status == 304) {
						parseMessages(xmlreqs[pos].xmlhttp.responseXML);
				} else {
						alert ( "Error trying to get cities; please try again." );
				}
				xmlreqs[pos].freed = 1;
		}
}
function parseMessages(response) {
	cityCache.length = 0;
	var cityList = document.getElementById('cityList');
	clear(cityList);
	var limit = 0;

	if (response.getElementsByTagName('doc')[0]) {
		for (var x=0; x < response.getElementsByTagName('doc')[0].childNodes.length; x++) {
			var thisChild = response.getElementsByTagName('doc')[0].childNodes[x];
			if (thisChild.tagName == 'place') {
				var idNode = thisChild.getElementsByTagName('id');
				var nameNode = thisChild.getElementsByTagName('name');
				cityCache.push(new Array(idNode[0].firstChild.data, nameNode[0].firstChild.data));
				var thisDiv = document.createElement('div');
				thisDiv.appendChild(document.createTextNode(cityCache[cityCache.length - 1][1] + " - "));
				var thisLink = document.createElement('a');
				thisLink.appendChild(document.createTextNode("select"));
				thisLink.href = "javascript:setCity(" +(cityCache.length - 1)  + ")";
				thisDiv.appendChild(thisLink);

				cityList.appendChild(thisDiv);
			}
			if (cityCache.length > 100) {
				alert("A large number of results were found.  You may wish to also specify the province/state or country name.  For example, try searching for 'new york, new york'");
			}
		}
	}
	if (cityCache.length == 0) {
		cityList.appendChild(document.createTextNode("No matches found."));
	}
}
function setCity(id) {
	var cityID=document.getElementById('cityID');
	var cityName=document.getElementById('cityName');
	var cityResultsBox = document.getElementById('cityResultsBox');

	cityID.value = cityCache[id][0];
	cityName.value = cityCache[id][1];
	cityResultsBox.style.display="none";
}
function reqCityListFromSearch() {
	var cityName = document.getElementById('cityName');
	var cityList = document.getElementById('cityList');
	var cityResultsBox = document.getElementById('cityResultsBox');
	if (cityName.value.length < 2) {
		alert("Please enter a place to search for.  It must be at least 2 characters long.");
	} else {
		clear(cityList);
		cityList.appendChild(document.createTextNode('Loading...'));
		cityResultsBox.style.display="";

		xmlreqGET("/req.php?type=searchCity&city=" + cityName.value);
	}
}

