{"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","browser","undefined","isInternetExplorer","phs","document","documentMode","i","length","on","e","k","keyCode","not","eq","focus","AvastForm","hideConditionInputs","addHelp","form","hasClass","avastFormStartTracking","id","split","pop","addClass","type","validate","off","submit","avastForm","isValid","isAjax","ajaxSubmit","formDiv","offset","parseInt","top","window","scrollTop","animate","ajaxUpdate","datepicker","dateFormat","changeYear","changeMonth","call","globalErrorSelector","formName","$_","avastGlobals","detect","name","prototype","trErrorClassName","helpDivSelector","errorSelector","formDivSelector","globalNoErrorSelector","globalErrorClassName","globalNoErrorClassName","ajaxHandlerInput","ajaxErrorInput","globalErrorInput","that","validationError","elem","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","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 if (typeof $_ !== 'undefined') {\n\t$ = $_;\n}\n\n$(initAvastForm);\nvar browser = avastGlobals.detect.browser.name;\n\nfunction initAvastForm( callback ) {\n\n\t$('form.avast-form input[data-set-hide]').each(function() {\n $(this).val($(this).data('set-hide')).closest('.form-group').hide();\n });\n\n if (typeof formSubmitTracking !== 'undefined') {\n avastFormSubmitTracking(formSubmitTracking);\n }\n\n\t//patch IE placeholders\n\tif (browser !== undefined && browser.isInternetExplorer) {\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\t// focus the first input\n\tif ($('form.avast-form div.alert').length) {\n\t\t$('form.avast-form div.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').off('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\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\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('div').addClass(this.trErrorClassName);\n\t\tvar html = '';\n\t\t$(el).closest('div').append(html);\n\t\tthis.showGlobalErrorMessage();\n\t},\n\n\tremoveErrorMessage: function (el) {\n\t\t$(el).closest('div').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'
' +\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).on('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('.form-group').show();\n\t\t}\n\t\telse {\n\t\t\t$(showEl).closest('.form-group').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"]}