var MonthName = ['января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря'];
var ObjectFocus = null;

function GetValue(id)
{
	var Result;
	var obj = document.getElementById(id);
	
	if (obj != null)
		switch(obj.type)
		{
			case 'text':
			case 'hidden':
				Result = obj.value;
				break;

			case 'radio':
			case 'checkbox':
				Result = obj.checked;
				break;

			case 'select-one':
				Result = obj.options[obj.selectedIndex].value;
				break;
		}

	return Result;	

}

function SetValue(id, value)
{

	var obj = document.getElementById(id);


	if (obj != null)
	{
		switch(obj.type)
		{
			case 'text':
			case 'hidden':
				obj.value = value;
				return;

			case 'radio':
			case 'checkbox':
				obj.checked = value;
				return;

			case 'select-one':
				obj.selectedIndex = value;
				return;
		}

		if (obj.innerHTML)
			obj.innerHTML = value;
	}

}

function Date2Str(date)
{
	return (date.getDate() < 10 ? '0' : '') + date.getDate() + '.' +
		(date.getMonth() < 9 ? '0' : '') + (date.getMonth()+1) + '.' +
		date.getFullYear();
}

function Str2Date(str)
{
	var DateParts = str.split('.');
	return (DateParts.length == 3 ? new Date(DateParts[2], DateParts[1] - 1, DateParts[0]) : null);

}

function SetObjectFocus()
{
	ValidateForm();
	if (ObjectFocus) ObjectFocus.focus();
}

function SetObjectVisibility(id, value)
{
	var obj = document.getElementById(id);
	obj.style.display = value ? '' : 'none';
}

function ShowError(id, ErrorText, ErrorStatus)
{
	var obj = document.getElementById(id);
	obj.innerHTML = ErrorStatus ? '<img src="images/validatorerror.gif" title="' + ErrorText + '">' : '';
	return ErrorStatus;
}

function InitCityList(id, dictionary, value)
{

	var obj = document.getElementById(id);

	if (obj)
	{
		obj.options.length = 0;
		obj.options[0] = new Option('', '');
		for(key in dictionary)
		{
			obj.options[obj.options.length] = new Option(dictionary[key][0], key);
 			obj.options[obj.options.length - 1].selected = (key == value);
		}
	}

}

function ValidateForm(disablecheckcity)
{
	var Error = false;

	var FlightType = GetValue('FlightType');
	SetObjectVisibility('tdArrivalDate', FlightType == 'TWO.WAYS');

	if (!disablecheckcity)
	{

		var DepartureCode = '';
		var DepartureName = GetValue('Departure').toLowerCase();
		for(var i = 0; i < CityNameRus.length; i++)
			if (CityNameRus[i].toLowerCase() == DepartureName)
			{
				DepartureCode = CityCode[i];
				SetValue('Departure_0', DepartureCode);
				DepartureName =  CityNameRus[i];
				SetValue('Departure', DepartureName);
			}
	
		Error = ShowError('DepartureValidator', 'Не указан город отправления', DepartureName.length == 0) || Error;
		if (DepartureName.length > 0)
			Error = ShowError('DepartureValidator', 'Указан неверный город отправления \'' + DepartureName + '\'', DepartureCode.length == 0) || Error;
	
		var ArrivalCode = '';
		var ArrivalName = GetValue('Arrival').toLowerCase();
		for(var i = 0; i < CityNameRus.length; i++)
			if (CityNameRus[i].toLowerCase() == ArrivalName)
			{
				ArrivalCode = CityCode[i];
				SetValue('Arrival_0', ArrivalCode);
				ArrivalName =  CityNameRus[i];
				SetValue('Arrival', ArrivalName);
			}
	}
	
	Error = ShowError('ArrivalValidator', 'Не указан город назначения', ArrivalName.length == 0) || Error;
	if (ArrivalName.length > 0)
		Error = ShowError('ArrivalValidator', 'Указан неверный город назначения \'' + ArrivalName + '\'', ArrivalCode.length == 0) || Error;

	var DepartureDate = GetValue('DepartureDate');
	Error = ShowError('DepartureDateValidator', 'Не указана дата вылета', Str2Date(DepartureDate) == null) || Error;

	var ArrivalDate = GetValue('ArrivalDate');
	Error = ShowError('ArrivalDateValidator', 'Не указана дата обратного вылета', Str2Date(ArrivalDate) == null) || Error;

	var AdultQuantity = parseInt(GetValue('adult')) || 0;
	var ChildQuantity = parseInt(GetValue('child')) || 0;
	var BabyQuantity = parseInt(GetValue('baby')) || 0;

	Error = ShowError('PlaceValidator', 'Общее число пассажиров с местами включая взрослых и детей не должно превышать пяти', AdultQuantity + ChildQuantity > 5) || Error;
	Error = ShowError('NoPlaceValidator', 'Количество младенцев на руках (без места) не может превышать числа пассажиров с местами', BabyQuantity > AdultQuantity + ChildQuantity) || Error;

	var NotStay = GetValue('NotStay');
	SetValue('NotStayHidden', NotStay != null && NotStay)

	var ReturnedTicket = GetValue('ReturnedTicket');
	SetValue('ReturnedTicketHidden', ReturnedTicket != null && ReturnedTicket)

	var SubmitButton = document.getElementById('SubmitButton');
	SubmitButton.disabled = Error;

	return (!Error);

}

function Init()
{

	$("#Departure").autocompleteArray(CityNameRus, {
		delay:          10,
		minChars:       1,
		matchSubset:    1,
		autoFill:       true,
		maxItemsToShow: 10,
		onItemSelect: SetObjectFocus
	});

	$("#Arrival").autocompleteArray(CityNameRus, {
		delay:          10,
		minChars:       1,
		matchSubset:    1,
		autoFill:       true,
		maxItemsToShow: 10,
		onItemSelect: SetObjectFocus
	});


	SetValue('DepartureValidator', '');

	SetValue('ArrivalValidator', '');


	var date = new Date();

	date.setDate(date.getDate() + 2);
	SetValue('DepartureDate', Date2Str(date));

	date.setDate(date.getDate() + 7);
	SetValue('ArrivalDate', Date2Str(date));

	Calendar.setup({ inputField: "DepartureDate", ifFormat: "%d.%m.%Y", button: "DepartureDateButton", singleClick: true });
	Calendar.setup({ inputField: "ArrivalDate", ifFormat: "%d.%m.%Y", button: "ArrivalDateButton", singleClick: true });

	ValidateForm();

}
