﻿// When tab functions
function WHEN() { }

WHEN.Init = function() {
    WHEN.IsLoaded = false;
    WHEN.IsValid = false;
};

WHEN.DefineLiterals = function(data, status) {
    //alert("WHEN.DefineLiterals = " + status);

    //WHEN.PredefinedDates = data.PredefinedDates;
    WHEN.Previous = data.Previous;
    WHEN.Duration = data.Duration;
    WHEN.StartDate = data.StartDate;
    WHEN.EndDate = data.EndDate;
    WHEN.DateRange = data.DateRange;
    WHEN.AllDays = data.AllDays;
    WHEN.Days = data.Days;
    WHEN.DateFormat = data.DateFormat;

    WHEN.StartTime = data.StartTime;
    WHEN.EndTime = data.EndTime;
    WHEN.TimeRange = data.TimeRange;
    WHEN.AllTimes = data.AllTimes;
    WHEN.TimeStyle = data.TimeStyle;
    WHEN.Time = data.Time;
    WHEN.Sliced = data.Sliced;
    WHEN.NoneSelected = data.NoneSelected;
    WHEN.EndDateBeforeStart = data.EndDateBeforeStart;
    WHEN.MaxDaysExceeded = data.MaxDaysExceeded;

    WHEN.Months = data.Months;

    var d = new Date();
    var url = "Data.aspx?page=when&t=" + d.getTime();
    var target = document.getElementById("when-content");

    //alert("Show When = " + url);
    _dynoLoader._loadXmlDocument(url, target, WHEN.Load, null, false);
};

WHEN.Load = function() {
    //alert("WHEN.Load");
    WHEN.IsLoaded = true;
    WHEN.DateDisplay = "";
    WHEN.DateSelection = "";
    WHEN.HaveTime = false;
    WHEN.TimeDisplay = "";
    WHEN.TimeSelection = "";
    WHEN.TimeType = "";
    WHEN.HaveDOW = false;
    WHEN.DOWDisplay = "";
    WHEN.DOWSelection = "";
    WHEN.PreviousUnits = "";

    WHEN.StartDatePickerObj = CreateDatePicker("startdate", true, WHEN.Months, WHEN.ManualDateChange);
    WHEN.EndDatePickerObj = CreateDatePicker("enddate", false, WHEN.Months, WHEN.ManualDateChange);
    WHEN.MaxDays = parseInt(document.getElementById("enddate_maxrange").value, 10);

    if ($("#DayRangeSelect").attr("length") < 2) $(".date-heading").hide();

    //$("#when-content").css({ marginBottom: "20px" });

    UIHelper.HideStatusMessage(true);

    WHEN.ValidateDate("startdate");
    WHEN.ValidateDate("enddate");

    $("input[name*='when-time-type']").click(function() {
        WHEN.TimeTypeSelected($(this).val());
    });

    if ($("#lstWhenTimeHelper").attr("length") > 1) {
        WHEN.HaveTime = true;
        $("#time-holder").show();

        // Set to time to end of day. From time is fine at default 0:0
        $('#lstWhenToHours').attr('selectedIndex', 23);
        $('#lstWhenToMinutes').attr('selectedIndex', 59);
        WHEN.TimeType = "Sliced";

        WHEN.ValidateTime();
    }

    if ($("#lstWhenDOWHelper").attr("length") > 1) {
        WHEN.HaveDOW = true;
        $("#dow-holder").show();

        WHEN.ValidateDOW();
    }

    WHEN.ShowContent();
};

WHEN.ShowContent = function() {
    $("#when-content").slideDown();
};

WHEN.PreviousUnitsChanged = function() {
    //alert("WHEN.PrevUnitsChanged = " + $("#lstWhenPrevUnits").val());
    //if ($("#lstWhenPrevUnits").val() == "0") return;

    var vals = $("#lstWhenPrevUnits").val().split(",");
    var max = parseInt(vals[1]);
    WHEN.PreviousUnits = vals[0];

    s = WHEN.Previous + ':&nbsp;<select name="lstWhenPrevNumbers" id="lstWhenPrevNumbers" onchange="javascript:WHEN.SetPreviousDates();" >';
    s += '<option value="0" >' + WHEN.Duration + '</option>';
    for (var idx = 1; idx <= max; idx++) {
        s += '<option value="' + idx + '" >' + idx + '</option>';
    }
    s += "</select>";

    $("#when-prev-numbers").html(s);
    $('#lstWhenPrevNumbers').attr('selectedIndex', 0);
};

WHEN.SetPreviousDates = function() {
    //alert("WHEN.SetPreviousDates = " + $("#lstWhenPrevUnits :selected").text() + ": " + $("#lstWhenPrevNumbers").val());
    if (WHEN.PreviousUnits == "0") return;
    if ($("#lstWhenPrevNumbers").val() == "0") return;

    var startDate;
    var now = new Date();
    var endDate = new Date(WHEN.EndDatePickerObj._endLimit);
    var numUnits = parseInt($("#lstWhenPrevNumbers").val());

    switch (WHEN.PreviousUnits) {
        case "H":
            endDate.setHours(now.getHours());
            endDate.setMinutes(now.getMinutes());
            // Convert to milliseconds and subtract from end time
            // (hours * mins per hour * seconds per min * milliseconds per second) + 1 min as milliseconds
            startDate = new Date(endDate.getTime() - (numUnits * 60 * 60 * 1000) + 60000);
            //alert("Start = " + startDate + " - " + startDate.getHours() + ":" + startDate.getMinutes() + ", End = " + endDate);

            $('#lstWhenFromHours').attr('selectedIndex', startDate.getHours());
            $('#lstWhenFromMinutes').attr('selectedIndex', startDate.getMinutes());
            $('#lstWhenToHours').attr('selectedIndex', endDate.getHours());
            $('#lstWhenToMinutes').attr('selectedIndex', endDate.getMinutes());

            if (WHEN.TimeType == "Sliced") {
                $("#when-time-sliced").attr("checked", "");
                $("#when-time-duration").attr("checked", "checked");
                WHEN.TimeTypeSelected("Duration");
            } else {
                WHEN.ValidateTime();
            }
            break;

        case "D":
            startDate = new Date(endDate.getTime() - (numUnits - 1) * 24 * 60 * 60 * 1000);
            break;

        case "W":
            var days = numUnits * 7 - 1;
            var dow = endDate.getDay() + 1;
            endDate = new Date(endDate.getTime() - dow * 24 * 60 * 60 * 1000); // Set to previous Saturday
            startDate = new Date(endDate.getTime() - days * 24 * 60 * 60 * 1000);
            break;

        case "M":
            endDate.setDate(1); // Set to first day of this month
            endDate = new Date(endDate.getTime() - 1 * 24 * 60 * 60 * 1000); // Backup one day which will be last day of the month

            startDate = new Date(new Date());
            var crntMonth = endDate.getMonth();
            var prevMonth = crntMonth - numUnits + 1;
            if (prevMonth < 0) {
                prevMonth = 12 + prevMonth;
                var year = startDate.getFullYear();
                startDate.setFullYear(year - 1); // Back up one year
            }
            startDate.setMonth(prevMonth);
            startDate.setDate(1);
            break;

        default:
            UIHelper.ShowStatusMessage("Error: Unknown date/time units", "error");
            return;
    }

    //alert("Start = " + startDate + "\nEnd = " + endDate);
    WHEN.SetDates(startDate, endDate);

    $('#DayRangeSelect').attr('selectedIndex', 0);
};

WHEN.ManualDateChange = function(id) {
    $('#DayRangeSelect').attr('selectedIndex', 0);
    $('#lstWhenPrevUnits').attr('selectedIndex', 0);
    $('#lstWhenPrevNumbers').attr('selectedIndex', 0);
    WHEN.ValidateDate(id);
};

WHEN.SetPredefinedDates = function() {
    var dates = $("#DayRangeSelect").val();

    if (dates != null && dates != "") {
        var dateArray = dates.split(",");

        // Must set dates by replacing month and day to handle European format
        var startDate = new Date("1/1/" + dateArray[2]);
        startDate.setMonth(dateArray[0]);
        startDate.setDate(dateArray[1]);

        var endDate = new Date("1/1/" + dateArray[5]);
        endDate.setMonth(dateArray[3]);
        endDate.setDate(dateArray[4]);

        WHEN.SetDates(startDate, endDate);

        $('#lstWhenPrevUnits').attr('selectedIndex', 0);
        $('#lstWhenPrevNumbers').attr('selectedIndex', 0);
    }
};

WHEN.SetDates = function(startDate, endDate) {
    // set End Date Calendar
    WHEN.EndDatePickerObj._currentDate.setFullYear(endDate.getFullYear());
    WHEN.EndDatePickerObj._currentDate.setMonth(endDate.getMonth());
    WHEN.EndDatePickerObj._update();
    WHEN.EndDatePickerObj._setDateSelection(endDate.getDate() + WHEN.EndDatePickerObj._getFirstDayIndex() - 1, WHEN.ValidateDate, "enddate");

    // set Start Date Calendar
    WHEN.StartDatePickerObj._currentDate.setFullYear(startDate.getFullYear());
    WHEN.StartDatePickerObj._currentDate.setMonth(startDate.getMonth());
    WHEN.StartDatePickerObj._update();
    WHEN.StartDatePickerObj._setDateSelection(startDate.getDate() + WHEN.StartDatePickerObj._getFirstDayIndex() - 1, WHEN.ValidateDate, "startdate");
};

WHEN.ValidateDate = function(id) {
    var s, errorClass = "";
    WHEN.IsValid = false;
    WHEN.DateDisplay = "";
    WHEN.DateSelection = "";

    if (id == "startdate") {
        s = (WHEN.StartDatePickerObj._selectedDate.getMonth() + 1) + "/" +
	         WHEN.StartDatePickerObj._selectedDate.getDate() + "/" +
	         WHEN.StartDatePickerObj._selectedDate.getFullYear();

        $("#startdateinfo").html(WHEN.GetFormattedDate(WHEN.StartDatePickerObj._selectedDate));

    } else {

        s = (WHEN.EndDatePickerObj._selectedDate.getMonth() + 1) + "/" +
	         WHEN.EndDatePickerObj._selectedDate.getDate() + "/" +
	         WHEN.EndDatePickerObj._selectedDate.getFullYear();

        $("#enddateinfo").html(WHEN.GetFormattedDate(WHEN.EndDatePickerObj._selectedDate));
    }

    var oStart = document.getElementById("startdate_calendar")._selectedDate;
    var oEnd = document.getElementById("enddate_calendar")._selectedDate;
    var dr = Math.round((oEnd - oStart) / 86400000) + 1;

    if (dr < 1) {
        dr--;    // Adjust negative days for the display - which will be an error
    }


    if ((dr > WHEN.MaxDays) || (dr < 1)) {
        if (dr < 1) {
            UIHelper.ShowStatusMessage(WHEN.EndDateBeforeStart, "error");
        }
        else {
            UIHelper.ShowStatusMessage(WHEN.MaxDaysExceeded + " " + WHEN.MaxDays, "error");
        }
        UIHelper.DisableUpdateMapButton(true);
        errorClass = " class=\"error\"";
    }
    else {
        UIHelper.HideStatusMessage();

        WHEN.IsValid = true;

        // Date value for Omega query routine is MMddyy
        WHEN.DateSelection = ("0" + (oStart.getMonth() + 1).toString()).slice(-2) +
      	                     ("0" + oStart.getDate().toString()).slice(-2) +
    	                     oStart.getFullYear().toString().slice(-2) +
    	                     ("0" + (oEnd.getMonth() + 1).toString()).slice(-2) +
      	                     ("0" + oEnd.getDate().toString()).slice(-2) +
    	                     oEnd.getFullYear().toString().slice(-2);
    }

    WHEN.DateDisplay += "<tr><td class=\"field\">" + WHEN.StartDate + ":</td><td" + errorClass + ">" + WHEN.GetFormattedDate(oStart) + "</td></tr>";
    WHEN.DateDisplay += "<tr><td class=\"field\">" + WHEN.EndDate + ":</td><td" + errorClass + ">" + WHEN.GetFormattedDate(oEnd) + "</td></tr>";
    WHEN.DateDisplay += "<tr><td class=\"field\">" + WHEN.DateRange + ":</td><td" + errorClass + ">" + dr + " " + WHEN.Days.toLowerCase() + "</td></tr>";

    if (WHAT.IsValid) {
        UIHelper.DisableUpdateMapButton(!WHEN.IsValid);
        UIHelper.IndicatePendingChanges(WHEN.IsValid);
    }

    CVS.BuildSummaryDisplay();
};

WHEN.TimeChanged = function() {
    $('#lstWhenTimeHelper').attr('selectedIndex', 0);
    WHEN.ValidateTime();
};

WHEN.SetPredefinedTimes = function() {
    var times = $("#lstWhenTimeHelper").val();
    if (times == "0") return;

    if (times != null && times != "") {
        var timeArray = times.split(",");

        $('#lstWhenFromHours').attr('selectedIndex', parseInt(timeArray[0]));
        $('#lstWhenFromMinutes').attr('selectedIndex', parseInt(timeArray[1]));
        $('#lstWhenToHours').attr('selectedIndex', parseInt(timeArray[2]));
        $('#lstWhenToMinutes').attr('selectedIndex', parseInt(timeArray[3]));

        WHEN.ValidateTime();
    }
};

WHEN.TimeTypeSelected = function(type) {
    //alert("WHEN.TimeTypeSelected");
    if (HOW.Classify == type) return;

    WHEN.TimeType = type;

    WHEN.ValidateTime();
};

WHEN.ValidateTime = function() {
    //alert("WHEN.ValidateTime");
    var fh = $("#lstWhenFromHours :selected").text();
    var fm = $("#lstWhenFromMinutes :selected").text();
    var th = $("#lstWhenToHours :selected").text();
    var tm = $("#lstWhenToMinutes :selected").text();

    if (fh == "00" && fm == "00" & th == "23" && tm == "59") {
        WHEN.TimeSelection = "";
        WHEN.TimeDisplay = "<tr><td class=\"field\">" + WHEN.Time + ":</td><td>" + WHEN.AllTimes + "</td></tr>";
    } else {
        // HHmmHHmm   (From HourMinute, To HourMinute)
        WHEN.TimeSelection = fh + fm + th + tm;
        //alert("WHEN.TimeSelection = " + WHEN.TimeSelection);
        var fmins = parseInt(fh, 10) * 60 + parseInt(fm, 10);
        var tmins = parseInt(th, 10) * 60 + parseInt(tm, 10);
        var tr = tmins - fmins + 1;
        if (tr < 0) tr = 1440 + tr;
        //alert("tr = " + tr);

        var h = Math.floor(tr / 60);
        var m = tr - (h * 60);
        if (m < 10) m = "0" + m;

        var style = WHEN.Duration;
        if (WHEN.TimeType == "Sliced") style = WHEN.Sliced;

        WHEN.TimeDisplay = "<tr><td class=\"field\">" + WHEN.StartTime + ":</td><td>" + fh + ":" + fm + "</td></tr>";
        WHEN.TimeDisplay += "<tr><td class=\"field\">" + WHEN.EndTime + ":</td><td>" + th + ":" + tm + "</td></tr>";
        WHEN.TimeDisplay += "<tr><td class=\"field\">" + WHEN.TimeRange + ":</td><td>" + h + ":" + m + "</td></tr>";

        WHEN.TimeDisplay += "<tr><td class=\"field\">" + WHEN.TimeStyle + ":</td><td>" + style + "</td></tr>";
    }

    CVS.BuildSummaryDisplay();
    UIHelper.IndicatePendingChanges(true);
};

WHEN.DayChanged = function() {
    //alert("WHEN.DayChanged");
    $('#lstWhenDOWHelper').attr('selectedIndex', 0);
    WHEN.ValidateDOW();
};

WHEN.SetPredefinedDays = function() {
    //alert("WHEN.SetPredefinedDays = " + $("#lstWhenDOWHelper").val());
    var days = $("#lstWhenDOWHelper").val();
    if (days == "0") return;

    if (days != null && days != "") {
        var dayArray = days.split(",");
        var checked;

        for (var idx = 0; idx < 7; idx++) {
            if (dayArray[idx] == "1") checked = true; else checked = false;
            $("#when-dow-" + idx).attr("checked", checked);
        }

        WHEN.ValidateDOW();
    }
};

WHEN.ValidateDOW = function() {
    //alert("WHEN.ValidateDOW = " + $("#when-dow-0").attr("checked"));

    var sel = "", disp = "", comma = "";
    for (var idx = 0; idx < 7; idx++) {
        if ($("#when-dow-" + idx).attr("checked")) {
            sel += "1";
            disp += comma + $("#when-dow-" + idx + "-label").text();
            comma = ", ";
        } else {
            sel += "0";
        }
    }

    if (sel == "1111111") {
        WHEN.DOWSelection = "";
        WHEN.DOWDisplay = "<tr><td class=\"field\">" + WHEN.Days + ":</td><td>" + WHEN.AllDays + "</td></tr>";
    } else if (sel == "0000000") {
        WHEN.DOWSelection = "";
        WHEN.DOWDisplay = "<tr><td class=\"field\">" + WHEN.Days + ":</td><td class=\"error\">" + WHEN.NoneSelected + "</td></tr>";
    } else {
        WHEN.DOWSelection = sel;
        WHEN.DOWDisplay = "<tr><td class=\"field\">" + WHEN.Days + ":</td><td>" + disp + "</td></tr>";
    }

    CVS.BuildSummaryDisplay();
    UIHelper.IndicatePendingChanges(true);
};

WHEN.GetQuery = function() {
    return WHEN.DateSelection + "|" + WHEN.TimeSelection + "|" + WHEN.TimeType + "|" + WHEN.DOWSelection;
};

WHEN.GetSummary = function() {
    var sum = WHEN.DateDisplay;

    if (WHEN.HaveTime) sum += WHEN.TimeDisplay;
    if (WHEN.HaveDOW) sum += WHEN.DOWDisplay;

    return sum;
};

WHEN.GetDateAsYMD = function(o) {
    var d = o.getFullYear();
    if (o.getMonth() < 9) d += "0";
    d += (o.getMonth() + 1) + "";
    if (o.getDate() < 10) d += "0";
    d += o.getDate() + "";
    return d;
};

WHEN.GetFormattedDate = function(date) {
    var out = WHEN.DateFormat.replace("mm", date.getMonth() + 1);
    out = out.replace("dd", date.getDate());
    out = out.replace("yyyy", date.getFullYear());

    return out;
};

WHEN.GetEndDate = function() {
    newDate = new Date();
    newDate.setFullYear(parseInt(dateString.substring(0, 4), 10));
    newDate.setMonth(parseInt(dateString.substring(4, 6), 10) - 1);
    newDate.setDate(parseInt(dateString.substring(6, 8), 10));
    newDate.setHours(0);
    newDate.setMinutes(0);
    newDate.setSeconds(0);
    newDate.setMilliseconds(0);

    return newDate;
}

