﻿var PW_Utilities = {
    loginPanel: null,
    txtUAI: null,
    ddlPartner: null,
    txtDay: null,
    ddlMonth: null,
    txtYear: null,
    accRecoveryOptionSelected: null,
    onlineRegisterLink: null,
    emailAddress: null
};



PW_Utilities.ValidateDOB = function() {

    var day = PW_Utilities.txtDay.value - 0;
    var month = PW_Utilities.ddlMonth.selectedIndex;
    var year = PW_Utilities.txtYear.value - 0;
    var maxDays = 31;
    var now = new Date();
    var minYears = now.getFullYear() - 130;
    var maxYears = now.getFullYear() - 15;
    var loginError = document.getElementById("loginError");

    switch (month) {
        case 2:
            if (!isNaN(year) && year % 4 == 0 && (year % 400 == 0 || year % 100 != 0)) {
                maxDays = 29;
            }
            else {
                maxDays = 28;
            }
            break;
        case 4:
        case 6:
        case 9:
        case 11:
            maxDays = 30;
            break;
    }

    var result = true;
    if (day == 0) {
        loginError.innerHTML = "Please enter the day of the month you were born";
        PW_Utilities.txtDay.focus();
        result = false;
    }
    else if (isNaN(day) || day < 1 || day > maxDays) {
    loginError.innerHTML = PW_Utilities.txtDay.value + " is not a valid day. Please enter a number between 1 and " + maxDays;
        PW_Utilities.txtDay.focus();
        result = false;
    }
    else if (month == 0) {
    loginError.innerHTML = "please choose a month from the drop down";
        PW_Utilities.ddlMonth.focus();
        result = false;
    }
    else if (year == 0) {
    loginError.innerHTML = "Please enter the year you were born";
        PW_Utilities.txtYear.focus();
        result = false;
    }
    else if (isNaN(year) || year < minYears || year > maxYears) {
    loginError.innerHTML = PW_Utilities.txtYear.value + " is not a valid year. Please enter your year of birth using four numbers";
        PW_Utilities.txtYear.focus();
        result = false;
    }

    return result;
};

PW_Utilities.ValidateUAI = function() {
    var loginError = document.getElementById("loginError");
    var result = true;

    if (PW_Utilities.ddlPartner.selectedIndex == 0) {
        loginError.innerHTML = "Please choose your lin number prefix code";
        PW_Utilities.ddlPartner.focus();
        result = false;
    }
    else if (PW_Utilities.txtUAI.value == "") {
    loginError.innerHTML = "Please enter your lin number";
        PW_Utilities.txtUAI.focus();
        result = false;
    }
    return result;
};

PW_Utilities.ValidateSurname = function() {
    var loginError = document.getElementById("loginError");
    var result = true;

    if (PW_Utilities.txtSurname.value == "") {
        loginError.innerHTML = "Please enter your surname";
        PW_Utilities.txtSurname.focus();
        result = false;
    }
    return result;
};

PW_Utilities.ValidateUsername = function () {
    var loginError = document.getElementById("loginError");
    var result = true;

    if (PW_Utilities.txtUsername.value == "") {
        loginError.innerHTML = "Please enter your username";
        PW_Utilities.ShowLoginError('block');
        PW_Utilities.txtUsername.focus();
        result = false;
    }
    return result;
};

PW_Utilities.ValidateEmail = function () {
    var loginError = document.getElementById("loginError");
    var result = true;

    if (PW_Utilities.txtUsername.value == "") {
        loginError.innerHTML = "Please enter your email address";
        PW_Utilities.ShowLoginError('block');
        PW_Utilities.txtUsername.focus();
        result = false;
    }
    return result;
};

PW_Utilities.ValidatePassword = function () {
    var loginError = document.getElementById("loginError");
    var result = true;

    if (PW_Utilities.txtPassword.value == "") {
        loginError.innerHTML = "Please enter your password";
        PW_Utilities.ShowLoginError('block');
        PW_Utilities.txtPassword.focus();
        result = false;
    }
    return result;
};

PW_Utilities.ChangeFontSize = function(size) {
    var fontSize = size + "em";
    document.body.style.fontSize = fontSize;
    var loader = new net.ContentLoader("ajax/SetFontSize.aspx?f=" + size);
};

PW_Utilities.HideLogin = function() {
    PW_Utilities.loginPanel.style.display = "none";
};

PW_Utilities.ShowLogin = function() {
    PW_Utilities.loginPanel.style.display = "block";
    PW_Utilities.ddlPartner.focus();
};

PW_Utilities.ShowLoginOnly = function () {
    PW_Utilities.loginPanel.style.display = "block";
};

PW_Utilities.ShowLoginError = function (style) {
    var loginError = document.getElementById("divLoginError");
    loginError.style.display = style;
};

PW_Utilities.IsValidDOB = function () {

    var Error = document.getElementById("DOBError");

    var day = document.getElementById(controlClientID + "Day").value - 0;
    var month = document.getElementById(controlClientID + "Month").value;
    var year = document.getElementById(controlClientID + "Year").value - 0;
    var maxDays = 31;
    var now = new Date();
    var minYears = now.getFullYear() - 130;
    var maxYears = now.getFullYear() - 15;

    switch (month) {
        case "Feb":
            if (!isNaN(year) && year % 4 == 0 && (year % 400 == 0 || year % 100 != 0)) {
                maxDays = 29;
            }
            else {
                maxDays = 28;
            }
            break;
        case "Apr":
        case "Jun":
        case "Sep":
        case "Nov":
            maxDays = 30;
            break;
    }

    var result = true;
    if (day == 0) {
        Error.innerHTML = "Please enter a valid day";
        result = false;
    }
    else if (isNaN(day) || day < 1 || day > maxDays) {
        Error.innerHTML = "Please enter a valid day";
        result = false;
    }
    else if (month == 0) {
        Error.innerHTML = "Please select a valid month";
        result = false;
    }
    else if (year == 0) {
        Error.innerHTML = "Please enter a valid year";
        result = false;
    }
    else if (isNaN(year) || year < minYears || year > maxYears) {
        Error.innerHTML = "Please enter a valid year";
        result = false;
    }

    return result;
};

PW_Utilities.ValidateLocataMemberDOB = function () {

    if(!PW_Utilities.IsValidDOB()){
        document.getElementById("DOBError").style.display = "block";
    }
    else {
        if (PW_Utilities.accRecoveryOptionSelected == null) PW_Utilities.accRecoveryOptionSelected = "UAIDOB";

        var applicantDOB = document.getElementById(controlClientID + "Day").value
            + " " + document.getElementById(controlClientID + "Month").value + " "
            + document.getElementById(controlClientID + "Year").value;
        var url = "Ajax/ValidateMember.aspx?mode=" + PW_Utilities.accRecoveryOptionSelected.toString() + "&pid=" + document.getElementById(controlClientID + "PartnerCode").value +
            "&uai=" + document.getElementById(controlClientID + "LINNumber").value +
            "&dob=" + applicantDOB;

        var img = document.getElementById("progress2");
        img.style.display = "block";

        var loader = new net.ContentLoader(url, PW_Utilities.IsValidLocataMember);
    }
}

PW_Utilities.IsValidPassword = function () {

    var Error = document.getElementById("PWDError");

    var result = true;

    if (document.getElementById(controlClientID + "Password").value == "") {
        Error.innerHTML = "Please enter a password";
        result = false;
    }
    return result;
};

PW_Utilities.ValidateLocataMemberPassword = function () {
    if (!PW_Utilities.IsValidPassword()) {
        document.getElementById("PWDError").style.display = "block";
    }
    else {
        if (PW_Utilities.accRecoveryOptionSelected == null) PW_Utilities.accRecoveryOptionSelected = "UAIPSWD";

        var url = "Ajax/ValidateMember.aspx?mode=" + PW_Utilities.accRecoveryOptionSelected.toString() + "&pid=" + document.getElementById(controlClientID + "PartnerCode").value +
            "&uai=" + document.getElementById(controlClientID + "LINNumber").value +
            "&pwd=" + document.getElementById(controlClientID + "Password").value;

        var img = document.getElementById("progress3");
        img.style.display = "block";

        var loader = new net.ContentLoader(url, PW_Utilities.IsValidLocataMember);
    }
}

PW_Utilities.IsValidLocataMember = function () {

    var img = document.getElementById("progress2");
    img.style.display = "none";
    img = document.getElementById("progress3");
    img.style.display = "none";

    switch (this.req.responseText) {
        case "true":
            document.getElementById("LinNumberError").innerText = "";
            document.getElementById("LinNumberError").style.display = "none";

            switch (PW_Utilities.accRecoveryOptionSelected) {
                case "PWDREMINDER":
                case "EMAILREMINDER":
                case "PWDRESET":
                    document.location.href = "AccountRecovery.aspx?mode=" + PW_Utilities.accRecoveryOptionSelected.toString();
                    break;
                case "CREATE":
                    document.getElementById(controlClientID + "lblSectionHeaderError").style.display = "none";
                    document.getElementById(controlClientID + "lblSectionHeader").style.display = "none";
                    document.getElementById("PWLoginCredentials").style.display = "none";
                    document.getElementById("message").innerText = "Your login credentials have been created successfully and sent to your registered email address.";
                    document.getElementById("message").style.display = "block";
                    break;
                case "UAIPSWD":
                    document.location.href = 'MemberHome.aspx';
                    break;
                case "UAIDOB":
                    document.getElementById("LocataMemberOptionSelected").style.display = "none";
                    document.getElementById("HasNoPassword").style.display = "none";
                    document.getElementById("PWLoginCredentials").style.display = "block";
                    document.getElementById(controlClientID + "lblSectionHeaderError").innerText = "Create an account";
                    document.getElementById(controlClientID + "lblSectionHeader").innerHTML = "Please enter your email address and create a password for the Home-Link site. If you do not have an email address, you can create one at <a href=\"https://mail.google.com\" target=\"_blank\">Gmail</a>, <a href=\"http://uk.mail.yahoo.com\" target=\"_blank\">Yahoo</a> or <a href=\"http://www.hotmail.com\" target=\"_blank\">Hotmail</a>. You also have the ability to set up security questions which can be used if you forget your email address or password.";
                    break;
                case "PWDSEND":
                    document.getElementById(controlClientID + "lblSectionHeaderError").style.display = "none";
                    document.getElementById(controlClientID + "lblSectionHeader").style.display = "none";
                    document.getElementById("PWLoginCredentials").style.display = "none";
                    document.getElementById("message").innerText = "Your password has been sent to your registered email address.";
                    document.getElementById("message").style.display = "block";
                    break;
                case "EMAILGET":
                    document.getElementById(controlClientID + "lblSectionHeaderError").style.display = "none";
                    document.getElementById(controlClientID + "lblSectionHeader").style.display = "none";
                    document.getElementById("PWLoginCredentials").style.display = "none";
                    document.getElementById("message").innerText = "Your email address is: " + PW_Utilities.emailAddress + ".\nIf you do not use this email address, please log in and update your contact details.";
                    document.getElementById("message").style.display = "block";
                    break;
                case "PWDSAVE":
                    document.getElementById(controlClientID + "lblSectionHeaderError").style.display = "none";
                    document.getElementById(controlClientID + "lblSectionHeader").style.display = "none";
                    document.getElementById("PWLoginCredentials").style.display = "none";
                    document.getElementById("message").innerText = "Your password has been reset successfully.";
                    document.getElementById("message").style.display = "block";
                    break;
            }
            break;
        default:
            var img = document.getElementById("progress4");
            img.style.display = "none";

            switch (PW_Utilities.accRecoveryOptionSelected) {
                case "UAIPSWD":
                    document.getElementById("PWDError").innerText = "Either your Homelink number or your Password are incorrect.";
                    document.getElementById("PWDError").style.display = "block";
                    break;
                case "UAIDOB":
                case "PWDRESET":
                    document.getElementById("DOBError").innerText = "Either your Homelink number or your Date of Birth are incorrect.";
                    document.getElementById("DOBError").style.display = "block";
                    break;
                case "CREATE":
                    document.getElementById("PWLoginCredentialsError").innerText = "Error on save. Please check details entered and try again.";
                    document.getElementById("PWLoginCredentialsError").style.display = "block";
                    break;
                case "PWDSEND":
                case "EMAILGET":
                    document.getElementById("PWLoginCredentialsError").innerText = "Authentication failed - Please check details entered and try again.";
                    document.getElementById("PWLoginCredentialsError").style.display = "block";
                    break;
                case "PWDREMINDER":
                    document.getElementById("DOBError").innerText = "Authentication failed - Please check details entered and try again.";
                    document.getElementById("DOBError").style.display = "block";
                    break;
                case "EMAILREMINDER":
                    document.getElementById("PWDError").innerText = "Authentication failed - Please check details entered and try again.";
                    document.getElementById("PWDError").style.display = "block";
                    break;
                case "PWDSAVE":
                    document.getElementById("PWLoginCredentialsError").innerText = "Error on save. Please check details entered and try again.";
                    document.getElementById("PWLoginCredentialsError").style.display = "block";
                    break;
                default:
                    alert('error');
                    break;
            }
            break;
    }
}

PW_Utilities.AccountRecoveryIssueList_Changed = function (sender) {

    var testElement;
    var target;
    var nCounter = 0;

    //In case any option was previously selected, reset the page and then check again.
    document.getElementById("issueListOptionSelected").style.display = "none";
    while (nCounter < 4) //IssueList has only 4 options
    {
        testElement = document.getElementById(sender.id + "_" + nCounter.toString());
        target = document.getElementById("issueListOption" + nCounter.toString());
        target.style.display = "none";
        nCounter = nCounter + 1;
    }

    //Now check to see which option was selected
    nCounter = 0;
    while (nCounter < 4) //IssueList has only 4 options
    {
        testElement = document.getElementById(sender.id + "_" + nCounter.toString());
        target = document.getElementById("issueListOption" + nCounter.toString());
        if (testElement.checked) {
            target.style.display = "block";
            document.getElementById("issueListOptionSelected").style.display = "block";
            document.getElementById("issueListOptions").style.display = "none";
            break;
        }
        else {
            target.style.display = "none";
            document.getElementById("issueListOptionSelected").style.display = "none";
        }
        //check next option
        nCounter = nCounter + 1;
    }
}

PW_Utilities.ShowRegistrationPage = function () {
    document.location.href = PW_Utilities.onlineRegisterLink;
};

PW_Utilities.ShowSelectedDiv = function (divSelected, ListOptionSelected) {

    var accRecoveryOptionSelected = ListOptionSelected.replace("issueListOption", "");
    switch (accRecoveryOptionSelected) {
        case "0":
            PW_Utilities.accRecoveryOptionSelected = "PWDREMINDER";
            document.getElementById(controlClientID + "lblSectionHeader").innerText = "Verify your identity to have your password sent by email to you";
            break;
        case "1":
            PW_Utilities.accRecoveryOptionSelected = "EMAILREMINDER";
            document.getElementById(controlClientID + "lblSectionHeader").innerText = "Verify your identity to view your email address";
            break;
        case "2":
            PW_Utilities.accRecoveryOptionSelected = "PWDRESET";
            document.getElementById(controlClientID + "lblSectionHeader").innerText = "Verify your identity to reset your password";
            break;
        case "3":
            PW_Utilities.accRecoveryOptionSelected = "UAIDOB";
            document.getElementById(controlClientID + "lblSectionHeaderError").innerText = "Create your login credentials";
            document.getElementById(controlClientID + "lblSectionHeader").innerText = "You can now will be able to select your username and password";
            break;
        default:
            PW_Utilities.accRecoveryOptionSelected = "Not Implemented";
            break;
    }

    document.getElementById("issueListOptionSelected").style.display = "none";
    document.getElementById(ListOptionSelected).style.display = "none";
    document.getElementById(divSelected).style.display = "block";
}

PW_Utilities.AccountRecoveryLocataMember_Changed = function (sender) {

    var testElement;
    var target;
    var nCounter = 0;

    //In case any option was previously selected, reset the page and then check again.
    document.getElementById("LocataMemberOptionSelected").style.display = "none";
    while (nCounter < 2) //LocataMember has only 2 options
    {
        testElement = document.getElementById(sender.id + "_" + nCounter.toString());
        target = document.getElementById("LocataMemberOption" + nCounter.toString());
        target.style.display = "none";
        nCounter = nCounter + 1;
    }

    //Now check to see which option was selected
    nCounter = 0;
    while (nCounter < 2) //LocataMember has only 2 options
    {
        testElement = document.getElementById(sender.id + "_" + nCounter.toString());
        target = document.getElementById("LocataMemberOption" + nCounter.toString());
        if (testElement.checked) {
            target.style.display = "block";
            document.getElementById("LocataMemberOptionSelected").style.display = "block";
            document.getElementById("LinNumberQuestion").style.display = "none";
            break;
        }
        else {
            target.style.display = "none";
            document.getElementById("LocataMemberOptionSelected").style.display = "none";
        }
        //check next option
        nCounter = nCounter + 1;
    }
}

PW_Utilities.ShowPasswordReset = function () {
    PW_Utilities.accRecoveryOptionSelected = "PWDSAVE"
    document.getElementById("LocataMemberOptionSelected").style.display = "none";
    document.getElementById("HasNoPassword").style.display = "none";
    document.getElementById("hr1").style.display = "none";
    document.getElementById("sEmailAddress").style.display = "none";
    document.getElementById("hr2").style.display = "none";
    document.getElementById("header2").style.display = "none";
    document.getElementById("PWLoginCredentials").style.display = "block";
}

PW_Utilities.ShowEmailReminder = function () {
    if (PW_Utilities.accRecoveryOptionSelected == null) PW_Utilities.accRecoveryOptionSelected = "EMAILGET";
    document.getElementById("sPasswordLabel").innerText = "Enter your password";
    document.getElementById("PWLoginCredentials").style.display = "block";
    document.getElementById("sEmailAddress").style.display = "none";
    document.getElementById("header2").style.display = "none";
}

PW_Utilities.ShowPasswordReminder = function () {
    if (PW_Utilities.accRecoveryOptionSelected == null) PW_Utilities.accRecoveryOptionSelected = "PWDSEND";
    document.getElementById("PWLoginCredentials").style.display = "block";
    document.getElementById("sPassword").style.display = "none";
    document.getElementById("header2").style.display = "none";
}

PW_Utilities.ShowObject = function (obj) {
    document.getElementById(obj).style.display = "block";
}

PW_Utilities.HideObject = function (obj) {
    document.getElementById(obj).style.display = "none";
}

PW_Utilities.IsValidUAI = function () {
    var Error = document.getElementById("LinNumberError");
    var result = true;

    if (document.getElementById(controlClientID + "PartnerCode").value == "") {
        Error.innerHTML = "Please choose your lin number prefix code";
        result = false;
    }
    else if (document.getElementById(controlClientID + "LINNumber").value == "") {
        Error.innerHTML = "Please enter your lin number";
        result = false;
    }

    return result;
};

PW_Utilities.LocataMemberHasPasswordSetup = function () {
    if (!PW_Utilities.IsValidUAI()) {
        document.getElementById("LinNumberError").style.display = "block";
    }
    else {
        var url = "Ajax/ValidateMember.aspx?mode=CHKPSWD&pid=" + document.getElementById(controlClientID + "PartnerCode").value +
            "&uai=" + document.getElementById(controlClientID + "LINNumber").value;
        var img = document.getElementById("progress1");
        img.style.display = "block";
        var loader = new net.ContentLoader(url, PW_Utilities.IsLocataMemberWithPassword);
    }
}

PW_Utilities.IsLocataMemberWithPassword = function () {

    var img = document.getElementById("progress1");
    img.style.display = "none";

    document.getElementById("LinNumberError").innerText = "";
    document.getElementById("LinNumberError").style.display = "none";
    document.getElementById("NavNext1").style.display = "none";

    switch (this.req.responseText) {
        case "true":
            if ((PW_Utilities.accRecoveryOptionSelected == "PWDREMINDER") || (PW_Utilities.accRecoveryOptionSelected == "PWDRESET")) {
                //show box for dob as user is trying to reset/retrieve password
                document.getElementById("HasNoPassword").style.display = "block";
            }
            else {
                //show box for password
                document.getElementById(controlClientID + "lblSectionHeaderError").innerText = "Password Exists - You have setup a password already!!";
                document.getElementById(controlClientID + "lblSectionHeader").innerText = "Either log in with your existing password, or in the event you have forgotten your password click on the 'Cannot access your account?' link in the left menu.";
                document.getElementById("HasPassword").style.display = "block";
            }
            break;
        default:
            //show box for dob
            document.getElementById("HasNoPassword").style.display = "block";
            break;
    }
}

PW_Utilities.IsValidTextEntry = function (objTxtBox) {
    var result = true;

    if (objTxtBox.value == "") {
        result = false;
    }

    return result;
};

PW_Utilities.IsValidDropdownSelection = function (objCBO) {
    var result = true;

    if (objCBO.selectedIndex == 0) {
        result = false;
    }

    return result;
};

PW_Utilities.IsValidCredentials = function () {
    var result = true;

    if (PW_Utilities.accRecoveryOptionSelected != "PWDSEND" && PW_Utilities.accRecoveryOptionSelected != "EMAILGET" && PW_Utilities.accRecoveryOptionSelected != "PWDSAVE") {
        var Error = document.getElementById("PWLoginCredentialsError");
        var regexEMAIL = /^([a-zA-Z0-9_.-])+@([a-zA-Z0-9_.-])+\.([a-zA-Z])+([a-zA-Z])+/;

        if (document.getElementById(controlClientID + "EMAIL").value == "") {
            Error.innerHTML = "Please enter your email address.";
            result = false;
        }
        else if ((document.getElementById(controlClientID + "EMAIL").value != "") && !regexEMAIL.test(document.getElementById(controlClientID + "EMAIL").value)) {
            Error.innerHTML = "Please enter a valid email address.";
            result = false;
        }
        else if (!PW_Utilities.IsValidTextEntry(document.getElementById(controlClientID + "PWD"))) {
            Error.innerHTML = "Please enter a password.";
            result = false;
        }
        else if (!PW_Utilities.IsValidDropdownSelection(document.getElementById(controlClientID + "PWMQ1"))) {
            Error.innerHTML = "Please select a question from the list of questions available in the Question 1 drop down list.";
            result = false;
        }
        else if (!PW_Utilities.IsValidTextEntry(document.getElementById(controlClientID + "PWMQA1"))) {
            Error.innerHTML = "Please enter an answer for Question 1.";
            result = false;
        }
        else if (!PW_Utilities.IsValidDropdownSelection(document.getElementById(controlClientID + "PWMQ2"))) {
            Error.innerHTML = "Please select a question from the list of questions available in the Question 2 drop down list.";
            result = false;
        }
        else if (!PW_Utilities.IsValidTextEntry(document.getElementById(controlClientID + "PWMQA2"))) {
            Error.innerHTML = "Please enter an answer for Question 2.";
            result = false;
        }
    }

    return result;
};

PW_Utilities.LocataMemberPWLoginCredentials = function () {
    if (!PW_Utilities.IsValidCredentials()) {
        document.getElementById("PWLoginCredentialsError").style.display = "block";
    }
    else {
        if ((PW_Utilities.accRecoveryOptionSelected == null) || (PW_Utilities.accRecoveryOptionSelected == "UAIDOB")) PW_Utilities.accRecoveryOptionSelected = "CREATE";
        var url = "Ajax/ValidateMember.aspx";
        var params = "mode=" + PW_Utilities.accRecoveryOptionSelected.toString() +
            "&email=" + encodeURI(document.getElementById(controlClientID + "EMAIL").value) +
            "&pwd=" + encodeURI(document.getElementById(controlClientID + "PWD").value) +
            "&sq1=" + encodeURI(document.getElementById(controlClientID + "PWMQ1").value) +
            "&sa1=" + encodeURI(document.getElementById(controlClientID + "PWMQA1").value) +
            "&sq2=" + encodeURI(document.getElementById(controlClientID + "PWMQ2").value) +
            "&sa2=" + encodeURI(document.getElementById(controlClientID + "PWMQA2").value);

        var img = document.getElementById("progress4");
        img.style.display = "block";

        /* POST data across instead of default GET, as we ill then not be limited by QueryString max length */
        var loader = new net.ContentLoader(url, PW_Utilities.IsValidLocataMember, null, "POST", params);
    }
}
