﻿
var RpSearchFormManager = (function ($) {

    return {

        setAutocompleteControl: function (v) {
            RpSearchFormManager.autoCompleteControl = v;
        },

        getAutocompleteControl: function () {
            return typeof RpSearchFormManager.autoCompleteControl == 'undefined' ? null : RpSearchFormManager.autoCompleteControl;
        },

        setFormPresettingsMode: function (v) {
            RpSearchFormManager.presettingsMode = v;
        },

        isFormPresettingsMode: function () {
            return typeof RpSearchFormManager.presettingsMode == 'undefined' ? false : RpSearchFormManager.presettingsMode;
        },

        setLastRequestNumber: function (v) {
            RpSearchFormManager.lastRequestNumber = v;
        },

        getLastRequestNumber: function () {
            return typeof RpSearchFormManager.lastRequestNumber == 'undefined' ? 0 : RpSearchFormManager.lastRequestNumber;
        },

        setLastResponseContainer: function (v) {
            RpSearchFormManager.lastResponse = v;
        },

        getLastResponseContainer: function () {
            return typeof RpSearchFormManager.lastResponse == 'undefined' ? null : RpSearchFormManager.lastResponse;
        },

        setParams: function (v) {
            RpSearchFormManager.params = v;
        },

        getParams: function () {
            return typeof RpSearchFormManager.params == 'undefined' ? null : RpSearchFormManager.params;
        },
        setFormPostTimerId: function (v) {
            RpSearchFormManager.formPostTimerId = v;
        },

        getFormPostTimerId: function () {
            return typeof RpSearchFormManager.formPostTimerId == 'undefined' ? null : RpSearchFormManager.formPostTimerId;
        },

        setFormControlStates: function (v) {
            RpSearchFormManager.formControlStates = v;
        },

        getFormControlStates: function () {
            return typeof RpSearchFormManager.formControlStates == 'undefined' ? null : RpSearchFormManager.formControlStates;
        },

        updateFormControlStates: function () {
            var areas = $j('#form-search-rp-fields, .search-form-part.form-fake');
            var keysToIgnore = [];
            var storage = ControlSettingsSaver.saveControlSettingsToStorage(areas, keysToIgnore, null);
            RpSearchFormManager.setFormControlStates(storage);
        },

        setCurrentPopupedRpId: function (v) {
            RpSearchFormManager.currentPopupedRpId = v;
        },

        getCurrentPopupedRpId: function () {
            return typeof RpSearchFormManager.currentPopupedRpId == 'undefined' ? null : RpSearchFormManager.currentPopupedRpId;
        },

        /*
        searchResponseContainer.RenderingStuff
        searchResponseContainer.ResponseNumber
        */
        initialize: function (params, formStorage, searchResponseContainer) {
            SearchFormSaver.initialize();
            AccGroupsInList.initialize();
            RpSearchRenderer.initialize();
            RpSearchFormManager.setParams(params);
            RpSearchFormManager.drawExtendedUserControls();
            RpSearchFormManager.setFormPresettingsMode(true);
            SearchFormSaver.loadSearchFormFromStorage(formStorage);
            RpSearchFormManager.setFormPresettingsMode(false);
            RpSearchFormManager.updateFormControlStates(); //to save states to prevent data reloading on select clicking for example
            RpSearchFormManager.bindFormChangeListeners();

            RpSearchFormManager.setLastResponseContainer(searchResponseContainer);
            RpSearchFormManager.adjustPriceSliderSettingsIfAny(RpSearchFormManager.getLastResponseContainer().AdjustedMaxPrice);
            RpSearchRenderer.renderSearchResults(searchResponseContainer);
        },

        onHashChanged: function (hash) {
            var paramsExtractingResult = RpSearchFormManager.tryToExtractStartupPopupParameters(hash);
            if (paramsExtractingResult.RpId > 0) {
                if (RpSearchFormManager.getCurrentPopupedRpId() == null || RpSearchFormManager.getCurrentPopupedRpId() != paramsExtractingResult.RpId) {
                    var btnSelect = $j('#res-list .ag a[id^="btn-book-rp-' + paramsExtractingResult.RpId + '-ag-"]'); //try to find select button in the search results
                    RpSearchFormManager.openRpPopup(btnSelect, paramsExtractingResult.RpId, paramsExtractingResult.CheckInDate, paramsExtractingResult.CheckOutDate, paramsExtractingResult.Guests, paramsExtractingResult.TabNumber);
                } else {
                    //popup with selected property is already opened - let's reswitch tab if any
                    var actTabNumb = RpPopupPage.getActiveTabNumber();
                    if (actTabNumb != 0 && actTabNumb != paramsExtractingResult.TabNumber) {
                        RpPopupPage.showTabByNumber(paramsExtractingResult.TabNumber);
                    }
                }
            } else {
                if (hash.length > 0 && hash[0] == '#') {
                    hash = hash.substring(1);
                }
                if ($j.trim(hash).length == 0) {
                    $j.fancybox.close();
                }
            }
        },

        onTabClick: function (menuItem, tab) {
            RpPopupPage.onTabClick(menuItem, tab);
            var activeTabNumber = RpPopupPage.getActiveTabNumber();
            var strShortCheckInDate = RpPopupPage.getShortStrCheckInDate() != null ? RpPopupPage.getShortStrCheckInDate() : '';
            var strShortCheckOutDate = RpPopupPage.getShortStrCheckOutDate() != null ? RpPopupPage.getShortStrCheckOutDate() : '';
            var numberOfPersons = RpPopupPage.getNumberOfPersons() != null ? RpPopupPage.getNumberOfPersons() : 0;
            RpSearchFormManager.setHash(RpSearchFormManager.formatPopupHash(RpPopupPage.getRp().Id, RpPopupPage.getRp().HashTagUrl, strShortCheckInDate, strShortCheckOutDate, numberOfPersons, activeTabNumber));
        },

        tryToExtractStartupPopupParameters: function (paramsStr) { //NOTE: if changed here, change in SearchController.GetPopupStartupParameters

            var res = { RpId: 0, CheckInDate: '', CheckOutDate: '', Guests: 0, TabNumber: 1 };
            var ind;

            var s = paramsStr;
            if (s.length > 0 && s[0] == '#') {
                s = s.substring(1);
            }
            if (s.length > 0 && s[0] == '!') {
                s = s.substring(1);
            }

            if (paramsStr.length > 0) {
                var qInd = s.indexOf('?');
                if (qInd != -1) {
                  var additionalParamsStr;
                  additionalParamsStr = s.substring(qInd + 1);
                  s = s.substring(0, qInd);
                  res.CheckInDate = TB.getParam('CheckInDate', additionalParamsStr);
                  res.CheckOutDate = TB.getParam('CheckOutDate', additionalParamsStr);
                  res.Guests = TB.getParam('Guests', additionalParamsStr);
                }

                var items = s.split('/');
                var paramVal;
                paramVal = RpSearchFormManager.tryToExtractPopupStartupParam(items, 1);
                if (paramVal != '') {
                    res.RpId = parseInt(paramVal);
                    if (isNaN(res.RpId)) {
                        res.RpId = 0;
                    }
                }

                //let's assume that param string is: #!Roko-sodyba/1231/Bendra-informacija/2
                paramVal = parseInt(RpSearchFormManager.tryToExtractPopupStartupParam(items, 3));
                if (!isNaN(paramVal)) {
                    res.TabNumber = paramVal;
                }
            }
            return res;
        },

        tryToExtractPopupStartupParam: function (items, paramIndex) {
            var res = '';
            if (paramIndex < items.length) {
                res = items[paramIndex];
            }
            return res;
        },

        bindFormChangeListeners: function () {

            $j('#form-search-rp input#date-from, #form-search-rp input#date-to, .search-form-part input#search-input').live("change", function () {
                if ($j(this).val() != RpSearchFormManager.getFormControlStates()[ControlSettingsSaver.getElementKey(this)]) {
                    RpSearchFormManager.onFormChange();
                }
            });

            $j('#form-search-rp select[name="NumberOfPersons"], #form-search-rp select[name="SortBy"], #form-search-rp select[name="RegionId"]').live("click change select", function () {
                if ($j(this).val() != RpSearchFormManager.getFormControlStates()[ControlSettingsSaver.getElementKey(this)]) {
                    RpSearchFormManager.onFormChange();
                }
            });

            $j('#form-search-rp select[name="SuperregionId"]').live("click change select", function () {
                if ($j(this).val() != RpSearchFormManager.getFormControlStates()[ControlSettingsSaver.getElementKey(this)]) {
                    RpSearchFormManager.onSuperregionChanged(this);
                    RpSearchFormManager.onFormChange();
                }
            });

            $j('#form-search-rp input[name="RpType"]').live("click", function () {
                RpSearchFormManager.onFormChange();
            });

            $j('#amenities-search-form input:checkbox').live("click", function () {
                RpSearchFormManager.onFormChange();
            });

            $j("#form-search-rp #double-slider-price").slider({
                change:
              function (e, ui) {
                  RpSearchFormManager.updatePriceSliderOutputLabels($j(this).closest('.row'));
                  RpSearchFormManager.onFormChange();
              }
            });

            $j('.clear-filter-settings').live('click', function () {
                RpSearchFormManager.clearFilterSettings();
                RpSearchFormManager.onFormChange();
            });

            RpSearchFormManager.getAutocompleteControl().setOptions({
                onSelect: function (value, data) {
                    var $searchInput = $j('.search-form-part input#search-input');
                    if ($searchInput.val() != RpSearchFormManager.getFormControlStates()[ControlSettingsSaver.getElementKey($searchInput)]) {
                        RpSearchFormManager.onFormChange();
                    }
                }
            });


        },

        onFormChange: function () {
            RpSearchFormManager.updateFormControlStates();
            var requestDelay = 500;
            if (TB.xorOp($j.trim($j('#form-search-rp form input[name="CheckInDate"]').val()).length == 0, $j.trim($j('#form-search-rp form input[name="CheckOutDate"]').val()).length == 0)) {
                RpSearchRenderer.clearResultArea();
                RpSearchRenderer.addSelectCheckInAndCheckOutDatesLabel();
            } else {
                if (!RpSearchFormManager.isFormPresettingsMode()) {
                    RpSearchRenderer.clearResultArea();
                    RpSearchRenderer.addSpinner();
                    if (RpSearchFormManager.getFormPostTimerId() != null) {
                        clearTimeout(RpSearchFormManager.getFormPostTimerId());
                    }
                    var timerId = setTimeout(function () {
                        SearchFormSaver.saveSearchFormToCookie();
                        RpSearchFormManager.sendSearchRequest();
                    }, requestDelay);
                    RpSearchFormManager.setFormPostTimerId(timerId);
                }
            }
        },

        sendSearchRequest: function (pageNumber) {
            if (typeof pageNumber == 'undefined') pageNumber = 1;
            RpSearchFormManager.setLastRequestNumber(RpSearchFormManager.getLastRequestNumber() + 1);
            var formStorage = SearchFormSaver.saveSearchFormToStorage();
            requestData = { ActionType: 'SearchRentalProperties', RequestNumber: RpSearchFormManager.getLastRequestNumber(), FormStorage: $j.toJSON(formStorage) };
            if (typeof pageNumber !== 'undefined') {
                $j.extend(requestData, { PageNumber: pageNumber });
            }
            jQuery.ajax({
                type: 'POST',
                url: TB.resources['Core.UrlPrefix'] + '/booking/search/',
                data: requestData,
                error: function (jqXHR, textStatus, errorThrown) {
                    jQuery('#res-list').html(TB.resources['Messages.Rp_Srch_Search_Stopped']);
                },
                success: function (searchResponseContainer) {
                    if (searchResponseContainer.ResponseNumber == RpSearchFormManager.getLastRequestNumber()) {
                        RpSearchFormManager.setLastResponseContainer(searchResponseContainer);
                        RpSearchFormManager.adjustPriceSliderSettingsIfAny(RpSearchFormManager.getLastResponseContainer().AdjustedMaxPrice);
                        RpSearchRenderer.renderSearchResults(searchResponseContainer);
                    }
                }
            });
        },

        adjustPriceSliderSettingsIfAny: function (newMaxPrice) {
            var $doubleSlider = $j('#double-slider-price');
            var currMaxPrice = $doubleSlider.slider('option', 'max');
            var values = $doubleSlider.slider('option', 'values');
            if (values[1] > newMaxPrice || values[1] == currMaxPrice) {
                values[1] = newMaxPrice;
            }
            if (values[0] > newMaxPrice) {
                values[0] = newMaxPrice;
            }
            var prevIsPresettingsMode = RpSearchFormManager.isFormPresettingsMode();
            RpSearchFormManager.setFormPresettingsMode(true);
            $doubleSlider.slider('option', 'max', newMaxPrice).slider('values', values);
            RpSearchFormManager.setFormPresettingsMode(prevIsPresettingsMode);
        },

        clearFilterSettings: function () {
            var $form = $j('.search-form-part'),
          maxPrice = 10000, //just default - it will be adjusted after response receiving
          now = new Date(),
          fromDate,
          toDate;

            RpSearchFormManager.setFormPresettingsMode(true);
            $j('select, input[type="text"]:visible', $form).val('');
            RpSearchFormManager.updateSubregionsSelect(0);

            $j('input#date-from', $form).val('');
            $j('input#date-to', $form).val('');

            $j('input#date-from-hidden', $form).val('');
            $j('input#date-to-hidden', $form).val('');
            $j(':checkbox[name="RpType"]', $form).attr('checked', false);
            $j('#double-slider-price', $form).slider('option', 'max', maxPrice).slider('values', [0, maxPrice]);
            $j('#amenities-search-form :checkbox').attr('checked', false);
            RpSearchFormManager.setFormPresettingsMode(false);
        },

        showMoreOnClick: function (pageNumber) {
            RpSearchRenderer.removeClearFilterSettingsButton(); //if exists
            RpSearchRenderer.removeShowMoreButton();
            RpSearchRenderer.addSmallSpinner();
            RpSearchFormManager.sendSearchRequest(pageNumber);
        },

        drawExtendedUserControls: function () {
            PairedDatePicker2.bindPairedDatePickers('date-from', 'date-to', TB.resources['Core.LanguageCode'], TB.resources['Core.ShortDateFormatStringJS'], RpSearchFormManager.getParams().MonthShortNames, RpSearchFormManager.customOnDatepickerSelect);
            var DEFAULT_MAX_PRICE = 10000;
            RpSearchFormManager.rebindPriceSlider(0, 10000, DEFAULT_MAX_PRICE); //default values
            //bind autocomplete control
            var options;
            options = {
                serviceUrl: TB.resources['Core.UrlPrefix'] + '/booking/search/retrieve-search-autocomplete-stuff/',
                minChars: 2,
                deferRequestBy: 500,
                width: 416,
                fnFormatResult: (function () {
                    var reEscape = new RegExp('(\\' + ['/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\'].join('|\\') + ')', 'g');
                    var patterns = [{ key: /ą|a/gi, value: '(ą|a)' }, { key: /č|c/gi, value: '(č|c)' }, { key: /ę|ė|e/gi, value: '(ę|ė|e)' }, { key: /į|i/gi, value: '(į|i)' }, { key: /š|s/gi, value: '(š|s)' }, { key: /ū|ų|u/gi, value: '(ū|ų|u)' }, { key: /ž|z/gi, value: '(ž|z)'}];
                    return function (value, data, currentValue) {
                        var pattern = '(' + currentValue.replace(reEscape, '\\$1') + ')';
                        $.each(patterns, function (i, el) {
                            pattern = pattern.replace(el.key, el.value);
                        });
                        return value.replace(new RegExp(pattern, 'gi'), '<strong>$1<\/strong>');
                    };
                } ())
            };
            RpSearchFormManager.setAutocompleteControl($j('#search-input').autocomplete(options));

        },

        customOnDatepickerSelect: function () {
            RpSearchFormManager.onFormChange();
        },

        rebindPriceSlider: function (currLowValue, currHighValue, maxValue) {
            $j("#form-search-rp #double-slider-price").slider({ range: true, min: 0, max: parseInt(maxValue), values: [parseInt(currLowValue), parseInt(currHighValue)],
                slide: function (event, ui) {
                    var $closestRow = $j(this).closest('.row');
                    var newLow = ui.values[0];
                    var newHigh = ui.values[1];
                    $closestRow.find('.value > .min-value').html(newLow);
                    $closestRow.find('.value > .max-value').html(newHigh);
                }
            });
            RpSearchFormManager.updatePriceSliderOutputLabels($j("#double-slider-price").closest('.row'));
        },

        setPriceSliderValues: function (lowValue, highValue, maxValue) {
            if (maxValue == null) maxValue = 10000; //default value
            if (highValue == null) highValue = maxValue;
            RpSearchFormManager.rebindPriceSlider(lowValue, highValue, maxValue);
        },

        updatePriceSliderOutputLabels: function ($closestRow) {
            $closestRow.find('.value > .min-value').html(RpSearchFormManager.getPriceSliderLowValue());
            $closestRow.find('.value > .max-value').html(RpSearchFormManager.getPriceSliderHighValue());
        },

        getPriceSliderLowValue: function () {
            return $j("#double-slider-price").slider("option", "values")[0];
        },

        getPriceSliderHighValue: function () {
            return $j("#double-slider-price").slider("option", "values")[1];
        },

        onMoreOptionsClick: function () {
            isHidden = $j('#amenities-search-form:hidden').length > 0;
            if (isHidden) $j('#amenities-search-form').show();
            else $j('#amenities-search-form').hide();
        },

        openRpPopup: function (ctrl, rpId, checkIn, checkOut, numberOfPersons, tabNumber) {
            if (typeof tabNumber == 'undefined' || tabNumber == 0) {
                tabNumber = 1;
            }
            RpSearchFormManager.setCurrentPopupedRpId(rpId);
            interactivity.ajaxRequestByLink(ctrl, { ActionType: "OpenRpPopup", CheckInDate: checkIn,
                CheckOutDate: checkOut, NumberOfPersons: numberOfPersons, RentalPropertyId: rpId, TabNumber: tabNumber, Width: 883
            }, '');
        },

        formatPopupHash: function (rpId, rpHashTagUrl, checkIn, checkOut, numberOfPersons, tabNumber) {
            var hash = rpHashTagUrl + '/';
            if (typeof tabNumber != 'undefined' && tabNumber > 1) {
                hash = hash + RpSearchFormManager.adoptToBeAsUrlPart(RpSearchFormManager.getTabSectionNameByNumber(tabNumber)) + '/' + tabNumber;
            }
            var additionalParams = '';
            if (checkIn.length > 0 && checkOut.length > 0) {
                additionalParams = 'CheckInDate=' + checkIn + '&CheckOutDate=' + checkOut;
            }
            if (numberOfPersons > 0) {
              if (additionalParams.length > 0) {
                additionalParams = additionalParams + '&';
              }
              additionalParams = additionalParams + 'Guests=' + numberOfPersons;
            }
            if (additionalParams.length > 0) {
              hash = hash + '?' + additionalParams;
            }
            return hash;
        },

        adoptToBeAsUrlPart: function (s) {
            return s.replace(/[ !@#$%^&*()_+={}[\]:;'\"\|<>,.\?\//~`\*]+/g, '-').replace(/-+/g, '-').toLowerCase(); //NOTE: if changed here, change in AccommodationService.cs
        },

        getTabSectionNameByNumber: function (tabNumber) {
            var name;
            switch (tabNumber) {
                case 3:
                    name = TB.resources['Labels.RpPopup_Location'];
                    break;
                case 2:
                    name = TB.resources['Labels.RpPopup_GeneralInformation'];
                    break;
                default:
                    name = TB.resources['Labels.RpPopup_Reservation'];
                    break;
            }
            return name;
        },

        getHash: function () {
            if (typeof window.location.hash != 'undefined') {
                return window.location.hash;
            } else {
                return '';
            }
        },

        setHash: function (hash) {
            if (typeof window.location.hash != 'undefined') {
                window.location.hash = hash;
            }
        },

        onSuperregionChanged: function (select) {
            var superregionId = $j(select).val();
            RpSearchFormManager.updateSubregionsSelect(superregionId);
        },

        updateSubregionsSelect: function (superregionId) {
            var subregionsSelect = $j('#form-search-rp select[name="RegionId"]');
            subregionsSelect.html('');
            TB.addOptionToSelect(subregionsSelect, TB.resources['Labels.NotSelected'], '');

            $j.each(RpSearchFormManager.getParams().Regions, function (ind, el) {
                if (el.SuperRegionId > 0 && (superregionId == '' || el.SuperRegionId == superregionId)) {
                    TB.addOptionToSelect(subregionsSelect, el.CurrCultureRegionName, el.Id);
                }
            });

        },

        showRentalPropertyOnMap: function (rpId) {
            RpSearchFormManager.setMapRp(RpSearchRenderer.getRpById(rpId, RpSearchFormManager.getLastResponseContainer().RenderingStuff.SearchRentalProperties));
            RpSearchFormManager.showMapPopup();
        },

        /*** work with popup map ***/
        setMapRp: function (v) {
            mapRp = v;
        },
        getMapRp: function () {
            return mapRp;
        },

        showMapPopup: function () {
            TB.showSimpleBox(TB.resources['Labels.TmSrch_ViewOnMap'], RpMap.renderMapPopupContentBlank(), 780);
            RpMap.setZoomLevel(10);
            RpMap.bindMapControl();
            RpMap.refreshRpLoc(mapRp);
            RpMap.setCenterAt(mapRp.Lat, mapRp.Lng);
        }
        /***/

    }

})(jQuery);

var RpSearchRenderer = (function ($) {

  return {

    setResultArea: function (v) {
      RpSearchRenderer.resultArea = v;
    },

    getResultArea: function () {
      return typeof RpSearchRenderer.resultArea == 'undefined' ? null : RpSearchRenderer.resultArea;
    },

    initialize: function () {
      RpSearchRenderer.setResultArea($j('#res-list'));
    },

    clearResultArea: function () {
      RpSearchRenderer.getResultArea().html('');
    },

    addSpinner: function () {
      RpSearchRenderer.getResultArea().append('<center id="data-loading-img"><div style="padding-top: 200px; padding-bottom: 40px;"><img alt="loader img" src="/local/css/images/loader-big.gif" /></div><span class="txt-loading">' + TB.resources['Labels.Loading'] + '...</span></center>');
    },

    removeSpinner: function () {
      RpSearchRenderer.getResultArea().find('#data-loading-img').remove();
    },

    addSmallSpinner: function () {
      RpSearchRenderer.getResultArea().append('<center id="data-loading-img-small"><div style="padding-top: 50px; padding-bottom: 40px;"><img alt="loader img" src="/local/css/images/loader-small.gif" /></div><span class="txt-loading">' + TB.resources['Labels.Loading'] + '...</span></center>');
    },

    removeSmallSpinner: function () {
      RpSearchRenderer.getResultArea().find('#data-loading-img-small').remove();
    },

    addShowMoreButton: function (pageNumber) {
      RpSearchRenderer.getResultArea().append('<a id="btn-show-more" class="btn-show-more" href="#" onclick="RpSearchFormManager.showMoreOnClick(' + pageNumber + '); return false;">' + TB.resources['Labels.RpSrch_ShowMore'] + '</a>');
    },

    removeShowMoreButton: function () {
      RpSearchRenderer.getResultArea().find('#btn-show-more').remove();
    },

    addNoResultsLabel: function () {
      RpSearchRenderer.getResultArea().append('<p>' + TB.resources['Labels.RpSrch_NoResultsMsg'] + '</p>');
    },

    addClearFilterSettingsButton: function () {
      RpSearchRenderer.getResultArea().append('<a class="btn-default-323x33-blank clear-filter-settings">' + TB.resources['Labels.RpSrch_ClearSettingsLabel'] + '</a>');
    },

    removeClearFilterSettingsButton: function () {
      RpSearchRenderer.getResultArea().find('.clear-filter-settings').remove();
    },

    addSelectCheckInAndCheckOutDatesLabel: function () {
      RpSearchRenderer.getResultArea().append('<p>' + TB.resources['Labels.RpSrch_PleaseSelectCheckInAndCheckoutDates'] + '</p>');
    },
    /*
    renderingStuff.SearchAccommodationGroups
    renderingStuff.SearchRentalProperties
    renderingStuff.IsDemoMode
    */
    renderSearchResults: function (searchResponseContainer) {
      var res = '';
      if (searchResponseContainer.PageNumber == 1) {
        RpSearchRenderer.clearResultArea();
      } else {
        RpSearchRenderer.removeSmallSpinner();
      }
      if (searchResponseContainer.RenderingStuff.SearchAccommodationGroups.length == 0 && searchResponseContainer.PageNumber == 1) {
        RpSearchRenderer.addNoResultsLabel();
        RpSearchRenderer.addClearFilterSettingsButton();
      } else {
        $j.each(searchResponseContainer.RenderingStuff.SearchAccommodationGroups, function (index, searchAg) {
          var rp = RpSearchRenderer.getRpById(searchAg.RentalPropertyId, searchResponseContainer.RenderingStuff.SearchRentalProperties);
          RpSearchRenderer.getResultArea().append(RpSearchRenderer.renderSearchAccommodationGroup(searchAg, rp,
            searchResponseContainer.RenderingStuff.IsDemoMode, searchResponseContainer.RenderingStuff.CheckInDateInShortFormat, searchResponseContainer.RenderingStuff.CheckOutDateInShortFormat,
            searchResponseContainer.RenderingStuff.NumberOfPersons, searchResponseContainer.RenderingStuff.SelectedServicesCount, searchResponseContainer.RenderingStuff.SelectedEntertainmentsCount));
          RpSearchRenderer.bindListenersToSearchAccommodationGroupBlock(rp, searchAg, 
              searchResponseContainer.RenderingStuff.IsDemoMode, searchResponseContainer.RenderingStuff.CheckInDateInShortFormat, searchResponseContainer.RenderingStuff.CheckOutDateInShortFormat, searchResponseContainer.RenderingStuff.NumberOfPersons);
        });
        if (!searchResponseContainer.IsTheLastPage) {
          RpSearchRenderer.addShowMoreButton(searchResponseContainer.PageNumber + 1);
        }
        //if (searchResponseContainer.IsAnyAccommodationGroupFiltered) {
          RpSearchRenderer.addClearFilterSettingsButton();
        //}
      }
    },

    bindListenersToSearchAccommodationGroupBlock: function (rp, ag, isDemoMode, checkInDateInShortFormat, checkOutDateInShortFormat, numberOfPersons) {
      if (isDemoMode) {
        checkInDateInShortFormat = '';
        checkOutDateInShortFormat = '';
      }
      var $block = $j('.ag#ag-' + ag.Id);
      var bookBtnId = RpSearchRenderer.getBookBtnIdByRpAndAg(rp.Id, ag.Id);
      $block.find('.book-btn, h3.underlined a, a.rp-logo').bind('click', function () {
        RpSearchFormManager.setHash(RpSearchFormManager.formatPopupHash(rp.Id, rp.HashTagUrl, checkInDateInShortFormat, checkOutDateInShortFormat, numberOfPersons, 1));
        return false;
      });
    },

    getBookBtnIdByRpAndAg: function (rpId, agId) {
      return 'btn-book-rp-' + rpId + '-ag-' + agId;
    },

    renderSearchAccommodationGroup: function (ag, rp, isDemoMode, checkInDateInShortFormat, checkOutDateInShortFormat, numberOfPersons, selectedServicesCount, selectedEntertainmentCount) {
      if (isDemoMode) {
        checkInDateInShortFormat = '';
        checkOutDateInShortFormat = '';
      }
      var bookBtnId = RpSearchRenderer.getBookBtnIdByRpAndAg(rp.Id, ag.Id);
      var bookLink = location.pathname + RpSearchFormManager.formatPopupHash(rp.Id, rp.HashTagUrl, checkInDateInShortFormat, checkOutDateInShortFormat, numberOfPersons, 1);

      var item;
      var agSleepsCount;

      var datesAreSpecified = $j('input#date-from').val() != '' && $j('input#date-to').val() != '';
      var nights = Math.round((PairedDatePicker2.getPickerSelectedDate($j('input#date-to')) - PairedDatePicker2.getPickerSelectedDate($j('input#date-from'))) / (1000 * 3600 * 24));  

      if (rp.IsWholeRanchInfoProvided) {
        agSleepsCount = rp.WholeRanchAccommodationSleeps;
      } else {
        agSleepsCount = rp.PropertyTotalSleepsCount;
      }

      //sorry, formating was fucked up automatically below by VS.... :(
      item = '<div class="ag" id="ag-' + ag.Id + '">';

      item += '<div class="clearfix inner-block">';

      item += '<div class="clearfix">';

      item += '<div class="col-left clearfix">';

      item += '<h3 class="underlined"><a href="' + bookLink + '" target="_blank">' + rp.Name + '</a></h3>';

      item += '<div class="col-picture">';
      item += '<a class="rp-logo" href="' + bookLink + '" target="_blank">';
      item += '<img class="rp-img" alt="rp logo" src="' + rp.PrimaryImageUrl + '" />';
      item += '</a>';
      item += '</div>';

      item += '<div class="col-desc">';
      item += '<div class="row-desc-top clearfix">';
      item += '<div class="column-left">';
      item += TB.resources['Labels.Accommodations'] + ': <span class="highlighted">' + (rp.IsWholeRanchInfoProvided ? rp.WholeRanchAccommodationGroupBedrooms : rp.AccommodationsCount) + '</span><br/>';
      if (ag.AmenitiesServicesCount > 0) {
        item += TB.resources['Labels.Services'] + ': ';
        if (selectedServicesCount > 0) {
          item += '<span class="highlighted">' + ag.AmenitiesServicesMatchedSearchFormCount + '</span>/';
        }
        item += '<span class="highlighted">' + ag.AmenitiesServicesCount + '</span>';
        if (selectedServicesCount > 0) {
          item += '<a class="count-help tooltip-trigger" title="' + TB.resources['ServiceCountHelpTooltipText'] + '"><img src="/local/css/images/rp-search/service-count-tooltip-handler.png" /></a>';
        }
        item += '<br/>';
      }
      item += '</div>';
      item += '<div class="column-right">';
      item += TB.resources['Labels.Sleeps'] + ': <span class="highlighted">' + agSleepsCount + '</span><br/>';
      if (ag.AmenitiesEntertainmentsCount > 0) {
        item += TB.resources['Labels.Entertainment'] + ': ';
        if (selectedEntertainmentCount > 0) {
          item += '<span class="highlighted">' + ag.AmenitiesEntertainmentsMatchedSearchFormCount + '</span>/';
        }
        item += '<span class="highlighted">' + ag.AmenitiesEntertainmentsCount + '</span>';
        if (selectedEntertainmentCount > 0) {
          item += '<a class="count-help tooltip-trigger" title="' + TB.resources['Labels.EntertainmentCountHelpTooltipText'] + '"><img src="/local/css/images/rp-search/service-count-tooltip-handler.png" /></a>';
        }
        item += '<br/>';
      }
      item += '</div>';
      item += '</div>';
      item += '<div class="row-desc-bottom-wrapper">';
      item += '<div class="row-desc-bottom-cnt clearfix">';
      item += '<div class="row-desc-bottom-top"></div>';
      item += '<div class="rp-loc">';
      item += '<a href="#" onclick="RpSearchFormManager.showRentalPropertyOnMap(' + rp.Id + '); return false;" class="img-location">' + rp.FormattedAddress;
      item += '</a>';
      item += '</div>';
      item += '<div class="rp-amenities">';
      if (rp.HasWater) {
        item += '<span class="img-water" title="' + TB.resources['Labels.Amenity_Water'] + '"><span class="highlighted">' + rp.BestWaterDistance + ' ' + rp.BestWaterDistanceUnits + '</span>';
        item += '</span>';
      }
      if (rp.HasForest) {
        item += '<span class="img-forest" title="' + TB.resources['Labels.Amenity_Forest'] + '"><span class="highlighted">' + rp.BestForestDistance + ' ' + rp.BestForestDistanceUnits + '</span>';
        item += '</span>';
      }
      if (rp.HasOther) {
        item += '<span class="img-other" title="' + TB.resources['Labels.Amenity_SightSeeing'] + '"><span class="highlighted">' + rp.BestOtherDistance + ' ' + rp.BestOtherDistanceUnits + '</span>';
        item += '</span>';
      }
      if (!rp.HasOther && !rp.HasForest && !rp.HasWater) {

        $j.each(rp.Distances, function (i, e) {
          item += '<span class="img-amenity-' + e.VirtualName + '" title="' + e.AmenityName + '">';
          item += '<span class="highlighted">' + e.Distance + ' ' + e.DistanceUnits + '</span>';
          item += '</span>';
        });
      }
      item += '</div>';
      item += '</div>';
      item += '</div>';
      item += '</div>';

      item += '</div>'; //of col-left

      item += '<div class="col-right">';

      item += '<div class="col-price-wrapper">';
      item += '<div class="col-price-top">';
      item += '</div>';

      item += '<div class="col-price">';
      if (ag.IsPriceProvided) {
        if (!isDemoMode) { //if not demo mode
          if (ag.IsAnyDiscountWasApplied) {
            item += '<div class="prices clearfix">';
            item += '<div class="price-without-any-discount">';
            item += TB.resources['Labels.From'];
            item += '<div class="price clearfix">';
            item += '<span class="base-currency">';
            item += ag.FormattedSubtotalWithoutAnyDiscount;
            item += '</span>';
            item += '<span class="alternate-currency">';
            item += ag.FormattedSubtotalWithoutAnyDiscountInAltCurrency;
            item += '</span>';
            item += '</div>';
            item += '</div>';
            item += '</div>';
          }
          item += '<div class="prices clearfix ' + (ag.IsAnyDiscountWasApplied ? 'discount' : '') + '">';
          item += '<div class="subtotal">';
          if (!ag.IsAnyDiscountWasApplied) item += TB.resources['Labels.From'];
          item += '<div class="price clearfix">';
          item += '<span class="base-currency">';
          item += ag.FormattedSubtotal;
          item += '</span>';
          item += '<span class="alternate-currency">';
          item += ag.FormattedSubtotalInAltCurrency;
          item += '</span>';
          item += '</div>';
          if (datesAreSpecified) {
              item += TB.resources['Labels.Nights'] + ': ' + nights;             
          }
          else {
              item += TB.resources['Labels.RpSrch_PerNight'];
          }            
          item += '</div>';
          item += '</div>';
        } else { //if demo mode
          item += '<div class="prices clearfix">';
          item += '<div class="price-from">';
          item += TB.resources['Labels.From'];
          item += '<div class="price clearfix">';
          item += '<span class="base-currency">';
          item += ag.FormattedMinPrice;
          item += '</span>';
          item += '<span class="alternate-currency">';
          item += ag.FormattedMinPriceInAltCurrency;
          item += '</span>';
          item += '</div>';
          if (datesAreSpecified) {
              item += TB.resources['Labels.Nights'] + ': ' + nights;             
          }
          else {
              item += TB.resources['Labels.RpSrch_PerNight'];
          }            
          item += '</div>';
          item += '</div>';
        }
        item += '<div class="rp-buttons">';
        item += '<center>';
        item += '<a id="' + bookBtnId + '" class="book-btn btn-super w130 h38" href="' + bookLink + '" target="_blank">' + TB.resources['Labels.Select'] + '</a>';
        item += '</center>';
        item += '</div>';
      }
      item += '</div>';

      item += '</div>';

      item += '</div>';  //of col-right

      item += '</div>';

      item += '<div class="property-type">' + rp.TypeToOutput + '</div>';
      item += '</div>';
      item += '</div>';

      return item;
    },



    getRpById: function (rpId, rpList) {
      var rp;
      jQuery.each(rpList, function (index, rp0) {
        if (rp0.Id == rpId) {
          rp = rp0;
          return false;
        }
      });
      return rp;
    }

  }

})(jQuery);


var SearchFormSaver = (function ($) {

  var keysToIgnore = ['ActionType', 'TheLastResponseNumber', 'NextAction'];
  var cookieName = 'search-form';
  var areas;

  return {

    initialize: function () { 
      //run on document ready (not earlier), otherwise it will be empty!
      areas = $j('.search-form-part');
    },

    loadSearchFormFromStorage: function (formStorage) {

      if (formStorage != null) {
        ControlSettingsSaver.loadControlSettingsFromStorage(areas, keysToIgnore, formStorage);

        /* customized elements */

        $j("#double-slider-price").each(function (ind, el) {
          var key = ControlSettingsSaver.getElementKey(this);
          if (jQuery.inArray(key, keysToIgnore) == -1 && typeof formStorage[key] !== 'undefined') {
            var lowValue = formStorage[key][0];
            var highValue = null;
            if (formStorage[key].length > 1) {
              highValue = formStorage[key][1];
            }
            RpSearchFormManager.setPriceSliderValues(lowValue, highValue, null);
          }
        });
      }

      return formStorage;
    },

    saveSearchFormToStorage: function () {

      var formStorage = ControlSettingsSaver.saveControlSettingsToStorage(areas, keysToIgnore, null);

      /* customized elements */
      $j("#double-slider-price").each(function (ind, el) {
        var key = ControlSettingsSaver.getElementKey(el);
        if (jQuery.inArray(key, keysToIgnore) == -1) {
          var lowValue = $j(el).slider('option', 'values')[0];
          var highValue = $j(el).slider('option', 'values')[1];
          var maxValue = $j(el).slider('option', 'max');
          var value;
          if (highValue == maxValue) {
            value = [lowValue];
          } else {
            value = [lowValue, highValue]
          }
          formStorage[key] = value;
        }
      });

      return formStorage;
    },

    saveSearchFormToCookie: function () {

      var formStorage = SearchFormSaver.saveSearchFormToStorage();
      ControlSettingsSaver.saveStorageToCookie(cookieName, formStorage, 30 * (60 * 60 * 24), document.domain);
      return formStorage;

    }

  }

})(jQuery);

/*** work with popup ***/

var RpPopupPage = (function ($j) {

  var strCheckInDate = null;
  var strCheckOutDate = null;

  var shortStrCheckInDate = null;
  var shortStrCheckOutDate = null;

  return {


    setStrCheckInDate: function (v) {
      strCheckInDate = v;
    },

    getStrCheckInDate: function (v) {
      return strCheckInDate;
    },

    setStrCheckOutDate: function (v) {
      strCheckOutDate = v;
    },

    getStrCheckOutDate: function (v) {
      return strCheckOutDate;
    },


    setShortStrCheckInDate: function (v) {
      shortStrCheckInDate = v;
    },

    getShortStrCheckInDate: function (v) {
      return shortStrCheckInDate;
    },

    setShortStrCheckOutDate: function (v) {
      shortStrCheckOutDate = v;
    },

    getShortStrCheckOutDate: function (v) {
      return shortStrCheckOutDate;
    },

    setNumberOfPersons: function (v) {
      RpPopupPage.numberOfPersons = v;
    },

    getNumberOfPersons: function (v) {
      return typeof RpPopupPage.numberOfPersons == 'undefined' ? null : RpPopupPage.numberOfPersons;
    },

    getRp: function () {
      return typeof RpPopupPage.rp == 'undefined' ? null : RpPopupPage.rp;
    },

    setRp: function (v) {
      map = null;
      RpPopupPage.rp = v;
    },

    getParams: function () {
      return typeof RpPopupPage.params == 'undefined' ? null : RpPopupPage.params;
    },

    setParams: function (v) {
      RpPopupPage.params = v;
    },

    initialize: function (params) {
      RpPopupPage.setParams(params);

      $j('#tab-rp-menu-reservation .slide-pictures-down').live('mousedown', function () {
        var listCntBlock = $j(this).closest('.ag-pictures-block').find('.ag-media-list-content');
        var viewPortHeight = $j(this).closest('.ag-pictures-block').find('.ag-media-list').height();
        if (TB.extractNumericPartOfValue(listCntBlock.css('top')) + listCntBlock.height() > viewPortHeight) {
          listCntBlock.stop();
          listCntBlock.animate({ "top": "-=111px" }, "fast");
        }
      });
      $j('#tab-rp-menu-reservation .slide-pictures-down').live('mouseup mouseleave', function () {
        var listCntBlock = $j(this).closest('.ag-pictures-block').find('.ag-media-list-content');
        listCntBlock.stop();
      });

      $j('#tab-rp-menu-reservation .slide-pictures-up').live('mousedown', function () {
        var listCntBlock = $j(this).closest('.ag-pictures-block').find('.ag-media-list-content');
        if (TB.extractNumericPartOfValue(listCntBlock.css('top')) < 0) {
          listCntBlock.stop();
          listCntBlock.animate({ "top": "+=111px" }, "fast");
        }
      });
      $j('#tab-rp-menu-reservation .slide-pictures-up').live('mouseup mouseleave', function () {
        var listCntBlock = $j(this).closest('.ag-pictures-block').find('.ag-media-list-content');
        listCntBlock.stop();
      });


    },

    onPopupOpen: function () {
      PairedDatePicker2.bindPairedDatePickers('bs-date-from', 'bs-date-to', TB.resources['Core.LanguageCode'], TB.resources['Core.ShortDateFormatStringJS'], RpPopupPage.getParams().GetMonthNamesShortOfCurrentCultureAsJsonArray);
      RpPopupPage.refreshDiscountTooltipPopups();
      AccGroupsInList.updateAccGroupControlStatesInList();
    },

    outputDatepickerDatesIfAny: function () {
      if (RpPopupPage.getStrCheckInDate() != null) {
        $j('#bs-date-from').val(RpPopupPage.getStrCheckInDate());
      }
      if (RpPopupPage.getStrCheckOutDate() != null) {
        $j('#bs-date-to').val(RpPopupPage.getStrCheckOutDate());
      }

      if (RpPopupPage.getShortStrCheckInDate() != null) {
        $j('#bs-date-from-hidden').val(RpPopupPage.getShortStrCheckInDate());
      }
      if (RpPopupPage.getShortStrCheckOutDate() != null) {
        $j('#bs-date-to-hidden').val(RpPopupPage.getShortStrCheckOutDate());
      }
    },

    onSearchFormClick: function () {
      $j('#popup-res-list').html('<div class="loading-msg-block"><center><div style="padding-bottom: 40px;"><img alt="loader img" src="/local/css/images/loader-big.gif" /></div><span class="txt-loading">' + TB.resources['Labels.Loading'] + '...</span></center></div>');
      $j.fancybox.resizeLitely();
      $j('#tab-rp-menu-reservation #popup-search-form form').submit();
    },

    onTabClick: function (menuItem, tab) {
      RpPopupPage.showTab(menuItem, tab);
      if ($j(menuItem).hasClass('rp-menu-loc')) {
        RpPopupPage.bindMapAndCenterIfAny();
      }
    },

    getActiveTabNumber: function () {
      var ind = 0;
      var menuItem = $j('#rp-popup-menu li a.selected');
      if ($j('#rp-popup-menu li a').length != 0) {
        ind = $j('#rp-popup-menu li a').index(menuItem) + 1;
      }
      if (typeof ind == 'undefined') {
        ind = 0;
      }
      return ind;
    },

    bindMapAndCenterIfAny: function () {
      if (!RpPopupMap.isMapBound()) RpPopupPage.bindMap();
      RpPopupMap.setCenterAt(RpPopupPage.getRp().Lat, RpPopupPage.getRp().Lng);
    },

    showTab: function (menuItem, tab) {
      $j('#rp-popup-menu li a').removeClass('selected');
      $j(menuItem).addClass('selected');
      $j('.tab').hide();
      $j(tab).show();
      $j.fancybox.resizeLitely();

      //track with google analytics
      var rpInfo = 'r.p. name: "' + RpPopupPage.getRp().RealName + '", id: ' + RpPopupPage.getRp().Id + ', owner id ' + RpPopupPage.getRp().UserId + '.';
      var tabName = '';
      if ($j(menuItem).hasClass('rp-menu-reservation')) {
        tabName = 'Reservation';
      } else if ($j(menuItem).hasClass('rp-menu-gen-info')) {
        tabName = 'General Information';
      } else if ($j(menuItem).hasClass('rp-menu-loc')) {
        tabName = 'Location';
      } else {
        tabName = '<undefined>';
      }
      if (typeof _gaq != 'undefined') {
        _gaq.push(['_trackEvent', 'R.p. popup', 'Tab viewing: "' + tabName + '"', rpInfo, RpPopupPage.getRp().Id]);
      }
    },

    showTabByNumber: function (number) {
      var menuItem = $j('#rp-popup-menu li a')[number - 1];
      var tab = $j('#fancy-quick-alert-content .tab')[number - 1];
      RpPopupPage.showTab(menuItem, tab);
      if (!$j(menuItem).hasClass('rp-menu-reservation')) {
        $j('#bs-date-from, #bs-date-to').datepicker('hide'); //hide opened datepickers if any
      }
      if ($j(menuItem).hasClass('rp-menu-loc')) {
        RpPopupPage.bindMapAndCenterIfAny();
      }
    },

    bindMap: function () {
      RpPopupMap.bindMapControl();
      RpPopupMap.refreshRpLoc(RpPopupPage.getRp());
      //RpPopupMap.openRpMarkerPopup(rp);
      RpPopupMap.setCenterAt(RpPopupPage.getRp().Lat, RpPopupPage.getRp().Lng);
    },

    showAgPicturesOnClick: function (agId) {
      agContr = $j('#popup-res-list #ag-pictures-block-' + agId);
      if (agContr.is(':visible')) {
        agContr.hide();
      } else {
        agContr.show();
      }
      $j.fancybox.resizeLitely();
    },

    showAgAvCalendarOnClick: function (agId) {

      agContr = $j('#popup-res-list #ag-av-calendar-block-' + agId);

      if ($j.trim(agContr.html()).length == 0) {
        agContr.html('<center><div style="padding-top: 200px; padding-bottom: 40px;"><img alt="loader img" src="/local/css/images/loader-small.gif" /></div><span class="txt-loading">' + TB.resources['Labels.Loading'] + '...</span></center>');
        TB.invoke({ ActionType: 'ShowLongTermBookingsCalendar', InvokeUrl: TB.resources['Core.UrlPrefix'] + '/booking/search/', AccommodationGroupId: agId, PeriodStartDate: $j('#bs-date-from-hidden').val() });
      }

      if (agContr.is(':visible')) {
        agContr.hide();
      } else {
        agContr.show();
      }

      $j.fancybox.resizeLitely();
    },

    refreshDiscountTooltipPopups: function () {
      $j('.discount-link').each(function () {
        $j(this).qtip(
                  {
                    content: {
                      text: $j(this).closest('p.properties').next('.discount-tooltip-content').html()
                    },
                    show: {
                      when: 'click',
                      solo: true // Only show one tooltip at a time
                    },
                    hide: 'unfocus',
                    style: {
                      classes: 'ag-discount-tooltip ui-tooltip-rounded ui-tooltip-shadow',
                      width: true
                    }
                  })
      });
    },

    onMainImageLoadingFinished: function (img) {
      setTimeout(function () {
        RpPopupPage.onImageLoadingFinished(img);
        $j('#bs-date-from').datepicker('hide');
        TB.focusFirstFormInputIfEmpty($j('#fancy-quick-alert-content #popup-search-form'));
      }, 300)
    },

    onImageLoadingFinished: function (img) {
      TB.fitFancyBoxSize();
    },

    reset: function () {
      RpPopupMap.reset();
      PairedDatePicker2.bindPairedDatePickers('date-from', 'date-to', TB.resources['Core.LanguageCode'], TB.resources['Core.ShortDateFormatStringJS'], RpSearchFormManager.getParams().MonthShortNames, RpSearchFormManager.customOnDatepickerSelect);
      RpSearchFormManager.setCurrentPopupedRpId(null); 
      RpSearchFormManager.setHash('_');

      $j('#bs-date-from, #bs-date-to').datepicker('hide');
      $j.fancybox.close();
    }

  }

})(jQuery);



/*** work with google maps ***/
var RpPopupMap = (function ($) {

  var rpMarker = null;
  var map = null;
  var MAP_DIV_ID = 'popup-map';
  var commonPopupsZIndex = 0;

  return {

    reset: function () {
      map = null;
      rpMarker = null;
    },

    isBrowserSupportsMapControl: function () {
      return true; //GBrowserIsCompatible();
    },

    isMapBound: function () {
      return map != null;
    },

    getMap: function () {
      return map;
    },

    getNextCommonPopupZIndex: function () {
      commonPopupsZIndex++;
      return commonPopupsZIndex;
    },

    bindMapControl: function () {

      pageRp = null;

      if (RpPopupMap.isBrowserSupportsMapControl()) {
        var latlng = new google.maps.LatLng(54.80068486732233, 24.10400390625); // Lithuanian center by default
        var mapOpts = {
          zoom: RpPopupMap.getZoomLevel(),
          center: latlng,
          mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        map = new google.maps.Map(document.getElementById(MAP_DIV_ID), mapOpts);
      } else {
        $j('#' + MAP_DIV_ID).html('<p>Sorry, your browser doesn\'t support the map.</p>');
      }
    },

    getZoomLevel: function () {
      return 14;
    },

    refreshRpLoc: function (pageRp) {

      if (rpMarker != null) {
        //remove the marker
        //1. from map
        rpMarker.setMap(null);
        //2. set as null
        rpMarker = null;
      }

      //add new marker
      if (pageRp != null) {
        //add the marker
        //1. to map
        var rp = pageRp;
        var marker = new google.maps.Marker({
          map: map,
          position: new google.maps.LatLng(rp.Lat, rp.Lng),
          title: rp.Name
        });
        //2. to the dictionary
        rpMarker = marker;
        google.maps.event.addListener(marker, 'click', function () {
          RpPopupMap.openRpMarkerPopup(rp);
        });
      }

    },

    openRpMarkerPopup: function (rp) {
      if (rpMarker != null) {
        var marker = rpMarker;
        var isInfoWindowShown = $j('.rp-info-window#rp-' + rp.Id).length > 0;
        if (!isInfoWindowShown) {
          var infowindow = new google.maps.InfoWindow({
            content: RpPopupMap.renderRpInfoWindowContent(rp),
            zIndex: RpPopupMap.getNextCommonPopupZIndex()
          });
          infowindow.open(map, marker);
        }
      }
    },

    renderRpInfoWindowContent: function (rp) {
      var content = '';
      var propertyName = rp.Name;

      if (typeof rp.WholeRanch !== 'undefined') {
        propertyName = TB.resources['Labels.Sleeps'] + ': ' + rp.WholeRanch.Sleeps + ', ' + TB.resources['Labels.Bedrooms'] + ': ' + rp.WholeRanch.Bedrooms;
      }

      content += '<div id="rp-' + rp.Id + '" class="rp-info-window">';
      content += '<h4>' + propertyName + '</h4>';
      content += '</div>';

      return content;
    },

    setCenterAt: function (lat, lng) {
      var latLng = new google.maps.LatLng(lat, lng);
      map.setCenter(latLng);
    },

    renderMapPopupContentBlank: function () {
      var content = '';
      content += '<div id="map"><\/div>';
      content += '<div class="popup-powered-by-tripbaltic">';
      content += '  <a class="powered-by-tripbaltic-link" href="http://tripbaltic.com' + TB.resources['Core.UrlPrefix'] + '/" target="_blank">Powered by TripBaltic.com</a>';
      content += '</div>';
      return content;
    }

  }

})(jQuery);

