﻿function LoadingTextAndRemoveComboContent(comboDiv, loadingText) {
    var comboBoxes = comboDiv.getElementsByTagName("input");
    var divs = comboDiv.getElementsByTagName("div");
    var i = 0;
    for (i = 0; i < comboBoxes.length; i++) {
        if (comboBoxes[i].type = "text") {
            comboBoxes[i].value = loadingText;
            break;
        }
    }
    for (i = 0; i < divs.length; i++) {
        if (divs[i].id.indexOf("DivComboValues") != -1) {
            var ul = divs[i].getElementsByTagName("ul")[0];
            if (ul != undefined && ul != null) {
                ul.innerHTML = "";
            }
            break;
        }
    }
}

function GetSelectedParameters(searcherClientID) {
    var searcher = $get(searcherClientID);
    var inputs = searcher.getElementsByTagName('input');
    var selectedParams = "";
    var i = 0;
    for (i = 0; i < inputs.length; i++) {
        if (selectedParams.startsWith('!')) {
            return selectedParams;
        }
        if ((inputs[i].attributes["type"].value == "hidden") ||
        (inputs[i].attributes["valueinput"] != undefined && inputs[i].attributes["valueinput"] != null && inputs[i].attributes["valueinput"].value == "1") ||
        inputs[i].id.indexOf("TextBoxDateFrom") != -1 || inputs[i].id.indexOf("TextBoxDateTo") != -1) {
            var elementValue = inputs[i].value;
            if ((inputs[i].attributes["elementid"] != undefined && inputs[i].attributes["elementid"] != null)) {
                var elementID = inputs[i].attributes["elementid"].value;
                if (elementValue != "" || elementID == "TextBoxDateFrom" || elementID == "TextBoxDateTo" || elementID == "MultiSelectComboBoxTourTypes") {
                    switch (elementID) {
                        case "MultiSelectComboBoxCountry":
                            selectedParams += "country$" + elementValue + "#";
                            break;
                        case "MultiSelectComboBoxRegion":
                            selectedParams += "region$" + elementValue + "#";
                            break;
                        case "MultiSelectComboBoxLocality":
                            selectedParams += "locality$" + elementValue + "#";
                            break;
                        case "TextBoxDateFrom":
                            selectedParams += "dateFrom$" + elementValue + "#";
                            break;
                        case "TextBoxDateTo":
                            selectedParams += "dateTo$" + elementValue + "#";
                            break;
                        case "MultiSelectComboBoxDaysCount":
                            selectedParams += "days$" + elementValue + "#";
                            break;
                        case "MultiSelectComboBoxNightsCount":
                            selectedParams += "nights$" + elementValue + "#";
                            break;
                        case "MultiSelectComboBoxCategory":
                            selectedParams += "category$" + elementValue + "#";
                            break;
                        case "MultiSelectComboBoxBoardType":
                            selectedParams += "board$" + elementValue + "#";
                            break;
                        case "MultiSelectComboBoxTransportType":
                            selectedParams += "transport$" + elementValue + "#";
                            break;
                        case "NiceTextBoxPriceFrom":
                            selectedParams += "priceFrom$" + elementValue + "#";
                            break;
                        case "NiceTextBoxPriceTo":
                            selectedParams += "priceTo$" + elementValue + "#";
                            break;
                        case "MultiSelectComboBoxPrice":
                            selectedParams += "priceRange$" + elementValue + "#";
                            break;
                        case "MultiSelectComboBoxAirports":
                            selectedParams += "airports$" + elementValue + "#";
                            break;
                        case "MultiSelectComboBoxTourType":
                            selectedParams += "tourTypes$" + elementValue + "#";
                            break;
                        case "ImageCheckBoxOnlyLastMinute":
                            selectedParams += "lastMinute$" + elementValue + "#";
                            break;
                        case "NiceTextBoxHotel":
                            selectedParams += "hotel$" + elementValue + "#";
                            break;
                        case "NiceTextBoxAction":
                            selectedParams += "action$" + elementValue + "#";
                            break;
                    }
                }
            }
        }
    }

    return selectedParams.substring(0, selectedParams.length - 1);
}

function SearcherChanged(searcherClientID, geographyChnage, searcherID) {
    if (geographyChnage == "all") {
        var localityCombo = $get('DivSearcherLocalityCombo');
        var regionCombo = $get('DivSearcherRegionCombo');
        var countryCombo = $get('DivSearcherCountryCombo');
        if (typeof (localityCombo) != "undefined" && localityCombo != null) {
            LoadingTextAndRemoveComboContent(localityCombo, "Nahrávám...");
        }
        if (typeof (regionCombo) != "undefined" && regionCombo != null) {
            LoadingTextAndRemoveComboContent(regionCombo, "Nahrávám...");
        }
        if (typeof (countryCombo) != "undefined" && countryCombo != null) {
            LoadingTextAndRemoveComboContent(countryCombo, "Nahrávám...");
        }
    }
    var selectedParams = GetSelectedParameters(searcherClientID);
    if (!selectedParams.startsWith('!')) {
        Booking.WebUserControls.SearcherService.UpdateSearcherData(selectedParams, geographyChnage, $get(SearcherId_prefix + 'HiddenFieldTourType').value, searcherClientID, searcherID, SearcherSucc, SearcherErr);
        var loader = $get(SearcherId_prefix + 'ButtonContainerSearch_ImageSearcherLoader');
        if (loader != null) {
            loader.style.display = '';
            var toursCount = $get(SearcherId_prefix + 'ButtonContainerSearch_ButtonSearch');
            toursCount.style.display = "none";
        }
    }
    else {
        //alert(selectedParams.substring(1, selectedParams.length));
    }
}


function SearcherSucc(result) {
    var loader = $get(SearcherId_prefix + 'ButtonContainerSearch_ImageSearcherLoader');
    if (loader != null) {
        loader.style.display = 'none';
        var toursCount = $get(SearcherId_prefix + 'ButtonContainerSearch_ButtonSearch');
        toursCount.value = 'Zobrazit všech ' + result.ToursCount + ' nalezných nabídek';
        toursCount.style.display = "";
    }
    if (result.LocalityCombo != undefined && result.LocalityCombo != null && result.LocalityCombo != "") {
        var localityCombo = $get('DivSearcherLocalityCombo');
        if (typeof (localityCombo) != "undefined" && localityCombo != null) {
            localityCombo.innerHTML = "";
            localityCombo.innerHTML = result.LocalityCombo;
        }
    }
//    if (result.RegionCombo != undefined && result.RegionCombo != null && result.RegionCombo != "") {
//        var regionCombo = $get('DivSearcherRegionCombo');
//        if (typeof (regionCombo) != "undefined" && regionCombo != null) {
//            regionCombo.innerHTML = "";
//            regionCombo.innerHTML = result.RegionCombo;
//        }
//    }
    if (result.CountryCombo != undefined && result.LocalityCombo != null && result.LocalityCombo != "") {
        var countryCombo = $get('DivSearcherCountryCombo');
        if (typeof (countryCombo) != "undefined" && countryCombo != null) {
            countryCombo.innerHTML = "";
            countryCombo.innerHTML = result.CountryCombo;
        }
    }
}

function SearcherErr(error) {
}

function Search(searcherClientID) {
    var initSearch = $get(SearcherId_prefix + 'HiddenFieldInitSearch').value;
    var onlySearcherOnPage = $get(SearcherId_prefix + 'HiddenFieldOnlySearcherOnPage').value;
    var selectedParams = "";
    if (initSearch == "1") {
        selectedParams = "init$init";
        $get(SearcherId_prefix + 'HiddenFieldInitSearch').value = "";
    }
    else {
        selectedParams = GetSelectedParameters(searcherClientID);
    }
    if (!selectedParams.startsWith('!')) {
        var selectedPersons = "";
        var personsDiv = $get('DivSearcherPersons');
        if (personsDiv != null) {
            var inputs = personsDiv.getElementsByTagName("input");
            var i = 0;
            for (i = 0; i < inputs.length; i++) {
                if (inputs[i].type == "hidden" && inputs[i].id.indexOf('HiddenFieldSelectedPersons') != -1) {
                    selectedPersons = inputs[i].value;
                    break;
                }
            }
        }
        else {
            selectedPersons = "18,18";
        }
        var tourType = $get(SearcherId_prefix + 'HiddenFieldTourType').value;
        //save tourType for paging
        $get(SearcherId_prefix + 'HiddenFieldSelectedTourType').value = tourType;
        //save persons for paging
        $get(SearcherId_prefix + 'HiddenFieldSelectedPersons').value = selectedPersons;
        //save params for paging
        $get(SearcherId_prefix + 'HiddenFieldSelectedParams').value = selectedParams;

        //show loader
        var loader = $get('div_loader_searcher');
        var inactiveDiv = document.body;
        var searchResultDiv = $get('DivSearcherResultContainer');
        if (searchResultDiv != undefined && searchResultDiv != null) {
            RemoveAllTermsDivs(searchResultDiv.parentNode);
            HideAllTermsDivs(searchResultDiv.parentNode.id);
        }
        ShowObjectAndInactiveBackground(inactiveDiv, inactiveDiv, loader, "Inactive", "shadowDiv12xc21x24d21sss");

        if (SearcherActualPage == null) {
            SearcherActualPage = 1;
        }

        Booking.WebUserControls.SearcherService.GetSearchResult(selectedParams, tourType, selectedPersons, SearcherActualPage, "", "", SearcherResultType, onlySearcherOnPage, SearchResultSucc, SearchResultErr);
        SearcherActualPage = null;
    }
    else {
        alert(selectedParams.substring(1, selectedParams.length));
    }
}

function SearchResultSucc(result) {
    if (result != undefined && result != null && result != "") {
        if (result.startsWith('<')) {
            var searchResultDiv = $get('DivSearcherResultContainer');
            searchResultDiv.innerHTML = "";
            searchResultDiv.innerHTML = result;
            //hide loader
            var loader = $get('div_loader_searcher');
            var inactiveDiv = document.body;
            HideObjectAndActiveBackground(inactiveDiv, loader, "shadowDiv12xc21x24d21sss");
        }
        else {
            window.location = result;
        }
    }
    else {
        //hide loader
        var loader = $get('div_loader_searcher');
        var inactiveDiv = document.body;
        HideObjectAndActiveBackground(inactiveDiv, loader, "shadowDiv12xc21x24d21sss");
    }
}

function SearchResultErr(error) {
    //hide loader
    var loader = $get('div_loader_searcher');
    var inactiveDiv = document.body;
    HideObjectAndActiveBackground(inactiveDiv, loader, "shadowDiv12xc21x24d21sss");
}

function IsDate(txtDate) {
    var objDate,  // date object initialized from the txtDate string  
            mSeconds, // txtDate in milliseconds  
            day,      // day  
            month,    // month  
           year;     // year  
    // extract month, day and year from the txtDate (expected format is mm/dd/yyyy)  
    // subtraction will cast variables to integer implicitly  
    day = txtDate.substring(0, txtDate.indexOf(".")) - 0; // because months in JS start from 0
    txtDate = txtDate.replace(txtDate.substring(0, txtDate.indexOf(".") + 1), '');
    month = txtDate.substring(0, txtDate.indexOf(".")) -1;
    txtDate = txtDate.replace(txtDate.substring(0, txtDate.indexOf(".") + 1), '');
    year = txtDate.substring(0, txtDate.length ) - 0;
    // test year range  
    if (year < 1000 || year > 3000) {
        return false;
    }
    // convert txtDate to milliseconds  
    mSeconds = (new Date(year, month, day)).getTime();
    // initialize Date() object from calculated milliseconds  
    objDate = new Date();
    objDate.setTime(mSeconds);
    // compare input date and parts from Date() object  
    // if difference exists then date isn't valid  
    if (objDate.getFullYear() !== year ||
         objDate.getMonth() !== month ||
           objDate.getDate() !== day) {
        return false;
    }
    // otherwise return true  
    return true;
}
