(function( $ ) {
	$.fn.searchBar = function() {
		var el = $(".module-search-bar:not('.mobile')"),
		lastScrollTop = 0,
		delta = 5,
		documentHeight = 0,
		icon = false,
		advancedSearchWidth = 0,

		init = function () {
			if(screenXS || screenSM) {
				return;
			}

            if($(window).width() < 769) {
                $(".filters .advanced-search").addClass("collapse");
            }

			lastScrollTop = $(document).scrollTop();

			icon = el.find('span.status');
			var advancedSearch = el.find('.advanced-search p.big');
			var searchTerms = el.find('input.search-terms');
			var searchTermsParent = searchTerms.parent();
			advancedSearchWidth = advancedSearch.outerWidth();
			documentHeight = $(document).height();

			$(document).on('mouseup', function(e) {
				if (!el.is(e.target) && el.has(e.target).length === 0) {
					icon.popover('hide');
					if(searchTerms.val() == '' && !el.is('.expanded')) {
						el.removeClass('focused');
					}
				}
				else {
					el.addClass('focused').find('input.search-terms').focus();
					if(!el.is('.expanded') && ! screenSM && ! screenXS) {

						icon.popover({
							container: icon
						});
						icon.popover('show');
					}
				}
			});

			el.on('click', 'span.status', function() {
				if(screenSM || screenXS) {
					return;
				}

				icon.popover('hide');

				if(!el.is('.expanded')) {

					el.addClass('expanded');
                    advancedSearchWidth = advancedSearch.outerWidth()+20;
                    if (browser.isIe() && browser.getVersion() <= 9){
                        searchTerms.css("position", "relative");
                        searchTerms.css("left", advancedSearchWidth);
                        $('.advanced-search p.big').attr("style", "z-index:51");
                    }
                    else
                        searchTermsParent.translate3D({x: advancedSearchWidth});

					setTimeout(function() {

						/* show "Not a "customer_type"? popover */
						var pp = el.find('.inline-search').first();
						var customerPromptText = $("#customer_prompt").val();
						customerPromptText = customerPromptText.replace('@customer', pp.data('value'));
						pp.popover('destroy');
						pp.popover({
							html: true,
							content: '<p class="x0 normal">' + customerPromptText + '</p>'
						});
						pp.popover('show');

						pp.one('click', function() {
							pp.popover('destroy');

							pp.on('show.bs.popover', function(e) {
								$(this).wrap('<span class="inline-search-container"></span>');
							});

							pp.on('hide.bs.popover', function(e) {
								if($(this).closest('.inline-search-container').length > 0) {
									$(this).unwrap();
								}
							});
							createPopovers(pp);
							pp.popover('show');
						});
					}, 500);
				} else {
					el.removeClass('expanded');
					searchTermsParent.translate3D();
                    if (browser.isIe() && browser.getVersion() <= 9){
                        searchTerms.css("left", 0);
                        searchTerms.css("position", "");
                        $('.advanced-search p.big').attr("style", "z-index:47");
                    }
				}
			});

			advancedSearch.on('changeWidth', function(e) {
				advancedSearchWidth = advancedSearch.outerWidth()+20;
                if (browser.isIe() && browser.getVersion() <= 9){
                    searchTerms.css("position", "relative");
                    searchTerms.css("left", advancedSearchWidth);
                }
                else
                    searchTermsParent.translate3D({x: advancedSearchWidth});
			});

			searchTerms.on('keyup', function() {
				icon.popover('hide');
			});
		},

		detectScroll = function() {
			if(screenXS || screenSM || md.mobile()) {
				return;
			}

			if(icon != false) {
				icon.popover('hide');
			}

			var st = $(document).scrollTop();

			if(Math.abs(lastScrollTop - st) <= delta || st < 0 || (st + windowHeight) > documentHeight) {
				return;
			}

			if (st > lastScrollTop){ /* SCROLL DOWN */
				if(!$('body').is('.scrolling-down')){
					$('body').addClass('scrolling-down');
				}
			} else {  /* SCROLL UP */
				if($('body').is('.scrolling-down')){
					$('body').removeClass('scrolling-down');
				}
			}
			lastScrollTop = st;
		};

		init();

        detectAdvancedSearchPage = function () {
            var searchTerms = el.find('input.search-terms');
            var searchTermsParent = searchTerms.parent();
            if (window.location.search.indexOf("advanced-terms") > -1) {
                if(!el.is('.expanded')) {

                    el.addClass('focused expanded');
                    //advancedSearchWidth = advancedSearch.outerWidth();
                    //searchTerms.translate3D({x: advancedSearchWidth});
                    if (browser.isIe() && browser.getVersion() <= 9){
                        searchTerms.css("position", "relative");
                        searchTerms.css("left", advancedSearchWidth);
                        $('.advanced-search p.big').attr("style", "z-index:51");
                    }
                    else
                        searchTermsParent.translate3D({x: advancedSearchWidth+20});

                    icon.popover('hide');
                    //$("section.module-search-bar.focused.expanded .advanced-search .status").css("background-position", "left -41px center")
                }
            }
        };

		$(document).on('scroll', detectScroll);
	};
    var browser = {
        isIe: function () {
            return navigator.appVersion.indexOf("MSIE") != -1;
        },
        navigator: navigator.appVersion,
        getVersion: function() {
            var version = 999; // we assume a sane browser
            if (navigator.appVersion.indexOf("MSIE") != -1)
            // bah, IE again, lets downgrade version number
                version = parseFloat(navigator.appVersion.split("MSIE")[1]);
            return version;
        }
    };
	/* Autoload */
	$.fn.searchBar();
})(jQuery);
