﻿// xformmodifier class
XFormModifier = function(xFormParent, requiredInputsClassSuffix, validatorSymbol, validatorClass,
 enableWatermark, arladeSpecific) {
    this.xFormParent = xFormParent;
    this.requiredInputsClassSuffix = requiredInputsClassSuffix;
    this.validatorSymbol = validatorSymbol;
    this.validatorClass = validatorClass;
    this.enableWatermark = enableWatermark;
    this.arladeSpecific = arladeSpecific;

    this.SetValidationAndStyles = function() {
        var validatorQuery = "#" + this.xFormParent + " span";
        // hide all validators for given container
        var allValidators = $(validatorQuery);
        allValidators.attr("display", "None");
        //append class name suffix for all required fields
        //modify input control's class name only for the first validator per field
        for (var index = 0; index < allValidators.size(); index++) {
            if (allValidators[index].controltovalidate) {
                if (index == 0 ||
                    (index > 0 && (allValidators[index].controltovalidate != allValidators[index - 1].controltovalidate))) {
                    var controlToValidateQuery = '#' + allValidators[index].controltovalidate;
                    var controlClass = $(controlToValidateQuery).attr('className');
                    var validatedControl = $(controlToValidateQuery);
                    allValidators[index].errormessage = validatedControl.attr('title');
                    
                    if (this.arladeSpecific) {
                        if (validatedControl.attr('className') == 'input_337' ||
                            validatedControl.attr('className') == 'captcha_input_contact' ||
                            validatedControl.attr('className') == 'captcha_input_content') {
                            
                        }
                        else {
                            if (controlClass != "" && validatedControl.attr('type') == 'text') {
                                validatedControl.attr('className', controlClass + this.requiredInputsClassSuffix);
                                validatedControl.after('<span class="' + this.validatorClass + '">' + this.validatorSymbol + '</span>');
                            }
                        }
                    }
                    else {
                        if (controlClass != "" && controlClass != "captcha_input_contact" && controlClass != "captcha_input_content" && validatedControl.attr('type') == 'text') {
                            validatedControl.attr('className', controlClass + this.requiredInputsClassSuffix);
                            validatedControl.after('<span class="' + this.validatorClass + '">' + this.validatorSymbol + '</span>');
                        }
                    }

                }
                else if (allValidators[index].controltovalidate == allValidators[index - 1].controltovalidate) {
                    allValidators[index].errormessage = allValidators[index - 1].errormessage;
                }
            }
        }
        //only for arlade xform
        $('.w-45').parent().css('width', '10%').attr('width', '10%');
        $('.w-55').parent().css('width', '80%').attr('width', '80%');
    };

    this.ModifyXFormFields = function() {
        this.SetValidationAndStyles();
        this.SetRadioButtons();
        //add watermark functionality for xforms
        if (this.enableWatermark) {
            this.SetWatermark();
        }
        this.ModifyInputClicks();
    };

    // can be used only for linkbuttons
    // sets href javascript to hide and show watermark before and after submitting the form
    // disables all inputs
    this.ModifyInputClicks = function() {
        var allLinks = $("#" + this.xFormParent + " a");
        for (var index = 0; index < allLinks.size(); index++) {
            var showWatermarkTextHandler = this.ShowWatermarkText;
            var hrefScript = allLinks[index].href;
            if (hrefScript.indexOf("javascript:") > -1) {
                hrefScript = hrefScript.replace("javascript:", "");
                hrefScript = 'javascript: ShowWatermarkText(false, "' + this.xFormParent + '"); '
                    + hrefScript + '; '
                    + 'DisableAllInputsAndSelects(true, "' + this.xFormParent + '"); '
                    + 'ShowWatermarkText(true, "' + this.xFormParent + '"); ';
                allLinks[index].href = hrefScript;
            }
        }
    }

    this.SetWatermark = function() {
        var allInputsQuery = "#" + this.xFormParent + " input:not([type!=text])";
        $(allInputsQuery).each(function() { if (this.className != 'input_337') if(this.value.trim() == "") this.value = this.title; })
                    .focus(function() { if (this.value == this.title && this.className != 'input_337') this.value = ""; })
                    .blur(function() { if (this.value.trim() == "" && this.className != 'input_337') this.value = this.title; });
    }

    this.SetRadioButtons = function() {
        var allFieldsetsQuery = "#" + this.xFormParent + " fieldset input[type=radio]";
        var allFieldsSets = $(allFieldsetsQuery)
        if (allFieldsSets.size() > 0) {
            allFieldsSets[0].checked = true;
        }
    }
};

//register xform which has to be modified
function RegisterXFormFieldsModifier(xformParent, requiredInputsClassSuffix, validatorSymbol,
    validatorClass, enableWatermark, arladeSpecific) {
    if (typeof (registeredXFormModifiers) == 'undefined') {
        registeredXFormModifiers = new Array();
    }
    registeredXFormModifiers.push(new XFormModifier(xformParent, requiredInputsClassSuffix, validatorSymbol, validatorClass,
     enableWatermark, arladeSpecific));
}

function ShowWatermarkText(show, xFormParent) {
    var allInputsQuery = "#" + xFormParent + " input:not([type!=text])";
    if (show) {
        $(allInputsQuery).each(function() {
            if (this.value.trim() == "" && $(this).attr('class') != 'input_337') {
                this.value = this.title;
            }
        });
    }
    else {
        $(allInputsQuery).each(function() {
            if (this.value == this.title && $(this).attr('class') != 'input_337') this.value = '';
        })
    }
}

function DisableAllInputsAndSelects(checkIsValid, xFormParent) {
        var isValid = true;
        if (checkIsValid) {
            isValid = Page_IsValid;
        }

        if (isValid) {
            var inputQuery = "#" + xFormParent + " input";
            var selectQuery = "#" + xFormParent + " select";
            var textareaQuery = "#" + xFormParent + " textarea";
            var linkQuery = "#" + xFormParent + " a";
            $(inputQuery).each(function() { this.disabled = true });
            $(selectQuery).each(function() { this.disabled = true });
            $(textareaQuery).each(function() { this.disabled = true });
            $(linkQuery).each(function() { this.disabled = true });
        }
}

// if jquery is loaded
if (typeof jQuery != 'undefined') {
    $(document).ready(function() {
        if (typeof registeredXFormModifiers != 'undefined') {
            for (var index = 0; index < registeredXFormModifiers.length; index++) {
                registeredXFormModifiers[index].ModifyXFormFields();
            }
        }
    });
}