﻿
(function ($) {
    $.fn.searchsuggest = function () {

        // --------- IE7 hack to make it display z-indexes as competent browsers do
        if (($.browser.msie && $.browser.version.substr(0, 1) < 8) == true) {
            $(function () {
                var zIndexNumber = 1000;
                $('div').each(function () {
                    $(this).css('zIndex', zIndexNumber);
                    zIndexNumber -= 10;
                });
            });
        }
        // ---------
        
        var languageID = $('#ctl00_ctl00_mastercontent_languageID').val();
        var siteID = $('#ctl00_ctl00_mastercontent_siteID').val();

        var searchbox = this;

        $('p.search_result a').live('click', function (e) {
            e.preventDefault();
            var href = $(this).attr('href');
            $.ajax({
                url: "/searchsuggestions.aspx",
                cache: false,
                data: "logphrase=" + searchbox.val() + "&languageID=" + languageID + "&siteID=" + siteID,
                success: function () {
                    window.location = href;
                }
            });
        });


        var focusIndex = -1;
        return this.each(function () {

            searchbox.focus(function (event) {
                searchbox.addClass('focus');
            });
            searchbox.blur(function (event) {
                searchbox.removeClass('focus');
            });

            searchbox.keyup(function (event) {

                var k = parseInt(event.keyCode);
                //$('#searchboxsuggest').html(k);

                var minLength = 3;

                // populate suggestions list and show it
                // only bother if numeric, alphaupper(chars from keyCode come uppercase) or a space, or backspace or delete.  NOTE:  this only controls when get into this IF statement, not the purity of the input box text
                if ((k >= 48 && k <= 57) || (k >= 65 && k <= 90) || (k == 32) || (k == 8) || (k == 46)) {
                    var searchstring = (searchbox.val()); // + String.fromCharCode(k)).toLowerCase(); - required if using keydown rather than keyup - but then run into trouble when delete gets pressed and added onto end of string rather than deleting

                    if (searchstring.length >= minLength) {

                        $.ajax({
                            url: "/searchsuggestions.aspx",
                            cache: false,
                            data: "search=" + searchstring + "&languageID=" + languageID + "&siteID=" + siteID,
                            success: function (html) {
                                //$('#searchboxsuggest').hide();
                                $('#searchboxsuggest').html(html);
                                //$('#searchboxsuggest').fadeIn(50);
                            }
                        });

                    } else {    // been deleting - remove suggestions if now too short

                        $('#searchboxsuggest').html('');

                    }

                }

            });

            searchbox.keydown(function (event) {

                var k = parseInt(event.keyCode);
                //$('#searchboxsuggest').html(k);

                // key down or up, tab, return
                if ((k == 38) || (k == 40) || (k == 9) || (k == 13)) {
                    var ul = $('#searchboxsuggest ul');
                    if (ul != null) {

                        var lis = ul.find('li');

                        if (k == 40) { focusIndex += 1; }
                        if (k == 38) { focusIndex -= 1; }
                        if (focusIndex < 0) { focusIndex = -1; }
                        if (focusIndex >= lis.length) { focusIndex = lis.length - 1; }

                        if ((k == 38) || (k == 40)) {
                            for (i = 0; i < lis.length; i++) {
                                var lia = $('a', lis[i]);
                                if (i == focusIndex) {
                                    lia.addClass('hover');
                                } else {
                                    lia.removeClass('hover');
                                }
                            }
                        }

                        if ((k == 9) || (k == 13)) {
                            if (focusIndex > -1 && focusIndex < lis.length) {
                                searchbox.val($('a', lis[focusIndex]).text());
                            }
                            $('#searchboxsuggest').html('');
                            if (k == 13) { document.searchform.submit(); }
                        }

                    }
                }

            });

            $('a.suggestion').live('click', function () {
                searchbox.val($(this).attr('title'));
                $('#searchboxsuggest').html('');
                document.searchform.submit();
            });

        });


    };
})(jQuery);  

