def availabilityJson2(request, tutorPK, pk):
    doFilter = int(request.GET.get('filter', 0))
    
    jsonObjects = []

    # remove smaller than seconds from dateNow and start at hour 0 minute 0
    dateNow = datetime.datetime(2018, 9, 9, 0, 0)

    if doFilter == 1:
        avail = Avail.objects.get(pk=int(pk))
        for x in range(0,7):
            if avail.iso_weekday == (dateNow.isoweekday() % 7):
                month = dateNow.month
                day = dateNow.day
                year = dateNow.year

                avail = Avail.objects.get(pk=int(pk))
                startDateTime = getDateTime(month, day, year, avail.startHour, avail.startMinute, False)
                endDateTime = getDateTime(month, day, year, avail.endHour, avail.endMinute, True)
                jsonObjects.append(getJsonEventObject(int(pk), 'avail2', startDateTime, endDateTime))
                break

            dateNow += datetime.timedelta(days = 1)
    else:
        avails = Avail.objects.filter(tutor=tutorPK)
        for x in range(0, 7):
            iso_weekday = dateNow.isoweekday() % 7
            month = dateNow.month
            day = dateNow.day
            year = dateNow.year

            # Filter avails by day and order by its startTime
            for y in avails.filter(iso_weekday=iso_weekday).order_by('startHour', 'startMinute'):

                startDateTime = getDateTime(month, day, year, y.startHour, y.startMinute, False)
                endDateTime = getDateTime(month, day, year, y.endHour, y.endMinute, True)
                if y.pk == int(pk):
                    jsonObjects.append(getJsonEventObject(y.pk, 'avail2', startDateTime, endDateTime))
                else:
                    jsonObjects.append(getJsonEventObject(y.pk, 'avail', startDateTime, endDateTime))

            dateNow += datetime.timedelta(days = 1)
    return JsonResponse(jsonObjects, safe=False)
def scheduleJson(request, tutorPK):
    avails = Avail.objects.filter(tutor=tutorPK)
    jsonObjects = []

    dateNow = datetime.datetime.now()
    # Remove smaller than seconds from dateNow and start at hour 0 minute 0
    dateNow = datetime.datetime(dateNow.year, dateNow.month, dateNow.day, 0, 0)

    # TODO: Instead of removing events, modify them so they are noted to be expired in some way
    # Fix/remove events as needed
    #badEvents = Event.objects.filter(year__lte=dateNow.year, month__lte=dateNow.month, day__lt=dateNow.day)
#    for x in badEvents:
#        if x.eventType == 1:
#            startDate = datetime.date(x.year, x.month, x.day)
#            endDate = datetime.date(x.year, x.month, x.day)
#            while(startDate < dateNow.date()):
#                startDate += datetime.timedelta(days=28)
#                endDate += datetime.timedelta(days=28)
#            x.year = startDate.year
#            x.month = startDate.month
#            x.day = startDate.day
#            x.save()
#        else:#eventType == 0:
#            x.delete()

    events = Event.objects.all()

    skipIndex = 0
    for x in range(0, 28):
        iso_weekday = dateNow.isoweekday() % 7
        month = dateNow.month
        day = dateNow.day
        year = dateNow.year

        # Filter avails by day and order by its startTime
        for y in avails.filter(iso_weekday=iso_weekday).order_by('startHour', 'startMinute'):
            # Filter events to this avail by day of week, then startDate (None goes first), startTime, event Type
            currentEvents = events.filter(year=year,month=month,day=day,avail=y).order_by('year', 'month', 'day', 'startHour', 'startMinute')

            # If there is no events or first event starts at beginning of avail
            skipIndex = 0

#            while(skipIndex < len(currentEvents)):
#                date = getDate(month, day, year, currentEvents[skipIndex].startHour, currentEvents[skipIndex].startHour, False)
#
                # No need anymore?
                #print(skipDates.filter(event=currentEvents[skipIndex], year=currentEvents[skipIndex].year, month=currentEvents[skipIndex].month, day=currentEvents[skipIndex].day).count())
#                if skipDates.filter(event=currentEvents[skipIndex], year=currentEvents[skipIndex].year, month=currentEvents[skipIndex].month, day=currentEvents[skipIndex].day).count() > 0:
#                    skipIndex += 1
#                else:
#                    break
            
            # If the skipIndex passes the possible index for events, assume that the avail is first on the day's list
            if skipIndex >= len(currentEvents):
                startDateTime = getDateTime(month, day, year, y.startHour, y.startMinute, False)
                endDateTime = getDateTime(month, day, year, y.endHour, y.endMinute, True)
                jsonObjects.append(getJsonEventObject(y.pk, 'avail', startDateTime, endDateTime))
                continue

            # If the avail's startTime is before the currentEvent's startTime, it will be first on the day's list
            if getTime(y.startHour, y.startMinute) < getTime(currentEvents[skipIndex].startHour, currentEvents[skipIndex].startMinute):
                # If there is any events left that aren't skiped, then the avail will cut off at the start of that event
                startDateTime = getDateTime(month, day, year, y.startHour, y.startMinute, False)
                endDateTime = getDateTime(month, day, year, currentEvents[skipIndex].startHour, currentEvents[skipIndex].startMinute, False)
                jsonObjects.append(getJsonEventObject(y.pk, 'avail', startDateTime, endDateTime))

            # prevZ will be the last event's index that wasn't skipped
            prevZ = -1
            for z in range(0, len(currentEvents)):
                # Not needed anymore right?

                # If an event is to be skipped this day
#                if skipDates.filter(event=currentEvents[z], year=year, month=month, day=day).count() > 0:
#                    continue
                
                # If the next event to be listed isn't back to back to the previous event, add avail between them
                if z > 0 and prevZ > -1 and getTime(currentEvents[z].startHour, currentEvents[z].startMinute) != getTime(currentEvents[prevZ].endHour, currentEvents[prevZ].endMinute):
                    startDateTime = getDateTime(month, day, year, currentEvents[prevZ].endHour, currentEvents[prevZ].endMinute, True)
                    endDateTime = getDateTime(month, day, year, currentEvents[z].startHour, currentEvents[z].startMinute, False)
                    jsonObjects.append(getJsonEventObject(y.pk, 'avail', startDateTime, endDateTime))

                # Add this event to the day's list
                startDateTime = getDateTime(month, day, year, currentEvents[z].startHour, currentEvents[z].startMinute, False)
                endDateTime = getDateTime(month, day, year, currentEvents[z].endHour, currentEvents[z].endMinute, True)
                jsonObjects.append(getJsonEventObject(currentEvents[z].pk, 'repeatEvent', startDateTime, endDateTime))

                # This event was successfully added, so prevZ is updated to this event's index
                prevZ = z

            # If the event doesn't end when the avail ends, add an avail to finish the day's list
            if prevZ > -1 and getDateTime(month, day, year, currentEvents[prevZ].startHour, currentEvents[prevZ].startMinute, True) < getDateTime(month, day, year, y.endHour, y.endMinute, True):
                startDateTime = getDateTime(month, day, year, currentEvents[prevZ].endHour, currentEvents[prevZ].endMinute, True)
                endDateTime = getDateTime(month, day, year, y.endHour, y.endMinute, True)
                jsonObjects.append(getJsonEventObject(y.pk, 'avail', startDateTime, endDateTime))
            print("prevZ is" + str(prevZ))
                    
        dateNow += datetime.timedelta(days = 1)
    return JsonResponse(jsonObjects, safe=False)