docs: protected IWord getNextTimeMergedWord(IWord word, int eIdx) throws IOException
      {
          int pIdx = TimeUtil.getDateTimeIndex(word.getEntity(eIdx));
          if ( pIdx == TimeUtil.DATETIME_NONE ) {
              return null;
          }
  
          IWord[] wMask = TimeUtil.createDateTimePool();
          TimeUtil.fillDateTimePool(wMask, pIdx, word);
  
          IWord dWord = null;
          int mergedNum = 0;
          while ( (dWord = super.next()) != null ) {
              String[] entity = dWord.getEntity();
              if ( entity == null ) {
                  eWordPool.push(dWord);
                  break;
              }
  
              if ( ArrayUtil.startsWith("time.a", entity) > -1 ) {
              	if ( TimeUtil.DATETIME_NONE ==
                          TimeUtil.fillDateTimePool(wMask, dWord) ) {
                      eWordPool.push(dWord);
                      break;
                  }
              } else if ( ArrayUtil.startsWith("datetime.hi", entity) > -1 ) {
                  /*
                   * check and merge the date time time part with a style
                   * like 15:45 or 15:45:36 eg...
                  */
                  TimeUtil.fillTimeToPool(wMask, dWord.getValue());
              } else if ( ArrayUtil.startsWith(Entity.E_DATETIME_P, entity) > -1 ) {
              	int tIdx = TimeUtil.fillDateTimePool(wMask, dWord);
              	if ( tIdx == TimeUtil.DATETIME_NONE || wMask[tIdx-1] == null ) {
                      eWordPool.push(dWord);
                      break;
                  }
              } else {
                  eWordPool.push(dWord);
                  break;
              }
  
              mergedNum++;
          }
  
          if ( mergedNum == 0 ) {
              return null;
          }
  
          buffer.clear();
          for ( int i = 0; i < wMask.length; i++ ) {
              if ( wMask[i] == null ) {
              	continue;
              }
  
              if ( buffer.length() > 0
              		&& (i+1) < wMask.length ) {
                  buffer.append(' ');
              }
  
              buffer.append(wMask[i].getValue());
          }
  
          dWord = new Word(buffer.toString(), IWord.T_BASIC_LATIN);
          dWord.setPosition(word.getPosition());
          dWord.setPartSpeech(IWord.TIME_POSPEECH);
  
          //check and define the entity
          buffer.clear().append("datetime.");
          for ( int i = 0; i < wMask.length; i++ ) {
              if ( wMask[i] == null ) continue;
              buffer.append(TimeUtil.getTimeKey(wMask[i]));
          }
  
          dWord.setEntity(new String[]{buffer.toString()});
  
          return dWord;
      }