
jQuery.AutoSearch = function(opt){
	var def = { form: '',
					textbox: '',
					category: '',
					button: '',
					resultWrap: '',
					resultItemClass: '',
					ajaxUrl: ''},
	option = jQuery.extend( def, opt ),
	search_term = '',
	allowSearch = 0,
	selected_element = null;	
		
	jQuery(option.textbox).keyup(function(e){
		var value = $(this).val();
		clearTimeout(allowSearch);
		search_term = value;
		if (search_term != '' &&  e.keyCode != 38 && e.keyCode != 40 && e.keyCode != 13 )
		{
			allowSearch = setTimeout( function(){
				jQuery.searchTerm();
				}, 1000 );
		}
		if ( e.keyCode == 13 )
		{
			if ( !jQuery(option.resultWrap).is(':hidden') )
			{
				selected = jQuery(option.resultWrap).find( '.selected' );
				//alert( selected );
	//			alert( selected.find('.text:last a').html() );
				href = selected.find('.text:last a').attr('href');
				window.location = href ;
			}
		}
	});
	
	jQuery(option.form).submit(function(){
		if ( !jQuery(option.resultWrap).is(':hidden') )
		{
			return false;
		}
		return true;
	});
	
	jQuery.searchTerm = function(){
		var catId = jQuery(option.category).val();
		
		//alert(option.ajaxUrl);
		
		jQuery.ajax({
			url: option.ajaxUrl,
			type: 'post',
			data: {
				action: 'ajax_autosearch',
				cat_id : catId,
				key: search_term
			},
			success: function(data){
				jQuery(option.resultWrap).html( data.html ).fadeIn().addClass('opened');
				jQuery.setUpMovement();
				jQuery(option.resultWrap).each(function(){
					var element = this;
					jQuery(document).click(function(e){
						var target = $(e.target);
						if ( target.attr('id') != $(element).attr('id') && !$.contains(element, e.target) )
						{
							jQuery.hideSearchResult();
						}
					});
				});				
			}
			});
	};
	
	jQuery.hideSearchResult = function(){
		jQuery(option.resultWrap).fadeOut().removeClass('opened');
	}
	
	jQuery.setUpMovement = function(){
		var elements = jQuery( option.resultItemClass ),
		wrapper = jQuery( option.resultWrap );
		
		if ( wrapper.hasClass( 'opened' ) )
		{
			elements.removeClass( 'selected' )
			elements.first().addClass( 'selected' );
			var selected = wrapper.find( '.selected' );
			
			jQuery( document ).keyup( function( e ) {
				
			if ( wrapper.hasClass( 'opened' ) )
			{
				switch (e.keyCode)
				{
					//if press up key
					case 38:
						var selected = wrapper.find( '.selected' );
						var prev = selected.prev();
						if ( prev.length > 0 )
						{
							elements.removeClass('selected')
							prev.addClass('selected');
						}
						else
						{
							selected.removeClass( 'selected' );
							elements.last().addClass( 'selected' );
						}
						break;
					//id press down key
					case 40:
						selected = wrapper.find( '.selected' );
						if ( selected.next().length > 0 )
						{
							elements.removeClass('selected')
							selected.next().addClass('selected');
						}
						else
						{						
							selected.removeClass('selected');
							elements.first().addClass( 'selected' );
						}
						break;
					//if press enter key
					case 40:
						selected = wrapper.find( '.selected' );
						alert( selected );
						
						break;
				};
			}
			});
		}
	};
	
}
