String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, ""); }

if ($("q") != null) {
	$("q").observe("focus", function(evt){
		this.addClassName("focus");
	}.bindAsEventListener($("q")));

	$("q").observe("blur", function(evt){
		if (!this.value) this.removeClassName("focus");
	}.bindAsEventListener($("q")));
}

function bookmark() {
	document.all?
		window.external.AddFavorite("http://www.bookingair.com/", "BookingAir.com"):
		window.sidebar.addPanel("BookingAir.com", "http://www.bookingair.com/", "");
}

function processLogging(oSelf, elItem, oData){
	var data = elItem[2];

	new Ajax.Request("/response/get.airport_log.asp", {
		method:"GET",
		parameters:{ idx:data[2] }
	});
}

function openCode(idx) {
	if (idx == null) idx = "";
	window.open(
		"/airport.html?query=" + idx,
		"bookingair_airport",
		"width=517,height=400,top=100,left=10,toolbar=0,location=0,status=1,menubar=0,scrollbars=1,resizable=1"
	);
}


// Parse String to Date
function parseDate(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);
}


// Making Month Changer
function makeCalendarForm(curDate, curIDX) {
	var monthArray = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];

	// Parsing Date
	var startDate = new Date();
	var curDate = curDate==null?new Date():new Date(curDate);

	// Making Form Element
	var parentForm = new Element("form", { "method":"get", "action":"javascript:void(0);" });
	switch (curIDX) {
		case "departCalendar":
			var selectIDX = "departMonthChanger";
			break;
		case "returnCalendar":
			var selectIDX = "returnMonthChanger";
			break;
	}
	var selectBox = new Element("select", { id:selectIDX });

	// Making Option Element
	$R(0, 10).each(function(s){
		var monthString = String(startDate.toDateString()).split(" ");
		var monthData = monthString[3] + "-" + (startDate.getMonth()+1);
		var monthParam = monthArray[startDate.getMonth()] + " " + monthString[3];

		var curOption = new Element("option");
		curOption.setAttribute("value", monthData);
		curOption.update(monthParam);

		if ((curDate.getFullYear() == startDate.getFullYear())&&(curDate.getMonth() == startDate.getMonth())) {
			curOption.setAttribute("selected", "selected");
		}

		selectBox.insert(curOption);
		startDate.setMonth(startDate.getMonth()+1);
	});

	parentForm.update(selectBox);
	return parentForm;
}


// Display YUI Calendar
function calendar(obj, startDate, minDate, targetObj) {
	// Parsing Date
	curDate		= new Date();
	startDate	= parseDate(startDate);
	minDate		= parseDate(minDate);

	switch (obj.getAttribute("id")) {
		case "departCalendar":
			var calendarTitle = "Please Select Depart Date";
			if ($("returnCalendar")!=null) $("returnCalendar").hide();
			break;
		case "returnCalendar":
			var calendarTitle = "Please Select Return Date";
			if ($("departCalendar")!=null) $("departCalendar").hide();
			break;
	}

	YAHOO.namespace("example.calendar");
	obj.show();

	// Config Calendar
	var cObj = new YAHOO.widget.CalendarGroup(obj.getAttribute("id") + "_table", obj, {
		PAGES:2,
		pagedate:(startDate.getMonth()+1) + "/" + startDate.getFullYear(),
		selected:(startDate.getMonth()+1) + "/" + startDate.getDate() + "/" + startDate.getFullYear(),
		mindate:(minDate.getMonth()+1) + "/" + minDate.getDate() + "/" + minDate.getFullYear(),
		locale_weekdays:"1char",
		title:calendarTitle,
		close:true
	});


	// Date Select Event
	cObj.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;

		targetObj.value = curMonth + "/" + curDay + "/" + curYear;
		if (targetObj.getAttribute("id")=="departDate"&&$("returnCalendar")!=null) {
			var tmpDate = parseDate(curMonth + "/" + curDay + "/" + curYear);
			tmpDate.setDate(tmpDate.getDate() + 7);

			var curYear		= String(tmpDate.getFullYear());
			var curMonth	= String(tmpDate.getMonth() + 1);
			var curDay		= String(tmpDate.getDate());

			if (curDay.length==1) curDay = "0" + curDay;
			if (curMonth.length==1) curMonth = "0" + curMonth;
			if (curMonth == "00") curMonth = "12";

			$("returnDate").value = curMonth + "/" + curDay + "/" + curYear;
			$('returnCalendar').hide();
		}

		obj.hide();
	}, cObj, true);


	// Calendar Render Event
	// Making Custom Navigation
	cObj.renderEvent.subscribe(function(type, args){
		var startDate	= this.pages[0].cfg.getProperty("pagedate");
		var maxDate		= new Date();
		maxDate.setMonth(maxDate.getMonth()+10);

		var curMonth	= String(curDate.getMonth() + 1);
		var startMonth	= String(startDate.getMonth() + 1);
		var maxMonth	= String(maxDate.getMonth() + 1);

		if (curMonth.length==1) curMonth = "0" + curMonth;
		if (startMonth.length==1) startMonth = "0" + startMonth;
		if (maxMonth.length==1) maxMonth = "0" + maxMonth;

		var curIndex	= Number(String(curDate.getFullYear()) + curMonth);
		var startIndex	= Number(String(startDate.getFullYear()) + startMonth);
		var maxIndex	= Number(String(maxDate.getFullYear()) + maxMonth);

		var calHeader	= obj.select("div.calheader");
		var formObj		= makeCalendarForm(startDate, obj.getAttribute("id"));
		calHeader[0].update(formObj);

		if (curIndex < startIndex) {
			var leftAnchor = new Element("A");
			leftAnchor.addClassName("calnavleft");
			leftAnchor.onclick = function(){
				cObj.previousMonth();
			};
			calHeader[0].insert({ top:leftAnchor });
		}

		if (startIndex >= maxIndex) {
			calHeader[1].update(String(calHeader[1].innerHTML).stripTags());
		}

		switch (obj.getAttribute("id")) {
			case "departCalendar":
				var selectIDX = "departMonthChanger";
				break;
			case "returnCalendar":
				var selectIDX = "returnMonthChanger";
				break;
		}

		$(selectIDX).onchange = function(){
			var tmpArray	= this[this.selectedIndex].value.split("-");
			var curYear		= parseInt(tmpArray[0]);
			var curMonth	= parseInt(tmpArray[1]);

			cObj.cfg.setProperty("pagedate", curMonth + "/" + curYear);
			cObj.render();
		};
	}, cObj, true);


	// Start Calendar
	cObj.render();
}


function reserveButton(bool) {
	if ($("submitWrapper") != null) {
		$("submitWrapper").update();

		/*
		var tplButton = bool == true ?
			new Template("<p><input type=\"button\" value=\"#{value}\" onclick=\"#{click}\" class=\"#{name}\" /></p>") :
			new Template("<p><input type=\"button\" value=\"#{value}\" onclick=\"#{click}\" class=\"#{name}\" disabled=\"disabled\" /></p>");
		*/
		var tplButton = new Template("<p><input type=\"button\" value=\"#{value}\" onclick=\"#{click}\" class=\"#{name}\" /></p>");

		switch (String($("reserved").classNames())) {
			case "air":
				$("submitWrapper").insert(tplButton.evaluate({ value: "Flight Only: SEARCH BEST PRICE", click: "reserveProcess('air')" }));
				$("submitWrapper").insert(tplButton.evaluate({ value: "Save More: SEARCH FLIGHT + HOTEL", click: "reserveProcess('air_hotel')", name: "plus" }));
				break;
			case "air_hotel":
				$("submitWrapper").insert(tplButton.evaluate({ value: "Flight + Hotel Only: SEARCH BEST PRICE", click: "reserveProcess('air_hotel')" }));
				$("submitWrapper").insert(tplButton.evaluate({ value: "Save More: SEARCH FLIGHT + HOTEL + CAR", click: "reserveProcess('air_hotel_car')", name: "plus" }));
				break;
			case "air_car":
				$("submitWrapper").insert(tplButton.evaluate({ value: "Flight + Car Only: SEARCH BEST PRICE", click: "reserveProcess('air_car')" }));
				$("submitWrapper").insert(tplButton.evaluate({ value: "Save More: SEARCH FLIGHT + HOTEL + CAR", click: "reserveProcess('air_hotel_car')", name: "plus" }));
				break;
			case "air_hotel_car":
				$("submitWrapper").insert(tplButton.evaluate({ value: "Flight + Hotel + Car: SEARCH BEST PRICE", click: "reserveProcess('air_hotel_car')", name: "plus" }));
				break;
			case "hotel":
				$("submitWrapper").insert(tplButton.evaluate({ value: "SEARCH BEST PRICE", click: "reserveProcess('hotel')" }));
				break;
			case "hotel_car":
				$("submitWrapper").insert(tplButton.evaluate({ value: "SEARCH BEST PRICE", click: "reserveProcess('hotel_car')" }));
				break;
			case "car":
				$("submitWrapper").insert(tplButton.evaluate({ value: "SEARCH BEST PRICE", click: "reserveProcess('car')" }));
				break;
			default:
				break;
		}
	}
}


// When Reserved Form is Exists
if ($("reserved") != null) {
	reserveButton();
	reserveReady();
}

function chkForm() {
	var status = true;
	if ($("city1") != null) {
		if ($("city1").value == "") {
			status = false;
		}
	}

	if ($("city2") != null) {
		if ($("city2").value == "") {
			status = false;
		}
	}
	
	return status;
}

function reserveProcess(values) {
	if (!values) values = String($("reserved").classNames());

	var errMsg;
	if (chkForm() == false) {
		if ($("city2") != null) {
			if ($("city2").value == "") {
				errMsg = "Please Insert Destination Airport";
			}
		}		
	
		if ($("city1") != null) {
			if ($("city1").value == "") {
				errMsg = "Please Insert Arrival Airport";
			}
		}
	}

	if (errMsg == null) {
		if (String($("reserved").classNames()) != values) changePackage(values);
		//$("reserved").setAttribute("action", "/form.html");
		$("reserved").submit();
	} else {
		alert(errMsg);
		reserveButton(false);
	}
}


// Change Package Type
function changePackage(values) {
	var tmpClass = String($("reserved").classNames());
	if (values == null) values = tmpClass;

	$("reserved").className = values;
	$("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');
		}
	});

	switch (values) {
		case "air":
			if (["air", "air_hotel", "air_car", "air_hotel_car"].include(tmpClass) == true) {
				$("blockHotels").hide();
				$("blockCars").hide();
				$("blockCars").down(1).checked = false;
				if ($("tobox").value) _processDeal($("tobox").value);
			} else {
				document.location.href = "/";
			}
			break;
		case "air_car":
			if (["air", "air_hotel", "air_car", "air_hotel_car"].include(tmpClass) == true) {
				$("blockHotels").hide();
				$("blockCars").show();
				$("blockCars").down(1).checked = true;
				if ($("tobox").value) _processDeal($("tobox").value);
			} else {
				document.location.href = "/?package=air_car";
			}
			break;
		case "air_hotel":
			if (["air", "air_hotel", "air_car", "air_hotel_car"].include(tmpClass) == true) {
				$("blockHotels").show();
				$("blockCars").hide();
				$("blockCars").down(1).checked = false;
				if ($("tobox").value) _processDeal($("tobox").value);
			} else {
				document.location.href = "/?package=air_hotel";
			}
			break;
		case "air_hotel_car":
			if (["air", "air_hotel", "air_car", "air_hotel_car"].include(tmpClass) == true) {
				$("blockHotels").show();
				$("blockCars").show();
				$("blockCars").down(1).checked = true;
				if ($("tobox").value) _processDeal($("tobox").value);
			} else {
				document.location.href = "/?package=air_hotel_car";
			}
			break;
		case "hotel_car":
			if (["hotel", "hotel_car"].include(tmpClass) == true) {
				$("blockCars").show();
				$("blockCars").down(1).checked = true;
				if ($("frombox").value) _processDeal($("frombox").value);
			} else {
				document.location.href = "/hotels/?package=hotel_car";
			}
			break;
		case "hotel":
			if (["hotel", "hotel_car"].include(tmpClass) == true) {
				$("blockCars").hide();
				$("blockCars").down(1).checked = false;
				if ($("frombox").value) _processDeal($("frombox").value);
			} else {
				document.location.href = "/hotels/";
			}
			break;
		case "car":
			if (["car"].include(tmpClass) != true) {
				document.location.href = "/cars/";
			}
			break;
		case "cruise":
			if (["cruise"].include(tmpClass) != true) {
				document.location.href = "/cruises/";
			}
			break;		
	}

	reserveButton(chkForm());
}


function reserveReady() {
	$("reserved").getInputs("radio", "singlemenu").invoke("observe", "click", function(evt) { changePackage(this.value); });

	if ($("frombox") != null) {
		$("frombox").setAttribute("name", "_city1");
		$("frombox").insert({
			after: new Element("input", {
				type: "hidden",
				id: "_frombox",
				name: "city1"
			})
		});

		if ($("frombox").value) _processCode($("frombox").value, $("city1"));
	}

	if ($("tobox") != null) {
		$("tobox").setAttribute("name", "_city2");
		$("tobox").insert({
			after: new Element("input", {
				type: "hidden",
				id: "_tobox",
				name: "city2"
			})
		});

		if ($("tobox").value) _processCode($("tobox").value, $("city2"));		
	}
}


function _processDeal(airportName, airportIDX) {
	if (airportIDX == null) var airportIDX = "";
	new Ajax.Request("/response/json.deal_list.asp", {
		method:"GET",
		parameters:{
			name:airportName,
			idx:airportIDX
		},
		onSuccess:function(res){
			var json = res.responseJSON;
			if (json.status == true) {
				var curLimit = json.response.length>5?5:json.response.length;
				var htmlEntry = "";
				for (var inc = 0; inc < curLimit; inc++) {
					var curEntry = json.response[inc];
					if ((inc%2) == 0) {
						htmlEntry += "<li class='first'><a href=\"javascript:void(0);\" onclick=\"dealRedirect('" + curEntry.redirect + "')\">" + curEntry.subject + "</a></li>";
					} else {
						htmlEntry += "<li><a href=\"javascript:void(0);\" onclick=\"dealRedirect('" + curEntry.redirect + "')\">" + curEntry.subject + "</a></li>";
					}
				}

				if (json.response.length > 0) {
					$("autodealContents").down().hide();
					$("autodeal_list").show();
					$("autodeal_list").update(htmlEntry);
				} else {
					$("autodealContents").down().show();
					$("autodeal_list").hide();
				}
			} else {
				$("autodealContents").down().show();
				$("autodeal_list").hide();
			}
		}
	});
}


function _processCode(values, obj) {
	new Ajax.Request("/response/json.airport_list.asp", {
		method: "GET",
		parameters: {
			query: values
		},
		onSuccess: function(res) {
			if (res.responseJSON.status == true) obj.value = res.responseJSON.result[0].code;
		}
	});
}