jQuery.fn.liveSearch = function (conf) {
    var config = jQuery.extend({
        url:            'getdata.php', 
        id:                'jquery-live-search', 
        typeDelay:        400,
		numChar:1,
		idleDelay:5000,
		initValue:'Search..',
		mode:'short',
		urlDst:'urlDst',
		formName:'search',
        fadeDelay:        'fast'
    }, conf);
	
	var key='';
	var selectId=config.id+'_element';
	var kd=0;
	var nrow=0;
	var start=true;
	

	var result=jQuery('#'+config.id);
	var liveSearch=jQuery(this);
	
	var showResult = function () {
            result.fadeIn(config.fadeDelay);
        };

	var hideResult = function () {
           result.fadeOut(config.fadeDelay);
        };
		
	var timeout=function(){
		if(this.stimer){
				clearTimeout(this.stimer);
		}
		this.stimer = setTimeout(hideResult,config.idleDelay);
	}

	result.before('<img id="'+config.id+'_loader" style="display:none" class="loader" src="/newlivesearch/loader.gif" />');
	
	var showloader=function(){
			jQuery('#'+config.id+'_loader').css('display','block');
	}
	var hideloader=function(){
			jQuery('#'+config.id+'_loader').css('display','none');
	}

	liveSearch
	.val(config.initValue)
	.focus(function(e){
					
		if (this.value == config.initValue) {this.value='';}
		jQuery('.result').html('');
		hideResult();
	})
	.blur(function(e){
		if(this.value == '') { this.value=config.initValue;}
				   
	 })
	.keyup(function(e){
		if(!start)
			return;
			
		
		if (this.timer) {
                        clearTimeout(this.timer);
         }
		


		this.timer = setTimeout(function () {
										  
		if(liveSearch.val().length < config.numChar){
			hideResult();
			return ;
		}

		this.key=liveSearch.val().replace("&", "123456789");

		jQuery.ajax({
		  url: config.url,
		  data: 'query='+this.key+'&model='+config.mode,
		  beforeSend :function(){
			
			result.html('');
			showloader();
		  },
		  success: function(dt) {
	
			result.html(dt);
			hideloader();

			elems = document.getElementsByClassName('element');
			
			nrow=elems.length;
			for(i=0;i<elems.length;i++){

				jQuery(elems[i]).attr('id',selectId+(i+1));
							
				jQuery(elems[i]).click(function() {
					liveSearch.val($(this).text());
					jQuery('#'+config.urlDst).val($(this).attr('url'));
				    hideResult();
				})
				.hover(function() {
					jQuery(this).css('cursor','pointer');
					timeout();
				});
			}

			showResult();
			timeout();
			
			clearTimeout(this.timer);
			
		  }

		})
		},config.typeDelay);
		
		
	})
	.keydown(function(e){
	
		if(e.keyCode==40){
		

				for(i=1;i<(nrow+1);i++){
					jQuery('#'+selectId+i).removeClass('active');
				}

				if(kd<nrow){
					kd++;
				
				showResult();
				jQuery('#'+selectId+kd).addClass('active');
				liveSearch.val($('#'+selectId+kd).text());
				}
				else{
					kd=0;
					liveSearch.val(this.key);
				}
				start=false;
				timeout();

		}
		else if(e.keyCode==38){

				for(i=1;i < (nrow+1);i++){
					jQuery('#'+selectId+i).removeClass('active');
				}
				
				if(kd>1){
					kd--;

					liveSearch.val($('#'+selectId+kd).text());
					jQuery('#'+selectId+kd).addClass('active');
					showResult();
				}
				else if(kd==1){
					liveSearch.val(this.key);
					kd=0;
				}
				else{
					kd=nrow
					liveSearch.val($('#'+selectId+kd).text());
					jQuery('#'+selectId+kd).addClass('active');
					showResult();
				}
				start=false;
				timeout();
		}
		else if (e.keyCode==13){
				start=false;
				
				if(kd>0 && kd < (nrow+1)){
					jQuery('#'+config.urlDst).val($('#'+selectId+kd).attr('url'));
					
				}
				//$('#'+config.formName).submit();
				hideResult();
		}
		else{
			start=true;
		}
	});
}

document.getElementsByClassName = function(clsName){
    var retVal = new Array();
    var elements = document.getElementsByTagName("*");
    for(var i = 0;i < elements.length;i++){
        if(elements[i].className.indexOf(" ") >= 0){
            var classes = elements[i].className.split(" ");
            for(var j = 0;j < classes.length;j++){
                if(classes[j] == clsName)
                    retVal.push(elements[i]);
            }
        }
        else if(elements[i].className == clsName)
            retVal.push(elements[i]);
    }
    return retVal;
}

jQuery(document.body).click(function(event) {
            var clicked = jQuery(event.target);

            if (!(clicked.is('#searchBox1')) || !(clicked.is('#searchBox2'))) {
					jQuery('#result1').fadeOut('fast');
					jQuery('#result2').fadeOut('fast');

            }
});
