/*! \fn     displayCurrentSearchLoginTexts(char* text)
*   \brief  Display current search login text
*   \param  text            Text to be displayed
*   \param  resultsarray    Pointer to the array in which to store the addresses
*   \return Number of matching parents we displayed
*/
uint8_t displayCurrentSearchLoginTexts(char* text, uint16_t* resultsarray)
{
    uint16_t tempNodeAddr;
    pNode temp_pnode;
    uint8_t i;
    
    // Set font for search text
    oledSetFont(FONT_PROFONT_18);
    
    // Clear current text
    oledFillXY(100, 14, 50, 24, 0x00);
    
    // Display new search text
    oledPutstrXY(148, 14, OLED_RIGHT, text);
    
    // Set default font
    oledSetFont(FONT_DEFAULT);
    
    // Find the address of the first match
    tempNodeAddr = searchForServiceName((uint8_t*)text, COMPARE_MODE_COMPARE, SERVICE_CRED_TYPE);
    
    if (tempNodeAddr != last_matching_parent_addr)
    {
        last_matching_parent_addr = tempNodeAddr;
        
        for (i = 0; i < 4; i++)
        {
            oledFillXY((i&1)*175, 6+(i&2)*19, 81, 14, 0x00);
        }
        
        // Print the next 4 services
        i = 0;
        while ((tempNodeAddr != NODE_ADDR_NULL) && (i != 4))
        {
            resultsarray[i] = tempNodeAddr;
            readParentNode(&temp_pnode, tempNodeAddr);
            displayServiceAtGivenSlot(i, (const char*)temp_pnode.service);
            tempNodeAddr = temp_pnode.nextParentAddress;
            i++;
        }
        
        // Store and return number of children
        last_matching_parent_number = i;
    }
    
    return last_matching_parent_number;
}
/*! \fn     displayCurrentSearchLoginTexts(char* text)
*   \brief  Display current search login text
*   \param  text            Text to be displayed
*   \param  resultsarray    Pointer to the array in which to store the addresses
*   \param  search_index    Current search index (aka strlen(text))
*   \return Number of matching parents we displayed
*/
static inline uint8_t displayCurrentSearchLoginTexts(char* text, uint16_t* resultsarray, uint8_t search_index)
{
    uint16_t tempNodeAddr;
    pNode temp_pnode;
    uint8_t i, j;
    
    // Set font for search text
    oledSetFont(FONT_PROFONT_18);
    
    // Clear current text
    oledFillXY(100, 18, 50, 23, 0x00);
    
    // Display new search text
    oledPutstrXY(148, 17, OLED_RIGHT, text);
    
    // Set default font
    oledSetFont(FONT_DEFAULT);
    
    // Find the address of the first match
    tempNodeAddr = searchForServiceName((uint8_t*)text, COMPARE_MODE_COMPARE, SERVICE_CRED_TYPE);
    
    // Only change display if the first displayed service changed
    if (tempNodeAddr != last_matching_parent_addr)
    {
        last_matching_parent_addr = tempNodeAddr;
        
        for (i = 0; i < 4; i++)
        {
            oledFillXY((i&1)*170, 2+(i&2)*23, 84, 14, 0x00);
        }
        
        // Print the next 4 services (loop is until 5 for additional checks)
        i = 0;
        uint8_t temp_bool = TRUE;
        while ((temp_bool != FALSE) && (i != 5))
        {
            resultsarray[i] = tempNodeAddr;
            readParentNode(&temp_pnode, tempNodeAddr);
            
            // Display only first 4 services
            if (i < 4)
            {
                displayCredentialAtSlot(i, (char*)temp_pnode.service, INDEX_TRUNCATE_SERVICE_SEARCH);
            }
            // Loop around
            if (temp_pnode.nextParentAddress == NODE_ADDR_NULL)
            {
                tempNodeAddr = getStartingParentAddress();
            } 
            else
            {
                tempNodeAddr = temp_pnode.nextParentAddress;
            }
            i++;
            // Check that we haven't already displayed the next node
            for (j = 0; j < i; j++)
            {
                if (resultsarray[j] == tempNodeAddr)
                {
                    temp_bool = FALSE;
                }
            }
        }
        
        // Check if we could read 5 services after the given search text to know if we need to show the right arrow
        if (i == 5)
        {       
            // Compare our text with the last service text and see if they match
            if (strncmp(text, (char*)temp_pnode.service, search_index + 1) == 0)
            {
                // show arrow
                oledBitmapDrawFlash(176, 24, BITMAP_LOGIN_RARROW, 0);
            } 
            else
            {
                // hide arrow
                oledFillXY(176, 24, 16, 16, 0);
                i = 4;
            }
        }
        
        // Store and return number of children
        last_matching_parent_number = i;
    }
    
         
    // If the text is 4 chars long no need to display right arrow
    if ((search_index == SEARCHTEXT_MAX_LENGTH - 1) && (last_matching_parent_number > 4))
    {
        // hide arrow
        last_matching_parent_number = 4;
        oledFillXY(176, 24, 16, 16, 0);
    }
         
    return last_matching_parent_number;
}