var _tdbg = true; // TIDES Debug

var request = null;

var _debug_year = 2007;

try {
	request = new XMLHttpRequest();
} catch (trymicrosoft) {
	try {
		request = new ActiveXObject("Msxml2.XMLHTTP");
	} catch (othermicrosoft) {
		try {
			request = new ActiveXObject("Microsoft.XMLHTTP");
		} catch (failed) {
			request = null;
		}
	}
}

function loadTideInformation() {
	var rd = document.getElementById('tides-result-div');

	// tell us we're "loading"
	displayLoadingContainer(rd);

	// fetch the XML from our servlet and pass along to the handler function
	if (request != null) {

		var _site  = getFromDropDown('tides-site-selection-form', 'tides-sites');
		var _year  = getFromDropDown('tides-site-selection-form', 'tides-year');
		var _month = getFromDropDown('tides-site-selection-form', 'tides-month');
		var _day   = getFromDropDown('tides-site-selection-form', 'tides-day');

		_debug_year = _year;

		var _url = '/weather/tides/tifs?site=' + escape(_site) + '&year=' + _year + '&month=' + _month + '&day=' + _day + '&format=xml&len=week';

		request.open('GET', _url, true);
		request.onreadystatechange = parseTide;
		request.send(null);
	} else {
		reportError();
	}
}

function parseTide() {
	var rd = document.getElementById('tides-result-div');

	if (request.readyState == 4) {
		var xmlDoc = request.responseXML;
		var site = xmlDoc.getElementsByTagName("sites")[0].getElementsByTagName('TideSite')[0];

		// remove previous tables and loading elements inside the container
		removeElements(rd);

		// write out the name of the site
		var _nameOfSite = document.createElement('div');
		_nameOfSite.setAttribute('id', 'tides-detail-site-name');
		_nameOfSite.innerHTML = site.getElementsByTagName('siteName')[0].firstChild.nodeValue;
		rd.appendChild(_nameOfSite);

		// write out the latitude and longitude
		var _latlon = document.createElement('div');
		_latlon.setAttribute('id','tides-detail-site-location');
		_latlon.innerHTML = site.getElementsByTagName('latitudeAsString')[0].firstChild.nodeValue + ' N ' +
							site.getElementsByTagName('longitudeAsString')[0].firstChild.nodeValue + ' W';
		rd.appendChild(_latlon);

		// write out the "week of" data
		var _weekOf = document.createElement('div');
		_weekOf.setAttribute('id', 'tides-detail-site-week');
		_weekOf.innerHTML = 'Tide information for the week of ' +
							site.getElementsByTagName('tideData')[0].getElementsByTagName('TideData')[0].getElementsByTagName('day')[0].firstChild.nodeValue + ' to ' +
							site.getElementsByTagName('tideData')[0].getElementsByTagName('TideData')[site.getElementsByTagName('tideData')[0].getElementsByTagName('TideData').length-1].getElementsByTagName('day')[0].firstChild.nodeValue;
		rd.appendChild(_weekOf);

		var tt = document.createElement("table");
		tt.setAttribute('id', 'tide-data-table');
		tt.setAttribute('cellpadding', '0');
		tt.setAttribute('cellspacing', '0');

		// create the table header
		var tableHead = document.createElement('thead');
		var headRow   = document.createElement('tr');
		headRow.setAttribute('id', 'tide-data-table-header-row');
		var dayHeader = document.createElement('th');
		dayHeader.innerHTML = 'Date';
		headRow.appendChild(dayHeader);
		headRow.appendChild(document.createElement('th'));
		headRow.appendChild(document.createElement('th'));
		headRow.appendChild(document.createElement('th'));
		headRow.appendChild(document.createElement('th'));
		headRow.appendChild(document.createElement('th'));
		tableHead.appendChild(headRow);
		tt.appendChild(tableHead);


		// create the table body
		var tableBody = document.createElement('tbody');


		// loop through the seven days and insert the data
		var tideDataList = site.getElementsByTagName('tideData')[0].getElementsByTagName('TideData');
		var currentBaseDay;
		for (var i = 0; i < tideDataList.length; i++) {

			if(currentBaseDay == '' || currentBaseDay != tideDataList[i].getElementsByTagName('day')[0].firstChild.nodeValue) {
				var trow = document.createElement('tr');
				var tday = document.createElement('td');
				currentBaseDay = tideDataList[i].getElementsByTagName('day')[0].firstChild.nodeValue;
				tday.innerHTML = '<b>' + tideDataList[i].getElementsByTagName('day')[0].firstChild.nodeValue + '</b>';
				trow.appendChild(tday);
			}

			var cell = document.createElement('td');
			cell.innerHTML =
				'<b>' + tideDataList[i].getElementsByTagName('type')[0].firstChild.nodeValue + '</b>: ' +
				tideDataList[i].getElementsByTagName('timeOfDay')[0].firstChild.nodeValue + ' ' +
				tideDataList[i].getElementsByTagName('tide')[0].firstChild.nodeValue + ' ft. ';
			trow.appendChild(cell);


			tableBody.appendChild(trow);
		}

		tt.appendChild(tableBody);

		rd.appendChild(tt);

		// create the google map div
		//var _gmap = document.createElement('div');
		//_gmap.setAttribute('id', 'tides-map');
		//_gmap.style.width = '600px';
		//_gmap.style.height = '300px';
		//rd.appendChild(_gmap);

	/*
		temporarily removing google maps

		loadGoogleMap(site.getElementsByTagName('TideSite')[0].getElementsByTagName('latitudeAsDecimal')[0].firstChild.nodeValue,
					  site.getElementsByTagName('TideSite')[0].getElementsByTagName('longitudeAsDecimal')[0].firstChild.nodeValue,
					  site.getElementsByTagName('TideSite')[0].getElementsByTagName('siteName')[0].firstChild.nodeValue);
	*/
	}
}

var _map;

function loadGoogleMap(lat, lon, siteName) {

	if (GBrowserIsCompatible()) {
		_map = new GMap2(document.getElementById('tides-map'));
		_map.addControl(new GSmallMapControl());
		_map.addControl(new GMapTypeControl());
		_map.setCenter(new GLatLng(lat, lon), 12);
		_map.setMapType(G_SATELLITE_TYPE);

		_map.addOverlay(new GMarker(new GLatLng(lat,lon)));

		//document.getElementById('tides-map').style.display = 'block';
	}
}

function getFromDropDown(f,e) {
	return document.forms[f].elements[e].options[document.forms[f].elements[e].selectedIndex].value;
}

function displayLoadingContainer(rd) {
	removeElements(rd);
	var loadingImage = document.createElement("img");
	loadingImage.src = '../tides/tides-loading.gif';
	//loadingImage.style.float = 'left';

	var loadingText = document.createElement("span");
	loadingText.innerHTML = "Loading...";

	var loadingContainer = document.createElement("div");
	loadingContainer.setAttribute('id', 'tides-loading-container');
	loadingContainer.appendChild(loadingImage);
	loadingContainer.appendChild(loadingText);

	rd.appendChild(loadingContainer);

}

function reportError(rd) {
	alert('jacked up');
	removeElements(rd);

	var loadingImage = document.createElement("img");
	loadingImage.src = '../tides/tides-error.gif';
	//loadingImage.style.float = 'left';

	var loadingText = document.createElement("span");
	loadingText.innerHTML = "Unable to load tide information";

	var loadingContainer = document.createElement("div");
	loadingContainer.setAttribute('id', 'tides-loading-container');
	loadingContainer.appendChild(loadingImage);
	loadingContainer.appendChild(loadingText);
}

function removeElements(container) {
	try {
		while (container.childNodes.length > 0) {
			container.removeChild(container.childNodes[0]);
		}

		return true;
	} catch (error) {
		if (_tdbg) { alert(error); }
		return false;
	}
}