﻿var m_selectedStartDate = null;
var m_selectedEndDate = null;
var m_elementPrefix = null;

function selectCalendarDay(elementId)
{
    m_elementPrefix = elementId.toString().substring(0, elementId.toString().lastIndexOf("_")+1);

    resetAvailabiliytCalendarDates();
    if ((m_selectedStartDate != null) && (!isNaN(m_selectedStartDate.getTime())) && (m_selectedEndDate != null) && (!isNaN(m_selectedEndDate.getTime())))
    {
        m_selectedStartDate = null;
        m_selectedEndDate = null;
        setPscStartDate(null);
        setPscEndDate(null);
    }
        
    // Attribute "name" is used to store the formatted date string
    var selectedDateFormattedString = document.getElementById(elementId).attributes["name"].value;
    var selectedDate = getFieldDate(selectedDateFormattedString);
    selectedDate.setHours(0, 0, 0, 0);

    if ((m_selectedStartDate == null) || (isNaN(m_selectedStartDate.getTime())))
    {
        m_selectedStartDate = selectedDate;
        m_selectedEndDate = null;
        setPscStartDate(selectedDateFormattedString);
        setPscEndDate(null);
    }
    else if ((m_selectedStartDate.getFullYear() == selectedDate.getFullYear()) &&
                (m_selectedStartDate.getMonth() == selectedDate.getMonth()) &&
                (m_selectedStartDate.getDate() == selectedDate.getDate()))
    {
        m_selectedStartDate = null;
        m_selectedEndDate = null;
        setPscStartDate(null);
        setPscEndDate(null);
    }
    else if (!isPscEndDateVisible())
    {
        m_selectedStartDate = selectedDate;
        m_selectedEndDate = null;
        setPscStartDate(selectedDateFormattedString);
        setPscEndDate(null);
    }
    else
    {
        if (selectedDate > m_selectedStartDate)
        {
            m_selectedEndDate = selectedDate;
            setPscEndDate(selectedDateFormattedString);
        }
        else
        {
            alert(g_translatedStrings["StartEndDateErrorMessage"]);
        }
    }
    
    toggleDays(m_selectedStartDate, m_selectedEndDate, m_elementPrefix);
}

function initializeAvailabilityCalendarObjects(elementPrefix)
{
    m_elementPrefix = elementPrefix;
    m_selectedStartDate = getPscStartDate();
    m_selectedEndDate = getPscEndDate();
    
    toggleDays(m_selectedStartDate, m_selectedEndDate, m_elementPrefix);
}

function initializeChangeDatesCalendarObjects(elementPrefix) {
    //alert(elementPrefix);
    //debugger;
    m_elementPrefix = elementPrefix;
    m_selectedStartDate = getPscStartDate();
    m_selectedEndDate = getPscEndDate();

    toggleDays(m_selectedStartDate, m_selectedEndDate, m_elementPrefix);
}


function toggleDays(startDate, endDate, elementPrefix)
{
    var dateString;
    
    m_elementPrefix = elementPrefix;
    if ((startDate != null) && (!isNaN(startDate.getTime())) && (endDate != null) && (!isNaN(endDate.getTime())))
    {
        m_selectedStartDate = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate(), 0, 0, 0, 0);
        m_selectedEndDate = new Date(endDate.getFullYear(), endDate.getMonth(), endDate.getDate(), 0, 0, 0, 0);
        
        for (var date = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate(), 0, 0, 0, 0); date <= endDate; date.setDate(date.getDate()+1))
        {
            // Requires yyyy-m-d as the format for the element ID
            dateString = date.getFullYear() + "-" + (date.getMonth()+1) + "-" + date.getDate();

            toggleDay(elementPrefix + dateString);
        }
    }
    else if ((startDate != null) && (!isNaN(startDate.getTime())))
    {
        m_selectedStartDate = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate(), 0, 0, 0, 0);

        // Requires yyyy-m-d as the format for the element ID
        dateString = startDate.getFullYear() + "-" + (startDate.getMonth()+1) + "-" + startDate.getDate();

        toggleDay(elementPrefix + dateString);
        setEndStyle(elementPrefix + dateString);
    }
    else if (((endDate != null) && (!isNaN(endDate.getTime()))))
    {
        m_selectedEndDate = new Date(endDate.getFullYear(), endDate.getMonth(), endDate.getDate(), 0, 0, 0, 0);

        // Requires yyyy-m-d as the format for the element ID
        dateString = endDate.getFullYear() + "-" + (endDate.getMonth()+1) + "-" + endDate.getDate();

        toggleDay(elementPrefix + dateString);
        setEndStyle(elementPrefix + dateString);
    }
    
    if(m_selectedStartDate && !isNaN(m_selectedStartDate.getTime())){
        dateString = m_selectedStartDate.getFullYear() + "-" + (m_selectedStartDate.getMonth()+1) + "-" + m_selectedStartDate.getDate();
        setStartStyle(elementPrefix + dateString);
    }    
    
    if(m_selectedEndDate && !isNaN(m_selectedEndDate.getTime())){
        dateString = m_selectedEndDate.getFullYear() + "-" + (m_selectedEndDate.getMonth()+1) + "-" + m_selectedEndDate.getDate(); 
        setEndStyle(elementPrefix + dateString);
    }
}

function toggleDay(elementId)
{
    var element = document.getElementById(elementId);

    if (element)
    {
        if((element.style.borderBottom == "") || (element.style.borderBottom.indexOf("2px") < 0)){
            element.style.borderBottom = "2px solid #993300";
            element.style.borderTop = "2px solid #993300";
        } else {
            element.style.border = "none";
        }
    }
}

function setStartStyle(elementId){
    var element = document.getElementById(elementId);
    if(element && element.style.borderBottom.indexOf("px") > -1){
        element.style.borderLeft = "2px solid #993300";
    }
}

function setEndStyle(elementId){
    var element = document.getElementById(elementId);
    if(element && element.style.borderBottom.indexOf("px") > -1){
        element.style.borderRight = "2px solid #993300";
    }
}

function resetAvailabiliytCalendarDates()
{
    var startDate;
    var endDate;
    
    if ((m_selectedStartDate != null) && (m_selectedEndDate != null))
    {
        startDate = new Date(m_selectedStartDate.getFullYear(), m_selectedStartDate.getMonth(), m_selectedStartDate.getDate(), 0, 0, 0, 0);
        endDate = new Date(m_selectedEndDate.getFullYear(), m_selectedEndDate.getMonth(), m_selectedEndDate.getDate(), 0, 0, 0, 0);
    }
    else if ((m_selectedStartDate != null) && (!isNaN(m_selectedStartDate.getTime())))
    {
        startDate = new Date(m_selectedStartDate.getFullYear(), m_selectedStartDate.getMonth(), m_selectedStartDate.getDate(), 0, 0, 0, 0);
    }
    else if (((endDate != null) && (!isNaN(endDate.getTime()))))
    {
        endDate = new Date(m_selectedEndDate.getFullYear(), m_selectedEndDate.getMonth(), m_selectedEndDate.getDate(), 0, 0, 0, 0);
    }

    toggleDays(startDate, endDate, m_elementPrefix);
}

function setAvailabilityCalendarStartDate(date)
{
    resetAvailabiliytCalendarDates();
    m_selectedStartDate = getFieldDate(date);
    toggleDays(m_selectedStartDate, m_selectedEndDate, m_elementPrefix);
}

function setAvailabilityCalendarEndDate(date)
{
    resetAvailabiliytCalendarDates();
    m_selectedEndDate = getFieldDate(date);
    toggleDays(m_selectedStartDate, m_selectedEndDate, m_elementPrefix);
}

function invokeSearchButtonClickFromAvailabilityCalendar(searchButtonId)
{
    var searchButton = document.getElementById(searchButtonId);
    if (searchButton)
    {
        searchButton.click();
    }
    else if (typeof(invokePscSearchButtonClickFromAvailabilityCalendar) == "function")
    {
        invokePscSearchButtonClickFromAvailabilityCalendar();
    }
}
