// JavaScript Document

LX._Inputs = {
	valDiffAjax_AirportName: function (element, nextevent) {
		element = $(element);
		var value = element.getValue();
		
		if (!isEmptyString(value)) {
			var valdiffajaxexcludefield = element.readAttribute("valdiffajaxexcludefield"), valdiffajaxincludefield = element.readAttribute("valdiffajaxincludefield"), valdiffajaxcheck = element.readAttribute("valdiffajaxcheck"); 
			var excludefield, excludevalue = 0, includefield, includevalue = 0;
			if (excludefield = element.form.down("[name='" + valdiffajaxexcludefield + "']")) {
				excludevalue = excludefield.getValue();
			}
			if (includefield = element.form.down("[name='" + valdiffajaxincludefield + "']")) {
				includevalue = includefield.getValue();
			}
			if (!valdiffajaxcheck) {
				valdiffajaxcheck = "";
			}
	
			// DIFF: using fixed "airportName" instead
			new Ajax.Request(siteAjax + "?ajax=valdup&field=airportName&value=" + value + "&excludefield=" + valdiffajaxexcludefield + "&excludevalue=" + excludevalue + "&includefield=" + valdiffajaxincludefield + "&includevalue=" + includevalue, {
				element: element.form,
				method: "get",
				onSuccess: function (xhr) {
					var result = xhr.responseText;
					if (result == "0") {
						element.valMessageSend("Ошибка: такое значение уже присутствует. Введите/выберите другое значение !");
					} else if (result == "1") { // we need this "1" in explicit form, cause it means that's all OK with xhr.status and no ajax errors occured
						// DIFF: using custom pending name
						element.clearValidator("valDiffAjax_AirportName");
						element.form.tryToSubmit(nextevent);
					}
				}
			});
		}
	}
}

Element.addMethods(["INPUT", "SELECT", "TEXTAREA"], LX._Inputs);

function MenuLoad () {
	$("header").down("table.topmenu").select("a")
		.invoke("observe", "mouseover", function () {
			this.up("td").addClassName("over");
		})
		.invoke("observe", "mouseout", function () {
			this.up("td").removeClassName("over");
		});
	$("footer").down("table.bottommenu").select("a")
		.invoke("observe", "mouseover", function () {
			this.up("td").addClassName("over");
		})
		.invoke("observe", "mouseout", function () {
			this.up("td").removeClassName("over");
		});
	$("footer").down("table.legal").select("a.popup")
		.invoke("observe", "click", ShowFooterLink);
}

function ShowFooterLink (ev) {
	var src = this;
	
	var sect = $w(src.className).first();
	
	new Ajax.Request(siteAjax + "?ajax=getinfoblock&sect=" + sect, {
		element: src,
		method: "get",
		onSuccess: function (xhr) {
			var result = xhr.responseText;

			document.body.dim({klass: "dimminginvert", opacity: 0.5, simple: true});
			var messagebox = LX.Utils.showMessage(
				result + 
				"<div class='align-center'><a href='javascript://' class='button close'><img src='i/buttonclose.gif' alt='' /></a></div>"
				, {dim: true, klass: "footerlinkpopup"}
			);
				
			messagebox.down("a.close").observe ("click", function () {
				document.body.undim({simple: true});
				messagebox.remove();
			});
		}
	});
}

function TransferLoad () {
	var form = $("mainForm");
	form.setValidator(
		["valRequired", "city2Name", "orderDateOut", "clientEMail", "clientName", "clientSurname", "orderQtyOfAdults"], 
		["valDate", "orderDateOut"], 
		["valEMail", "clientEMail"]
	);
	form.down("a#atButton01").observe("click", function () { this.up("form").fire("LX:validate"); } );
}

function sortextcitylist (a, b) {
	var x = a.name, y = b.name; 
	return x < y ? -1 : (x > y ? 1 : 0);
}

function ExtCityLoad () {
	var extcity1list = [];
	
	extcity1list = extcitylist
		.select( function (e) { return routematrix.find( function (e2) { return e2.f == e.id; } ); } )
		.sort(sortextcitylist)
		.uniq(true);
		
	$("extbusticket").select("[name='extroutetype']").each( function (e) {
		e.observe("keyup", ExtRouteChange).observe("change", ExtRouteChange);
	});
	
	$("extcity1").replaceBySelect(extcity1list, {id: "extcity1", name: "extcity1"});
	$("extcity1")
		.observe("keyup", ExtCityRender)
		.observe("change", ExtCityRender);
		
	$("extroutelist").select("a")
		.invoke("observe", "click", ShowExtStopList);
		
	var form = $("extbusticket");
	form.setValidator(
		["valRequired", "extcity1", "extcity2", "extdate", "extperson", "extphone"], 
		["valRequiredAny", "extqtyadult", "extqtychild", "extqtyspecial"], 
		["valEMail", "extemail"],
		["valDate", "extdate", "extdateofreturn"]
	);
	form.down("a#btButton").observe("click", function () { this.up("form").fire("LX:validate"); } );
	
	$("extcity1").setValue(extcity1list.find( function (e) { return e.name.toLowerCase() == "минск"; } ).id);
	ExtCityRender();
}

function ExtRouteChange () {
	var extcity1list = [];
	
	extcity1list = extcitylist
		.select( function (e) { return routematrix.find( function (e2) { return e2.f == e.id; } ); } )
		.sort(sortextcitylist)
		.uniq(true);
		
	$("extcity1").setValue(extcity1list.find( function (e) { return e.name.toLowerCase() == "минск"; } ).id);
	ExtCityRender();
}

function ExtCityRender () {
	var 
		extcity2list = [], 
		to = [], 
		routematrixallowed = [], 
		route = [], 
		extrouteitems, 
		value = $("extcity1").getValue(), 
		extprice;
	
	if (value != "") {
		routematrixallowed = routematrix
			.select( function (e) { return e.f == value; } );
		
		to = routematrixallowed
			.pluck("t");
		route = routematrixallowed
			.pluck("r").uniq();
		
		extcity2list = to
			.collect( function (e) { return extcitylist.find( function (e2) { return e2.id == e; } ); } )
			.sort(sortextcitylist)
			.uniq(true);
	}
	
	$("extcity2").replaceBySelect(extcity2list, {id: "extcity2", name: "extcity2"});
	$("extcity2")
		.observe("keyup", ExtRouteRender)
		.observe("change", ExtRouteRender);
		
	$("extroutelist").select("p").invoke("hide").invoke("removeClassName", "selected");
	
	$("extstoplist").hide();
	
	if (extprice = $("extprice")) {
		extprice.clear();
	}
	
	$("extorder").hide();
	
	$("extpriceadult").clear();
	$("extpricechild").clear();
	$("extpricespecial").clear();
}

function ExtRouteRender (value2) {
	var routematrixallowed = [], route = [], value1 = $("extcity1").getValue(), value2 = $("extcity2").getValue();
	
	if (value1 != "" && value2 != "") {
		routematrixallowed = routematrix
			.select( function (e) { return e.f == value1 && e.t == value2; } );
		
		route = routematrixallowed
			.pluck("r")
			.uniq();
	}

	$("extroutelist").select("p").each( function (e) {
		var id = Number(e.id.match(/extrouteitem_(\d+)/)[1]);
		e[route.include(id) ? "show" : "hide"]().removeClassName("selected");
	});
	
	$("extstoplist").hide();
	
	if (extprice = $("extprice")) {
		extprice.clear();
	}
	
	$("extorder").hide();
	
	$("extpriceadult").clear();
	$("extpricechild").clear();
	$("extpricespecial").clear();
}

function ShowExtStopList (ev) {
	
	var src = this;
	
	var 
		id = Number(src.up("p").id.match(/extrouteitem_(\d+)/)[1]), 
		city1 = Number($("extcity1").getValue()), 
		city2 = Number($("extcity2").getValue()), 
		extbusticket = $("extbusticket"),
		type = Number(extbusticket.getInputs("radio", "extroutetype").find( function(e) { return e.checked; } ).value),
		change, 
		extpriceadult = $("extpriceadult"), 
		extpricechild = $("extpricechild"), 
		extpricespecial = $("extpricespecial"), 
		extprice, 
		extstoplist = $("extstoplist"), 
		extorder = $("extorder"), 
		extdateofreturnrow = $("extdateofreturnrow"),
		priceadult = new Number, 
		pricechild = new Number, 
		pricespecial = new Number;
		
	extstoplist.hide();
	extorder.hide();
	
	new Ajax.Request(siteAjax + "?ajax=getextstoplist&id=" + id + "&city1=" + city1 + "&city2=" + city2, {
		element: src,
		method: "get",
		onSuccess: function (xhr) {
			var result = xhr.responseText;
			extstoplist.show().update(result);
			$("extroutelist").select("p").invoke("removeClassName", "selected");
			src.up("p").addClassName("selected");
			
			change = Number($("extchange").getValue());
			eval("extprice = " + $("extprice").getValue() + ";");
			
			if (!change) {
				if (type == 1) {
					priceadult = extprice.priceAdultThere;
					pricechild = extprice.priceChildThere;
					pricespecial = extprice.priceSpecialThere;
				} else if (type == 2) {
					priceadult = extprice.priceAdultThereandback;
					pricechild = extprice.priceChildThereandback;
					pricespecial = extprice.priceSpecialThereandback;
				}
			} else {
				if (type == 1) {
					priceadult = extprice.priceAdultThereChange;
					pricechild = extprice.priceChildThereChange;
					pricespecial = extprice.priceSpecialThereChange;
				} else if (type == 2) {
					priceadult = extprice.priceAdultThereandbackChange;
					pricechild = extprice.priceChildThereandbackChange;
					pricespecial = extprice.priceSpecialThereandbackChange;
				}
			}
			
			extpriceadult.setValue(priceadult).next("span").update("(цена <strong>" + priceadult + " &#8364;</strong> за 1 шт.)");
			extpricechild.setValue(pricechild).next("span").update("(цена <strong>" + pricechild + " &#8364;</strong> за 1 шт.)");
			extpricespecial.setValue(pricespecial).next("span").update("(цена <strong>" + pricespecial + " &#8364;</strong> за 1 шт.)");
			
			$("extroutefinalspan").update($("extroutefinal").getValue());
			
			switch (type) {
				case 1:
					$("extdateofreturn").unsetValidator("valRequired");
					extdateofreturnrow.hide();
				break;
				
				case 2:
					$("extdateofreturn").setValidator("valRequired");
					extdateofreturnrow.show();
				break;
			}
			
			extorder.show();
		}
	});
}

