﻿
var reg2InvalidationPath = "";
var reg2Xml;

function reg2IsEmail(bitWise) {
    return ((bitWise & 1) == 1);
}

function reg2IsName_SplitBox(bitWise) {
    return ((bitWise & 2) == 2);
}

function reg2IsName_OneBox(bitWise) {
    return ((bitWise & 4) == 4);
}

function reg2IsPassword(bitWise) {
    return ((bitWise & 8) == 8);
}

function reg2IsAddress_Full(bitWise) {
    return ((bitWise & 16) == 16);
}

function reg2IsAddress_PostcodeOnly(bitWise) {
    return ((bitWise & 32) == 32);
}

function reg2IsPhone_All(bitWise) {
    return ((bitWise & 64) == 64);
}

function reg2IsPhone_Day(bitWise) {
    return ((bitWise & 128) == 128);
}

function reg2IsPhone_Evening(bitWise) {
    return ((bitWise & 256) == 256);
}

function reg2IsPhone_Mobile(bitWise) {
    return ((bitWise & 512) == 512);
}

function reg2IsPhone_SingleSpecial(bitWise) {
    return ((bitWise & 1024) == 1024);
}

function reg2IsMessage(bitWise) {
    return ((bitWise & 2048) == 2048);
}

function reg2IsDOB(bitWise) {
    return ((bitWise & 4096) == 4096);
}

function reg2IsBudgetMin(bitWise) {
    return ((bitWise & 8192) == 8192);
}

function reg2IsBudgetMax(bitWise) {
    return ((bitWise & 16384) == 16384);
}

var RegHasBack = false;
var RegQuestions = [];
var RegIsOnBackForm = false;


function reg2ValidateWholePage(bitWise,title,message) {
    var RegIsValid = true;
    var err = "";
    var errbool;

    if (RegQuestions) {
        if (RegQuestions.length > 0) {
            for (var num = 0; num < RegQuestions.length; num++) {
                err = reg2ValidateQuestion(RegQuestions[num]);
                if (err.length > 0)
                    RegIsValid = false;
            }
        }
    }

    errbool = reg2ValidateLine(bitWise);

    if (!errbool)
        RegIsValid = false;

    if (!RegIsValid) {
        reg2NotifyInvalidation();
        MsgBox(title, "There are errors and/or missing items on the form. Please identify and correct these before clicking on \'Submit\'", MsgBoxOK(), null);
    } else if (RegIsValid) {
        if (RegHasBack && !RegIsOnBackForm) {
            MsgBox(title, message, MsgBoxYes() + MsgBoxNo(), reg2ShowBackForm)
        } else if (!RegHasBack && !RegIsOnBackForm) {
            reg2ShowBackForm(MsgBoxNo());
        } else if (RegIsOnBackForm) {
            reg2ShowBackForm(MsgBoxYes);
        }
    }
    

    return RegIsValid;//not really needed any more
}



function reg2ValidateQuestion(questionName) {

    var field = document.getElementById(questionName);
    var required = false;
    var err = "";

    if (!field) {
        required = true;
        field = document.getElementById(questionName + 'r');
    }

    if (!field) {
        err = "";

    } else if (!required) {
        err = "";

    } else if (field.type == "checkbox") {
        err = "";

    } else {
        switch (field.tagName.toLowerCase()) {
            case 'input':
                switch (field.type.toLowerCase()) {
                    case 'checkbox':
                        err = "";
                        break;
                    case 'text':
                        if (trim(field.value).length == 0)
                            err = "This field is required";
                        break;
                    case 'hidden':
                        err = "";
                        break;
                }
                break;
            case 'textarea':
                if (trim(field.value).length == 0)
                    err = "This field is required";
                break;
            case 'select':
                if(trim(field.value).length==0 || trim(field.value)=="14")
                err = "This field is required"; //csv, hopefully
                break;
        }
    }

    if (trim(err).length == 0) {
        reg2FlagLineValid(new Array(questionName));
    } else {
        reg2FlagLineInvalid(err,new Array(questionName));
    }

    return err;
}

function reg2ValidateLine(bitWise) {

    var err = "";
    var valid = true

    if (reg2IsEmail(bitWise)) {
        err = reg2EmailIsValid();
        if (err.length == 0) {
            reg2FlagLineValid(new Array('email'));
        } else {
            reg2FlagLineInvalid(err, new Array('email'));
            valid = false;
        }
    }

    if (reg2IsName_SplitBox(bitWise)) {
        err = reg2Name_SplitBoxIsValid();
        if (err.length == 0) {
            reg2FlagLineValid(new Array('Name_SplitBox'));
        } else {
            reg2FlagLineInvalid(err, new Array('Name_SplitBox'));
            valid = false;
        }
    }

    if (reg2IsName_OneBox(bitWise)) {
        err = reg2Name_OneBoxIsValid();
        if (err.length == 0) {
            reg2FlagLineValid(new Array('Name_OneBox'));
        } else {
            reg2FlagLineInvalid(err, new Array('Name_OneBox'));
            valid = false;
        }
    }

    if (reg2IsPassword(bitWise)) {
        err = reg2PasswordIsValid();
        if (err.length == 0) {
            reg2FlagLineValid(new Array('Password1'));
        } else {
            reg2FlagLineInvalid(err, new Array('Password1'));
            valid = false;
        }
    }

    if (reg2IsAddress_Full(bitWise)) {
        err = reg2Address_FullIsValid();
        if (err.length == 0) {
            reg2FlagLineValid(new Array('Address_Full'));
        } else {
            reg2FlagLineInvalid(err, new Array('Address_Full'));
            valid = false;
        }
    }

    if (reg2IsAddress_PostcodeOnly(bitWise)) {
        err = reg2Address_PostcodeOnlyIsValid();
        if (err.length == 0) {
            reg2FlagLineValid(new Array('postcode'));
        } else {
            reg2FlagLineInvalid(err, new Array('postcode'));
            valid = false;
        }
    }

    if (reg2IsPhone_All(bitWise)) {
        err = reg2Phone_AllIsValid();
        if (err.length == 0) {
            reg2FlagLineValid(new Array('Phone_All'));
        } else {
            reg2FlagLineInvalid(err, new Array('Phone_All'));
            valid = false;
        }
    }

    if (reg2IsPhone_Day(bitWise)) {
        err = reg2Phone_DayIsValid();
        if (err.length == 0) {
            reg2FlagLineValid(new Array('dayphone'));
        } else {
            reg2FlagLineInvalid(err, new Array('dayphone'));
            valid = false;
        }
    }

    if (reg2IsPhone_Evening(bitWise)) {
        err = reg2Phone_EveningIsValid();
        if (err.length == 0) {
            reg2FlagLineValid(new Array('eveningphone'));
        } else {
            reg2FlagLineInvalid(err, new Array('eveningphone'));
            valid = false;
        }
    }

    if (reg2IsPhone_Mobile(bitWise)) {
        err = reg2Phone_MobileIsValid();
        if (err.length == 0) {
            reg2FlagLineValid(new Array('mobilephone'));
        } else {
            reg2FlagLineInvalid(err, new Array('mobilephone'));
            valid = false;
        }
    }

    if (reg2IsPhone_SingleSpecial(bitWise)) {
        err = reg2Phone_SingleSpecialIsValid();
        if (err.length == 0) {
            reg2FlagLineValid(new Array('specialphone'));
        } else {
            reg2FlagLineInvalid(err, new Array('specialphone'));
            valid = false;
        }
    }

    if (reg2IsMessage(bitWise)) {
        err = reg2MessageIsValid();
        if (err.length == 0) {
            reg2FlagLineValid(new Array('message'));
        } else {
            reg2FlagLineInvalid(err, new Array('message'));
            valid = false;
        }
    }

    if (reg2IsDOB(bitWise)) {
        err = reg2DOBIsValid();
        if (err.length == 0) {
            reg2FlagLineValid(new Array('DOB'));
        } else {
            reg2FlagLineInvalid(err, new Array('DOB'));
            valid = false;
        }
    }

    if (reg2IsBudgetMin(bitWise)) {
        err = reg2BudgetMinIsValid();
        if (err.length == 0) {
            reg2FlagLineValid(new Array('budgetmin'));
        } else {
            reg2FlagLineInvalid(err, new Array('budgetmin'));
            valid = false;
        }
    }

    if (reg2IsBudgetMax(bitWise)) {
        err = reg2BudgetMaxIsValid();
        if (err.length == 0) {
            reg2FlagLineValid(new Array('budgetmax'));
        } else {
            reg2FlagLineInvalid(err, new Array('budgetmax'));
            valid = false;
        }
    }

    return valid;
}

function reg2DOBIsValid() {
    var required = false;

    var dobDay = document.getElementById("dob_day");
    if (!dobDay) {
        required = true;
        dobDay = document.getElementById("dob_dayr");
    }

    var dobMonth = document.getElementById("dob_month");
    if (!dobMonth) {
        required = true;
        dobMonth = document.getElementById("dob_monthr");
    }

    var dobYear = document.getElementById("dob_year");
    if (!dobYear) {
        required = true;
        dobYear = document.getElementById("dob_yearr");
    }


    if (required) {
        if (dobDay.value == "0" || dobMonth.value == "0" || dobYear.value == "0")
            return "Date of birth is required";
    }

    if (dobDay.value == "0" && dobMonth.value == "0" && dobYear.value == "0")
        return "";

    switch ("0") {
        case dobDay.value:
            return "Day of month cannot be left blank";
            break;
        case dobMonth.value:
            return "Month is a required field";
            break;
        case dobYear.value:
            return "Year is a required field";
            break;
    }

    if (!isDate(dobMonth.value + '/' + dobDay.value + '/' + dobYear.value))
        return "Invalid date entered";


    return "";
}

function reg2BudgetMinIsValid() {
    var required = false;

    var field = document.getElementById("budgetmin");
    if (!field) {
        required = true;
        field = document.getElementById("budgetminr");
    }

    if (required) {
        if (trim(field.value).length == 0) {
            return "Minimum budget is a required field";
        }
    }


    if (trim(field.value).length == 0)
        return "";

    if (!reg2IsNumeric(trim(field.value)))
        return "Invalid budget entered - please enter a numeric value";


    return "";

}

function reg2BudgetMaxIsValid() {
    var required = false;

    var field = document.getElementById("budgetmax");
    if (!field) {
        required = true;
        field = document.getElementById("budgetmaxr");
    }

    if (required) {
        if (trim(field.value).length == 0) {
            return "Minimum budget is a required field";
        }
    }


    if (trim(field.value).length == 0)
        return "";

    if (!reg2IsNumeric(trim(field.value)))
        return "Invalid budget entered - please enter a numeric value";


    return "";
}

function reg2EmailIsValid() {
    var required = false;

    var field = document.getElementById("email1");
    if (!field) {
        required = true;
        field = document.getElementById("email1r");
    }

    var field2 = document.getElementById("email2");
    if (!field2) {
        field2 = document.getElementById("email2r");
    }

    //both emails match
    if (trim(field.value) != trim(field2.value))
        return "Email addresses do not match";

    if (required) {
        //field is filled in
        if (trim(field.value).length == 0)
            return "Email address is a required field";
    }

    if (trim(field.value).length == 0)
        return "Email address cannot be left blank";

    //email is in correct format
    //var re = new RegExp("^[\w\.\-_]+@[\w\.\-_]+(\.{1}[\w\-_]+)*\.{1}[\w]{2,5}$");
    var re = new RegExp("^[\\w\\.\\-_]+@[\\w\\.\\-_]+(\\.{1}[\\w\-_]+)*\\.{1}[\\w]{2,5}$");
    var match = re.exec(trim(field.value));

    if (!match)
        return "Email address is not in a valid format";

    //valid!
    return "";
}

function reg2Name_OneBoxIsValid() {
    var required = false;

    var field = document.getElementById("Name_OneBox");
    if (!field) {
        required = true;
        field = document.getElementById("Name_OneBoxr");
    }

    if (required) {
        if (trim(field.value).length == 0)
            return "Name is a required field";
    }
        

    if (trim(field.value).length == 0)
        return "Name cannot be left blank";//I guess some things are ALWAYS required...

    return "";
}

function reg2Phone_DayIsValid() {
    reg2Phone_DayIsValid(true);
}

function reg2Phone_DayIsValid(considerRequired) {
    if (considerRequired == null)
        considerRequired = true;
    var required = false;

    var field = document.getElementById("dayphone");
    if (!field) {
        required = true;
        field = document.getElementById("dayphoner");
    }

    if (!considerRequired)
        required = false;

    if (required) {
        if (trim(field.value).length == 0)
            return "Daytime Phone is a required field";
    }

    return "";
}

function reg2Phone_MobileIsValid() {
    reg2Phone_MobileIsValid(true);
}

function reg2Phone_MobileIsValid(considerRequired) {
    if (considerRequired == null)
        considerRequired = true;
    var required = false;

    var field = document.getElementById("mobilephone");
    if (!field) {
        required = true;
        field = document.getElementById("mobilephoner");
    }
    
    if (!considerRequired)
        required = false;


    //correct format
    if (trim(field.value).length > 0) {
        if (!reg2IsMobileNumber(trim(field.value))) {
            return "Mobile number is not in correct format";
        }
    }

    if (required) {
        if (trim(field.value).length == 0)
            return "Mobile Phone is a required field";
    }

    return "";
}




function reg2IsNumeric(sText) {
    var ValidChars = "0123456789";
    var IsNumber = true;
    var Char;


    for (i = 0; i < sText.length && IsNumber == true; i++) {
        Char = sText.charAt(i);
        if (ValidChars.indexOf(Char) == -1) {
            IsNumber = false;
        }
    }
    return IsNumber;

}


function reg2IsMobileNumber(sMobileNumber) {

    sMobileNumber = trim(sMobileNumber);

    if (sMobileNumber.length == 0 || sMobileNumber.length < 10) {
        return false;
    }

    for (var num = 1; num < sMobileNumber.length; num++) {

        switch (sMobileNumber.substr(num, 1)) {
            case "0":
            case "1":
            case "2":
            case "3":
            case "4":
            case "5":
            case "6":
            case "7":
            case "8":
            case "9":
                break;
            default:
                return false;
                break;
        }
    }

    if (sMobileNumber.Length == 11) { //07976831386
        if (sMobileNumber.substr(0, 1) != "0") {
            return false;
        }
    } else if (sMobileNumber.Length == 12) { //447976831386
        if (!reg2IsNumeric(sMobileNumber.substr(0, 1))) {
            return false;
        }
    } else if (sMobileNumber.Length == 13) { //+447976831386
        if (sMobileNumber.substr(0, 1) != "+") {
            return false;
        }
    }

    return true;
}

function reg2MessageIsValid() {
    var required = false;

    var field = document.getElementById("message");
    if (!field) {
        required = true;
        field = document.getElementById("messager");
    }

    if (required) {
        if (trim(field.value).length == 0)
            return "Message is a required field";
    }
    
    return "";
}

function reg2Phone_AllIsValid() {
    var required = false;

    var dayphone = document.getElementById("dayphone");
    if (!dayphone) {
        required = true;
        dayphone = document.getElementById("dayphoner");
    }

    var eveningphone = document.getElementById("eveningphone");
    if (!eveningphone) {
        required = true;
        eveningphone = document.getElementById("eveningphoner");
    }

    var mobilephone = document.getElementById("mobilephone");
    if (!mobilephone) {
        required = true;
        mobilephone = document.getElementById("mobilephoner");
    }


    if (required) {
        if (trim(dayphone.value).length == 0 &&
            trim(eveningphone.value).length == 0 &&
            trim(mobilephone.value).length == 0)
            return "At least one phone number is required";
    }

    var dayErr = reg2Phone_DayIsValid(false);
    var eveningErr = reg2Phone_EveningIsValid(false);
    var mobileErr = reg2Phone_MobileIsValid(false);

    if (dayErr.length > 0)
        return dayErr;
    if (eveningErr.length > 0)
        return eveningErr;
    if (mobileErr.length > 0)
        return mobileErr;

    return "";
}

function reg2Phone_EveningIsValid() {
    reg2Phone_EveningIsValid(true);
}

function reg2Phone_EveningIsValid(considerRequired) {
    if (considerRequired == null)
        considerRequired = true;
    var required = false;

    var field = document.getElementById("eveningphone");
    if (!field) {
        required = true;
        field = document.getElementById("eveningphoner");
    }

    if (!considerRequired)
        required = false;

    if (required) {
        if (trim(field.value).length == 0)
            return "Evening Phone is a required field";
    }

    return "";
}

function reg2Phone_SingleSpecialIsValid() {
    var required = false;

    var field = document.getElementById("specialphone");
    if (!field) {
        required = true;
        field = document.getElementById("specialphoner");
    }

    if (required) {
        if (trim(field.value).length == 0)
            return "Telephone is a required field";
    }

    return "";
}

function reg2PasswordIsValid() {
    var required = false;

    var field = document.getElementById("Password1");
    if (!field) {
        required = true;
        field = document.getElementById("Password1r");
    }

    var field2 = document.getElementById("Password2");
    if (!field2) {
        field2 = document.getElementById("Password2r");
    }

    //both passwords match
    if (field.value != field2.value)
        return "Passwords do not match";

    //password is at least 6 chars long
    if (field.value.length < 6 && field.value.length > 0)
        return "Password must be at least 6 characters long";

    if (required) {



        //field is filled in
        if (field.value.length == 0)
            return "Password is a required field";
    }

    return "";
}
function reg2Name_SplitBoxIsValid() {

    var required = false;

    var title = document.getElementById("Name_SplitBox_Title");
    if (!title) {
        required = true;
        title = document.getElementById("Name_SplitBox_Titler");
    }

    var first = document.getElementById("Name_SplitBox_FirstName");
    if (!first) {
        required = true;
        first = document.getElementById("Name_SplitBox_FirstNamer");
    }

    var last = document.getElementById("Name_SplitBox_LastName");
    if (!last) {
        required = true;
        last = document.getElementById("Name_SplitBox_LastNamer");
    }

    if (required) {
        if (trim(title.value).length == 0 &&
        trim(first.value).length == 0 &&
        trim(last.value).length == 0)
            return "Name is required";
    }

     if (title.value == "") return "Title cannot be left blank";
     if (trim(first.value).length == 0)  return "You must enter your forename";
     if (trim(last.value).length == 0)   return "You must enter your surname";

    return "";
}


function reg2Address_FullIsValid() {

    var required = false;

    var postcode = document.getElementById("postcode");
    if (!postcode) {
        required = true;
        postcode = document.getElementById("postcoder");
    }

    var housenum = document.getElementById("housenum");
    if (!housenum) {
        required = true;
        housenum = document.getElementById("housenumr");
    }

    var street = document.getElementById("street");
    if (!street) {
        required = true;
        street = document.getElementById("streetr");
    }

    var locality = document.getElementById("locality");
    if (!locality) {
        required = true;
        locality = document.getElementById("localityr");
    }

    var towncity = document.getElementById("towncity");
    if (!towncity) {
        required = true;
        towncity = document.getElementById("towncityr");
    }

    var county = document.getElementById("county");
    if (!county) {
        required = true;
        county = document.getElementById("countyr");
    }

    var country = document.getElementById("country");
    if (!country) {
        required = true;
        country = document.getElementById("countryr");
    }


    if (trim(postcode.value).length == 0 &&
        trim(housenum.value).length == 0 &&
        trim(street.value).length == 0 &&
        trim(locality.value).length == 0 &&
        trim(towncity.value).length == 0 &&
        trim(county.value).length == 0 &&
        trim(country.value).length == 0) {
        if (required) {
            return "Address is required";
        } else {
            return "";
        }
    }
      

    //minimum to fill in is house name/num,street, and either postcode or county
   
    
    if (trim(postcode.value).length == 0 && trim(county.value).length == 0)
        return "Postcode cannot be left blank";

    if (trim(housenum.value).length == 0)
        return "House Name/Number cannot be left blank";

    if (trim(street.value).length == 0)
        return "Street name cannot be left blank";


    return "";
}

function reg2Address_PostcodeOnlyIsValid() {

    var required = false;

    var postcode = document.getElementById("postcode");
    if (!postcode) {
        required = true;
        postcode = document.getElementById("postcoder");
    }

    if (required) {
        if (trim(postcode.value).length == 0 )
            return "Postcode is required";
    }

    return "";
}




function reg2FlagLineInvalid(errorText, controlName) {

    for (var num = 0; num < controlName.length; num++) {

        var tickCross = document.getElementById(controlName[num] + 'TickCross');

        if (tickCross)
            tickCross.className = "Cross";

        var errorLabel = document.getElementById(controlName[num] + 'ErrorLabel');

        if (errorLabel) {
            errorLabel.innerHTML = errorText;
            errorLabel.className = "Shown";
        }

        var spanReq = document.getElementById(controlName[num] + 'Req');

        if (spanReq) {
            spanReq.className = "UnShown";
        }

        //alert("invalid");
    }
}



function reg2FlagLineValid(controlName) {

    for (var num = 0; num < controlName.length; num++) {




        var tickCross = document.getElementById(controlName[num] + 'TickCross');

        if (tickCross)
            tickCross.className = "Tick";

        var errorLabel = document.getElementById(controlName[num] + 'ErrorLabel');

        if (errorLabel) {
            errorLabel.innerHTML = '';
            errorLabel.className = "UnShown";
        }

        var spanReq = document.getElementById(controlName[num] + 'Req');

        if (spanReq) {
            spanReq.className = "UnShown";
        }

    }

}

function reg2ShowBackForm(msgBoxNum) {

    var showBack = document.getElementById("ShowBackInput");

    switch (msgBoxNum) {
        case MsgBoxYes():
            showBack.value = "true";
            break;
        default:
            showBack.value = "false";
            break;
    }
    
    var frm = document.getElementById("Reg2Form");
    frm.submit();

}

//sends a notification to the server when a validation fails
function reg2NotifyInvalidation() {
    if (!reg2InvalidationPath || reg2InvalidationPath.length == 0)
        return;

    if (!reg2Xml) {
        if (window.XMLHttpRequest) {
            reg2Xml = new XMLHttpRequest();
        } else if (window.ActiveXObject) {
        reg2Xml = new ActiveXObject("Microsoft.XMLHTTP");
        }
    } else {
        reg2Xml.abort();
    }

    reg2Xml.open("GET", reg2InvalidationPath, true); //
    //reg2Xml.onreadystatechange = processMapXml;
    reg2Xml.send(null);
}