﻿/// <reference path="jquery-1.3.2.js" />
/// <reference path="dss-common.js" />
/// <reference path="modifyticket.js" />
/// <reference path="json2.js" />
var lookupUrl;
var lookupZipUrl;
var updatePickupOrderUrl;
var cancelUrl;
var emailUrl;
var clearUrl;
var receiptUrl;
var setDonorUrl;
var lookupVehiclesUrl;
var aid = 0;
var did = 0;
var vehiclesFound = false;
var listUrl;
var commonItems;
var defaultSize;
var arcInfo;
var feedbackUrl;

function pageInit() {
    //$("#donorInfo").show();
    $("#actionerror").click(function() { $(this).hide(); });
    $(".ticketHeader").live("click", function() {
        $(this).next().slideToggle("fast");
        var $span = $(":first(span)", this);
        if ($span.hasClass("ui-icon-triangle-1-e")) {
            $span.removeClass("ui-icon-triangle-1-e");
            $span.addClass("ui-icon-triangle-1-s");
        } else {
            $span.removeClass("ui-icon-triangle-1-s");
            $span.addClass("ui-icon-triangle-1-e");
        }
    });
    // $(".ticketHeader:odd").css("background-color", "#C0C0C0");
    // $(".ticketHeader:odd").css("border", "solid 2px #C0C0C0");

    $("#donorDialog").dialog({
        autoOpen: (did == 0),
        modal: true,
        title: "Salvation Army Donor Login",
        width: 360,
        closeOnEscape: false,
        close: function(event, ui) { if (did == 0) window.location = rootDir; },
        buttons: {
            "Lookup": doLookup,
            "Cancel": function() { window.location = rootDir; }
        }
    });
    $("#homephone").keypress(function(e) {
        if (e.which == 13) {
            $("#lastname").focus();
            return false;
        }
    });
    
    $("#lastname").keypress(function(e) {
        if (e.which == 13) {
            doLookup();
            return false;
        }
    });
    $("#privacyInfo a").click(function() {
        alert("We may want to contact you with information about your pickup or about our services. If the do not email or do not call check-boxes are marked, you are requesting that we do not contact you by the method(s) indicated. If it is OK to contact you by either of these methods, please leave the appropriate check-boxes unmarked. Thank you.");
    });
    $("#updatePrivacy").click(updateDonor);
    $("#pickupSizeLabel").text("");
    $.itemSize.init({
        itemsField: "#mtDonatedItems",
        pickupSizeField: "#mtPickupSize",
        hasCustomItemField: "#mtHasCustomItem",
        defaultSize: defaultSize
    });

    afterUpdateFunc = function() { showTicket(ticketIdx); };
    if (did > 0) loadTickets();
}

function loadTickets(results) {
    /// <summary>
    /// Begin ticket lookup
    /// </summary>
    showBusy("Loading tickets ...");
    $.getJSON(lookupVehiclesUrl, { arcId: aid, donorId: did }, loadVehiclesCallback);
}

function loadVehiclesCallback(vehicles) {
    if (vehicles != null && vehicles.length > 0) {

        var html = "<div id='ticketHeaderV' class='ticketHeader'>" +
          "<span class='ui-icon ui-icon-triangle-1-e headerIcon'></span>" +
          "<span class='headerLeft'>&nbsp;</span>" +
          "<span class='headerCenter'><span style='font-weight:bold'>Vehicle Donations</span></span>" +
          "<span class='headerRight'>&nbsp;</span>" +
          "</div>";
        html += "<div id='ticketDetailV' class='ticketDetail'><ul>";
        $.each(vehicles, function(i, val) {
            html += "<li><table><tr><td style='width:280px'><span style='font-weight:bold'>Donation Time</span>: " + val.EntryDateString + "</td>" +
             "<td><span style='font-weight:bold'>Donation Type</span>: " + val.VehicleTypeName + "</td>" +
             "<tr><td><span style='font-weight:bold'>Ticket Number</span>: " + val.Pickup_id  + "</td>" +
             "<td><span style='font-weight:bold'>ARC</span>: " + val.Arc + "</td></tr></table></li>";
        });
        html += "</ul></div>";
        $("#ticketContainer").append(html);
        vehiclesFound = true;
    }
    $.getJSON(listUrl, { arcId: aid, donorId: did }, loadTicketsCallback);        
}
function loadTicketsCallback(results) {
    /// <summary>
    /// Load all tickets for this donor and display donor
    /// </summary>
    if (results == null || results.length == 0) {
        if (!vehiclesFound)
            showError("Unable to load tickets.");
        else
            showSuccess("Tickets loaded");
        return;
    }
    ticketArray = results;
    $("#donorInfo .sideInfoData").html(getDonorAddress(ticketArray[0], false));
    $("#donorInfo").show();
    $("#NoServiceReminders").attr("checked", ticketArray[0].NoServiceReminders);
    $("#NoSolicitation").attr("checked", ticketArray[0].NoSolicitation);
    $("#DoNotEmail").attr("checked", ticketArray[0].DoNotEmail);
    $("#privacyInfo").show();
    $("#welcomeDonor").text(ticketArray[0].FirstName + " " + ticketArray[0].LastName);
    
    $.each(results, function(i, val) {
        $("#ticketContainer").append("<div id='ticketHeader" + i + "' class='ticketHeader'></div>");
        $("#ticketContainer").append("<div id='ticketDetail" + i + "' class='ticketDetail'></div>");
        showTicket(i);
    });
    showSuccess("Tickets loaded");
    $.getJSON(lookupZipUrl, { zip: ticketArray[0].Zip, allowClosest: false },
        function(routeInfo) {
            arcInfo = routeInfo;
            $.itemSize.setAllItems(routeInfo.CommonItems, routeInfo.BadItems);
        });
}
function showTicket(idx) {
    /// <summary>
    /// Display selected ticket
    /// </summary>
    var ticket = ticketArray[idx];
    var actions = ""; var itemStr = "";
    ticket.ScheduleDate = ticket.ScheduleDateString;
    
    if (ticket.Status == "D")
        actions = "<a href='" + receiptUrl + "?arcId=" + ticket.ARC_id + "&pickupId=" + ticket.Pickup_id + "' target='_new' class='salArmy'>Print</a>&nbsp;";

    if (ticket.Email != null && ticket.Email.length > 0)
        actions += (actions.length == 0 ? "" : "|&nbsp;") + "<a href='javascript:sendEmail(" + idx + ")' class='salArmy'>Email</a>&nbsp;";
        
    if (new Date(ticket.ScheduleDateString) > new Date() && ticket.Status == "S") {
        actions += (actions.length == 0 ? "" : "|&nbsp;") + "<a href='javascript:modifyItems(" + idx + ")' class='salArmy'>Change Items</a>" +
          "&nbsp;|&nbsp;<a href='javascript:modifySchedule(" + idx + ")' class='salArmy'>Change Date</a>" + 
          "&nbsp;|&nbsp;<a href='javascript:modifyInstructions(" + idx + ")' class='salArmy'>Change Instructions</a>&nbsp;";
    }
    if ("CDO".indexOf(ticket.Status) < 0)
        actions += (actions.length == 0 ? "" : "|&nbsp;") + "<a href='javascript:cancelTicket(" + idx + ")' class='salArmy'>Cancel Pickup</a>";
        
    if (ticket.DonatedItems && ticket.DonatedItems != null) itemStr = ticket.DonatedItems;
        
    $("#ticketHeader" + idx).html("<span class='ui-icon ui-icon-triangle-1-e headerIcon'></span><span class='headerLeft'>" + ticket.ScheduleDateString + "</span>" +
      "<span class='headerCenter'><span style='font-weight:bold'>Items:</span>" + (itemStr.length > 40 ? itemStr.substr(0, 40) + "..." : itemStr) + "</span>" +
      "<span class='headerRight'>" +
      ('IPS'.indexOf(ticket.Status) > 0 ? etaDisplay(ticket, false) : ticket.StatusDisplay) + 
      "</span>");
      
    $("#ticketDetail" + idx).html("<div class='ticketActions'>" + actions +
      "</div>" +
      "<div class='detailLeft'>" +
      getDonorAddress(ticket, true) +
      "</div>" +
      "<div class='detailRight'>" +
      "<div class='ticketItems'>" +
      "<p>Items: " + itemStr + "</p>" + 
      "<p>Special Instructions: " + ticket.Instructions + "</p>" +
      "</div>" +
      "</div>");
}

function getDonorAddress(donor, showDayPhone) {
    /// <summary>
    /// Retrieve HTML for specified donor
    /// </summary>
    var html;
    
    html = donor.FirstName + "&nbsp;" + donor.LastName + "<br />" +
      donor.AddressLine1 + "<br />";
      
    if (donor.AddressLine2 && donor.AddressLine2.length > 0)
        html += donor.AddressLine2 + "<br />";
        
    html += donor.City + ",&nbsp;" + donor.State + "&nbsp;" + donor.Zip + "<br />" +
      formatPhone(donor.HomePhone);
    
    if (showDayPhone && donor.DayPhone && donor.DayPhone.length > 0)
        html += ", " + formatPhone(donor.DayPhone);
        
    return html;
}
function cancelTicket(idx) {
    if (confirm("Are you sure you want to cancel this ticket?")) {
        $.post(cancelUrl, { arcId: ticketArray[idx].ARC_id, pickupId: ticketArray[idx].Pickup_id });
        ticketArray[idx].Status = 'C';
        ticketArray[idx].StatusDisplay = "Cancel Reason: by Donor";
        showTicket(idx);
    }
}
function sendEmail(idx) {
    if (confirm("Would you like a copy of the receipt emailed to you?")) {
        showBusy("Emailing receipt ...");
        $.getJSON(emailUrl,
            { arcId: ticketArray[idx].ARC_id, pickupId: ticketArray[idx].Pickup_id }, 
            emailCallback);
    }
}
function emailCallback(results) {
    if (results.success == true) {
        showSuccess("Email Sent");
    } else {
        showError("Email not sent");
        $(".busy").hide();
    }
}

function updateDonor() {
    if (ticketArray) {
        $("#updatePrivacy").hide();
        $("#privacyUpdateBusy").show();

        ticketArray[0].NoSolicitation = $("#NoSolicitation").attr("checked") == true;
        ticketArray[0].NoServiceReminders = $("#NoServiceReminders").attr("checked") == true;
        ticketArray[0].DoNotEmail = $("#DoNotEmail").attr("checked") == true;

        $.post(rootDir + "Donor/Update", ticketArray[0], function(result) {
            $("#privacyUpdateBusy").hide();
            if (JSON.parse(result).success) {
                $("#privacyUpdateSuccess").show();
                $("#privacyUpdateSuccess").fadeOut("normal", function() { $("#updatePrivacy").show(); });
            } else {
                $("#updatePrivacy").show();
                alert("Unable to update your settings at this time. Please try again later or contact the call center for assistance.");
            }
        });
    }
}
function closeDonor() {
/// <summary>
/// Log out donor
/// </summary>
    if (confirm("Would you like to close this donor list and return to the home page? You will need to enter your home phone and last name again to access your pickups.")) {
        $("div.horizMenuRight").html("Closing session ...");
        $.getJSON(clearUrl, null, function() {
            window.location = rootDir;
        });
    }
}

function showBusy(busyText) {
    $("#actionerror").hide();
    $("#actionbusy img").css("display", "inline");
    $("#actionbusy span").text(busyText);
    $("#actionbusy").css("display", "inline");
}
function showError(errorText) {
    $("#actionerror").text("ERROR: " + errorText);
    $("#actionerror").css("display", "inline");
    $("#actionbusy").hide();
}
function hideBusy() {
    $("#actionbusy").hide();
    $("#actionerror").hide();
}
function showSuccess(successMsg) {
    $("#actionerror").hide();
    $("#actionbusy img").hide();
    $("#actionbusy span").append(" " + successMsg);
    $("#actionbusy").fadeOut(7000);
}
function doLookup() {
    /// <summary>
    /// Lookup donor
    /// </summary>
    var lastname, homephone;

    lastname = $("#lastname").val();
    homephone = unFormatPhone($("#homephone").val());

    if (homephone.length != 10) {
        alert("Please enter a valid home phone number.");
        $("#homephone").focus();
        return;
    }
    if (lastname.length == 0) {
        alert("Please enter a last name.");
        $("#lastname").focus();
        return;
    }
    $("#donorerror").hide();
    $("#donorvalidating").show();
    //lastname = encodeURI(lastname);
    $.getJSON(lookup, { homePhone: homephone, lastName: lastname }, checkDonor);
}

function checkDonor(donor) {
    /// <summary>
    /// Handle JSON return
    /// </summary>
    if (donor.Donor_id > 0) {
        aid = donor.ARC_id;
        did = donor.Donor_id;
        $("#donorDialog").dialog("close");
        loadTickets();        
        $.post(setDonorUrl, { arcId: aid, donorId: did });
        return;
    } else {
        $("#donorvalidating").hide();
        $("#donorerror").show();
        $("#donorerror").fadeOut(5000);
        return;
    }
}

function modifyInstructions(idx) {
    /// <summary>
    /// Show dialog with options to modify driver instructions
    /// </summary>
    ticketIdx = idx;
    modifyTicketInstructionsStart();
}
function modifyItems(idx) {
    /// <summary>
    /// Show dialog with options to modify available items
    /// </summary>
    ticketIdx = idx;
    modifyTicketItemsStart();
}

function modifySchedule(idx) {
    ticketIdx = idx;
    modifyTicketDateStart();
}


function getAuditData() {
    var ret = { Arc_id: aid, PageAudit: "Donor Id: " + did };
    if (ticketArray && ticketArray.length > 0) {
        ret.PageAudit = "First Name: " + ticketArray[0].FirstName +
            "\r\nLast Name: " + ticketArray[0].LastName +
            "\r\nHome Phone: " + ticketArray[0].HomePhone +
            "\r\nZip Code: " + ticketArray[0].Zip +
            "\r\nARC Id: " + aid +
            "\r\nMost recent pickup: http://www.4satruck.org" + receiptUrl + "?arcId=" + ticketArray[0].ARC_id + "&pickupId=" + ticketArray[0].Pickup_id;
    } 
    return ret;
}

$(pageInit);