var isSafari = ( navigator.userAgent.indexOf("Safari") > -1 ? true : false ); 
var isIE = false ; 
if(navigator.userAgent.indexOf("Microsoft") > -1 || navigator.userAgent.indexOf("MSIE") > -1){
	isIE = true;
}
var removedCity = new Array("-1");
function switchFFFTab(on, off, onPrefix, offPrefix) {
	var divOn = document.getElementById(on);
	var divOff = document.getElementById(off);
	var tabOn = document.getElementById(on+"Tab");
	var tabOff = document.getElementById(off+"Tab");
	var radioOn = document.getElementById(on+"Radio");
	var radioOff = document.getElementById(off+"Radio");
	//set styles for div
	tabOn.className = "selected";
	tabOff.className = "deselected";
	divOn.style.display = '';
	divOff.style.display = 'none';
	radioOn.checked = true;
	radioOff.checked = false;
	//set from
	var fromField = document.getElementById(offPrefix+"depart_loc");
	var toField = document.getElementById(onPrefix+"depart_loc");
	for (var i=0; i < toField.length; i++) {
		if (toField.item(i).value == fromField.item(fromField.selectedIndex).value) { 
			toField.item(i).selected = true; 
			break;
		}
	}
	//get current date, date from off tab and get offset
	var offsetField = document.getElementById(onPrefix+"defaultDepartOffset");
	var current = new Date();
	current.setDate(current.getDate()+parseInt(offsetField.value));
	current.setHours(0, 0, 0, 0);
	var newDate = getDateValue(offPrefix+"depart");
	var newReturnDate = getDateValue(offPrefix+"arrival");
	//check if current date > new date
	if (current.getTime() > newDate.getTime()) { 
		newDate = new Date(current); 
		var dateDifference = 1;
		if (onPrefix == "h_") { dateDifference = 2; }
		newReturnDate = new Date(current.getDate()+dateDifference);
	}
	//set return to checked
	setReturn();
	//set the date fields
	setDateFields(onPrefix+"depart", newDate);
	setDateFields(onPrefix+"arrival", newReturnDate);
	//check date and city
	dateChanged(onPrefix, true);
	addCityBack(document.getElementById(offPrefix+"arrival_loc"));
	cityChanged(document.getElementById(onPrefix+"depart_loc"), "from", onPrefix);
}
//updates number of nights or return date
function updateNights(prefix, whichField) {
	var numNights = document.getElementById("numOfNights");
	var departDate = getDateValue(prefix+"depart");
	var returnDate = getDateValue(prefix+"arrival");
	//have updated return, so update nights
	if (whichField == "date") { numNights.value = Math.round((returnDate.getTime()-departDate.getTime())/(1000*60*60*24)); }
	//updated nights so set return
	else if (whichField == "nights") {
		if (!isNaN(parseInt(numNights.value))) {
			returnDate = departDate;
			returnDate.setDate(departDate.getDate()+parseInt(numNights.value));
			setDateFields(prefix+"arrival", returnDate);
			dateChanged(prefix);
		}
	}
}

//checks city list to see if need to remove value
function checkCityList(city, field) {
	addCityBack(field);
	var haveCity = false;
	//check if city in field
	for (var i=0; i < field.length; i++) {
		if (field(i).value == city) { 
			haveCity = true;
			break;
		}
	}
	//add city to var and remove from list
	if (haveCity) {
		removedCity = new Array(i, field(i).value, field(i).text);
		field.remove(i);
	}
}
//add city back to list
function addCityBack(field) {
	var selected = field.selectedIndex;
	if (removedCity[0] != "-1") { 
		for (var i = field.options.length; i > removedCity[0]; i--) { 
			if(field.options[i-1].value != "-1"){
				 field.options[i] = new Option(field.options[i-1].text, field.options[i-1].value);
			} else {
				field.options[i] = new Option(field.options[i-1].text, field.options[i-1].value);
				field.options[i].className = "opt"
			}
			if (i-1 == selected) { field.selectedIndex = i }
		}
		field.options[removedCity[0]] = new Option(removedCity[2], removedCity[1]);
		removedCity = new Array("-1");
	}
}
//called when city changed to update fare preference
function cityChanged(field, direction, prefix) {
	//get value
	var city = specialCity(field);
	
	if (city == "") { return; }
	//get region 
	var region = "";
	for (var i = 0; i < cities.length; i++) {
		if (cities[i][0] == city) { 
			region = cities[i][2]; 
			break;
		}
	}
	var fromRegion = document.getElementById(prefix+"fromRegion");
	var toRegion = document.getElementById(prefix+"toRegion");
	if (direction == "from") { 
		fromRegion.value = region; 
		checkCityList(city, document.getElementById(prefix+"arrival_loc"))
	}
	else { toRegion.value = region; }
	var longHaul = document.getElementById(prefix+"longHaul");
	var prefField = document.getElementById(prefix+"longHaulPref");
	
	//not if holidays
	if (prefix == "") {		
		//show appropriate fare preference box
		var shortHaul = document.getElementById(prefix+"shortHaul");
		var infants = document.getElementById(prefix+"infants");
		//long haul
		if (fromRegion.value == "longhaul" || toRegion.value == "longhaul" || (fromRegion.value == "tasman" && toRegion.value == "tasman")) {
			shortHaul.style.display = "none";
			longHaul.style.display = "";
			infants.style.display = "none";

		}
		//domestic
		else if (fromRegion.value == "domestic" && toRegion.value == "domestic") {
			shortHaul.style.display = "";
			longHaul.style.display = "none";
			infants.style.display = "";
			prefField = document.getElementById(prefix+"shortHaulPref");

		}
		//short haul
		else {
			shortHaul.style.display = "";
			longHaul.style.display = "none";
			infants.style.display = "";
			prefField = document.getElementById(prefix+"shortHaulPref");
		}
	}
	
	//if domestic remove business class
	if (fromRegion.value == "domestic" && toRegion.value == "domestic") 
	{ 
		showClassItem(prefField, "business", "Business Class", false); 
	}
	else 
	{ 
		showClassItem(prefField, "business", "Business Class", true); }
	
	//check whether to show pe
	checkPE(prefField, prefix);
			
	//set the selected class
	setClass(prefField, prefix);
	
	//Turn Business class on only if in AU/NZ site and going to NLK from AU (norfolk Island) iTools #: 12936
	if ((document.getElementById(prefix+"arrival_loc").value == "NLK" && fromRegion.value == "tasman")) 
	{ 
		showClassItem(prefField, "business", "Business Class", false); 
	}

}


function specialCity (field)
{
	var city = field.item(field.selectedIndex).value;
	while ((city == "-2" ||city == "-1") && field.selectedIndex < field.length-1) {
		field.selectedIndex ++;
		city = field.item(field.selectedIndex).value;
	}
	return city;
} 
  
 
//pe only available from certain regions

//checks whether to show PE route

function checkPE(classField, prefix) {

	if (!classField) { return; }

    	var fromField = document.getElementById(prefix+"depart_loc");
 		var toField = document.getElementById(prefix+"arrival_loc");

		if (fromField) {

        	var from = fromField.item(fromField.selectedIndex).value;
            var to = toField.item(toField.selectedIndex).value;
            var showPE = false;
			var isInPElist = false
			var routeID
			
			//In PE list
			for (var i=0; i < peRoutes.length; i++) {if (from == peRoutes[i][0] && to == peRoutes[i][1]){isInPElist = true;routeID = i;}}

			//DOMESTIC FROM
			for (var i=0; i < peRoutes.length; i++) {if (peRoutes[i][0] == "domestic" && to == peRoutes[i][1]){for (var X=0; X < cities.length; X++) {if (from == cities[X][0] &&  cities[X][2] == "domestic"){isInPElist = true;routeID = i;}}}}
			
			//DOMESTIC TO            
			for (var i=0; i < peRoutes.length; i++) {if (peRoutes[i][1] == "domestic" && from == peRoutes[i][0]){for (var X=0; X < cities.length; X++) {if (to == cities[X][0] &&  cities[X][2] == "domestic"){isInPElist = true;routeID = i;}}}}

			//TASMAN TO 
			for (var i=0; i < peRoutes.length; i++) {if (peRoutes[i][1] == "tasman" && from == peRoutes[i][0]){for (var X=0; X < cities.length; X++) {if (to == cities[X][0] &&  cities[X][2] == "tasman"){isInPElist = true;routeID = i;}}}}
			
			//PE-US TO
			for (var i=0; i < peRoutes.length; i++) {if (peRoutes[i][1] == "pe-us" && from == peRoutes[i][0]){for (var X=0; X < cities.length; X++) {	if (cities[X][3] == "pe-us" && to == cities[X][0]){	isInPElist = true;routeID = i;break;}}}}

			//PE-CA TO
			for (var i=0; i < peRoutes.length; i++) {if (peRoutes[i][1] == "pe-ca" && from == peRoutes[i][0]){for (var X=0; X < cities.length; X++) {	if (cities[X][3] == "pe-ca" && to == cities[X][0]){	isInPElist = true;routeID = i;break;}}}}

			//PE-PI TO
			for (var i=0; i < peRoutes.length; i++) {if (peRoutes[i][1] == "pe-pi" && from == peRoutes[i][0]){for (var X=0; X < cities.length; X++) {	if (cities[X][3] == "pe-pi" && to == cities[X][0]){	isInPElist = true;routeID = i;break;}}}}
						
			if (isInPElist) {
				var dateParts = peRoutes[routeID][2].split("/");
				var peDate = new Date();
				peDate.setFullYear(dateParts[2]);
				peDate.setMonth(dateParts[1]-1);
				peDate.setDate(dateParts[0]);
				peDate.setHours(0, 0, 0, 0);
				var departDate = getDateValue(prefix+"depart");
				var startdate = new Date(dateParts[2],dateParts[1]-1,dateParts[0])
				
				if (startdate <= departDate) { showPE = true; }
				if (departDate.getTime() >= peDate.getTime()) { showPE = true; }
				
				//iTools 16762 - for Singapore only, do not allow PE if dept/arrv date after 2nd Oct 2006
				if(peRoutes[routeID].length == 4 && peRoutes[routeID][3] != null && peRoutes[routeID][3].toString() !=  ""){
					dateParts = peRoutes[routeID][3].split("/");
					peDate = new Date();
					peDate.setFullYear(dateParts[2]);
					peDate.setMonth(dateParts[1]-1);
					peDate.setDate(dateParts[0]);
					peDate.setHours(0, 0, 0, 0);
					var effectdate = new Date(dateParts[2],dateParts[1]-1,dateParts[0]);
			
					if (departDate > effectdate) { showPE = false; } else { showPE = true; }
					if (departDate.getTime() >= peDate.getTime()) { showPE = false; } else { showPE = true; }	
						
					var arrivalDate = getDateValue(prefix+"arrival");	
					
					if (arrivalDate > effectdate) { showPE = false; } else { showPE = true; }
					if (arrivalDate.getTime() >= peDate.getTime()) { showPE = false; } else { showPE = true; }						
				}				
			}

			try  // must catch the exception for land only
			{
				showClassItem(classField, "premiumeconomy", "Premium Economy", showPE); 
			}
			catch (e)
			{
			}

	}

}


//adds / removes pe from list
function showClassItem(field, item, display, show) {
	var haveItem = false;
	//check if pe in list
	for (var i=0; i < field.length; i++) {
		if (field.item(i).value == item) {
			haveItem = true;
			break;
		}
	}
	if (show && !haveItem) {
		var newItem = new Option(display, item);
		if (item == "premiumeconomy") { 
			field.options[field.options.length] = new Option(field.options[field.options.length-1].text, field.options[field.options.length-1].value); 
			field.options[field.options.length-2] = newItem; 
		}
		else { field.options[field.options.length] = newItem; }			
	}
	else if (!show && haveItem) { 	
		if (field.selectedIndex == i){field.selectedIndex = 0;}		 
		field.remove(i); 
	}
}
//called when date changed to update return date
function dateChanged(prefix, validate) {
	var departDate = getDateValue(prefix+"depart");
	var returnDate = getDateValue(prefix+"arrival");
	//set depart date - so will roll forward to valid date if needs to
	setDateFields(prefix+"depart", departDate);
	//check if a return flights before adjust return
	var returnField = document.getElementById("type_return");
	var numOfNights = document.getElementById("numOfNights").value;					
	if (returnField.checked) {
		//check if depart > return
		if (validate) {
			var dateDiff = Math.ceil((departDate.getTime()-returnDate.getTime())/(1000*60*60*24));
			if ((dateDiff > 0 && prefix == "") || (dateDiff > -1 && prefix == "h_")) { 
				returnDate = departDate;
				if (prefix == "") { returnDate.setDate(returnDate.getDate()+1); }
				else {
					if(tempNumOfNights)
						returnDate.setDate(returnDate.getDate()+tempNumOfNights);
					else 
						returnDate.setDate(returnDate.getDate()+2);					
				}
			}
		}
		setDateFields(prefix+"arrival", returnDate);
	}
	
	//check whether to show pe
	checkPE(document.getElementById(prefix+"shortHaulPref"), prefix);		
	checkPE(document.getElementById(prefix+"longHaulPref"), prefix);
			
	if (prefix != "") { updateNights(prefix, 'date'); }
}
//gets the date value from the drop down lists
function getDateValue(dateField) {
	var theDay = document.getElementById(dateField+"_date");
	var theMonth = document.getElementById(dateField+"_yearmonth");
	return (new Date(theMonth.item(theMonth.selectedIndex).value.substr(0, 4), theMonth.item(theMonth.selectedIndex).value.substr(5, 2)-1, theDay.item(theDay.selectedIndex).value));
}
//sets date fields to the specified date
function setDateFields(fieldName, theDate) {
	var theDay = document.getElementById(fieldName+"_date");
	var theMonth = document.getElementById(fieldName+"_yearmonth");
	//set week day
	var days = new Array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat");
	var theWeekDay = document.getElementById(fieldName+"_day");
	theWeekDay.innerHTML = days[theDate.getDay()];
	//set day drop down
	for (var i=0; i<theDay.length; i++) {
		if (theDay.item(i).value == theDate.getDate()) { 
			theDay.selectedIndex = i; 
			break;
		}
	}
	//set month drop down
	for (var i=0; i<theMonth.length; i++) {
		if (theMonth.item(i).value == theDate.getFullYear()+"-"+(theDate.getMonth()+1)) { 
			theMonth.selectedIndex = i;
			break;
		}
	}
}
//clears return date fields
function clearReturnDates() {
	var dayField = document.getElementById("arrival_date");
	var monthField = document.getElementById("arrival_yearmonth");
	var theWeekDay = document.getElementById("arrival_day");
	dayField.selectedIndex = 0;
	monthField.selectedIndex = 0;
	theWeekDay.innerHTML = "";
}
//sets return radio
function setReturn() {
	var returnRadio = document.getElementById("type_return");
	returnRadio.checked = true;
}
function loadDates(prefix, departDate, departMonth,departYear, returnOffset) {
	//get starting dates
	var startDate = new Date();
	var todaysDate = new Date();
	var dateOffsetField = document.getElementById(prefix+"defaultDepartOffset");
	if (departDate != "" && departMonth != "") {
		startDate.setYear(departYear);
		startDate.setMonth(departMonth-1);
		startDate.setDate(departDate);
		if (startDate <=  todaysDate) {
			startDate = todaysDate;
			startDate.setDate(startDate.getDate()+parseInt(dateOffsetField.value)); 
		}
	}
	else { startDate.setDate(startDate.getDate()+parseInt(dateOffsetField.value)); }
	//set return date
	var returnDate = new Date(startDate);
	returnDate.setDate(startDate.getDate()+parseInt(returnOffset));
	//populate dropdowns
	populateMonth(document.getElementById(prefix+"depart_yearmonth"), startDate);
	populateMonth(document.getElementById(prefix+"arrival_yearmonth"), returnDate);
	//set the correct dates
	setDateFields(prefix+"depart", startDate);	
	setDateFields(prefix+"arrival", returnDate);	
	//check if likes xml
	try {
			var objXML = new ActiveXObject("Msxml2.DOMDocument");
			objXML.validateOnParse = true;
			objXML.loadXML( "<xml><test>TEST</test></xml>" );
			if (objXML.parseError.errorCode == 0) { document.getElementById("hasXML").value = "true"; }
	}
	catch (e) { }
	//make boxes wider for safari
	if	(isSafari) {
		document.getElementById(prefix+"depart_date").className += "Safari";
		document.getElementById(prefix+"arrival_date").className += "Safari";		
		document.getElementById(prefix+"depart_yearmonth").className += "Safari";
		document.getElementById(prefix+"arrival_yearmonth").className += "Safari";		
		document.getElementById(prefix+"depart_day").className += "Safari";
		document.getElementById(prefix+"arrival_day").className += "Safari";		
	}
}
//populates month drop down
function populateMonth(monthField, theDate) {
	var months = new Array("JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC");
	//get years, months and days
	var theYear = theDate.getFullYear();
	var startMonth = theDate.getMonth();
	var theMonth = startMonth;
	
	if (theDate.getDate() == 1 && monthField.id.indexOf("h_") == -1) { startMonth --; }
	
	//loop through months and add to drop downs
	for (var i = 1; i <= 12; i++) {
		theMonth = i + startMonth;
		if (theMonth > 12) { 
			theMonth = theMonth - 12; 
			if (theYear == theDate.getFullYear()) { theYear++; }
		}
		monthField.options[monthField.options.length] = new Option(months[theMonth-1], theYear+"-"+theMonth);	
	}	
}
//set the class hidden field
function setClass(field, prefix) {
	var prefField = document.getElementById(prefix+"service_class");
	prefField.value = field.item(field.selectedIndex).value;
}

function IsIE() {
	return (navigator.appName == "Microsoft Internet Explorer")
}

function createCopyright(siteId)	{

  var siteNZ=101;   // NZ & Business Direct
  var gateway = 1;  // GATEWAY
  var bd = 2;       // BUSINESS DIRECT
  var currentDate = new Date();
  var currentYear = currentDate.getFullYear(); 

  siteId=siteId==void(0) ? 0 : siteId; //Check the existense of the parameter

 if (siteId==siteNZ )
  {
   	  document.write('Copyright &copy; 2002 - '+ currentYear +' Air New Zealand Limited.<BR>');
  }
  else	if (siteId== gateway)   
  {
  	  document.write('Copyright &copy; 2002 - '+ currentYear +' Air New Zealand Limited.<BR>');
  }
  else
  { 
 	  document.write('Copyright &copy; 2003 - '+ currentYear +' Air New Zealand Limited.<BR>');
  }	  

}

function popWindow(theURL,winName,features) {
  var newWin
  newWin = window.open(theURL,winName,features);
  newWin.focus();
}