/*========================================================================================
	This script is used to populate the auto search list.
========================================================================================*/
$(document).ready(function() {
 $.fn.autosugguest({  
           className: 'search-suggest',
          methodType: 'GET',
            minChars: 3,//min chars for search
	   retrieveLimit: 10, //number for 'limit' param on ajax request
              rtnIDs: false,
		   startText: 'Search...',// used as watermark
            dataFile: 'searchResult.asp'// file returning that will return the search data
    });
	
});
(function($){
    $.fn.autosugguest = function(config) { 
        var defaults = {
            className: 'search-suggest',
	       methodType: 'GET',
            addParams: null,
               rtnIDs: false,
             dataFile: 'searchResult.asp',
             minChars:  3,
             fadeTime:  100
          }; 
        var config = $.extend(defaults, config);
		addWaterMark($("." + config.className + " > input"));	
        config.addParams = (config.addParams != '') ? '&' + config.addParams : '';
		var scrollTopPos=-10;// var for the div scroll position
        $('<div class="search-suggestionsBox"><ul></ul></div>').appendTo('.' + config.className);
        $(".search-suggestionsBox > ul li").live('mouseover', function(){	
            var sel = $(this).parent().find("li[class='selected']").removeClass('selected');
            $(this).addClass('selected');
        }); 
        $("." + config.className + " > input").keyup(function(event){
           var fieldParent = $(this).parents('div.' + config.className);
 
           if (event.which != 39 && event.which != 37 && event.which != 38 && event.which != 40 && event.which != 13 && event.which != 9 ) { 
                fieldVal = fieldParent.find('input:eq(0)').val();
                suggest(fieldVal,this.id);
           } else { 
             var fieldChild  = fieldParent.find('.search-suggestionsBox > ul');
             switch (event.which)
                {
                 case 40: { keyEvent(fieldChild,'next'); break; }
                 case 38: { keyEvent(fieldChild,'prev'); break; }
               case 13:
                 {	
				   // below code is requird to set the selected li text into the search box
					// fieldChild.find("li[class='selected']").trigger('click');
					//$("li[class='selected'] a").click();
                        //fieldParent.children('input:eq(0)').val($("li[class='selected'] a").text());// set the selected li to the input search field
                        //if (config.rtnIDs==true) fieldParent.children('input:eq(1)').val($("li[class='selected']").attr("id"));
                      // fieldParent.children('div.search-suggestionsBox').hide();					   
                       // return false;
					   $("li[class='selected'] a").focus();
                        break;
                 }
                 case 9:
                 {					
                        offFocus(this); $("li").removeClass("selected");
                        break;
                 }
             }
         }
        }); 
        $("." + config.className).bind("keypress", function(event) {			
             if (event.keyCode == 13){return true;}
        }); 
    // $("." + config.className + " > input").live("blur", function(){ offFocus(this); addWaterMark(this);$("li").removeClass("selected"); });	 
	 $(config.className).live("blur", function(){ offFocus("." + config.className + " > input"); addWaterMark(this);$("li").removeClass("selected"); });	 
	 $(".loadedIco").live("click", function(){ action(this); });	    
	 $("." + config.className + " > input").live("focus", function(){ removeWaterMark(this);});
	  $("." + config.className + " > input").live("blur", function(){ checkStatus(this);});	 
	   $("." + config.className + " > input").live("keyup", function(){ changeIcon(this);});		
		function action(field)// action for the close button
        {
			var fieldChild = $("." + config.className + " > input")
			$(fieldChild).val("");
			addWaterMark(fieldChild);
			var fieldParent =  $(fieldChild).parents('div.' + config.className);			
			fieldParent.children('div.search-suggestionsBox').delay(config.fadeTime).fadeOut();		 
        }
		function changeIcon(field)// change search icon for empty field
        {			
			if($(field).val()==""){
				$('#status').removeClass('loadedIco');
				$('#status').removeClass('loadIco');
				$('#status').addClass('searchIco');
			}			 
        }
		function checkStatus(field)// set watermark for empty field
        {
			if($(field).val()==""){
				addWaterMark(field);
			}			 
        }
		function addWaterMark(field)// used to add watermark for input search field
        {		
		  if($(field).val()== ""){
			  $(field).val(config.startText);
			  $(field).css('color','#c2c2c2');
			  $('#status').removeClass('loadedIco');
			  $('#status').addClass('searchIco');
		  }			
        }
		function removeWaterMark(field)//remove watermark
        {	
		  if($(field).val()== config.startText){
			  $(field).val("");
			  $(field).css('color','#5D5F60');
		  }			
        }
        function suggest(dataInput, id)
        {
            if(dataInput.length < config.minChars) {
                    $('#'+id).parent('.' + config.className).children('div.search-suggestionsBox').fadeOut();
            } else {
				$('#status').removeClass('searchIco');
				$('#status').removeClass('loadedIco');
				$('#status').addClass('loadIco');
                $.ajax({
                   type: config.methodType,
                    url: config.dataFile,
                   data: "data=" + dataInput + "&id=" + id + config.addParams,
                success: function(data){
                    if(data.length >0)
                    {
                        $('#'+id).parent('div.' + config.className).children('div.search-suggestionsBox').fadeIn();
                        $('#'+id).parent('div.' + config.className).find('.search-suggestionsBox > ul').html(data);
						if($('.search-suggestionsBox > ul').height()>=$('.search-suggestionsBox').height()){//add border if scroll appears
							$('.search-suggestionsBox').css('border','1px solid #CCCCCC');
							$('.search-suggestionsBox > ul > li').css('padding-right','18px');
						}else{//remove border if there is no scroll
							$('.search-suggestionsBox').css('border','0');
							$('.search-suggestionsBox > ul > li').css('padding-right','2px');
						}
					    $('#status').removeClass('searchIco');
						$('#status').removeClass('loadIco');
						$('#status').addClass('loadedIco');
                    }
                    else
                    {
						  $('#status').removeClass('loadIco');
						  $('#status').removeClass('loadedIco');
						  $('#status').addClass('searchIco');
                    }
                }
              });
            }
        } 
        function keyEvent (fieldChild,action)// used for arrow up/down keys
        {
            yx = 0;
            fieldChild.find("li").each(function(){
                if($(this).attr("class") == "selected")
                yx = 1;
            }); 
            if(yx == 1)
            {
                var sel = fieldChild.find("li[class='selected']");
                if(action=='next'){
					sel.next().addClass("selected");
					scrollTopPos = scrollTopPos+sel.next().height();
					$("div.search-suggestionsBox").animate({scrollTop: scrollTopPos + 'px'}, 0);//scrolling div position					 
				}else{
					sel.prev().addClass("selected");
					scrollTopPos = scrollTopPos-sel.height();
					$("div.search-suggestionsBox").animate({scrollTop: scrollTopPos+'px'}, 0);//scrolling div position
				}
                sel.removeClass("selected");				
            }
            else
            {
                if(action=='next'){
					fieldChild.find("li:first").addClass("selected");
					$("div.search-suggestionsBox").animate({scrollTop: '0px'}, 0);//scrolling div position
					scrollTopPos = -10;
				}else{
					fieldChild.find("li:last").addClass("selected");
					var ulHeight = $("div.search-suggestionsBox > ul").height();
					$("div.search-suggestionsBox").animate({scrollTop: ulHeight + 'px'}, 0);//scrolling div position
					scrollTopPos = ulHeight-50;
				}
            }			
        } 
        function offFocus(fieldChild)
        {
            var fieldParent =  $(fieldChild).parents('div.' + config.className);			
            fieldParent.children('div.search-suggestionsBox').delay(config.fadeTime).fadeOut();
        } 
        $(".search-suggestionsBox > ul li").live("click", function()
        {
            var fieldParent = $(this).parents('div.' + config.className);
           // fieldParent.children('input:eq(0)').val($(this).text());  // set the selected li to the input search field
           // if (config.rtnIDs==true) fieldParent.children('input:eq(1)').val($(this).attr("id"));
           // fieldParent.children('div.search-suggestionsBox').hide();
        }); 
    };
})(jQuery);
