/**
 * Query completion module
 *
 * Depends on:
 *      - jQuery
 *      - jQuery UI
 *      - config.js
 */

(function($J) {
    $J(function() {
        // Extend the jquery.ui.autocomplete plugin to be able to prevent
        // querycompletion to popup after a search has been initiated
        $J.extend($J.ui.autocomplete.prototype, {
            renderingEnabled: true,
            disableRendering: function() {
                this.renderingEnabled = false;
            },
            enableRendering: function() {
                this.renderingEnabled = true;
            },
            _response_original: $J.ui.autocomplete.prototype._response,
            _response: function() {
                if (this.renderingEnabled) {
                    this._response_original.apply(this, arguments);
                }
            }
        });
		$J("#searchField").each(function(index, field){
			$J(field).autocomplete({
	            source: function(request,response) {
	                $J.ajax({
	                    type:          "GET",
	                    dataType:      "jsonp",
	                    url:           MM.cfg.querycompletionUrl + "/complete.do?format=opensearch&q=" + encodeURIComponent(request.term).toLowerCase(),
	                    success: function(data) {
	                        response(data[1]);
	                    },
						complete : function( XMLHttpRequest, textStatus ){
                    		//MM.util.showLoad( false );
                		},
						beforeSend: function(XMLHttpRequest){
							//MM.util.showLoad( true );
						}
	                });
	            },
	            minLength: 1,
	            select: function(event, ui){
	            	var f = (typeof event.target.form !== 'undefined' && event.target.form !== null ? event.target.form : $J(event.target).parents('form:first'));
	            	
	            	if(MM.cfg.renderInDepartment && MM.cfg.renderDepartment.length > 0){
	            		var sorting = "";
	            		if(MM.cfg.sortingBeforeSearch){
            				var sortingValue = $J('input:radio[name=sorting]:checked').val();	
            				sorting = "&sorting=" + sortingValue;
            			}
            			else{
            				sorting = "&sorting=" + MM.cfg.defaultSorting;
            			}
	            			
	            		var term = ui.item.value;
						location.href = MM.cfg.renderDepartment + "?q=" + term + sorting;
						event.stopPropagation();
	            	}
	            	else{
	            		if(f){
		            		var fld = event.target;
		            		fld.value = ui.item.value;
		            		$J(f).submit();
		            	}
	            	}
	            },
	            open: function(e, ui){
	            	var frm = (typeof e.target.form !== 'undefined' && e.target.form !== null ? e.target.form : $J(e.target).parents('form:first'));
	            	var fld = e.target;
	            	$J(document).bind('keypress',{felement:frm,field:fld}, function(event){
	            		if(event.keyCode == 13){
	            			if(event.data.felement){
	            				$J(event.data.field).autocomplete("close");
	            				$J(document).unbind('keypress');
	            				if(MM.cfg.renderInDepartment && MM.cfg.renderDepartment.length > 0){
	            					var sorting = "";
	        	            		if(MM.cfg.sortingBeforeSearch){
	                    				var sortingValue = $J('input:radio[name=sorting]:checked').val();	
	                    				sorting = "&sorting=" + sortingValue;
	                    			}
	                    			else{
	                    				sorting = "&sorting=" + MM.cfg.defaultSorting;
	                    			}
	        	            			
	        	            		var term = ui.item.value;
	        						location.href = MM.cfg.renderDepartment + "?q=" + term + sorting;
	        						event.stopPropagation();
	            				}
	            				else{
	            					$J(event.data.felement).submit();
	            				}
	            			}
	            		}
	            	});
	            }
        	});
		});
    });
})(jQuery.noConflict());

