﻿var FORM_NAME = '#leadform';
var REQUIRED_CLASS = '.lfreq';
var ERROR_DIV = '#leadform-error';
var dnFormValidationOptions = null;
var objValidations;
var _feedbackOrientation = 'right';

/**
* Copyright (c) 2009 Sergiy Kovalchuk (serg472@gmail.com)
* 
* Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
* and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
*  
* Following code is based on Element.mask() implementation from ExtJS framework (http://extjs.com/)
*
*/
(function (a) { a.fn.mask = function (c, b) { a(this).each(function () { if (b !== undefined && b > 0) { var d = a(this); d.data("_mask_timeout", setTimeout(function () { a.maskElement(d, c) }, b)) } else { a.maskElement(a(this), c) } }) }; a.fn.unmask = function () { a(this).each(function () { a.unmaskElement(a(this)) }) }; a.fn.isMasked = function () { return this.hasClass("masked") }; a.maskElement = function (d, c) { if (d.data("_mask_timeout") !== undefined) { clearTimeout(d.data("_mask_timeout")); d.removeData("_mask_timeout") } if (d.isMasked()) { a.unmaskElement(d) } if (d.css("position") == "static") { d.addClass("masked-relative") } d.addClass("masked"); var e = a('<div class="loadmask"></div>'); if (navigator.userAgent.toLowerCase().indexOf("msie") > -1) { e.height(d.height() + parseInt(d.css("padding-top")) + parseInt(d.css("padding-bottom"))); e.width(d.width() + parseInt(d.css("padding-left")) + parseInt(d.css("padding-right"))) } if (navigator.userAgent.toLowerCase().indexOf("msie 6") > -1) { d.find("select").addClass("masked-hidden") } d.append(e); if (c !== undefined) { var b = a('<div class="loadmask-msg" style="display:none;"></div>'); b.append("<div>" + c + "</div>"); d.append(b); b.css("top", Math.round(d.height() / 2 - (b.height() - parseInt(b.css("padding-top")) - parseInt(b.css("padding-bottom"))) / 2) + "px"); b.css("left", Math.round(d.width() / 2 - (b.width() - parseInt(b.css("padding-left")) - parseInt(b.css("padding-right"))) / 2) + "px"); b.show() } }; a.unmaskElement = function (b) { if (b.data("_mask_timeout") !== undefined) { clearTimeout(b.data("_mask_timeout")); b.removeData("_mask_timeout") } b.find(".loadmask-msg,.loadmask").remove(); b.removeClass("masked"); b.removeClass("masked-relative"); b.find("select").removeClass("masked-hidden") } })(jQuery);

function validateSubmitForm() {
    if (null == $(FORM_NAME)) { alert('Cannot locate the form'); return false; }
    var requiredItems = $(REQUIRED_CLASS);
    clearLeadFormError();
    var isValid = true;

    if (requiredItems.length > 0) {
        for (var x = 0; x < requiredItems.length; x++) {
            resetFormField(requiredItems[x]);
            if (null == requiredItems[x].value || '' == requiredItems[x].value) {
                setFormFieldError(requiredItems[x]);
                isValid = false;
            }
        }
    }

    if (!isValid) { alert('You must enter all required fields'); }
    return isValid;
}

function resetFormField(field) { field.style.backgroundColor = '#fff'; field.style.color = '#333'; }
function setFormFieldError(field) { field.style.backgroundColor = '#F0E68C'; field.style.color = '#fff'; }
function clearLeadFormError() { if ($(ERROR_DIV) != null) { $(ERROR_DIV).html(''); } }
function setLeadFormError(errorString) { if ($(ERROR_DIV) != null) { $(ERROR_DIV).html('<p>' + errorString + '</p>'); } }
function submitDownloadForm(frmid) { if (document.getElementById(frmid)) { document.getElementById(frmid).submit(); } }

function DNForms() { }

DNForms.prototype.stripNonNumerics = function (inputStr) {
    var strLen = inputStr.length;

    if (0 == strLen) { return inputStr; }

    var newStr = '';
    for (var x = 0; x < strLen; x++) {
        var currentChar = inputStr.charCodeAt(x);
        if (currentChar >= 48 && currentChar <= 59) { newStr += inputStr.charAt(x); }
    }

    return newStr;
}

DNForms.prototype.setFormFieldValid = function (fieldID) {
    $('#' + fieldID).css('border', '1px solid #008000');
    if ($('#' + fieldID + "-val") != null) { $('#' + fieldID + "-val").remove(); }
    var newImg = document.createElement("img");
    newImg.setAttribute('id', fieldID + "-val");
    newImg.setAttribute('src', '/content/images/valid.png');
    newImg.setAttribute('style', 'float: right; margin: 1px 1px 0 4px;');
    if ($('#' + fieldID) != null) { $('#' + fieldID).parent().append(newImg); }
}

DNForms.prototype.setFormFieldInvalid = function (fieldID, validationText) {
    $('#' + fieldID).css('border', '1px solid #FF0000');
    if ($('#' + fieldID + "-val") != null) { $('#' + fieldID + "-val").remove(); }
    var newImg = document.createElement("img");
    newImg.setAttribute('id', fieldID + "-val");
    newImg.setAttribute('src', '/content/images/invalid.png');
    newImg.setAttribute('style', 'float: right; margin: 1px 1px 0 4px;');
    if ($('#' + fieldID) != null) { $('#' + fieldID).parent().append(newImg); }
}

DNForms.prototype.validateAllFormValues = function () {
    myself = this;
    var formIsValid = true;
    $('.lfreq').each(function () {
        var fieldID = $(this).attr('id');
        var fieldValid = myself.validateFormValue(fieldID);
        if (formIsValid && !fieldValid) { formIsValid = false; }
    });

    return formIsValid;
}

DNForms.prototype.validatePanelFormValues = function (pnum) {
    myself = this;
    var formIsValid = true;
    $('#frmpanel' + pnum + ' .lfreq').each(function () {
        var fieldID = $(this).attr('id');
        var fieldValid = myself.validateFormValue(fieldID);
        if (formIsValid && !fieldValid) { formIsValid = false; }
    });

    return formIsValid;
}

DNForms.prototype.validateFormValue = function (fieldID) {
    var isValid = true;
    if ($('#' + fieldID)) {
        var fieldValue = $('#' + fieldID).val();
        var className = $('#' + fieldID).attr('class');
        var valType = '';
        var validationText = 'Required';
        var classArray = className.split(' ');

        if ('' == fieldValue || 0 == fieldValue.length) {
            isValid = false;
        } else {

            if (classArray.length > 0) {
                for (var x = 0; x < classArray.length; x++) {

                    valType = classArray[x];

                    switch (valType) {

                        case 'zip':
                            var zipReg = /(^\d{5}(-\d{4})?$)/;
                            isValid = zipReg.test(fieldValue);
                            validationText = 'Invalid Zip';
                            break;

                        case 'email':
                            var emailReg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
                            isValid = emailReg.test(fieldValue);
                            validationText = 'Invalid Email';
                            break;

                        case "tel":
                            fieldValue = this.stripNonNumerics(fieldValue);
                            $('#' + fieldID).val(fieldValue);
                            if (fieldValue.length < 10) { isValid = false; }
                            validationText = 'Invalid Tel';
                            break;

                        default:
                            if ((fieldValue.length > 4 && fieldValue.indexOf("www.") != -1) || (fieldValue.length > 7 && fieldValue.indexOf("http://") != -1)) {
                                isValid = false;
                                validationText = 'Invalid Entry';
                            }
                            break;
                    }

                }
            }
        }
    }

    if (!isValid) {
        this.setFormFieldInvalid(fieldID, validationText);
    } else {
        this.setFormFieldValid(fieldID);
    }

    return isValid;
}

DNForms.prototype.getTotalPages = function () { if ($('#dn-submit-form')) { return $('.form-page').length; } else { return 0; } }
DNForms.prototype.getBarIncrements = function () { return 100 / this.getTotalPages(); }

DNForms.prototype.showFormPage = function (currentPage, destPage, doVal) {
    var okToPage = true;

    if (true == doVal) { okToPage = this.validatePanelFormValues(currentPage); }

    if (okToPage) {
        $('.dnfrmc .panel').each(function () { $(this).css('display', 'none'); });       // hide all pages
        if ($('#frmpanel' + destPage)) { $('#frmpanel' + destPage).css('display', 'block'); }      // show current page
    }
}

DNForms.prototype.initNavLinks = function () {
    myself = this;
    var totalFormPages = myself.getTotalPages();
    var barIncrements = myself.getBarIncrements();

    $('.dnformc a.next').each(function () {
        var divPageID = $(this).parent().parent().attr('id');
        var pageNum = divPageID.substring(1);
        var nextPage = parseInt(pageNum) + 1;
        if (nextPage > totalFormPages) { nextPage = totalFormPages; }
        $(this).click(function () { myself.showFormPage(pageNum, nextPage, true); });
    });

    $('.dnformc a.prev').each(function () {
        var divPageID = $(this).parent().parent().attr('id');
        var pageNum = divPageID.substring(1);
        var prevPage = parseInt(pageNum) - 1;
        if (0 == prevPage) { prevPage = 1; }
        $(this).click(function () { myself.showFormPage(pageNum, prevPage, true); });
    });
}

DNForms.prototype.initRequiredFields = function () {
    myself = this;
    $('.lfreq').each(function () {
        var fieldID = $(this).attr('id');
        $(this).blur(function () {
            myself.validateFormValue(fieldID);
        });
    });
}

DNForms.prototype.initParagraphFields = function () {
    $('.ul').each(function () {
        $(this).focus(function () {
            if ('<your name>' == $(this).val() || '<company name>' == $(this).val()) {
                $(this).val('');
                $(this).addClass('ans');
            }
        });
    });
}

DNForms.prototype.validatePage = function (pageNum) {
    if (null == dnFormValidationOptions) { return true; }
    if (null == dnFormValidationOptions.questions) { return true; }

    var numQuestionValidations = dnFormValidationOptions.questions.length;

    for (var x = 0; x < numQuestionValidations; x++) {

        if (pageNum == dnFormValidationOptions.questions[x].page) {
            var qType = dnFormValidationOptions.questions[x].type;
            var qID = dnFormValidationOptions.questions[x].questionid;
            var valText = dnFormValidationOptions.questions[x].text;
            var questionName = 'question' + qID;

            if ($('#question' + qID)) {
                switch (qType) {
                    case 'r':
                        if (null == $('input[name=' + questionName + ']:checked').val()) {
                            alert(valText);
                            return false;
                        }
                        break;

                    case 'd':
                        // TBD
                        break;

                    case 't':
                        if ('' == $('#question' + qID).val()) {
                            alert(valText);
                            return false;
                        }
                        break;
                }
            }
        }
    }

    return true;
}

DNForms.prototype.initFormPages = function () {
    if ($(FORM_NAME)) {
        var totalPages = this.getTotalPages();
        if (totalPages > 0) {
            this.showFormPage(1, 1, false);
            this.initNavLinks();
        }
    }
}

DNForms.prototype.doFormSubmission = function () {
    if (this.validateAllFormValues()) {
        showLoadingMask("Processing");
        return true;
        //var formData = $('#leadform').serialize();

        /*
        $.ajax({
        url: "/DoFormSubmission",
        type: "POST",
        data: formData,
        success: function (data) {
        var respCodes = data.split('|');

        if (respCodes.length > 0 && respCodes[0] == 'success') {
        window.location = respCodes[1];
        }
        else {
        hideLoadingMask();
        if (respCodes.length > 1) {
        $('#leadform-error').html('<p>' + respCodes[1] + '</p>');
        }
        else {
        $('#leadform-error').html('<p>There was a problem during the form submission process. Please check your answers and try again.</p>');
        }
        }
        },
        error: function (request, textStatus, errorThrown) {
        hideLoadingMask();
        $('#leadform-error').html(textStatus);
        }
        });
        */
    }

    return false;
}

function showLoadingMask(text) { if ($('#dnfrmmask')) { if ('' == text) { text = "Loading...."; } $('#dnfrmmask').mask(text, 200); } }
function hideLoadingMask(text) { if ($('#dnfrmmask')) { $('#dnfrmmask').unmask(); } }

var _dnForms = new DNForms();
$(document).ready(function () { _dnForms.initFormPages(); });

