/*
 * jQuery Gigi EI Suggestion
 * version: 0.1 (27/12/2008)
 * @requires jQuery v1.2.6 or later
 *
 * No use and no modification whitout express authorisation
 *
 * Revision: $Id$
 */
(
function($)
{
 $.GigiEISuggestion_busy = false;
 
 $.fn.GigiEISuggestion = function( options )
 {
  if( $(this).length > 0 )
  {
   options = $.extend({
                       divTopClass: 'input_156_open_top',
                       divBottomClass: 'input_156_open_bottom',
                       css_Zindex_open: '2',
                       css_Zindex_close: '1',
                       title: '',
                       
                       text_default: '',
                       text_separator: ',',
                       text_lengthStartSearch_string: '3',
                       text_lengthStartSearch_numeric: '2',
                       
                       ajaxURI: '',
                       ajaxData: {},
                       ajaxTreatResult: function(){},
                       ajaxTreatResult_attr1: null
                      }, options || {} );
   
   var input = $(this);
   var divBottom = document.createElement( "div" );
   var divTop = document.createElement( "div" );
   var iRequest = 0;
   
   options.text_default = $(input).attr("defaultValue");
   
   // Properties
   $(divBottom).addClass( options.divBottomClass );
   $(divBottom).addClass( "GigiEISuggestion_slide" );
   $(divBottom).hide();
   
   // Creation
   //$(divBottom).append( divTop );
   $(this).after( divBottom );
   
   // Events
   $(input).focus( function()
                   {
                    if( $(input).val() == options.text_default )
                     $(input).val( '' );
                    else
                    {
                     $(input).select();
                     $(input).attr( "selectionStart", "0" );
                     $(input).attr( "selectionEnd", $(input).val().length );
                    }
                   } );
   $(input).blur( function()
                  {
                   if( $.trim( $(input).val() ) == "" )
                    $(input).val( options.text_default );
                  } );
   $(input).dblclick( function()
                      {
                       if( ( ( $(input).val().length >= options.text_lengthStartSearch_string && isNaN( $(input).val() ) )
                          || ( $(input).val().length >= options.text_lengthStartSearch_numeric && !isNaN( $(input).val() ) ) )
                        && $(divBottom).html() != "" )
                       {
                        openMenu();
                       }
                      } );
   $(input).keyup( function()
                   {
                    if( ( $(input).val().length >= options.text_lengthStartSearch_string && isNaN( $(input).val() ) )
                     || ( $(input).val().length >= options.text_lengthStartSearch_numeric && !isNaN( $(input).val() ) ) )
                    {
                     iRequest++;
                     $.post( options.ajaxURI, 
                             $.extend( { w: $(input).val(), iRequest: iRequest }, options.ajaxData ), 
                             function( data )
                             {
                              if( data.iRequest >= iRequest )
                              {
                               if( ( resultTreatment = options.ajaxTreatResult( data, input, closeMenu, options.ajaxTreatResult_attr1 ) ) !== false )
                               {
                                $(divBottom).empty();
                                $(divBottom).append( resultTreatment );
                                if( $(divBottom).css( "display" ) == "none" )
                                 openMenu();
                               }
                              }
                             }, 
                             "json");
                    }
                    else
                    {
                     $(divBottom).empty();
                     closeMenu();
                    }
                   } );
   
   $("body").click( function()
                    {
                     if( $.GigiEISuggestion_busy == false )
                      closeMenu();
                    } );
   
   // Function animations
   function openMenu()
   {
    $.GigiEISuggestion_busy = true;
    $(input).addClass( options.divTopClass );
    $("div.GigiEISuggestion_slide").css( "z-index", options.css_Zindex_close );
    $("div.GigiEISuggestion_slide").slideUp( 'fast' );
    $(divBottom).css( "z-index", options.css_Zindex_open );
    $(divBottom).slideDown( 'fast', function(){ $.GigiEISuggestion_busy = false; } );
   }
   
   function closeMenu()
   {
    $.GigiEISuggestion_busy = true;
    $(divBottom).css( "z-index", options.css_Zindex_close );
    $(divBottom).slideUp( 'fast', function()
                                  {
                                   $.GigiEISuggestion_busy = false;
                                   $(input).removeClass( options.divTopClass );
                                  } );
   }
  }
 };
}
)(jQuery);