var _txtFirstName = null;
var _txtLastName = null;
var _txtCompanyName = null;
var _txtPhone = null;
var _txtEmailAddress = null;
var _btnSend = null;
var _frmContacts = null;
var _fieldErrorCssClass = "errorField";
var _rdPolicy = null;

function page_initialize() {
    if (_btnSend) {
        Sys.UI.DomEvent.addHandler(_btnSend, "click", _btnSend_click);
    }

    if (_txtFirstName) {
        Sys.UI.DomEvent.addHandler(_txtFirstName, "focus", _fld_focus);
        Sys.UI.DomEvent.addHandler(_txtFirstName, "blur", _fld_blur);
        Sys.UI.DomEvent.addHandler(_txtFirstName, "keypress", _fld_keypress);
    }

    if (_txtLastName) {
        Sys.UI.DomEvent.addHandler(_txtLastName, "focus", _fld_focus);
        Sys.UI.DomEvent.addHandler(_txtLastName, "blur", _fld_blur);
        Sys.UI.DomEvent.addHandler(_txtLastName, "keypress", _fld_keypress);
    }

    if (_txtCompanyName) {
        Sys.UI.DomEvent.addHandler(_txtCompanyName, "focus", _fld_focus);
        Sys.UI.DomEvent.addHandler(_txtCompanyName, "blur", _fld_blur);
        Sys.UI.DomEvent.addHandler(_txtCompanyName, "keypress", _fld_keypress);
    }

    if (_txtPhone) {
        Sys.UI.DomEvent.addHandler(_txtPhone, "focus", _fld_focus);
        Sys.UI.DomEvent.addHandler(_txtPhone, "blur", _fld_blur);
        Sys.UI.DomEvent.addHandler(_txtPhone, "keypress", _fld_keypress);
    }

    if (_txtEmailAddress) {
        Sys.UI.DomEvent.addHandler(_txtEmailAddress, "focus", _fld_focus);
        Sys.UI.DomEvent.addHandler(_txtEmailAddress, "blur", _fld_blur);
        Sys.UI.DomEvent.addHandler(_txtEmailAddress, "keypress", _fld_keypress);
    }

    if (_txtCaptcha) {
        Sys.UI.DomEvent.addHandler(_txtCaptcha, "focus", _fld_focus);
        Sys.UI.DomEvent.addHandler(_txtCaptcha, "blur", _fld_blur);
        Sys.UI.DomEvent.addHandler(_txtCaptcha, "keypress", _fld_keypress);
    }
    
    if (_rdPolicy) {
        Sys.UI.DomEvent.addHandler(_rdPolicy, "change", _fld_blur);
    }
}

function _fld_keypress(e) {
    var code = e.keyCode ? e.keyCode : e.charCode;
    var isValid = false;

    if (code == Sys.UI.Key.enter) {
        if (_frmContacts) {
            isValid = validate(_frmContacts);

            if (isValid && _frmContacts.submit) {
                _frmContacts.submit();
            }
        }
    }
}

function _fld_focus(e) {
    if (e.target) {
        var element = $get(e.target.id);

        if (element) {
            Sys.UI.DomElement.removeCssClass(element, _fieldErrorCssClass);
        }
    }
}

function _fld_blur(e) {
    validateField(e.target);
}

function _btnSend_click(e) {
    if (!_frmContacts) {
        return cancelBubbling(e);
    }

    var isValid = validate(_frmContacts);

    if (isValid) {
        return true;
    }
    else {
        return cancelBubbling(e);
    }
}

function cancelBubbling(e) {
    if (e) {
        if (e.preventDefault) {
            e.preventDefault();
        }
        else {
            e.cancelBubble = true;
            e.returnValue = false;
        }
    }

    return false;
}

function validateField(element) {
    if (!element) {
        return true;
    }

    var result = true;
    var attribute = element.getAttribute("class");

    if (attribute) {
        var names = attribute.split(' ');

        if (Array.indexOf(names, 'required') != -1) {
            if (!checkRequired(element)) {
                result = false;
            }
        }

        if (result && (Array.indexOf(names, 'email') != -1)) {
            if (!checkEmail(element)) {
                result = false;
            }
        }

        if (result && (Array.indexOf(names, 'compare') != -1)) {
            var element2 = $get(names[Array.indexOf(names, 'compare') + 1]);

            if (!element2 || !compareFields(element, element2)) {
                result = false;
            }
        }

        if (result && (Array.indexOf(names, 'regex') != -1)) {
            if (!checkRegex(element, names[Array.indexOf(names, 'regex') + 1])) {
                result = false;
            }
        }
    }

    var id = element.id + "_error";
    var errorElement = document.getElementById(id);

    if (errorElement) {
        errorElement.style.display = result ? 'none' : 'block';
    }

    if (!result) {
        Sys.UI.DomElement.addCssClass(element, _fieldErrorCssClass);
    }
    else {
        Sys.UI.DomElement.removeCssClass(element, _fieldErrorCssClass);
    }
    
    return result;
}

function validate(frm) {
    if (!frm) {
        return false;
    }

    var errorCount = 0;
    var elements = frm.getElementsByTagName('input');

    for (var i = 0; i < elements.length; i++) {
        if (!validateField(elements[i])) {
            errorCount++;
        }
    }

    return (errorCount > 0) ? false : true;
}

function checkRequired(element) {
    if (!element) {
        return false;
    }

    var attribute = element.getAttribute("type");

    if (attribute) {
        if (attribute == 'checkbox') {
            return element.checked;
        }
        else if (attribute == 'radio') {
            return element.checked;
        }
        else if ((attribute == 'text') || (attribute == 'password')) {
            return (element.value != '') ? true : false;
        }
    }

    return false;
}

function checkEmail(element) {
    if (!element) {
        return false;
    }

    var attribute = element.getAttribute("type");

    if (attribute) {
        if (attribute == 'text') {
            return /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(element.value);
        }
    }

    return false;
}

function compareFields(element1, element2) {
    if (!element1 || !element2) {
        return false;
    }

    var attribute1 = element1.getAttribute("type");
    var attribute2 = element2.getAttribute("type");

    if (attribute1 && attribute2) {
        if (((attribute1 == 'text') || (attribute1 == 'password')) &&
            ((attribute2 == 'text') || (attribute2 == 'password'))) {
            return (element1.value == element2.value) ? true : false;
        }
    }

    return false;
}

function checkRegex(element, pattern) {
    if (!element) {
        return false;
    }

    var attribute = element.getAttribute("type");

    if (attribute) {
        if ((attribute == 'text') || (attribute == 'password')) {
            return element.value.match(new RegExp(pattern, "i"));
        }
    }

    return false;
}
