var Utils = (function () {

    var arrayContains = function (needle, haystack) {
        var len = haystack.length, i, arrayElem = "";
        for (i = 0; i < len; i++) {
            if (haystack[i].toLowerCase().indexOf(needle.toLowerCase()) > -1) {
                arrayElem = haystack[i];
                break;
            }
        }
        return arrayElem;
    };

    var parseQueryString = function () {
        var params = {}, queries, temp, i, l;

        if (window.location.pathname.indexOf('/Vehicle/Details/') == 0) {
            var id = window.location.pathname.replace('/Vehicle/Details/', '').split('/')[0];

            if (id != null && id.length > 0) {
                params.id = id;
            }
        }

        var argsStartIndex = window.location.href.indexOf('?');

        if (argsStartIndex >= 0) {
            var url = window.location.href.slice(argsStartIndex + 1);
            var decodedUrl = decodeURIComponent(url);
            queries = decodedUrl.split("&");
            for (i = 0, l = queries.length; i < l; i++) {
                temp = queries[i].split('=');
                params[temp[0].toLowerCase()] = temp[1];
            }
        }
        
        return params;
    }

    var generateSearchQueryString = function (selectedValues) {
        var mainUrl = window.location.protocol + '//' + window.location.host;
        var resultstr = ""; 

        $.each(selectedValues, function (key, element) {
            if ((key == "page" && element == "1")
                || (window.location.pathname.indexOf('/Vehicle/Details/') == 0 && key == "id"))
                return;
			if (key == "newsearch") 
			    return;
			if (key == "searchType")
			    return;
            if (key == "spotlight")
                return;
            resultstr += "&" + key + "=" + element;
        });

        resultstr = resultstr.substring(1);

        if (resultstr.length > 0) {
            resultstr = "?" + resultstr;
        }

        var path = window.location.pathname;

        if (path.indexOf('/Vehicle/Details/') == 0 && selectedValues.id != null) {
            path = '/Vehicle/Details/' + selectedValues.id + '/';
        } else if (path.charAt(path.length - 1) !== "/") {
            path = path + "/";
        }

        return mainUrl + path + resultstr;
    };

    var removeCommaFromNumber = function(s) {
        return s.replace(/\,/g, '');
    };

    var adClickLogging = function(clientAdId, pageId, url, openNewWindow) {
        $.post('/Ads/ClickedAd', { clientAdID: clientAdId, pageId: pageId });
        Global.Redirect(url, openNewWindow);
    };

    var applyForLoan = function(userActionType, itemId, sourceSectionId) {
        $.ajax({ url: '/Vehicle/LoggingUserAction', cache: false, data: { userActionType: userActionType, itemId: itemId, sourceSectionId: sourceSectionId  } });
    };

    var updateAddressBar = function(selectedData, historyEntryName) {
        if (history.pushState) {
            delete selectedData.location;
            history.pushState(selectedData, historyEntryName, generateSearchQueryString(selectedData));
        }
    }

    var drawMap = function (location) {
        var mapOptions = {
            zoom: 13,
            center: location,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        
        var map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);

        var marker = new google.maps.Marker({
            position: location,
            draggable: false,
            animation: google.maps.Animation.DROP,
            map: map,
            title: name
        });
    }

    var showMap = function(event,addressStreet, cityStateZip, latitude, longitude, name) {        
        var location;
        var geocoder = new google.maps.Geocoder();
        var address = addressStreet + " " + cityStateZip;            
        event.stopPropagation();

        if (parseFloat(latitude) && parseFloat(longitude)) {
            location = new google.maps.LatLng(latitude, longitude);
            geocoder.geocode({ 'location': location }, function (results, status) {
                if (status == google.maps.GeocoderStatus.OK) {
                    location = new google.maps.LatLng(results[0].geometry.location.lat(), results[0].geometry.location.lng());
                    drawMap(location);
                }
            });
        } else {
            geocoder.geocode({ 'address': address }, function(results, status) {
                if (status == google.maps.GeocoderStatus.OK) {
                    location = new google.maps.LatLng(results[0].geometry.location.lat(), results[0].geometry.location.lng());
                    drawMap(location);
                }
            });
        }
        $("#mapDialog").find("#map-dealer-name").html(name).end().find("#map-dealer-address").html(addressStreet + "<br/>" + cityStateZip).end();
        $("#mapDialog").modal('show');
    }

    var buildVdpToolTip = function(message, $target) {
        var $div = $("<div/>").addClass("vdp-error-tooltip");
        var $span = $("<div/>").text(message).addClass("tooltip-inner");
        var $arrow = $("<div/>").addClass("arrow");
        $div.append($span).append($arrow);
        var tId = "tooltip-" + $target.attr("id");
        $div.attr("id", tId);
        return $div;
    };

    var removeToolTip = function($target) {
        $target.removeClass('vdp-field-error');
        var tId = "tooltip-" + $target.attr("id");
        $("#" + tId).remove();
    }

    var isValidEmail = function(email) {
        if (email.length === 0) return false;
        email = $.trim(email);
        var retVal = true;
        var regEx = /^[a-zA-Z0-9._-]+@([a-zA-Z0-9.-]{2,})+\.[a-zA-Z]{2,4}$/;        
        if (email.search(regEx) === -1)
            retVal = false;
        return retVal;
    };

    var isValidPhone = function (phone) {
        if (phone.length === 0) return false;
        var regEx = /^(()?\d{3}())(-|\s)?\d{3}(-|\s)?\d{4}$/;
        var valid = true;
        if (phone.search(regEx) === -1) {
            valid = false;
        }
        return valid;
    };

    var isBoolean = function(value) {
        return value.toLowerCase === 'true';
    };

    function countDown(control, maxLen, counter) {
        var len = $(control).val().length;
        var txt = $(control).val();
        var div = $(counter);
        diff = maxLen - len;
        $(div).html(((diff > 0) ? diff : 0));
        if (len < maxLen - 10) return true; // no need to test
        if (len > maxLen) {
            $(control).val(txt.substring(0, maxLen));
            return false;
        }
        return true;
    };

    var isValidZipCode = function(zip) {
        if(zip.length == 5 && !isNaN(zip))
            return true;
        return false;
    };

    var getCityStateByZip = function (zip) {
        if (zip.length == 5) {
            var geocoder = new google.maps.Geocoder();
            geocoder.geocode({ 'address': zip }, function (result, status) {
                var state = "N/A";
                var city = "N/A";
                //start loop to get state from zip
                for (var component in result[0]['address_components']) {
                    for (var i in result[0]['address_components'][component]['types']) {
                        if (result[0]['address_components'][component]['types'][i] == "administrative_area_level_1") {
                            state = result[0]['address_components'][component]['short_name'];
                            // do stuff with the state here!
                            alert(state);
                            //$this.closest('tr').find('select').val(state);
                            // get city name
                            city = result[0]['address_components'][1]['long_name'];
                            // Insert city name into some input box
                            alert(city);
                        }
                    }
                }
            });
        }
    };

    return {
        ArrayContains: arrayContains,
        BuildVdpToolTip: buildVdpToolTip,
        RemoveToolTip: removeToolTip,
        ParseQueryString: parseQueryString,
        RemoveCommaFromNumber: removeCommaFromNumber,
        GenerateSearchQueryString: generateSearchQueryString,
        AdClickLogging: adClickLogging,
        ApplyForLoan: applyForLoan,
        UpdateAddressBar: updateAddressBar,
        ShowMap: showMap,
        IsBoolean: isBoolean,
        IsValidEmail: isValidEmail,
        IsValidPhone: isValidPhone,
        CountDown: countDown,
        IsValidZipCode: isValidZipCode,
        GetCityStateByZip: getCityStateByZip
    }
})();
var GoogleTracking = (function () {
    var setGoogleTrackingLinks = function () {
        var page = getPage().toLowerCase();
        switch (page) {
            case "home":
                homePageClicks();
                break;
            case "vehicle":
                searchFilterClicks();
                break;
            case "search":
                srpClicks();
                searchFilterClicks();
                break;
            case "finance":
                financeClicks();
                break;
            case "dealer":
                dealerClicks();
                break;

            case "build":
                buildClicks();
                break;
            case  "research":
                researchClicks();
                researchVehicles();
                break;
            case "newvehicle":
                newVehicleClicks();
                break;
            case "usedvehicle":
                usedVehicleClicks();
                break;
        }
        headerClicks();
        footerClicks();
    };
    var researchVehicles = function () {
        $(".lending-small .btn").analyticsEventTracking({
            category: "Research Vehicle Page",
            action: "Lite Lead",
            label: "Overview"
        });
        $("#large-button-login").analyticsEventTracking({
            category: "Research Vehicle Page",
            action: "Lite Lead",
            label: "Finance Section"
        });

        $("#large-button-login").on("click", function () {
            gtag('event', 'lite_lead_submitted', {
                AS_make_model: getMakeModel()
            });
        });

        $(".research-trim-link").analyticsEventTracking({
            category: "Research Vehicle Page",
            action: "Trim Selection",
            label: getTrimName
        });
        $("#side-menu li a").analyticsEventTracking({
            category: "Research Vehicle Page",
            action: "Sidebar Redirect",
            label: getRedirect
        });
        $(".colors li div").analyticsEventTracking({
            category: "Research Vehicle Page",
            action: "Color Select",
            label: getColor
        });
        $(".comparable-entry").analyticsEventTracking({
            category: "Research Vehicle Page",
            action: "Incentives Redirect",
            label: getComparableIncentive
        });
        $("#engine .comparable .details a").analyticsEventTracking({
            category: "Research Vehicle Page",
            action: "Engine Redirect",
            label: getComparableRedirect
        });
        $("#specs .comparable .details a").analyticsEventTracking({
            category: "Research Vehicle Page",
            action: "Specs Redirect",
            label: getComparableRedirect
        });
        $("#safety .comparable .details a").analyticsEventTracking({
            category: "Research Vehicle Page",
            action: "Safety Redirect",
            label: getComparableRedirect
        });
        $("#build a").analyticsEventTracking({
            category: "Research Vehicle Page",
            action: "Build Redirect",
            label: getMakeModel
        });
    };
    var getItemId = function() {
        return $(this).closest(".itemId").val();
    };
    var getMakeModel = function() {
        var make = $("#researchMakeName").val();
        var model = $("#researchModelName").val();
        return  make + " " + "|" + " " + model;
    };
    var getComparableRedirect = function () {
        return $(this).parent().find(".label").text();
    };
    var getComparableIncentive = function () {
        return $(this).find(".compare-name").text().trim().substring(5); //remove the year and space first
    };
    var getColor = function () {
        return $(this).closest("li").attr("data-color-name");
    };
    var getRedirect = function () {
        return $(this).text();
    };
    var getTrimName = function () {
        var trim = $(this).find(".research-trim-name").text();
        var make = $("#researchMakeName").val();
        var model = $("#researchModelName").val();
        return  make + "|" + model + "|" + trim;
    };
    var researchClicks = function () {
        $("#research-action button").analyticsEventTracking({
            category: "Research Page",
            action: "Researching Vehicle",
            label: getVehicleName
        });
        $('.information-article-link').analyticsEventTracking({
            category: "Research Page",
            action: "Article Viewed",
            label: getArticleName
        });
    };
    var getArticleName = function() {
        return $(this).closest(".information-article-link").text();
    };
    var getVehicleName = function() {
        var make = $("#research-makes .buttonText").text();
        var model = $("#research-models .buttonText").text();
        return make + " " + model;
    };
    var buildClicks = function() {
        
        $("#next-button").analyticsEventTracking({
            category: "Build Page",
            action: "Next Button Clicked"
        });
        $("#trimsButton").analyticsEventTracking({
            category: "Build Page",
            action: "Trims Clicked"
        });

        $("#stylesButton").analyticsEventTracking({
            category: "Build Page",
            action: "Styles Clicked"
        });
        $("#colorsButton").analyticsEventTracking({
            category: "Build Page",
            action: "Colors Clicked"
        });
        $("#optionsButton").analyticsEventTracking({
            category: "Build Page",
            action: "Options Clicked"
        });
        $("#summaryButton").analyticsEventTracking({
            category: "Build Page",
            action: "Summary Clicked"
        });
    };
    
    var dealerClicks = function() {

        $('a[data-role="view-inventory"]').analyticsEventTracking({
            category: "Dealer Search",
            action: "View Inventory Button Clicked",
            label: getDealerName
        });

        $('a[data-role="view-dealer-map"]').analyticsEventTracking({
            category: "Dealer Search",
            action: "Dealer Map Viewed",
            label: getDealerName
        });
    };

    var homePageClicks = function () {
        $("#MainSearchVehicleSelection #mainSearchButton").analyticsEventTracking({
            category: "Home Page",
            action: "Search Bar Triggered",
            label: getVehicleSearchText
        });

        $(".vehicle-type-item a").analyticsEventTracking({
            category: "Home Page",
            action: "Search By Vehicle Type Clicked",
            label: getVehicleType
        });

        $("#find-a-dealer-btn").analyticsEventTracking({
            category: "Home Page",
            action: "Dealer Search Clicked",
            label: getDealerSearchText
        });

        $("#MainSearchVehicleSelection #mainShopNewButton").analyticsEventTracking({
            category: "Home Page",
            action: "Shop New Button"
        });

        $("#MainSearchVehicleSelection #mainShopUsedButton").analyticsEventTracking({
            category: "Home Page",
            action: "Shop Used Button"
        });
    };

    var headerClicks = function () {
        $("#clientLogo").analyticsEventTracking({
            category: "Header",
            action: "Header Logo Clicked"
        });

        $("#navigation-bar-container a").analyticsEventTracking({
            category: "Header",
            action: getAnchorText
        });

        $("#savedNavTabButton").analyticsEventTracking({
            category: "Header",
            action: "Saved Vehicles List Clicked"
        });
    };

    var footerClicks = function () {
        $("#footerTopNew a").analyticsEventTracking({
            category: "Footer",
            action: "Top New Vehicles Clicked",
            label: getAnchorText
        });

        $("#footerTopUsed a").analyticsEventTracking({
            category: "Footer",
            action: "Top Used Vehicles Clicked",
            label: getAnchorText
        });

        $("#footerTopViewed a").analyticsEventTracking({
            category: "Footer",
            action: "Top Viewed Vehicles Clicked",
            label: getAnchorText
        });

        $(".bottom-footer a").analyticsEventTracking({
            category: "Footer",
            action: "Bottom Link Clicked",
            label: getAnchorText
        });
    };

    var srpClicks = function () {

        $(".button-save").analyticsEventTracking({
            category: "Search Results Listing",
            action: "Save Vehicle",
            label: getItemIdFromSaveButton
        });

        $(".close-result .fa-times").analyticsEventTracking({
            category: "Search Results Listing",
            action: "Remove Vehicle",
            label: getSearchItemId
        });

        $(".spotlightAds a").analyticsEventTracking({
            category: "Search Results Listing",
            action: "Spotlight Clicked",
            label: getSpotlightItemId
        });

        $(".spotlightAds a").analyticsEventTracking({
            category: "Search Results Listing",
            action: "Spotlight Clicked",
            label: getSpotlightItemId
        });
    };

    var financeClicks = function () {
        $("#afford-calculator-button").analyticsEventTracking({
            category: "Finance Page",
            action: "What Can I Afford Calculator - Button Clicked",
        });

        $("#monthly-payment-calculator-button").analyticsEventTracking({
            category: "Finance Page",
            action: "Monthly Payment Calculator - Button Clicked",
        });

        $("#monthly-inventory-search a.view-inventory-button").analyticsEventTracking({
            category: "Finance Page",
            action: "Monthly Payment Calculator - View Inventory Button Clicked",
        });

        $("#afford-inventory-search a.view-inventory-button").analyticsEventTracking({
            category: "Finance Page",
            action: "What Can I Afford Calculator - View Inventory Button Clicked",
        });

        $("a.loan-button").analyticsEventTracking({
            category: "Finance Page",
            action: "Apply for a Loan Clicked",
        });

        $(".information-articles-list a").analyticsEventTracking({
            category: "Finance Page",
            action: "Information Articles Clicked",
            label: getAnchorText
        });

        $("#research-tools-content a").analyticsEventTracking({
            category: "Finance Page",
            action: "Research Tools Clicked",
            label: getThirdPartyLinkText
        });

        $("#mainSearchButton").analyticsEventTracking({
            category: "Finance Page",
            action: "Vehicle Inventory Search Clicked",
            label: getFindACarMakeModel
        });

        $(".find-a-dealer-btn").analyticsEventTracking({
            category: "Finance Page",
            action: "Dealer Search Clicked",
            label: getDealerSearchText 
        });
    };

    var searchFilterClicks = function () {
        //Search Bar	Condition Filter	    Selection
        //Search Bar	Vehicle Type Filter	    Selection
        //Search Bar	Make Filter	            Selection
        //Search Bar	Model Filter	        Selection
        //Search Bar	Price Range Filter	    Selection
        //Search Bar	Year Range Filter	    Selection
        //Search Bar	Max Miles Filter	    Selection
        //Search Bar	Color Filter	        Selection
        //Search Bar	Distance Filter	        Selection
        //Search Bar	Location Filter	        Selection
        //Search Bar	Reset Filters Clicked	
        //Search Bar	Sort Order	            Selection
        //Search Bar	Search Triggered	
    };

    var setSearchByBodyTypeClicks = function () {
        //$(".search-item-by-body").find("img").each(function () {
        //    var $el = $(this);
        //    var value = $(this).next().text();
        //    $el.analyticsEventTracking({
        //        category: "Search Control",
        //        action: "body type",
        //        label: getPage()
        //    });
        //});
    };

    var setAdsClicks = function () {

    //    var $list = $(".vertical-ads-section, .horizontal-ads-section").find("img");
    //    var page = getPage();
    //    $list.attr("data-jaet-report-label", page);
    //    $list.each(function () {
    //        var $el = $(this);
    //        var value = $el.attr("data-adName");
    //        $el.attr("data-jaet-report-value", value);
    //    });
    //    $list.analyticsEventTracking({
    //        category: "Ad",
    //        action: "click"
    //    });
    };

    var setMoreSearchLinks = function () {
        //var $list = setEventDataAttrValue($("#make_tab_panel").find("a"));
        //$list.analyticsEventTracking({
        //    category: "Search Control",
        //    action: "pull-down",
        //    label: "Make"
        //});

        //$list = setEventDataAttrValue($("#price_tab_panel").find("a"));
        //$list.analyticsEventTracking({
        //    category: "Search Control",
        //    action: "pull-down",
        //    label: "Price"
        //});

        //$list = setEventDataAttrValue($("#payment_tab_panel").find("a"));
        //$list.analyticsEventTracking({
        //    category: "Search Control",
        //    action: "pull-down",
        //    label: "Payment"
        //});

        //$list = setEventDataAttrValue($("#bodytype_tab_panel").find("a"));
        //$list.analyticsEventTracking({
        //    category: "Search Control",
        //    action: "pull-down",
        //    label: "Body Type"
        //});

        //$list = setEventDataAttrValue($("#usage_tab_panel").find("a"));
        //$list.analyticsEventTracking({
        //    category: "Search Control",
        //    action: "pull-down",
        //    label: "Usage"
        //});
    };

    var getVehicleSearchText = function () {
        return $(this).closest('#MainSearchVehicleSelection').find('#mainSearchConditions span.buttonText').text() + " | " +
            $(this).closest('#MainSearchVehicleSelection').find('#mainSearchMakes span.buttonText').text() + " | " +
            $(this).closest('#MainSearchVehicleSelection').find('#mainSearchModels span.buttonText').text();
    }

    var getDealerSearchText = function () {
        return $(this).closest('.small-feature').find('span.dealer-make-text').text() + " | " +
            $(this).closest('.small-feature').find("input.find-a-dealer-input").val();
    }
    var getFindACarMakeModel = function () {
        return $(this).closest('#find-car-container').find('#mainSearchMakes .find-make-text').text() + " | " +
            $(this).closest('#find-car-container').find('#mainSearchModels .find-model-text').text();
    };

    var getDealerName = function () {
        return $(this).data("dealer-name");
    };

    var getSpotlightItemId = function() {
        return $(this).closest(".spotlight-Background").attr("data-item-id");
    };

    var getSearchItemId = function () {
        return $(this).closest(".search-result-item").attr("data-item-id");
    };

    var getItemIdFromSaveButton = function () {
        return $(this).attr("data-item-id");
    };

    var getThirdPartyLinkText = function () {
        return $(this).find("img").attr("alt");
    };

    var getItemIdFromUrl = function () {
        var url = $(this).attr("href");
        var split = url.split("/");
        return split[split.length - 1];
    };

    var getAnchorText = function () {
        return $(this).text();
    };

    var getVehicleType = function () {
        return $(this).find("img").attr("title");
    };

    var getPage = function () {
        var location = window.location.pathname.split("/");

        if (location[2] && location[2] == "Content" && location[3]) {
            return location[3];
        } else if (location[1]!= '') {
            return location[1];
        } else {
            return "home";
        }
    };

    var setEventDataAttrValue = function ($list) {
        $list.each(function () {
            $(this).attr("data-jaet-report-value", $(this).text());
        });
        return $list;
    };

    var newVehicleClicks = function () {
        $(".vehicle-type-item a").analyticsEventTracking({
            category: "New Car Selection Page",
            action: "Vehicle Type Selection",
            label: getVehicleType
        });
    };

    var usedVehicleClicks = function () {
        $(".vehicle-type-item a").analyticsEventTracking({
            category: "Used Car Selection Page",
            action: "Vehicle Type Selection",
            label: getVehicleType
        });

        $("#mainSearchButton").analyticsEventTracking({
            category: "Used Car Selection Page",
            action: "Make-Model Selection",
            label: getFindACarMakeModel
        });
    };

    return {
        SetGoogleTrackingLinks: setGoogleTrackingLinks,
        GetDealerName: getDealerName,
        GetThirdPartyLinkText: getThirdPartyLinkText,
        GetItemIdFromSaveButton: getItemIdFromSaveButton
    };
})();
var SearchResults = SearchResults || {};
var GoogleTracking = GoogleTracking || {};

var Global = (function () {
    var disableSrpHover = true;
    var mindistance = 5;
    var maxdistance = 250;
    var defaultdistance = 100;
    var distanceincrement = 5;
    var currentSearchCall;
    var loading;
    var executeSearch = true;
    var selectedTrimUrl = null;
    var selectedTrimId = null;
    var redirectLocation = $("#redirect-location");
    var searchUrl = window.location.protocol + '//' + window.location.host + '/UsedVehicle';
    var researchUrl = window.location.protocol + '//' + window.location.host + '/NewVehicle';

    var init = function (disableMouseHover) {
        disableSrpHover = disableMouseHover;

        $('body').on('hidden.bs.popover', function (e) {
            $(e.target).data("bs.popover").inState.click = false;
        });


        $('.dropdown-menu').on('click', function (e) {
            if ($(this).hasClass('dropdown-menu-form')) {
                e.stopPropagation();
            }
        });
        $('.close-dropdown').click(function () {
            $('[data-toggle="dropdown"]').parent().removeClass('open');
        });
        setUpZipSave();
        validateZipCode();
        //refresh saved vehicles related content every 15 sec
        setInterval(function () {
            updateSavedItemsCount();
            updateSaveButtonStatus();
        }, 3600000);

        $("a#new-search").on("click", function () {
            var loc = $(this).data("href");
            SearchResults.RemoveExcludedList();
            document.location.href = loc;
        });

        // Initialize the Preview Bar
        previewInit();
        GoogleTracking.SetGoogleTrackingLinks();

        if (!Array.prototype.indexOf) {
            Array.prototype.indexOf = function (obj, start) {
                for (var i = (start || 0), j = this.length; i < j; i++) {
                    if (this[i] === obj) { return i; }
                }
                return -1;
            };
        }

        $(document).scroll(function () {
            var $target = $("#header-shadow");
            var st = $(this).scrollTop();
            if (st <= 100) {
                $target.hide();
            } else {
                $target.show();
            }
        });
    };

    var setUserEnabledAp = function (value) {
        var cookieName = "user-enabled-ap";
        var expire = new Date();
        expire.setDate(expire.getDate() + 1);
        $.cookie(cookieName, value, { expires: expire, path: "/", secure: true });
    };

    var setUpZipSave = function () {
        var cookieName = "user-zip";
        var cookie = $.cookie(cookieName);

        $("#used-header").on("click", function () {
            if (!cookie) {
                event.preventDefault();
                redirectLocation.val("search");
                $("#zipModul").modal("show");
            }
            else {
                window.location = searchUrl;
            }
        });
        
        $('button[data-action-type="shopUsed"]').on("click", function () {
            var cookieName = "user-zip";
            var cookie = $.cookie(cookieName);
            if (!cookie) {
                redirectLocation.val("search");
                $("#zipModul").modal("show");
            }
            else {
                window.location = searchUrl;
            }
        });
        $('button[data-action-type="shopNew"]').on("click", function () {
            var cookieName = "user-zip";
            var cookie = $.cookie(cookieName);
            if (!cookie) {
                redirectLocation.val("research");
                $("#zipModul").modal("show");
            }
            else {
                window.location = researchUrl;
            }
        });
        $("#new-header").on("click", function () {
            var cookieName = "user-zip";
            var cookie = $.cookie(cookieName);
            if (!cookie) {
                event.preventDefault();
                redirectLocation.val("research");
                $("#zipModul").modal("show");
            } else {
                window.location = researchUrl;
            }
        });
        $("#zipCodeButton").on("click", function () {
            redirectLocation.val("none");
        });
        setZipText();
        $("#save-zip-code").on("click", function () {
            clickSaveZip();
            setZipModalRedirect(redirectLocation.val());
        });
        $('#zipModul').on("hidden.bs.modal", function () {
            clickSaveZip();
            setZipModalRedirect(redirectLocation.val());
        });
    };

    var setZipModalRedirect = function (redirectLoc) {
        if (redirectLoc === "search") {
            window.location = searchUrl;
        }
        else if (redirectLoc === "research") {
            window.location = researchUrl;
        }
    };

    var setZipText = function () {
        var cookieName = "user-zip";
        var cookie = $.cookie(cookieName);
        if (cookie) {
            $("#header-zip").text(cookie);
            $(".zip-input").val(cookie);
        }
    };
    var clearSelected = function () {
        $('#selected-make-value').val(null);
        $('#selected-body-type-value').val(null);
        $('#selected-model-value').val(null);
        $('#select-querystring').val(null);
    };

    var selectMake = function (make) {
        $('#selected-make-value').val(make);
    };

    var selectBodyType = function (model) {
        $('#selected-body-type-value').val(model);
    };

    var selectModel = function (model) {
        $('#selected-model-value').val(model);
    };

    var selectQueryString = function (queryString) {
        $('#select-querystring').val(queryString);
    };

    var selectMakeOnly = function (make) {
        clearSelected();
        selectMake(make);
    };

    var selectQuery = function (queryString) {
        clearSelected();
        selectQueryString(queryString);
    };

    var clickSaveZip = function () {
        validateZipCode();
        if (isValidZipCode($("#zip-input").val())) {
            $("#zipModul").modal("hide");
            setZipText();
            var cookieName = "user-zip";
            var $target = $("#zip-input");
            var expire = new Date();
            expire.setDate(expire.getDate() + 1);
            $.cookie(cookieName, $target.val(), { expires: expire, path: "/", secure: true });
        }
    };
    var previewInit = function () {
        $("#sticky-preview-bar").sticky({ topSpacing: 5 });

        $("#liveSiteButton").on("click", function () {
            turnOffPreview();
        });
    };

    var turnOffPreview = function () {
        var mainUrl = window.location.protocol + '//' + window.location.host + '/';
        var url = mainUrl + "Preview/TurnOffPreviewMode/";
        $.ajax({
            url: url,
            dataType: "json",
            type: "GET",
            success: function (results) {
                if (results.Success === 1) {
                    if (window.event) {
                        window.event.returnValue = false;
                    }

                    document.location.href = "/";
                }
            }
        });
    };

    var validateZipCode = function () {
        var cookieName = "user-zip";
        var $target = $("#zip-input");
        var cookie = $.cookie(cookieName);
        if (cookie) {
            $target.val(cookie);
        }
        $target.data("original-value", $target.val());
        $target.on("blur", function () {
            if (isValidZipCode($target.val())) {
                cookie = $.cookie(cookieName, $target.val(), { path: "/", secure:  true });
            } else {
                // show the error
                $target.addClass("input-validation-error").css("color", "#B94A48");
            }
        }).on("focus", function () {
            $target.removeClass("input-validation-error").css("color", "#000000");
        });
    };

    var checkZipCode = function () {
        var cookieName = "user-zip";
        var $target = $("#find-dealer-group").find("input.find-a-dealer-input");
        var cookie = $.cookie(cookieName);
        if (cookie) {
            $target.val(cookie);
        }
        $target.data("original-value", $target.val());
        $target.on("blur", function () {
            if (isValidZipCode($target.val())) {
                // set the zipcode cookie
                if ($target.data("original-value") !== $target.val()) {
                    cookie = $.cookie(cookieName, $target.val(), { path: "/", secure:true  });
                }
            } else {
                // show the error
                $target.addClass("input-validation-error").css("color", "#B94A48");
            }
        }).on("focus", function () {
            $target.removeClass("input-validation-error").css("color", "#000000");
        });
    };

    var isValidZipCode = function (value) {
        if (value.toString().length === 5 && $.isNumeric(value)) {
            return true;
        }
        return false;
    };

    var loadSavedItems = function () {
        $('#loadedSavedVehicles').hide();
        Loader.ShowLoader('#savedVehicle-container');
        var page = window.location.protocol + '//' + window.location.host + '/' + 'Vehicle/SavedVehicles';
        $('#loadedSavedVehicles').load(page, function () {
            Loader.HideLoader();
            $(".loader-mask").promise().done(function () {
                updateSavedItemsCount();
                $('#loadedSavedVehicles').show();
                selectCompareSavedVehicle(this);
            });
        });
    };

    var removeSavedItem = function (itemId) {
        var cookieName = "SavedItems";
        var cookie = $.cookie(cookieName);
        var savedItems = [];
        var index = -1;
        if (typeof cookie != 'undefined') {
            savedItems = JSON.parse(cookie);
        }

        index = savedItems.indexOf(itemId);

        if (index != -1) {
            savedItems.splice(index, 1);
            $.cookie(cookieName, JSON.stringify(savedItems), { path: '/', secure: true });
            updateSavedItemsCount();

            if (countSavedItems() == 0) {
                $('#loadedSavedVehicles').empty();
                $('#loadedSavedVehicles').html('<div class="noSavedVehicles">You have no saved vehicles</div>');
            }
            updateSaveButtonStatus(itemId);
            $('#vehicleItem-' + itemId).remove();
        }
        selectCompareSavedVehicle(this);
    };

    var saveItem = function (itemId) {
        var cookieName = "SavedItems";
        var cookie = $.cookie(cookieName);
        var savedItems = [];

        if (typeof cookie != 'undefined') {
            savedItems = JSON.parse(cookie);
        }

        if (savedItems.indexOf(itemId) != -1) {
            return false;
        }

        if (savedItems.length >= 5) {
            updateSaveButtonStatus(savedItems[0]);
            savedItems.shift(); //Remove oldest/first item
        }
        savedItems.push(itemId);
        $.cookie(cookieName, JSON.stringify(savedItems), { path: '/' });
        return true;
    }

    var countSavedItems = function () {
        var cookieName = "SavedItems";
        var cookie = $.cookie(cookieName);
        var count = 0;

        if (typeof cookie != 'undefined') {
            var searchItems = JSON.parse(cookie);
            var searchItemsModel = {
                searchItems: searchItems
            };
            var mainUrl = window.location.protocol + '//' + window.location.host + '/';
            var url = mainUrl + "Vehicle/FindActiveVehicles/";

            $.ajax({
                url: url,
                cache: false,
                async: true,
                dataType: 'json',
                type: "POST",
                contentType: "application/json; charset=utf-8",
                data: JSON.stringify(searchItemsModel),
                success: function (data) {
                    searchItems = data.ActiveIds;
                    $.cookie(cookieName, JSON.stringify(searchItems), { path: '/' });
                }
            });

            count = searchItems.length;
        }

        return count;
    }

    var saveSelectedItem = function (elem, isVdpPage) {
        var $elem = $(elem);
        var itemId = $elem.data("item-id");
        if (saveItem(itemId)) {
            if (disableSrpHover == true || isVdpPage == true) {
                $elem.text("Saved").addClass("button-saved").find("i").hide();
            }
            else {
                $elem.addClass("button-saved").find("i").removeClass("fa-heart-o").addClass("fa-heart");
            }
            updateSavedItemsCount();
        }
    }

    var updateSaveButtonStatus = function (itemId) {
        var item = 0;
        if (typeof itemId != "undefined") {
            //Update button on SRP
            item = $('div#search-results').find("#search-result-" + itemId);
            if (disableSrpHover) {
                var button = item.find('div.search-results-buttons button[data-item-id="' + itemId + '"]');
                button.html('<i class="fa fa-plus"></i> Save').addClass("button-save").removeClass("button-saved").show();
            }
            else {
                var button = item.find('div.section-right button[data-item-id="' + itemId + '"]');
                button.html('<i class="save-icon fa fa-heart-o"></i>').addClass("button-save").removeClass("button-saved").show();
            }

            //Update button on VDP
            button = $('div.meta-data').find('button[data-item-id="' + itemId + '"]');
            button.html('<i class="fa fa-plus"></i> Save').addClass("button-save").removeClass("button-saved").show();

        }
        else {
            var cookieName = "SavedItems";
            var cookie = $.cookie(cookieName);
            var count = 0;
            if (typeof cookie != 'undefined') {
                var searchItems = JSON.parse(cookie);
                //Update all Button statuses of vehicles that are no longer saved
                $("button.button-saved").each(function () {
                    item = $(this).data("item-id");
                    if (searchItems.indexOf(item) == -1) {
                        if (disableSrpHover) {
                            $(this).html('<i class="fa fa-plus"></i> Save').addClass("button-save").removeClass("button-saved").show();
                        }
                        else {
                            $(this).html('<i class="save-icon fa fa-heart-o"></i>').addClass("button-save").removeClass("button-saved").show();
                        }
                    }
                });
                //Update all Button statuses of vehicles that were recently saved
                $("button.button-save").each(function () {
                    item = $(this).data("item-id");
                    if (searchItems.indexOf(item) != -1) {
                        if (disableSrpHover) {
                            $(this).text("Saved").addClass("button-saved").find("i").hide();
                        }
                        else {
                            $(this).addClass("button-saved").find("i").removeClass("fa-heart-o").addClass("fa-heart");
                        }
                    }
                });
            }
        }
    };

    var updateSavedItemsCount = function () {
        var count = countSavedItems();
        $('.vehicleSaveCount').text(count);
    };

    var setScrollUp = function () {
        $.scrollUp({
            scrollName: "scroll-to-top",
            scrollFrom: "top",
            scrollSpeed: 500,
            easingType: "linear",
            animation: "slide",
            animationInSpeed: 200,
            animationOutSpeed: 200,
            scrollTrigger: false,
            scrollText: '<i class="fa fa-chevron-up"></i>',
            zIndex: 2147483647
        });
    };

    var redirect = function (path, openInNewWindow) {
        if (!path)
            return;

        if (openInNewWindow)
            window.open(path);
        else
            window.location.assign(path);

        return false;
    };

    var emailConfirmationShow = function () {
        $("#email-confirmation").modal("show");
    }


    var emailConfirmationHide = function () {
        $("#email-confirmation").modal("hide");
        $('.modal-backdrop').removeAttr('style');
    };

    var compareSavedVehicles = function () {
        var selectedVehicles = [];

        $('div.savedVehicleItem.selected').each(function () {
            selectedVehicles.push($(this).data("item-id"));
        });

        var url = window.location.protocol + '//' + window.location.host + '/' + 'Compare/Index?itemIds=' + selectedVehicles.join('|');
        redirect(url, false);
    };

    var selectCompareSavedVehicle = function (elem) {
        var $elem = $(elem);
        if ($elem.hasClass('fa-check-square-o')) {
            $elem.parents('.savedVehicleItem').removeClass('selected');
            $elem.removeClass("selected fa-check-square-o").addClass("fa-square-o");
        } else {
            $elem.parents('.savedVehicleItem').addClass('selected');
            $elem.addClass("selected fa-check-square-o").removeClass("fa-square-o");
        }

        var count = $(".vehicleSavedContainer .fa-check-square-o").length;
        if (count < 2 || count > 3) {
            $('#saved-vehicle-compare').attr("disabled", "disabled");
        }
        else {
            $('#saved-vehicle-compare').removeAttr("disabled");
        }
    };

    var closeQuoteRequest = function () {
        $("#RequestQuoteForm").modal("hide");
    };

    var sendQuoteRequest = function () {
        var contactValid = true;
        var nameValid = true;
        var dealerValid = true;
        var $target;
        $target = $("#Lead_WebUserName");

        if ($target.val().length === 0) {
            nameValid = false;
            $target.addClass("vdp-field-error");
            $target.tooltip({ placement: 'left', trigger: 'manual' }).tooltip('show');
        }

        var selectedDealers = [];
        $('.dealerchk:checked').each(function () {
            selectedDealers.push($(this).val());
        });

        if (selectedDealers.length === 0) {
            dealerValid = false;
            $target = $("#submit-request");
            $target.tooltip({ placement: 'left', trigger: 'manual' }).tooltip('show');
        }

        $target = $("#Lead_WebUserContact");
        var value = $target.val();
        contactValid = Utils.IsValidEmail(value);
        if (!contactValid) {
            contactValid = Utils.IsValidPhone(value);
        }

        if (!contactValid) {
            $target.addClass("vdp-field-error");
            $target.tooltip({ placement: 'left', trigger: 'manual' }).tooltip('show');
        }

        if (nameValid) {
            $target = $("#Lead_WebUserName");
            $target.removeClass("vdp-field-error");
            $target.tooltip("destroy");
        }

        if (contactValid) {
            $target = $("#Lead_WebUserContact");
            $target.removeClass("vdp-field-error");
            $target.tooltip("destroy");
        }

        if (dealerValid) {
            $target = $("#submit-request");
            $target.tooltip("destroy");
        }

        if (contactValid && nameValid && dealerValid && !loading) {
            showLoader('.request-quote-section');
            submitQuoteRequest();
            $('#submit-request').attr('disabled', 'disabled');
            $('.modal-backdrop').css("z-index", "1051");
            $('#loadingModal').css("z-index", "1052");
            $('#email-confirmation').css('z-index', '1052');
        } else {
            setTimeout(function () {
                $('#SubmitQuoteForm').find('.vdp-field-error').first().focus();
            }, 300);
        }
    };

    var submitQuoteRequest = function () {
        var selectedDealers = [];
        $('.dealerchk:checked').each(function () {
            selectedDealers.push($(this).val());
        });

        var $form = $('#SubmitQuoteForm');
        var url = $form.attr("action");

        var dataToSend =
        {
            ClientWebsiteId: $('#Lead_ClientWebsiteId').val(),
            WebUserName: $('#Lead_WebUserName').val(),
            WebUserContact: $('#Lead_WebUserContact').val(),
            Comment: $('#Lead_Comment').val(),
            SendCopy: $('#Lead_SendCopy').is(":checked"),
            ContactWhenAvailable: $('#Lead_ContactWhenAvailable').is(":checked"),
            ContactAM: $('#Lead_ContactAM').is(":checked"),
            ContactPM: $('#Lead_ContactPM').is(":checked"),
            DealerIds: selectedDealers.join(","),
            Make: $('#Lead_Make').val(),
            Model: $('#Lead_Model').val(),
            Year: $('#Lead_Year').val()
        }

        $.ajax({
            type: "POST",
            url: url,
            data: dataToSend,
            cache: false,
            success: function (result) {
                var $p = $("#email-confirmation").find("p");

                if (result != null && result.Success) {
                    $p.text('Thank you. Your information has been sent and the dealership will be contacting you shortly.');
                    closeQuoteRequest();

                    $(".test-drive-input").fadeOut(500, function () {
                        $(".sent-referral-message").fadeIn(500);
                    });
                }
                else {
                    $p.text('There was an error submitting your request');
                    $('#submit-request').removeAttr('disabled');
                }

                hideLoader();
                $('#loadingModal').modal("hide");
                Global.EmailConfirmationShow();

                $('.referral-sent').show();
            }
        });
    }

    var noThanksOptOut = function () {
        var cookieName = "user-zip";
        var zipCode = $.cookie(cookieName);
        $('.dealerchk').removeAttr('checked');
        $('.optionalchk').removeAttr('checked');
        $('#Lead_WebUserContact').val('');
        $('#Lead_Comment').val('');
        $('#Lead_WebUserName').val('');
        $('#submit-request').removeAttr('disabled');
        $('#CommentCounter').text('1500');
        $("#RequestQuoteForm").modal('show');
        updateRequestQuotePartial(zipCode);
        $("#header-zip").text(zipCode);
        $(".zip-input").val(zipCode);
        //Global.SetUserEnabledAp(false);
    }

    var updateRequestQuotePartial = function (zipCode) {
        $("#zip-textbox").on("focusout", getDealers);

        Loader.ShowLoader('#ResearchRequestQuoteDealers');

        var make = $('#Lead_Make').val();
        var model = $('#Lead_Model').val();
        var year = $('#Lead_Year').val();

        $.ajax({
            type: "GET",
            cache: false,
            data: { year: year, make: make, model: model, location: zipCode },
            url: window.location.protocol + '//' + window.location.host + '/research/DealerList'
        }).done(function (content) {
            let cleanContent = DOMPurify.sanitize(content);
            var $dealers = $('#ResearchRequestQuoteDealers');
            $dealers.fadeOut(500, function () {
                $dealers.html(cleanContent);
                $dealers.fadeIn(500, function () {
                    hideLoader();
                    loadSliders();
                    $("#zip-textbox").focusout(function () { getDealers(); });
                });
                var cookieName = "user-zip";
                $.cookie(cookieName, zipCode, { path: "/", secure: true });
            });
        });
    };

    var hideLoader = function () {
        loading = false;
        Loader.HideLoader();
    };

    var showLoader = function (elem) {
        loading = true;
        Loader.ShowLoader(elem);
    };

    var loadSliders = function () {

        $("#distance-slider").slider({
            range: false,
            min: mindistance / distanceincrement,
            max: maxdistance / distanceincrement + 1,
            values: [getDistance() / distanceincrement],
            slide: function (event, ui) {
                var distanceText = (ui.values[0] * distanceincrement == maxdistance + distanceincrement) ? 'Nationwide' : ui.values[0] * distanceincrement + ' mi';

                $("#distance-text").val(distanceText);

                var $button = $(this).parents('.dropdown-menu-form').siblings("button.dropdown-toggle").first();
                var $buttonText = $button.find('span.selected-values');

                $buttonText.html(distanceText);
                $button.addClass('selected');
            },
            stop: function () {
                refreshAddressBar();
            }
        });
        var distanceSliderVal = $("#distance-slider").slider("values", 0);
        $("#distance-text").val((distanceSliderVal * distanceincrement == maxdistance + distanceincrement) ? 'Nationwide' : distanceSliderVal * distanceincrement + ' mi');

        $('.close-dropdown').click(function () {
            $('[data-toggle="dropdown"]').parent().removeClass('open');
        });

    };

    var refreshAddressBar = function () {
        getDealers();
    };

    var getDistance = function () {
        var distance = $('#request-quote-distance').text();
        var current = 0;
        if (distance.length > 0) {
            if (distance == 'Nationwide') {
                current = maxdistance + 1;
            } else {
                current = parseInt(distance.replace(' mi', ''));
            }
            return current;
        }
        return 0;
    };

    var getDealers = function () {
        var make = $('#Lead_Make').val();
        var model = $('#Lead_Model').val();
        var year = $('#Lead_Year').val();
        var zip = $("#zip-textbox").val();
        $("#header-zip").text(zip);
        $(".zip-input").val(zip);
        if (zip != "") {
            $.ajax({
                type: "GET",
                cache: false,
                data: { year: year, make: make, model: model, location: zip, distance: getDistance() },
                url: window.location.protocol + '//' + window.location.host + '/research/RefreshDealerList'
            }).done(function (content) {
                let cleanContent = DOMPurify.sanitize(content);
                $("#ResearchRequestDealerSelection").remove();
                $("#quote-dealers").html(cleanContent);
            });
        }
    };

    return {
        CheckZipCode: checkZipCode,
        EmailConfirmationShow: emailConfirmationShow,
        EmailConfirmationHide: emailConfirmationHide,
        Init: init,
        IsValidZipCode: isValidZipCode,
        TurnOffPreview: turnOffPreview,
        LoadSavedItems: loadSavedItems,
        SaveItem: saveItem,
        SaveSelectedItem: saveSelectedItem,
        SetScrollUp: setScrollUp,
        RemoveSavedItem: removeSavedItem,
        UpdateSavedItemsCount: updateSavedItemsCount,
        Redirect: redirect,
        CompareSavedVehicles: compareSavedVehicles,
        ValidateZipCode: validateZipCode,
        SelectCompareSavedVehicle: selectCompareSavedVehicle,
        SelectMake: selectMake,
        SelectModel: selectModel,
        SelectBodyType: selectBodyType,
        SelectMakeOnly: selectMakeOnly,
        ClearSelected: clearSelected,
        SetUserEnabledAp: setUserEnabledAp,
        CloseQuoteRequest: closeQuoteRequest,
        NoThanksOptOut: noThanksOptOut,
        SendQuoteRequest: sendQuoteRequest,
        SelectQuery: selectQuery,
        SelectQueryString: selectQueryString
    };
})();

var Loader = (function() {
    var showLoader = function (elem) {
        var $loader = $(".loader-mask");
        if (elem) {
            $loader = $(elem).find(".loader-mask");
        }
        if (Modernizr.cssanimations) {
            $loader.find(".bouncer").each(function() {
                var $elem = $(this)[0];
                if ($elem.style.animationPlayState) {
                    $elem.style.animationPlayState = "running";
                }
                if ($elem.style.WebkitAnimationPlayState) {
                    $elem.style.WebkitAnimationPlayState = "running";
                }
            });
        }

        //var $textHolder = $loader.find(".loader-text");
        //$loader.find(".high-end, .low-end").hide();
        $loader.fadeIn(100);
    };

    var hideLoader = function() {
        $(".loader-mask").fadeOut(500);
        if (Modernizr.cssanimations) {
            $(".bouncer").each(function () {
                var $elem = $(this)[0];
                if ($elem.style.animationPlayState) {
                    $elem.style.animationPlayState = "paused";
                }
                if ($elem.style.WebkitAnimationPlayState) {
                    $elem.style.WebkitAnimationPlayState = "paused";
                }
            });
        }
    };

    return {
        ShowLoader: showLoader,
        HideLoader: hideLoader
    }
})();
var Research = (function () {
    var mindistance = 5;
    var maxdistance = 250;
    var defaultdistance = 100;
    var distanceincrement = 5;
    var currentSearchCall;
    var loading;
    var executeSearch = true;
    var selectedTrimUrl = null;
    var selectedTrimId = null;

    var yearDefaultList = null;
    var makeDefaultList = null;
    var modelDefaultList = null;

    var initDetails = function () {
        var showInterstitialPrompt = $("#researchShowInterstitial").data("showprompt");
        //if (showInterstitialPrompt.toLowerCase() === "true") {
        //    $("#optOutDialog").modal("show");
        //}
        $("#tabs").tabs();
        $("[placeholder]").placeholder();

        $(".login-form").find(".button-primary").on("click", function () {
            submitCreditUnionForm(this);
        });

        var cookie = $.cookie("lite-lead");
        if (cookie) {
            $(".login-form").hide();
            $(".lending-email").text(cookie);
            $(".login-data").show();
        }

        $('html').on('click', function (e) {
            if (typeof $(e.target).data('original-title') == 'undefined') {
                $('[data-toggle="popover"]').popover('hide');
            }
        });

        $(".overview-msrp").tooltip({ placement: 'right' });
        $(".invoice-price-container").tooltip({ placement: 'left' });
        resizeNoImage();
        initWordCloud();
        showIncentiveInfo();

        if ($("html").hasClass("no-multiplebgs")) {
            $("#engine").css({ "background": "#000000" });
            $("#specs").css("background", "#000000");
        }

        var $firstColor = $('.colors li').first();
        if ($firstColor.length) {
            loadColorSwatchImage($firstColor.data('color'));
            $(".color-name").find("h2").text($firstColor.data("color-name"));
        }
        bindRequestQuoteActions();
        loading = false;

        var testDriveButton = $('#ResearchRequestQuoteButton, #research-test-drive-button');
        testDriveButton.on('click', readyToTestDrive);

        var zipCodeCookie = $.cookie("user-zip");
        if (zipCodeCookie) {
            $("#research-zip").text(zipCodeCookie);
        }

        retrieveCashIncentive();
        $("#save-zip-code").on("click", function () {
            var zipCode = $('input#zip-input').val().trim();
            if (Global.IsValidZipCode(zipCode)) {
                $("#research-zip").text(zipCode);
                retrieveCashIncentive();
            }
        });
    };

    var bindRequestQuoteActions = function () {
        $("#Lead_Comment").keyup(function () {
            return Utils.CountDown($(this), 1500, $("#CommentCounter"));
        });
    }

    var getInventory = function () {
        $.ajax({
            type: "GET",
            cache: false,
            url: window.location.protocol + '//' + window.location.host + '/Research/GetInventory'
        }).done(function (content) {
            var $inventory = $('#inventory');
            var $inventoryDrop = $('#inventory-navbar');
            $inventory.fadeOut(500, function () {
                if (content != "") {
                    let cleanContent = DOMPurify.sanitize(content);
                    $inventory.html(cleanContent);
                    $inventoryDrop.show();
                    $inventory.fadeIn(500, function () {
                        $('[data-spy="scroll"]').each(function () {
                            $(this).scrollspy('refresh');
                        });
                    });
                }
            });
            resizeNoImage();
            Research.NavBarSet();

            $('.research-more-info-button').on('focusin focusout mouseout', function (event) {

                if (event.type == 'focusin') {
                    $(this).parents('.inventory-box-shadow').addClass('hover');
                } else {
                    $(this).parents('.inventory-box-shadow').removeClass('hover')
                }
            });

        });
    };

    var inventoryHover = function () {
    };

    var initResearchSlider = function () {
        setUpSlider();
        $.when(setupColorSwatches()).then(function () {
            $(".color-swatches").css("display", "inline-block");
        });
    };

    var setUpSlider = function () {
        var enableDirectionNav = false;
        if ($("#gallery-image-list li").length > 1) {
            enableDirectionNav = true;
        }
        var slider = $('#galleryslider');
        slider.flexslider({
            animation: "fade", // Must use "fade" because "slide" breaks the slider
            directionNav: enableDirectionNav,
            controlNav: true,
            startAt: 0,
            slideshow: false,
            prevText: "previous",
            nextText: "Next",
            start: function (obj) {
            },
            before: function (obj) {
            }
        });
        $(".flex-slider").show();

        var enableTrimNav = true;
        var trimSlider = $('#premierTrimSlider');
        trimSlider.flexslider({
            animation: "slide", // Must use "fade" because "slide" breaks the slider
            directionNav: enableTrimNav,
            startAt: 0,
            controlNav: false,
            slideshow: false,
            move: 1,
            itemWidth: 253,
            itemMargin: 0,
            minItems: 2,
            maxItems: 4,
            start: function (obj) {
            },
            before: function (obj) {
            }
        });
        $(".premierTrimContainer").show();

        $(".trimTypeButton").first().addClass('selectedTrim');
        selectedTrimUrl = $(".trimTypeButton").first().data("trim-url");

        $(".trimTypeButton").click(function () {
            $(".trimTypeButton").removeClass('selectedTrim');
            $(this).addClass('selectedTrim');
            selectedTrimUrl = $(this).data("trim-url");
            selectedTrimId = $(this).data("trim-style-id");
        });

        $(".trimTypeButton").click(function () {
            var cid = $(this).data("trim-style-id");
            $.ajax({
                url: "/KBBService/GetKBBVehicleIdByCid/?cid=" + cid,
                cache: false,
                type: "GET",
                datatype: "json",
                success: function (data) {
                    if (data && data["kbbid"]) {
                        console.log(data["kbbid"]);
                        KBBPriceAdvisor.SetVID(data["kbbid"]);
                    }
                    else {
                        KBBPriceAdvisor.SetVID("000000");
                    }
                    KBBPriceAdvisor.ReloadVID();
                }
            });
        });
    };

    var setupColorSwatches = function () {
        $(".color-swatches").find("li").each(function () {
            var $el = $(this);
            var color = $el.data("color").toLowerCase();
            $el.find("div").css("backgroundColor", color).end().on("click", function () {
                var colorString = $(this).data("color-name");
                var colorCode = $(this).data("color");
                Loader.ShowLoader($('.color-swatches .img-holder'));
                $.when(loadColorSwatchImage(colorCode)).done(function () {
                    $(".color-name").find("h2").text(colorString);
                });
            });
        });
    };

    var loadColorSwatchImage = function (colorCode) {
        var dataToSend = {
            year: $('input#researchYearName').val(),
            make: $('input#researchMakeName').val(),
            model: $('input#researchModelName').val(),
            colorCode: colorCode.replace("#", "")
        };

        $.ajax({
            url: "/Research/GetSelectedColorVehicleImages",
            data: dataToSend,
            cache: false,
            type: "GET",
            datatype: "json",
            success: function (result) {
                let cleanContent = DOMPurify.sanitize(result.imgUrl);
                $('.color-swatches .img-holder #color-vehicle-img').attr('src', cleanContent);
                Loader.HideLoader($('.color-swatches .img-holder'));
            }
        });
    };

    var validateLeadForm = function ($form) {
        jQuery.validator.addMethod("validEmail", function (value, element) {
            if (value === "") return false;
            if (!Utils.IsValidEmail(value)) {
                return false;
            }
            return true;
        }, "");

        var position = "bottom";
        if ($form.hasClass("form-large")) {
            position = "bottom";
        }

        $form.validate({
            errorClass: "input-error",
            rules: {
                email: {
                    validEmail: true
                }
            },
            invalidHandler: function (event, validator) {
                var errors = validator.numberOfInvalids();
                if (errors) {
                    const errorDiv = document.getElementById('email-validation-message');
                    errorDiv.style.display = 'block';
                    const emailField = document.getElementById('large_email');
                    emailField.focus();
                }
            }
        });
    }

    var submitCreditUnionForm = function (elem) {
        var $form = $(elem).parents("form");
        validateLeadForm($form);
        if ($form.valid()) {
            $('#large-button-login').attr('disabled', 'disabled');
            var dataToSend = $form.serialize();
            $.ajax({
                url: "/Research/SubmitCreditUnionForm/",
                data: dataToSend,
                type: "POST",
                dataType: "json",
                cache: false,
                success: function (results) {
                    var $target = $(".login-data");
                    if (results.Success === 1) {
                        $target.find(".lending-email").text(results.Email);
                        $target.find(".data").show();
                        $(".login-form").fadeOut(500, function () {
                            $(".login-data").fadeIn(500);
                            $('#large-button-login').removeAttr('disabled');
                        });
                    } else {
                        var $err = $("p.lending-error");
                        $err.text(results.Message).fadeIn(500);
                        $('#large-button-login').removeAttr('disabled');
                    }
                }
            });
        }
    };

    var isValidResearchModalForm = function () {
        var make = $('#research-makes-modal').find('.buttonText').text().toLowerCase();
        if (make === 'make') {
            return false;
        }

        var model = $('#research-models-modal').find('.buttonText').text().toLowerCase();
        if (model === 'model' || model === 'select model') {
            return false;
        }

        var year = $('#research-years-modal').find('.buttonText').text().toLowerCase();
        if (year === 'select year') {
            return false;
        }
        return true;
    };

    var checkActionButton = function () {
        window.setTimeout(function () {
            var $button = $('#research-action-modal button');
            if (isValidResearchModalForm()) {
                $button.removeProp('disabled');
            } else {
                $button.prop('disabled', 'disabled');
            }
        }, 250);
    };

    var getAvailableModelYears = function () {
        var make = $('#research-makes-modal').find('.buttonText').text();
        var model = $('#research-models-modal').find('.buttonText').text();
        $.ajax({
            url: '/Research/GetYearsForModel/?make=' + make + '&model=' + model,
            dataType: 'json',
            type: 'GET',
            success: function (data) {
                var $holder = $('#research-years-modal');
                var $target = $holder.find('ul.dropdown-menu');
                $target.empty();
                for (var i = 0; i < data.length; i++) {
                    var $li = $('<li/>');
                    var $a = $('<a/>');
                    $a.text(data[i]).on('click', function () {
                        $holder.find('.buttonText').text($(this).text());
                        checkActionButton();
                    });
                    $target.append($li.append($a));
                }

                $('#research-action-modal button').prop('disabled', 'disabled');
                $holder.find('button').removeProp('disabled').find('.buttonText').text('Select Year');
            }
        });
    };

    var getResearchModelsModal = function (elem) {
        var $elem = $(elem);
        var make = $elem.text();
        var $years = $('#research-years-modal');
        var year = $years.find('.buttonText').text();
        $years.find('button').prop('disabled', 'disabled').find('.buttonText').text('Select Year');

        $('#research-makes-modal').find('.buttonText').text(make);
        $.ajax({
            url: '/Research/GetModels/?make=' + make + '&year=' + year,
            dataType: 'json',
            type: 'GET',
            success: function (data) {
                var $holder = $('#research-models-modal');
                var $target = $holder.find('ul.dropdown-menu');
                $target.empty();
                for (var i = 0; i < data.length; i++) {
                    var $li = $('<li/>');
                    var $a = $('<a/>');
                    $a.text(data[i]).on('click', function () {
                        $holder.find('.buttonText').text($(this).text());
                        getAvailableModelYears();
                        checkActionButton();
                    });

                    $target.append($li.append($a));
                }

                $holder.find('button').removeProp('disabled').end().find('.buttonText').text('Select Model');
                $('#research-years-modal').find('.buttonText').text('Select Year');
            }
        });
    };

    var initResearchMakes = function () {
        $("#select-make").on("change", function () {
            if ($(this).val() != '') {
                $('#make-error').hide();
                getResearchModels(this);
                $(this).attr('aria-invalid', 'false');
            } else {
                $('#make-error').show();
                $(this).attr('aria-invalid', 'true');
                $("#select-model").html('<option value="">Select Model</option>').val('').attr('disabled', 'disabled');
            }
        });

    };

    var getResearchVehicleModels = function (elem) {
        var $elem = $(elem);
        var make = $elem.text();
        $('#research-years-modal').find('button').prop('disabled', 'disabled').find('.buttonText').text('Select Year');

        $("#research-makes-modal").find(".buttonText").text(make);
        $.ajax({
            url: "/Research/GetModels/?make=" + make,
            dataType: "json",
            type: "GET",
            success: function (data) {
                var $holder = $("#research-models-modal");
                var $target = $holder.find("ul.dropdown-menu");
                $target.empty();
                for (var i = 0; i < data.length; i++) {
                    var $li = $("<li/>");
                    var $a = $("<a/>");
                    $a.text(data[i]).on("click", function () {
                        $holder.find('.buttonText').text($(this).text());
                        getAvailableModelYears();
                        checkActionButton();
                    });

                    $target.append($li.append($a));
                }

                $holder.find('button').removeProp('disabled').end().find('.buttonText').text('Select Model');
                $('#research-years-modal').find('.buttonText').text('Select Year');
            }
        });
    }

    var getResearchModels = function (elem) {
        var $elem = $(elem);
        var make = $elem.val();
        var $select = $("#select-model");
        var html = "<option value=''>Select Model</option>";

        $.ajax({
            url: "/Research/GetModels/?make=" + make,
            dataType: "json",
            type: "GET",
            success: function (data) {

                for (let i = 0; i < data.length; i++) {
                    let cleanContent = DOMPurify.sanitize(data[i]);
                    html += "<option value='" + cleanContent + "'>" + cleanContent + "</option>";
                }
                $select.html(html).removeAttr("disabled");
            }
        });
    };

    var getResearchVehicle = function () {
        var $button = $("#research-action").find("button");
        var valid = isValidResearchForm();
        var make = $("#select-make").val();
        var model = $("#select-model").val();

        if (valid) {
            var url = "/Research/Details?make=" + encodeURIComponent(make) + "&model=" + encodeURIComponent(model);
            document.location.href = url;
        } else {
            if (make == '') {
                $('#make-error').show();
                $("#select-make").attr('aria-invalid', 'true').focus();
                $("#select-model").html('<option value="">Select Model</option>').val('').attr('disabled', 'disabled');
            } else {
                $('#make-error').hide();
                $("#select-make").attr('aria-invalid', 'false');
                $("#select-model").removeAttr('disabled');
            }
            if (model == '') {
                $('#model-error').show();
                $("#select-model").attr('aria-invalid', 'true').focus();
            } else {
                $('#model-error').hide();
                $("#select-model").attr('aria-invalid', 'false');
            }
        }
    };

    var getResearchVehicleFromModal = function () {
        var $button = $("#research-action-modal").find("button");
        var valid = isValidResearchModalForm();

        if (valid) {
            var year = $("#research-years-modal").find(".buttonText").text();
            var model = $("#research-models-modal").find(".buttonText").text();
            var make = $("#research-makes-modal").find(".buttonText").text();
            var url = "/Research/Details?make=" + encodeURIComponent(make) + "&model=" + encodeURIComponent(model) + "&year=" + encodeURIComponent(year) + "&fromModal";
            document.location.href = url;
        } else {
            $button.tooltip({ placement: 'right', trigger: 'manual' }).tooltip('show');
        }
    };

    var getResearchVehicleByYear = function (year) {
        var make = $('input#researchMakeName').val();
        var model = ($('input#researchModelName').val());
        var url = "/Research/Details?make=" + encodeURIComponent(make) + "&model=" + encodeURIComponent(model) + "&year=" + year;
        document.location.href = url;
    };

    var isValidResearchForm = function () {
        var make = $("#select-make").val();
        var model = $("#select-model").val();
        if (make === '' || model === '') {
            return false;
        }

        return true;
    };

    var initResearchModal = function () {
        var $years = $('#research-years-modal');
        var $makes = $('#research-makes-modal');
        var $models = $('#research-models-modal');
        var defaultYear = $('#research-years-val').val();
        var defaultMake = $('#research-makes-val').val();
        var defaultModel = $('#research-models-val').val();
        var $researchButton = $('#research-action-modal button');

        yearDefaultList = $years.find('ul.dropdown-menu').html();
        makeDefaultList = $makes.find('ul.dropdown-menu').html();
        modelDefaultList = $models.find('ul.dropdown-menu').html();
        $researchButton.prop('disabled', 'disabled');

        $('#Research-modal').on('shown.bs.modal', function () {

            $years.find('.buttonText').text(defaultYear).find('ul.dropdown-menu').html(yearDefaultList);
            $makes.find('.buttonText').text(defaultMake).find('ul.dropdown-menu').html(makeDefaultList);
            $models.find('.buttonText').text(defaultModel).find('button').removeProp('disabled').end().find('ul.dropdown-menu').html(modelDefaultList);
            checkActionButton();
        });

        $years.find('a').on('click', function () {
            $years.find('.buttonText').text($(this).text());
            checkActionButton();
        });

        $makes.find('a').on('click', function () {
            $makes.find('.buttonText').text($(this).text());
            $.when(getResearchVehicleModels(this)).done(function () {
                checkActionButton();
            });
        });

        $models.find('a').on('click', function () {
            $models.find('.buttonText').text($(this).text());
            $.when(getAvailableModelYears()).done(function () {
                checkActionButton();
            });
        });
    };

    var resizeNoImage = function () {
        var inventoryResultsImages = $('.research-inventory-item-container').find('.inventory-box-shadow img');
        $.each(inventoryResultsImages, function () {
            if ($(this).attr("src").toLowerCase().indexOf("no_photo_") !== -1) {
                $(this).width("230px");
                $(this).height("170px");
            }
        });
    };

    var initWordCloud = function () {
        if ($('#first-phrase-container').length > 0) {
            var container = $('#first-phrase-container').width();
            var phrase = $('#first-phrase-container')[0];
            var element = $('#first-word-cloud');

            if (phrase.scrollWidth > container) {
                element.removeClass("first-phrase-word-cloud");
                element.addClass("first-phrase-word-cloud-small");
            }

            if (phrase.scrollWidth > container) {
                element.removeClass("first-phrase-word-cloud-small");
                element.addClass("first-phrase-word-cloud-tiny");
            }
        }
    };

    var showIncentiveInfo = function () {
        $('#incentive-bonus-price').hover(
            function () {
                $('.incentive-info').toggle();
            });

    };

    var navBarSet = function () {
        $('#side-menu').affix({
            offset: {
                top: function () {
                    return (this.top = $('#header-container').outerHeight(true));
                }
            }
        });
    };

    var readyToTestDrive = function () {
        var zipCode = $(this).parent().children().closest('input');
        if (Utils.IsValidZipCode(zipCode.val())) {
            $('.zip-input').removeClass('input-error');
            var cookieName = "user-zip";
            $.cookie(cookieName, zipCode.val(), { path: "/", secure: true });
            $('.dealerchk').removeAttr('checked');
            $('.optionalchk').removeAttr('checked');
            $('#Lead_WebUserContact').val('');
            $('#Lead_Comment').val('');
            $('#Lead_WebUserName').val('');
            $('#submit-request').removeAttr('disabled');
            $('#CommentCounter').text('1500');
            $("#RequestQuoteForm").modal('show');
            updateRequestQuotePartial(zipCode.val());
            $("#header-zip").text(zipCode.val());
            $(".zip-input").val(zipCode.val());
            const errorDiv = document.getElementById('zip-validation-message');
            errorDiv.style.display = 'none';
            const testDriveImage = document.getElementById('test-drive-image');
            testDriveImage.style.marginTop = '0px';

        } else {
            const testDriveImage = document.getElementById('test-drive-image');
            testDriveImage.style.marginTop = '20px';
            const errorDiv = document.getElementById('zip-validation-message');
            errorDiv.style.display = 'block';
            const zipField = document.getElementById('finance-test-drive-zip');
            zipField.classList.add('input-error');
            zipField.focus();
        };
    };

    var updateRequestQuotePartial = function (zipCode) {
        $("#zip-textbox").on("focusout", getDealers);

        Loader.ShowLoader('#ResearchRequestQuoteDealers');

        var make = $('#Lead_Make').val();
        var model = $('#Lead_Model').val();
        var year = $('#Lead_Year').val();

        $.ajax({
            type: "GET",
            cache: false,
            data: { year: year, make: make, model: model, location: zipCode },
            url: window.location.protocol + '//' + window.location.host + '/research/DealerList'
        }).done(function (content) {
            let cleanContent = DOMPurify.sanitize(content);

            var $dealers = $('#ResearchRequestQuoteDealers');
            $dealers.fadeOut(500, function () {
                $dealers.html(cleanContent);
                $dealers.fadeIn(500, function () {
                    hideLoader();
                    loadSliders();
                    $("#zip-textbox").focusout(function () { getDealers(); });
                });
                var cookieName = "user-zip";
                $.cookie(cookieName, zipCode, { path: "/", secure: true });
            });
        });
    };

    var loadSliders = function () {
        $("#distance-slider").slider({
            range: false,
            min: mindistance / distanceincrement,
            max: maxdistance / distanceincrement + 1,
            values: [getDistance() / distanceincrement],
            slide: function (event, ui) {
                var distanceText = (ui.values[0] * distanceincrement == maxdistance + distanceincrement) ? 'Nationwide' : ui.values[0] * distanceincrement + ' mi';

                $("#distance-text").val(distanceText);

                var $button = $(this).parents('.dropdown-menu-form').siblings("button.dropdown-toggle").first();
                var $buttonText = $button.find('span.selected-values');

                $buttonText.html(distanceText);
                $button.addClass('selected');
            },
            stop: function () {
                refreshAddressBar();
            }
        });
        var distanceSliderVal = $("#distance-slider").slider("values", 0);
        $("#distance-text").val((distanceSliderVal * distanceincrement == maxdistance + distanceincrement) ? 'Nationwide' : distanceSliderVal * distanceincrement + ' mi');

        $('.close-dropdown').click(function () {
            $('[data-toggle="dropdown"]').parent().removeClass('open');
        });

    };

    var refreshAddressBar = function () {
        getDealers();
    };

    var getDealers = function () {
        var make = $('#Lead_Make').val();
        var model = $('#Lead_Model').val();
        var year = $('#Lead_Year').val();
        var zip = $("#zip-textbox").val();
        $("#header-zip").text(zip);
        $(".zip-input").val(zip);
        if (zip != "") {
            $.ajax({
                type: "GET",
                cache: false,
                data: { year: year, make: make, model: model, location: zip, distance: getDistance() },
                url: window.location.protocol + '//' + window.location.host + '/research/RefreshDealerList'
            }).done(function (content) {
                let cleanContent = DOMPurify.sanitize(content);

                $("#ResearchRequestDealerSelection").remove();
                $("#quote-dealers").html(cleanContent);
            });
        }
    };

    var getDistance = function () {
        var distance = $('#request-quote-distance').text();
        var current = 0;
        if (distance.length > 0) {
            if (distance == 'Nationwide') {
                current = maxdistance + 1;
            } else {
                current = parseInt(distance.replace(' mi', ''));
            }
            return current;
        }
        return 0;
    };

    var closeResearchQuoteRequest = function () {
        $("#ResearchRequestQuoteForm").modal("hide");
    };

    var sendQuoteRequest = function () {
        var contactValid = true;
        var nameValid = true;
        var dealerValid = true;
        var $target;
        $target = $("#Lead_WebUserName");

        if ($target.val().length === 0) {
            nameValid = false;
            $target.addClass("vdp-field-error");
            $target.tooltip({ placement: 'left', trigger: 'manual' }).tooltip('show');
        }

        var selectedDealers = [];
        $('.dealerchk:checked').each(function () {
            selectedDealers.push($(this).val());
        });

        if (selectedDealers.length === 0) {
            dealerValid = false;
            $target = $("#submit-request");
            $target.tooltip({ placement: 'left', trigger: 'manual' }).tooltip('show');
        }

        $target = $("#Lead_WebUserContact");
        var value = $target.val();
        contactValid = Utils.IsValidEmail(value);
        if (!contactValid) {
            contactValid = Utils.IsValidPhone(value);
        }

        if (!contactValid) {
            $target.addClass("vdp-field-error");
            $target.tooltip({ placement: 'left', trigger: 'manual' }).tooltip('show');
        }

        if (nameValid) {
            $target = $("#Lead_WebUserName");
            $target.tooltip("destroy");
        }

        if (contactValid) {
            $target = $("#Lead_WebUserContact");
            $target.tooltip("destroy");
        }

        if (dealerValid) {
            $target = $("#submit-request");
            $target.tooltip("destroy");
        }

        if (contactValid && nameValid && dealerValid && !loading) {
            showLoader('.request-quote-section');
            submitQuoteRequest();
            $('#submit-request').attr('disabled', 'disabled');
            $('.modal-backdrop').css("z-index", "1051");
            $('#loadingModal').css("z-index", "1052");
            $('#email-confirmation').css('z-index', '1052');
        }
    };

    var submitQuoteRequest = function () {
        var selectedDealers = [];
        $('.dealerchk:checked').each(function () {
            selectedDealers.push($(this).val());
        });

        var $form = $('#SubmitResearchQuoteForm');
        var url = $form.attr("action");

        var dataToSend =
        {
            ClientWebsiteId: $('#Lead_ClientWebsiteId').val(),
            WebUserName: $('#Lead_WebUserName').val(),
            WebUserContact: $('#Lead_WebUserContact').val(),
            Comment: $('#Lead_Comment').val(),
            SendCopy: $('#Lead_SendCopy').is(":checked"),
            ContactWhenAvailable: $('#Lead_ContactWhenAvailable').is(":checked"),
            ContactAM: $('#Lead_ContactAM').is(":checked"),
            ContactPM: $('#Lead_ContactPM').is(":checked"),
            DealerIds: selectedDealers.join(","),
            Make: $('#Lead_Make').val(),
            Model: $('#Lead_Model').val(),
            Year: $('#Lead_Year').val()
        }

        $.ajax({
            type: "POST",
            url: url,
            data: dataToSend,
            cache: false,
            success: function (result) {
                var $p = $("#email-confirmation").find("p");

                if (result != null && result.Success) {
                    $p.text('Thank you. Your information has been sent and the dealership will be contacting you shortly.');
                    closeResearchQuoteRequest();

                    $(".test-drive-input").fadeOut(500, function () {
                        $(".sent-referral-message").fadeIn(500);
                    });

                } else {
                    $p.text('There was an error submitting your request');
                    $('#submit-request').removeAttr('disabled');
                }

                hideLoader();
                $('#loadingModal').modal("hide");


            }
        });
    };

    var showLoader = function (elem) {
        loading = true;
        Loader.ShowLoader(elem);
    };

    var hideLoader = function () {
        loading = false;
        Loader.HideLoader();
    };

    var initStickyHeader = function () {
        var overview = $("#overview");
        var posY = $(overview).offset().top - $(window).scrollTop() + $(overview).height();

        if (posY <= 0) {
            $("#premierNav").show();
            $("#AS3Nav").show();
            $("#side-menu").addClass('sticky-header-margin');
        }
        $(window).scroll(function () {
            // set distance user needs to scroll before we fadeIn navbar
            var overview = $("#overview");
            var posY = $(overview).offset().top - $(window).scrollTop() + $(overview).height();
            if (posY <= 0) {
                $('#premierNav').fadeIn();
                $("#AS3Nav").fadeIn();
                $("#side-menu").addClass('sticky-header-margin');
            } else {
                $('#premierNav').fadeOut();
                $("#AS3Nav").fadeOut();
                $("#side-menu").removeClass('sticky-header-margin');
            }
        });
    };

    var openCertificateProcess = function () {
        var year = $('input#researchYearName').val();
        var make = $('input#researchMakeName').val();
        var model = $('input#researchModelName').val();
        var certificate = 'certificate?' + 'make=' + encodeURIComponent(make) + '&model=' + model + '&year=' + year + '&returnUrl=' + encodeURIComponent(window.location.href);
        window.location = location.protocol + '//' + location.host + '/' + certificate;
    }

    var openCertificateProcessWithTrim = function () {
        if (!selectedTrimId) {
            openCertificateProcess();
            return;
        }
        var year = $('input#researchYearName').val();
        var make = $('input#researchMakeName').val();
        var model = $('input#researchModelName').val();
        var queryString = $.param({
            make: encodeURIComponent(make),
            model: model,
            year: year,
            chromestyleid: selectedTrimId,
            returnUrl: window.location.href
        });
        window.location = location.protocol + '//' + location.host + '/' + 'certificate?' + queryString;
    }

    var retrieveCashIncentive = function () {
        $('#Incentive-Disclaimer').hide();
        retrieveCashIncentiveMain();
        retrieveCashIncentiveCompare();
    };

    var retrieveCashIncentiveMain = function () {

        var year = $('input#researchYearName').val();
        var make = $('input#researchMakeName').val();
        var model = $('input#researchModelName').val();
        var zip = $('#research-zip').text().trim();
        hideIncentiveMain();
        var dataToSend = {
            year: year,
            make: make,
            model: model,
            zip: zip
        };
        retrieveIncentive(dataToSend, false)
    };

    var retrieveCashIncentiveCompare = function () {
        $('.compare-name').each(function () {
            var year = $(this).attr('data-year');
            var make = $(this).attr('data-make');
            var model = $(this).attr('data-model');
            var zip = $('#research-zip').text().trim();
            $(this).children('.compare-bonus').hide();
            var dataToSend = {
                year: year,
                make: make,
                model: model,
                zip: zip
            };
            retrieveIncentive(dataToSend, true);
        });
    }

    var retrieveIncentive = function (dataToSend, isCompareVehicle) {
        $.ajax({
            type: "GET",
            url: window.location.protocol + '//' + window.location.host + '/Research/RetrieveCashIncentive',
            data: dataToSend,
            cache: false,
            success: function (result) {
                if (isCompareVehicle) {
                    updateVehicleCompare(result, dataToSend);
                }
                else {
                    updateMainVehicle(result);
                }
            }
        });
    }

    var updateVehicleCompare = function (result, dataToSend) {
        var incentive = $('.compare-name[data-year="' + dataToSend.year + '"][data-make="' + dataToSend.make + '"][data-model="' + dataToSend.model + '"]');
        if (!result || result.length === 0) {
            incentive.children('.compare-bonus').hide();
            incentive.children('.no-compare-bonus').show();
        }
        else {
            $('#Incentive-Disclaimer').show();
            incentive.children('.no-compare-bonus').hide();
            incentive.children('.compare-bonus').show();
            incentive.find('.compare-bonus-cash').text(result.cash);
        }
    }

    var updateMainVehicle = function (result) {
        if (!result || result.length === 0) {
            hideIncentiveMain();
        }
        else {
            showIncentiveMain();
            var incentive = $('.incentive-left').children('.compare-bonus');
            incentive.find('#IncentiveBonus').text(result.cash);
            incentive.find('#ExpirationDate').text(result.expiredDate);
        }
    }

    var hideIncentiveMain = function () {
        var noIncentive = $('.incentive-left').children('.no-compare-bonus');
        var incentive = $('.incentive-left').children('.compare-bonus');
        noIncentive.show();
        incentive.hide();
    }

    var showIncentiveMain = function () {
        var noIncentive = $('.incentive-left').children('.no-compare-bonus');
        var incentive = $('.incentive-left').children('.compare-bonus');
        noIncentive.hide();
        incentive.show();
        $('#Incentive-Disclaimer').show();
    }

    var noThanksOptOut = function () {
        var cookieName = "user-zip";
        var zipCode = $.cookie(cookieName);
        $('.dealerchk').removeAttr('checked');
        $('.optionalchk').removeAttr('checked');
        $('#Lead_WebUserContact').val('');
        $('#Lead_Comment').val('');
        $('#Lead_WebUserName').val('');
        $('#submit-request').removeAttr('disabled');
        $('#CommentCounter').text('1500');
        $("#ResearchRequestQuoteForm").modal('show');
        updateRequestQuotePartial(zipCode);
        $("#header-zip").text(zipCode);
        $(".zip-input").val(zipCode);
        Global.SetUserEnabledAp(false);
    }

    $('#RequestQuoteForm').on('shown.bs.modal', function () {
        $(this).find("button.close").focus();
    });

    $("#select-model").on("change", function () {
        if ($(this).val() != '') {
            $('#model-error').hide();
            $(this).attr('aria-invalid', 'false');
        } else {
            $('#model-error').show();
            $(this).attr('aria-invalid', 'true');
        }
    });

    return {
        InitResearchModal: initResearchModal,
        GetResearchVehicle: getResearchVehicle,
        GetResearchVehicleByYear: getResearchVehicleByYear,
        InitDetails: initDetails,
        InventoryHover: inventoryHover,
        InitResearchMakes: initResearchMakes,
        InitResearchSlider: initResearchSlider,
        InitStickyHeader: initStickyHeader,
        GetInventory: getInventory,
        NavBarSet: navBarSet,
        GetResearchVehicleFromModal: getResearchVehicleFromModal,
        SendQuoteRequest: sendQuoteRequest,
        CloseResearchQuoteRequest: closeResearchQuoteRequest,
        GetDealers: getDealers,
        openCertificateProcess: openCertificateProcess,
        RetrieveCashIncentive: retrieveCashIncentive,
        OpenCertificateProcessWithTrim: openCertificateProcessWithTrim,
        NoThanksOptOut: noThanksOptOut
    };
})();


var index = 0;
var changeInterval = 1000;
var maxIndex = 0;
var images = [];

var Ad = (function () {
    
    var initAdImage = function() {
        var $adImages = $('#ad-content');
        
        $(".active-ad").each(function() {
            images.push($(this));
        });
        maxIndex = images.length;
        var $newAdImage = images[index];
        if (maxIndex == 0)
            return;
        if (maxIndex == 1) {
            $newAdImage.css("opacity", "1").show();
        } else {
            window.onload = function () {
                $newAdImage.css("opacity", "1").show();
                setInterval(changeAdImage, 5000);
            };
        }
    }

    var changeAdImage = function () {
        var prevImage = images[index];
        index = (index >= maxIndex-1) ? 0 : index += 1;
        images[index].css("top", "-600px").show().css("opacity", "0");
        prevImage.animate({ opacity: 0 },
            { complete: function () { prevImage.hide(); } });
        prevImage.css("opacity", "0").hide();
        images[index].animate({ opacity: 1 
        });
    }
    
    var logAdClick = function (elem) {
        var $elem = $(elem);
        //check if elem has Global.Redirect in onclick attr
        var clickEvent = $elem.attr("onclick").toLowerCase();
        if (clickEvent.indexOf("global.redirect") === -1) {
            return;
        }
        var $adSpaceIdHolder = $('*[data-adspace-id]');
        var adSpaceId = $adSpaceIdHolder.data("adspace-id");
        var adId = $elem.data("ad-id");
        var dataToSend = { adSpaceId: adSpaceId, adId: adId };
        $.ajax({
            url: "/Ads/LogAdClick/",
            data: dataToSend,
            type: "POST"
        });
    };

    return {
        ChangeAdImage: changeAdImage,
        InitAdImage: initAdImage,
        LogAdClick: logAdClick
    };
})();
