﻿// 
var _editType = "add";
var _alertId;
var _flightWay;
var _availableDay;
var _alerts;
var _curLinkFlightWay;
var _alertsContact;
var _bookFlightUrl;

var _flightWayMap = {"1":"One way", "2":"Round trip", "3":"Weekend"};
var _flightPicPos = {
	"3U" : "0px",
	"8C" : "-30px",
	"8L" : "-60px",
	"BK" : "-90px",
	"CA" : "-120px",
	"CN" : "-150px",
	"CZ" : "-180px",
	"EU" : "-210px",
	"FM" : "-240px",
	"G5" : "-270px",
	"GS" : "-300px",
	"HO" : "-330px",
	"HU" : "-360px",
	"KN" : "-390px",
	"MF" : "-420px",
	"MU" : "-450px",
	"NS" : "-480px",
	"PN" : "-510px",
	"SC" : "-540px",
	"ZH" : "-570px",
	"" : ""
};

var _fareTooLowHints = [
	"Seriously, really?",
	"Is that for a bus fare?",
	"That might get you TO the airport.",
	"Nice try, buddy.",
	"We'd like to remind you this is not a charity auction.",
	"We're sorry, the baggage hold is full.",
	"Please note above fare does not include time travel fee back to 1932 where that fare actually did exist.",
	"Is that for the chicken, or the beef?  Try again.",
	"We're not miracle workers here.",
	"Ummmmmm…… No.",
	"Would you like to purchase more than a single square inch of space on the plane?",
	"It’s possible you’re missing a zero or two."
];

var _availiblePriceTrender = {
	"beijing-shanghai" : "beijing-shanghai",
	"beijing-xian" : "beijing-xian",
	"beijing-shenzhen" : "beijing-shenzhen",
	"beijing-guangzhou" : "beijing-guangzhou",
	"beijing-qingdao" : "beijing-qingdao",
	"chengdu-shanghai" : "chengdu-shanghai",
	"guangzhou-shanghai" : "guangzhou-shanghai",
	"guangzhou-beijing" : "guangzhou-beijing",
	"guangzhou-hangzhou" : "guangzhou-hangzhou",
	"guilin-shanghai" : "guilin-shanghai",
	"hongkong-shanghai" : "hongkong-shanghai",
	"qingdao-shanghai" : "qingdao-shanghai",
	"qingdao-beijing" : "qingdao-beijing",
	"sanya-shanghai" : "sanya-shanghai",
	"shanghai-beijing" : "shanghai-beijing",
	"shanghai-shenzhen" : "shanghai-shenzhen",
	"shanghai-hongkong" : "shanghai-hongkong",
	"shanghai-guangzhou" : "shanghai-guangzhou",
	"shanghai-xian" : "shanghai-xian",
	"shanghai-qingdao" : "shanghai-qingdao",
	"shanghai-guilin" : "shanghai-guilin",
	"shanghai-chengdu" : "shanghai-chengdu",
	"shanghai-sanya" : "shanghai-sanya",
	"shanghai-xiamen" : "shanghai-xiamen",
	"shanghai-kunming" : "shanghai-kunming",
	"shenzhen-shanghai" : "shenzhen-shanghai",
	"shenzhen-beijing" : "shenzhen-beijing",
	"xiamen-shanghai" : "xiamen-shanghai",
	"xian-shanghai" : "xian-shanghai",
	"xian-beijing" : "xian-beijing"
};

function getFareAlertById(id)
{
	if(_alerts)
	{
		for(var i=0; i<_alerts.length; i++)
		{
			if(_alerts[i].id == id)
			{
				return _alerts[i];
			}
		}
	}
}

function rcpMain_load(sender, args)
{
	var rcp = sender;
	
	_alertsContact = rcp.getClientProperty("alertsContact");
	
	_alerts = rcp.getClientProperty("alerts");
	
	var selMonth = JueKit("selMonth");
	var dtToday = new Date();
	var dtMonth = new JueKit.DateTime(dtToday.getFullYear(), dtToday.getMonth(), 1);
	for(var i=0; i<4; i++, dtMonth.addMonth(1))
	{
		var option = document.createElement("OPTION");
		option.innerHTML = dtMonth.format("MMM yyyy");
		option.value = dtMonth.format("yyyy-MM-01");
		selMonth.appendChild(option);
	}
	
	refreshAlertList(_alerts);
	
//	if(_alerts)
//	{
//		for(var i=0; i<_alerts.length; i++)
//		{
//			getCheapestFlightFare(_alerts[i].id);
//		}
//	}

	_bookFlightUrl = rcp.getClientProperty("bookFlightUrl");
	rcp.slDepartureCity = new FA.UI.SuggestionList({el:"txtDepartureCity", data:FA.StaticData.cities, textColName:"name", valueColName:"code"});
	rcp.slArrivalCity = new FA.UI.SuggestionList({el:"txtArrivalCity", data:FA.StaticData.cities, textColName:"name", valueColName:"code"});
	
	rcp.slDepartureCity.addHandler("change", slCity_change);
	rcp.slArrivalCity.addHandler("change", slCity_change);
	
	rcp.dpDepartureTime = new FA.UI.DatePicker({el:"txtDepartureTime"});
	rcp.dpReturnTime = new FA.UI.DatePicker({el:"txtReturnTime"});
	
	rcp.dpDepartureTime.addHandler("change", __dpDepartureTime_change);


	JueKit("alertsContactMethodSms").checked = (_alertsContact & 1);
	JueKit("alertsContactMethodEmail").checked = (_alertsContact & 2);
	
	/* Promotion */
	var isPromotion = rcp.getClientProperty("isPromotion");
	if(isPromotion)
	{
		showLandingWnd();
		//linkCreateAlert_click();
	}
}

function renderMatchedFlightInfo(sb, matchedFlight, a)
{
	sb.append("<div class='fareAlertLine'>");
	sb.append("<div class='fareAlertLineName' style='background-image:url(Styles/Images/loading.gif);'>loading...</div>");
	sb.append("<div class='fareAlertFlight'></div>");
	sb.append("<a class='linkShowAllFlightTimes' href='javascript:;'></a>");
	sb.append("</div>");
	sb.append("<div class='fareAlertFlightWay'>{0}</div>", _flightWayMap[a.flightWay]);
	sb.append("<div class='fareAlertTime'>");
	sb.append("<div class='fareAlertDeptTime'>Depart: <span>{0}</span></div>", JueKit.DateTime.format(a.departureTime, "dd MMM yy"));
	sb.append("<div class='fareAlertReturnTime'>Return: <span>{0}</span></div></div>", a.flightWay == 2 ? JueKit.DateTime.format(a.returnTime, "dd MMM yy") : "-");
	sb.append("<div class='fareAlertMaxPrice'>Your max. price: <span>{0}</span></div>", (a.trig == 1) ? "-" : "￥" + a.maxFare);
	sb.append("<div class='fareAlertLatestPrice'>Latest price: <a href='javascript:;'></a></div>");
	sb.append("<div class='fareAlertBook'><a class='fareAlertBookLink' href='javascript:;'><span>Book</span></a></div>");
}

function refreshAlertList(alerts)
{
	var sb = new JueKit.Text.StringBuilder();
	if(alerts && alerts.length)
	{
		for(var i=0; i<alerts.length; i++)
		{
			var a = alerts[i];
			sb.append("<div class='rndBox'><div class='rndBoxHW'><div class='rndBoxH'><div class='rndBoxHI'></div></div></div><div class='rndBoxB'>");
			
			sb.append("<div class='fareAlertH'><div class='fareAlertOpt'>");
			sb.append("<a href='javascript:;' class='linkMail' onclick='linkMailAlert_click({0})'><span>Email to a friend</span></a>", a.id);
			sb.append("<a href='javascript:;' class='linkEdit' onclick='linkEditAlert_click({0})'><span>Edit</span></a>", a.id);
			sb.append("<a href='javascript:;' class='linkDel' onclick='linkDelAlert_click({0})'><span>Delete</span></a>", a.id);
			
			var dCity = FA.StaticData.getCityByCode(a.departureCityCode);
			var aCity = FA.StaticData.getCityByCode(a.arrivalCityCode);
			sb.append("</div><div class='fareAlertRoute'>{0} - {1}</div></div>",
				dCity ? dCity.name : "",
				aCity ? aCity.name : "");
			
			sb.append("<div class='fareAlertInfo'>");
			
			if(a.matched)
			{
				renderMatchedFlightInfo(sb, a.matchedFlight, a);
			}
			else
			{
				sb.append("<div class='fareAlertLine'>");
				sb.append("<div class='fareAlertLineName' style='background-image:url(Styles/Images/loading.gif);'>loading...</div>");
				sb.append("<div class='fareAlertFlight'></div>");
				sb.append("<a class='linkShowAllFlightTimes' href='javascript:;'></a>");
				sb.append("</div>");
				sb.append("<div class='fareAlertFlightWay'>{0}</div>", _flightWayMap[a.flightWay]);
				sb.append("<div class='fareAlertTime'>");
				sb.append("<div class='fareAlertDeptTime'>Depart: <span>{0}</span></div>", a.flightWay == 3 ? JueKit.DateTime.format(a.departureTime, "MMM yy") : JueKit.DateTime.format(a.departureTime, "dd MMM yy"));
				
				sb.append("<div class='fareAlertReturnTime'>Return: <span>{0}</span></div></div>", a.flightWay == 2 ? JueKit.DateTime.format(a.returnTime, "dd MMM yy") : "-");
				sb.append("<div class='fareAlertMaxPrice'>Your max. price: <span>{0}</span></div>", (a.trig == 1) ? "-" : "￥" + a.maxFare);
				sb.append("<div class='fareAlertLatestPrice'>Latest price: <a href='javascript:;'></a></div>");
				sb.append("<div class='fareAlertBook'><a class='fareAlertBookLink' href='javascript:;'><span>Book</span></a></div>");
				//getCheapestFlightFare(a.id, a);
			}
			
			sb.append("</div>");
			
			sb.append("</div><div class='rndBoxFW'><div class='rndBoxF'><div class='rndBoxFI'></div></div></div></div>");
		}
		
	}
	
	JueKit("alertListB").innerHTML = sb.toString();
	
	if(alerts && alerts.length)
	{
		for(var i=0; i<alerts.length; i++)
		{
			var a = alerts[i];
			getCheapestFlightFare(a.id);
		}
	}
}

function linkCreateAlert_click()
{
	if(_alerts && _alerts.length >= 5)
	{
		alert("Only 5 alerts can be created.");
		return;
	}
	
	showMessage("");

	_editType = "add";
	
	JueKit.Dom.setStyles("alertDetail", {
		"zIndex" : JueKit.UI.Window.__increaseBg()+1,
		"top" : JueKit.Dom.getPositionY("alertList") + "px"
		});
	JueKit.Dom.show("alertDetail");


	JueKit("txtDepartureCity").value = "";
	JueKit("txtArrivalCity").value = "";
	var rcp = JueKit.theRcp;
	rcp.slDepartureCity.set_selectedValue("");
	rcp.slArrivalCity.set_selectedValue("");
	JueKit("txtDepartureTime").value = "mm/dd/yyyy";
	JueKit("txtReturnTime").value = "mm/dd/yyyy";
	JueKit("selMonth").value = "";
	
	JueKit("chkTrigDaily").checked = true;
	JueKit("chkFlexibility").checked = false;
	
	JueKit("btnSaveAlert").style.zoom = 1;
	chkTrigDaily_click();
	
	flightWayS_click();


	var alertDetailWnd = JueKit("alertDetail");
	var whatIsFareAlertWnd = JueKit("whatIsFareAlertWnd");
	if(whatIsFareAlertWnd)
	{
		JueKit.Dom.setStyles(whatIsFareAlertWnd, {
			"zIndex" : alertDetailWnd.style.zIndex,
			"top" : (JueKit.Dom.getPositionY("alertList") + alertDetailWnd.offsetHeight) + "px"
			});
		JueKit.Dom.show(whatIsFareAlertWnd);
	}
	JueKit.UI.Window.__resizeBg();

	JueKit("txtDepartureCity").focus();
}

function linkCloseWnd_click()
{
	setBtnConfirmLoading(false);
	JueKit.Dom.hide("alertDetail");
	var whatIsFareAlertWnd = JueKit("whatIsFareAlertWnd");
	whatIsFareAlertWnd && JueKit.Dom.hide(whatIsFareAlertWnd);
	JueKit.UI.Window.__decreaseBg();
}

function chkTrigDaily_click()
{
	if(JueKit("chkTrigDaily").checked)
	{
		var el = JueKit("txtMaxFare");
		el.readOnly = true;
		el.style.color = "#666";
		el.value = "max. fare (CNY)";
	}
}

function chkTrigInstant_click()
{
	JueKit("chkTrigInstant").checked = true;
	var el = JueKit("txtMaxFare");
	if(el.readOnly)
	{
		el.readOnly = false;
		el.value = "max. fare (CNY)";
		el.style.color = "#000";
		el.focus();
		el.select();
	}
}

function setCurLinkFlightWay(link)
{
	var link = JueKit(link).firstChild;
	if(_curLinkFlightWay)
	{
		_curLinkFlightWay.className = "";
	}
	
	link.className = "current";
	_curLinkFlightWay = link;
}

function flightWayS_click()
{
	setCurLinkFlightWay("flightWayS");
	JueKit.Dom.show("formItemDepartureTime");
	JueKit.Dom.hide("formItemReturnTime");
	JueKit.Dom.hide("formItemSelMonth");
	JueKit.Dom.hide("alertDetailTipWeekend");
	_flightWay = 1;
	_availableDay = 3;
}

function flightWayD_click()
{
	setCurLinkFlightWay("flightWayD");
	JueKit.Dom.show("formItemDepartureTime");
	JueKit.Dom.show("formItemReturnTime");
	JueKit.Dom.hide("formItemSelMonth");
	JueKit.Dom.hide("alertDetailTipWeekend");
	_flightWay = 2;
	_availableDay = 3;
}

function flightWayW_click()
{
	setCurLinkFlightWay("flightWayW");
	JueKit.Dom.hide("formItemDepartureTime");
	JueKit.Dom.hide("formItemReturnTime");
	JueKit.Dom.show("formItemSelMonth");
	JueKit.Dom.show("alertDetailTipWeekend");
	_flightWay = 3;
	_availableDay = 2;
}

function btnSaveAlert_click(fareChecked)
{
	var rcp = JueKit.theRcp;
	var args = {};
	args.flightWay = _flightWay;
	args.availableDay = _availableDay;
	args.departureCityCode = rcp.slDepartureCity.get_selectedValue();
	args.arrivalCityCode = rcp.slArrivalCity.get_selectedValue();
	args.departureTime = JueKit.DateTime.parse(JueKit.String.trim(JueKit("txtDepartureTime").value));
	
	if(args.flightWay == 3)
	{
		args.departureTime = JueKit.DateTime.parse(JueKit.String.trim(JueKit("selMonth").value));
	}
	
	args.returnTime = JueKit.DateTime.parse(JueKit.String.trim(JueKit("txtReturnTime").value));
	
	if(JueKit("chkTrigDaily").checked)
	{
		args.trig = 1;
	}
	else
	{
		args.trig = 2;
	}

	if(!args.departureCityCode || args.departureCityCode == "")
	{
		if(JueKit("txtDepartureCity").value == "")
		{
			showMessage("Please select your departure city.");
		}
		else
		{
			showMessage("Currently, the FareAlert only covers China domestic flights and destinations only.  Please check the spelling of your arrival or departure city and enter again.");
		}
		JueKit("txtDepartureCity").focus();
		return;
	}
	if(!args.arrivalCityCode || args.arrivalCityCode == "")
	{
		if(JueKit("txtArrivalCity").value == "")
		{
			showMessage("Please select your arrival city.");
		}
		else
		{
			showMessage("Currently, the FareAlert only covers China domestic flights and destinations only.  Please check the spelling of your arrival or departure city and enter again.");
		}
			JueKit("txtArrivalCity").focus();
		return;
	}
	if(!args.departureTime)
	{
		if(args.flightWay == 3)
		{
			showMessage("Please select month.");
			JueKit("selMonth").focus();
		}
		else
		{
			showMessage("Wrong departure time format.");
			JueKit("txtDepartureTime").focus();
		}
		return;
	}
	else
	{
		if(args.flightWay != 3 && args.departureTime.get_value() - JueKit.DateTime.today().get_value() < 0)
		{
			showMessage("Due to space-time continuum issues, please enter a date in the future.");
			JueKit("txtDepartureTime").focus();
			return;
		}
		args.departureTimeObj = args.departureTime;
		args.departureTime = args.departureTime.format("yyyy-MM-dd");
	}
	
	if(args.flightWay == 2)
	{
		if(!args.returnTime)
		{
			showMessage("Wrong return time format.");
			JueKit("txtReturnTime").focus();
			return;
		}
		else
		{
			if(args.returnTime.get_value() - args.departureTimeObj.get_value() < 0)
			{
				showMessage("Due to space-time continuum issues, please enter a date in the future");
				JueKit("txtReturnTime").focus();
				return;
			}
			args.returnTime = args.returnTime.format("yyyy-MM-dd");
		}
	}
	
	if(JueKit("chkTrigDaily").checked)
	{
		args.trig = 1;
	}
	else
	{
		args.trig = 2;
		args.maxFare = JueKit("txtMaxFare").value;

		if(!JueKit.Validator.validate(args.maxFare, {isNumber:{}, minValue:{value:0}}))
		{
			showMessage("Please enter a valid price.");
			JueKit("txtMaxFare").focus();
			return;
		}
		else if(!fareChecked)
		{
			FA.theFareMng.postBack("GetCheapestFare",
				{
					dCityCode : rcp.slDepartureCity.get_selectedValue(),
					aCityCode : rcp.slArrivalCity.get_selectedValue(),
					flightWay : args.flightWay
				},
				__cbGetCheapestFare_S);
			return;
		}
	}
	
	if(JueKit("chkFlexibility").checked)
	{
		args.flexibility = 1;
	}
	else
	{
		args.flexibility = 0;
	}
	
	var isPromotion = rcp.getClientProperty("isPromotion");
	if(isPromotion)
	{
		var signinPageUrl = rcp.getClientProperty("signinPageUrl");
		var curUrl = location.href;
		if(curUrl.indexOf("?") == -1)
		{
			curUrl += "?";
		}
		else
		{
			curUrl += "&";
		}
		curUrl += JueKit.String.format("action=save&flightWay={0}&departureCityCode={1}&arrivalCityCode={2}&departureTime={3}&returnTime={4}&trig={5}&maxFare={6}&flexibility={7}&availableDay={8}",
			args.flightWay,
			args.departureCityCode,
			args.arrivalCityCode,
			args.departureTime,
			args.returnTime,
			args.trig,
			args.maxFare,
			args.flexibility,
			args.availableDay);
		
		location.href = JueKit.String.format(signinPageUrl, encodeURIComponent(curUrl));
		return;
	}
	
	var eventName;
	var cb;
	if(_editType == "edit")
	{
		args.alertId = _alertId;
		eventName = "ChangeFareAlert";
		cb = __cbChangeFareAlert_S
	}
	else
	{
		eventName = "AddFareAlert";
		cb = __cbAddFareAlert_S;
	}

	showMessage("");
	setBtnConfirmLoading(true);
	FA.theFareMng.postBack(eventName, args, cb);
}

function setBtnConfirmLoading(loading)
{
	var btnSaveAlert = JueKit("btnSaveAlert");
	btnSaveAlert.disabled = loading;
	btnSaveAlert.className = loading ? "btnConfirmLoading" : "btnConfirm";
}

function __cbAddFareAlert_S(text)
{
	var result = text.toObject();
	
	if(result.result != "Success")
	{
		setBtnConfirmLoading(false);
		return;
	}
	
	linkCloseWnd_click();
	_alerts = [result.alert].concat(_alerts);
	
	var el = JueKit("alertListB");
	var elTemp = JueKit.Dom.createEl("div");
	
	var a = result.alert;
	var sb = new JueKit.Text.StringBuilder();
	sb.append("<div class='rndBox'><div class='rndBoxHW'><div class='rndBoxH'><div class='rndBoxHI'></div></div></div><div class='rndBoxB'>");
	
	sb.append("<div class='fareAlertH'><div class='fareAlertOpt'>");
	sb.append("<a href='javascript:;' class='linkMail' onclick='linkMailAlert_click({0})'><span>Email to a friend</span></a>", a.id);
	sb.append("<a href='javascript:;' class='linkEdit' onclick='linkEditAlert_click({0})'><span>Edit</span></a>", a.id);
	sb.append("<a href='javascript:;' class='linkDel' onclick='linkDelAlert_click({0})'><span>Delete</span></a>", a.id);
	
	var dCity = FA.StaticData.getCityByCode(a.departureCityCode);
	var aCity = FA.StaticData.getCityByCode(a.arrivalCityCode);
	sb.append("</div><div class='fareAlertRoute'>{0} - {1}</div></div>",
		dCity ? dCity.name : "",
		aCity ? aCity.name : "");
	
	sb.append("<div class='fareAlertInfo'>");
	sb.append("<div class='fareAlertLine'>");
	sb.append("<div class='fareAlertLineName' style='background-image:url(Styles/Images/loading.gif);'>loading...</div>");
	sb.append("<div class='fareAlertFlight'></div>");
	sb.append("<a class='linkShowAllFlightTimes' href='javascript:;'></a>");
	sb.append("</div>");
	sb.append("<div class='fareAlertFlightWay'>{0}</div>", _flightWayMap[a.flightWay]);
	sb.append("<div class='fareAlertTime'>");
	sb.append("<div class='fareAlertDeptTime'>Depart: <span>{0}</span></div>", JueKit.DateTime.format(a.departureTime, "dd MMM yy"));
	sb.append("<div class='fareAlertReturnTime'>Return: <span>{0}</span></div></div>", a.flightWay == 2 ? JueKit.DateTime.format(a.returnTime, "dd MMM yy") : "-");
	sb.append("<div class='fareAlertMaxPrice'>Your max. price: <span>{0}</span></div>", (a.trig == 1) ? "-" : "￥" + a.maxFare);
	sb.append("<div class='fareAlertLatestPrice'>Latest price: <a href='javascript:;'></a></div>");
	sb.append("<div class='fareAlertBook'><a class='fareAlertBookLink' href='javascript:;'><span>Book</span></a></div>");
	sb.append("</div>");
	
	sb.append("</div><div class='rndBoxFW'><div class='rndBoxF'><div class='rndBoxFI'></div></div></div></div>");

	elTemp.innerHTML = sb.toString();
	var elFirst = JueKit.Dom.getFirstChild(el);
	if(elFirst)
	{
		el.insertBefore(elTemp.firstChild, elFirst);
	}
	else
	{
		el.appendChild(elTemp.firstChild);
	}
	
	getCheapestFlightFare(result.alert.id);
}

function __cbChangeFareAlert_S(text)
{
	var result = text.toObject();
	
	if(result.result != "Success")
	{
		setBtnConfirmLoading();
		return;
	}
	
	linkCloseWnd_click();
	for(var i=0; i<_alerts.length; i++)
	{
		if(_alerts[i].id == result.alert.id)
		{
			_alerts[i] = result.alert;
			_alerts[i].id = result.newAlertId;

			_alerts[i].mathced = false;
			_alerts[i].matchedFlight = null;
			
			var el = JueKit.Dom.getChildElByIndex("alertListB", i);

			var a = _alerts[i];
			var sb = new JueKit.Text.StringBuilder();
			sb.append("<div class='rndBoxHW'><div class='rndBoxH'><div class='rndBoxHI'></div></div></div><div class='rndBoxB'>");
			
			sb.append("<div class='fareAlertH'><div class='fareAlertOpt'>");
			sb.append("<a href='javascript:;' class='linkMail' onclick='linkMailAlert_click({0})'><span>Email to a friend</span></a>", a.id);
			sb.append("<a href='javascript:;' class='linkEdit' onclick='linkEditAlert_click({0})'><span>Edit</span></a>", a.id);
			sb.append("<a href='javascript:;' class='linkDel' onclick='linkDelAlert_click({0})'><span>Delete</span></a>", a.id);
			
			var dCity = FA.StaticData.getCityByCode(a.departureCityCode);
			var aCity = FA.StaticData.getCityByCode(a.arrivalCityCode);
			sb.append("</div><div class='fareAlertRoute'>{0} - {1}</div></div>",
				dCity ? dCity.name : "",
				aCity ? aCity.name : "");
			
			sb.append("<div class='fareAlertInfo'>");
			sb.append("<div class='fareAlertLine'>");
			sb.append("<div class='fareAlertLineName' style='background-image:url(Styles/Images/loading.gif);'>loading...</div>");
			sb.append("<div class='fareAlertFlight'></div>");
			sb.append("<a class='linkShowAllFlightTimes' href='javascript:;'></a>");
			sb.append("</div>");
			sb.append("<div class='fareAlertFlightWay'>{0}</div>", _flightWayMap[a.flightWay]);
			sb.append("<div class='fareAlertTime'>");
			sb.append("<div class='fareAlertDeptTime'>Depart: <span>{0}</span></div>", JueKit.DateTime.format(a.departureTime, "dd MMM yy"));
			sb.append("<div class='fareAlertReturnTime'>Return: <span>{0}</span></div></div>", a.flightWay == 2 ? JueKit.DateTime.format(a.returnTime, "dd MMM yy") : "-");
			sb.append("<div class='fareAlertMaxPrice'>Your max. price: <span>{0}</span></div>", (a.trig == 1) ? "-" : "￥" + a.maxFare);
			sb.append("<div class='fareAlertLatestPrice'>Latest price: <a href='javascript:;'></a></div>");
			sb.append("<div class='fareAlertBook'><a class='fareAlertBookLink' href='javascript:;'><span>Book</span></a></div>");
			sb.append("</div>");
			
			sb.append("</div><div class='rndBoxFW'><div class='rndBoxF'><div class='rndBoxFI'></div></div></div>");
			
			el.innerHTML = sb.toString()
			getCheapestFlightFare(_alerts[i].id);
			return;
		}
	}
}

function linkMailAlert_click(alertId)
{
	_alertId = alertId;
	
	JueKit("txtEmailSendTo").value = "";
	JueKit("txtEmailMessage").value = "200 characters maximum";
	showEmailMessage("");
	
	JueKit.Dom.setStyles("emailToFriendWnd", {
		"zIndex" : JueKit.UI.Window.__increaseBg()+1,
		"top" : JueKit.Dom.getPositionY("alertList") + "px"
		});
	JueKit.Dom.show("emailToFriendWnd");
}


function linkDelAlert_click(alertId)
{
	if(!confirm("Are you sure to delete the alert?"))
	{
		return;
	}

	var args = {alertId:alertId};
	
	FA.theFareMng.postBack("DelFareAlert", args, __cbDelFareAlert_S);
	
	for(var i=0; i<_alerts.length; i++)
	{
		if(_alerts[i].id == alertId)
		{
			_alerts.splice(i, 1);
			JueKit.Dom.removeEl(JueKit.Dom.getChildElByIndex("alertListB", i));
			return;
		}
	}
}

function __cbDelFareAlert_S(text)
{
	var result = text.toObject();
	if(result.result != "Success")
	{
		return;
	}
	
}

function linkEditAlert_click(alertId)
{
	var a = getFareAlertById(alertId);
	_alertId = a.id;

	showMessage("");

	_editType = "edit";
	JueKit.Dom.setStyles("alertDetail", {
		"zIndex" : JueKit.UI.Window.__increaseBg()+1,
		"top" : JueKit.Dom.getPositionY("alertList") + "px"
		});
	JueKit.Dom.show("alertDetail");
	
	var rcp = JueKit.theRcp;
	rcp.slDepartureCity.set_selectedValue(a.departureCityCode);
	rcp.slArrivalCity.set_selectedValue(a.arrivalCityCode);
	JueKit("txtDepartureTime").value = JueKit.DateTime.format(a.departureTime, "MM/dd/yyyy");
	JueKit("txtReturnTime").value = JueKit.DateTime.format(a.returnTime, "MM/dd/yyyy");
	
	if(a.trig == 1)
	{
		JueKit("chkTrigDaily").checked = true;
		chkTrigDaily_click();
	}
	else
	{
		JueKit("chkTrigInstant").checked = true;
		chkTrigInstant_click();
		JueKit("txtMaxFare").value = a.maxFare;
	}
	JueKit("chkTrigDaily").checked = (a.trig == 1);
	JueKit("chkFlexibility").checked = (a.flexibility == 1);
	
	JueKit("selMonth").value = JueKit.DateTime.format(a.departureTime, "yyyy-MM-dd");
	
	if(a.flightWay == 1)
	{
		flightWayS_click();
	}
	else if(a.flightWay == 2)
	{
		flightWayD_click();
	}
	else
	{
		flightWayW_click();
	}
	
	JueKit("txtDepartureCity").focus();
}

function getCheapestFlightFare(alertId)
{
	for(var i=0; i<_alerts.length; i++)
	{
		if(_alerts[i].id == alertId)
		{
			if(_alerts[i].flightWay != 3 && (_alerts[i].departureTime < JueKit.DateTime.today().get_value()))
			{
				__cbGetCheapestFlightFare_S("{alertId:" + alertId + "}");
			}
			else
			{
				FA.theFareMng.postBack("GetCheapestFlightFare", {alertId:alertId}, __cbGetCheapestFlightFare_S);
			}
		}
	}
}

function __cbGetCheapestFlightFare_S(text)
{
	var result = text.toObject();
	
	for(var i=0; i<_alerts.length; i++)
	{
		if(_alerts[i].id == result.alertId)
		{
			var el = JueKit.Dom.getChildElByIndex("alertListB", i);
			el = el.childNodes[1].childNodes[1];
			var fare = result.fare;
			
			_alerts[i].mathced = true;
			_alerts[i].matchedFlight = fare;
			
			if(fare)
			{
				var airline = FA.StaticData.getAirlineById(fare.airline1);
				var elAirlineName = el.childNodes[0].childNodes[0];
				elAirlineName.innerHTML = airline.name;
				elAirlineName.style.backgroundPosition = "0 " + (_flightPicPos[fare.airline1] || "");
				elAirlineName.style.backgroundImage = "url(Styles/Images/flightsLogo.gif)";
				el.childNodes[0].childNodes[1].innerHTML = fare.flight1;
				var linkAddDepartureTimes = el.childNodes[0].childNodes[2];
				linkAddDepartureTimes.innerHTML = "All departure times";
				linkAddDepartureTimes.target = "_new";
				var arrShowTimesUrl = [];
				arrShowTimesUrl.push("ShowFareFirst.aspx");
				var dCity = FA.StaticData.getCityByCode(_alerts[i].departureCityCode);
				var aCity = FA.StaticData.getCityByCode(_alerts[i].arrivalCityCode);
				arrShowTimesUrl.push("?HomeCity=" + dCity.name);
				arrShowTimesUrl.push("&DestCity1=" + aCity.name);
				arrShowTimesUrl.push("&HomeCityNew=" + _alerts[i].departureCityCode);
				arrShowTimesUrl.push("&DestCity1New=" + _alerts[i].arrivalCityCode);
				arrShowTimesUrl.push("&FlightWay=" + (_alerts[i].flightWay == 1 ? "S" : "D"));
				arrShowTimesUrl.push("&DDatePeriod1=" + JueKit.DateTime.format(fare.departureDate, "yyyy-MM-dd"));
				if(_alerts[i].flightWay != 1)
				{
					arrShowTimesUrl.push("&ADatePeriod1=" + JueKit.DateTime.format(fare.returnDate, "yyyy-MM-dd"));
				}
				linkAddDepartureTimes.href = arrShowTimesUrl.join("");
				JueKit.Dom.show(linkAddDepartureTimes);
				var departureTime = JueKit.DateTime.format(fare.departureDate, "dd MMM yy") + "&nbsp;@&nbsp;" + fare.departureTime.substr(0, 2) + ":" + fare.departureTime.substr(2, 2);
				JueKit.Dom.getChildElByIndex(el.childNodes[2].childNodes[0], 0).innerHTML = departureTime;
				var returnTime;
				if(!fare.returnDate)
				{
					returnTime = "-";
				}
				else
				{
					returnTime = JueKit.DateTime.format(fare.returnDate, "dd MMM yy") + "&nbsp;@&nbsp;" + fare.returnTime.substr(0, 2) + ":" + fare.returnTime.substr(2, 2);
				}
				JueKit.Dom.getChildElByIndex(el.childNodes[2].childNodes[1], 0).innerHTML = returnTime;
				var elPrice = JueKit.Dom.getChildElByIndex(el.childNodes[4], 0);
				elPrice.innerHTML = "￥" + (fare.price1 + fare.price2);
				
				var arrBookUrl = [];
				arrBookUrl.push("BookFlight.aspx?from=web");
				arrBookUrl.push("&id=" + result.alertId);
				arrBookUrl.push("&HomeCity=" + _alerts[i].departureCityCode);
				arrBookUrl.push("&DestCity1=" + _alerts[i].arrivalCityCode);
				arrBookUrl.push("&Airline1=" + fare.airline1);
				arrBookUrl.push("&Flight1=" + fare.flight1);
				arrBookUrl.push("&PAgency1=" + fare.pAgency1);
				arrBookUrl.push("&DDatePeriod1=" + JueKit.DateTime.format(fare.departureDate, "yyyy-MM-dd"));
				arrBookUrl.push("&DepartTime1=" + fare.departureTime);
				arrBookUrl.push("&Price1=" + fare.price1);
				arrBookUrl.push("&PriceRate1=" + fare.rate1);
				arrBookUrl.push("&TicketType1=" + fare.ticketType1);
				arrBookUrl.push("&SubClass1=" + fare.subClass1);
				arrBookUrl.push("&FlightWay=" + (_alerts[i].flightWay == 1 ? "S" : "D"));
				if(_alerts[i].flightWay != 1)
				{
					arrBookUrl.push("&Airline2=" + fare.airline2);
					arrBookUrl.push("&Flight2=" + fare.flight2);
					arrBookUrl.push("&PAgency2=" + fare.pAgency2);
					arrBookUrl.push("&ADatePeriod1=" + JueKit.DateTime.format(fare.returnDate, "yyyy-MM-dd"));
					arrBookUrl.push("&DepartTime2=" + fare.returnTime);
					arrBookUrl.push("&Price2=" + fare.price2);
					arrBookUrl.push("&PriceRate2=" + fare.rate2);
					arrBookUrl.push("&TicketType2=" + fare.ticketType2);
					arrBookUrl.push("&SubClass2=" + fare.subClass2);
				}
				
				elPrice.href = arrBookUrl.join("");
				elPrice.target = "_new";
				el.childNodes[5].childNodes[0].href = elPrice.href;
				el.childNodes[5].childNodes[0].target = "_new";
			}
			else
			{
				el.childNodes[0].innerHTML = "This flight is currently unavailable, please call our customer service hotline at 400-619-9999 or choose another destination.";
				//JueKit.Dom.getChildElByIndex(el.childNodes[2].childNodes[0], 0).innerHTML = "-";
				//JueKit.Dom.getChildElByIndex(el.childNodes[2].childNodes[1], 0).innerHTML = "-";
				var elPrice = JueKit.Dom.getChildElByIndex(el.childNodes[4], 0);
				elPrice.innerHTML = "-";
				elPrice.href = "javascript:;";
				elPrice.target = "";
				el.childNodes[5].childNodes[0].href = "javascript:;";
				el.childNodes[5].childNodes[0].target = "";
			}
			return;
		}
	}
}


function linkNtfySetting_click()
{
	JueKit.Dom.toggle("alertSetting");

	JueKit("alertsContactMethodSms").checked = (_alertsContact & 1);
	JueKit("alertsContactMethodEmail").checked = (_alertsContact & 2);
}


function alertsContactMethod_click(sender)
{
	var alertsContact = 0;
	if(JueKit("alertsContactMethodSms").checked)
	{
		alertsContact |= 1;
	}
	if(JueKit("alertsContactMethodEmail").checked)
	{
		alertsContact |= 2;
	}

	FA.theMemberMng.postBack("SetUserAlertsContactMethod", {alertsContact:alertsContact}, __cbSetUserAlertsContactMethod_S);
	return true;
}


function __cbSetUserAlertsContactMethod_S()
{
}

function __cbGetCheapestFare_S(text)
{
	var result = text.toObject();
	
	var flightFare = result.flightFare;

	var maxFare = parseFloat(JueKit("txtMaxFare").value);
	if(maxFare < flightFare)
	{
		var msg = _fareTooLowHints[Math.floor(Math.random()*_fareTooLowHints.length)];
		showMessage(msg + "<br/>The fare you have entered has never been found on Ctrip before, please re-enter.");
		JueKit("txtMaxFare").focus();
	}
	else
	{
		btnSaveAlert_click(true);
	}
}

var timeoutShowMessage;

function showMessage(text)
{
	JueKit("alertDetailMsg").innerHTML = text;
	if(timeoutShowMessage)
	{
		clearTimeout(timeoutShowMessage);
	}
	timeoutShowMessage = setTimeout(clearMessage, 3000);
}

var timeoutShowEmailMessage;

function showEmailMessage(text)
{
	JueKit("emailToFriendMsg").innerHTML = text;
	if(timeoutShowEmailMessage)
	{
		clearTimeout(timeoutShowEmailMessage);
	}
	timeoutShowEmailMessage = setTimeout(clearMessage, 3000);
}

function clearMessage()
{
	//JueKit("alertDetailMsg").innerHTML = "";
}

function txtMaxFare_click()
{
	chkTrigInstant_click();
}

function selMonth_change()
{
}


function slCity_change()
{
	var rcp = JueKit.theRcp;
	var txtDepartureCity = JueKit("txtDepartureCity").value.trim().toLowerCase();
	var txtArrivalCity = JueKit("txtArrivalCity").value.trim().toLowerCase();
	
	var url = _availiblePriceTrender[txtDepartureCity + "-" + txtArrivalCity];
	if(url)
	{
		url = "http://pages.english.ctrip.com/pricetrender/" + url + ".html";
		JueKit.Dom.show("linkTrender");
		JueKit("linkTrender").href = url;
	}
	else
	{
		JueKit.Dom.hide("linkTrender");
	}
}


function linkCloseEmailToFriendWnd_click()
{
	JueKit.Dom.hide("emailToFriendWnd");
	JueKit.UI.Window.__decreaseBg();
}

function txtEmailMessage_focus()
{
	var txtEmailMessage = JueKit("txtEmailMessage");
	
	if(txtEmailMessage.value.trim() == "200 characters maximum")
	{
		txtEmailMessage.value = "";
	}
}

function txtEmailMessage_blur()
{
	var txtEmailMessage = JueKit("txtEmailMessage");
	if(txtEmailMessage.value.trim() == "")
	{
		txtEmailMessage.value = "200 characters maximum";
	}
}

function __dpDepartureTime_change(sender, args)
{
	var dtReturn = JueKit.DateTime.parse(JueKit("txtReturnTime").value);
	
	if(!dtReturn)
	{
		var dtDept = JueKit.DateTime.parse(JueKit("txtDepartureTime").value);
		if(dtDept)
		{
			JueKit.theRcp.dpReturnTime.set_defaultDay(dtDept.addDay(3));
		}
	}
}

function btnSendEmail_click()
{
	var emailSendTo = JueKit("txtEmailSendTo").value.trim();
	var emailMessage = JueKit("txtEmailMessage").value.trim();
	var alertId = _alertId;
	
	if(emailSendTo == "")
	{
		showEmailMessage("Please type the recipient's email address.");
		return;
	}
	
	if(emailMessage == "" || emailMessage == "200 characters maximum")
	{
		showEmailMessage("Please type your message.");
		return;
	}
	
	if(emailMessage.length > 200)
	{
		showEmailMessage("The message is 200 characters maximum.");
		return;
	}
	
	var args = 
	{
		emailSendTo : emailSendTo,
		emailMessage : emailMessage,
		alertId : alertId
	};
	
	FA.theFareMng.postBack("SendFareAlertToFriend", args);//, __cbSendFareAlertToFriend_S, null, __cbSendFareAlertToFriend_F);
	linkCloseEmailToFriendWnd_click();
}

function __cbSendFareAlertToFriend_S(text)
{
	alert("Mail sent OK.");
	linkCloseEmailToFriendWnd_click();
}

function __cbSendFareAlertToFriend_F()
{
	alert("Failed to send email.");
}

function showLandingWnd()
{
	if(JueKit.Cookies.getValue("dontShowLandingWnd") == "1")
	{
		linkCreateAlert_click();
		return;
	}
	JueKit.Dom.setStyles("fareAlertLandingWnd", {
		"zIndex" : JueKit.UI.Window.__increaseBg()+1,
		"top" : JueKit.Dom.getPositionY("alertList") + "px"
		});
	JueKit.Dom.show("fareAlertLandingWnd");
}

function closeLandingWnd(dontShowAgain)
{
	if(dontShowAgain)
	{
		document.cookie = "dontShowLandingWnd=1" + String(document.cookie);
	}

	JueKit.Dom.hide("fareAlertLandingWnd");
	JueKit.UI.Window.__decreaseBg();
	
	linkCreateAlert_click();
}
