{"version":3,"sources":["../../dev/j/avastform.js"],"names":["initAvastForm","callback","getPlaceHolder","el","getAttribute","$","attr","setPlaceHolder","value","removePlaceHolder","replace","each","this","val","data","closest","hide","formSubmitTracking","avastFormSubmitTracking","jQuery","browser","msie","undefined","phs","document","documentMode","i","length","on","e","k","keyCode","not","eq","focus","AvastForm","hideConditionInputs","addHelp","form","hasClass","avastFormStartTracking","id","split","pop","addClass","type","validate","unbind","submit","avastForm","isValid","isAjax","ajaxSubmit","formDiv","offset","parseInt","top","window","scrollTop","animate","ajaxUpdate","datepicker","dateFormat","changeYear","changeMonth","call","globalErrorSelector","formName","prototype","trErrorClassName","helpDivSelector","errorSelector","formDivSelector","globalNoErrorSelector","globalErrorClassName","globalNoErrorClassName","ajaxHandlerInput","ajaxErrorInput","globalErrorInput","that","validationError","elem","name","get","result","checkControl","removeErrorMessage","addErrorMessage","rules","noError","getElementRules","ruleName","userRule","arg","isCondition","negRule","key","rule","op","match","control","getElementValue","success","validators","msg","checkedRadio","Function","html","append","showGlobalErrorMessage","removeClass","find","remove","filled","email","test","url","regexp","parts","RegExp","pattern","integer","float","range","isArray","parseFloat","minLength","maxLength","equal","len","elements","ajaxHandler","values","serializeArray","options","location","href","cache","dataFilter","trim","dataType","after","ajax","fail","show","alert","trigger","status","done","processResult","isPlainObject","errors","customErrors","replaces","indexOf","text","replaceWith","help","parEl","parent","selector","checkConditionInput","bind","checkEl","showEl","thisEl","_tagUpdate","destEl","prop","toLowerCase","firstEl","empty","elVal","elName","elText","definitions","def","parseJSON","condition","AvastFormAjax","doAjax","u","ajaxResponseStorage","ajaxExpirationDelay","_onSuccess","_onError","respOptions","makeKeyFromUrl","isExpired","encodeURI","writeToStorage","error","readFromStorage","expire","curr","Date","getTime"],"mappings":"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","file":"avastform.js","sourcesContent":["/**\n * Avast form JS\n */\n$(initAvastForm);\n\nfunction initAvastForm( callback ) {\n\n\t$('form.avast-form input[data-set-hide]').each(function() {\n $(this).val($(this).data('set-hide')).closest('tr').hide();\n });\n\n if (typeof formSubmitTracking !== 'undefined') {\n avastFormSubmitTracking(formSubmitTracking);\n }\n\n\t//patch IE placeholders\n\tif (jQuery.browser.msie !== undefined && jQuery.browser.msie === true) {\n\t\tfunction getPlaceHolder(el) {\n\t\t\treturn el.getAttribute('placeholder') || $(el).attr('placeholder');\n\t\t}\n\n\t\tfunction setPlaceHolder(el) {\n\t\t\tel.value = getPlaceHolder(el);\n\t\t}\n\n\t\tfunction removePlaceHolder(el) {\n\t\t\tel.value = el.value.replace(getPlaceHolder(el), '');\n\t\t}\n\n\t\tvar phs = $('input[placeholder]');\n\n\t\tif (document.documentMode < 10) {\n\t\t\tphs.each(function (i, el) {\n\t\t\t\tif (el.value.length == 0) {\n\t\t\t\t\tsetPlaceHolder(el);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tphs.on('click focus blur', function () {\n\t\t\tif (this.value.length == 0) {\n\t\t\t\tsetPlaceHolder(this);\n\t\t\t}\n\t\t});\n\n\t\tphs.on('keydown', function () {\n\t\t\tremovePlaceHolder(this);\n\t\t});\n\n\t\tphs.on('keyup', function (e) {\n\t\t\tvar k = e.keyCode;\n\t\t\tif (this.value.length == 0 && k != 8 && k != 46) {\n\t\t\t\tsetPlaceHolder(this);\n\t\t\t}\n\t\t});\n\t}\n \n\t// focus the first input\n\tif ($('form.avast-form tr.alert').length) {\n\t\t$('form.avast-form tr.alert input[type=text]:visible').not(':disabled, .nofocus').eq(0).focus();\n\t}\n\telse {\n\t\t$('form.avast-form input[type=text]:visible').not(':disabled, .nofocus').eq(0).focus();\n\t}\n\n\t// disable html 5 validation\n\t// try/catch because of IE 7\n\ttry {\n\t\t$('form.avast-form').attr('novalidate', 'novalidate');\n\t} catch (e) {\n\t}\n\n\t// hide elements with display conditions\n\t$('form.avast-form.live-validation').each(function () {\n\t\tvar avastForm = new AvastForm(this);\n\t\tavastForm.hideConditionInputs();\n\t});\n\n\t// add help hints next to inputs\n\t$('form.avast-form :input[data-help]').each(function () {\n\t\tvar avastForm = new AvastForm(this);\n\t\tavastForm.addHelp(this);\n\t});\n\n\t// start tracking\n\t$('form.avast-form').on('change', ':input', function (e) {\n\t\tif (!$(this.form).hasClass('tracking-started')) {\n\t\t\tvar formName = this.form.id.split('\\\\');\n\t\t\tavastFormStartTracking(formName.pop());\n\t\t\t$(this.form).addClass('tracking-started');\n\t\t}\n\t});\n\n\t// add live onchange validation\n\t$('form.avast-form.live-validation').on('change keyup click', ':input', function (e) {\n\t\tif (e.type == 'change') {\n\t\t\t$(this).data('changed', 1);\n\t\t}\n\t\tif ($(this).data('changed') || $(this.form).data('submitted')) {\n\t\t\tvar avastForm = new AvastForm(this.form);\n\t\t\tavastForm.validate(this);\n\t\t}\n\t});\n\n\t// add onsubmit validation (unbind first - can be called more times)\n\t$('form.avast-form.live-validation').unbind('submit').submit(function () {\n\t\t$(this).data('submitted', true);\n\t\tvar avastForm = new AvastForm(this);\n\t\tvar isValid = avastForm.validate();\n\t\tvar isAjax = $(this).hasClass('ajax-form');\n\n\t\tif (isValid && isAjax) {\n\t\t\treturn avastForm.ajaxSubmit();\n\t\t}\n\t\tvar formDiv = $(this).closest('div.AVsizer');\n\t\tif (!isValid && formDiv.length) {\n\t\t\tvar offset = parseInt(formDiv.offset().top);\n\t\t\tif (parseInt($(window).scrollTop()) > offset) {\n\t\t\t\t$('html,body').animate({scrollTop: offset}, 200);\n\t\t\t}\n\t\t}\n\t\treturn isValid;\n\t});\n\n\t// add onChange event for any [data-ajax=] tag to process ajax call for new data and destination tag update\n\t$('form.avast-form [data-ajax]')\n\t\t.on('change', function () {\n\t\t\tvar avastForm = new AvastForm(this);\n\t\t\tavastForm.ajaxUpdate($(this));\n\t\t});\n\n\tif ($.datepicker) {\n\t\t$('input.datepicker').datepicker({\n\t\t\tdateFormat: 'dd.mm.yy',\n\t\t\tchangeYear: true,\n\t\t\tchangeMonth: true\n\t\t});\n\t}\n\n\tif( typeof callback === 'function' ){\n\t\tcallback.call();\n\t}\n}\n\n/**\n * AvastForm\n */\nfunction AvastForm(form) {\n\tthis.form = form;\n\tif ($(this.globalErrorSelector).length) {\n\t\t$(this.form).data('submitted', true);\n\t}\n}\n\nAvastForm.prototype =\n{\n\n\ttrErrorClassName: 'alert',\n\thelpDivSelector: 'div.bundle-popup',\n\terrorSelector: 'ul.errors',\n\tformDivSelector: 'div.AVsizer',\n\tglobalErrorSelector: 'div.bubble.error',\n\tglobalNoErrorSelector: 'div.form-top',\n\tglobalErrorClassName: 'bubble error',\n\tglobalNoErrorClassName: 'form-top',\n\n\tajaxHandlerInput: '_ajax_handler_',\n\tajaxErrorInput: '_ajax_error_',\n\tglobalErrorInput: '_global_error_',\n\n\n\t/**\n\t * validate whole form or one element\n\t * @return bool\n\t */\n\tvalidate: function (el) {\n\t\tvar that = this;\n\t\tvar validationError = false;\n\t\tel = el || ':input';\n\n\t\t$(el, this.form).each(function () {\n\n\t\t\t// if is radio, test the first input\n\t\t\tvar elem = (this.type == 'radio') ? $('input[name=' + this.name + ']:first', that.form).get(0) : this;\n\n\t\t\tvar result = that.checkControl(elem);\n\t\t\tif (result === true) {\n\t\t\t\tthat.removeErrorMessage(elem);\n\t\t\t}\n\t\t\telse if (result) {\n\t\t\t\tthat.addErrorMessage(elem, result);\n\t\t\t\tvalidationError = true;\n\t\t\t}\n\t\t});\n\t\treturn !validationError;\n\t},\n\n\t/**\n\t * @return mixed true or error message\n\t */\n\tcheckControl: function (el, rules) {\n\t\tvar noError = true;\n\n\t\tif (rules || $(el).data('nette-rules')) {\n\t\t\trules = rules || this.getElementRules(el);\n\t\t\tvar that = this;\n\t\t\tvar ruleName, userRule, arg, isCondition, result, negRule;\n\n\t\t\t// check the rules\n\t\t\tif (rules && rules.length) {\n\n\t\t\t\t$.each(rules, function (key, rule) {\n\n\t\t\t\t\truleName = rule.op.replace(/^.*:(.*)$/, '$1');\n\t\t\t\t\tnegRule = rule.op.match(/^~:.*$/);\n\t\t\t\t\tisCondition = !!rule.rules;\n\t\t\t\t\targ = rule.arg || null;\n\t\t\t\t\telem = rule.control ? that.form[rule.control] : el;\n\t\t\t\t\tuserRule = $(elem).data('validator');\n\t\t\t\t\tval = that.getElementValue(elem);\n\n\t\t\t\t\tvar success = true;\n\t\t\t\t\tif (ruleName && ruleName in that.validators) {\n\t\t\t\t\t\tsuccess = that.validators[ruleName](val, that.form, arg);\n\t\t\t\t\t}\n\t\t\t\t\tif (userRule && userRule in window) {\n\t\t\t\t\t\tsuccess = window[userRule](val, that.form, arg);\n\t\t\t\t\t}\n\t\t\t\t\tif (negRule) {\n\t\t\t\t\t\tsuccess = !success;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!success && !isCondition) {\n\t\t\t\t\t\tnoError = rule.msg;\n\t\t\t\t\t}\n\t\t\t\t\telse if (success && isCondition) {\n\t\t\t\t\t\tnoError = that.checkControl(el, rule.rules);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn noError;\n\t},\n\n\tgetElementValue: function (elem) {\n\t\tvar val = $(elem).val();\n\t\t// radio\n\t\tif (!elem.name || elem.type == 'radio') {\n\t\t\tvar name = elem.name ? elem.name : elem[0].name;\n\t\t\tvar checkedRadio = $('input[name=' + name + ']:checked');\n\t\t\tval = (checkedRadio.length) ? $(checkedRadio).val() : '';\n\t\t}\n\t\telse if (elem.type == 'checkbox') {\n\t\t\t// it can be checkboxList\n\t\t\tval = !!$('input[name=\"' + elem.name + '\"]:checked').length;\n\t\t}\n\n\t\tif (val === $(elem).data('nette-empty-value')) {\n\t\t\tval = '';\n\t\t}\n\t\treturn val;\n\t},\n\n\tgetElementRules: function (el) {\n return (new Function('return ' + $(el).attr('data-nette-rules')))();\n\t},\n\n\taddErrorMessage: function (el, msg) {\n\t\tthis.removeErrorMessage(el);\n\t\t$(el).closest('tr').addClass(this.trErrorClassName);\n\t\tvar html = '';\n\t\t$(el).closest('td').append(html);\n\t\tthis.showGlobalErrorMessage();\n\t},\n\n\tremoveErrorMessage: function (el) {\n\t\t$(el).closest('tr').removeClass(this.trErrorClassName).find(this.errorSelector).remove();\n\t\tthis.showGlobalErrorMessage();\n\t},\n\n\tshowGlobalErrorMessage: function () {\n\t\tif ($(this.form).data('submitted')) {\n\t\t\tvar formDiv = $(this.form).closest(this.formDivSelector);\n\t\t\tif (formDiv.find(this.errorSelector).length && this.form[this.globalErrorInput]) {\n\t\t\t\tformDiv.find(this.globalNoErrorSelector)\n\t\t\t\t\t.data('oldhtml', $(this.globalNoErrorSelector).html())\n\t\t\t\t\t.removeClass(this.globalNoErrorClassName)\n\t\t\t\t\t.addClass(this.globalErrorClassName)\n\t\t\t\t\t.append(this.form[this.globalErrorInput].value);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tformDiv.find(this.globalErrorSelector)\n\t\t\t\t\t.html($(this.globalErrorSelector).data('oldhtml'))\n\t\t\t\t\t.removeClass(this.globalErrorClassName)\n\t\t\t\t\t.addClass(this.globalNoErrorClassName);\n\t\t\t}\n\t\t}\n\t},\n\n\tvalidators: {\n\t\t'filled': function (val) {\n\t\t\treturn val !== '' && val !== false && val !== null;\n\t\t},\n\n\t\t'email': function (val) {\n\t\t\treturn (/^(\"([ !\\x23-\\x5B\\x5D-\\x7E]*|\\\\[ -~])+\"|[-a-z0-9!#$%&'*+\\/=?^_`{|}~]+(\\.[-a-z0-9!#$%&'*+\\/=?^_`{|}~]+)*)@([0-9a-z\\u00C0-\\u02FF\\u0370-\\u1EFF]([-0-9a-z\\u00C0-\\u02FF\\u0370-\\u1EFF]{0,61}[0-9a-z\\u00C0-\\u02FF\\u0370-\\u1EFF])?\\.)+[a-z\\u00C0-\\u02FF\\u0370-\\u1EFF][-0-9a-z\\u00C0-\\u02FF\\u0370-\\u1EFF]{0,17}[a-z\\u00C0-\\u02FF\\u0370-\\u1EFF]$/i).test(val);\n\t\t},\n\n\t\t'url': function (val) {\n\t\t\treturn (/^(https?:\\/\\/|(?=.*\\.))([0-9a-z\\u00C0-\\u02FF\\u0370-\\u1EFF](([-0-9a-z\\u00C0-\\u02FF\\u0370-\\u1EFF]{0,61}[0-9a-z\\u00C0-\\u02FF\\u0370-\\u1EFF])?\\.)*[a-z\\u00C0-\\u02FF\\u0370-\\u1EFF][-0-9a-z\\u00C0-\\u02FF\\u0370-\\u1EFF]{0,17}[a-z\\u00C0-\\u02FF\\u0370-\\u1EFF]|\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})(:\\d{1,5})?(\\/\\S*)?$/i).test(val);\n\t\t},\n\n\t\t'regexp': function (val, form, arg) {\n\t\t\tvar parts = typeof arg === 'string' ? arg.match(/^\\/(.*)\\/([imu]*)$/) : false;\n\t\t\tif (parts) {\n\t\t\t\ttry {\n\t\t\t\t\treturn (new RegExp(parts[1], parts[2].replace('u', ''))).test(val);\n\t\t\t\t} catch (e) {\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t'pattern': function (val, form, arg) {\n\t\t\ttry {\n\t\t\t\treturn typeof arg === 'string' ? (new RegExp('^(' + arg + ')$')).test(val) : null;\n\t\t\t} catch (e) {\n\t\t\t}\n\t\t},\n\n\t\t'integer': function (val) {\n\t\t\treturn (/^-?[0-9]+$/).test(val);\n\t\t},\n\n\t\t'float': function (val) {\n\t\t\treturn (/^-?[0-9]*[.,]?[0-9]+$/).test(val);\n\t\t},\n\n\t\t'range': function (val, form, arg) {\n\t\t\treturn $.isArray(arg) ?\n\t\t\t\t((arg[0] === null || parseFloat(val) >= arg[0]) && (arg[1] === null || parseFloat(val) <= arg[1])) : null;\n\t\t},\n\n\t\t'minLength': function (val, form, arg) {\n\t\t\treturn val.length >= arg;\n\t\t},\n\n\t\t'maxLength': function (val, form, arg) {\n\t\t\treturn val.length <= arg;\n\t\t},\n\n\t\t'length': function (val, form, arg) {\n\t\t\targ = $.isArray(arg) ? arg : [arg, arg];\n\t\t\treturn (arg[0] === null || val.length >= arg[0]) && (arg[1] === null || val.length <= arg[1]);\n\t\t},\n\n\t\t'equal': function (val, form, arg) {\n\t\t\tif (arg === undefined) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\targ = $.isArray(arg) ? arg : [arg];\n\t\t\tfor (var i = 0, len = arg.length; i < len; i++) {\n\t\t\t\tif (val == (arg[i].control ? $(form.elements[arg[i].control]).val() : arg[i])) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t},\n\n\t/*addValidator: function(name, func)\n\t {\n\t this.validators[name] = func;\n\t },*/\n\n\tajaxSubmit: function () {\n\t\tvar form = this.form,\n\t\t\tthat = this,\n\t\t\tajaxHandler = (this.ajaxHandlerInput in form && form[this.ajaxHandlerInput].value in window) ? window[form[this.ajaxHandlerInput].value] : null,\n\t\t\tvalues = $(form).serializeArray(),\n\t\t\toptions = {\n\t\t\t\turl: $(form).attr('action') || document.location.href,\n\t\t\t\tcache: false,\n\t\t\t\tdata: values,\n\t\t\t\tdataFilter: function (data) {\n\t\t\t\t\treturn $.trim(data);\n\t\t\t\t},\n\t\t\t\tdataType: 'json',\n\t\t\t\ttype: $(form).attr('method') || 'get'\n\t\t\t};\n\t\tvar submit = $('input[type=submit].ajax');\n\t\tif (submit.length && !$('img.form-ajax-loader').length) {\n\t\t\tsubmit.hide().after('\"\"');\n\t\t}\n\n\t\t$.ajax(options)\n\t\t\t.fail(function () {\n\t\t\t\t$('img.form-ajax-loader').remove();\n\t\t\t\t$('input[type=submit].ajax').show();\n\t\t\t\talert(form[that.ajaxErrorInput].value);\n\t\t\t\t$(window).trigger('formSubmit', {'status': 'fail'});\n\t\t\t})\n\t\t\t.done(function (data) {\n\t\t\t\t$('input[type=submit].ajax').show();\n\t\t\t\t$('img.form-ajax-loader').remove();\n\t\t\t\tajaxHandler ? ajaxHandler(data, form) : that.processResult(data);\n\t\t\t\t$(window).trigger('formSubmit', {'status': 'done', 'values': values});\n\t\t\t});\n\t\treturn false;\n\t},\n\n\t/**\n\t * default ajax handler\n\t */\n\tprocessResult: function (data) {\n\t\tif ($.isPlainObject(data)) {\n\n\t\t\tif ('errors' in data) {\n\t\t\t\tfor (var name in data.errors) {\n\t\t\t\t\tif (name in this.form) {\n\t\t\t\t\t\tthis.addErrorMessage(this.form[name], data.errors[name]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ('customErrors' in data && $('.formCustomErrorMessage').length > 0) {\n\t\t\t\t$('.formCustomErrorMessage').html(data.customErrors).removeClass('hidden');\n\t\t\t}\n\n\t\t\tif ('replaces' in data) {\n\t\t\t\tfor (var replace in data.replaces) {\n\t\t\t\t\t// convert entities to html if needed\n\t\t\t\t\tif (data.replaces[replace].indexOf('<') > -1) {\n\t\t\t\t\t\tvar html = $('
').html(data.replaces[replace]).text();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar html = data.replaces[replace];\n\t\t\t\t\t}\n\t\t\t\t\tif (replace == 'form') {\n\t\t\t\t\t\t$(this.form).replaceWith(html);\n\t\t\t\t\t}\n\t\t\t\t\telse if (replace.indexOf('#') === 0) {\n\t\t\t\t\t\t$(replace).replaceWith(html);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * adds help icons next to inputs\n\t *\n\t * @param object el element with help text\n\t */\n\taddHelp: function (el) {\n\t\tvar help = $(el).data('help'),\n\t\t\tparEl = $(el).parent();\n\t\tif (help) {\n\t\t\tif (!$(this.helpDivSelector, parEl).length) {\n\t\t\t\t$(el).after('' +\n\t\t\t\t\t'' + help + '');\n\t\t\t}\n\t\t}\n\t},\n\n\thideConditionInputs: function () {\n var that = this;\n\n $(':input[data-display-condition][data-nette-rules]', this.form).each(function () {\n\n\t\t\tvar el = this;\n\t\t\tvar rules = that.getElementRules(el);\n\n\t\t\t$.each(rules, function (key, rule) {\n\t\t\t\tvar selector = that.form[rule.control];\n\t\t\t\t// radio\n\t\t\t\tif ($.isArray(selector)) {\n\t\t\t\t\tselector = $('input[name=' + selector[0].name + ']', that.form);\n\t\t\t\t}\n\t\t\t\tthat.checkConditionInput(selector, rule, el);\n\t\t\t\t$(selector).bind('change keyup click', function () {\n\t\t\t\t\tthat.checkConditionInput(this, rule, el);\n\t\t\t\t});\n\t\t\t});\n });\n\t},\n\n\tcheckConditionInput: function (checkEl, rules, showEl) {\n\t\trules.rules = null;\n\t\trules.control = null;\n\t\tif (this.checkControl(checkEl, [rules]) === true) {\n\t\t\t$(showEl).closest('tr').show();\n\t\t}\n\t\telse {\n\t\t\t$(showEl).closest('tr').hide();\n\t\t\tthis.removeErrorMessage(showEl);\n\t\t}\n\t},\n\n\n\t/*\n\t * Method will update elements values form given data from ajax\n\t * @method ajaxUpdate\n\t * @param object thisEl - current element properties - attribute [data-ajax] needed\n\t * @return boolean\n\t */\n\tajaxUpdate: function (thisEl) {\n\t\t//fix for chars like ''\n\t\tvar definitions = thisEl\n\t\t\t.attr('data-ajax')\n\t\t\t.replace(/\\'/g, \"\\\"\");\n\n\t\tvar thisVal = thisEl.val();\n\n\t\t//read and instance definition object\n\t\tvar def = $.parseJSON(definitions);\n\n\t\t//check if necessary params exists in given definition object\n\t\tif (typeof def.destEl === 'undefined' && ( typeof def.url === 'undefined' || typeof def.condition === 'undefined' )) {\n\t\t\treturn false;\n\t\t}\n\n\n\t\t/*\n\t\t * Function will update html tag from values form given data from ajax\n\t\t * @function tagUpdate\n\t\t * @param object data - object wit data from ajax or ajaxResponseStorage\n\t\t * @param string destEl - destination element\n\t\t * @return boolean\n\t\t */\n\t\tfunction _tagUpdate(data, destEl) {\n\t\t\t//set working element\n\t\t\tvar el = $('form.avast-form [name=' + destEl + ']');\n\n\t\t\tswitch ($(el).prop('tagName').toLowerCase()) {\n\t\t\t\tcase 'select':\n\t\t\t\t\tvar firstEl = $(el).find('option:first');\n\t\t\t\t\t$(el)\n\t\t\t\t\t\t.empty()\n\t\t\t\t\t\t.append(firstEl);\n\t\t\t\t\t//fill select\n\t\t\t\t\t$.each(data, function (key, val) {\n\t\t\t\t\t\t$(el).append(\"\");\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'input':\n\t\t\t\t\t$(el)\n\t\t\t\t\t\t.empty()\n\t\t\t\t\t\t.val(data.elVal)\n\t\t\t\t\t\t.text(data.elText);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'textarea':\n\t\t\t\t\t$(el)\n\t\t\t\t\t\t.empty()\n\t\t\t\t\t\t.text(data.elText);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tvar url = typeof def.url === 'undefined' ? false : def.url;\n\n\t\t//Process update\n\t\tif (typeof def.condition === 'undefined') {\n\t\t\t//execure ajax\n\t\t\tif (url) {\n\t\t\t\tAvastFormAjax.doAjax(url, _tagUpdate, false, def.destEl);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t//apply conditions and check if all ok\n\t\t\t$.each(def.condition, function (key, val) {\n\t\t\t\t//test condition\n\t\t\t\tif (thisEl.val() === val.id) {\n\t\t\t\t\t//select correct URL\n\t\t\t\t\tvar u = typeof val.url === 'undefined' ? url : val.url;\n\t\t\t\t\t//execure ajax\n\t\t\t\t\tAvastFormAjax.doAjax(u, _tagUpdate, false, val.destEl);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t}\n\n};\n\n\n/*\n * AvastForm Ajax provide functionality for getting data from ajax call and store it in to array\n * @class AvastForm.ajax\n */\nvar AvastFormAjax = {\n\tajaxResponseStorage: [],\n\tajaxExpirationDelay: 60000, //miliseconds\n\n\t/*\n\t * Method will do ajax call on given URL when previous response not exists in ajaxResponseStorage object or the record expired in ajaxResponseStorage\n\t * @function doAjax\n\t * @param string url - url to call\n\t * @param function _onSuccess - function that will be executed after successed ajax\n\t * @param function _onError - function that will be executed on error\n\t * @param object respOptions - options that will be delivered to final functions (on succes, etc)\n\t * @return boolean\n\t */\n\tdoAjax: function (url, _onSuccess, _onError, respOptions) {\n\t\t//make key from url to store data properly in ajaxResponseStorage\n\t\tvar key = AvastFormAjax.makeKeyFromUrl(url);\n\n\t\tif (AvastFormAjax.isExpired(key)) {\n\t\t\t//do ajax for data\n\t\t\t$.ajax({\n\t\t\t\turl: encodeURI(url),\n\t\t\t\tsuccess: function (data) {\n\t\t\t\t\t//write to storage\n\t\t\t\t\tAvastFormAjax.writeToStorage(key, data);\n\n\t\t\t\t\tif (typeof _onSuccess === 'function') {\n\t\t\t\t\t\t_onSuccess(data, respOptions);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\terror: function (data) {\n\t\t\t\t\tif (typeof _onError === 'function') {\n\t\t\t\t\t\t_onError(data, respOptions);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\t_onSuccess(AvastFormAjax.readFromStorage(key), respOptions);\n\t\t}\n\t},\n\n\n\t/*\n\t * Method will create key from given url\n\t * @function makeKeyFromUrl\n\t * @param string url - url to change to key\n\t * @return string\n\t */\n\tmakeKeyFromUrl: function (url) {\n\t\treturn url\n\t\t\t.replace(/\\//gi, \"-\")\n\t\t\t.replace(/\\&/gi, \"----\")\n\t\t\t.replace(/\\=/gi, \"---\")\n\t\t\t.replace(/\\?/gi, \"--\")\n\t\t\t.replace(/\\%/gi, \"-----\")\n\t\t\t.replace(/\\;/gi, \"------\")\n\t\t\t.replace(/\\:/gi, \"-\");\n\t},\n\n\n\t/*\n\t * Method will write data to ajaxResponseStorage\n\t * @function writeToStorage\n\t * @param string key - key in ajaxResponseStorage\n\t * @param object data - data to write\n\t * @param int expire - expiration timestamp\n\t * @return boolean\n\t */\n\twriteToStorage: function (key, data, expire) {\n\t\tvar curr = new Date().getTime();\n\n\t\tAvastFormAjax.ajaxResponseStorage[ key ] = {\n\t\t\texpire: curr + (typeof expire !== 'undefined' ? expire : AvastFormAjax.ajaxExpirationDelay),\n\t\t\tdata: data\n\t\t};\n\t},\n\n\n\t/*\n\t * Method will read data from ajaxResponseStorage\n\t * @function writeToStorage\n\t * @param string key - key in ajaxResponseStorage\n\t * @return object\n\t */\n\treadFromStorage: function (key) {\n\t\tif (typeof AvastFormAjax.ajaxResponseStorage[ key ] !== 'undefined' && typeof AvastFormAjax.ajaxResponseStorage[ key ].data !== 'undefined') {\n\t\t\treturn AvastFormAjax.ajaxResponseStorage[ key ].data;\n\t\t}\n\t\telse {\n\t\t\treturn false;\n\t\t}\n\t},\n\n\t/*\n\t * Method will check if the key in ajaxResponseStorage expired\n\t * @function writeToStorage\n\t * @param string key - key in ajaxResponseStorage\n\t * @return object\n\t */\n\tisExpired: function (key) {\n\t\tvar curr = new Date().getTime();\n\n\t\t//check if key exists in ajaxResponseStorage\n\t\tif (typeof AvastFormAjax.ajaxResponseStorage[ key ] !== 'undefined') {\n\t\t\t//check if record expired\n\t\t\tif (AvastFormAjax.ajaxResponseStorage[ key ].expire < curr) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\treturn true;\n\t\t}\n\t}\n\n};\n\n\n/**\n * success form submit tracking\n *\n * @param string formName\n */\nfunction avastFormSubmitTracking(formName) {}\n\n/**\n * form - start of filling tracking\n *\n * @param string formName\n */\nfunction avastFormStartTracking(formName) {} \n"]}