(function($){var m={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'},s={'array':function(x){var a=['['],b,f,i,l=x.length,v;for(i=0;i<l;i+=1){v=x[i];f=s[typeof v];if(f){v=f(v);if(typeof v=='string'){if(b){a[a.length]=','}a[a.length]=v;b=true}}}a[a.length]=']';return a.join('')},'boolean':function(x){return String(x)},'null':function(x){return"null"},'number':function(x){return isFinite(x)?String(x):'null'},'object':function(x){if(x){if(x instanceof Array){return s.array(x)}var a=['{'],b,f,i,v;for(i in x){v=x[i];f=s[typeof v];if(f){v=f(v);if(typeof v=='string'){if(b){a[a.length]=','}a.push(s.string(i),':',v);b=true}}}a[a.length]='}';return a.join('')}return'null'},'string':function(x){if(/["\\\x00-\x1f]/.test(x)){x=x.replace(/([\x00-\x1f\\"])/g,function(a,b){var c=m[b];if(c){return c}c=b.charCodeAt();return'\\u00'+Math.floor(c/16).toString(16)+(c%16).toString(16)})}return'"'+x+'"'}};$.toJSON=function(v){var f=isNaN(v)?s[typeof v]:s['number'];if(f)return f(v)};$.parseJSON=function(v,safe){if(safe===undefined)safe=$.parseJSON.safe;if(safe&&!/^("(\\.|[^"\\\n\r])*?"|[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t])+?$/.test(v))return undefined;return eval('('+v+')')};$.parseJSON.safe=false})(jQuery);
$(document).ready(
    function()
    {
        //update_basket();
        var msg='';
        function array_unique( array ) {
            var p, i, j, tmp_arr = array;
            for(i = tmp_arr.length; i;){
                for(p = --i; p > 0;){
                    if(tmp_arr[i] === tmp_arr[--p]){
                        for(j = p; --p && tmp_arr[i] === tmp_arr[p];);
                        i -= tmp_arr.splice(p + 1, j - p).length;
                    }
                }
            }

            return tmp_arr;
        }

        var type=($('#search_type :selected').text());
        var typing=450;
        var randomize_title=function()
        {
            var random_title=new Array();
            random_title[0]=new Array('iphone','width');
            random_title[1]=new Array('arlington','mayor');
            random_title[2]=new Array('windows xp','logo');
            random_title[3]=new Array('motorola razr v3','image');
            random_title[4]=new Array('McMUFFIN','Cholesterol');

            var ran=random_title[Math.floor(Math.random()*4)];
            $('#first_input').attr('title',ran[0]);
            $('#second_input').attr('title',ran[1]);
            //$('input[type=text]').hint(); <--hint causing on click to be removed
        }
        randomize_title();
        var timer;

        $('#search_type').change(
            function()
            {
                type=$(this).find(':selected').text();
                if (type=='ask')
                {
                    $('#second_input').show();
                    $('#search_container').css('width','780px');
                }
                else
                {
                    $('#second_input').hide();
                    $('#search_container').css('width','680px');
                    $('#first_input').keyup();
                }
                show_select_explain();
                randomize_title();
            }
        );
        if (type=='ask')
        {
            $('#second_input').show();
            $('#search_container').css('width','780px');

        }
         var parse_data=function(data)
        {
            var dat;
            var row='';
            var result='';

            var slided=false;
            data=$.parseJSON(data,true);
            if (data==null || data.length==0)
            {

                $('#ottocomplete').html('<br /><h3>You search has returned nothing, please rephrase and search again</h3>');
                return;
            }

            for(var i=0;i<data.length;i++)
            {
                dat=data[i].table_content_index;

                if(typeof(dat.items)=='string')dat.items=dat.items.split(';');
                if (dat.thumb!=null && dat.thumb.length>0)
                {
                    dat.thumb='<img src="/img/cache/thumb/table/'+dat.table_id+'/'+dat.thumb+'.jpeg" />';
                }
                else
                {
                    dat.thumb='No Picture';
                }
                row='<li class="a_table"><div class="table_left_part">'+dat.thumb+
                '</div> <div class="table_right_part"> <span class="table_title"><a href="/compare/'+dat.table_id+'/'+str_replace(' ','-',dat.title)+'">'+
                dat.title+'</a> - by <a href="/users/home/'+dat.author_name+'">'+
                dat.author_name+'</a>'+
                '</span><ul class="item_list">';
                for(var j=0;j<dat.items.length;j++)
                {
                    row+=('<li>'+dat.items[j]+' - <a href="#" class="add_item">add item<input type="hidden" name="item_id" value="'+dat.table_id+'.'+(1000+j)+';'+dat.items[j]+'" /></a></li>');
                }
                row+='</ul></div><div class="clear"></div></li>';
                result+=row;
            }
            $('#ottocomplete').html('<ul>'+result+'</ul>');

        }
        $('#search_form').submit(
            function()
            {
                if (type!=='ask')
                {
                    window.location='/search/'+type+'/1/'+escape($('#first_input').val());
                }
                else
                {
                    window.location='/search/'+type+'/'+escape($('#first_input').val())+'/'+escape($('#second_input').val());
                }

                return false;
            }
        );
        var search_ac=  function(query,callback)
        {
            var for_ac_type=type;
            if (type=='ask')for_ac_type='item';
            var cache_key='otto_'+for_ac_type+'_'+str_replace(' ','-',query);
            var data=$('#'+cache_key).html();


            if (data==null)
            {
                $('#ajax_loading').show();

                var get_result='';
                $.get(domain+'/search/ac/'+for_ac_type+'/'+query,
                    function(data)
                    {
                        $('#cache_otto').append('<span id="'+cache_key+'">'+data+'</span>');
                        $('#ajax_loading').hide();
                        callback(data);
                    }
                );

            }
            else
            {

                callback(data);
            }

        }
        var show_select_explain=function()
        {
            var message='';
            switch(type)
            {
                case 'ask':
                            message='<b>Type the item</b> name ex: iphone <b>and then the attribute</b> ex: width, and your question shall be answered, if the data exists of course';
                            break;
                case 'attribute':
                            message='<b>Type the attribute</b> that you are looking for, ex: height, image, etc. It will search tables that contain those attributes';
                            break;
                case 'item':
                            message='<b>Type the item</b> that you are looking for: iphone, texas and it will give you tables that have that item';
                            break;
                case 'keyword':
                            message='<b>Type any keyword </b> , it will look in all parts of the table for that keyword, a broad search Also, check out other types of search in the drop down :)';
                            break;

            }
            var the_display=$('#search_explain');
            the_display.html(message);
            the_display.hide();
            the_display.show('medium');

            setTimeout("$('#search_explain').hide('slow')",20000);

        }
        show_select_explain();
        var load_attr_of_items=function(data)
        {
            data=$.parseJSON(data,true);
            if (data==null || data.length==0)
            {
                return;
            }
            var ottocomplete_array=new Array();
            var array_index=0;
            for (var i=0;i<data.length;i++)
            {
                dat=data[i].table_content_index;

                if(typeof(dat.attrs)=='string')dat.attrs=dat.attrs.split(';');
                for(var j=0;j<dat.attrs.length;j++)
                {

                    ottocomplete_array[array_index++]=dat.attrs[j];
                }


            }
            ottocomplete_array=array_unique(ottocomplete_array);
            var second_input=$('#second_input');
            second_input.setOptions(ottocomplete_array).flushCache();
            second_input.autocomplete(ottocomplete_array,
                {
                    delay:100,
                    matchContains:true,
                    selectOnly:true,
                    maxItemsToShow:10,
                    onItemSelect :function(elem)
                                    {

                                        $.get(domain+'/search/ask/'+escape($('#first_input').val())+'/'+escape(second_input.val())+'/ajax',
                                            function(data)
                                            {

                                                $('#ottocomplete').html(data);

                                            }
                                        );
                                    }
                }
            );

            second_input.blur();
            second_input.focus();//i need this to turn on the autocomplete, if not, it wont show

        }
        $('#first_input').blur(
            function()
            {
                if (type!=='ask')return false;

                search_ac($(this).val(),load_attr_of_items);
            }
        );
        $('#first_input').keyup(
            function(ev)
            {
                var query=$(this).val();
                var before=$('#query_before');
                if (ev.keyCode!=13)//enter
                {
                    if (query.length==0 ||  before.html() == query)return false;
                }
                else
                {
                    if (type=='ask')
                    {
                        var second_input=$('#second_input');
                        second_input.focus();
                        second_input.blur();
                        alert('here');
                        return false;
                    }
                }

                if (type=='ask')return false;
                before.html(query);
                clearTimeout(timer);
                timer=setTimeout(
                            function()
                            {
                                parse_data(search_ac(query,parse_data));
                            },typing
                );

            }
        );
    }
);
