jQuery.fn.autoComplete = function(parameters){
	defaults = {
		width : '300px',
		page : 'result.php',
		addleft : 0,
		addTop : 0,
		responseElementId : 'responseElementId',
		responseElementName : 'responseElementName',
		formSelector : '',
		queryName : 'query',
		limit : 3,
		loadingText : 'Yükleniyor...',
		notFoundText : 'Herhangi bir arkadaş bulunamadı!',
		extraQuery : {},
		selectedValue : 'id'
	};
	jQuery.extend(defaults,parameters);
    this.each(function(){
    	if (defaults.formSelector!=''){
    		defaults.formSelector.submit(function(){
    			if ($('#searchResult').is(':hidden')){
    				return true
    			}else{
    				return false;
    			}
    		});
    	}
    	var pos = $(this).offset();
    	var inputId = $(this).attr('id');
        container = $(document.createElement('div'))
        				.attr({
        					id : 'searchResult'
        				})
        				.css('width',defaults.width)
        				.css('top',pos.top + $(this).height() + 10 + defaults.addTop + 'px')
        				.css('left',$('#searchResult').width() + pos.left + defaults.addLeft + 'px')
        				.html('<ul></ul>');
        $(this).after(container);

        responseElement = $(document.createElement('input'))
        						.attr({
        							type : 'hidden',
        							id : defaults.responseElementId,
        							name : defaults.responseElementName
        						});
        $(this).after(responseElement);

        $(this).keyup(function(event){
            if (event.keyCode==13){
                index = $('#searchResult ul li').index($('#searchResult ul li.selected'));
                if (index>-1){
                    $(this).val($('#searchResult ul li.selected h2').html());
                    if (defaults.selectedValue=='name'){
                    	$('#' + defaults.responseElementId).val($('#searchResult ul li.selected h2').html());
                    }else{
                    	$('#' + defaults.responseElementId).val($('#searchResult ul li.selected span').html());
                    }
                    $('#searchResult').hide();
                    $('#searchResult ul li').remove();
                }
                return false;
            }else if(event.keyCode==40){
                // Aşağı
                if ($('#searchResult').is(':visible')){
                    index = $('#searchResult ul li').index($('#searchResult ul li.selected'));
                    count = $('#searchResult ul li').size();
                    if (index>-1){
                        if (index+1<count){
                            $('#searchResult ul li').removeClass('selected');
                            $('#searchResult ul li').eq(index+1).addClass('selected');
                        }
                    }else{
                        $('#searchResult ul li').removeClass('selected');
                        $('#searchResult ul li').eq(0).addClass('selected');
                    }
                }
            }else if(event.keyCode==38){
                // Yukarı
                if ($('#searchResult').is(':visible')){
                    index = $('#searchResult ul li').index($('#searchResult ul li.selected'));
                    count = $('#searchResult ul li').size();
                    if (index>-1){
                        if (index>0 || !index-2>count){
                            $('#searchResult ul li').removeClass('selected');
                            $('#searchResult ul li').eq(index-1).addClass('selected');
                        }
                    }
                }
            }else{
                if ($(this).val()!=''){
                    $('#searchResult ul li').remove();
                    $('#searchResult').show();

                	li = $(document.createElement('li'))
	        			.addClass('message')
	        			.html(defaults.loadingText)
	            		.appendTo($('#searchResult ul'));
                	var queries = defaults.extraQuery;
                	queries[defaults.queryName]=$(this).val();
                	queries['limit']=defaults.limit;

                    $.getJSON(defaults.page,queries,function(data){
                    	$('#searchResult ul li').remove();
                        if (data==0){
                        	$('#searchResult ul li').remove();
                        	li = $(document.createElement('li'))
                        			.addClass('message')
                        			.html(defaults.notFoundText)
		                    		.appendTo($('#searchResult ul'));
                        }else{
	                        jQuery.each(data,function(i,val){
	                        	li = $(document.createElement('li'))
		                        		.appendTo($('#searchResult ul'))
		                        		.click(function(){
		                                    $('#searchResult ul li').removeClass('selected');
		                                    $(this).addClass('selected');
		                                    $('#' + inputId).val($('#searchResult ul li.selected h2').html());
		                                    if (defaults.selectedValue=='name'){
		                                    	$('#' + defaults.responseElementId).val($('#searchResult ul li.selected h2').html());
		                                    }else{
		                                    	$('#' + defaults.responseElementId).val($('#searchResult ul li.selected span').html());
		                                    }
		                                    $('#searchResult').hide();
		                                    $('#searchResult ul li').remove();
		                        		});
	
	                            $(document.createElement('div'))
	                        		.addClass('img')
	                        		.html('<img src="' + data[i]['img'] + '" style="width:30px;" alt="" />')
	                        		.appendTo(li);
	                        	
	                            $(document.createElement('span'))
	                            	.html(data[i]['id'])
	                            	.appendTo(li)
	                            	.hide();
	
	                            $(document.createElement('h2'))
	                            	.html(data[i]['name'])
	                            	.appendTo(li);
	
	                            $(document.createElement('span'))
	                            	.html(data[i]['description'])
	                            	.appendTo(li);
	
	                            $(document.createElement('div'))
	                            	.attr({style : 'clear:both;'})
	                            	.appendTo(li);
	                        });
                        }
                    });
                }else{
                    $('#searchResult ul li').remove();
                    $('#searchResult').hide();
                }
            }
        });
    });
};