﻿// JScript File

function removeFocusonCal1()
{
    var txtDateEbl = document.getElementById("txtDate1");
    txtDateEbl.blur();
}

function removeFocusonCal2()
{
    var txtDateEbl = document.getElementById("txtDate2");
    txtDateEbl.blur();
}


function setTimes(NumTimes)
{
    var txtbxApptEbl1 = document.getElementById("txtTime1");
    var drpTimeEbl1 = document.getElementById("drpTime1");
    txtbxApptEbl1.value = drpTimeEbl1.options[drpTimeEbl1.selectedIndex].text;

    // If there are 2 dates to be sent to through e-mail, then process 2nd date
    if (NumTimes == 2)   
    {
        var txtbxApptEbl2 = document.getElementById("txtTime2");
        var drpTimeEbl2 = document.getElementById("drpTime2");
        txtbxApptEbl2.value = drpTimeEbl2.options[drpTimeEbl2.selectedIndex].text;
    }


}


function AddItem(selectbox, text, value)
{
    var optn = document.createElement("OPTION");
    optn.text = text;
    optn.value = value;
    optn.disabled = false;
    selectbox.options.add(optn);
}

function ClearItems(selectbox)
{
    var i;
    for (i = selectbox.options.length - 1; i >= 0; i--)
    {
        selectbox.remove(i);
    }
}

function ApptReqDate1Valid(source, arguments)
{
    arguments.IsValid = chkHoursandPopDate(1, 61, 0);
}

function ApptReqDate2Valid(source, arguments)
{
    arguments.IsValid = chkHoursandPopDate(2, 61, 0);
}

function ApptResDate1Valid(source, arguments)
{
    arguments.IsValid = chkHoursandPopDate(1, 30, 1);
}

function ApptResDate2Valid(source, arguments)
{
    arguments.IsValid = chkHoursandPopDate(2, 61, 0);
}

function ApptCanDate1Valid(source, arguments)
{
    arguments.IsValid = chkHoursandPopDate(1, 30, 1);
}

function ApptPreDate1Valid(source, arguments)
{
    arguments.IsValid = chkHoursandPopDate(1, 30, 1);
}

function ApptBrdDate1Valid(source, arguments)
{
    arguments.IsValid = chkHoursandPopDate(1, 30, 1);
}



// tstBox is for name of date box to populate time
// minuteint is the minute interval
// skip skips over broad times
function chkHoursandPopDate(txtBox, minuteint, skip)
{
    if (txtBox == 1)
    {
        var drpTimeEbl = document.getElementById("drpTime1");
        var txtDateEbl = document.getElementById("txtDate1");
    }
    else if (txtBox == 2)
    {
        var drpTimeEbl = document.getElementById("drpTime2");
        var txtDateEbl = document.getElementById("txtDate2");
    }
    
    // Initialize the days, times and appointments increments that the business is open
    var WorkMonths = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
    var WorkDays = new Array('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday');
    var DaysWorking = new Array('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
    var StartHoursWorking = new Array(8, 8, 8, 8, 8, 8);
    var EndHoursWorking = new Array(18, 18, 18, 18, 18, 12);
    var NumOfDays = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
    var DaysInSelectedMonth;
    var DayOfWeek = "";
    var Month = "";
    var Day = "";
    var Year = "";
    var EnteredDateForCompare = "";
    var AmIWorking = false;
    var ValidWeekDay = false;
    var ValidMonth = false;
    var ValidDay = false;
    var ValidYear = false;
    var CurrentMonth =  new Date().formatAs("mm");
    var CurrentDay =  new Date().formatAs("dd");
    var CurrentDateForCompare; 
    var currentYear = new Date().formatAs("yyyy");
    var timeinc;
    var NumDaysWorking = DaysWorking.length;
    var extra0 = "";
    var i, j, k;

    if (CurrentMonth < 10)
    {
        CurrentMonth = "0" + CurrentMonth;             // Correct Month for compare must be in format yyyymmdd
    }
    if (CurrentDay < 10)
    {
        CurrentDay = "0" + CurrentDay;                 // Correct Month for compare must be in format yyyymmdd
    }
    CurrentDateForCompare = currentYear + CurrentMonth + CurrentDay;
    
    // Get Monday through Sunday
    for (i = 0; i < txtDateEbl.value.length; i++)
    {
        if (txtDateEbl.value.substring(i, i + 1) == " ")
        {
            break;
        }
    }
    DayOfWeek = txtDateEbl.value.substring(0, i);

    // Get January through December
    i++;
    for (; i < txtDateEbl.value.length; i++)
    {
        if (txtDateEbl.value.substring(i, i + 1) == " ")
        {
            break;
        }        
    }
    Month = txtDateEbl.value.substring(DayOfWeek.length + 1, i);
    
    // Get Day of Month
    i++;
    for (; i < txtDateEbl.value.length; i++)
    {
        if (txtDateEbl.value.substring(i, i + 1) == " ")
        {
            break;
        }        
    }
    Day = txtDateEbl.value.substring(DayOfWeek.length + Month.length + 2, i);
    
    // Get Year
    Year = txtDateEbl.value.substring(DayOfWeek.length + Month.length + Day.length + 3, i + 5);

    // Assume Date is valid and set up for compare to make sure client does not enter date before today or today
    EnteredDateForCompare = Year;    
   
    // Determine if user changed the format of the date.  If so, abort
    for (i = 0; i < 7; i++)
    {
        if (WorkDays[i] == DayOfWeek)
        {
            ValidWeekDay = true;
            break;
        }
    }
    if (!ValidWeekDay)
    {
        drpTimeEbl.disabled = true;
        ClearItems(drpTimeEbl);
        AddItem(drpTimeEbl, "Choose Time", 0);
        
        alert("The entered day of week is incorrect (Monday through Sunday). Please choose a date using the calendar. Thank you!");
        return false;
    }
    
    // Determine if user changed the format of the month. If so, abort
    for (i = 0; i < 12; i++)
    {
        if (WorkMonths[i] == Month)
        {
            ValidMonth = true;
            break;
        }
    }     
    if (!ValidMonth)
    {
        drpTimeEbl.disabled = true;
        ClearItems(drpTimeEbl);
        AddItem(drpTimeEbl, "Choose Time", 0);
        
        alert("The entered month is incorrect (January through December). Please choose a date using the calendar. Thank you!");
        return false;
    }
 
    // Determine if day is valid for selected month. If not, abort
    DaysInSelectedMonth =  NumOfDays[i];
    
    // Adjust for leap year
    if (((Year % 4) == 0) && (Month == "February"))
        DaysInSelectedMonth++;
            
    if ((Day > DaysInSelectedMonth) || (Day < 1))
    {
        drpTimeEbl.disabled = true;
        ClearItems(drpTimeEbl);
        AddItem(drpTimeEbl, "Choose Time", 0);
        
        alert("The entered day is incorrect for this month. Please choose a date using the calendar. Thank you!");
        return false;
    }
    
    // Determine if this is appointment is for this year or next year.  If not, abort.
    if ((parseInt(Year) < parseInt(currentYear)) || (parseInt(Year) > (parseInt(currentYear) + 1))) 
    {
        drpTimeEbl.disabled = true;
        ClearItems(drpTimeEbl);
        AddItem(drpTimeEbl, "Choose Time", 0);
        
        alert("The entered year must be this year or next year. Please choose a date using the calendar. Thank you!");
        return false;
    }

    // Check to see if day desired day for appointment is before the current day or today.  If so, Abort
    i++;
    if (i < 10)
    {
        i = "0" + i;   // Correct Month for comparison Must be in format yyyymmdd
    }
    EnteredDateForCompare = EnteredDateForCompare + i + Day;       

    if (parseInt(EnteredDateForCompare) < parseInt(CurrentDateForCompare))
    {
        drpTimeEbl.disabled = true;
        ClearItems(drpTimeEbl);
        AddItem(drpTimeEbl, "Choose Time", 0);
        
        alert("The entered date has already passed. Please choose another date using the calendar. Thank you!");
        return false;
    }

   if (parseInt(EnteredDateForCompare) == parseInt(CurrentDateForCompare))
   {
       drpTimeEbl.disabled = true;
       ClearItems(drpTimeEbl);
       AddItem(drpTimeEbl, "Choose Time", 0);
        
       alert("You can't make a request via e-mail on the same day. Please phone in your request. Thank you!");
       return false;
   }
    
    // Determine if the day is a working day
    for (i = 0; i < NumDaysWorking; i++)
    {
        if (DayOfWeek == DaysWorking[i])
        {
            AmIWorking = true;
            break;
        }
    }
    if (AmIWorking == true)
    {
        drpTimeEbl.disabled = false;
    }
    else
    {
        alert("Our hospital is closed on a " + DayOfWeek + ". Please choose Monday through Saturday. Thank you!");
        drpTimeEbl.disabled = true;
        ClearItems(drpTimeEbl);
        AddItem(drpTimeEbl, "Choose Time", 0);
        return false;
    }

    var itemPos = 0;
    ClearItems(drpTimeEbl);
    var fillTime;
    var isitpm;
    if (skip == 0)
    {
        AddItem(drpTimeEbl, "first available", 0);
        AddItem(drpTimeEbl, "morning", 1);
        AddItem(drpTimeEbl, "afternoon", 2);
        AddItem(drpTimeEbl, "anytime", 3);
        itemPos = 4;
    }
    
    if (minuteint < 61)
    {
        for (j = StartHoursWorking[i]; j < EndHoursWorking[i]; j++)
        {
            if (j > 12)
            {
                fillTime = j - 12;
            }
            else
            {
                fillTime = j;
                isitpm = "AM"
            }
            if (j >= 12)
            {
                isitpm = "PM";
            }
            timeinc = 60 / minuteint;
            for (k = 0; k < timeinc; k++)
            {
                if (k == 0)
                {
                    extra0 = "0";
                }
                else
                {
                    extra0 = "";
                }
                AddItem(drpTimeEbl, fillTime + ":" + minuteint * k + extra0 + " " + isitpm, itemPos);        
                
            }

        
            itemPos = itemPos + timeinc;
        }
    }
    return true;    
}    