﻿// This file also includes logic for Invite a Friend

function GetQueryParm(name) {
    var queryString = window.location.search.substring(1);
    var qStringAry = queryString.split("&");
    var nvPair = "";
    for (i = 0; i < qStringAry.length; i++) {
        nvPair = qStringAry[i].split("=");
        if (nvPair[0] == name) {
            return decodeURI(nvPair[1]);
        }
    }
}

// This handles the logic and AJAX calls for the pledge process
// Create PFP namespace
if (typeof (PFP) == "undefined") {
    var PFP = {};
}

// Pledge specific to be moved
// Create a namespace for the pledge process
if (typeof (PFP.Pledge) == "undefined") {
    PFP.Pledge =
    {
        MAX_BANK_NAME_LEN: 23,
        BirthMonth: 0,
        BirthDay: 0,
        BirthYear: 0,
        ZipCode: 0,
        ProgramNumber: 0,
        SuggestedFoodBank: "",
        FoodBankName: "",
        FoodBankAddress1: "",
        FoodBankAddress2: "",
        FoodBankCityStateZip: "",
        FoodBankLocation: "",
        SelectedFoodBankId: 0,
        HealthyWeight: 0,
        PoundsPledged: 0,
        Organization: "",
        Location: "",
        KrogerStore: 0, 
        FirstName: "",
        LastName: "",
        WhyMessage: "This is the Feeding America&reg; food bank that serves your community.",
        EmailAddress: "",
        StateCode: "",
        Stores: "",
        EmailSubscribe: 0,
        foodBankList: {},
        EmailExists: false,
        FoodBankChanged: false,
        WordCheckFailed: false,
        OptionalConsent: 0,
        OptionalAnswers: "",
        PublishToFacebookMessage: "I am participating in the pound for pound challenge.",
        Submitted: false
        
    };
}

PFP.Pledge.clearDefaultText = function(element) {
    if ($j(element).attr('value') == $j(element).attr('title')) {
        $j(element).attr('value', '');
    }
}

PFP.Pledge.returnToRegistration = function() {
    $j('#message-dialog').dialog("close");
    $j('#pledge-dialog').dialog("open");
}

PFP.Pledge.showMessage = function(message) {
    $j('#pledge-dialog').dialog("close");
    $j('#message-dialog div').html("<p>" + message + "</p><p>&nbsp;</p><p>&nbsp;</p>");
    $j('#message-dialog').dialog("open");
    $j('#message-dialog a.back-to-reg-btn').click(PFP.Pledge.returnToRegistration);
}

PFP.Pledge.showConfirmationScreen = function() {
    $j('#submission-confirmation h2').html("Your pledge of " + PFP.Pledge.PoundsPledged + " pounds for " + PFP.Pledge.FoodBankName + " in " + PFP.Pledge.FoodBankLocation + " has been accepted.");
    $j('#pledge-dialog').dialog("close");
    $j('#submission-confirmation').dialog("open");

    var facebookMsg = "I am participating in the Pound for Pound Challenge.  ";
    if (PFP.Pledge.PoundsPledged > 0)
        facebookMsg += "I pledged to lose " + PFP.Pledge.PoundsPledged + " pounds and donate to " + PFP.Pledge.FoodBankName + " in " + PFP.Pledge.FoodBankLocation + ".  ";
    else
        facebookMsg += "I chose to donate to " + PFP.Pledge.FoodBankName + ".  ";
    facebookMsg += "Check it out at http://www.PFPChallenge.com."
    
    // Reset pledge to its initial state
    $j('#step1-content').show();
    $j('#step6-content').hide();
    $j('li em').hide();
    $j('li#step6').css('background', '#FFF url(../../images/dialog/pledge-step-6.gif) no-repeat 10px top');
    $j('li#step1').css('background', '#FFF url(../../images/dialog/pledge-step-1-active.gif) no-repeat 10px top');
    PFP.Pledge =
    {
        MAX_BANK_NAME_LEN: 23,
        BirthMonth: 0,
        BirthDay: 0,
        BirthYear: 0,
        ZipCode: 0,
        ProgramNumber: 0,
        SuggestedFoodBank: "",
        FoodBankName: "",
        FoodBankAddress1: "",
        FoodBankAddress2: "",
        FoodBankCityStateZip: "",
        FoodBankLocation: "",
        SelectedFoodBankId: 0,
        HealthyWeight: 0,
        PoundsPledged: 0,
        Organization: "",
        Location: "",
        KrogerStore: 0,
        FirstName: "",
        LastName: "",
        WhyMessage: "This is the Feeding America&reg; food bank that serves your community.",
        EmailAddress: "",
        StateCode: "",
        Stores: "",
        EmailSubscribe: 0,
        foodBankList: {},
        EmailExists: false,
        FoodBankChanged: false,
        WordCheckFailed: false,
        OptionalConsent: 0,
        OptionalAnswers: "",
        PublishToFacebookMessage: facebookMsg,
        Submitted: false

    };
}

PFP.Pledge.whyThisFoodbankMessage = function() {
    PFP.Pledge.showMessage(PFP.Pledge.WhyMessage);
}

PFP.Pledge.constructFoodBankInfoList = function() {
    var listData = "<dt>";
    listData += PFP.Pledge.FoodBankName;
    listData += '</dt>';
    listData += '<dd>';
    listData += PFP.Pledge.FoodBankAddress1;
    listData += '</dd>';
    if (PFP.Pledge.FoodBankAddress2 != "") {
        listData += '<dd>';
        listData += PFP.Pledge.FoodBankAddress2;
        listData += '</dd>';
    }
    listData += '<dd>';
    listData += PFP.Pledge.FoodBankCityStateZip;
    listData += '</dd>';
    return listData;
}

PFP.Pledge.wordCheck = function() {
    var nameValues = $j('#pledgeInfoFirstName').attr('value'); //+ ',' + $j('#pledgeInfoLastName').attr('value');
    $j.get('/handler/WordCheck.ashx', { words: nameValues }, function(data) {
        if (data == 1) {
            PFP.Pledge.WordCheckFailed = true;
        } else {
            PFP.Pledge.WordCheckFailed = false;
        }
    }, 'text');
}

PFP.Pledge.getCookieValue = function(nameOfCookie) {
    var results = document.cookie.match('(^|;) ?' + nameOfCookie + '=([^;]*)(;|$)');

    if (results) {
        return (unescape(results[2]));
    } else {
        return null;
    }
}

PFP.Pledge.validateStep1 = function() {
    var monthNum = $j('#pledgeInfoMonth').attr('value');
    var dayNum = $j('#pledgeInfoDay').attr('value');
    var yearNum = $j('#pledgeInfoYear').attr('value');

    if (monthNum == "-" || dayNum == "-" || yearNum == "-" || monthNum == "" || dayNum == "" || yearNum == "-") {
        PFP.Pledge.showMessage("Please select a valid date.");
        return;
    }

    var selectedDate = new Date();
    selectedDate.setDate(dayNum);
    selectedDate.setMonth(parseInt(monthNum) - 1);
    selectedDate.setFullYear(yearNum);

    var checkDate = selectedDate;
    checkDate.setFullYear(selectedDate.getFullYear() + 18);
    var today = new Date();

    if (Date.parse(checkDate) > Date.parse(today))
    {
        var cookieExpireDate = new Date();
        cookieExpireDate.setTime(cookieExpireDate.getTime() + (60 * 60 * 1000));
        document.cookie = "pfpua=yes;expires=" + cookieExpireDate.toGMTString() + ";";
        PFP.Pledge.showMessage("Unable to register; please see the Terms of Use.");
        return false;
    }

    if (PFP.Pledge.getCookieValue("pfpua") != null) {
        PFP.Pledge.showMessage("Unable to register. Please see the Terms of Use.");
        return false;
    }

    PFP.Pledge.BirthDay = dayNum;
    PFP.Pledge.BirthMonth = monthNum;
    PFP.Pledge.BirthYear = yearNum;

    return true;
}


PFP.Pledge.validateStep2 = function() {
    var zipPattern = new RegExp(/^[0-9]{5}$/);
    var zipValue = $j('#pledgeInfoZip').attr('value');
    if (!zipPattern.test(zipValue)) {
        PFP.Pledge.showMessage("Please enter a five digit zip code.");
        return false;
    }
    PFP.Pledge.ZipCode = zipValue;
    $j('li#step2 em').html(zipValue);
    $j('#step3-content dl').html('Loading...');
    $j.get('/handler/FoodBank.ashx', { zip: zipValue }, function(foodBankList) {
        // Make sure a food bank was returned
        var exists = true;
        if (typeof (foodBankList) == 'undefined') {
            exists = false;
        }
        else {
            if (foodBankList.length == 0)
                exists = false;
        }
        if (!exists) {
            $j('#step3-content dl').html("<dt>No food bank found for this zip code.</dt>");
            return;
        }

        if (foodBankList.length == 1) {
            // Add data to our Pledge Object
            var data = foodBankList[0];
            PFP.Pledge.SelectedFoodBankId = data.ID;
            PFP.Pledge.FoodBankName = data.Name;
            PFP.Pledge.FoodBankAddress1 = data.Address1;
            PFP.Pledge.FoodBankAddress2 = data.Address2;
            PFP.Pledge.FoodBankCityStateZip = data.City + ', ' + data.State + ' ' + data.ZipCode;
            PFP.Pledge.FoodBankLocation = data.City + ', ' + data.State;
            $j('#step3-content dl').html(PFP.Pledge.constructFoodBankInfoList());
            $j('#step3-content .pledge-content').show();
            $j('#step3-content .alt-content-multi-default').hide();
            $j('#step3-content .alt-content-multi-default ul').html('');
            $j('#why-this-foodbank').html("Why was I assigned to this food bank?");
            PFP.Pledge.WhyMessage = "This is the Feeding America&reg; food bank that serves your community.";
        }
        else {
            $j('#step3-content .pledge-content').hide();
            $j('#step3-content .alt-content-multi-default').show();
            $j('#step3-content .alt-content-multi-default ul').html('');
            $j('#why-this-foodbank').html("Why was I assigned to these food banks?");
            PFP.Pledge.WhyMessage = "These are the Feeding America&reg; food banks that serve your community."
            for (var i = 0; i < foodBankList.length; i++) {
                var addedContent = '<li><input name="FB" id="FB" rel="' + i + '" type="radio" /><p>' + foodBankList[i].Name + '<span>' + foodBankList[i].Address1 + '</span>';
                if (foodBankList[i].Address2 != "") {
                    addedContent += '<span>' + foodBankList[i].Address2 + '</span>';
                }
                addedContent += '<span>' + foodBankList[i].City + ', ' + foodBankList[i].State + ' ' + foodBankList[i].ZipCode + '</span></p></li>'
                $j('#step3-content .alt-content-multi-default ul').append(addedContent);
            }
            // Set the food bank upon clicking a checkbox
            $j('#step3-content .alt-content-multi-default input').click(function(e) {
                var selectedFB = foodBankList[$j(this).attr('rel')];
                PFP.Pledge.SelectedFoodBankId = selectedFB.ID;
                PFP.Pledge.FoodBankName = selectedFB.Name;
                PFP.Pledge.FoodBankAddress1 = selectedFB.Address1;
                PFP.Pledge.FoodBankAddress2 = selectedFB.Address2;
                PFP.Pledge.FoodBankCityStateZip = selectedFB.City + ', ' + selectedFB.State + ' ' + selectedFB.ZipCode;
                PFP.Pledge.FoodBankLocation = selectedFB.City + ', ' + selectedFB.State;
            });
        }

    }, 'json');

    PFP.Pledge.FoodBankChanged = false;

    $j('#step3-content .links').show();
    $j('#step3-content .pledge-content h3').show();
    $j('#step3-content .pledge-content h3#post-selection').hide();

    // Grab the state that should be selected based on the zipcode
    $j.get('/handler/Location.ashx', { zip: PFP.Pledge.ZipCode }, function(data) {
        PFP.Pledge.StateCode = data;
        $j('#step5-content #pledgeInfoState').attr('value', PFP.Pledge.StateCode);
    }, 'text');

    $j('#step3-content a#change-foodbank').click(PFP.Pledge.changeFoodBank);
    $j('#step3-content a#why-this-foodbank').click(PFP.Pledge.whyThisFoodbankMessage);
    return true;
}

PFP.Pledge.validateStep3 = function() {
    if (PFP.Pledge.SelectedFoodBankId == 0) {
        PFP.Pledge.showMessage("You must select a food bank to continue.");
        return false;
    }

    // Program Number
    PFP.Pledge.ProgramNumber = $j('input.pf').attr('value');

    // Setup weight
    if (PFP.Pledge.ProgramNumber == '2') {
        $j('.pledge-content-gm input').click(function(e) {
            PFP.Pledge.HealthyWeight = $j(this).attr('value');
            if (PFP.Pledge.HealthyWeight == 1) {
                $j('input#pledgeInfoPounds').attr('disabled', 'disabled');
                $j('input#pledgeInfoPounds').attr('value', '');
            } else {
                $j('input#pledgeInfoPounds').attr('disabled', '');
            }
        });
    }

    // Display selected food bank name
    var FoodBankDisplayName = PFP.Pledge.FoodBankName;
    if (FoodBankDisplayName.length > PFP.Pledge.MAX_BANK_NAME_LEN) {
        FoodBankDisplayName = FoodBankDisplayName.substr(0, PFP.Pledge.MAX_BANK_NAME_LEN - 3) + "..."
    }
    $j('li#step3 em').html(FoodBankDisplayName);
    $j('.pledge-dialog .buttons .back-btn').unbind('click', PFP.Pledge.changeFoodBank);
    $j('.pledge-dialog .buttons .back-btn').click(PFP.Pledge.stepBack);
    return true;
}

PFP.Pledge.validateStep4 = function() {
    var poundPattern = new RegExp(/^[0-9]{1,2}$/);

    var poundValue = $j('#pledgeInfoPounds').attr('value');
    if (PFP.Pledge.HealthyWeight == 1) {
        poundValue = 0;
    }
    if ((isNaN(parseInt(poundValue)) && PFP.Pledge.HealthyWeight == 0) || Number(poundValue) > 50 || (Number(poundValue) < 1 && PFP.Pledge.HealthyWeight == 0) || (!poundPattern.test(poundValue) && PFP.Pledge.HealthyWeight == 0)) {
        PFP.Pledge.showMessage("You cannot pledge to lose over fifty pounds. Please enter a number 50 or below to continue");
        return false;
    }

    // Setup location and org
    if (PFP.Pledge.ProgramNumber == '2') {
        $j('#gmi-organization').change(function() {
            PFP.Pledge.Organization = $j('#gmi-organization').attr('value');
            $j('#gmi-location').html("<option value=''>Scroll to find your location</option>");
            if (PFP.Pledge.Organization != "") {
                $j.get('/handler/Organization.ashx', { org: PFP.Pledge.Organization }, function(data) {
                    for (var i = 0; i < data.length; i++) {
                        $j('#gmi-location').append('<option value="' + data[i].ID + '">' + data[i].Name + '</option>');
                    }
                }, 'json');
            }
        });
    }

    // Display pounds pledged
    PFP.Pledge.PoundsPledged = poundValue;
    if (poundValue == 0) {
        $j('li#step4 em').html("Maintain my healthy weight");
    } else {
        $j('li#step4 em').html(poundValue);
    }


    $j('#pledgeInfoEmail').blur(function() {
        $j.get('/handler/EmailCheck.ashx', { email: $j('#pledgeInfoEmail').attr('value') }, function(data) {
            if (data == 1) {
                PFP.Pledge.EmailExists = true;
            } else {
                PFP.Pledge.EmailExists = false;
            }
        }, 'text');
    });

    $j('#pledgeInfoFirstName').blur(PFP.Pledge.wordCheck);
    $j('#pledgeInfoLastName').blur(PFP.Pledge.wordCheck);

 
    // Set the zip to the zip they entered in step 2
    $j('#pledgeInfoZipCode').attr('value', PFP.Pledge.ZipCode);

    // Setup step 5 text boxes to clear content on focus
    $j('#step5-content *[title]').focus(
        function() {
            PFP.Pledge.clearDefaultText(this);
        }
    );
    return true;
}

PFP.Pledge.validateStep5 = function() {
    var zipPattern = new RegExp(/^[0-9]{5}$/);
    var namePattern = new RegExp(/^[a-zA-Z-. ]{1,30}$/);
    var emailPattern = new RegExp(/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/);

    var firstName = $j('#pledgeInfoFirstName').attr('value');
    var lastName = $j('#pledgeInfoLastName').attr('value');
    var emailAddress = $j('#pledgeInfoEmail').attr('value');
    var state = $j('#pledgeInfoState').attr('value');
    var zip = $j('#pledgeInfoZipCode').attr('value');
    var location = $j('#gmi-location').attr('value');
    var krogerStore = $j('#kroger-store').attr('value');
    var stores = "";
    if ($j('#pledgeInfoStores').attr('value') != $j('#pledgeInfoStores').attr('title')) {
        stores = $j('#pledgeInfoStores').attr('value');
    }
    var emailSubscribe = 0;
    if ($j('#emailSubscribe').attr('checked') == true) {
        emailSubscribe = 1;
    }

    var errorMessage = "<strong>Please correct the following errors:</strong><br />";
    var isError = false;

    if (!zipPattern.test(zip)) {
        errorMessage += "Please enter a 5-digit zip code.<br />";
        isError = true;
    }

    if (PFP.Pledge.ProgramNumber == '2') {
        if (location == "") {
            errorMessage += "Please select a location and organization.<br />";
            isError = true;
        }
    }

    if (PFP.Pledge.ProgramNumber == '3') {
        if (krogerStore == "") {
            errorMessage += "Please select a grocery store.<br />";
            isError = true;
        }
        else {
            if (krogerStore == "other")
                krogerStore = "";
        }
    }

    if (!namePattern.test(firstName) || !namePattern.test(lastName)) {
        errorMessage += "Please enter only letters periods, spaces and dashes for names.<br />";
        isError = true;
    }

    if (!emailPattern.test(emailAddress)) {
        errorMessage += "Please enter a valid e-mail address.<br />";
        isError = true;
    }

    if (PFP.Pledge.EmailExists) {
        errorMessage += "This e-mail address already exists in the system. Please choose another e-mail address.<br />";
        isError = true;
    }

    if (PFP.Pledge.WordCheckFailed) {
        errorMessage += "Please check first and last name for profanity and try again.<br />";
        isError = true;
    }

    if (isError) {
        PFP.Pledge.showMessage(errorMessage);
        return false;
    }

    // Add entered values
    PFP.Pledge.EmailAddress = emailAddress;
    PFP.Pledge.FirstName = firstName;
    PFP.Pledge.LastName = lastName;
    PFP.Pledge.StateCode = state;
    PFP.Pledge.ZipCode = zip;
    PFP.Pledge.Stores = stores;
    PFP.Pledge.EmailSubscribe = emailSubscribe;
    PFP.Pledge.Location = location;
    PFP.Pledge.KrogerStore = krogerStore;

    // Display email address
    if (emailAddress.length > PFP.Pledge.MAX_BANK_NAME_LEN) {
        emailAddress = emailAddress.substr(0, PFP.Pledge.MAX_BANK_NAME_LEN - 3) + "..."
    }

    $j('li#step5 em').html(emailAddress);

    return true;
}

PFP.Pledge.validateStep6 = function() {
    if ($j('#step6-content input:checked').length < 1) {
        PFP.Pledge.showMessage("You must check the consent box if you choose to provide answers to the optional questions. If you would prefer to skip this step, click the button labeled \" Skip this step & submit.\"");
        return false;
    }
    PFP.Pledge.OptionalConsent = 1;
    PFP.Pledge.OptionalAnswers = "";
    
    $j('#step6-content select').each(function() {
        if ($j(this).attr('value') != "") {
            PFP.Pledge.OptionalAnswers += $j(this).attr('value') + ",";
        }
    });
    if (PFP.Pledge.OptionalAnswers.length > 1)
        PFP.Pledge.OptionalAnswers = PFP.Pledge.OptionalAnswers.substr(0, PFP.Pledge.OptionalAnswers.length - 1);


    return true;
}

PFP.Pledge.submitPledgeForm = function() {
    //$j('#step6-content .buttons a').hide();

    //check flag so pledge doesn't get submitted more than once
    if (PFP.Pledge.Submitted)
        return;
    PFP.Pledge.Submitted = true;

    $j.post('/handler/PledgeSubmission.ashx', {
        BirthMonth: PFP.Pledge.BirthMonth,
        BirthDay: PFP.Pledge.BirthDay,
        BirthYear: PFP.Pledge.BirthYear,
        ZipCode: PFP.Pledge.ZipCode,
        SelectedFoodBankId: PFP.Pledge.SelectedFoodBankId,
        PoundsPledged: PFP.Pledge.PoundsPledged,
        ProgramNumber: PFP.Pledge.ProgramNumber,
        FirstName: PFP.Pledge.FirstName,
        LastName: PFP.Pledge.LastName,
        Organization: PFP.Pledge.Organization,
        Location: PFP.Pledge.Location,
        KrogerStore: PFP.Pledge.KrogerStore,
        HealthyWeight: PFP.Pledge.HealthyWeight,
        EmailAddress: PFP.Pledge.EmailAddress,
        StateCode: PFP.Pledge.StateCode,
        Stores: PFP.Pledge.Stores,
        EmailSubscribe: PFP.Pledge.EmailSubscribe,
        OptionalConsent: PFP.Pledge.OptionalConsent,
        OptionalAnswers: PFP.Pledge.OptionalAnswers
    }, function(data) {
        if (data == "1") {
            window.location = window.location.href + "?r=1&pounds=" + PFP.Pledge.PoundsPledged + "&fbname=" + encodeURI(PFP.Pledge.FoodBankName) + "&fbloc=" + encodeURI(PFP.Pledge.FoodBankLocation);
            //PFP.Pledge.showConfirmationScreen();
            // Reset form values and steps to beginning
        } else {
            PFP.Pledge.showMessage("There was an error submitting your registration form.  Please close out this window and refresh the page in order to try again.");
            PFP.Pledge.Submitted = false;
        }
    }, 'text');

}

// This assumes a naming convention of step1-content, step2-content, etc. for content containers
// and step1, step2 for li class names of title bar list items
PFP.Pledge.continueProcess = function() {
    var stepContainer = $j(this).parent().parent();
    var stepContainerId = stepContainer.attr('id');
    var stepName = stepContainerId.substr(0, 5);
    var stepNumber = Number(stepName.substr(4, 1));
    if (!PFP.Pledge['validateStep' + stepNumber](stepNumber)) return false;

    // Show the next step
    var nextStep = stepNumber + 1;
    if (nextStep == 7) {
        PFP.Pledge.submitPledgeForm();
        return false;
    }

    $j('li#' + stepName + ' em').css('display', 'block');
    $j('li#' + stepName).css('background', '#FFF url(../../images/dialog/pledge-step-' + stepNumber + '.gif) no-repeat 10px top');
    $j('li#step' + nextStep).css('background', '#FFF url(../../images/dialog/pledge-step-' + nextStep + '-active.gif) no-repeat 10px top');
    $j(stepContainer).hide();
    $j('#step' + nextStep + '-content').show();
    return false;
}

PFP.Pledge.confirmFoodBankSelection = function() {
    $j('.pledge-dialog .buttons .continue-btn').unbind('click', PFP.Pledge.confirmFoodBankSelection);
    $j('.pledge-dialog .buttons .back-btn').unbind('click', PFP.Pledge.stepBack);

    // Change the continue button back to the default behavior
    $j('.pledge-dialog .buttons .continue-btn').click(PFP.Pledge.continueProcess);
    $j('.pledge-dialog .buttons .back-btn').click(PFP.Pledge.changeFoodBank);
    $j('#step3-content dl').html(PFP.Pledge.constructFoodBankInfoList());
    $j('#step3-content .pledge-content h3').hide();
    $j('#step3-content h3#post-selection').show();
    $j('#step3-content .alt-content').hide();
    $j('#step3-content .pledge-content').show();
    $j('#step3-content .links').hide();
}

PFP.Pledge.stepBack = function(e) {
    var stepContainer = $j(this).parent().parent();
    var stepContainerId = stepContainer.attr('id');
    var stepName = stepContainerId.substr(0, 5);
    var stepNumber = Number(stepName.substr(4, 1));

    // Show the previous step
    var previousStep = stepNumber - 1;
    if (previousStep < 1) return false;

    $j('li#' + stepName).css('background', '#FFF url(../../images/dialog/pledge-step-' + stepNumber + '.gif) no-repeat 10px top');
    $j('li#step' + previousStep).css('background', '#FFF url(../../images/dialog/pledge-step-' + previousStep + '-active.gif) no-repeat 10px top');

    if (previousStep == 3 && PFP.Pledge.FoodBankChanged) {
        PFP.Pledge.confirmFoodBankSelection();
    } else {
        $j('.pledge-dialog .buttons .continue-btn').bind('click', PFP.Pledge.continueProcess);
        $j('.pledge-dialog .buttons .continue-btn').unbind('click', PFP.Pledge.confirmFoodBankSelection);
    }

    if (previousStep == 2) {
        $j('#step3-content .pledge-content h3').show();
        $j('#step3-content h3#post-selection').hide();
        $j('#step3-content .alt-content').hide();
        $j('#step3-content .pledge-content').show();
    }

    stepContainer.hide();
    $j('#step' + previousStep + '-content').show();
    return false;
}

PFP.Pledge.setSelectedFoodBankInfo = function() {
    var selectedFoodBankIndex = $j('#foodBanks').attr('value');
    if (selectedFoodBankIndex != '') {
        PFP.Pledge.SelectedFoodBankId = PFP.Pledge.foodBankList[selectedFoodBankIndex].ID;
        PFP.Pledge.FoodBankName = PFP.Pledge.foodBankList[selectedFoodBankIndex].Name;
        PFP.Pledge.FoodBankAddress1 = PFP.Pledge.foodBankList[selectedFoodBankIndex].Address1;
        PFP.Pledge.FoodBankAddress2 = PFP.Pledge.foodBankList[selectedFoodBankIndex].Address2;
        PFP.Pledge.FoodBankCityStateZip = PFP.Pledge.foodBankList[selectedFoodBankIndex].City + ", " + PFP.Pledge.foodBankList[selectedFoodBankIndex].State + " " + PFP.Pledge.foodBankList[selectedFoodBankIndex].ZipCode;
        PFP.Pledge.FoodBankLocation = PFP.Pledge.foodBankList[selectedFoodBankIndex].City + ", " + PFP.Pledge.foodBankList[selectedFoodBankIndex].State;
    }
}

PFP.Pledge.displayFoodBanksForState = function(foodBankList) {
    PFP.Pledge.foodBankList = foodBankList;

    // Make sure a food bank was returned
    if (typeof (foodBankList) == 'undefined') {
        $j('#step3-content .alt-content').append("<p>No food bank found for this zip code.</p>");
        return;
    }

    // Clear any list items that are already in there
    $j('#step3-content #foodBanks').html('');

    // For a value we're using the array index and not the Food Bank ID 
    // so that we can grab all the food bank info once a choice is made.
    for (var index = 0; index < foodBankList.length; index++) {
        $j('#step3-content #foodBanks').append("<option value='" + index + "'>" + foodBankList[index].Name + "</option>\n");
    }

    if (PFP.Pledge.FoodBankName != "") {
        $j("#step3-content #foodBanks option:contains('" + PFP.Pledge.FoodBankName + "')").attr('selected', 'selected');
    }

    // When a selection is made immediately grab the data from the list for selected food bank
    $j('#foodBanks').change(PFP.Pledge.setSelectedFoodBankInfo);
    // default selected food bank to first one in the list
    PFP.Pledge.setSelectedFoodBankInfo();
}

PFP.Pledge.setSelectedState = function() {
    PFP.Pledge.StateCode = $j('#step3-content .alt-content #bankStateList').attr('value');
    PFP.Pledge.changeFoodBank();
}

PFP.Pledge.changeFoodBank = function() {
    $j('.pledge-dialog .buttons .back-btn').bind('click', PFP.Pledge.stepBack);
    $j('.pledge-dialog .buttons .back-btn').unbind('click', PFP.Pledge.changeFoodBank);

    PFP.Pledge.FoodBankChanged = true;
    var selectedState = PFP.Pledge.StateCode;

    $j('#foodBanks').unbind('change', PFP.Pledge.setSelectedFoodBankInfo);
    $j.get('/handler/FoodBank.ashx', { state: selectedState }, PFP.Pledge.displayFoodBanksForState, 'json');

    $j('#step3-content .pledge-content').hide();
    $j('#step3-content .links').hide();
    $j('#step3-content .alt-content').show();
    $j('#step3-content .alt-content #bankStateList').attr('value', selectedState);

    $j('#bankStateList').change(PFP.Pledge.setSelectedState);

    // Change the action of the continue button to confirm food bank selection
    $j('.pledge-dialog .buttons .continue-btn').unbind('click', PFP.Pledge.continueProcess);
    $j('.pledge-dialog .buttons .continue-btn').click(PFP.Pledge.confirmFoodBankSelection);
}
// End Pledge specific

// Begin invite a friend
if (typeof (PFP.InviteAFriend) == "undefined") {
    PFP.InviteAFriend = {};
}

PFP.InviteAFriend.showConfirmationScreen = function() {
    $j('#invite-friend-dialog').dialog("close");
    $j('#invite-friend-dialog .back-btn').hide();
    $j('#invite-message-dialog div').html("<p>Your email(s) was sent successfully.</p>");
    $j('#invite-message-dialog').dialog('open');
    $j('#invite-message-dialog a.back-btn').click(PFP.InviteAFriend.CloseMessageDialog);
    return;
}

PFP.InviteAFriend.StartInvite = function() {
    $j('#invite-friend-dialog').dialog('open');
    return false;
}

PFP.InviteAFriend.ResumeInvite = function() {
    $j('#invite-friend-dialog').dialog('open');
    $j('#invite-message-dialog').dialog('close');
    $j('#invite-message-dialog a.back-btn').unbind('click', PFP.InviteAFriend.ResumeInvite);
}

PFP.InviteAFriend.CloseMessageDialog = function () {
    $j('#invite-message-dialog').dialog('close');    
}

PFP.InviteAFriend.ValidateForm = function () {
    // Make sure sender name is not empty and sender e-mail is valid
    var isValid = true;
    var emailPattern = new RegExp(/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/);
    var friendValues = [];
    var errorMessage = "Please correct the following error(s):<br />";
    if ($j('.invite-content #sender-name').attr('value') == "" || !emailPattern.test($j('.invite-content #sender-email').attr('value'))) {
        isValid = false;
        errorMessage += "Please enter a sender name and valid sender e-mail address.<br />";
    }

    var count = 0;
    for (var i = 1; i <= 5; i++) {
        // Load our friend value array with friend objects
        if ($j('#friend-name-' + i).attr('value') != "" && $j('#friend-name-' + i).attr('value') != "Friend's name" && emailPattern.test($j('#friend-email-' + i).attr('value'))) {
            friendValues[count] = { Name: $j('#friend-name-' + i).attr('value'), Email: $j('#friend-email-' + i).attr('value') };
            count++;
        }
    }

    if (friendValues.length < 1) {
        isValid = false;
        errorMessage += "Please enter at least one valid friend value.";
    }

    if (!isValid) {
        $j('#invite-friend-dialog').dialog("close");
        $j('#invite-message-dialog div').html("<p>" + errorMessage + "</p><p>&nbsp;</p><p>&nbsp;</p>");
        $j('#invite-message-dialog').dialog("open");
        $j('#invite-message-dialog a.back-btn').click(PFP.InviteAFriend.ResumeInvite);
        return;
    }

    var FormData = {};
    FormData.SenderName = $j('.invite-content #sender-name').attr('value');
    FormData.SenderEmail = $j('.invite-content #sender-email').attr('value');
    for (var j = 0; j < friendValues.length; j++) {
        FormData["FriendName" + (j + 1)] = friendValues[j].Name;
        FormData["FriendEmail" + (j + 1)] = friendValues[j].Email;
    }

    FormData.SenderTeam = $j('.invite-content #team-name').attr('value');

    if (FormData.SenderTeam == "Team Name (if applicable)") {
        FormData.SenderTeam = "";
    }

    $j.post('/Handler/InviteAFriend.ashx', FormData, function (data) {
        if (data != "1") {
            $j('#invite-friend-dialog').dialog("close");
            $j('#invite-message-dialog div').html("<p>There was an error sending your emails.</p>");
            $j('#invite-message-dialog').dialog("open");
            $j('#invite-message-dialog a.back-btn').click(PFP.InviteAFriend.ResumeInvite);
        } else {
            PFP.InviteAFriend.showConfirmationScreen();
        }
    }, 'text');

}

PFP.InviteAFriend.ShowEmailPreview = function() {
    alert("Press the 'Esc' key to exit the preview");
    $j('#invite-friend-dialog').dialog('close');
    $j('#email-preview-dialog').dialog('open');
}


PFP.PublishToFacebook = function() {
    //initialize using the facebook API key for the PFP application created in facebook
    FB.init("0c61449336953fd2113836e6fe64ccbc", "/scripts/xd_receiver.htm");
    FB.ensureInit(function() {
        FB.Connect.streamPublish(PFP.Pledge.PublishToFacebookMessage, null, null);
    });
    return false;
}

// Initialize dialogs and dialog links when document is ready
$j(document).ready(function () {
    // Pledge dialog
    $j('#pledge-dialog').dialog({
        autoOpen: false,
        modal: true,
        width: 850,
        bgiframe: true,
        title: "Pledge",
        dialogClass: "pledge-dialog",
        buttons: {
            "Ok": function () {
                $j(this).dialog("close");
            },
            "Cancel": function () {
                $j(this).dialog("close");

            }
        }
    });

    // Invite a Friend dialog
    $j('#invite-friend-dialog').dialog({
        autoOpen: false,
        modal: true,
        width: 750,
        title: "Invite a Friend",
        dialogClass: "invite-friend-dialog",
        buttons: {
            "Ok": function () {
                $j(this).dialog("close");
            },
            "Cancel": function () {
                $j(this).dialog("close");
            }
        }
    });

    // Message dialog
    $j('#message-dialog').dialog({
        autoOpen: false,
        modal: true,
        width: 500,
        dialogClass: "message-dialog"
    });

    // Invite friend message dialog
    $j('#invite-message-dialog').dialog({
        autoOpen: false,
        modal: true,
        width: 500,
        dialogClass: "message-dialog"
    });

    // Email preview dialog
    $j('#email-preview-dialog').dialog({
        autoOpen: false,
        modal: true,
        title: '',
        width: 600,
        closeOnEscape: true,
        beforeClose: function (event, ui) { $j('#invite-friend-dialog').dialog('open'); },
        dialogClass: "email-preview-dialog",
        buttons: {
            "Ok": function () {
                $j(this).dialog("close");
            },
            "Cancel": function () {
                $j(this).dialog("close");
            }
        }
    });

    // Submission confirmation dialog
    $j('#submission-confirmation').dialog({
        autoOpen: false,
        modal: true,
        title: "Thank you",
        width: 850,
        dialogClass: "submission-confirmation-dialog"
    });

    // Respond to pledge button click
    startPledgeProcess = function () {
        $j('#pledge-dialog').dialog('open');
        return false;
    };

    if (window.location.href.indexOf('?r=1') > -1) {
        //$j('#submission-confirmation').dialog('open');
        PFP.Pledge.PoundsPledged = GetQueryParm("pounds");
        PFP.Pledge.FoodBankName = GetQueryParm("fbname");
        PFP.Pledge.FoodBankLocation = GetQueryParm("fbloc");
        PFP.Pledge.showConfirmationScreen();
    }

    $j('.pledge-dialog .ui-dialog-titlebar').append($j('#pledge-header-content').html());
    $j('.pledge-dialog .buttons .continue-btn').click(PFP.Pledge.continueProcess);
    $j('.pledge-dialog .buttons .back-btn').click(PFP.Pledge.stepBack);
    $j('.pledge-dialog .buttons .submit-btn').click(PFP.Pledge.continueProcess);
    $j('.pledge-dialog .buttons .skip-btn').click(PFP.Pledge.submitPledgeForm);
    $j('a.invite-friend').click(PFP.InviteAFriend.StartInvite);
    $j('a.invite-a-friend').click(PFP.InviteAFriend.StartInvite);
    $j('a#invitefriend').click(PFP.InviteAFriend.StartInvite);
    $j('a.publish-to-facebook').click(PFP.PublishToFacebook);
    $j('.invite-friend-dialog .send-btn').click(PFP.InviteAFriend.ValidateForm);
    //$j('.invite-friend-dialog .arrow-small').click(PFP.InviteAFriend.ShowEmailPreview);
    $j('.invite-content input').focus(function (e) {
        var thisValue = $j(this).attr('value');
        if (thisValue == "Your name" || thisValue == "Your email" || thisValue == "Friend's name" || thisValue == "Friend's email" || thisValue == "Team Name (if applicable)") {
            $j(this).attr('value', '');
        }
    });

    // Catch when the submission confirmation dialog is closed.
    $j('.submission-confirmation-dialog .ui-dialog-titlebar-close').click(function () {
        if (window.location.search != '') {
            window.location = window.location.href.replace(window.location.search, '');
        }
    });

    $j('#pledgeInfoZip').keyup(function (e) {
        if (e.keyCode == 13) {
            $j('#step2-content .buttons .continue-btn').click();
        }
    });

    $j('#pledgeInfoPounds').keyup(function (e) {
        if (e.keyCode == 13) {
            $j('#step4-content .buttons .continue-btn').click();
        }
    });
});


