// Global Variables
var hostel_struct;

// IE6 Cache Bug
if (document.all) try { document.execCommand('BackgroundImageCache', false, true); } catch (e) { }


// News Search Form
if ($("query") != null) {
	$("q").observe("focus", function(evt){
		this.addClassName("focus");
	}.bindAsEventListener($("q")));

	$("q").observe("blur", function(evt){
		if (!this.value) this.removeClassName("focus");
	}.bindAsEventListener($("q")));
}


// Weather
if ($("weather") != null) {
	window.setInterval(function(){
		new Ajax.Request("/template/WeatherSidebar.asp", {
			method:"GET",
			onSuccess:function(res){
				Effect.BlindUp("weatherHeader");

				window.setTimeout(function(){
					var text = res.responseText;
					text = text.substr(20);
					text = text.substr(0, text.length - 8);
					text = text.replace("<span id='weatherHeader'>", "<span id='weatherHeader' style='display:none;'>");

					$("weather").update(text);
					Effect.BlindDown("weatherHeader");
				}, 1000);
			}
		});
	}, 10000);
}


// Deals
if ($("dealChanger") != null) {
	$("dealChanger").observe("change", function(evt){
		new Ajax.Request("/template/DealsList.asp", {
			method:"GET",
			parameters:{
				idx:this.value
			},
			onSuccess:function(res){
				var text = res.responseText;
				text = text.substr(text.indexOf("<ul id=\"dealList\">") + 18);
				text = text.substr(0, text.length - 22);

				$("dealList").update(text);
			}
		});
	});
}


// Changing Video
function changeVideo(url, subject) {
	$("ticketVideo").update(new Element("embed", {
		"src":url,
		"width":240,
		"height":200
	}));
	$("ticketVideo").insert(subject);
}


// Timeframe
function startframe(obj) {
	if ($("iframe_calendars")) $("iframe_calendars").remove();
	$("calendars").toggle();

	function convertDate(values) {
		var tmpArray	= values.split("/");
		var curMonth	= Number(tmpArray[0]) - 1;
		var curDate		= Number(tmpArray[1]);
		var curYear		= Number(tmpArray[2]);

		return new Date(curYear, curMonth, curDate);
	}

	var departDate = $("departDate");
	var returnDate = $("returnDate");
	var container = $("calendars");

	if (!container) {
		alert("Sorry, Failed to initiaize Calendar widget");
		return null;
	}

	// Common Attribute
	var minDate = new Date();
	var maxDate = new Date(new Date().getTime() + (86400000 * 365));

	var curOption = {
		close:true,
		minDate:minDate,
		pageDate:convertDate(departDate.value),
		maxDate:maxDate,
		locale_weekdays:"1char",
		title:"Select Date",
		iframe:false
	};

	if (returnDate) {
		// Two ways
		var startDate = departDate.value;
		var endDate	= returnDate.value;

		Object.extend(curOption, {
			selected:startDate + "-" + endDate
		});
	} else {
		// One ways
		var selectDate = departDate.value;
		obj = departDate;

		Object.extend(curOption, {
			selected:selectDate
		});
	}

	// Common Constructor
	iCal = new YAHOO.widget.CalendarGroup($("calendars"), curOption);
	iCal.renderEvent.subscribe(function(type, args){
		var CurPageDate = this.pages[0].cfg.getProperty("pagedate");
		var CurHeader = $("calendars").select("div.calheader");
		var ChangerMonth = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
		var ChangerDate = new Date();


		// Making Select Box
		var ChangerForm = new Element("select");
		$R(0, 11).each(function(s){
			var ChangerDateString	= String(ChangerDate.toDateString()).split(" ");

			var ChangerOption = new Element("option", {
				value:(ChangerDate.getMonth() + 1) + "/" + ChangerDateString[3]
			}).update(ChangerMonth[ChangerDate.getMonth()] + " " + ChangerDateString[3]);

			if ((CurPageDate.getFullYear() == ChangerDate.getFullYear()) && (CurPageDate.getMonth() == ChangerDate.getMonth())) {
				ChangerOption.setAttribute("selected", "selected");
			}

			ChangerForm.insert(ChangerOption);
			ChangerDate.setMonth(ChangerDate.getMonth() + 1);
		});

		// Insert Select Box
		CurHeader[0].update(ChangerForm);


		// Process Navigation Button
		var curMonth = CurPageDate.getMonth();
		var maxMonth = maxDate.getMonth();
		var minMonth = minDate.getMonth();
		if (curMonth < 10) curMonth = "0" + curMonth;
		if (maxMonth < 10) maxMonth = "0" + maxMonth;
		if (minMonth < 10) minMonth = "0" + minMonth;

		var curIndex = parseInt(CurPageDate.getFullYear() + "" + curMonth);
		var maxIndex = parseInt(maxDate.getFullYear() + "" + maxMonth);
		var minIndex = parseInt(minDate.getFullYear() + "" + minMonth);

		if (curIndex >= maxIndex - 1) {
			CurHeader[1].select("a")[0].remove();
		}

		if (curIndex > minIndex) {	
			var CurLink = new Element("a", {
				"class":"calnavleft",
				"href":"javascript:void(0);"
			});
			CurLink.update("Previous Month (" + ChangerMonth[minDate.getMonth()] + " " + minDate.getFullYear() + ")");
			CurLink.observe("click", function(evt){
				iCal.previousMonth();
			});

			CurHeader[0].insert({ top:CurLink });
		}


		// Observing Select Box
		ChangerForm.observe("change", function(evt){
			iCal.cfg.setProperty("pagedate", this[this.selectedIndex].value);
			iCal.render();
		});
	}, iCal, true);

	iCal.hideEvent.subscribe(function(type, args){
		if ($("iframe_calendars")) $("iframe_calendars").remove();
	}, iCal, true);

	iCal.selectEvent.subscribe(function(type, args){
		var curTemp		= String(args).split(",");
		var curYear		= curTemp[0];
		var curMonth	= curTemp[1];
		var curDay		= curTemp[2];

		if (curDay.length==1) curDay = "0" + curDay;
		if (curMonth.length==1) curMonth = "0" + curMonth;

		obj.value = curMonth + "/" + curDay + "/" + curYear;
		iCal.hide();
	}, iCal, true);


	// Custom Select Event
	if (returnDate) {

	} else {
		iCal.selectEvent.subscribe(function(type, args){
			var curTemp		= String(args).split(",");
			var curYear		= curTemp[0];
			var curMonth	= curTemp[1];
			var curDay		= curTemp[2];

			if (curDay.length==1) curDay = "0" + curDay;
			if (curMonth.length==1) curMonth = "0" + curMonth;

			departDate.value = curMonth + "/" + curDay + "/" + curYear;
			iCal.hide();
		}, iCal, true);
	}

	iCal.render();

	// Make for IE6
	if (Prototype.Browser.IE6 && $("calendars").style.display != "none") {
		var iFrame = new Element("iframe", {
			id:"iframe_calendars"
		});

		$("calendars").insert({after: iFrame });
	}
}


// Changing Package
function changePackage(values) {
	var lastClass = String($("reserved").classNames());
	var curParent = values.split("_")[0];

	$("reserved").getInputs("radio", "singlemenu").each(function(s){
		if (s.value == values) {
			s.checked = true;
			s.up(4).select("li").invoke("removeClassName", "select");
			s.up(1).addClassName('select');
		}
	});

	if (lastClass != curParent) {
		switch (curParent) {
			case "air":
				var curURL = "/template/FlightsForm.asp";
				break;
			case "hotel":
				var curURL = "/template/HotelsForm.asp";
				break;
			case "car":
				var curURL = "/template/CarsForm.asp";
				break;
			case "cruise":
				var curURL = "/template/CruisesForm.asp";
				break;
			case "hostel":
				var curURL = "/template/HostelsForm.asp";
				break;
		}

		new Ajax.Request(curURL, {
			method:"GET",
			parameters:{ package:values },
			onSuccess:function(res){
				$("reserved").remove();
				$("booking").insert({ top:res.responseText });
				reserveApply();
				changeSubmit(values);
			}
		});
	} else {
		switch (values) {
			case "air":
				$("blockCars").hide();
				$("blockCars").select("input[name='car']").each(function(s){
					s.checked = false;
				});
				$("blockHotels").hide();
				break;
			case "air_hotel":
				$("blockCars").hide();
				$("blockCars").select("input[name='car']").each(function(s){
					s.checked = false;
				});
				$("blockHotels").show();
				break;
			case "air_car":
				$("blockCars").show();
				$("blockCars").select("input[name='car']").each(function(s){
					s.checked = true;
				});
				$("blockHotels").hide();
				break;
			case "air_hotel_car":
				$("blockCars").show();
				$("blockCars").select("input[name='car']").each(function(s){
					s.checked = true;
				});
				$("blockHotels").show();
				break;
			case "hotel":
				$("blockCars").hide();
				$("blockCars").select("input[name='car']").each(function(s){
					s.checked = false;
				});
				break;
			case "hotel_car":
				$("blockCars").show();
				$("blockCars").select("input[name='car']").each(function(s){
					s.checked = true;
				});
				break;
		}

		changeSubmit(values);
	}
}


// Changing Submit Button
function changeSubmit(values, dedicated) {
	var execProc = dedicated == true ? "changePackageDedicated" : "changePackage";
	switch (values) {
		case "air":
			$("submitWrapper").update(
				"<p><input type=\"submit\" value=\"Flight Only - SEARCH BEST PRICE\" /></p>" +
				"<p><input type=\"button\" class=\"plus\" value=\"Save More: SEARCH FLIGHT + HOTEL\" onclick=\"" + execProc + "('air_hotel'); $('reserved').submit();\" /></p>"
			);
			break;
		case "air_car":
			$("submitWrapper").update(
				"<p><input type=\"submit\" value=\"Flight + Car - BEST PRICE\" /></p>" +
				"<p><input type='button' class='plus' value='Save More: SEARCH FLIGHT + HOTEL + CAR' onclick=\"" + execProc + "('air_hotel_car'); $('reserved').submit();\" /></p>"
			);
			break;
		case "air_hotel":
			$("submitWrapper").update(
				"<p><input type=\"submit\" value=\"Flight + Hotel - BEST PRICE\" /></p>" +
				"<p><input type='button' class='plus' value='Save More: SEARCH FLIGHT + HOTEL + CAR' onclick=\"" + execProc + "('air_hotel_car'); $('reserved').submit();\" /></p>"
			);
			break;
		case "air_hotel_car":
			$("submitWrapper").update("<p><input type=\"submit\" class=\"plus\" value=\"Flight + Hotel + Car - SEARCH BEST PRICE\" /></p>");
			break;
		case "hotel":
			$("submitWrapper").update("<p><input type=\"submit\" value=\"Hotel Only - Best Providers\" /></p>");
			break;
		case "hotel_car":
			$("submitWrapper").update("<p><input type=\"submit\" value=\"Hotel + Car - Best Providers\" /></p>");
			break;
	}
}


// Checking Car
function checkCar(obj) {
	if (obj.checked == false) {
		var curClass = String($("reserved").classNames());
		switch (curClass) {
			case "hotel":
				changePackage('hotel');
				break;
			case "air":
				$("reserved").getInputs("radio", "singlemenu").each(function(s){
					if (s.checked == true) {
						switch (s.value) {
							case "air_car":
								changePackage('air');
								break;
							case "air_hotel_car":
								changePackage('air_hotel');
								break;
						}
					}
				});
				break;
		}
	}
}


// Javascript action apply to form
function reserveApply() {
	var curClass = String($("reserved").classNames());
	// Changing Form Control
	$("reserved").getInputs("radio", "singlemenu").invoke('observe', 'click', function(evt){
		changePackage(this.value);
	});

	switch (curClass) {
		case "air":
			$("reserved").setAttribute("action", "/form.asp");

			new AutoComplete("frombox", "/response/airport.asp?query=", {
				cssClass: "autocomplete",
				width: 325,
				offsetLeft: null,
				resultFormat: AutoComplete.Options.RESULT_FORMAT_XML,
				resultConvert: function(values){
					return values.substr(0, 3);
				}
			});


			new AutoComplete("tobox", "/response/airport.asp?query=", {
				cssClass: "autocomplete",
				width: 325,
				offsetLeft: -178,
				resultFormat: AutoComplete.Options.RESULT_FORMAT_XML,
				resultConvert: function(values){
					return values.substr(0, 3);
				}
			});
			break;

			$("reserved").getInputs("radio", "flighttype").invoke('observe', 'click', function(evt){
				if (this.value == "1") {
					$("blockOneway").hide();
					$('returnDate').value = $('departDate').value;
				} else {
					$("blockOneway").show();
				}

				$("calendars").hide();
				$("calendars").update(null);
			});
			break;
		case "car":
			$("reserved").setAttribute("action", "/form.asp");
			new AutoComplete("frombox", "/response/airport.asp?query=", {
				cssClass: "autocomplete",
				resultFormat: AutoComplete.Options.RESULT_FORMAT_XML,
				resultConvert: function(values){
					return values.substr(0, 3);
				}
			});
			break;
		case "hotel":
			$("reserved").setAttribute("action", "/form.asp");

			$("reserved").getInputs("radio", "destination").invoke('observe', 'click', function(evt){
				new Ajax.Request("/response/hotel.asp", {
					method:"GET",
					parameters:{
						query:this.value
					},
					onSuccess:function(res){
						var obj = res.responseJSON;
						if (obj.status == true) {
							var ListWrap = new Element("ul");
							obj.data.each(function(t){
								ListWrap.insert(new Template("<li><a href=\"#\" onclick=\"$('frombox').value = '#{recommend_data}'\">#{recommend_name}</a></li>").evaluate(t));
							});
							$("destWrapper").update(ListWrap);
						}
					}
				});
			});
			break;
		case "cruises":
			$("destWrapper").observe("change", function(evt){
				if (this.value != "") {
					new Ajax.Request("/response/cruises.asp", {
						method:"GET",
						onSuccess:function(res){
							var obj = res.responseJSON;
							if (obj.status == true) {
								$("submitWrapper").update(null);
								obj.response.each(function(s){
									$("submitWrapper").insert(new Template("<p><input type='submit' class='#{idx}' name='group' value='#{idx}' /></p>").evaluate(s));
								});
							}
						}
					});
				}
			});
			break;
		case "hostel":
			new Ajax.Request("/response/hostel.asp", {
				method:"GET",
				onSuccess:function(res){
					hostel_struct = res.responseJSON;

					$("FABCountryChoice").observe("change", function(evt){
						updateHotelList(this.value);
					});

					$("container").select("dl.hostel-list h4").invoke("observe", "click", function(evt){
						var old_list = this.up().select("ul");
						if (old_list.length > 0) {
							old_list.invoke("remove");
						} else {
							var target_alphabet = this.innerHTML.substr(2, 1);
							var country_list = new Element("ul");
							for (var country in hostel_struct) {
								var cur_alphabet = country.substr(0, 1);
								if (target_alphabet == cur_alphabet)  {
									var cur_country = new Element("li");
									cur_country.update("<h5><a onclick=\"selectCountry(Element.extend(this), '" + country + "')\">" + country + "</a></h5>");
									country_list.insert(cur_country);
								}
							}
							this.up().insert(country_list);
						}
					});

					$("FABCountryChoice").value = "USA";
					updateHotelList("USA");
				}
			});
			break;
	}
}


// Select Country
function selectCountry(obj, country) {
	var old_list = obj.up(1).select("ol");
	if (old_list.length > 0) {
		old_list.invoke("remove");
	} else {
		var city_list = new Element("ol");
		for (var i = 0; i < hostel_struct[country].length; i++) {
			var city = hostel_struct[country][i];
			var cur_city = new Element("li");
			cur_city.update("<a href=\"/hostels/form.asp?type=query&amp;query=" + escape("gangescom/findabed.php?ChosenCountry=" + country + "&ChosenCity=" + city) + "\">" + city + "</a>");
			city_list.insert(cur_city);
		}
		obj.up(1).insert(city_list);
	}
}


// Update Hotel List
function updateHotelList(country, city) {
	if (country != "") {
		var cur_city_index = 0;
		$("FABChoice").update("<option value=\"\">-- City Select --</option>");
		for (var i = 0; i < hostel_struct[country].length; i++) {
			var cur_city = hostel_struct[country][i];

			if (city == cur_city) {
				$("FABChoice").insert("<option value=\"" + cur_city + ";" + country + "\" selected='selected'>" + cur_city + "</option>");
				cur_city_index = i + 1;
			} else {
				$("FABChoice").insert("<option value=\"" + cur_city + ";" + country + "\">" + cur_city + "</option>");
			}
		}

		$("FABChoice").selectedIndex = cur_city_index;
	}
}


// Form Control
if ($("reserved") != null) $("booking").getAttribute("class") == "dedicated" ? reserveDedicated() : reserveApply();


// Weather Form Control
if ($("weather-form") != null) {
	new AutoComplete("weather-query", "/response/city.asp?query=", {
		cssClass: "autocomplete",
		resultFormat: AutoComplete.Options.RESULT_FORMAT_XML
	});
}


function openCode(idx) {
	if (idx == null) idx = "";
	window.open(
		"/airport.asp?query=" + idx,
		"bookingair_airport",
		"width=517,height=400,top=100,left=10,toolbar=0,location=0,status=1,menubar=0,scrollbars=1,resizable=1"
	);
}