$(document).ready(function() {
    var $tmp_div = $("<div/>").addClass("ac_loading").css({
        position: "absolute",
        top: -500,
        left: -500
    });
    $(document.body).append($tmp_div);
    $('div.ac_loading').remove();

    $('#autofind').bind('change', function(event) {
        $(this).trigger('reload_submit_btn');
    });

    $("#autocompleteForm").unbind();
    $("#autocompleteForm").bind("submit", function(event) {
        event.preventDefault();
        event.stopPropagation();

        $('#autofind').unbind('result');
        $('#autofind').bind('result', $('#autofind').autocomplete_object.submitBtn);
        $('#autofind').search();
    });

    //change some ajax defaults
    $.ajaxSetup({
        beforeSend: function() {
            var query = $.parseQuery(this.data);
            if(query.q && query.q != "" && query.q.length >= 2) {                
                $.ajax($.extend(this,{
                    type: "POST",
                    url: pages['ajax_controller'],
                    data: {
                        action: query.action,
                        log: query.log,
                        max_result: 11,
                        product: $.trim(query.q.replace(/<\/?[^>]+>/gi, '')).substr(0, 30)
                    }
                }));

                return false;
            }
        }
    });

    $.prototype.autocomplete_object = {
        max: 11,
        display_max: 10,
        scroll: false,
        extraParams: {
            log: false,
            action: "search"
        },
        delay: 700,
        cacheLength: 100,
		parse: true,
        minChars: 1,
        

        parse: function(data) {
            if(typeof data.search == "string") {
                //no results case
                return [{
                    data: data.search,
                    value: data.search,
                    result: $('#autofind').val()
                }];
				
            }
            else {
                var result = [];
                var _this = this;

                $.each(data.search, function(index, item) {
                    result[result.length] = {
                        data: item,
                        value: item.product_text,
                        result: _this.formatResult && _this.formatResult(item, item.product_text) || item.product_text
                    };
                });
                              
            }
			
            return result;
        },
        selectFirst: true,
        mustMatch: false,
        matchContains: false,
        matchSubset: true,
        last: false,
        itemIndex: 0,
        submitBtn: function(event, item) {
            event.preventDefault();
            event.stopPropagation();

            if($.trim($('#autofind').val()) != "" && $.trim($('#autofind').val()) != "Enter product name")
                window.location = pages['do_search'] + "?by=autocomplete&autofind=" + encodeURIComponent($('#autofind').val().substr(0, 30));

            $('#autofind').unbind("result");
            $('#autofind').bind("result", $('#autofind').autocomplete_object.submit);

            return false;
        },
        formatResult: function(item, text) {
            return item.product_text;
        },
		display: function (data, query){
			alert('d');
		},
        formatItem: function(item, index, total, term) { 
            var result = item;
            
            if (index <= this.display_max) {
                if($(".ac_results").attr("id") != "search-autocomplete") {
                    var $new_container = $(ac_result_container);
                    $(".ac_results").attr("id", $new_container.attr("id"));

                    var $classList = $new_container.attr('class').split(/\s+/);
                    $.each($classList, function(index, item){
                        $(".ac_results").addClass(item);
                    });

                    var before_ul = true;
                    $new_container.children().each(function(index, item) {
                        if(item.tagName != "UL") {
                            if(before_ul)
                                $(".ac_results").prepend(item);
                            else
                                $(".ac_results").append(item);
                        }
                        else before_ul = false;
                    });

                    $classList = $new_container.children("ul").attr('class').split(/\s+/);
                    $.each($classList, function(index, item){
                        $(".ac_results").children("ul").addClass(item);
                    });

                    $.fn.show2 = $.fn.show;
                    $.fn.show = function() {
                        var o = $(this[0]);
                        o.show2();

                        if(o.hasClass("ac_results")) {
                            if($(".ac_results").children(".triangle") &&
                                $(".ac_results").children(".triangle").css("position") == "absolute")
                                o.css({
                                    top: o.position().top+$(".ac_results").children(".triangle").height()
                                });

                            $(".ac_results").find(".ac_even").addClass("even");
                            $(".ac_results").find(".ac_odd").addClass("odd");

                            var $li = $(".ac_results").find("li");
                            $($li[$li.length-1]).css({
                                borderBottom: "none"
                            });

                            $(".ac_results").css({
                                width: null
                            });

                            $(".ac_results").css({
                                width: $(".ac_results ul").width() +
                                parseInt($(".ac_results ul").css("padding-left")) +
                                parseInt($(".ac_results ul").css("padding-right")) + 2
                            });

                            if($(".ac_results h3").length == 0) {
                                var text1 = $('#autofind').val().replace(/<\/?[^>]+>/gi, ''),
                                text2 = text1.replace(/^(.{1,25}).*$/, "$1");
                                $(".ac_results .results").html("&nbsp;&laquo;" + ((text1.length > 25) ? text2 + " ..." : text1) + "&raquo;");

                                $(".ac_results li").css({
                                    backgroundColor: "transparent",
                                    cursor: 'default'
                                }).hover(function() {
                                    $(".ac_results li").css({
                                        backgroundColor: "transparent",
                                        cursor: 'default'
                                    });
                                });
                            }

                            $(".ac_results ul li").addClass("clearfix");
                        }

                        return o;
                    };
                }
            } else {
                result = false;
            }
            
            if(index == total) {
                this.last = true;                 
                if ( this.display_max < index){  
                    var notesDiv = $("#auto_complete_notes");
                    notesDiv.html(ac_result_partial); 
                    var term= $('#autofind').val();
                    var text1 = term.replace(/<\/?[^>]+>/gi, ''),
                    text2 = text1.replace(/^(.{1,25}).*$/, "$1");
                    notesDiv.find(".results").html("&nbsp;&laquo;" + ((text1.length > 25) ? text2 + " ..." : text1) + "&raquo;");
                    notesDiv.show();                    
				}
                else{
					$("#auto_complete_notes").hide();  
				}
            } else {
				this.last = false;
            }
			
            this.itemIndex = index;
			
			return result;            
        },
        highlight: function(item, term) {

            if(typeof item == "string") {
                var $div = $("<div/>").html(ac_result_none);
                var text1 = term.replace(/<\/?[^>]+>/gi, ''),
                text2 = text1.replace(/^(.{1,25}).*$/, "$1");
                $div.find(".results").html("&nbsp;&laquo;" + ((text1.length > 25) ? text2 + " ..." : text1) + "&raquo;");
                return $div.html();
            }

            var $li = $("<div>" + ac_result_items + "<div/>");

            if(this.index%2 == 0)
                $li = $li.children("li.even")[0];
            else
                $li = $li.children("li.odd")[0];

            if(typeof $li == 'undefined')
                $li = $li.children("li")[0];

            $li = $($li);

            $li.find("h3").html(item.product_text);
            $li.find("span.cat a").replaceWith($("<a href='#' onclick=\"event.preventDefault(); event.stopPropagation(); window.location = '/" + item.product_category_page + "'; return false;\"/>"));			
            $li.find("span.cat a").html(item.product_category_name);			
            $li.find("cite").html(item.product_subtext);
            if(!item.product_image)
                $li.find("img.ac_image").remove();
            else
                $li.find("img.ac_image").attr({
                    src: item.product_image,
                    alt: $("<div/>").html(item.product_text).text()
                });
			return $li.html();
        },
        submit: function(event, item) {
            event.preventDefault();
            event.stopPropagation();

            if(typeof item == "string")
                return false;

            var item_text = $("<div/>").html(item.product_text).text();
            $('#autofind').val(item_text);
            window.location = "/" + item.product_page;
            return false;
        }
    };

    $('#autofind').watermark("Enter product name").autocomplete(pages['ajax_controller'], $('#autofind').autocomplete_object)
    .result($('#autofind').autocomplete_object.submit);

    autosearch = {
        defaultCharCode   : 65,  // ASCII Code: <A>
        maxChars          : 26,

        charList            : function(){
            return $('#char_list')
            },
        searchByCharsForm   : function(){
            return $('#searchByCharsForm')
            },
        findchar            : function(){
            return $('#findchar')
            },

        createURL : function(charElement) {
            var url = document.createElement('a'),
            textNode = document.createTextNode(charElement);
            url.setAttribute('href', "javascript: autosearch.eventOnCharacter('"+charElement+"')");
            url.setAttribute('accesskey', charElement);
            url.appendChild(textNode);
            this.charList()[0].appendChild(url);
        },
        eventOnCharacter : function(charElement){
            var form = this.searchByCharsForm();
            this.findchar().val(charElement);
            form.attr('action',pages['do_search'] + '?by=chars&findchar='+charElement).submit();
        },
        secondarySubmit : function(elem) {
            if($(elem).hasClass("go_button_off"))
                return false;

            if($.trim($('#autofind').val()) != "" && $.trim($('#autofind').val()) != "Enter product name") {
                $(elem).addClass("go_button_off");
                $("#autocompleteForm").submit();
                $('#autofind').bind('reload_submit_btn', function(event) {
                    $(this).unbind(event);
                    $(elem).removeClass("go_button_off");
                });
            }
        }
    };

    if(typeof autosearch!='undefined'){
        if($('.search_label').length > 0) {
            for (var i = 0; i < autosearch.maxChars; i++) {
                autosearch.createURL(String.fromCharCode(i + autosearch.defaultCharCode))
            }
        }
    }
});

