function doPageLoad() {
	checkReturnRow();
	loadOrigins();
	if (document.forms['ticketform'].elements['d'].value) resetDestinations();
	if (!userFocused) document.forms['ticketform'].elements['dtext'].focus();
	document.getElementsByTagName("body")[0].onclick = function(event) { emptyAll(event) };
	showSecure();
}
window.onload = doPageLoad;

var origins = new Array();
var dests = new Array();
var focusD = -1;
var focusA = -1;
var userFocused = false;
var timer = null;
var timerCounter = -1;
var downloadingDest = false;

function eatTabs(boxName, e) {
	if (!e) e = window.event;
	switch (e.keyCode) {
	case 9:
	case 10:
	case 13:
		var div = document.getElementById(boxName + 'search');
		if (div.style.visibility == 'visible') {
			if (boxName == 'dtext') {
				focused = focusD;
			} else {
				focused = focusA;
			}
			if (focused != -1) {
				doSelection(div);
				if (e.preventDefault) e.preventDefault();
				return false;
			}
		}
	}
	return true;
}
function dropdownWithSpinner(boxName, searchTerms, ar, e, override) {
	setTimeout(function() { changeDropdown(boxName, searchTerms, ar, e, override) }, 10);
}
function changeDropdown(boxName, searchTerms, ar, e, override) {
	if (!e) e = window.event;
	emptyAll(e);
	searchTerms = searchTerms.toLowerCase();
	var div = document.getElementById(boxName + 'search');
	if (!div) return;
	if (!override) {
		switch (e.keyCode) {
		case 38:
			moveSelection(div, -1, boxName, searchTerms, ar, e);
			return false;
		case 40:
			moveSelection(div, 1, boxName, searchTerms, ar, e);
			return false;
		}
	}
	emptyDiv(div);
	var termLength = searchTerms.length;
	if (termLength >= 1 || (ar && ar.length < 150)) {
		if (ar.length) {
			assembleListAtOnce(div, boxName.substr(0, 1), searchTerms, ar);
		}
	} else if (override) {
		if (ar.length) {
			timer = setInterval(function() { assembleList(div, boxName.substr(0, 1), searchTerms, ar) }, 1);
		}
	}
	if (!ar.length && !downloadingDest) {
		var emptyNote = 'No matches found.'
		return false;
		//if (boxName == 'atext' && !document.forms['ticketform'].elements['d'].value) emptyNote += ' Please choose departure first.';
		//div.innerHTML = '<p id="' + boxName.substr(0, 1) + '" onclick="updateStop(\'' + boxName.substr(0, 1) + '\', 0, \'\')"><em style="font-size: 9px;">' + emptyNote + '</em></p>';
		//div.style.visibility = 'visible';
	}
	document.forms['ticketform'].elements[boxName].focus();
	return false;
}
function assembleListAtOnce(div, idFrag, searchTerms, ar) {
	for (i = 0; i < ar.length; ++i) {
		if (!searchTerms || ar[i][1].toLowerCase().indexOf(searchTerms) == 0) {
			var cityID = ar[i][0];
			var cityName = ar[i][1];
			div.innerHTML += '<p id="' + idFrag + cityID + '" onclick="updateStop(\'' + idFrag + '\', ' + cityID + ', this.innerHTML)">' + cityName + '</' + 'p>';
		}
	}
	if (div.innerHTML == '') {
		var emptyNote = 'No matches found.'
		if (boxName && boxName == 'atext' && !document.forms['ticketform'].elements['d'].value) emptyNote += ' Please choose departure first.';
		div.innerHTML = '<p id="' + boxName.substr(0, 1) + '" onclick="updateStop(\'' + boxName.substr(0, 1) + '\', 0, \'\')"><em style="font-size: 9px;">' + emptyNote + '</em></p>';
	}
	div.style.visibility = 'visible';
	if (navigator.userAgent.indexOf('MSIE 6') != -1) {
		document.getElementById('farepicker').style.visibility = 'hidden';
		if (div.offsetHeight > 200) {
			div.style.height = '10em';
		} else {
			div.style.height = 'auto';
		}
	}
}
function assembleList(div, idFrag, searchTerms, ar) {
	++timerCounter;
	if (timerCounter < ar.length) {
		showSpinner(idFrag + 'textspinner', true);
		if (!searchTerms || ar[timerCounter][1].toLowerCase().indexOf(searchTerms) == 0) {
			var cityID = ar[timerCounter][0];
			var cityName = ar[timerCounter][1];
			div.innerHTML += '<p id="' + idFrag + cityID + '" onclick="updateStop(\'' + idFrag + '\', ' + cityID + ', this.innerHTML)">' + cityName + '</' + 'p>';
		}
	} else {
		timerCounter = -1;
		clearInterval(timer);
		if (div.innerHTML == '') {
			var emptyNote = 'No matches found.'
			if (boxName && boxName == 'atext' && !document.forms['ticketform'].elements['d'].value) emptyNote += ' Please choose departure first.';
			div.innerHTML = '<p id="' + boxName.substr(0, 1) + '" onclick="updateStop(\'' + boxName.substr(0, 1) + '\', 0, \'\')"><em style="font-size: 9px;">' + emptyNote + '</em></p>';
		}
		div.style.visibility = 'visible';
		showSpinner(idFrag + 'textspinner', false);
		if (navigator.userAgent.indexOf('MSIE 6') != -1) {
			document.getElementById('farepicker').style.visibility = 'hidden';
			if (div.offsetHeight > 200) {
				div.style.height = '10em';
			} else {
				div.style.height = 'auto';
			}
		}
	}
}
function showSpinner(spinnerID, show) {
	document.getElementById(spinnerID).style.display = (show) ? 'inline' : 'none';
}
function doSelection(div) {
	var focused = (div.id == 'dtextsearch') ? focusD : focusA;
	for (i = 0; i < div.childNodes.length; ++i) {
		div.childNodes[i].className = '';
	}
	var boxName = div.childNodes[focused].id.substr(0, 1);
	var cityID = div.childNodes[focused].id.substr(1);
	var cityName = '';
	if (cityID) cityName = div.childNodes[focused].innerHTML;
	updateStop(boxName, cityID, cityName);
	if (div.id == 'dtextsearch') {
		focusD = -1;
		document.forms['ticketform'].elements['atext'].focus();
	} else {
		focusA = -1;
		document.forms['ticketform'].elements['dd'].focus();
	}
	div.style.visibility = 'hidden';
	if (navigator.userAgent.indexOf('MSIE 6') != -1) document.getElementById('farepicker').style.visibility = 'visible';
}
function moveSelection(div, dir, boxName, searchTerms, ar, e) {
	var focused = (div.id == 'dtextsearch') ? focusD : focusA;
	if (div.childNodes.length == 0) {
		if (ar.length < 150) changeDropdown(boxName, searchTerms, ar, e, true);
		return false;
	}
	for (i = 0; i < div.childNodes.length; ++i) {
		div.childNodes[i].className = '';
	}
	if (dir == 0) {
		focused = -1;
	} else if (focused == -1) {
		if (dir == 1) {
			div.childNodes[0].className = 'selected';
			focused = 0;
		} else {
			div.childNodes[div.childNodes.length - 1].className = 'selected';
			focused = div.childNodes.length - 1;
		}
	} else if (dir == -1 && ((div.id == 'dtextsearch') ? focusD : focusA) == 0) {
		focused = -1;
	} else if (dir == 1 && ((div.id == 'dtextsearch') ? focusD : focusA) == div.childNodes.length - 1) {
		focused = -1;
	} else {
		focused += dir;
		div.childNodes[focused].className = 'selected';
	}
	if (focused != -1) {
		while (div.childNodes[focused].offsetTop + div.childNodes[focused].offsetHeight - div.scrollTop > div.offsetHeight) {
			div.scrollTop += 20;
		}
		while (div.childNodes[focused].offsetTop - div.scrollTop < 0) {
			div.scrollTop -= 20;
		}
	}
	if (div.id == 'dtextsearch') {
		focusD = focused;
	} else {
		focusA = focused;
	}
}
function emptyDiv(div) {
	div.innerHTML = '';
	div.style.visibility = 'hidden';
	if (div.id == 'dtextsearch') {
		focusD = -1;
	} else {
		focusA = -1;
	}
	if (navigator.userAgent.indexOf('MSIE 6') != -1) {
		if (document.getElementById('dtextsearch').style.visibility == 'hidden' &&
				document.getElementById('atextsearch').style.visibility == 'hidden' &&
				document.getElementById('ddcals').style.visibility == 'hidden' &&
				document.getElementById('rdcals').style.visibility == 'hidden') {
			document.getElementById('farepicker').style.visibility = 'visible';
		}
	}
}
function emptyAll(e) {
	if (!e) e = window.event;
	var el = (e.srcElement) ? e.srcElement : e.target;
	var cancelD = false;
	var cancelA = false;
	do {
		el = el.parentNode;
		if (el && el.id && el.id == 'dcontain') {
			cancelD = true;
			break;
		} else if (el && el.id && el.id == 'acontain') {
			cancelA = true;
			break;
		}
	} while (el);
	if (!cancelD) emptyDiv(document.getElementById('dtextsearch'));
	if (!cancelA) emptyDiv(document.getElementById('atextsearch'));
}
function updateStop(field, stopID, stationName) {
	emptyDiv(document.getElementById(field + 'textsearch'));
	document.forms['ticketform'].elements[field].value = stopID;
	document.forms['ticketform'].elements[field + 'text'].value = stationName;
	if (field == 'd' && stopID) resetDestinations();
}
function getXmlHttp() {
	if (window.XMLHttpRequest) {
		var req = new XMLHttpRequest();
	} else {
		var req = new ActiveXObject("Microsoft.XMLHTTP");
	}
	return req;
}
function loadOrigins() {
	var xml = getXmlHttp();
	if (xml) {
		xml.onreadystatechange = function() {
			if (xml.readyState == 4) {
				if (xml.status == 200) {
					resp = xml.responseText;
					origins = new Array();
					var pairs = resp.split('\n');
					len = pairs.length;
					for (i = 0; i < len; ++i) {
						val = pairs[i].substring(0, pairs[i].indexOf('='));
						txt = pairs[i].substring(pairs[i].indexOf('=') + 1);
						origins[i] = new Array(val, txt);
					}
					return;
				}
			}
		}
		xml.open('GET', '/ticketing/dyn/origins.asp');
		xml.send(null);
	}
}
function resetDestinations() {
	downloadingDest = true;
	var xml = getXmlHttp();
	var olist = document.forms['ticketform'].elements['d'];
	if (xml && olist.value) {
		xml.onreadystatechange = function() {
			if (xml.readyState == 4) {
				if (xml.status == 200) {
					resp = xml.responseText;
					dests = new Array();
					var pairs = resp.split('\n');
					len = pairs.length;
					for (i = 0; i < len; ++i) {
						val = pairs[i].substring(0, pairs[i].indexOf('='));
						txt = pairs[i].substring(pairs[i].indexOf('=') + 1);
						dests[i] = new Array(val, txt);
					}
					downloadingDest = false;
					return;
				}
			}
		}
		xml.open('GET', '/ticketing/dyn/destinations.asp?d=' + olist.value);
		xml.send(null);
	}
}
function updateDate(cellID) {
	var inputName = cellID.substr(0, cellID.length - 8);
	cellID = cellID.substr(cellID.length - 8);
	var checkDate = new Date(cellID.substr(0, 4), cellID.substr(4, 2) - 1, cellID.substr(6, 2));
	dispDate = (checkDate.getMonth() + 1) + '/' + checkDate.getDate() + '/' + checkDate.getFullYear();
	if (document.forms['ticketform'].elements[inputName]) document.forms['ticketform'].elements[inputName].value = dispDate;
	document.getElementById(inputName + 'cals').style.visibility = 'hidden';
}
function showCal(calType) {
	var cal = document.getElementById(calType + 'cals');
	if (!cal) return false;
	var calVis = cal.style.visibility;
	var cals = getElementsByClass('callist');
	for (i = 0; i < cals.length; ++i) {
		cals[i].style.visibility = 'hidden';
	}
	cal.style.visibility = (calVis == 'visible') ? 'hidden' : 'visible';
	if (navigator.userAgent.indexOf('MSIE 6') != -1) {
		var showingOne = false;
		for (i = 0; i < cals.length; ++i) {
			if (cals[i].style.visibility == 'visible') {
				showingOne = true;
				break;
			}
		}
		if (showingOne) {
			document.getElementById('farepicker').style.visibility = 'hidden';
		} else {
			document.getElementById('farepicker').style.visibility = 'visible';
		}
	}
	return false;
}
function switchCal(calID) {
	var container = document.getElementById(calID).parentNode;
	for (i = 0; i < container.childNodes.length; ++i) {
		if (container.childNodes[i].nodeName.toUpperCase() == 'TABLE' && container.childNodes[i].id == calID) {
			container.childNodes[i].style.display = 'block';
		} else if (container.childNodes[i].nodeName.toUpperCase() == 'TABLE') {
			container.childNodes[i].style.display = 'none';
		}
	}
	if (navigator.userAgent.indexOf('MSIE 6') != -1) {
		var cals = getElementsByClass('callist');
		var showingOne = false;
		for (i = 0; i < cals.length; ++i) {
			if (cals[i].style.visibility == 'visible') {
				showingOne = true;
				break;
			}
		}
		if (showingOne) {
			document.getElementById('farepicker').style.visibility = 'hidden';
		} else {
			document.getElementById('farepicker').style.visibility = 'visible';
		}
	}
	return false;
}
function checkReturnRow() {
	var tripType = document.forms['ticketform'].elements['t'];
	var returnRow = document.getElementById('returndate');
	var tableRow = 'table-row';
	if (navigator.userAgent.indexOf('MSIE') != -1 && parseInt(navigator.userAgent.substr(navigator.userAgent.indexOf('MSIE') + 5, 4)) < 8) {
		tableRow = 'block';
	}
	for (i = 0; i < tripType.length; ++i) {
		if (tripType[i].checked) {
			returnRow.style.display = (tripType[i].value != '1') ? tableRow : 'none';
			return;
		}
	}
}
function checkForm(f) {
	var errs = '';
	var today = new Date();
	today.setHours(0);
	today.setMinutes(0);
	today.setSeconds(0);
	today.setMilliseconds(0);
	if (!f.elements['d'].value) errs += '* Please choose your departure city from the dropdown list.\n';
	if (!f.elements['a'].value) errs += '* Please choose your destination city from the dropdown list.\n';
	if (!f.elements['dd'].value) {
		errs += '* Please choose a date for your outbound trip.\n';
	} else {
		var dYmd = f.elements['dd'].value.split(/\D+/);
		if (dYmd[2] && parseInt(dYmd[2]) < 2000) dYmd[2] = parseInt(dYmd[2]) + 2000;
		var dDate = new Date(dYmd[2], dYmd[0] - 1, dYmd[1]);
		if (!dDate || dDate < today) errs += '* Please enter a valid departure date no earlier than today.\n';
		if (dDate > today.setDate(today.getDate() + 180)) errs += '* Please enter a departure date no more than 180 days in advance.';
		f.elements['dd'].value = (dDate.getMonth() + 1) + '/' + dDate.getDate() + '/' + dDate.getFullYear();
	}
	if (f.elements['t'][checkedIndex(f.elements['t'])].value != '1' && !f.elements['rd'].value) {
		errs += '* Please choose a date for your return trip.\n';
	} else if (f.elements['rd'].value != '') {
		var rYmd = f.elements['rd'].value.split(/\D+/);
		if (rYmd[2] && rYmd[2] < 2000) rYmd[2] = parseInt(rYmd[2]) + 2000;
		var rDate = new Date(rYmd[2], rYmd[0] - 1, rYmd[1]);
		if (!rDate || rDate < dDate) errs += '* Please enter a valid return date no earlier than your departure date.\n';
		if (rDate > today) errs += '* Please enter a return date no more than 180 days in advance.';
		f.elements['rd'].value = (rDate.getMonth() + 1) + '/' + rDate.getDate() + '/' + rDate.getFullYear();
	}
	if (errs) {
		alert('There were problems with the form.\n' + errs + 'Please correct them and click "Continue" again.');
		return false;
	}
	return true;
}
function checkedIndex(el) {
	for (i = 0; i < el.length; ++i) {
		if (el[i].checked) return i;
	}
	return -1;
}
function getElementsByClass(className) {
	if (document.getElementsByClassName) {
		return document.getElementsByClassName(className);
	}
	if (document.all) {
		var goodList = new Array();
		for (i = 0; i < document.all.length; ++i) {
			if (document.all(i).className == className) {
				goodList[goodList.length] = document.all(i);
			}
		}
		return goodList;
	}
	return;
}
function launchMiniFinder(trip) {
	var w;
	w = window.open('/ticketing/find-fill-location.asp?t=' + trip, 'fillfinder', 'width=400,height=600,scrollbars');
	return false;
}
