﻿function forgottenPasswordPopup() {
    showModal(modalForgottenPasswordId);
}

function sendForgottenPasswordEmail() {
    $("#phForgottenPassword_LoginNotFound").hide();
    $("#phForgottenPassword_Error").hide();
    $("#phForgottenPassword_EmailSent").hide();
    if (Page_IsValid) {
        var email = $(forgottenPasswordEmailId).val();
        var params = "{email:" + JSON.stringify(email) + "}";
        jsonPost("Default.aspx/SendForgottenPasswordMail", params, sendForgottenPasswordCallback, communicationErrorCallback);
    }
    return false; // cancel default postback behaviour
}

function sendForgottenPasswordCallback(message) {
    switch (message.d.Code) {
        case 1: // Successfully emailed user
            $("#phForgottenPassword_EnterEmail").fadeOut("fast", function () {
                $("#phForgottenPassword_EmailSent").fadeIn("fast");
                $("#phForgottenPassword_EmailSent").parents('.pop_alert').find('.pop_title').hide();
                $(btnForgottenPasswordSend).fadeOut("fast");
                $('#emailAfterSend').html('&nbsp;' + message.d.Email + '&nbsp;');
            });
            break;
        case 2: // Login not found
            $("#phForgottenPassword_LoginNotFound").fadeIn("fast");
            break;
        case 3: // Error
            $("#phForgottenPassword_Error").fadeIn("fast");
    }
}

function jsonPost(url, params, successCallback, failureCallback) {
    $.ajax({
        type: "POST",
        url: url,
        data: params,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: successCallback,
        error: failureCallback
    });
}

function cardDesignValidation(sender, args) {

    var activeImage = $(".jcarousel-skin-tango img[class='active-image']").get();
    if (activeImage == "") {
        args.IsValid = false;
        $("#rfvCardDesign").show();
    } else {
        args.IsValid = true;
        $("#rfvCardDesign").hide();
    }
}

function quantityValidation(sender, args) {
    var value = parseInt(args.Value);

    if (isNaN(value)) {
        return false;
    }

    if (value < 1 || value > 99) {
        return false;
    }

    return true;
}


function cardChoicePopup() {
    showModal(modalCardChoice);
}

function postcodeAnywhereAddressRequest(postcode) {

    if (postcode == "") {
        alert("Please enter a post code");
        return false;
    }

    $("#loadingPlaceHolder").show();
    $("#errorPlaceHolder").hide();
    $("#resultPlaceHolder").hide();

    var addressCount = 0;
    $.get("/shop/PostcodeLookup.ashx?PostCode=" + postcode, function (message) {
        // populate address list
        $("#ddlAddressChoice").children().remove();

        $.each(message, function () {
            $("#ddlAddressChoice").append($("<option></option>").val(this.Id).html(this.Description));
            addressCount += 1;
        });
        $("#loadingPlaceHolder").hide();
        if (addressCount > 0) {
            $("#resultsPlaceHolder").show();
        } else {
            $("#errorPlaceHolder").show();
        }
    });

    $(".modalSelectButton").unbind("click").click(function () {
        var addressId = $("#ddlAddressChoice").val();
        if (addressId != "") {
            $.get("/shop/PostcodeLookup.ashx?AddressId=" + addressId, function (message) {
                $(txtAddressLine1).val(message.line1Field);
                $(txtAddressLine2).val(message.line2Field);
                $(txtAddressLine3).val(message.line3Field);
                $(txtTelephoneNumber).val(message.PhoneField);
                $(txtTownCity).val(message.postTownField);
                $(txtCounty).val(message.countyField);
                $(ddlCountry).val('223');
            });

            hideModal();
            $("#loadingPlaceHolder").show();
            $("#resultsPlaceHolder").hide();
            return false;
        }
    });

    showModal(modalAddressChoice);
}

function communicationErrorCallback(message) {
    showModal(modalCommunicationErrorId);
}


function sendDateValidation(sender, args) {
    var dateFormat = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/

    if (dateFormat.test(args.Value)) {
        var dateParts = args.Value.split("/");
        var year = parseInt(dateParts[2], 10);
        var month = parseInt(dateParts[1], 10) - 1;
        var day = parseInt(dateParts[0], 10);
        var dateSend = new Date(year, month, day);

        var dateToday = new Date();

        if (dateToday.getTime() - dateSend.getTime() <= 86400000) {
            args.IsValid = true;
        }
        else {
            args.IsValid = false;
        }
    }
    else
    {
        args.IsValid = false;
    }
}

function CardPreview() {

    // Public Properties

    this.ModalId = "";
    this.ImageSrc = "";
    this.Message = "";
    this.MessageTo = "";
    this.MessageBody = "";
    this.MessageFrom = "";
    this.ProductTitle = "";
    this.ProductImageSrc = "";
    this.ProductDescription = "";
    this.StyleClass = "";

    this.IsPost = false;
    this.IsEmail = false;

    // Private Properties

    var ImagePlaceHolder = $(".imagePlaceHolder");
    var MessagePlaceHolder = $("#messagePlaceHolder");
    var ProductTitlePlaceHolder = $("#productTitlePlaceHolder");
    var ProductDescriptionPlaceHolder = $("#productDescriptionPlaceHolder");
    var ProductImagePlaceHolder = $("#productImagePlaceHolder");
    var MessageToPlaceHolder = $("#messageToPlaceHolder");
    var MessageBodyPlaceHolder = $("#messageBodyPlaceHolder");
    var MessageFromPlaceHolder = $("#messageFromPlaceHolder");

    // Public Methods

    this.IsValid = function () {
        return false;
    }

    this.Display = function () {
        if (this.IsEmail) {
            RemoveStyleClasses(MessagePlaceHolder);
            MessagePlaceHolder.html(PrepareHtml(this.Message)).addClass(this.StyleClass);
            ImagePlaceHolder.attr("src", this.FullImageSrc);
        }

        if (this.IsPost) {
            RemoveStyleClasses(MessageToPlaceHolder);
            RemoveStyleClasses(MessageBodyPlaceHolder);
            RemoveStyleClasses(MessageFromPlaceHolder);
            if (!this.IsCardBlank) {
                MessageToPlaceHolder.html(PrepareHtml(this.MessageTo)).addClass(this.StyleClass);
                MessageBodyPlaceHolder.html(PrepareHtml(this.MessageBody)).addClass(this.StyleClass);
                MessageFromPlaceHolder.html(PrepareHtml(this.MessageFrom)).addClass(this.StyleClass);
            }
            else {
                MessageToPlaceHolder.html('');
                MessageBodyPlaceHolder.html('');
                MessageFromPlaceHolder.html('');
            }
            ImagePlaceHolder.attr("src", this.FullImageSrc);
        }
        ProductTitlePlaceHolder.html(this.ProductTitle);
        ProductDescriptionPlaceHolder.html(this.ProductDescription);
        ProductImagePlaceHolder.attr("src", this.ProductImageSrc);
        showModal("#" + this.ModalId);
    }

    // Private Methods

    var RemoveStyleClasses = function (element) {
        element.removeClass("style1").removeClass("style2").removeClass("style3");
    }

    var PrepareHtml = function (value) {
        value = value.replace(/\n/gi, "<br />");
        // HtmlEncode the text but HtmlDecode line breaks to maintain them
        var div = document.createElement("div");
        var text = document.createTextNode(value);
        div.appendChild(text);
        var encoded = div.innerHTML;
        return htmlDecodeLineBreaks(encoded);
    }
}

//function htmlEncode(value) {
//    return value.replace(/</gi, "&lt;").replace(/>/gi, "&gt;");
//}

//function htmlDecode(value) {
//    return value.replace(/&lt;/gi, "<").replace(/&gt;/gi, ">");
//}

function htmlDecodeLineBreaks(value) {
    return value.replace(/&lt;br \/&gt;/gi, "<br />");
}

function GetSelectedClass() {
    var className;
    $("#styleRadios input[type='radio']").each(function () {
        if ($(this).attr("checked")) {
            className = "style" + $(this).parent().attr("data-id"); // get span attribute above radio *spans wrapping radios?!? why .NET?!? why?!?*
        }
    });
    return className;
}



var addressFieldMapping;

// AddressFieldMapping
// Provides a method to map ASP.Net field controls with JavaScript for quick updating
//
function AddressFieldMapping(line1FieldId, line2FieldId, line3FieldId, townFieldId, countyFieldId, countryFieldId, postCodeFieldId, firstNameFieldId, lastNameFieldId, titleFieldId, phoneFieldId) {

    // Private Field Mappings
    var Line1Field = $("#" + line1FieldId);
    var Line2Field = $("#" + line2FieldId);
    var Line3Field = $("#" + line3FieldId);
    var TownField = $("#" + townFieldId);
    var CountyField = $("#" + countyFieldId);
    var CountryField = $("#" + countryFieldId);
    var PostCodeField = $("#" + postCodeFieldId);
    var FirstNameField = $("#" + firstNameFieldId);
    var LastNameField = $("#" + lastNameFieldId);
    var TitleField = $("#" + titleFieldId);
    var PhoneField = $("#" + phoneFieldId);

    this.Update = function (address) {
        Line1Field.val(address.Line1);
        Line2Field.val(address.Line2);
        Line3Field.val(address.Line3);
        TownField.val(address.Town);
        CountyField.val(address.County);
        PostCodeField.val(address.PostCode);
        CountryField.val(address.CountryId);

        FirstNameField.val(address.FirstName);
        LastNameField.val(address.LastName);
        TitleField.val(address.Title);
        PhoneField.val(address.Phone);
    }
}

//function Address() {
//    this.Id = -1;
//    this.Line1 = "";
//    this.Line2 = "";
//    this.Line3 = "";
//    this.Town = "";
//    this.County = "";
//    this.CountryId = "";
//}

function updateAddress(dropDownList) {
    if (addressFieldMapping == undefined) {
        alert("No address field mapping specified");
        return;
    }

    // use the id of the dropdownlist to find the relevant address from our array, see SiteHelpers.BindPreviousAddresses for more info

    var selectedId = $(dropDownList).val();
    if (selectedId != "") {
        var selectedAddress;
        for (var i = 0; i < addressPreFills.length; i++) {
            if (addressPreFills[i].Id == selectedId)
                selectedAddress = addressPreFills[i];
        }

        addressFieldMapping.Update(selectedAddress);
    }
}


function validateDonationAmount(sender, args) {
    args.IsValid = !isNaN(args.Value) && args.Value > 0;
}


