//'Prefixes specified number of zeros to the input number
function zeroPadding(intValue, intTotalDigits) {
	var strValue = new String(intValue);
	for (var i=strValue.length; i<intTotalDigits; i++) {
		strValue = "0" + strValue;
	}
	return strValue;
}

//'Returns day number of the week...
function dayOfWeek(thisDay, thisMonth, thisYear) {
	var dteThisDate = new Date();
	dteThisDate.setDate(thisDay);
	dteThisDate.setMonth(thisMonth -1);
	dteThisDate.setFullYear(thisYear);
	return dteThisDate.getDay();
}

//'Returns java date object from string e.g. "01/01/2002"...
function javaDate(strDate) {
	var intDate  = strDate.substring(0,strDate.indexOf("/"));
	var intMonth = strDate.substring(strDate.indexOf("/")+1, strDate.lastIndexOf("/"));
	var intYear  = strDate.substring(strDate.lastIndexOf("/")+1, strDate.length);
	
	var dteJava = new Date(2003,1,1);
	dteJava.setFullYear(intYear);
	dteJava.setMonth(intMonth - 1);
	dteJava.setDate(intDate);
	return dteJava;
}

//'Returns "01/11/2002" from "2002-11-01"...
function vbsDateComtec(strDate) {
	var intYear = strDate.substring(0, strDate.indexOf("-"));
	var intMonth = strDate.substring(intYear.length + 1, strDate.lastIndexOf("-"));
	var intDay = strDate.substring(strDate.lastIndexOf("-") + 1, strDate.length);
	
	return String(intDay + "/" + intMonth + "/" + intYear);
}

//'Returns string e.g. "01/01/2002" from java date object...
function vbsDate(dteJavaDate) {
	strDate = String(zeroPadding(dteJavaDate.getDate(),2) + "/" + (zeroPadding(dteJavaDate.getMonth() + 1, 2)) + "/" + dteJavaDate.getFullYear());
	return strDate;
}

//'Returns integer from e.g. "Tue"
function getDayNumber(strDay) {
	switch (strDay) {
		case "Sun":
			return 0;
			break;
		case "Mon":
			return 1;
			break;
		case "Tue":
			return 2;
			break;
		case "Wed":
			return 3;
			break;
		case "Thu":
			return 4;
			break;
		case "Fri":
			return 5;
			break;
		case "Sat":
			return 6;
			break;
		default:
			break;
	}
}

function cancelBubble(e) {
	if (!e) var e = window.event;
	e.cancelBubble = true;
}

//'Highlights flight days on roll over...
function highlight(obj) {
	if (document.getElementById) {
		object = document.getElementById(obj);
	}
	else if (document.layers && document.layers[obj]) {
		object =  document.layers[obj];
	}
	else if (document.all) {
		object = document.all[obj];	
	}
	
	if (object.className == "clickable_lo") {
		object.className = "clickable_hi";
		for (var i=0; i<object.childNodes.length; i++) {
			if (object.childNodes[i].tagName == "A") {
				if (object.childNodes[i].className != "no_class") {
					object.childNodes[i].className = "fltanchor_hi";
				}
			}
		}
	} else {
		for (var i=0; i<object.childNodes.length; i++) {
			if (object.childNodes[i].tagName == "A") {
				if (object.childNodes[i].className != "no_class") {
					object.childNodes[i].className = "fltanchor_lo";
				}
			}
		}
		object.className = "clickable_lo";
	}
}

// Javascript DateAdd() function //
Date.prototype.add = function (sInterval, iNum){
  var dTemp = this;
  if (!sInterval || iNum == 0) return dTemp;
  switch (sInterval.toLowerCase()){
    case "ms":
      dTemp.setMilliseconds(dTemp.getMilliseconds() + iNum);
      break;
    case "s":
      dTemp.setSeconds(dTemp.getSeconds() + iNum);
      break;
    case "mi":
      dTemp.setMinutes(dTemp.getMinutes() + iNum);
      break;
    case "h":
      dTemp.setHours(dTemp.getHours() + iNum);
      break;
    case "d":
      dTemp.setDate(dTemp.getDate() + iNum);
      break;
    case "mo":
      dTemp.setMonth(dTemp.getMonth() + iNum);
      break;
    case "y":
      dTemp.setFullYear(dTemp.getFullYear() + iNum);
      break;
  }
  return dTemp;
}

//sample usage
//var d = new Date();
//var d2 = d.add("d", 3); //+3days
// Javascript DateAdd() function //


//'Displays new layer with flight info...
function showFlightDetails(intFlightObject, strFlightsToday, strDepartDate, strDeptAirCode) {
	//'Set variables...
	var frm = document.forms["mainform"];
	var intDealGXPPrice = 0;
	var intNoOfDealsToday = 0;
	var arrFlightsToday = strFlightsToday.split(",");
	var dteJavaDepartDate = javaDate(strDepartDate);
	if (dteJavaDepartDate.add("d", 1) < new Date()) {
		alert("This date is in the past!");
		return;
	}
	
	var divFlightLink = document.getElementById("divFlightLink");
	var strFlightURL = "";
	var strAirportName = "";
	switch (strDeptAirCode) {
		case "LGW":
			strFlightURL = "london_gatwick_gambia_flights";
			strAirportName = "London Gatwick";
			break;
		case "MAN":
			strFlightURL = "manchester_gambia_flights";
			strAirportName = "Manchester";
			break;
		case "BRS":
			strFlightURL = "bristol_gambia_flights";
			strAirportName = "Bristol";
			break;
		case "EMA":
			strFlightURL = "east_midlands_gambia_flights";
			strAirportName = "East Midlands";
			break;
		case "BHX":
			strFlightURL = "birmingham_gambia_flights";
			strAirportName = "Birmingham";
			break;
		case "GLA":
			strFlightURL = "glasgow_gambia_flights";
			strAirportName = "Glasgow";
			break;
		case "BCN":
			strFlightURL = "barcelona_gambia_flights";
			strAirportName = "Barcelona";
			break;
		case "MAD":
			strFlightURL = "madrid_gambia_flights";
			strAirportName = "Madrid";
			break;
		case "AMS":
			strFlightURL = "amsterdam_gambia_flights";
			strAirportName = "Amsterdam";
			break;
		case "OSL":
			strFlightURL = "oslo_gambia_flights";
			strAirportName = "Oslo";
			break;
		case "ARN":
			strFlightURL = "stockholm_gambia_flights";
			strAirportName = "Stockholm";
			break;
		case "CPH":
			strFlightURL = "copenhagen_gambia_flights";
			strAirportName = "Copenhagen";
			break;
		case "BRU":
			strFlightURL = "brussels_gambia_flights";
			strAirportName = "Brussels";
			break;
		default:
			strFlightURL = "usa_gambia_flights";
			strAirportName = "other countries";
	}
	
	divFlightLink.innerHTML = "<a target='_blank' href='http://www.flights-to-the-gambia.co.uk/" + strFlightURL + ".asp?ref=" + uidRef + "&strDepartDate=" + strDepartDate + "&strDeptAirCode=" + strDeptAirCode + "'>flights to The Gambia from " + strAirportName + "</a>."
	
	//'Clear down flight options..
	strFlightOptions.innerHTML = "";
	
	//'If more than one flight, display these options as links...
	if (arrFlightsToday.length > 1) {
		strFlightOptions.innerHTML = arrFlightsToday.length + " flights today: "
		for (var i=0; i<arrFlightsToday.length; i++) {
			var uidThisFlight = arrFlightFlight[arrFlightsToday[i]];
			var uidFlight = arrFlightsToday[i];
			var objThisFlight = eval("objFlight" + uidFlight);
			
			if (objThisFlight.uidFlight == arrFlightFlight[uidFlight]) {
				var strClass = "fltanchor_hi";
			} else {
				var strClass = "fltanchor_lo";
			}
			strFlightOptions.innerHTML += "<a class='" + strClass + "' href='javascript:showFlightDetails(" + arrFlightsToday[i] + ",\"" + strFlightsToday + "\",\"" + strDepartDate + "\",\"" + strDeptAirCode + "\")'><font size=2>Flight " + objThisFlight.strOutFlightNo + " (" + objThisFlight.intNights + " nights)</font></a>&nbsp;&nbsp;";
		}
	}
	
	//'Set value of selected flight...
	objThisFlight = eval("objFlight" + intFlightObject);
	
	//'Temporarily remove select list so that layer will display correctly...
	hide('selectlist');
	
	//'If we know Gambia Experience offer this flight, set the strTourOpCode to "GXP"..
	if (objThisFlight.bitGambiaExp == "True") {
		strTourOpCode = "GXP";
	//'Else determine strTouropCode based on departure airport
	} else if ((objThisFlight.strDeptAirCode == "AMS") || (objThisFlight.strDeptAirCode == "BRU") || (objThisFlight.strDeptAirCode == "FRA")) {
		strTourOpCode = objThisFlight.strDeptAirCode;
	} else if ((objThisFlight.strDeptAirCode == "BCN") || (objThisFlight.strDeptAirCode == "MAD") || (objThisFlight.strDeptAirCode == "LPA")) {
		strTourOpCode = "SPA";
	} else if ((objThisFlight.strDeptAirCode == "CPH") || (objThisFlight.strDeptAirCode == "OSL") || (objThisFlight.strDeptAirCode == "ARN")) {
		strTourOpCode = "MYT";
	} else if ((objThisFlight.strOutFlightNo.substring(0,3) == "FCA") || (objThisFlight.strOutFlightNo.substring(0,3) == "MYT") || (objThisFlight.strOutFlightNo.substring(0,3) == "TCX")) {
		strTourOpCode = objThisFlight.strOutFlightNo.substring(0,3);
	} else {
		strTourOpCode = "XXX";
	}
	
	strDealsExplain.innerHTML = "<a href=javascript:submitDate('" + objThisFlight.uidFlight + "','" + strDepartDate + "',true,'" + strTourOpCode + "',0,'" + strDeptAirCode + "')><img src='../images/buttons/select_flight_lo.gif' onmouseover='this.src=\"../images/buttons/select_flight_hi.gif\"' onmouseout='this.src=\"../images/buttons/select_flight_lo.gif\"' alt='Click here to select these flight details' border='0'></a>";
	
	//'Calculate return date...
	//'Special case - 9-12 nights...
	if (intNights > 7 && intNights < 14) {
		var intTodayDayOfWeek = dteJavaDepartDate.getDay();
		intNights = objThisFlight.intNights;
		document.forms["mainform"].intNights.value = intNights;
	}
	var dteJavaReturnDate = new Date(dteJavaDepartDate.valueOf() + (intNights-1)*24*60*60*1000);
	var intReturnDayOfWeek = dteJavaReturnDate.getDay();
	var strReturnDate = vbsDate(dteJavaReturnDate);
	
	//'Print out objFlight properties to subform in layer1...
	var frm_1 = document.forms[1];
	var strDeptVia = "";
	var strReturnVia = "";
	if (objThisFlight.strDeptVia != "") {
		strDeptVia = "via " + objThisFlight.strDeptVia;
	}
	if (objThisFlight.strReturnVia != "") {
		strReturnVia = "via " + objThisFlight.strReturnVia;
	}
	frm_1.strDeptAirName.value = objThisFlight.strDeptAirName + " (" + objThisFlight.strDeptAirCode + ")";
	frm_1.strDeptVia.value = strDeptVia;
	frm_1.strDepartDate.value = objThisFlight.strDeptDayOfWeek + " " + strDepartDate;
	frm_1.strOutFlightNo.value = objThisFlight.strOutFlightNo;
	
	//Check for British Summer Time...
	var dteBSTStart = javaDate(strBSTStart);
	var dteBSTEnd = javaDate(strBSTEnd);
	dteBSTStart.setHours(1);
	dteBSTEnd.setHours(1);
	
	if (dteJavaDepartDate > dteBSTStart && dteJavaDepartDate < dteBSTEnd) {
		frm_1.dteOutDeptTime.value = objThisFlight.dteOutDeptTimeBST;
		frm_1.dteOutArrTime.value = objThisFlight.dteOutArrTimeBST;
	} else {
		frm_1.dteOutDeptTime.value = objThisFlight.dteOutDeptTimeGMT;
		frm_1.dteOutArrTime.value = objThisFlight.dteOutArrTimeGMT;
	}
	if (dteJavaReturnDate > dteBSTStart && dteJavaReturnDate < dteBSTEnd) {
		frm_1.dteReturnDeptTime.value = objThisFlight.dteReturnDeptTimeBST;
		frm_1.dteReturnArrTime.value = objThisFlight.dteReturnArrTimeBST;
	} else {
		frm_1.dteReturnDeptTime.value = objThisFlight.dteReturnDeptTimeGMT;
		frm_1.dteReturnArrTime.value = objThisFlight.dteReturnArrTimeGMT;
	}
	frm_1.strReturnAirName.value = "Banjul (BJL)";
	frm_1.strReturnVia.value = strReturnVia;
	frm_1.strReturnFlightNo.value = objThisFlight.strReturnFlightNo;
	frm_1.strReturnDateDesc.value = dow[intReturnDayOfWeek] + " " + strReturnDate;
	frm_1.strAircraft.value = objThisFlight.strAircraft;
	frm_1.strAirline.value = objThisFlight.strAirline;			
	
	//'Check how far page is scrolled - only works with IE... (NN is window.pageYOffset)
	if (layer1.style.display != "") {
		layer1.style.top = document.body.scrollTop + 30;
	}

	layer1.style.display = "";
	
	//'Print out objFlight properties to main form (to be saved in step 3)...
	var frm_0 = document.forms[0];
	frm_0.intNights.value = intNights;
	frm_0.strDepartDate.value = strDepartDate;
	frm_0.strDeptAirName.value = frm_1.strDeptAirName.value.substring(0, frm_1.strDeptAirName.value.length-6);
	frm_0.strDeptAirCode.value = strDeptAirCode;
	frm_0.strOutFlightNo.value = frm_1.strOutFlightNo.value;
	frm_0.dteOutDeptTime.value = frm_1.dteOutDeptTime.value;
	frm_0.dteOutArrTime.value = frm_1.dteOutArrTime.value;
	frm_0.strReturnFlightNo.value = frm_1.strReturnFlightNo.value;
	frm_0.strReturnDate.value = strReturnDate;
	frm_0.dteReturnDeptTime.value = frm_1.dteReturnDeptTime.value;
	frm_0.dteReturnArrTime.value = frm_1.dteReturnArrTime.value;
	frm_0.strAircraft.value = frm_1.strAircraft.value;
	frm_0.strAirline.value = frm_1.strAirline.value;
	//frm_0.strDeptDayOfWeek.value = objThisFlight.strDeptDayOfWeek;
	//frm_0.strReturnDayOfWeek.value = objThisFlight.strReturnDayOfWeek;
}

//'Submits form with flight info...
function submitDate (uidFlight, strDepartDate, bitFlightExists, strTouropCode, strDeptAirCode, changeMonth, bitClearFlightInfo) {
	var frm_0 = document.forms[0];
	var intNights = frm_0.intNights.value;
	var uidFlightSelected = frm_0.uidFlight.value;
	var dteJavaDepartDate = javaDate(strDepartDate);
	var intDepartDay = strDepartDate.substring(0, strDepartDate.indexOf("/"));
	var dteTemp = new Date();
	if (dteJavaDepartDate < Date(dteTemp.getFullYear(), dteTemp.getMonth(), dteTemp.getDate())) {
		alert("This date is in the past!");
		return;
	}

	//'Check whether called directly from mainform...
	if (typeof strTouropCode == "undefined") {
		bitClearFlightInfo = true;
		strTouropCode = frm_0.strTouropCode.value;
		strDeptAirCode = frm_0.strDeptAirCode.value;
	}

	//'Check whether a tour operator for this flight has been found. 
	//'If not, determine this from strDeptAirCode...
	if (strTouropCode == "" || strTouropCode == "XXX") {
		switch(strDeptAirCode) { 
			case "BRU":
				strTouropCode = "SNB";
				break;
			case "AMS":
				strTouropCode = "TRN";
				break;
			case "FRA":
				strTouropCode = "TCX";
				break;
			case "BCN":
				strTouropCode = "SPA";
				break;
			case "MAD":
				strTouropCode = "SPA";
				break;
			case "LPA":
				strTouropCode = "MYT";
				break;
			case "CPH":
				strTouropCode = "MYT";
				break;
			case "OSL":
				strTouropCode = "MYT";
				break;
			case "ARN":
				strTouropCode = "MYT";
				break;
			default:
				strTouropCode = "XXX";
		}
	}
	
	//'Special case: 9-12 night flights...
	var intDeptDayOfWeek = dteJavaDepartDate.getDay();
	
	/*
	if (intNights > 7 && intNights < 14) {
		switch(intDeptDayOfWeek) {
			//'Monday
			case 1:
				intNights = 12;
				document.forms["mainform"].intNights.value = 12;
				break;
			//'Tuesday
			case 2:
				intNights = 10;
				document.forms["mainform"].intNights.value = 10;
				break;
			//'Wednesday
			case 3:
				intNights = 9;
				document.forms["mainform"].intNights.value = 9;
				break;
			//'Friday
			case 5:
				intNights = 11;
				document.forms["mainform"].intNights.value = 11;
				break;
			//'Saturday
			case 6:
				intNights = 9;
				document.forms["mainform"].intNights.value = 9;
				break;
		}
	}
	*/
	
	//'If there is no flight on this day alert a message before submitting...
	if (!bitFlightExists && !changeMonth) {
		if (confirm("We are unaware of any flights leaving on this day. Do you wish to continue?")) {
			frm_0.uidFlight.value = "NULL";
			frm_0.strTouropCode.value = "";
			frm_0.intDepartDay.value = intDepartDay;
			frm_0.strDepartDate.value = strDepartDate;
			frm_0.submit();
		} else {
			return false;
		}
	}
	
	//'Update mainform with selected flight details and submit form...
	if (uidFlightSelected == uidFlight) {
		//alert("same flight");
		frm_0.uidFlight.value = uidFlight;
		frm_0.strTouropCode.value = strTouropCode;
		frm_0.intDepartDay.value = intDepartDay;
		frm_0.strDepartDate.value = strDepartDate;
		//return;
		frm_0.submit();
	} else {
		//alert("different flight");
		if (bitClearFlightInfo) {
			frm_0.uidFlight.value = "";
			frm_0.strTouropCode.value = "";
			frm_0.intDepartDay.value = intDepartDay;
			frm_0.strDepartDate.value = strDepartDate;
			frm_0.strDeptAirCode.value = "";
			frm_0.strDeptAirName.value = "";
			frm_0.strAirline.value = "";
			frm_0.strAircraft.value = "";
			frm_0.strOutFlightNo.value = "";
			frm_0.dteOutDeptTime.value = "";
			frm_0.dteOutArrTime.value = "";
			frm_0.strReturnFlightNo.value = "";
			frm_0.dteReturnDeptTime.value = "";
			frm_0.dteReturnArrTime.value = "";
		} else {
			frm_0.uidFlight.value = uidFlight;
			frm_0.strTouropCode.value = strTouropCode;
			frm_0.intDepartDay.value = intDepartDay;
			frm_0.strDepartDate.value = strDepartDate;
		}
		//return;
		frm_0.submit();
	}
}

//'Shows select list of months...
function show(object) {
  if (document.getElementById) {
    document.getElementById(object).style.display = '';
  }
  else if (document.layers && document.layers[object]) {
    document.layers[object].display = '';
  }
  else if (document.all) {
    document.all[object].style.display = '';
  }
}

//'Hides select list of months (would be transparent through layer)...
function hide(object) {
  if (document.getElementById) {
    document.getElementById(object).style.display = 'none';
  }
  else if (document.layers && document.layers[object]) {
    document.layers[object].display = 'none';
  }
  else if (document.all) {
    document.all[object].style.display = 'none';
  }
}