$(document).ready(function(){
    //Defaults
    var minChars = 3,                                                           //Length of minimal input
        jsonScript = 'php/ajax-termsuggest.php',                            //relative path to the result-script with json output
        input = '#qinput',                                                      //input-field which contains search terms
        container = '#qblock',                                                  //the list is included as the last object within the container
        form = "#qform",                                                        //Form to be sent
        digit = -1, max = 0, count = 0,                                         //digit, max and count are count-vars f�r keyboard-control
        mousemv = false;                                                        //stores if element selected by mouse or keyboard
    
    $(input).focus();
	$(input).val($(input).val()+'');
    $(container).append('<ul id="kjur_termsuggest_list"></ul>');                                 //list initialisation

    if(jQuery.browser.msie){
		$('#kjur_termsuggest_list').css('padding', '0px');
    }


    
    //Testing only!!!!
    
    //$(container)
	//.mousemove(function(){
	//    $(this).css('border', '3px solid #005387');
	//})
	//.mouseout(function(){
	//    $(this).css('border', '3px solid #0171b6');
	//});
    
    //End of testing area
    
    $('#kjur_termsuggest_list').addClass('kjur_termsuggest_asList');                             //list theming
    
    $('body').click(function(){                                                 //if clicked outside of list
        if($('#kjur_termsuggest_list').css('display') == 'block'){                               //AND list is visible
            $('#kjur_termsuggest_list').remove(); 				                                //hide list
            $(container).append('<ul id="kjur_termsuggest_list"></ul>');
            $('#kjur_termsuggest_list').addClass('kjur_termsuggest_asList');
            if(jQuery.browser.msie){
        		$('#kjur_termsuggest_list').css('padding', '0px');
            }
            $(input).focus();	                                               //and set focus on #input
			$(input).val($(input).val()+'');
        }
    });
    
    $(input).keyup(function(event){                                             //detection of user input (text)
        if($(input).val().length >= minChars){                                  //only input with <minChars> will trigger search
            escape($(input).val());                                             //generate cononical version of input
            var lastchar = $(input).val().substr($(input).val().length-1,1);    //determine last character of input
            if(lastchar == ' '){
                var q = $(input).val().substr(0,$(input).val().length-1) + '%20'; //replace whitespce with cononical equivalent
            }else{
                var q = $(input).val();                                         //leave input as it is if no WS @ the end
            }
            
            if(event.keyCode != 38 && event.keyCode != 39 && event.keyCode != 40 && event.keyCode != 41 && event.keyCode != 13){ //if no arrowkey or enter is pressed:
                digit = -1;                                                     //set cursor position below range for no preselection
                $.getJSON(jsonScript + '?q=' + q, function(data){               //getting json from predefined script
                    var output = "";
                    if(data){                                                   //check data for implementation
                        if(data.length > 0){                                    //secure minimal count of results (0 for popup at 1 result)
                            max = data.length;                                  //counting issues for keyboard control
                            count = 0;                                          //count for incrementing IDs
                            //$('#kjur_termsuggest_list').html('');                                //clear list
                            
                            $('#kjur_termsuggest_list').remove(); 				                                //hide list
                            $(container).append('<ul id="kjur_termsuggest_list"></ul>');
                            $('#kjur_termsuggest_list').addClass('kjur_termsuggest_asList');
                            if(jQuery.browser.msie){
                        		$('#kjur_termsuggest_list').css('padding', '0px');
                            }
                            
                            
                            
                            $.each(data, function(i, item){                     //generate a new item for each result with highlightng, link (for hover effect) and cleartext version of result to paste into <input>
                                $('#kjur_termsuggest_list').append('<li id="kjur_termsuggest_listItem' + count + '">' + item.name + '<span id="hidden" style="display:none;">' + item.clear + '</span><span id="id" style="display:none;">' + count + '</span></li>');
                                $('#kjur_termsuggest_listItem' + count).click(function(){        //assign click-functionality to list-item
								$(input).val(item.clear);
                                    //$('#kjur_termsuggest_list').fadeOut('100').html('');         //hide and empty list @ click
                                    
                                    $("#formq").submit();
                                                        //do not do anything else
                                }).mousemove(function(){
                                    $('#kjur_termsuggest_list').find('li').removeClass();
                                    $(this).addClass('kjur_termsuggest_listKeybMark');
                                    digit = $(this).find('#id').text();
                                    mousemv = true;
                                });
                                count++;                                        //increase count for IDs
                            });
                            $('#kjur_termsuggest_list').css('display', 'block');                           //Show list when done
                        }
                    }else{
                        //$('#kjur_termsuggest_list').html('');                     //Hide list if no data sent
                    	$('#kjur_termsuggest_list').remove(); 				                                //hide list
                        $(container).append('<ul id="kjur_termsuggest_list"></ul>');
                        $('#kjur_termsuggest_list').addClass('kjur_termsuggest_asList');
                        if(jQuery.browser.msie){
                    		$('#kjur_termsuggest_list').css('padding', '0px');
                        }
                        
                    }
                });
            }
        }else{
            //$('#kjur_termsuggest_list').hide().html('');                                 //hide list if to few characters (lower than <minChars>)
        	$('#kjur_termsuggest_list').remove(); 				                                //hide list
            $(container).append('<ul id="kjur_termsuggest_list"></ul>');
            $('#kjur_termsuggest_list').addClass('kjur_termsuggest_asList');
            if(jQuery.browser.msie){
        		$('#kjur_termsuggest_list').css('padding', '0px');
            }
        }
    });
    
    $(input).keydown(function(event){                                           //catching keyDowns for keyboard control
        //38 (up)
        //40 (down)
        if(event.keyCode == 38 && digit > 0){                                   //on press of UP and position is below upmost result:
            digit--;                                                            //move cursor up (lower <digit>, higher position)
            $(input).val($('#kjur_termsuggest_listItem' + digit).find('#hidden').html());        //paste hidden cleartext-result into <input>
        }else if(event.keyCode == 38 && digit <= 0){                            //on press of UP and position is upmost result or no selection:
            digit = max - 1;                                                    //jump to lowest result
            $(input).val($('#kjur_termsuggest_listItem' + digit).find('#hidden').html());
        }
        if(event.keyCode == 40 && digit < max - 1){                             //same for pressing DOWN-key
            digit++;
            $(input).val($('#kjur_termsuggest_listItem' + digit).find('#hidden').html());
        }else if(event.keyCode == 40 && digit >= max - 1){
            digit = 0;
            $(input).val($('#kjur_termsuggest_listItem' + digit).find('#hidden').html());
        }
        
        if(event.keyCode == 40 || event.keyCode == 38){                         //if changing the selection
            $('#kjur_termsuggest_list').find('li').removeClass();                                //delete all selections by erazing class of elements
            $('#kjur_termsuggest_listItem' + digit).addClass('kjur_termsuggest_listKeybMark');                   //and mark selected result
            mousemv = false;
        }
        
        if(event.keyCode == 13 && $('#kjur_termsuggest_list').css('display') != 'none' && digit != -1 && !mousemv){         //on press of enter AND list is NOT hidden:
            $(input).val($('#kjur_termsuggest_listItem' + digit).find('#hidden').text()).focus();//paste selected result (hidden cleartext) into <input> and focus <input>
            $('#kjur_termsuggest_list').hide().html('');                                 //and fade list out (no need to have it now)
            // event.preventDefault();                                             //prevent form from being sent by press of enter
            $(form).submit();
        }else if(event.keyCode == 13 && $('#kjur_termsuggest_list').css('display') == 'none'){
            $(form).submit();
        }
    });
});

