﻿//Validation

/* personal */
function ValidateTitle(oSrc, args) {
    var txtTitle = $("#registration #personal [id$='txtTitle']");
    return ValidateRequired(oSrc, args, txtTitle);
}

function ValidateBadgeCompany(oSrc, args) {
    var txtBadgeCompany = $("#registration #personal [id$='txtBadgeCompany']");
    return ValidateRequired(oSrc, args, txtBadgeCompany);
}

function ValidateProvince(oSrc, args) {
    var cboProvince = $("#registration #personal [id$='cboProvince']");
    return ValidateRequired(oSrc, args, cboProvince);
}

function ValidateDelegatePhone(oSrc, args) {
    var txtPhoneCC = $("#registration #personal [id$='txtPhoneCC']");
    var txtPhoneA = $("#registration #personal [id$='txtPhoneA']");
    var txtPhone = $("#registration #personal [id$='txtPhone']");

    return ValidatePhone(oSrc, args, txtPhoneCC, txtPhoneA, txtPhone, "Your ");
}

function ValidateMobile(oSrc, args) {
    var lblMobileRequired = $("#registration #personal [id$='lblMobileRequired']");
    var txtMobile = $("#registration #personal [id$='txtMobile']");
    var chkMobile = $("#registration #personal [id$='chkMobileInfo']");

    if ($(chkMobile).is(":checked")) {
        if ($(txtMobile).val().length < 10) {
            args.IsValid = false;
            oSrc.innerHTML = "<img alt='' src='" + getImageUrl() + "/icon-warn.gif' />";
            oSrc.errormessage = "Required: Mobile";
            $(lblMobileRequired).html("*");
        }
        else {
            args.IsValid = true;
            oSrc.innerHTML = "";
            oSrc.errormessage = "";
            $(lblMobileRequired).html("&nbsp;");
        }
    }
    else {
        oSrc.innerHTML = "";
        oSrc.errormessage = "";
        args.IsValid = true;
    }
    return;
}

function ValidateMobileInfo(oSrc) {
    var lblMobileRequired = $("#registration #personal [id$='lblMobileRequired']");
    var reqMobile = $("#registration #personal [id$='reqMobile']");
    if (oSrc.checked) {
        $(lblMobileRequired).html("*");
    }
    else {
        $(lblMobileRequired).html("&nbsp;")
    }
}

function ValidateGender(oSrc, args) {
    var cboGender = $("#registration #personal [id$='cboGender']");
    return ValidateRequired(oSrc, args, cboGender);
}

function ValidateSmoking(oSrc, args) {
    var cboSmoking = $("#registration #personal [id$='cboSmoking']");
    return ValidateRequired(oSrc, args, cboSmoking);
}

function ValidateDietary(oSrc, args) {
    var txtDietary = $("#registration #personal [id$='txtDietary']");
    return ValidateRequired(oSrc, args, txtDietary);
}

function ValidateDisability(oSrc, args) {
    var txtDisability = $("#registration #personal [id$='txtDisability']");
    return ValidateRequired(oSrc, args, txtDisability);
}

function ValidateGovernment(oSrc, args) {
    var cboGovernment = $("#registration #personal [id$='cboGovernment']");
    return ValidateRequired(oSrc, args, cboGovernment);
}

function ValidatePreCons(oSrc, args) {
    var cboPreCons = $("#registration #personal [id$='cboPreCons']");
    return ValidateRequired(oSrc, args, cboPreCons);
}

/* emergency */
function ValidateEmergencyFirstName(oSrc, args) {
    var txtEFirstName = $("[id$='txtEFirstName']");
    return ValidateRequired(oSrc, args, txtEFirstName);
}

function ValidateEmergencySurname(oSrc, args) {
    var txtESurname = $("#registration #personal [id$='txtESurname']");
    return ValidateRequired(oSrc, args, txtESurname);
}

function ValidateEmergencyEmailValidity(oSrc, args) {
    var txtEEmail = $("#registration #personal [id$='txtEEmail']");
    if ($(txtEEmail).is(":visible")) {
        args.IsValid = IsEmailValid($(txtEEmail).val());
    } else {
        args.IsValid = true;
    }
}

function ValidateEmergencyDayPhone(oSrc, args) {
    var txtPhoneCC = $("#registration #personal [id$='txtDPhoneCC']");
    var txtPhoneA = $("#registration #personal [id$='txtDPhoneA']");
    var txtPhone = $("#registration #personal [id$='txtDPhone']");

    if (!ValidateRequired(oSrc, args, txtPhoneCC) || !ValidateRequired(oSrc, args, txtPhoneA) || !ValidateRequired(oSrc, args, txtPhone)) {
        return ValidatePhone(oSrc, args, txtPhoneCC, txtPhoneA, txtPhone, "Emergency contact - Daytime ");
    }
}

function ValidateEmergencyEveningPhone(oSrc, args) {
    var txtPhoneCC = $("#registration #personal [id$='txtEPhoneCC']");
    var txtPhoneA = $("#registration #personal [id$='txtEPhoneA']");
    var txtPhone = $("#registration #personal [id$='txtEPhone']");

    if (!ValidateRequired(oSrc, args, txtPhoneCC) || !ValidateRequired(oSrc, args, txtPhoneA) || !ValidateRequired(oSrc, args, txtPhone)) {
        return ValidatePhone(oSrc, args, txtPhoneCC, txtPhoneA, txtPhone, "Emergency contact - Evening ");
    }
}


/* delivery address */
function ValidateDeliveryAddress(oSrc, args) {
    var txtAddress1 = $("#registration #personal [id$='txtAddress1']");
    return ValidateRequired(oSrc, args, txtAddress1);
}

function ValidateDeliveryAddressCity(oSrc, args) {
    var txtCity = $("#registration #personal [id$='txtCity']");
    return ValidateRequired(oSrc, args, txtCity);
}

function ValidateDeliveryAddressCountry(oSrc, args) {
    var cboDeliveryCountry = $("#registration #personal [id$='cboDeliveryCountry']");
    return ValidateRequired(oSrc, args, cboDeliveryCountry);
}

function ValidateDeliveryAddressCode(oSrc, args) {
    var txtPostalCode = $("#registration #personal [id$='txtPostalCode']");
    return ValidateRequired(oSrc, args, txtPostalCode);
}


/* billing */
function ValidateBillingCompany(oSrc, args) {
    var txtCompany = $("#registration #billing [id$='txtCompany']");
    return ValidateRequired(oSrc, args, txtCompany);
}

function ValidateBillingVAT(oSrc, args) {
    var txtVAT = $("#registration #billing [id$='txtVAT']");
    return ValidateRequired(oSrc, args, txtVAT);
}

function ValidateBillingJobTitle(oSrc, args) {
    var txtJobTitle = $("#registration #billing [id$='txtJobTitle']");
    return ValidateRequired(oSrc, args, txtJobTitle);
}


/* accounts manager */
function ValidateAccountManagerFirstName(oSrc, args) {
    var txtMFirstName = $("#registration #billing [id$='txtMFirstName']");
    return ValidateRequired(oSrc, args, txtMFirstName);
}

function ValidateAccountManagerSurname(oSrc, args) {
    var txtMSurname = $("#registration #billing [id$='txtMSurname']");
    return ValidateRequired(oSrc, args, txtMSurname);
}

function ValidateAccountManagerCompany(oSrc, args) {
    var txtMCompany = $("#registration #billing [id$='txtMCompany']");
    return ValidateRequired(oSrc, args, txtMCompany);
}

function ValidateAccountManagerEmail(oSrc, args) {
    var txtMEmail = $("#registration #billing [id$='txtMEmail']");
    return ValidateRequired(oSrc, args, txtMEmail);
}

function ValidateAccountManagerEmailValidity(oSrc, args) {
    var txtMEmail = $("#registration #billing [id$='txtMEmail']");
    if ($(txtMEmail).is(":visible")) {
        args.IsValid = IsEmailValid($(txtMEmail).val());
    } else {
        args.IsValid = true;
    }
}

function ValidateAccountManagerPhone(oSrc, args) {
    var txtPhoneCC = $("#registration #billing [id$='txtMPhoneCC']");
    var txtPhoneA = $("#registration #billing [id$='txtMPhoneA']");
    var txtPhone = $("#registration #billing [id$='txtMPhone']");

    if (!ValidateRequired(oSrc, args, txtPhoneCC) || !ValidateRequired(oSrc, args, txtPhoneA) || !ValidateRequired(oSrc, args, txtPhone)) {
        return ValidatePhone(oSrc, args, txtPhoneCC, txtPhoneA, txtPhone, "Accounts manager - Contact number ");
    }
}

/* profiling */
function ValidateShirtSize(oSrc, args) {
    var cboShirtSize = $("#registration #profiling [id$='cboShirtSize']");
    return ValidateRequired(oSrc, args, cboShirtSize);
}

function ValidateFlights(oSrc, args) {
    var cboFlights = $("#registration #profiling [id$='cboFlights']");
    return ValidateRequired(oSrc, args, cboFlights);
}

function ValidateAirportTransfers(oSrc, args) {
    var cboAirportTransfers = $("#registration #profiling [id$='cboAirportTransfers']");
    return ValidateRequired(oSrc, args, cboAirportTransfers);
}

function ValidateArrivalFlightNo(oSrc, args) {
    var txtArrivalFlightNo = $("#registration #profiling [id$='txtArrivalFlightNo']");
    return ValidateRequired(oSrc, args, txtArrivalFlightNo);
}

function ValidateArrivalTime(oSrc, args) {
    var txtArrivalTime = $("#registration #profiling [id$='txtArrivalTime']");
    return ValidateRequired(oSrc, args, txtArrivalTime);
}

function ValidateDepartureFlightNo(oSrc, args) {
    var txtDepartureFlightNo = $("#registration #profiling [id$='txtDepartureFlightNo']");
    return ValidateRequired(oSrc, args, txtDepartureFlightNo);
}

function ValidateDepartureTime(oSrc, args) {
    var txtDepartureTime = $("#registration #profiling [id$='txtDepartureTime']");
    return ValidateRequired(oSrc, args, txtDepartureTime);
}

function ValidateAttendingGala(oSrc, args) {
    var rblAttendingGala = $("#registration #profiling [id$='rblAttendingGala']");
    args.IsValid = ($(rblAttendingGala).find("input:checked").val() != undefined);
}

function ValidateMainLineOfBusiness(oSrc, args) {
    var cboMainLineOfBusiness = $("#registration #profiling [id$='cboMainLineOfBusiness']");
    return ValidateRequired(oSrc, args, cboMainLineOfBusiness);
}

function ValidateJobFunction(oSrc, args) {
    var cboJobFunction = $("#registration #profiling [id$='cboJobFunction']");
    return ValidateRequired(oSrc, args, cboJobFunction);
}

function ValidatePrimaryObjective(oSrc, args) {
    var rblPrimaryObjective = $("#registration #profiling [id$='rblPrimaryObjective']");
    args.IsValid = ($(rblPrimaryObjective).find("input:checked").val() != undefined);
}

function ValidatePrimaryInformationSource(oSrc, args) {
    var rblPrimaryInformationSource = $("#registration #profiling [id$='rblPrimaryInformationSource']");
    args.IsValid = ($(rblPrimaryInformationSource).find("input:checked").val() != undefined);
}

function ValidateMicrosoftNewsletter(oSrc, args) {
    var rblMicrosoftNewsletter = $("#registration #profiling [id$='rblMicrosoftNewsletter']");
    args.IsValid = ($(rblMicrosoftNewsletter).find("input:checked").val() != undefined);
}

/* speaker requirements */
function ValidateAVAudioFeed(oSrc, args) {
    var txtAVAudioFeed = $("#registration #requirements [id$='txtAVAudioFeed']");
    return ValidateRequired(oSrc, args, txtAVAudioFeed);
}

function ValidateAVRequireExtraMicrophones(oSrc, args) {
    var cboAVRequireExtraMicrophones = $("#registration #requirements [id$='cboAVRequireExtraMicrophones']");
    return ValidateRequired(oSrc, args, cboAVRequireExtraMicrophones);
}

function ValidateAVExtraMicrophones(oSrc, args) {
    var txtAVExtraMicrophones = $("#registration #requirements [id$='txtAVExtraMicrophones']");
    return ValidateRequired(oSrc, args, txtAVExtraMicrophones);
}

function ValidateAVRequireWolfVisualizer(oSrc, args) {
    var cboAVRequireWolfVisualizer = $("#registration #requirements [id$='cboAVRequireWolfVisualizer']");
    return ValidateRequired(oSrc, args, cboAVRequireWolfVisualizer);
}

function ValidateAVRequireOtherEquipment(oSrc, args) {
    var cboAVRequireOtherEquipment = $("#registration #requirements [id$='cboAVRequireOtherEquipment']");
    return ValidateRequired(oSrc, args, cboAVRequireOtherEquipment);
}

function ValidateAVOtherEquipment(oSrc, args) {
    var txtAVOtherEquipment = $("#registration #requirements [id$='txtAVOtherEquipment']");
    return ValidateRequired(oSrc, args, txtAVOtherEquipment);
}

function ValidateStagingOtherAdditional(oSrc, args) {
    var txtStagingOtherAdditional = $("#registration #requirements [id$='txtStagingOtherAdditional']");
    return ValidateRequired(oSrc, args, txtStagingOtherAdditional);
}

/* validation */
function ValidateRequired(oSrc, args, obj) {
    if ($(obj).is(":visible")) {
        args.IsValid = !($(obj).val() == "" || $(obj).val().toLowerCase() == "please specify..." || $(obj).val() == "---");
    } else {
        args.IsValid = true;
    }
    return args.IsValid;
}

function ValidatePhone(oSrc, args, txtPhoneCC, txtPhoneA, txtPhone, Type) {
    args.IsValid = true;
    var required = "";

    var PhoneCC = $(txtPhoneCC).val().replace(/ /g, "");
    var PhoneA = $(txtPhoneA).val().replace(/ /g, "");
    var Phone = $(txtPhone).val().replace(/ /g, "");

    if ((PhoneCC == "other") || (PhoneA == "other") || (Phone == "other")) return true;

    if (PhoneCC == "") {
        required += "Country code";
        args.IsValid = false;
    }

    if (PhoneA == "") {
        if (PhoneCC == "") { required += ", " }
        required += "Area code";
        args.IsValid = false;
    }

    if (Phone == "") {
        if (PhoneA == "") { required += ", "; }
        else {
            if (PhoneCC == "") { required += ", "; }
        }

        required += "Phone number";
        args.IsValid = false;
    }

    if (!args.IsValid) {
        oSrc.errormessage = "Required: " + Type + " - " + required;
    }
    else {
        var isInvalid = false;
        var invalidText = "";

        if (!IsNumeric(PhoneCC)) {
            isInvalid = true;
            invalidText += "[Country code] ";
        }
        if (!IsNumeric(PhoneA)) {
            isInvalid = true;
            invalidText += "[Area code] ";
        }
        if (!IsNumeric(Phone)) {
            isInvalid = true;
            invalidText += "[Number] ";
        }

        if (isInvalid) {
            oSrc.errormessage = "Invalid: " + Type + " - " + invalidText;
            args.IsValid = false;
        }
    }
    return;
}

function IsEmailValid(value) {
    value = value.trim();
    if (value == "") { return true; }
    var filter = /^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
    return (filter.test(value));
}

function ValidateUsername(oSrc, args) {
    var value = args.Value.trim();
    var filter = /^([a-zA-Z0-9@\-._]{4,})$/;
    if (filter.test(value)) {
        args.IsValid = true;
        oSrc.innerHTML = "";
        oSrc.errormessage = "";
    } else {
        args.IsValid = false;
        oSrc.innerHTML = "<div class='invalid' title='Invalid'></div>"
        oSrc.errormessage = "Invalid: Username does not meet the required criteria";
    }
}

function ValidatePassword(oSrc, args) {
    var value = args.Value.trim();
    var filter = /^(?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9!@#$%&*()._=+:]{5,})$/;
    if (filter.test(value)) {
        args.IsValid = true;
        oSrc.innerHTML = "";
        oSrc.errormessage = "";
    } else {
        args.IsValid = false;
        oSrc.innerHTML = "<div class='invalid' title='Invalid'></div>"
        oSrc.errormessage = "Invalid: Password does not meet the required criteria";
    }
}
