﻿function jq(myid) {
    return '#' + myid.replace(/(:|\.)/g, '\\$1');
}

function easyOutput(data, textStatus, jqXHR, tempArgs) {
    var position = tempArgs.position || 'innerReplace';
    var elementSelector = tempArgs.targetElementExpression || '#' + tempArgs.targetElementId;
    
    //console.log('easyOutput' + data + ':' + textStatus);

    if (textStatus == 'success') {
        switch (position) {
            case 'innerFirst':
                $(elementSelector).prepend(data);
                break;
            case 'innerReplace':
                $(elementSelector).html(data);
                break;
            case 'innerLast':
                $(elementSelector).append(data);
                break;
        }
    }
}

function showajaxerror(jqXHR, textStatus, errorThrown) {
    //console.log('error:'+textStatus);
    if (!errorThrown == '')
        induBIS.ShowStatusErrorMessage(jqXHR, textStatus);
}

function ValidateMailForm(formElement, errorLabelShowFunction, errorLabelHideFunction) {
    var validationFailed = false;

    var showErrorLabel = function (inputField, fieldName) {
        var el = formElement.find('#' + inputField.attr('id') + fieldName);
        if (typeof errorLabelShowFunction == 'function') {
            errorLabelShowFunction(el);
        } else {
            el.show();
        }
    };
    var hideErrorLabel = function (inputField, fieldName) {
        var el = formElement.find('#' + inputField.attr('id') + fieldName);
        if (typeof errorLabelHideFunction == 'function') {
            errorLabelHideFunction(el);
        } else {
            el.hide();
        }
    };

    formElement.find('.formInputRequired').each(function () {
        if ($(this).val().length <= 0) {
            validationFailed = true;
            showErrorLabel($(this), 'RequiredFieldError');
        } else {
            hideErrorLabel($(this), 'RequiredFieldError');
        }
    });

    if (!validationFailed) {
        var emailPattern = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
        formElement.find('.formInputRegExpMail').each(function () {
            if (!emailPattern.test($(this).val())) {
                validationFailed = true;
                showErrorLabel($(this), 'RegularExpressionError');
            } else {
                hideErrorLabel($(this), 'RegularExpressionError');
            }
        });
    }

    return (validationFailed == false);
}

/*Suche*/
function StartSearch(searchButton, callback) {
    var urlTemp = currentURL + '?SearchModule=true&ContentDataId=4a2108f3-494a-4ca5-966e-816a1e34c75f&SearchReset=true';
    var phrases = $('#siteSearch').val();
    var searchCounter = 0;
    var firstResult = true;
    var decrementSearchCounter = function () {
        searchCounter--;
        if (searchCounter == 0) {
            // Alle Suchanfragen beendet
            if (typeof callback == 'function') {
                callback(($('#siteSearchResults .inner').html() == ''));
            }
        }
    }
    var SearchRequest = function (searchParameters) {
        var urlTemp = currentURL + '?SearchModule=true&ContentDataId=4a2108f3-494a-4ca5-966e-816a1e34c75f&ModuleStrongName=' + searchParameters.ModuleStrongName + '&SearchContentDataId=' + searchParameters.SearchContentDataId + '&debug_xml=' + debugModeXml;
        searchCounter++;
        $.ajax({
            type: 'POST',
            dataType: 'html',
            url: urlTemp,
            data: searchParameters.Parameter,
            success: function (data, textStatus, jqXHR) {
                if ($(data).children('div').length > 0) {
                    if (firstResult) {
                        // Erstes Ergebnis - Box anzeigen
                        if (!$("#siteSearchResults").is(':visible')) {
                            $("#siteSearchResults").fadeIn(500);
                        }
                        if (!$("#siteSearchResults .inner").is(':visible')) {
                            $("#siteSearchResults .controls").trigger("click");
                        }
                        firstResult = false;
                    }
                    var moduleStrongName = $(data).children('div').data('options').ModuleStrongName;
                    if (moduleStrongName != '') {
                        var filter = '#siteSearchResults .' + moduleStrongName;
                        var test = $(filter);
                        var dataElement = $(data);

                        if (test.length > 0) {
                            test.find('ul').append(dataElement.find('li').hide().fadeIn(500));
                            test.find('li:nth-child(2n)').addClass('second');
                        }
                        else {
                            $('#siteSearchResults .inner').append(dataElement.hide().fadeIn(500));
                            dataElement.find('li:nth-child(2n)').addClass('second');
                        }
                    }
                }
                decrementSearchCounter();
            },
            error: function (jqXHR, textStatus, errorThrown) {
                showajaxerror(jqXHR, textStatus, errorThrown);
                decrementSearchCounter();
            },
            headers: { 'X-redcms-ajax': true }
        });
    }

    if (phrases.trim() == '') return;
    $('#siteSearchResults .inner').html('');

    $.ajax({
        type: 'GET',
        url: urlTemp,
        dataType: 'HTML',
        success: function (data, textStatus, jqXHR) {
            searchReset = jqXHR.getResponseHeader('x-redcms-SearchReset');
            if (searchReset == 1) {
                /*Suche in den Seiten:*/
                urlTemp = currentURL + '?SearchModule=true&ContentDataId=4a2108f3-494a-4ca5-966e-816a1e34c75f&ModuleStrongName=redCMS_Main2&SearchContentDataId=DE9022FC-97A5-44A0-ACB4-8F4A47C64468' + '&debug_xml=' + debugModeXml;
                var searchParameters = {
                    'ModuleStrongName': 'redCMS_Main2',
                    'SearchContentDataId': 'de9022fc-97a5-44a0-acb4-8f4a47c64468',
                    'Parameter': { 'Phrases': phrases, 'pageId': '', 'pageURL': '', 'CMSPageId': pageRootId }
                };
                SearchRequest(searchParameters);
                $.each(searchButton.data("options").pages, function (index, value) {
                    $.each(value.modules, function (moduleIndex, moduleValue) {
                        var moduleSearchParameters = moduleValue;
                        moduleSearchParameters.Parameter.Phrases = phrases;
                        moduleSearchParameters.Parameter.PageId = value.pageId;
                        moduleSearchParameters.Parameter.PageURL = value.pageURL;
                        SearchRequest(moduleSearchParameters);
                    });
                });
            } else {
                return;
            }
        },
        error: function (jqXHR, textStatus, errorThrown) {
            showajaxerror(jqXHR, textStatus, errorThrown);
            if (typeof callback == 'function') {
                callback(true);
            }
        },
        headers: { 'X-redcms-ajax': true }
    });
}

function ClearSearchResults() {
    var urlTemp = currentURL + '?SearchModule=true&ContentDataId=4a2108f3-494a-4ca5-966e-816a1e34c75f&SearchReset=true';
    $("#SearchBlock .toggleSearch").hide();
    $('#siteSearchResults .inner').html('');
    $.ajax({
        type: 'GET',
        url: urlTemp,
        success: function (data, textStatus, jqXHR) {
            searchReset = jqXHR.getResponseHeader('x-redcms-SearchReset');
            if (searchReset == 1) {
                
            }
        },
        error: function (jqXHR, textStatus, errorThrown) {
            showajaxerror(jqXHR, textStatus, errorThrown);
        },
        headers: { 'X-redcms-ajax': true }
    });
}

function SendMailForm(formElement, eventHandlerSuccess, eventHandlerError) {
    var contactId = formElement.find('.formInputRecipientId').val();
    var contentDataId = formElement.find('.formInputContentDataId').val();
    var emailSubject = formElement.find('.formInputEmailSubject').val();
    var emailReplyTo = $('#MailField-' + contentDataId).val();
    var urlTemp = currentURL + '?OutputFunctionName=EMailToContactKey&contentDataId=' + contentDataId + '&debug_xml=' + debugModeXml;

    var sendMail = function (emailKey) {
        var emailBody = '';
        formElement.find('.formInput').each(function () {
            emailBody += formElement.find('label[for="' + $(this).attr('id') + '"]').html();
            emailBody += ': ';
            emailBody += $(this).val();
            emailBody += '\n';
        });
        var dataTemp = {};
        dataTemp[contentDataId + ':EmailBody'] = emailBody;
        dataTemp[contentDataId + ':EmailRecipient'] = contactId;
        dataTemp[contentDataId + ':EmailKey'] = emailKey;
        dataTemp[contentDataId + ':EmailSubject'] = emailSubject;
        dataTemp[contentDataId + ':EmailReplyTo'] = emailReplyTo;
        urlTemp = currentURL + '?OutputFunctionName=EMailToContact&contentDataId=' + contentDataId + '&debug_xml=' + debugModeXml;
        if (emailKey.length > 0) {
            $.ajax({
                type: 'POST',
                dataType: 'html',
                url: urlTemp,
                data: dataTemp,
                success: function (data, textStatus, jqXHR) {
                    emailState = jqXHR.getResponseHeader('x-redcms-EMailToContact');
                    if (emailState == 1) {
                        eventHandlerSuccess();
                    } else {
                        eventHandlerError('Email not sent');
                    }
                },
                error: function (jqXHR, textStatus, errorThrown) {
                    showajaxerror(jqXHR, textStatus, errorThrown);
                    eventHandlerError(errorThrown);
                },
                headers: { 'X-redcms-ajax': true }
            });
        }
    };

    $.ajax({
        type: 'POST',
        dataType: 'html',
        url: urlTemp,
        success: function (data, textStatus, jqXHR) {
            sendMail(jqXHR.getResponseHeader('x-redcms-EMailToContactKey'));
        },
        error: function (jqXHR, textStatus, errorThrown) {
            showajaxerror(jqXHR, textStatus, errorThrown);
            eventHandlerError(errorThrown);
        },
        headers: { 'X-redcms-ajax': true }
    });
}

function FormToJSON(formElement, settings) {
    var formInputClassName = settings.formInputClassName || 'formInput';
    var formInputRequiredFieldClassName = settings.formInputRequiredFieldClassName || 'required';
    var formInputRequiredFieldErrorSuffix = settings.formInputRequiredFieldErrorSuffix || 'RequiredFieldError';
    var formInputNamePrefix = settings.formInputNamePrefix || '';
    var formInputMatchFields = settings.formInputMatchFields || [[]];
    var formInputMatchErrorSuffix = settings.formInputMatchErrorSuffix || 'MatchFieldError';
    var formInputRegExpSuffix = settings.formInputRegExpSuffix || '_regexp';
    var showRequiredFieldErrorLabel = settings.showRequiredFieldErrorLabel || function (formInput) {
        formElement.find('#' + formInput.attr('id') + formInputRequiredFieldErrorSuffix).show();
    };
    var hideRequiredFieldErrorLabels = settings.hideRequiredFieldErrorLabels || function () {
        formElement.find('.' + formInputClassName).each(function () {
            formElement.find('#' + $(this).attr('id') + formInputRequiredFieldErrorSuffix).hide();
        });
    };
    var showMatchFieldErrorLabel = settings.showMatchFieldErrorLabel || function (formInput) {
        formElement.find('#' + formInput.attr('id') + formInputMatchErrorSuffix).show();
    };
    var hideMatchFieldErrorLabels = settings.hideMatchFieldErrorLabels || function () {
        formElement.find('.' + formInputClassName).each(function () {
            formElement.find('#' + $(this).attr('id') + formInputMatchErrorSuffix).hide();
        });
    };
    var validateInputField = settings.validateInputField || function (formInput) {
        if (formInput.hasClass(formInputRequiredFieldClassName) && formInput.val() == '') {
            showRequiredFieldErrorLabel(formInput);
            return false;
        } else if (formInput.hasClass(formInputRequiredFieldClassName) && formElement.find('#' + formInput.attr('id') + formInputRegExpSuffix).length > 0) {
            var exp = eval(formElement.find('#' + formInput.attr('id') + formInputRegExpSuffix).val());
            if (!exp.test(formInput.val())) {
                showRequiredFieldErrorLabel(formInput);
                return false;
            }
        }
        var tmp = true;
        $.each(formInputMatchFields, function (index, value) {
            if (value.length == 2 && value[0] == formInput.attr('name') && formElement.find('.' + formInputClassName + '[name="' + value[1] + '"]').val() != formInput.val()) {
                showMatchFieldErrorLabel(formInput);
                tmp = false;
            }
        });
        return tmp;
    };
    var results = {};
    var valid = true;
    hideRequiredFieldErrorLabels();
    hideMatchFieldErrorLabels();
    formElement.find('.' + formInputClassName).each(function () {
        if (!validateInputField($(this)))
            valid = false;
        results[formInputNamePrefix + $(this).attr('name')] = $(this).val();
    });
    return (valid == true ? results : false);
}
