docs: function (input) {
              input = input.target || input;
              if (input.nodeName.toLowerCase() != 'input') { input = $('input', input.parentNode)[0]; } // find from button/image trigger
  
              if ($.timepicker._isDisabledTimepicker(input) || $.timepicker._lastInput == input) { return; } // already here
  
              // fix v 0.0.8 - close current timepicker before showing another one
              $.timepicker._hideTimepicker();
  
              var inst = $.timepicker._getInst(input);
              if ($.timepicker._curInst && $.timepicker._curInst != inst) {
                  $.timepicker._curInst.tpDiv.stop(true, true);
              }
              var beforeShow = $.timepicker._get(inst, 'beforeShow');
              extendRemove(inst.settings, (beforeShow ? beforeShow.apply(input, [input, inst]) : {}));
              inst.lastVal = null;
              $.timepicker._lastInput = input;
  
              $.timepicker._setTimeFromField(inst);
  
              // calculate default position
              if ($.timepicker._inDialog) { input.value = ''; } // hide cursor
              if (!$.timepicker._pos) { // position below input
                  $.timepicker._pos = $.timepicker._findPos(input);
                  $.timepicker._pos[1] += input.offsetHeight; // add the height
              }
              var isFixed = false;
              $(input).parents().each(function () {
                  isFixed |= $(this).css('position') == 'fixed';
                  return !isFixed;
              });
  
              var offset = { left: $.timepicker._pos[0], top: $.timepicker._pos[1] };
  
              $.timepicker._pos = null;
              // determine sizing offscreen
              inst.tpDiv.css({ position: 'absolute', display: 'block', top: '-1000px' });
              $.timepicker._updateTimepicker(inst);
  
  
              // position with the ui position utility, if loaded
              if ( ( ! inst.inline )  && ( typeof $.ui.position == 'object' ) ) {
                  inst.tpDiv.position({
                      of: inst.input,
                      my: $.timepicker._get( inst, 'myPosition' ),
                      at: $.timepicker._get( inst, 'atPosition' ),
                      // offset: $( "#offset" ).val(),
                      // using: using,
                      collision: 'flip'
                  });
                  var offset = inst.tpDiv.offset();
                  $.timepicker._pos = [offset.top, offset.left];
              }
  
  
              // reset clicked state
              inst._hoursClicked = false;
              inst._minutesClicked = false;
  
              // fix width for dynamic number of time pickers
              // and adjust position before showing
              offset = $.timepicker._checkOffset(inst, offset, isFixed);
              inst.tpDiv.css({ position: ($.timepicker._inDialog && $.blockUI ?
                  'static' : (isFixed ? 'fixed' : 'absolute')), display: 'none',
                  left: offset.left + 'px', top: offset.top + 'px'
              });
              if ( ! inst.inline ) {
                  var showAnim = $.timepicker._get(inst, 'showAnim');
                  var duration = $.timepicker._get(inst, 'duration');
  
                  var postProcess = function () {
                      $.timepicker._timepickerShowing = true;
                      var borders = $.timepicker._getBorders(inst.tpDiv);
                      inst.tpDiv.find('iframe.ui-timepicker-cover'). // IE6- only
                      css({ left: -borders[0], top: -borders[1],
                          width: inst.tpDiv.outerWidth(), height: inst.tpDiv.outerHeight()
                      });
                  };
  
                  // Fixed the zIndex problem for real (I hope) - FG - v 0.2.9
                  $.timepicker._adjustZIndex(input);
                  //inst.tpDiv.css('zIndex', $.timepicker._getZIndex(input) +1);
  
                  if ($.effects && $.effects[showAnim]) {
                      inst.tpDiv.show(showAnim, $.timepicker._get(inst, 'showOptions'), duration, postProcess);
                  }
                  else {
                      inst.tpDiv.show((showAnim ? duration : null), postProcess);
                  }
                  if (!showAnim || !duration) { postProcess(); }
                  if (inst.input.is(':visible') && !inst.input.is(':disabled')) { inst.input.focus(); }
                  $.timepicker._curInst = inst;
              }
          }