/// <reference path="LocationComponent.js" />
"use strict";

(function (module) {

    module.component('dealerfilterscomponent', {
        bindings: {
            isloading: '='
        },
        controller: ["$scope", "$location", "$timeout", "DealerSearchService", "DealerSearchFilterService", "Config", "$uibModal", "$cookies", "ZipCodeService", "NotificationService", 'InventoryFilterService',
        function ($scope, $location, $timeout, DealerSearchService, DealerSearchFilterService, Config, $uibModal, $cookies, ZipCodeService, NotificationService, InventoryFilterService) {
            var ctrl = this;
            var svgColor = (!Config.SecondaryColor || Config.SecondaryColor.toUpperCase() === "#FFF" || Config.SecondaryColor.toUpperCase() === "#FFFFFF") ? Config.PrimaryColor : Config.SecondaryColor;
            ctrl.svgcontent = {
                TextColor: svgColor,
                ShieldColor: svgColor
            };

            var scrollToTop = function (offset) {
                if (window.pageYOffset > 110) {
                    $('html, body').animate({ scrollTop: offset }, { duration: 1500, queue: false }, "easeInExpo");
                }
            };

            var recalculateItemHeights = function () {
                var targetHeight = 0;
                var $targ = $('div[data-item-type="models"]');

                $targ.find('b.make-name').each(function () {
                    targetHeight += $(this).height();
                });

                $targ.find('ul').each(function () {
                    $(this).find('li').each(function (idx) {

                    });
                });

                $targ.scrollbar();
            };

            ctrl.$onInit = function () {
                ctrl.selectedFilters = DealerSearchFilterService.selectedFilters;
                ctrl.filterOptions = DealerSearchFilterService.filterOptions;
                ctrl.allDealers = DealerSearchService.allDealers;
                ctrl.filterLimits = DealerSearchFilterService.filterLimits;
                ZipCodeService.Init()
                    .then(function () {
                        ctrl.ZipCode = ZipCodeService.Location.CurrentZipCode;
                    });




                $scope.distance = {
                    options: {
                        showSelectionBar: true,
                        floor: ctrl.filterLimits.MinDistanceRange,
                        ceil: ctrl.filterLimits.MaxDistanceRange,
                        step: ctrl.filterLimits.DistanceIncrement,
                        hidePointerLabels: true,
                        hideLimitLabels: true,
                        keyboardSupport: true,
                        ariaLabel: 'Search Within ' + ctrl.filterLimits.MaxDistanceRange + ' Miles of ' + ctrl.ZipCode,
                        onEnd: function (e) {
                            updateQueryString("Distance");
                            DoSearch();
                        }
                    }
                };
            };


            ctrl.toggleFilterItem = function (filterName, filterValue) {
                if (typeof ctrl.selectedFilters.filters[filterName] === 'string' || typeof ctrl.selectedFilters.filters[filterName] === "boolean") {
                    ctrl.selectedFilters.filters[filterName] = filterValue;
                }
                else {
                    if (ctrl.selectedFilters.filters[filterName].indexOf(filterValue) > -1) {
                        var index = ctrl.selectedFilters.filters[filterName].indexOf(filterValue);
                        ctrl.selectedFilters.filters[filterName].splice(index, 1);
                        ctrl.selectedFilters.filters.MakeModel.splice(index, 1);
                    } else {
                        ctrl.selectedFilters.filters[filterName].push(filterValue);
                    }
                }

                updateQueryString(filterName);
                DoSearch();

            };



            ctrl.reset = function () {
                DealerSearchService.allDealers = {
                    SearchResults: [],

                };
                ctrl.allDealers = {
                    SearchResults: [],

                };
                ctrl.allDealers.SearchResults = [];
            }



            ctrl.open = function () {
                var interstitial = $uibModal.open({
                    animation: true,
                    ariaDescribedBy: 'interstitial-modal-body',
                    templateUrl: '/app/Common/views/_InterstitialModal.html',
                    component: 'interstitialmodal',
                    scope: $scope,
                    windowClass: 'interstitial-modal-content'
                });
                $scope.Interstitial = interstitial;
            };



            ctrl.toggleRadioItem = function (filterName, filterValue) {
                
                ctrl.selectedFilters.filters[filterName] = filterValue;

                var isSpecialty = filterValue != "Car";

                ctrl.selectedFilters.filters["IsSpecialty"] = isSpecialty;

                if (isSpecialty) {
                    clearMakeModels();
                }
                updateQueryString(filterName);
                DoSearch();

            };

            var updateQueryString = function (fld) {
                if (typeof ctrl.selectedFilters.filters[fld] === 'boolean') {
                    if (ctrl.selectedFilters.filters[fld] == false)
                        $location.search(fld, null);
                    else
                        $location.search(fld, ctrl.selectedFilters.filters[fld].toString());
                } else if (ctrl.selectedFilters.filters[fld] != '') {
                    $location.search(fld, ctrl.selectedFilters.filters[fld]);
                } else {
                    $location.search(fld, null);
                }
            }

            var clearMakeModels = function() {
                ctrl.selectedFilters.filters["Makes"] = [];
                updateQueryString("Makes");
                ctrl.selectedFilters.filters["MakeModel"] = [];
                updateQueryString("MakeModel");
            };

            var DoSearch = function () {
                ctrl.ZipCode = ZipCodeService.Location.CurrentZipCode;
                ctrl.selectedFilters.ZipCode = ctrl.ZipCode;
                updateQueryString('ZipCode');
                ctrl.isloading = true;
                DealerSearchService.RetrieveDealers(true).then(function () {
                    $timeout(function () {
                        ctrl.isloading = false;
                    }, 1000);
                });
            }

            $scope.toggleFilterListDisplay = function (obj, $event) {
                InventoryFilterService.ToggleFilterList(obj, $event);
            };

            NotificationService.subscribe("saveZipCode", $scope, DoSearch);
        }],
        templateUrl: UrlContent('/App/Dealer/Views/DealerFiltersComponent.html')
    });
})(angular.module('AutoSMART.Web.Dealer'));
"use strict";

(function (module) {

    module.component('dealerlistcomponent', {


        controller: ["$scope", "$window", "DealerSearchService", "DealerSearchFilterService", 'InventoryFilterService', "Config",
            function ($scope, $window, DealerSearchService, DealerSearchFilterService, InventoryFilterService, Config ) {
                var ctrl = this;

                $window.onresize = function (event) {
                    ctrl.cardOrientation = 'vertical-card';
                    if ($window.innerWidth >= 1200) {
                        ctrl.cardOrientation = 'horizontal-card';
                    }
                }

                ctrl.$onInit = function () {
                    ctrl.selectedFilters = DealerSearchFilterService.selectedFilters;
                    ctrl.filterOptions = DealerSearchFilterService.filterOptions;
                    ctrl.allDealers = DealerSearchService.allDealers;

                    ctrl.cardOrientation = 'vertical-card';
                    if ($window.innerWidth >= 1200) {
                        ctrl.cardOrientation = 'horizontal-card';
                    }
                }

                $scope.toggleFilterListDisplay = function (obj, $event) {
                    InventoryFilterService.ToggleFilterList(obj, $event);
                };
            }],
                templateUrl: UrlContent('/App/Dealer/Views/DealerListComponent.html')
            });
})(angular.module('AutoSMART.Web.Dealer'));

"use strict";

(function (module) {

    module.component('dealerresultcard', {

        controller: ["$scope", "$uibModal", "Config", "$rootScope", "CalculatorService", "GoogleAnalyticsService", "$window", "VehicleFavoriteService", "InventoryImageSizeService", "DealerSearchFilterService",
         function ($scope, $uibModal, Config, $rootScope, CalculatorService, GoogleAnalyticsService, $window, VehicleFavoriteService,InventoryImageSizeService,DealerSearchFilterService) {
            var ctrl = this;
          
            ctrl.selectedFilters = DealerSearchFilterService.selectedFilters;
            
            $scope.displayDealerRating = ctrl.data.Rating && ctrl.data.Rating > 0 ? true : false;            
            
            $scope.displayAsxCard = ctrl.data.IsAutoSmartXLive ? true : false;
            $scope.ClientLogo = Config.ClientLogo;

            ctrl.data.IsPreferredPlus = $scope.displayAsxCard;
            ctrl.data.DealerName = ctrl.data.OwnerName;
            ctrl.data.DealerAddress = ctrl.data.OwnerAddress1;
            ctrl.data.OwnerLocation = ctrl.data.OwnerAddress2;
            ctrl.data.DisplayPhone = ctrl.data.OwnerPhone;

            ctrl.svgcontent = {
                 "TextColor" : "#FFF",
                 "ShieldColor" : "#FFF"
            };
            

            ctrl.ClientColorlessLogoUrl = Config.ClientColorlessLogoUrl;
             $scope.openLocation = function () {

                var modalInstance = $uibModal.open({
                    component: 'locationcomponent',
                    scope: $scope
                });

                $rootScope.modalInstance = modalInstance;

                 modalInstance.result.then(function (data) {
                     if (data.data) {
                         data = data.data;
                     }
                    console.log(data);
                });
            };
            
             ctrl.openRating = function (isValid) {
                 if (isValid) {
                     var ratingInstance = $uibModal.open({
                         component: 'dealerratercomponent',
                         scope: $scope,
                         windowClass: 'dealerrater-modal-content'
                     });

                     $scope.ratingInstance = ratingInstance;
                 }
            };

            ctrl.open = function () {
                var interstitial = $uibModal.open({
                    animation: true,
                    ariaDescribedBy: 'interstitial-modal-body',
                    templateUrl: '/app/Common/views/_InterstitialModal.html',
                    component: 'interstitialmodal',
                    scope: $scope,
                    windowClass: 'interstitial-modal-content'
                });
                $scope.Interstitial = interstitial;
            };
        }],
        bindings: {
            data: '='
        },
        templateUrl: UrlContent("/App/Dealer/Views/DealerResultCard.html")


    });
})(angular.module('AutoSMART.Web.Search'));

