var _DEPART_TEXT = "departure";
var _RETURN_TEXT = "return";

var nowDate		= new Date();
var month		= nowDate.getMonth()+1;
var year		= nowDate.getFullYear();
var monthNames	= new Array ("January", "February", "March", "April", "May", "June", "July", 
							 "August", "September", "October", "November", "December");	
var isRT, isDepart, departPrice;

function funcFlightsSearch(frmName,index){
	var oForm = document.forms[frmName];
	var postFix = ""+((index==null || index=="")?"":index);	
	oForm["DepCity"].value = oForm.elements["offer/airline_ticket/location[0]/city/@name"].value;
	oForm["ArrCity"].value = oForm.elements["offer/airline_ticket/location[1]/city/@name"].value;
	oForm["NumTickets"].value = oForm.elements["offer/airline_ticket/@num_Tickets" + postFix].value;		
	oForm["DepartureDate"].value = oForm.elements["AIRDHTML_DEPARTUREDATE" + postFix].value;	
	oForm["ReturnDate"].value = oForm.elements["AIRDHTML_RETURNDATE" + postFix].value;	

	if(oForm["AIRDHTML_DEPARTUREDATE"] != null)
		oForm["AIRDHTML_DEPARTUREDATE"].value = oForm.elements["AIRDHTML_DEPARTUREDATE" + postFix].value;
	if(oForm["AIRDHTML_RETURNDATE"] != null)
		oForm["AIRDHTML_RETURNDATE"].value = oForm.elements["AIRDHTML_RETURNDATE" + postFix].value;
	if(oForm["offer/airline_ticket/@num_Tickets"] != null)
		oForm["offer/airline_ticket/@num_Tickets"].value = oForm.elements["offer/airline_ticket/@num_Tickets" + postFix].value;
	if(oForm["CabinClass"] != null && oForm.elements["navigation/required/cabin_class"] != null)
		oForm["CabinClass"].value = oForm.elements["navigation/required/cabin_class"].value;
	
	oForm.submit();
}

function tripFontBold(selOpt) {
	for (var i=1; i<3; ++i){
		var oElem = getStyleObject("tripType"+i);
		if (i == selOpt)
			oElem.fontWeight = 700;
		else
			oElem.fontWeight = 400;
	}
}

function hideShowReturning (frmName,selOpt) {
	var oForm = document.forms[frmName];
	tripFontBold(selOpt);
	if (selOpt == 1) {
		showObject('DIV_AIRDHTML_RETURNDATE');
		oForm["OFFER/AIRLINE_TICKET/ITINERARY_TYPE_CODE"].value = "RT";
		isRT = true;
	} else {
		hideObject('DIV_AIRDHTML_RETURNDATE');
		oForm["OFFER/AIRLINE_TICKET/ITINERARY_TYPE_CODE"].value = "OW";
		hideObject('departmsgDiv');
		document.getElementById("departReturnText").innerHTML = _DEPART_TEXT;
		isRT = false;
	} 
	getCalenderDates ();
}

function changeDepartDate(){
	document.getElementById("AIRDHTML_RETURNDATE").value = "mm/dd/yyyy";
	hideObject('departmsgDiv');
	document.getElementById("departReturnText").innerHTML = _DEPART_TEXT;
	getCalenderDates ();
}

var bgColorCtr = 0;
function updateDate (dateStr, price, forceDepart, blnComingFromLink) {
	var targetDateElemID = "AIRDHTML_DEPARTUREDATE";
	if (!isRT) {
		hideObject('departmsgDiv');
		document.getElementById("departReturnText").innerHTML = _DEPART_TEXT;
	} else {
		if (forceDepart || isDepart) {
			departPrice = price;
			showObject('departmsgDiv');
			document.getElementById("departReturnDate").innerHTML = dateStr;
			document.getElementById("departReturnText").innerHTML = _RETURN_TEXT;
			getCalenderDates ();
		} else {
			targetDateElemID = "AIRDHTML_RETURNDATE";
		}
	}
	document.getElementById(targetDateElemID).value = dateStr;
	if (!forceDepart)
		blinkElemBG (targetDateElemID, true);
	
	if (blnComingFromLink) {
		if (document.getElementById("roundTrip").checked && targetDateElemID == "AIRDHTML_RETURNDATE") {
			funcFlightsSearch('ItRetailSearch','')
		} else if (document.getElementById("oneWayTrip").checked && targetDateElemID == "AIRDHTML_DEPARTUREDATE") {
			funcFlightsSearch('ItRetailSearch','')
		}
	}
}

function blinkElemBG (domObjID, resetCtr) {
	var styleObj = getStyleObject (domObjID);
	if (resetCtr) bgColorCtr=0; else ++bgColorCtr;
	if (bgColorCtr > 2) return;
	styleObj.backgroundColor = (bgColorCtr%2==0?"#87D352":"#ffffff");
	window.setTimeout ("blinkElemBG('" + domObjID + "')", 200);
}

function getNextDate (date, days) {
    return new Date(date.getTime()+days*24*60*60*1000);
}

var SYNC_BACK_INTERVAL = 500;
function attachSyncBackEvents () {
	attachEventToObj ("AIRDHTML_DEPARTUREDATE", "focus", resetDepartObj);
	//attachEventToObj ("AIRDHTML_DEPARTUREDATE", "blur", syncBackDepartObj);
	attachEventToObj ("AIRDHTML_RETURNDATE", "focus", resetReturnObj);
	window.setTimeout (syncBackDepartObj, 2000);
}

function attachEventToObj (elemID, eventName, eventFunc) {
	var oElem = document.getElementById (elemID);
	if (oElem.addEventListener)
		oElem.addEventListener(eventName, eventFunc, false);
	else if (oElem.attachEvent)
		oElem.attachEvent("on" + eventName, eventFunc);
	else if (oElem.getElementById)
		eval ("oElem.on" + eventName + "=" + eventFunc);
}

function syncBackDepartObj () {
	var oElem = document.getElementById ("AIRDHTML_DEPARTUREDATE");
	var oDateParts = getDateParts (oElem.value);
	
	if (oDateParts != null) {
		dateStr = oDateParts.join ("/");
		if (dateStr != document.getElementById("departReturnDate").innerHTML) {
			document.getElementById("departReturnDate").innerHTML = dateStr;
			month = oDateParts[0];
			year = oDateParts[2];
			if (year < 100) {
				year = "20" + year;
				dateStr = oDateParts[0] + "/" + oDateParts[1] + year;
			}
			updateDate (dateStr, -1, true, false);
		}
	}
	window.setTimeout (syncBackDepartObj, SYNC_BACK_INTERVAL);
}

function getDateParts (strDate) {
	var oDateParts = null;
	if (strDate != null && strDate.length > 7) {
		oDateParts = strDate.split ("/");
		if (oDateParts.length != 3 || isNaN(oDateParts[0]) || oDateParts[0] < 0 
				|| isNaN(oDateParts[1]) || isNaN(oDateParts[1]) < 0 || isNaN(oDateParts[2]) || isNaN(oDateParts[2]) < 0)
			oDateParts = null;
	}
	return oDateParts;
}

function resetDepartObj () {
	clearElemBG ("AIRDHTML_DEPARTUREDATE");
}

function resetReturnObj () {
	clearElemBG ("AIRDHTML_RETURNDATE");
}

function clearElemBG (domObjID) {
	var styleObj = getStyleObject (domObjID);
	styleObj.backgroundColor = "#ffffff";
}

function getCaptionMonthYear (iMonth, iYear, refDate) {
	var monthNum	= refDate.getMonth()+1;
	var yearNum		= refDate.getFullYear();
	var monthYear	= monthNames[iMonth-1] + " " + iYear;
	
	var leftArrow = "<div id='leftArrow'><a href='javascript: void();' onclick='javascript: prevMonthYear();'><img src='"
			+pathImages+"blue_left_arrow.gif' width='10' height='10' alt='' border='0'></a></div>";
	var rightArrow = "<div id='rightArrow'><a href='javascript: void();' onclick='javascript: nextMonthYear();'><img src='"
			+pathImages+"blue_right_arrow.gif' width='10' height='10' alt='' border='0'></a></div>";
	var oMonthYearImage = document.getElementById ("monthYearImage");

	if ((iMonth == monthNum) && (iYear == yearNum)) {
		oMonthYearImage.innerHTML = "<nobr><div id='leftArrow'>&nbsp;</div><div id=\"monthYearCaption\">"+monthYear+"</div>"+rightArrow+"<br clear='all'></nobr>";
	} else if((monthNames[iMonth==12?0:iMonth] == monthNames[monthNum-1])  && (iYear >= yearNum)) {
		oMonthYearImage.innerHTML = "<nobr>"+leftArrow+"<div id=\"monthYearCaption\">"+monthYear+"</div><div id='rightArrow'>&nbsp;</div><br clear='all'></nobr>";		
	} else {
		oMonthYearImage.innerHTML = "<nobr>"+leftArrow+"<div id=\"monthYearCaption\">"+monthYear+"</div>"+rightArrow+"<br clear='all'></nobr>";
	}
}

function getCalenderDates () {
	var drText	= document.getElementById("departReturnText").innerHTML;
	isRT = !(document.getElementById("oneWayTrip").checked);
	var refDate	= nowDate;

	if (drText == _RETURN_TEXT) {
		var departDateStr = document.getElementById("departReturnDate").innerHTML;
		var splits = departDateStr.split ("/");
		refDate = new Date (splits[2], splits[0]-1, splits[1], 0, 0, 0);
		isDepart = false;
	} else
		isDepart = true;

	getCaptionMonthYear (month, year, refDate);
	
	var date1 = new Date (year, month-1, 1, 0, 0, 0);
	var blankTill = (date1.getDay());
	var oTd, oCell, rowCtr, colCtr;

	for (var i=1; i<=blankTill; ++i) {
		oCell = document.getElementById("cell1" + i);
		oCell.innerHTML = '&nbsp';
		oCell.parentNode.className = '';
	}
	
	rowCtr = (blankTill == 0?0:1);
	colCtr = blankTill;

	var oArrDateData = null;
	try {
		if (isDepart)
			oArrDateData = eval ("depart" + (isRT?"RT":"OW") + "_" + month + "" + year);
		else {
			oArrDateData = eval ("departRT_" + (refDate.getMonth()+1) + "" + refDate.getFullYear());
		}
	} catch (e) {}

	for (var i=1; i<=28; ++i) {
		if (colCtr %7 ==0) {
			colCtr = 0;
			++ rowCtr;
		}
		++ colCtr;
		setDateData (rowCtr, colCtr, i, month, year, refDate, oArrDateData);
	}	
	
	var monthNew;
	for (var i=29; i<=31; ++i) {
		date1 = new Date(year, month-1, i, 0, 0, 0);
		monthNew = date1.getMonth();
		if (monthNew == month-1) {
			if (colCtr %7 ==0) {
				colCtr = 0;
				++ rowCtr;
			}
			++ colCtr;
			setDateData (rowCtr, colCtr, i, month, year, refDate, oArrDateData);
		} else {		
			break;
		}
	}

	if (rowCtr < 5)	hideObject('row5');
	else 			showObject('row5');
	if (rowCtr < 6)	hideObject('row6');
	else 			showObject('row6');
	
	for (var i=colCtr+1; i<8; ++i) {
		oCell = document.getElementById("cell" + rowCtr + i);
		oCell.innerHTML = '&nbsp;';
		oCell.parentNode.className = '';
	}
}

function setDateData (iRow, iCol, iDate, iMonth, iYear, refDate, oArrDateData) {
	var idd = refDate.getDate();
	var imm = refDate.getMonth()+1;
	var iyy = refDate.getFullYear();

	var oCell = document.getElementById("cell" + iRow + iCol);
	var objTd = oCell.parentNode;

	var priceVal, className;
	if((iDate >= idd && iMonth == imm && iYear == iyy) || (iMonth > imm) || (iYear > iyy)){
		var curDate = new Date( iYear, (iMonth-1), iDate );
		
		if (curDate < getNextDate (refDate, 329)) {
			var dateStr = (iMonth<10?("0"+iMonth):iMonth)+"/"+(iDate<10?("0"+iDate):iDate)+"/"+iYear;
			var dateMatch = iMonth + "/" + iDate + "/" + iYear;
			var priceStr = "Price", priceVal = "";
			var arrData;
			var needSel = false;
			var iPriceAge = -1;
			
			className = "price";
			if (oArrDateData != null) {
				for (var i=0; i<oArrDateData.length; i+=2) {
					if (isDepart) {
						//'Depart Calendar
						if (oArrDateData[i] == iDate) {
							arrData = oArrDateData[i+1].split ("|");
							priceStr = "$" + arrData[0];
							priceVal = arrData[0];
							className = arrData[2]=="Y"?"prdwn":className;
							// 1 - price ind 2 - bdtf flag
							className = (arrData[1]=="D" && arrData[2]=="Y")?"prdrop":className;
							className = (arrData[1]=="D" && arrData[2]=="N")?"prdropnobdtf":className;
							iPriceAge = arrData[7];
							break;
						}
					} else {
						//'Return Calendar
						if (oArrDateData[i] == idd) {
							arrData = oArrDateData[i+1].split ("|");
							if (arrData[3] == dateMatch) {
								priceStr = "$" + arrData[4];
								// 5 - price ind 6 - bdtf flag
								className = arrData[6]=="Y"?"prdwn":className;
								className = (arrData[5]=="D" && arrData[6]=="Y")?"prdrop":className;
								className = (arrData[5]=="D" && arrData[6]=="N")?"prdropnobdtf":className;
								if (arrData[4] == departPrice) {
									className = (className=='price'?'prdwnsel':className + 'sel');
									needSel = true;
								}
								iPriceAge = iPriceAge = arrData[8];
								break;
							}
						}
					}
				}
			}
			var strPriceAge = "";
			if (iPriceAge > 0) {
				strPriceAge = "<font color='red'><b>&nbsp;"+iPriceAge+"</b></font>";
			}
			var linkStyle = "";
			if (priceStr == "Price") {
				linkStyle = "id='retail_Price_word'";
			}
			priceVal = (iDate + strPriceAge + " <a " + linkStyle + (needSel?"class=prdwnseltext":"") + " href=\"javascript: updateDate('" + dateStr + "', '" + priceVal + "', null, true);\">" + priceStr + "</a>");
		} else {
			className = "";
			priceVal = iDate;
		}
	} else {
		className = "";
		priceVal = iDate;
	}
	
	objTd.className = className;
	oCell.innerHTML = priceVal;
}

function nextMonthYear() {
	if (++ month == 13) {
		++year;
		month = 1;
	}
	getCalenderDates();
}

function prevMonthYear() {
	if (-- month == 0) {
		--year;
		month = 12;
	}
	getCalenderDates();
}

function testFormElements(oForm){
	var elem;
	var frmElem = "";

    for (var i = 0; i < oForm.elements.length; i++) {
        elem = oForm.elements[i];
		frmElem += "\n" + elem.name + "=" + elem.value;
    }
	alert(oForm.name+" Elements :: "+frmElem);
}

function itStartFareHistoryFlash (flashW, flashH) {
	tgHtmlLightBox ('itFareHistoryChart', flashW, flashH);

	var htmlArr = new Array();
	htmlArr.push ("<object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' "); 
			htmlArr.push ("codebase='http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0' "); 
			htmlArr.push ("width='" + flashW + "' height='" + flashH + "' id='FareHistory' align='middle'>");
	htmlArr.push ("<param name='allowScriptAccess' value='sameDomain' />");
	htmlArr.push ("<param name='movie' value=\"" + itFareHistoryChartStr + "\" />");
	htmlArr.push ("<param name='menu' value='false' /><param name='quality' value='high' />");
	htmlArr.push ("<param name='wmode' value='window' />");
	htmlArr.push ("<embed src=\"" + itFareHistoryChartStr + "\" menu='false' quality='high' wmode='window' ");
		htmlArr.push ("bgcolor='#ffffff' width='" + flashW + "' height='" + flashH + "' ");
		htmlArr.push ("name='FareHistory' align='middle' allowScriptAccess='sameDomain' type='application/x-shockwave-flash' "); 
		htmlArr.push ("pluginspage='http://www.macromedia.com/go/getflashplayer' />");
	htmlArr.push ("</object>");

	getElemById ("itFareHistoryChart").innerHTML = htmlArr.join("");
}

function itCloseFareHistoryFlash () {
	tgCloseHtmlLightBox ();
}