﻿if (typeof(Phizzpop) == 'undefined') Phizzpop = {};

Phizzpop.Challenge = new function() {
    setEvents(false);

    var _ids = ['FirstName', 'LastName', 'Organization', 'Address1', 'City', 'Zip', 'Telephone', 'Email'];
    var _hideClassName = 'validationhide';
    var _showClassName = 'validationshow';
    var _submitButtonId;
    var _formId;

    this.initialize = initialize;
    function initialize(submitButtonId, formId) {
        _submitButtonId = submitButtonId;
        _formId = formId;
    }

    function onload() {
        var submitButton = document.getElementById(_submitButtonId);
        if (!submitButton) return;

        Phizzpop.setEvent(submitButton, 'onclick', submit, false);
    }

    function dispose() {
        setEvents(true);

        var submitButton = document.getElementById(_submitButtonId);
        if (submitButton) Phizzpop.setEvent(submitButton, 'onclick', submit, true);

        _ids.length = 0;
        _ids = _hideClassName = _showClassName = _submitButtonId = submitButton = _formId = null;
    }

    function setEvents(disposing) {
        Phizzpop.setEvent(window, 'onunload', dispose, disposing);
        Phizzpop.setEvent(window, 'onload', onload, disposing);
    }

    function submit() {
        if (!validate()) return;

        var form = document.forms[_formId];
        if (!form) return;

        form.submit();
    }

    function validate() {
        var inputInvalid = false;
        var emailInvalid = false;

        try {
            for (var i = 0, id; id = _ids[i]; i++) {
                var currentElement = document.getElementById(id);
                var messageElement = document.getElementById(String.format('{0}RequiredMessage', id));

                messageElement.className = currentElement && currentElement.value.toString().trim().length == 0 ? _showClassName : _hideClassName;

                if (!inputInvalid) inputInvalid = messageElement.className == _showClassName;
                if (id == 'Email') emailInvalid = messageElement.className == _showClassName;
            }

            var stateList = document.getElementById('State');
            var stateMessage = document.getElementById('StateRequiredMessage');

            if (stateList) {
                var state = stateList.options[stateList.selectedIndex].value;

                stateMessage.className = state == '-1' ? _showClassName : _hideClassName;
            }

            var email = document.getElementById('Email').value.toString().trim();
            var formatMessage = document.getElementById('EmailFormatMessage');
            var pattern = /^(([^<>()[\]\\.,;:\s@\""]+(\.[^<>()[\]\\.,;:\s@\""]+)*)|(\"".+\""))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;

            formatMessage.className = !emailInvalid && !pattern.test(email) ? _showClassName : _hideClassName;

            var urlElement = document.getElementById('Url');
            var pdfElement = document.getElementById('Pdf');
            var urlMessage = document.getElementById('UrlRequiredMessage');
            var pdfMessage = document.getElementById('PdfOnlyMessage');
            var pdfFile = pdfElement ? pdfElement.value.toString().trim() : '';
            var hasUrl = urlElement ? urlElement.value.toString().trim().length : 0;
            var hasPdf = pdfFile.length;

            urlMessage.className = (hasUrl + hasPdf == 0) ? _showClassName : _hideClassName;
            pdfMessage.className = hasPdf == 0 || pdfFile.substr(pdfFile.length - 3, 3).toLowerCase() == 'pdf' ? _hideClassName : _showClassName;

            return !(inputInvalid || emailInvalid || formatMessage.className == _showClassName || stateMessage.className == _showClassName || urlMessage.className == _showClassName || pdfMessage.className == _showClassName);
        }
        catch (e) {
            window.status = 'a validation error occurred';

            return false;
        }
    }
}