I seem to be having trouble with the logic in the following function. Calendar has a double-linked list of events, and I want to add events, and have them sorted upon being added. Unfortunately, when I test it, all of them are simply appended to the end of the list. To be honest, so far I haven't done more than three Events on a single execution.

Code:
int Calendar::addEventSorted( Event NewEvent ) //Add events in order of date
{
	Event* pNewEvent;
	pNewEvent = new Event;
	if( !pNewEvent )
		return( -1 );
	pNewEvent->setID( NewEvent.getID() );
	pNewEvent->setTitle( NewEvent.getTitle() );
	pNewEvent->setDescription( NewEvent.getDescription() );
	pNewEvent->setStartTime( NewEvent.getStartTime() );
	pNewEvent->setEndTime( NewEvent.getEndTime() );
	pNewEvent->setReminderTime( NewEvent.getReminderTime() );
	pNewEvent->setRepeatCode( NewEvent.getRepeatCode() );
	pNewEvent->mpNext = 0;
	pNewEvent->mpPrevious = 0;

	if( !mpFirstEvent )
	{
		mpFirstEvent = mpLastEvent = pNewEvent;
		++mNumberOfEvents;
		return( 0 );
	}
	Event* pEventScanner = mpFirstEvent;
	while( WhichTimeComesFirst( pEventScanner->getStartTime(), pNewEvent->getStartTime() ) == 1 )
		pEventScanner = pEventScanner->mpNext;
	pNewEvent->mpNext = pEventScanner;
	pNewEvent->mpPrevious = pEventScanner->mpPrevious;
	if( pEventScanner->mpPrevious )
		pEventScanner->mpPrevious->mpNext = pNewEvent;
	else
		mpFirstEvent = pNewEvent;
	pEventScanner->mpPrevious = pNewEvent;
	++mNumberOfEvents;
	return( 0 );
}

int WhichTimeComesFirst( tm time1, tm time2 ) //If time1 is first, return 1, return 2 if time2 is first
{
	if( time1.tm_year < time2.tm_year )
		return( 1 );
	if( time1.tm_year > time2.tm_year )
		return( 2 );
	if( time1.tm_yday < time2.tm_yday )
		return( 1 );
	if( time1.tm_yday > time1.tm_yday )
		return( 2 );
	if( time1.tm_hour < time2.tm_hour )
		return( 1 );
	if( time1.tm_min > time2.tm_min )
		return( 2 );
	if( time1.tm_sec < time2.tm_sec )
		return( 1 );
	if( time1.tm_sec > time2.tm_sec )
		return( 2 );
	return( 0 ); //They happen at the same time
}