//
// FlightTracker search form functions.
//
function ftSynchronize(oChangedElement) {

	var idSource = oChangedElement.id;
	var idTarget;
	
	switch (idSource) {
		case 'airline-pull':
			idTarget = 'airline-fill';
			break;
			
		case 'airline-fill':
			idTarget = 'airline-pull';
			break;
		
		case 'selFlightTrackerDepap':
			idTarget = 'txtFlightTrackerDepap';
			break;
			
		case 'txtFlightTrackerDepap':
			idTarget = 'selFlightTrackerDepap';
			break;
			
		case 'selFlightTrackerArrap':
			idTarget = 'txtFlightTrackerArrap';
			break;
			
		case 'txtFlightTrackerArrap':
			idTarget = 'selFlightTrackerArrap';
			break;
			
		default:
			alert('Unknown source id: ' + idSource);
			return;
	}
				
			
	var oSource = document.getElementById(idSource);
	var oTarget = document.getElementById(idTarget);
	
	if (oSource == null) {
		alert('Cannot find source object: ' + idSource);
		return;
	}
	
	if (oTarget == null) {
		alert('Cannot find target object: ' + idTarget);
		return;
	}
	
	ftSynchronizeSelTxt(oSource, oTarget);
}


function ftSynchronizeSelTxt(oElementSource, oElementTarget) {
	if (oElementSource.id.substring(0,3) == 'sel'
			|| oElementSource.id == 'airline-pull') {
		// Source is a select element, target is a text input.
		var selectedOption = oElementSource.options[oElementSource.selectedIndex];
		oElementTarget.value = selectedOption.value;
	} else {
		// Source is a text input, target is a select element.
		var targetCode = oElementSource.value.toUpperCase();
		
		var i = 0;
		var found = false;
		
		while (!found && i < oElementTarget.length) {
			var currOption = oElementTarget.options[i];
			if (currOption.value == targetCode) {
				currOption.selected = true;
				found = true;
			}
			i++;
		}
	
		if (!found) {
			// Option still not found, select default in pulldown...
			oElementTarget.selectedIndex = 0;
		}
	}
}


function isEnterKeyPressed(event) {
	return (event.keyCode == 13);
}


function ftHandleKeypress(searchType, oFormElement, event) {
	
	if (isEnterKeyPressed(event)) {
		// Enter key pressed.
		// Validate before submitting.
		
			
		if (searchType == "citypair") {
			if (!ftSubmitCityPair()) {
				return false;
			}
		} else if (searchType == "singleflight") {
			if (!ftSubmitSingleFlight()) {
				return false;
			}
		}
		
		
		oFormElement.submit();
		
	}
}

function ftHandleKeypressCityPair(oForm, event) {
	if (isEnterKeyPressed(event)) {
		// Enter key pressed.
		// Validate before submitting.
		
		if (ftSubmitCityPair()) {
			oForm.submit();
		}
	}
}

function ftSubmitSingleFlight() {
	//
	// Validate first.
	//

	
	var fn = document.getElementById("flightnumber-fill");
	var al = document.getElementById("airline-fill");
	
	fn.value = trim(fn.value);
	al.value = trim(al.value);
	
	
	if (! isPureNumber(fn.value)) {
		//
		// fn is not a pure number.
		// fn represents an ACID.
		// 
		// Check if any airline code is entered.

		if (al.value != '') {
			if (fn.value.length == 0) {
				// Airline code filled but no flight number.
				alert("Enter a valid FLIGHT NUMBER.");
				return false;
			} else {
			
				// Cannot enter ACID and airline code at the same time.
				alert("You have entered an airline code.  Either enter a valid FLIGHT NUMBER or remove the airline code.");
				return false;
			}			
			
			
		}
		
		
		//
		// Check if ACID is long enough.
		//
		if (fn.value.length <= 2) {
			// ACID is too short.
			alert ("Enter a valid AIRLINE CODE and FLIGHT NUMBER.");
			return false;
		}
		
		
		//
		// First character must be alphanumeric.
		//
		if (!checkCharacterValidity(fn.value.charAt(0))) {
			// First character fails...
			alert ("Enter a valid FLIGHT NUMBER.");
			return false;
		}
		
		
		//
		// Second character must be alphanumeric.
		//
		if (!checkCharacterValidity(fn.value.charAt(1))) {
			// Second character fails...
			alert ("Enter a valid FLIGHT NUMBER.");
			return false;
		}
		
		
		
		//
		// Last character must always be a digit.
		//
		if (!isDigit(fn.value.charAt(fn.value.length-1))) {
			alert("Enter a valid FLIGHT NUMBER.");
			return false;
		}
		
				
		//
		// If ACID is 3 characters long, the ACID is valid.
		// Otherwise, the remaining string must be a positive number.
		//
		if (fn.value.length > 3) {
			var restoffn = fn.value.substr(3,fn.value.length);

			if (!isPureNumber(restoffn)) {
				// Rest of fn is not a number.
				alert("Enter a valid FLIGHT NUMBER.");
				return false;
			}
			
		
			if (restoffn < 0) {
				//Negative flight number.
				alert("Enter a valid FLIGHT NUMBER.");
				return false;
			}
			
		}				
		
		
		
	
			
	} else {
		// fn is a pure number, make sure an airline code is selected.
		
		
		var al = document.getElementById("airline-fill");
		if ((al.value.length > 3) || (al.value.length < 2)) {
			// Airline code is too long or too short.
			alert("Select an AIRLINE or enter a valid airline code.");
			return false;
		}
		
		if (!checkCharacterValidity(al.value)) {
			// Airline code contains bad, bad characters.
			// Not all alphanumeric characters.
			alert("Enter a valid AIRLINE CODE.");
			return false;
		}
		
		
		if (fn.value < 0) {
			// Flight number is negative
			alert("Enter a valid FLIGHT NUMBER.");
			return false;
		}

	}


	
	//
	// All good, submit.
	//
	return true;
	
}



function ftSubmitCityPair() {
	//
	// Validate first.
	//
	var depap = document.getElementById("txtFlightTrackerDepap");
	depap.value = trim(depap.value)
	
	
	
	
	if ((!checkCharacterValidity(depap.value)) 
			|| (depap.value.length > 4) 
			|| (depap.value.length < 3)) {
		alert("Select a DEPARTURE AIRPORT or enter its airport code.");
		return false;
	}
	
	var arrap = document.getElementById("txtFlightTrackerArrap");
	arrap.value = trim(arrap.value);
	if ((!checkCharacterValidity(arrap.value)) || (arrap.value.length > 4) || (arrap.value.length < 3)) {
		alert("Select an ARRIVAL AIRPORT or enter its airport code.");
		return false;
	}
	
	var whenHour = document.getElementById("selFlightTrackerWhenHour");
	if (whenHour.value == "") {
		alert("Select a TIME OF DAY to search for arrival or departure.");
		return false;
	}
		
	//
	// All good, submit.
	//
	return true;
}


function isPureNumber(strTest) {
	if (strTest.length == 0) {
		// Empty string.
		return false;
	}
	
	for (i=0; i<strTest.length; i++) {
		
		if (! isDigit(strTest.charAt(i))) {
			// Non-number digit detected.
			return false;
		}
	}
	return true;
}

//
// Checks if all characters are alphanumeric.
//
function checkCharacterValidity(str){

    for(var i=0; i<str.length; i++){
		if(isValidChar(str.charAt(i)) != true){
				return false;
		}
	}
	return true;    
}





function isDigit( ch )
{
   if( (ch >= '0') && (ch <= '9') ) 
	return true;
   else 
	return false;
}

function isAlpha( ch )

{
   if( (ch >= 'a') && (ch <= 'z') ) return true;
   else if( (ch >= 'A') && (ch <= 'Z') ) return true;
   else return false;
}

function isValidChar( ch )
{
	if(isDigit(ch) || isAlpha(ch))
		return true;
	else
		return false;
}

function isNum(inputStr)
{
	for(var i=0; i < inputStr.length; i++)
		if(isDigit(inputStr.charAt(i)) == false)
			return false;

	return true;

}

function stripLeadingZeros(strText){
	while (strText.substring(0,1) == '0')
		strText = strText.substring(1, strText.length);
	return strText;
}

function trimFlightNum(strText) {
			
	strText = trim(strText);
	strText = stripLeadingZeros(strText);
	
			
	if (!isNum(strText.substring(0,2))){
		strText = strText.substring(0,2) + stripLeadingZeros(strText.substring(2, strText.length));
	}
	return strText;
}

function clickedHelpLink(strPath, ContextHelp)
{
	strFName = "FTHelp/FTHelp.asp"
	strFName = strPath + strFName
	
	if(ContextHelp != "")
		strFName = strFName + "?ch=" + ContextHelp;

	window.open(strFName,"","HEIGHT=500,WIDTH=760,MENUBAR=NO,SCROLLBARS=YES,LOCATION=NO,RESIZABLE=YES");
}

function selectMoreAirlines(strPath)
{
  window.open( strPath + "MoreAirlines/AirlineCodes.html","","HEIGHT=400,WIDTH=350,MENUBAR=NO,SCROLLBARS=YES,LOCATION=NO,RESIZABLE=YES,STATUSBAR=YES");
}




//
// MOVE THESE FUNCTIONS TO A COMMON MODULE
//

function trim(TRIM_VALUE){
	if (TRIM_VALUE.length < 1) {
		return"";
	}

	TRIM_VALUE = RTrim(TRIM_VALUE);
	TRIM_VALUE = LTrim(TRIM_VALUE);
	if (TRIM_VALUE=="") {
		return "";
	} else {
		return TRIM_VALUE;
	}
} //End Function



function RTrim(VALUE){
	var w_space = String.fromCharCode(32);
	var v_length = VALUE.length;
	var strTemp = "";
	
	if (v_length < 0) {
		return"";
	}
	var iTemp = v_length -1;

	while(iTemp > -1) {
		if (VALUE.charAt(iTemp) == w_space) {
		} else {
			strTemp = VALUE.substring(0,iTemp +1);
			break;
		}
		iTemp = iTemp-1;

	} //End While
	return strTemp;

} //End Function

function LTrim(VALUE){
	var w_space = String.fromCharCode(32);
	if(v_length < 1){
		return"";
	}
	var v_length = VALUE.length;
	var strTemp = "";

	var iTemp = 0;

	while(iTemp < v_length){
		if(VALUE.charAt(iTemp) == w_space) {
		} else {
			strTemp = VALUE.substring(iTemp,v_length);
			break;
		}
		iTemp = iTemp + 1;
	} //End While
	return strTemp;
} //End Function



function ftGetTodayDate(){

  var Today = new Date()
  var TodayYear = Today.getYear();
  if(TodayYear < 1000){
    TodayYear += 1900;
  }
  var todayInMS = Today.getTime()
  var tomorrowInMS = todayInMS + (60 * 60 * 24 * 1000)
  var yesterdayInMS = todayInMS - (60 * 60 * 24 * 1000)
  var Yesterday =  new Date(yesterdayInMS)
  var YesterdayYear = Yesterday.getYear();
  if(YesterdayYear < 1000){
    YesterdayYear += 1900;
  }
  var Tomorrow = new Date(tomorrowInMS)
  var TomorrowYear = Tomorrow.getYear();
  if(TomorrowYear < 1000){
    TomorrowYear += 1900;
  }

  var DayArray = new Array("Sun","Mon","Tue","Wed","Thu","Fri","Sat")
  var monthArray = new Array("Jan", "Feb", "Mar",
                   "Apr", "May", "Jun", "Jul", "Aug",
                   "Sep", "Oct", "Nov", "Dec")
  var numMonthArray = new Array("01","02","03","04","05","06","07","08","09","10","11","12")

  var numDayArray = new Array("00","01","02","03","04","05","06","07","08","09","10","11","12","13","14","15",
                                    "16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31")

  var whenDateObj = document.getElementById("ftSingleFlightWhenDateSel");
  
  whenDateObj.options[0].text = (DayArray[Today.getDay()] + ",  " + monthArray[Today.getMonth()] + "  " +  Today.getDate() );
  whenDateObj.options[0].value = (TodayYear +""+ numMonthArray[Today.getMonth()] +""+ numDayArray[Today.getDate()]);
  whenDateObj.options[1].text = (DayArray[Yesterday.getDay()] + ",  " + monthArray[Yesterday.getMonth()] + "  " +  Yesterday.getDate());
  whenDateObj.options[1].value = (YesterdayYear +""+ numMonthArray[Yesterday.getMonth()] +""+ numDayArray[Yesterday.getDate()]);
  whenDateObj.options[2].text = (DayArray[Tomorrow.getDay()] + ",  " + monthArray[Tomorrow.getMonth()] + "  " +  Tomorrow.getDate());
  whenDateObj.options[2].value = (TomorrowYear +""+ numMonthArray[Tomorrow.getMonth()] +""+ numDayArray[Tomorrow.getDate()]);

  var whenDateObj = document.getElementById("ftCityPairWhenDateSel");
  whenDateObj.options[0].text = (DayArray[Today.getDay()] + ",  " + monthArray[Today.getMonth()] + "  " +  Today.getDate());
  whenDateObj.options[0].value = (TodayYear +""+ numMonthArray[Today.getMonth()] +""+ numDayArray[Today.getDate()]);
  whenDateObj.options[1].text = (DayArray[Yesterday.getDay()] + ",  " + monthArray[Yesterday.getMonth()] + "  " +  Yesterday.getDate());
  whenDateObj.options[1].value = (YesterdayYear +""+ numMonthArray[Yesterday.getMonth()] +""+ numDayArray[Yesterday.getDate()]);
  whenDateObj.options[2].text = (DayArray[Tomorrow.getDay()] + ",  " + monthArray[Tomorrow.getMonth()] + "  " +  Tomorrow.getDate());
  whenDateObj.options[2].value = (TomorrowYear +""+ numMonthArray[Tomorrow.getMonth()] +""+ numDayArray[Tomorrow.getDate()]);
}


function ftSelectDate(strQtype,strDesiredDate) {
	// Choose correct whenDate pulldown.
	var targetId;
	
	switch (strQtype) {
		case 'sfi':
			targetId = 'ftSingleFlightWhenDateSel';
			break;
		case 'cpi':
			targetId = 'ftCityPairWhenDateSel';
			break;
		default:
			// Do not alert, unknown query type essentially means
			// that there is no error.
			//alert('Unknown query type:' + strQtype);
			return;
	}
	
	
	var oElementTarget = document.getElementById(targetId);
	if (oElementTarget == null) {
		alert('Unknown id: ' + targetId);
		return;
	}
	
	var i = 0;
	var found = false;
			
	while (!found && i < oElementTarget.length) {
		var currOption = oElementTarget.options[i];
		if (currOption.value == strDesiredDate) {
			currOption.selected = true;
			found = true;
			
		}
		i++;
	}
		
	if (!found) {
		// Option still not found, select default in pulldown...
		oElementTarget.selectedIndex = 0;
	}
}

//
// FlightTracker Query Results functions
//


function ftGetAirport(airportCode) {
	var targetAirport;
	var urlViewAirport = "/traveltools/viewairport.asp?airport="
	
	airportCode = airportCode.toUpperCase();
	
	targetAirport = apinfoGetRecord(airportCode);
	
	if (targetAirport == null) {
		document.write(airportCode);
	} else {
		document.write(targetAirport[APINFO_LOCATION]);
		
		document.write(' (');
		if (targetAirport[APINFO_FVSUPPORT] == 1) {
			document.write('<a href="' + urlViewAirport + airportCode + '">');
			document.write(targetAirport[APINFO_CODE]);	
			document.write('</a>');
		} else {
			document.write(targetAirport[APINFO_CODE]);
		}
		document.write(')');
	}
}

function ftAirportLocation(airportCode) {
	var result = airportCode;
	
	var targetAirport = apinfoGetRecord(airportCode);
	
	if (targetAirport != null) {
		result = targetAirport[APINFO_LOCATION];
	}
	
	return result;
}
