﻿(function() {
    var self = this;
    self._serviceUrl = "/Admin/Delade resurser/WebHandler/search.ashx";
    self._minLength = 3;
    self._cache = [];
    self._currentQuery = undefined;
    self.resultBox = undefined;
    self.inputBox = undefined;
    
    self.Attach = function() {
    	
    	self.resultBox = $('<div/>').addClass('json-result').appendTo('body').hide();
    	self.inputBox = $("#criteria");
    	self.inputBox.attr("autocomplete", "off").keyup(function(event) {

    	    var DOM_VK_ENTER = 14;
            var DOM_VK_ESCAPE = 27;
            
            if (event.which == DOM_VK_ENTER || event.which == DOM_VK_ESCAPE) {
                self.resultBox.empty().hide();
                return false;
            }
            
            var query = $(this).val();
            	
            if (query.length >= self._minLength)
            {	
            	self.ExecSearch(query);  	           
    	    }
    	    else{
    	 	self.resultBox.empty().hide();
    	    } 
    	    
      });  
            
            $(window).resize(function() {
            	var offset = self.inputBox.offset();
            	var wHeight = $(window).height();                
            	self.resultBox.css({top : (offset.top + 30) + "px", left : offset.left + "px", 'max-height' : (parseInt(wHeight) - 100) + "px"});
             });
    	
    };
    
    
    self.ExecSearch = function(query) {

    	if (self._currentQuery == query)
            return;

    	var cacheKey = "__" + query;
    	
    	self._currentQuery = query;
    	if (self._cache[cacheKey]) {
            self.RenderResult(self._cache[cacheKey]);
        }
        else{    	
    		$.getJSON(this._serviceUrl, { query: query, units: 3 }, function(result) {
    			self._cache["__" + query] = result;	    		
	    		self.RenderResult(result);
	        });
        }
    };
    
    self.RenderResult = function(data) {
        var offset = self.inputBox.offset();
        var wHeight = $(window).height();
        
        self.resultBox.empty().css({top : (offset.top + 30) + "px", left : offset.left + "px", 'max-height' : (parseInt(wHeight) - 100) + "px"});

        if(data.length == 0)
        {
        	self.resultBox.empty().slideUp('slow');
        	return;
        }       	
        
        var ul = $('<ul/>');               
        
        $.each(data, function(i, item) {        	      
        	 var a = $('<a/>').text(item.documentname).attr('href', item.address);
        	 var p = $('<p/>').text(item.introduction);
        	 var li = $('<li/>').append(a);
        	 $(ul).append(li);
        });
        
        self.resultBox.append(ul).slideDown();
    
    };    
     
    $(document).ready(self.Attach);
    
})();
