﻿this.ascent = this.ascent || {};
this.ascent.cms = this.ascent.cms || {};
this.ascent.cms.widgets = this.ascent.cms.widgets || {};
this.ascent.cms.widgets.pricesearch = this.ascent.cms.widgets.pricesearch || {};
this.ascent.cms.widgets.pricesearch.exTourSearch = this.ascent.cms.widgets.pricesearch.exTourSearch || {};

if (!this.ascent.cms.widgets.pricesearch.exTourSearch.generateToursTable) {
    this.ascent.cms.widgets.pricesearch.exTourSearch.generateToursTable =
	function (searchItems, columnNames) {
	    var tableStr = "<table>";
	    var i = 0;
	    // если переданы columnNames, то вставляем в таблице секцию <thead></thead>
	    if (columnNames) {
	        tableStr += "<thead><tr>";
	        for (i = 0; i < columnNames.length; i++) {
	            tableStr += "<th>" + columnNames[i] + "</th>";
	        }
	        tableStr += "</tr></thead>";
	    }

	    // вставляем секцию <tbody></tbody>
	    tableStr += "<tbody>";
	    for (i = 0; i < searchItems.length; i++) {
	        var item = searchItems[i];


	        var simpleBasketHref = item.PriceUrl;
	        //+ '&date=' + searchItems[i].TourDateLong;

	        tableStr += "<tr>";
	        tableStr += "<td>" + item.Date + "</td>";
	        tableStr += "<td align='left'><a target='_blank' href='" + item.TourUrl + "'>" + item.TourName + "</a></td>";

	        tableStr += "<td>" + item.Nights + "</td>";
	        tableStr += "<td><a target='_blank' href='" + item.PriceUrl + "'>" + item.Price + "</a></td>"
	        if (item.DescriptionUrl) {
	            tableStr += "<td>"
					+ "<a target='_blank' href='" + item.DescriptionUrl + "'>"
						+ "<img src='/images/icons/word_big.png'>"
					+ "</a></td>";
	        }
	        else {
	            tableStr += "<td>" + "<img src='/images/icons/word_big_inactive.png'>" + "</td>";
	        }

	        tableStr += "</tr>";

	    }
	    tableStr += "</tbody></table>";

	    return tableStr;
	};
}


if (!this.ascent.cms.widgets.pricesearch.exTourSearch.initializeControls) {
    this.ascent.cms.widgets.pricesearch.exTourSearch.initializeControls =
    function ($, options) {
        var defaults =
		{
		    recordsPerPage: 40,
		    tableHeight: 300,
		    tableColumns:
			[
				{ name: "Дата заезда", width: 83 },
				{ name: "Название тура", width: 400 },
				{ name: "Ночи", width: 45 },
				{ name: "Цена тура", width: 120 },
				{ name: "Описание", width: 80 }
			],

		    departureCity: { Id: 1, Name: "Москва" },

		    nights: { begin: 4, end: 21, bottom: 7, top: 14 },
		    adults: { begin: 1, end: 10, selected: 2 },
		    children: { begin: 0, end: 10, selected: 0 },

		    notFound: "Поиск не дал результатов. Измените параметры и повторите попытку",

		    formText:
			{
			    country: { hintText: "Выберите страну", errorText: "К сожалению, на данный момент предложений в '%%' нет." },
			    resort: { hintText: "Выберите регион", errorText: "К сожалению, на данный момент предложений в '%%' нет." },
			    city: { hintText: "Выберите курорт", errorText: "К сожалению, на данный момент предложений в '%%' нет." },
			    stars: { hintText: "Выберите звездность", errorText: "К сожалению, на данный момент предложений в '%%' нет." },
			    tourType: { hintText: "Выберите тип тура", errorText: "К сожалению, на данный момент предложений с типом '%%' нет." }
			},

		    costHint: { color: "gray", text: "Опционально" }
		};

        var settings = $.extend(true, {}, defaults, options);

        var $container = options.container;

        var $form = $container.find("form");
        var $content = $(".content", $container);
        var $loading = $(".loading", $container).show();
        var $error = $(".error", $container).hide();

        // инициализируем поля формы соответствующими значениями
        var $content = $("div.content", $container);
        var $breadcrumbs = $("div.breadcrumbs", $container);
        var $loading = $("div.loading", $container).show();

        var $country = $container.find("[name='country']")
			.hintableSelect({ text: settings.formText.country.hintText })

        var $dateFrom = $container.find("[name='dateBegin']");
        var $dateTo = $container.find("[name='dateEnd']");

        var $nightsFrom = $container.find("[name='nightsFrom']");
        var $nightsTo = $container.find("[name='nightsTo']");

        var $adults = $container.find("[name='mainPlaces']");
        var $children = $container.find("[name='addPlaces']");

        var $cost = $container.find("[name='maxCost']");
        var $submit = $container.find(":button");

        for (i = settings.nights.begin; i <= settings.nights.end; i++) {
            if (i != settings.nights.begin) {
                $nightsTo.append($("<option value=" + i + (i == settings.nights.top ? " selected" : "") + ">" + i + "</option>"));
            }
            if (i != settings.nights.end) {
                $nightsFrom.append($("<option value=" + i + (i == settings.nights.bottom ? " selected" : "") + ">" + i + "</option>"));
            }
        }

        for (i = settings.adults.begin; i <= settings.adults.end; i++) {
            $adults.append($("<option value=" + i + (i == settings.adults.selected ? " selected" : "") + ">" + i + "</option>"));
        }

        for (i = settings.children.begin; i <= settings.children.end; i++) {
            $children.append($("<option value=" + i + (i == settings.children.selected ? " selected" : "") + ">" + i + "</option>"));
        }

        // ограничиваем возможность выбора пункта select#nightFrom только теми, что больше выбранного пункта в select#nightTo
        $nightsFrom.change(function () {
            var fromValue = $(this).val();
            var toValue = $nightsTo.val();
            var selectedChanged = false;
            $("option", $nightsTo).each(function (i, e) {
                if (parseInt(e.value) <= parseInt(fromValue)) {
                    e.disabled = true;
                }
                else {
                    if (!selectedChanged && parseInt(toValue) <= parseInt(fromValue)) {
                        selectedChanged = true;
                        e.selected = true;
                    }
                    e.disabled = false;
                }
            });
        });

        $dateFrom.val("").datepicker({
            minDate: $dateFrom.data("dates") ? $dateFrom.data("dates")[0] : new Date(),
            showAnim: 'fadeIn',
            beforeShowDay: function (date) {
                if ($.inArray(date.formatRussian(), $dateFrom.data("dates")) > -1) {
                    return [true, ''];
                }
                else {
                    return [false, ''];
                }
            },
            onSelect: function (str, date) {
                $dateTo.datepicker("setDate", str);
            }
        });

        $dateTo.val("").datepicker({
            minDate: $dateTo.data("dates") ? $dateTo.data("dates")[0] : new Date(),
            showAnim: 'fadeIn',
            // если dateFrom >= dateTo, то такая конечная дата становится неактивной
            beforeShowDay: function (date) {
                var dateFrom = $dateFrom.val().trim();

                if ($.inArray(date.formatRussian(), $dateTo.data("dates")) > -1) {
                    if (dateFrom !== "" && date >= dateFrom.constructDate()) {
                        return [true, ''];
                    }
                    else {
                        return [false, ''];
                    }
                }
                else {
                    return [false, ''];
                }
            }
        });

        $cost.hintableInput(settings.costHint);

        $form.ajaxError(function (e, xhr, settings, exception) {
            $error.text("Произошла ошибка Ajax").after($("<div>").text(xhr.responseText).hide()).show();
            $loading.hide();
        });

        $loading.show();

        // забираем список стран с сервера
        $.get(settings.ajaxUrls.getCountries, { _officeCode: settings.departureCity.Id, _tourType: 20 },
		function (data) {
		    var countries = data;
		    var optionsString = "";
		    for (var i in countries) {
		        optionsString += "<option value=" + countries[i] + ">" + i + "</option>";
		    }
		    $country.appendHint().append(optionsString).attr("disabled", false).attr("selectedIndex", 0);
		    $loading.hide();
		}, "json");

        $country.change(function () {
            $loading.show();
            var dateFromValue = $dateFrom.val();
            var dateToValue = $dateTo.val();
            $.get(settings.ajaxUrls.getDates, {
                _officeCode: settings.departureCity.Id,
                _countryCode: $country.val(),
                _tourType: 20
            }, function (dates) {
                if ($.isEmptyObject(dates)) {
                    $error.showSummary("Не найдено туров в эту страну. Попробуйте изменить параметры поиска и повторить попытку");
                }
                else {
                    $dateFrom
						.attr("disabled", false).data("dates", dates)
						.datepicker("option", "minDate", dates[0].constructDate());
                    // если начальная дата была выбрана
                    if (dateFromValue !== "") {
                        // проверяем, находится ли она в массиве новых
                        if ($.inArray(dateFromValue, dates) > -1) {
                            // устанавливаем ее
                            $dateFrom.datepicker("setDate", dateFromValue);
                        }
                        else {
                            // ищем в новом массиве (dates) самую ближайшую к старой дате снизу (<)
                            var newDateFromValue = $(dates).filter(function (i) { return this.constructDate() < dateFromValue.constructDate(); }).last()[0];
                            $dateFrom.datepicker("setDate", newDateFromValue);
                        }
                    }

                    $dateTo
						.attr("disabled", false).data("dates", dates)
						.datepicker("option", "minDate", dates[0].constructDate());
                    // если начальная дата была выбрана
                    if (dateToValue !== "") {
                        // проверяем, находится ли она в массиве новых
                        if ($.inArray(dateToValue, dates) >= 0) {
                            // устанавливаем ее
                            $dateTo.datepicker("setDate", dateToValue);
                        }
                        else {
                            // ищем в новом массиве (dates) самую ближайшую к старой дате сверху (>)
                            var newDateToValue = $(dates).filter(function (i) { return this.constructDate() > dateFromValue.constructDate(); }).first()[0];
                            $dateFrom.datepicker("setDate", newDateToValue);
                        }
                    }
                }
                $loading.hide();
            }, "json");
        });
        /*
        // пользователь нажал кнопку "отправить"
        $submit.click(function () {
            $error.hide();
            parameters = $form.serializeObject();
            if (parameters.country && parameters.dateBegin && parameters.dateEnd) {
                parameters.maxCost = parameters.maxCost == "Опционально" ? "" : parameters.maxCost;
                $loading.show();
                var searchFilter = $.extend(parameters, { office: settings.departureCity.Id });

                $.get(settings.ajaxUrls.getTours, { _filter: JSON.stringify(parameters), _page: 1, _itemsPerPage: settings.recordsPerPage },
        			function (response) {
        			    if (!response.Result) {
        			        $error.showSummary(response.Messages[""][0]);
        			    }
        			    else {

        			        $.fn.ingrid.generateSearchTable = ascent.cms.widgets.pricesearch.exTourSearch.generateToursTable;

        			        var totalRecords = response.Additional.ToursCount;
        			        var searchItems = response.Additional.Tours;

        			        if (searchItems.length == 0) {
        			            $error.showSummary(settings.notFound);
        			        }
        			        else {
        			            $content.empty().append($.fn.ingrid.generateSearchTable(searchItems,
        							$.map(settings.tableColumns, function (e, i) { return e.name; })));
        			            $("table", $content)
        						.ingrid(
        						{
        						    url: settings.ajaxUrls.getTours,
        						    dataType: "json",
        						    height: settings.tableHeight,
        						    colWidths: $.map(settings.tableColumns, function (e, i) { return e.width; }),
        						    extraParams: parameters,
        						    searchFilter: searchFilter,
        						    resizableCols: false,
        						    unsortableCols: [],
        						    rowSelection: false,
        						    recordsPerPage: settings.recordsPerPage,
        						    totalRecords: totalRecords,
        						    sorting: false,
        						    parametersStyle: "ex-tours"
        						});
        			        }
        			    }
        			    $loading.hide();
        			}, "json");
            }
            else {
                $("<h1>")
        			.attr("align", "center")
        			.text("Выберите все параметры повторите поиск")
        			.appendTo($content.empty());
            }

        });
        */

    }
}	
//	
//(function ($) {
//		
//		
//		
//	}

//})(jQuery);

