//noinspection JSUnresolvedVariable var mfContact = (function ($) { var _ready = false, _placeholderSupported, _maxlengthSupported, _forms = {}, _translations = { checkedFields: (typeof contact_scripts_checked_fields !== 'undefined') ? contact_scripts_checked_fields : '', fieldRequired: (typeof contact_scripts_field_required !== 'undefined') ? contact_scripts_field_required : '', invalidEmail: (typeof contact_scripts_invalid_email !== 'undefined') ? contact_scripts_invalid_email : '', sendSuccess: (typeof contact_scripts_send_ok !== 'undefined') ? contact_scripts_send_ok : '', sendFail: (typeof contact_scripts_send_fail !== 'undefined') ? contact_scripts_send_fail : '', sending: (typeof contact_scripts_sending_message !== 'undefined') ? contact_scripts_sending_message : '' }, _getFieldsSet = function(form, includeHidden) { if (typeof includeHidden === 'undefined' || !includeHidden) { return $('input[type=text], textarea', form); } else { return $('input[type=text], input[type=hidden], textarea', form); } }, _canSend = function(formId) { var result = true, req = _forms[formId].required, val = _forms[formId].values, len = req.length, i; for (i = 0; i < len; i++) { if (val[req[i]] === '') { //required and empty means break result = false; break; } } return result; }, _sendNoRemoting = function(form) { var formId = form.attr('id'); var val = _forms[formId].values; $.ajax({ type : 'POST', url: '/actions/sendcontactform.seam', contentType : 'application/x-www-form-urlencoded;charset=utf-8', data: { sendFrom: val.from, sendFromName: val.fullName, sendMessage: val.message, sendTo: document.domain, sendLang: _forms[formId].lang }, success: function(data) { if (data === 'sent') { _sendSuccessAction(form); } else { _sendFailAction(form); } }, error: function() { _sendFailAction(form); } }); }, _sendViaRemoting = function(form, checkbox) { var formId = form.attr('id'); var val = _forms[formId].values; var type = _forms[formId].type; var message = _prependCheckboxesToMessage(form); //String handleContact(String name, String email, String phone, String message, String type) Seam.Component.getInstance('contactAction').handleContact(val.fullName, val.email, val.phone, message, type, function(data) { if (data === 'ok') { _sendSuccessAction(form); } else { _sendFailAction(form); } }); }, _sendGuestbook = function(form) { var val = _forms[form.attr('id')].values; Seam.Component.getInstance('guestbookActions').addEntry(val.domain, val.author, val.text, function(result) { if (result) { _sendSuccessAction(form); } else { _sendFailAction(form); } }); }, _sendSuccessAction = function(form) { var formId = form.attr('id'); var successMessage = _translations.sendSuccess; //add custom message if exists if (typeof _forms[formId].customSuccessMessage !== 'undefined') {successMessage = _forms[formId].customSuccessMessage;} $('.form_overlay', form) .addClass('green_overlay') .children() .html(successMessage) .parent() .animate({'opacity' : 1}, 5000, function() { //animate to fake delay (for jQuery < 1.4) $(this).fadeOut(1000, function() { $(this).remove(); }); }); _gaNotification(formId, 'successOnSend'); _clearFields(form); var callback = _forms[formId].callback; if (typeof callback === 'function') {callback();} }, _sendFailAction = function(form) { var formId = form.attr('id'); var failMessage = _translations.sendFail; //add custom message if exists if (typeof _forms[formId].customFailMessage !== 'undefined') {failMessage = _forms[formId].customFailMessage;} $('.form_overlay', form).addClass('red_overlay').children().html(failMessage); _gaNotification(formId, 'errorOnSend'); }, _prependCheckboxesToMessage = function(form) { var formId = form.attr('id'); var checkboxes = _forms[formId].checkboxes; var message = _forms[formId].values.message || ''; if (typeof checkboxes !== 'undefined') { var checkedValues = []; for (var i in checkboxes) { if (checkboxes.hasOwnProperty(i) && checkboxes[i]) { checkedValues.push(i); } } if (checkedValues.length > 0) { checkedValues = checkedValues.join(','); message += '\n' + _translations.checkedFields + ': ' + checkedValues; } } return message; }, _gaNotification = function(formId, status) { var page; if (typeof _forms[formId].gaPage === 'undefined') { var path = window.location.pathname; page = path.substring(path.lastIndexOf('/') + 1).replace('.html', ''); } else { page = _forms[formId].gaPage; } try { _gaq.push(['_trackEvent', status, page]); } catch (err) {} if (typeof sponsoredLinksNewPageName !== 'undefined' && page == sponsoredLinksNewPageName && status == 'successOnSend') { var iframe = document.createElement('iframe'); iframe.style.width = '0px'; iframe.style.height = '0px'; document.body.appendChild(iframe); iframe.src = '/adwords/zapytanie-adwords.html'; } }, _send = function(form) { var formId = form.attr('id'); $('input, textarea', form).blur(); if (_canSend(formId)) { form.prepend('
' + _translations.sending + '
'); switch (_forms[formId].sendMethod) { case 'remoting': _sendViaRemoting(form); break; case 'ajax': _sendNoRemoting(form); break; case 'guestbook': _sendGuestbook(form); break; default: //do nothing when send method not set break; } _gaNotification(formId, 'trySend'); } }, _validateEmpty = function(field, form) { var fName = field.attr('name'); var fValue = field.val(); var formId = form.attr('id'); var placeholderValue = field.attr('placeholder') || ''; $('.error_' + fName, form).remove(); if (fValue === '' || fValue === placeholderValue) { _forms[formId].values[fName] = ''; _addErrorMessage(field, formId, _translations.fieldRequired, true); } else { if ((fName === 'email') && (!isValidEmail(fValue))) { _forms[formId].values[fName] = ''; _addErrorMessage(field, formId, _translations.invalidEmail); } else { _forms[formId].values[fName] = fValue; field.removeClass('error').removeClass('empty').addClass('ok'); } } }, _addErrorMessage = function(field, formId, message, isEmpty) { var fName = field.attr('name'); var extraClass = _forms[formId].errorClasses || ''; if ($.isArray(extraClass)) { extraClass = extraClass.join(' '); } field.removeClass('ok').removeClass('empty').addClass('error') .after('' + message + ''); if (isEmpty) {field.addClass('empty');} }, _parseTextareaMaxlength = function(field) { var elem = field[0].nodeName.toLowerCase(); if (!_maxlengthSupported && elem === 'textarea' && field.attr('maxlength') !== undefined) { var max = field.attr('maxlength'); field.bind('keyup paste blur', function(e) { window.setTimeout(function() { if (field.val().length > max) { field.val(field.val().substr(0, max)); } }, 1); //1 milisecond timeout for onpaste }); } }, _parsePlaceholder = function(field) { if (!_placeholderSupported && field.attr('placeholder') !== undefined) { var phText = field.attr('placeholder'); field[0].value = phText; field.focus(function() { if (this.value === phText) {this.value = '';} }).blur(function() { if (this.value === '') {this.value = phText;} }); } }, _parseFields = function(form) { var id = form.attr('id'); _getFieldsSet(form, true).each(function() { var field = $(this); var name = field.attr('name'); _forms[id].values[name] = ''; if (this.getAttribute('data-contact-required')) { _forms[id].required.push(name); } _parsePlaceholder($(this)); //adds old browsers support for placeholder attribute if needed _parseTextareaMaxlength($(this)); //and maxlength for textareas field.blur(function() { _validateEmpty(field, form); }).focus(function() { field.removeClass('error'); $('.errors', field).remove(); }); }); }, _parseCheckboxes = function(form) { var id = form.attr('id'); var checkboxes = $('input[type=checkbox]', form); if (checkboxes.length > 0) { _forms[id].checkboxes = {}; checkboxes.each(function() { var checkbox = $(this); _forms[id].checkboxes[checkbox.val()] = checkbox.is(':checked'); checkbox.unbind('change').change(function() { _forms[id].checkboxes[$(this).val()] = $(this).is(':checked'); }); }); } }, _registerForm = function(form) { var id = form.attr('id'); _forms[id] = {}; var lang = form[0].getAttribute('data-contact-lang'); if (lang) {_forms[id].lang = lang;} _forms[id].type = form[0].getAttribute('data-contact-type'); var sendMethod = form[0].getAttribute('data-contact-send-method'); _forms[id].sendMethod = (sendMethod) ? sendMethod : 'remoting'; var customSuccessMessage = form[0].getAttribute('data-contact-custom-success-message'); if (customSuccessMessage) {_forms[id].customSuccessMessage = customSuccessMessage;} var customFailMessage = form[0].getAttribute('data-contact-custom-fail-message'); if (customFailMessage) {_forms[id].customFailMessage = customFailMessage;} _forms[id].callback = form[0].onsubmit; form[0].onsubmit = null; _forms[id].values = {}; _forms[id].required = []; var gaPage = form[0].getAttribute('data-contact-ga-page'); if (gaPage) { _forms[id].gaPage = gaPage; } var errorClasses = form[0].getAttribute('data-contact-error-class'); if (errorClasses) { _forms[id].errorClasses = errorClasses.split(','); } _parseFields(form); _parseCheckboxes(form); form.unbind('submit').submit(function() { _send(form); return false; }); $('.clear_form', form).unbind('click').click(function() { _clearFields(form); return false; }); }, _clearFields = function(form) { $('.errors', form).remove(); _getFieldsSet(form).each(function() { var val = (!_placeholderSupported && $(this).attr('placeholder') !== undefined) ? $(this).attr('placeholder') : ''; $(this).removeClass('ok').removeClass('error').removeClass('empty').val(val); }); $('input[type=checkbox]', form).attr('checked',false); }, _setTranslations = function(translations) { $.extend(_translations, translations); }, _init = function() { var i = document.createElement('input'); _placeholderSupported = (i.placeholder !== undefined); var t = document.createElement('textarea'); _maxlengthSupported = (t.maxLength !== undefined); _ready = true; }, _registerAllForms = function() { if (!_ready) { _init(); } $('form.contact_form').each(function() { _registerForm($(this)); }); }, _registerSingleForm = function(form) { if (!_ready) { _init(); } _registerForm(form); } return { canSend: function(formId) { var form = $('#' + formId); _getFieldsSet(form).blur(); return _canSend(formId); }, setTranslations: _setTranslations, registerForm: _registerSingleForm, registerAllForms: _registerAllForms, debug: function() { return [_forms, _translations, _placeholderSupported, _maxlengthSupported]; } } })(jQuery); jQuery(function() { mfContact.registerAllForms(); });