Parse position data elements.

        Args:
            elements (list): Data values for position

        Returns:
            Position: Position object representing data

def parse_elements(elements):
        """Parse position data elements.

        Args:
            elements (list): Data values for position

        Returns:
            Position: Position object representing data
        """
        if not len(elements) in (11, 12):
            raise ValueError('Invalid RMC position data')
        time = datetime.time(*[int(elements[0][i:i + 2])
                               for i in range(0, 6, 2)])
        active = True if elements[1] == 'A' else False
        # Latitude and longitude are checked for validity during Fix
        # instantiation
        latitude = parse_latitude(elements[2], elements[3])
        longitude = parse_longitude(elements[4], elements[5])
        speed = float(elements[6])
        track = float(elements[7])
        date = datetime.date(2000 + int(elements[8][4:6]),
                             int(elements[8][2:4]), int(elements[8][:2]))
        variation = float(elements[9]) if not elements[9] == '' else None
        if elements[10] == 'W':
            variation = -variation
        elif variation and not elements[10] == 'E':
            raise ValueError('Incorrect variation value %r'
                             % elements[10])
        mode = elements[11] if len(elements) == 12 else None
        return Position(time, active, latitude, longitude, speed, track, date,
                        variation, mode)