jQuery(document).ready(function() {
    // Fixes error in IE
    jQuery.support.cors = true;

    if (jQuery.ui && jQuery.ui.autocomplete) {
        jQuery('.hns-searchfield').each(function() {
            var searchField = jQuery(this),
                searchButton = findSearchButton(searchField);

            function autocompleteFilter(info) {
                var output = [];
                if (info && info.length) {
                    var matchRE = new RegExp(info[0], 'gi');
                    for (var i = 2, l = info.length; i < l; ++i) {
                        if (info[i]) output[output.length] = {
                            label: info[i].replace(matchRE, autocompleteFilter.subber),
                            value: info[i]
                        }
                        // only use 10
                        if (output.length == 10) break;
                    }
                }

                if (jQuery.support.boxModel && output[0]) output[0].label = output[0].label + '<div class="suggestions-banner">Suggestions</div>';
                return output;
            }

            autocompleteFilter.subber = function(text) {
                return '<strong>' + text + '</strong>';
            }

            autocompleteFilter.cache = {};

            autocompleteFilter.stayClosed = false;

            jQuery.widget('custom.autocompleteWithClose', jQuery.ui.autocomplete, {
                _renderMenu: function(ul, items) {
                    var self = this;
                    var last = null;
                    jQuery.each(items, function(index, item) {
                        last = self._renderItem(ul, item);
                    });
                    var closer = jQuery('<span class="autocomplete-closer">Close</span>');
                    last.append(closer);
                    closer.click(function() { autocompleteFilter.stayClosed = true; self.close(); });
                }
            });

            autocompleteFilter.checkReopen = function() {
                if (!this.value) autocompleteFilter.stayClosed = false;
            }

            searchField.autocompleteWithClose({
                delay: 0, // just go baby
                //offset: "-6px 6px",
                source: function(request, response) {
                    var self = this;
                    if (autocompleteFilter.cache[request.term]) {
                        response(autocompleteFilter.cache[request.term]);
                    }
                    else {
                        jQuery.ajax({
                            cache: true,
                            // if it takes longer than 1 second it's pointless anyway
                            timeout: 1000 * 1,
                            crossDomain: true,
                            url: "/Pages/SearchSuggest.aspx",
                            data: request,
                            success: function(data) {
                                autocompleteFilter.cache[request.term] = autocompleteFilter(data);
                                response(autocompleteFilter.cache[request.term]);
                            },
                            error: function(x, status, error) {
                                // close the suggestions for now, not
                                // sure what else makes sense here
                                //self.close();
                            }
                        });
                    }
                },
                select: function(event, ui) {
                    if (ui.item) {
                        searchField.val(ui.item.value);
                    }
                    searchButton.inclick = true;
                    searchButton.click();
                    return false;
                },
                open: function(event, ui) {
                    var textbox = jQuery(event.target);

                    if (typeof textbox.attr('dropclass') != 'undefined' && textbox.attr('dropclass') != null) {
                        jQuery(ui.element).addClass(jQuery(event.target).attr('dropclass'));
                    }

                    return true;
                },
                search: function(event, ui) {
                    return !autocompleteFilter.stayClosed;
                }
            });

            searchField.change(autocompleteFilter.checkReopen);
            searchField.focus(function() { searchField.focused = true; });
            searchField.blur(function() { searchField.focused = false; });
            searchField.keydown(function(event) {
                if (event.keyCode == jQuery.ui.keyCode.ENTER || event.keyCode == jQuery.ui.keyCode.NUMPAD_ENTER) {
                    searchButton.click();
                    event.preventDefault();
                }
                autocompleteFilter.checkReopen();
            });
            searchField.mouseup(autocompleteFilter.checkReopen);
            searchButton.mousedown(function() { searchButton.inclick = true; });
            searchButton.click(function(e) {
                var search = jQuery.trim(searchField.val());
                if (!searchField.focused && !searchButton.inclick) {
                    e.preventDefault();
                } else if (search == '' || (searchField.attr('watermark') != null) && searchField.attr('watermark').toLowerCase() == search.toLowerCase()) {
                    e.preventDefault();
                    alert('Please enter keywords.');
                }   //else if
                searchButton.inclick = false;
            });
        }); // jQuery('.searchfield').each
    }   //if
});     //jQuery(document).ready

function findSearchButton(searchField) {
    var parent = searchField.parent();
    var searchButton = null;  //parent.find('.searchButton');

    do {
        searchButton = parent.find('.hns-searchbutton');
        parent = parent.parent();
    }   //do
    while (parent != null
            && parent.length == 1
            && searchButton.length == 0)

    return searchButton == null || searchButton.length == 0 ? null : searchButton;
}

/*jQuery(document).ready(function() {
// Fixes error in IE
jQuery.support.cors = true;

if (jQuery.ui && jQuery.ui.autocomplete) {
jQuery('.hns-searchfield').each(function() {
var searchField = jQuery(this),
searchButton = findSearchButton(searchField);

function autocompleteFilter(info) {
var output = [];
if (info && info.length) {
var matchRE = new RegExp(info[0], 'gi');
for (var i = 2, l = info.length; i < l; ++i) {
if (info[i]) output[output.length] = {
label: info[i].replace(matchRE, autocompleteFilter.subber),
value: info[i]
}
// only use 10
if (output.length == 10) break;
}
}

if (jQuery.support.boxModel && output[0]) output[0].label = output[0].label + '<div class="suggestions-banner">Suggestions</div>';
return output;
}

autocompleteFilter.subber = function(text) {
return '<strong>' + text + '</strong>';
}

autocompleteFilter.cache = {};

autocompleteFilter.stayClosed = false;

jQuery.widget('custom.autocompleteWithClose', jQuery.ui.autocomplete, {
_renderMenu: function(ul, items) {
var self = this;
var last = null;
jQuery.each(items, function(index, item) {
last = self._renderItem(ul, item);
});
var closer = jQuery('<span class="autocomplete-closer">Close</span>');
last.append(closer);
closer.click(function() { autocompleteFilter.stayClosed = true; self.close(); });
}
});

autocompleteFilter.checkReopen = function() {
if (!this.value) autocompleteFilter.stayClosed = false;
}

searchField.autocompleteWithClose({
delay: 0, // just go baby
//offset: "-6px 6px",
source: function(request, response) {
var self = this;
if (autocompleteFilter.cache[request.term]) {
response(autocompleteFilter.cache[request.term]);
}
else {
jQuery.ajax({
cache: true,
// if it takes longer than 1 second it's pointless anyway
timeout: 1000 * 1,
crossDomain: true,
url: "/search/SearchSuggest.ashx",
data: request,
success: function(data) {
autocompleteFilter.cache[request.term] = autocompleteFilter(data);
response(autocompleteFilter.cache[request.term]);
},
error: function(x, status, error) {
// close the suggestions for now, not
// sure what else makes sense here
//self.close();
}
});
}
},
select: function(event, ui) {
if (ui.item) {
searchField.val(ui.item.value);
}
searchButton.inclick = true;
searchButton.click();
return false;
},
open: function(event, ui) {
var textbox = jQuery(event.target);

if (typeof textbox.attr('dropclass') != 'undefined' && textbox.attr('dropclass') != null) {
jQuery(ui.element).addClass(jQuery(event.target).attr('dropclass'));
}

return true;
},
search: function(event, ui) {
return !autocompleteFilter.stayClosed;
}
});

searchField.change(autocompleteFilter.checkReopen);
searchField.focus(function() { searchField.focused = true; });
searchField.blur(function() { searchField.focused = false; });
searchField.keydown(function(event) {
//if ((isIE7p() || isIE6() || isIE9()) &&
if (event.keyCode == jQuery.ui.keyCode.ENTER ||
event.keyCode == jQuery.ui.keyCode.NUMPAD_ENTER) {
searchButton.click();
event.preventDefault();
}
autocompleteFilter.checkReopen();
});
searchField.mouseup(autocompleteFilter.checkReopen);
searchButton.mousedown(function() { searchButton.inclick = true; });
searchButton.click(function(e) {
searchRedirect(searchField, e);

//e.preventDefault();
searchButton.inclick = false;
});
}); // jQuery('.searchfield').each
}   //if
});         //jQuery(document).ready

function searchRedirect(searchField, clickEvent) {
var search = searchField.val();

if (jQuery.trim(search) == ''
|| (searchField.attr('watermark') != null) && searchField.attr('watermark').toLowerCase() == search.toLowerCase()) {
clickEvent.preventDefault();
alert('Please enter keywords.');
}   //if
else {
//window.location = searchUrl.replace('{0}', encodeURIComponent(search));
}   //else

}

function findSearchButton(searchField) {
var parent = searchField.parent();
var searchButton = null;  //parent.find('.searchButton');

do {
searchButton = parent.find('.hns-searchbutton');
parent = parent.parent();
}   //do
while (parent != null
&& parent.length == 1
&& searchButton.length == 0)

return searchButton == null || searchButton.length == 0 ? null : searchButton;
}

function isIE9() {
return jQuery.browser.msie && jQuery.browser.version == '9.0';
}

function isIE7p() {
return (jQuery.browser.msie && (jQuery.browser.version == "7.0" || jQuery.browser.version == "8.0"));
}

function isIE6() {
return (jQuery.browser.msie && jQuery.browser.version == "6.0");
}

function isIE8p() {
return (jQuery.browser.msie && jQuery.browser.version == "8.0");
}*/
