docs: function( input ) {
              input = input.target || input;
              if ( input.nodeName.toLowerCase() !== "input" ) { // find from button/image trigger
                  input = $( "input", input.parentNode )[ 0 ];
              }
  
              if ( $.datepicker._isDisabledDatepicker( input ) || $.datepicker._lastInput === input ) { // already here
                  return;
              }
  
              var inst, beforeShow, beforeShowSettings, isFixed,
                  offset, showAnim, duration;
  
              inst = $.datepicker._getInst( input );
              if ( $.datepicker._curInst && $.datepicker._curInst !== inst ) {
                  $.datepicker._curInst.dpDiv.stop( true, true );
                  if ( inst && $.datepicker._datepickerShowing ) {
                      $.datepicker._hideDatepicker( $.datepicker._curInst.input[ 0 ] );
                  }
              }
  
              beforeShow = $.datepicker._get( inst, "beforeShow" );
              beforeShowSettings = beforeShow ? beforeShow.apply( input, [ input, inst ] ) : {};
              if ( beforeShowSettings === false ) {
                  return;
              }
              datepicker_extendRemove( inst.settings, beforeShowSettings );
  
              inst.lastVal = null;
              $.datepicker._lastInput = input;
              $.datepicker._setDateFromField( inst );
  
              if ( $.datepicker._inDialog ) { // hide cursor
                  input.value = "";
              }
              if ( !$.datepicker._pos ) { // position below input
                  $.datepicker._pos = $.datepicker._findPos( input );
                  $.datepicker._pos[ 1 ] += input.offsetHeight; // add the height
              }
  
              isFixed = false;
              $( input ).parents().each( function() {
                  isFixed |= $( this ).css( "position" ) === "fixed";
                  return !isFixed;
              } );
  
              offset = { left: $.datepicker._pos[ 0 ], top: $.datepicker._pos[ 1 ] };
              $.datepicker._pos = null;
  
              //to avoid flashes on Firefox
              inst.dpDiv.empty();
  
              // determine sizing offscreen
              inst.dpDiv.css( { position: "absolute", display: "block", top: "-1000px" } );
              $.datepicker._updateDatepicker( inst );
  
              // fix width for dynamic number of date pickers
              // and adjust position before showing
              offset = $.datepicker._checkOffset( inst, offset, isFixed );
              inst.dpDiv.css( { position: ( $.datepicker._inDialog && $.blockUI ?
                  "static" : ( isFixed ? "fixed" : "absolute" ) ), display: "none",
                  left: offset.left + "px", top: offset.top + "px" } );
  
              if ( !inst.inline ) {
                  showAnim = $.datepicker._get( inst, "showAnim" );
                  duration = $.datepicker._get( inst, "duration" );
                  inst.dpDiv.css( "z-index", datepicker_getZindex( $( input ) ) + 1 );
                  $.datepicker._datepickerShowing = true;
  
                  if ( $.effects && $.effects.effect[ showAnim ] ) {
                      inst.dpDiv.show( showAnim, $.datepicker._get( inst, "showOptions" ), duration );
                  } else {
                      inst.dpDiv[ showAnim || "show" ]( showAnim ? duration : null );
                  }
  
                  if ( $.datepicker._shouldFocusInput( inst ) ) {
                      inst.input.trigger( "focus" );
                  }
  
                  $.datepicker._curInst = inst;
              }
          }