PageSourceSearch

https://www.tovarymalisham.ru/sites/default/files/advagg_js/js__tx…57V7_qyqO_T9B5Xl7njz39CH1itZCRDh3sSvbSfo.js

js tovarymalisham.ru collected 2026-09-30 02:42:58 UTC 120,517 bytes, 1,865 lines download raw bytes

1Drupal.locale = { 'pluralFormula': function ($n) { return Number((((($n%10)==1)&&(($n%100)!=11))?(0):((((($n%10)>=2)&&(($n%10)<=4))&&((($n%100)<10)||(($n%100)>=20)))?(1):2))); }, 'strings': {"":{"An AJAX HTTP error occurred.":"\u0412\u043e\u0437\u043d\u0438\u043a\u043b\u0430 AJAX HTTP \u043e\u0448\u0438\u0431\u043a\u0430.","HTTP Result Code: !status":"\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 HTTP: !status","An AJAX HTTP request terminated abnormally.":"HTTP \u0437\u0430\u043f\u0440\u043e\u0441 AJAX \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e.","Debugging information follows.":"\u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f.","Path: !uri":"\u041f\u0443\u0442\u044c: !uri","StatusText: !statusText":"\u0422\u0435\u043a\u0441\u0442 \u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f: !statusText","ResponseText: !responseText":"\u0422\u0435\u043a\u0441\u0442 \u041e\u0442\u0432\u0435\u0442\u0430: !responseText","ReadyState: !readyState":"ReadyState: !readyState","Hide":"\u0421\u043a\u0440\u044b\u0442\u044c","Show":"\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c","Re-order rows by numerical weight instead of dragging.":"\u0423\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u043e \u0432\u0435\u0441\u0443 \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u043d\u0438\u044f.","Show row weights":"\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0435\u0441 \u0441\u0442\u0440\u043e\u043a","Hide row weights":"\u0421\u043a\u0440\u044b\u0442\u044c \u0432\u0435\u0441 \u0441\u0442\u0440\u043e\u043a","Drag to re-order":"\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043c\u043e\u0436\u043d\u043e, \u043f\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0432 \u043f\u0443\u043d\u043a\u0442 \u043c\u044b\u0448\u043a\u043e\u0439.","Changes made in this table will not be saved until the form is submitted.":"\u0421\u0434\u0435\u043b\u0430\u043d\u043d\u044b\u0435 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043d\u0435 \u0432\u0441\u0442\u0443\u043f\u044f\u0442 \u0432 \u0441\u0438\u043b\u0443, \u043f\u043e\u043a\u0430 \u0432\u044b \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0435 \u0438\u0445.","Also allow !name role to !permission?":"\u0422\u0430\u043a\u0436\u0435 \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u0440\u043e\u043b\u0438 !name \u043f\u0440\u0430\u0432\u0430 !permission?","Next":"\u0414\u0430\u043b\u0435\u0435","Cancel":"\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c","Disabled":"\u041e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043e","Enabled":"\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u043e","Edit":"\u041f\u0440\u0430\u0432\u043a\u0430","Save":"\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c","Sunday":"\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435","Monday":"\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a","Tuesday":"\u0432\u0442\u043e\u0440\u043d\u0438\u043a","Wednesday":"\u0441\u0440\u0435\u0434\u0430","Thursday":"\u0447\u0435\u0442\u0432\u0435\u0440\u0433","Friday":"\u043f\u044f\u0442\u043d\u0438\u0446\u0430","Saturday":"\u0441\u0443\u0431\u0431\u043e\u0442\u0430","Add":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c","Upload":"\u0417\u0430\u043a\u0430\u0447\u0430\u0442\u044c","Configure":"\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c","All":"\u0412\u0441\u0435","Done":"\u0413\u043e\u0442\u043e\u0432\u043e","This field is required.":"\u042d\u0442\u043e \u043f\u043e\u043b\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f.","Prev":"\u041d\u0430\u0437\u0430\u0434","Mon":"\u043f\u043d","Tue":"\u0432\u0442","Wed":"\u0441\u0440","Thu":"\u0447\u0442","Fri":"\u043f\u0442","Sat":"\u0441\u0431","Sun":"\u0432\u0441","January":"\u044f\u043d\u0432\u0430\u0440\u044f","February":"\u0444\u0435\u0432\u0440\u0430\u043b\u044f","March":"\u043c\u0430\u0440\u0442\u0430","April":"\u0430\u043f\u0440\u0435\u043b\u044f","May":"\u043c\u0430\u044f","June":"\u0438\u044e\u043d\u044f","July":"\u0438\u044e\u043b\u044f","August":"\u0430\u0432\u0433\u0443\u0441\u0442\u0430","September":"\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f","October":"\u043e\u043a\u0442\u044f\u0431\u0440\u044f","November":"\u043d\u043e\u044f\u0431\u0440\u044f","December":"\u0434\u0435\u043a\u0430\u0431\u0440\u044f","Anonymous users":"\u0410\u043d\u043e\u043d\u0438\u043c\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438","Select all rows in this table":"\u041e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b","Deselect all rows in this table":"\u0421\u043d\u044f\u0442\u044c \u043e\u0442\u043c\u0435\u0442\u043a\u0443 \u0441\u043e \u0432\u0441\u0435\u0445 \u043a\u043e\u043b\u043e\u043d\u043e\u043a \u0442\u0430\u0431\u043b\u0438\u0446\u044b","Today":"\u0421\u0435\u0433\u043e\u0434\u043d\u044f","Jan":"\u042f\u043d\u0432","Feb":"\u0424\u0435\u0432","Mar":"\u041c\u0430\u0440","Apr":"\u0410\u043f\u0440","Jul":"\u0418\u044e\u043b","Aug":"\u0410\u0432\u0433","Sep":"\u0421\u0435\u043d","Oct":"\u041e\u043a\u0442","Nov":"\u041d\u043e\u044f","Dec":"\u0414\u0435\u043a","Su":"\u0412\u0441","Mo":"\u041f\u043d","Tu":"\u0412\u0442","We":"\u0421\u0440","Th":"\u0427\u0442","Fr":"\u041f\u0442","Sa":"\u0421\u0431","Not published":"\u041d\u0435 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043e","Loading":"\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430","mm\/dd\/yy":"mm\/dd\/yy","Only files with the following extensions are allowed: %files-allowed.":"\u041f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u044f\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u0439\u043b\u044b \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u043c\u0438: %files-allowed.","By @
1name on @date":"@name, @date","By @name":"@name","Not in menu":"\u041d\u0435 \u0432 \u043c\u0435\u043d\u044e","Alias: @alias":"\u0421\u0438\u043d\u043e\u043d\u0438\u043c: @alias","No alias":"\u0421\u0438\u043d\u043e\u043d\u0438\u043c \u043d\u0435 \u0437\u0430\u0434\u0430\u043d","0 sec":"0 \u0441\u0435\u043a","New revision":"\u041d\u043e\u0432\u0430\u044f \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u044f","The changes to these blocks will not be saved until the \u003Cem\u003ESave blocks\u003C\/em\u003E button is clicked.":"\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u044b\u0435 \u0432 \u0431\u043b\u043e\u043a\u0430\u0445 \u043d\u0435 \u0432\u0441\u0442\u0443\u043f\u044f\u0442 \u0432 \u0441\u0438\u043b\u0443 \u043f\u043e\u043a\u0430 \u0432\u044b \u043d\u0435 \u043d\u0430\u0436\u043c\u0435\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 \u003Cem\u003E\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0431\u043b\u043e\u043a\u0438\u003C\/em\u003E.","This permission is inherited from the authenticated user role.":"\u042d\u0442\u043e \u043f\u0440\u0430\u0432\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u0442\u0441\u044f \u043e\u0442 \u0440\u043e\u043b\u0438 \u00ab\u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u00bb.","No revision":"\u041d\u0435\u0442 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438","@number comments per page":"@number \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443","Requires a title":"\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a","Not restricted":"\u0411\u0435\u0437 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439","(active tab)":"(\u0430\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u0432\u043a\u043b\u0430\u0434\u043a\u0430)","Not customizable":"\u041d\u0435 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0439","Restricted to certain pages":"\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043e \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446","The block cannot be placed in this region.":"\u0411\u043b\u043e\u043a \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0449\u0451\u043d \u0432 \u044d\u0442\u043e\u043c \u0440\u0435\u0433\u0438\u043e\u043d\u0435.","Hide summary":"\u0421\u043a\u0440\u044b\u0442\u044c \u0430\u043d\u043e\u043d\u0441","Edit summary":"\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0430\u043d\u043e\u043d\u0441","Don\u0027t display post information":"\u041d\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430","@title dialog":"\u0414\u0438\u0430\u043b\u043e\u0433 @title","The selected file %filename cannot be uploaded. Only files with the following extensions are allowed: %extensions.":"\u0412\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b %filename \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u043c\u0438: %extensions.","Autocomplete popup":"\u0412\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0435\u0435 \u0430\u0432\u0442\u043e\u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435","Searching for matches...":"\u041f\u043e\u0438\u0441\u043a \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0439...","Show description":"\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435","Hide description":"\u0421\u043a\u0440\u044b\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435","1 sec":"@count \u0441\u0435\u043a.","Remove group":"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0443\u0441\u043b\u043e\u0432\u0438\u0435","@count sec":"@count \u0441\u0435\u043a.","Apply (all displays)":"\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c (\u0432\u0441\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f)","Apply (this display)":"\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c (\u044d\u0442\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435)","Revert to default":"\u0412\u0435\u0440\u043d\u0443\u0442\u044c \u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e","SKU":"\u0410\u0440\u0442\u0438\u043a\u0443\u043b","Sell price":"\u0421\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0434\u043b\u044f \u043f\u0440\u043e\u0434\u0430\u0436\u0438","Shippable":"\u0414\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0439","Please wait...":"\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435...","1 week":"@count \u043d\u0435\u0434\u0435\u043b\u044f","@count days":"@count \u0434\u043d\u044f","1 day":"@count \u0434\u0435\u043d\u044c","Authenticated users":"\u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438","Close":"\u0417\u0430\u043a\u0440\u044b\u0442\u044c","Anonymous checkout is enabled.":"\u0410\u043d\u043e\u043d\u0438\u043c\u043d\u043e\u0435 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u043a\u0430\u0437\u043e\u0432 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043e.","Anonymous checkout is disabled.":"\u0410\u043d\u043e\u043d\u0438\u043c\u043d\u043e\u0435 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u043a\u0430\u0437\u043e\u0432 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043e.","Checkout is disabled.":"\u041e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u043a\u0430\u0437\u0430 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043e","Not shippable":"\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0439","Insert Teaser Break":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0440\u0430\u0437\u0440\u044b\u0432 \u0432 \u0430\u043d\u043e\u043d\u0441","Insert Page Break":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0440\u0430\u0437\u0440\u044b\u0432 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b","The document already contains a teaser break. Do you want to proceed by removing it first?":"\u
10414\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u0443\u0436\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u0431\u0440\u0435\u0437\u043a\u0443 \u0430\u043d\u043e\u043d\u0441\u0430. \u0425\u043e\u0442\u0438\u0442\u0435 \u043b\u0438 \u0412\u044b \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0435\u0451?","Log messages":"\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u043b\u043e\u0433","Please select a file.":"\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0444\u0430\u0439\u043b.","You are not allowed to operate on more than %num files.":"\u0412\u0430\u043c \u043d\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c \u0441 %num \u0444\u0430\u0439\u043b\u0430\u043c\u0438.","Please specify dimensions within the allowed range that is from 1x1 to @dimensions.":"\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u0440\u0430\u0437\u043c\u0435\u0440 \u0432\u043d\u0443\u0442\u0440\u0438 \u0440\u0430\u0437\u0440\u0435\u0448\u0451\u043d\u043d\u043e\u0433\u043e \u0434\u0438\u0430\u043f\u043e\u0437\u043e\u043d\u0430 \u043e\u0442 1x1 \u0434\u043e @dimensions.","%filename is not an image.":"\u0424\u0430\u0439\u043b %filename \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c.","Do you want to refresh the current directory?":"\u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u043f\u0430\u043f\u043a\u0443?","Delete selected files?":"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b?","Please select a thumbnail.":"\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043c\u0438\u043d\u0438\u0430\u0442\u044e\u0440\u0443.","You must select at least %num files.":"\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 %num \u0444\u0430\u0439\u043b\u043e\u0432.","You can not perform this operation.":"\u0412\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u044d\u0442\u0443 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e.","Insert file":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0444\u0430\u0439\u043b","Change view":"\u0421\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0438\u0434","1 hour":"@count \u0447\u0430\u0441","@count hours":"@count \u0447\u0430\u0441\u0430","Available tokens":"\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0442\u043e\u043a\u0435\u043d\u044b","Insert this token into your form":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0442\u043e\u043a\u0435\u043d \u0432 \u0432\u0430\u0448\u0443 \u0444\u043e\u0440\u043c\u0443","First click a text field to insert your tokens into.":"\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043a\u043b\u0438\u043a\u043d\u0438\u0442\u0435 \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0435 \u043f\u043e\u043b\u0435, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c\u0442\u043e\u043a\u0435\u043d\u044b.","Loading token browser...":"\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u0442\u043e\u043a\u0435\u043d\u043e\u0432...","Automatic alias":"\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u0438\u043d\u043e\u043d\u0438\u043c","Received an invalid response from the server.":"\u0421 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d \u043d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442.","No flags":"\u041d\u0435\u0442 \u0444\u043b\u0430\u0433\u043e\u0432","Jun":"\u0438\u044e\u043d","Select None":"\u0421\u043d\u044f\u0442\u044c \u0432\u044b\u0431\u043e\u0440","Select All":"\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0435","1 min":"@count \u043c\u0438\u043d.","@count min":"@count \u043c\u0438\u043d.","Pause":"\u041f\u0430\u0443\u0437\u0430","Internal server error. Please see server or PHP logs for error information.":"\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044f\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043b\u043e\u0433 \u043e\u0448\u0438\u0431\u043e\u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438\u043b\u0438 PHP.","@count weeks":"@count \u043d\u0435\u0434\u0435\u043b\u0438","Resume":"\u
1041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c","Saving vote...":"\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0433\u043e\u043b\u043e\u0441\u0430...","1 month":"@count \u043c\u0435\u0441\u044f\u0446","Breadcrumbs":"\u0421\u0442\u0440\u043e\u043a\u0430 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438","Using defaults":"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e","@count months":"@count \u043c\u0435\u0441\u044f\u0446\u0430","Meta":"Meta","Inclusion: @value":"\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435: @value","Priority: @value":"\u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442: @value","List additional actions":"\u0421\u043f\u0438\u0441\u043e\u043a \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439","1 year":"@count \u0433\u043e\u0434","New":"\u041d\u043e\u0432\u043e\u0435","@count years":"@count \u0433\u043e\u0434\u0430","Recent":"\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439","No results":"\u041d\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432","clear":"\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c","Modules installed within the last week.":"\u041c\u043e\u0434\u0443\u043b\u0438, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0437\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u043d\u0435\u0434\u0435\u043b\u044e.","No modules added within the last week.":"\u041d\u0435\u0442 \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0437\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u043d\u0435\u0434\u0435\u043b\u044e.","Modules enabled\/disabled within the last week.":"\u041c\u043e\u0434\u0443\u043b\u0438, \u0432\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u044b\u0435\/\u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0435 \u0437\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u043d\u0435\u0434\u0435\u043b\u044e.","No modules were enabled or disabled within the last week.":"\u041d\u0435\u0442 \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0438\u043b\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u043d\u0435\u0434\u0435\u043b\u0438.","@enabled of @total":"@enabled \u0438\u0437 @total","Next page":"\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430","Previous page":"\u2190"}} };
2;/*})'"*/;/*})'"*/
3/*!
4	Colorbox 1.6.4
5	license: MIT
6	http://www.jacklmoore.com/colorbox
7*/
8(function(t,e,i){function n(i,n,o){var r=e.createElement(i);return n&&(r.id=Z+n),o&&(r.style.cssText=o),t(r)}function o(){return i.innerHeight?i.innerHeight:t(i).height()}function r(e,i){i!==Object(i)&&(i={}),this.cache={},this.el=e,this.value=function(e){var n;return void 0===this.cache[e]&&(n=t(this.el).attr("data-cbox-"+e),void 0!==n?this.cache[e]=n:void 0!==i[e]?this.cache[e]=i[e]:void 0!==X[e]&&(this.cache[e]=X[e])),this.cache[e]},this.get=function(e){var i=this.value(e);return t.isFunction(i)?i.call(this.el,this):i}}function h(t){var e=W.length,i=(A+t)%e;return 0>i?e+i:i}function a(t,e){return Math.round((/%/.test(t)?("x"===e?E.width():o())/100:1)*parseInt(t,10))}function s(t,e){return t.get("photo")||t.get("photoRegex").test(e)}function l(t,e){return t.get("retinaUrl")&&i.devicePixelRatio>1?e.replace(t.get("photoRegex"),t.get("retinaSuffix")):e}function d(t){"contains"in x[0]&&!x[0].contains(t.target)&&t.target!==v[0]&&(t.stopPropagation(),x.focus())}function c(t){c.str!==t&&(x.add(v).removeClass(c.str).addClass(t),c.str=t)}function g(e){A=0,e&&e!==!1&&"nofollow"!==e?(W=t("."+te).filter(function(){var i=t.data(this,Y),n=new r(this,i);return n.get("rel")===e}),A=W.index(_.el),-1===A&&(W=W.add(_.el),A=W.length-1)):W=t(_.el)}function u(i){t(e).trigger(i),ae.triggerHandler(i)}function f(i){var o;if(!G){if(o=t(i).data(Y),_=new r(i,o),g(_.get("rel")),!U){U=$=!0,c(_.get("
8className")),x.css({visibility:"hidden",display:"block",opacity:""}),I=n(se,"LoadedContent","width:0; height:0; overflow:hidden; visibility:hidden"),b.css({width:"",height:""}).append(I),j=T.height()+k.height()+b.outerHeight(!0)-b.height(),D=C.width()+H.width()+b.outerWidth(!0)-b.width(),N=I.outerHeight(!0),z=I.outerWidth(!0);var h=a(_.get("initialWidth"),"x"),s=a(_.get("initialHeight"),"y"),l=_.get("maxWidth"),f=_.get("maxHeight");_.w=Math.max((l!==!1?Math.min(h,a(l,"x")):h)-z-D,0),_.h=Math.max((f!==!1?Math.min(s,a(f,"y")):s)-N-j,0),I.css({width:"",height:_.h}),J.position(),u(ee),_.get("onOpen"),O.add(F).hide(),x.focus(),_.get("trapFocus")&&e.addEventListener&&(e.addEventListener("focus",d,!0),ae.one(re,function(){e.removeEventListener("focus",d,!0)})),_.get("returnFocus")&&ae.one(re,function(){t(_.el).focus()})}var p=parseFloat(_.get("opacity"));v.css({opacity:p===p?p:"",cursor:_.get("overlayClose")?"pointer":"",visibility:"visible"}).show(),_.get("closeButton")?B.html(_.get("close")).appendTo(b):B.appendTo("<div/>"),w()}}function p(){x||(V=!1,E=t(i),x=n(se).attr({id:Y,"class":t.support.opacity===!1?Z+"IE":"",role:"dialog",tabindex:"-1"}).hide(),v=n(se,"Overlay").hide(),L=t([n(se,"LoadingOverlay")[0],n(se,"LoadingGraphic")[0]]),y=n(se,"Wrapper"),b=n(se,"Content").append(F=n(se,"Title"),R=n(se,"Current"),P=t('<button type="button"/>').attr({id:Z+"Previous"}),K=t('<button type="button"/>').attr({id:Z+"Next"}),S=t('<button type="button"/>').attr({id:Z+"Slideshow"}),L),B=t('<button type="button"/>').attr({id:Z+"Close"}),y.append(n(se).append(n(se,"TopLeft"),T=n(se,"TopCenter"),n(se,"TopRight")),n(se,!1,"clear:left").append(C=n(se,"MiddleLeft"),b,H=n(se,"MiddleRight")),n(se,!1,"clear:left").append(n(se,"BottomLeft"),k=n(se,"BottomCenter"),n(se,"BottomRight"))).find("div div").css({"float":"left"}),M=n(se,!1,"position:absolute; width:9999px; visibility:hidden; display:none; max-width:none;"),O=K.add(P).add(R).add(S)),e.body&&!x.parent().length&&t(e.body).append(v,x.append(y,M))}function m(){function i(t){t.which>1||t.shiftKey||t.altKey||t.metaKey||t.ctrlKey||(t.preventDefault(),f(this))}return x?(V||(V=!0,K.click(function(){J.next()}),P.click(function(){J.prev()}),B.click(function(){J.close()}),v.click(function(){_.get("overlayClose")&&J.close()}),t(e).bind("keydown."+Z,function(t){var e=t.keyCode;U&&_.get("escKey")&&27===e&&(t.preventDefault(),J.close()),U&&_.get("arrowKey")&&W[1]&&!t.altKey&&(37===e?(t.preventDefault(),P.click()):39===e&&(t.preventDefault(),K.click()))}),t.isFunction(t.fn.on)?t(e).on("click."+Z,"."+te,i):t("."+te).live("click."+Z,i)),!0):!1}function w(){var e,o,r,h=J.prep,d=++le;if($=!0,q=!1,u(he),u(ie),_.get("onLoad"),_.h=_.get("height")?a(_.get("height"),"y")-N-j:_.get("innerHeight")&&a(_.get("innerHeight"),"y"),_.w=_.get("width")?a(_.get("width"),"x")-z-D:_.get("innerWidth")&&a(_.get("innerWidth"),"x"),_.mw=_.w,_.mh=_.h,_.get("maxWidth")&&(_.mw=a(_.get("maxWidth"),"x")-z-D,_.mw=_.w&&_.w<_.mw?_.w:_.mw),_.get("maxHeight")&&(_.mh=a(_.get("maxHeight"),"y")-N-j,_.mh=_.h&&_.h<_.mh?_.h:_.mh),e=_.get("href"),Q=setTimeout(function(){L.show()},100),_.get("inline")){var c=t(e).eq(0);r=t("<div>").hide().insertBefore(c),ae.one(he,function(){r.replaceWith(c)}),h(c)}else _.get("iframe")?h(" "):_.get("html")?h(_.get("html")):s(_,e)?(e=l(_,e),q=_.get("createImg"),t(q).addClass(Z+"Photo").bind("error."+Z,function(){h(n(se,"Error").html(_.get("imgError")))}).one("load",function(){d===le&&setTimeout(function(){var e;_.get("retinaImage")&&i.devicePixelRatio>1&&(q.height=q.height/i.devicePixelRatio,q.width=q.width/i.devicePixelRatio),_.get("scalePhotos")&&(o=function(){q.height-=q.height*e,q.width-=q.width*e},_.mw&&q.width>_.mw&&(e=(q.width-_.mw)/q.width,o()),_.mh&&q.height>_.mh&&(e=(q.height-_.mh)/q.height,o())),_.h&&(q.style.marginTop=Math.max(_.mh-q.height,0)/2+"px"),W[1]&&(_.get("loop")||W[A+1])&&(q.style.cursor="pointer",t(q).bind("click."+Z,function(){J.next()})),q.style.width=q.width+"px",q.style.height=q.height+"px",h(q)},1)}),q.src=e):e&&M.load(e,_.get("data"),function(e,i){d===le&&h("error"===i?n(se,"Error").html(_.get("xhrError")):t(this).contents())})}var v,x,y,b,T,C,H,k,W,E,I,M,L,F,R,S,K,P,B,O,_,j,D,N,z,A,q,U,$,G,Q,J,V,X={html:!1,photo:!1,iframe:!1,inline:!1,transition:"elastic",speed:300,fadeOut:300,width:!1,initialWidth:"600",innerWidth:!1,maxWidth:!1,height:!1,initialHeight:"450",innerHe
vendor: 3,812 bytes, line 8
8ight:!1,maxHeight:!1,scalePhotos:!0,scrolling:!0,opacity:.9,preloading:!0,className:!1,overlayClose:!0,escKey:!0,arrowKey:!0,top:!1,bottom:!1,left:!1,right:!1,fixed:!1,data:void 0,closeButton:!0,fastIframe:!0,open:!1,reposition:!0,loop:!0,slideshow:!1,slideshowAuto:!0,slideshowSpeed:2500,slideshowStart:"start slideshow",slideshowStop:"stop slideshow",photoRegex:/\.(gif|png|jp(e|g|eg)|bmp|ico|webp|jxr|svg)((#|\?).*)?$/i,retinaImage:!1,retinaUrl:!1,retinaSuffix:"@2x.$1",current:"image {current} of {total}",previous:"previous",next:"next",close:"close",xhrError:"This content failed to load.",imgError:"This image failed to load.",returnFocus:!0,trapFocus:!0,onOpen:!1,onLoad:!1,onComplete:!1,onCleanup:!1,onClosed:!1,rel:function(){return this.rel},href:function(){return t(this).attr("href")},title:function(){return this.title},createImg:function(){var e=new Image,i=t(this).data("cbox-img-attrs");return"object"==typeof i&&t.each(i,function(t,i){e[t]=i}),e},createIframe:function(){var i=e.createElement("iframe"),n=t(this).data("cbox-iframe-attrs");return"object"==typeof n&&t.each(n,function(t,e){i[t]=e}),"frameBorder"in i&&(i.frameBorder=0),"allowTransparency"in i&&(i.allowTransparency="true"),i.name=(new Date).getTime(),i.allowFullscreen=!0,i}},Y="colorbox",Z="cbox",te=Z+"Element",ee=Z+"_open",ie=Z+"_load",ne=Z+"_complete",oe=Z+"_cleanup",re=Z+"_closed",he=Z+"_purge",ae=t("<a/>"),se="div",le=0,de={},ce=function(){function t(){clearTimeout(h)}function e(){(_.get("loop")||W[A+1])&&(t(),h=setTimeout(J.next,_.get("slideshowSpeed")))}function i(){S.html(_.get("slideshowStop")).unbind(s).one(s,n),ae.bind(ne,e).bind(ie,t),x.removeClass(a+"off").addClass(a+"on")}function n(){t(),ae.unbind(ne,e).unbind(ie,t),S.html(_.get("slideshowStart")).unbind(s).one(s,function(){J.next(),i()}),x.removeClass(a+"on").addClass(a+"off")}function o(){r=!1,S.hide(),t(),ae.unbind(ne,e).unbind(ie,t),x.removeClass(a+"off "+a+"on")}var r,h,a=Z+"Slideshow_",s="click."+Z;return function(){r?_.get("slideshow")||(ae.unbind(oe,o),o()):_.get("slideshow")&&W[1]&&(r=!0,ae.one(oe,o),_.get("slideshowAuto")?i():n(),S.show())}}();t[Y]||(t(p),J=t.fn[Y]=t[Y]=function(e,i){var n,o=this;return e=e||{},t.isFunction(o)&&(o=t("<a/>"),e.open=!0),o[0]?(p(),m()&&(i&&(e.onComplete=i),o.each(function(){var i=t.data(this,Y)||{};t.data(this,Y,t.extend(i,e))}).addClass(te),n=new r(o[0],e),n.get("open")&&f(o[0])),o):o},J.position=function(e,i){function n(){T[0].style.width=k[0].style.width=b[0].style.width=parseInt(x[0].style.width,10)-D+"px",b[0].style.height=C[0].style.height=H[0].style.height=parseInt(x[0].style.height,10)-j+"px"}var r,h,s,l=0,d=0,c=x.offset();if(E.unbind("resize."+Z),x.css({top:-9e4,left:-9e4}),h=E.scrollTop(),s=E.scrollLeft(),_.get("fixed")?(c.top-=h,c.left-=s,x.css({position:"fixed"})):(l=h,d=s,x.css({position:"absolute"})),d+=_.get("right")!==!1?Math.max(E.width()-_.w-z-D-a(_.get("right"),"x"),0):_.get("left")!==!1?a(_.get("left"),"x"):Math.round(Math.max(E.width()-_.w-z-D,0)/2),l+=_.get("bottom")!==!1?Math.max(o()-_.h-N-j-a(_.get("bottom"),"y"),0):_.get("top")!==!1?a(_.get("top"),"y"):Math.round(Math.max(o()-_.h-N-j,0)/2),x.css({top:c.top,left:c.left,visibility:"visible"}),y[0].style.width=y[0].style.height="9999px",r={width:_.w+z+D,height:_.h+N+j,top:l,left:d},e){var g=0;t.each(r,function(t){return r[t]!==de[t]?(g=e,void 0):void 0}),e=g}de=r,e||x.css(r),x.dequeue().animate(r,{duration:e||0,complete:function(){n(),$=!1,y[0].style.width=_.w+z+D+"px",y[0].style.height=_.h+N+j+"px",_.get("reposition")&&setTimeout(function(){E.bind("resize."+Z,J.position)},1),t.isFunction(i)&&i()},step:n})},J.resize=function(t){var e;U&&(t=t||{},t.width&&(_.w=a(t.width,"x")-z-D),t.innerWidth&&(_.w=a(t.innerWidth,"x")),I.css({width:_.w}),t.height&&(_.h=a(t.height,"y")-N-j),t.innerHeight&&(_.h=a(t.innerHe
8ight,"y")),t.innerHeight||t.height||(e=I.scrollTop(),I.css({height:"auto"}),_.h=I.height()),I.css({height:_.h}),e&&I.scrollTop(e),J.position("none"===_.get("transition")?0:_.get("speed")))},J.prep=function(i){function o(){return _.w=_.w||I.width(),_.w=_.mw&&_.mw<_.w?_.mw:_.w,_.w}function a(){return _.h=_.h||I.height(),_.h=_.mh&&_.mh<_.h?_.mh:_.h,_.h}if(U){var d,g="none"===_.get("transition")?0:_.get("speed");I.remove(),I=n(se,"LoadedContent").append(i),I.hide().appendTo(M.show()).css({width:o(),overflow:_.get("scrolling")?"auto":"hidden"}).css({height:a()}).prependTo(b),M.hide(),t(q).css({"float":"none"}),c(_.get("className")),d=function(){function i(){t.support.opacity===!1&&x[0].style.removeAttribute("filter")}var n,o,a=W.length;U&&(o=function(){clearTimeout(Q),L.hide(),u(ne),_.get("onComplete")},F.html(_.get("title")).show(),I.show(),a>1?("string"==typeof _.get("current")&&R.html(_.get("current").replace("{current}",A+1).replace("{total}",a)).show(),K[_.get("loop")||a-1>A?"show":"hide"]().html(_.get("next")),P[_.get("loop")||A?"show":"hide"]().html(_.get("previous")),ce(),_.get("preloading")&&t.each([h(-1),h(1)],function(){var i,n=W[this],o=new r(n,t.data(n,Y)),h=o.get("href");h&&s(o,h)&&(h=l(o,h),i=e.createElement("img"),i.src=h)})):O.hide(),_.get("iframe")?(n=_.get("createIframe"),_.get("scrolling")||(n.scrolling="no"),t(n).attr({src:_.get("href"),"class":Z+"Iframe"}).one("load",o).appendTo(I),ae.one(he,function(){n.src="//about:blank"}),_.get("fastIframe")&&t(n).trigger("load")):o(),"fade"===_.get("transition")?x.fadeTo(g,1,i):i())},"fade"===_.get("transition")?x.fadeTo(g,0,function(){J.position(0,d)}):J.position(g,d)}},J.next=function(){!$&&W[1]&&(_.get("loop")||W[A+1])&&(A=h(1),f(W[A]))},J.prev=function(){!$&&W[1]&&(_.get("loop")||A)&&(A=h(-1),f(W[A]))},J.close=function(){U&&!G&&(G=!0,U=!1,u(oe),_.get("onCleanup"),E.unbind("."+Z),v.fadeTo(_.get("fadeOut")||0,0),x.stop().fadeTo(_.get("fadeOut")||0,0,function(){x.hide(),v.hide(),u(he),I.remove(),setTimeout(function(){G=!1,u(re),_.get("onClosed")},1)}))},J.remove=function(){x&&(x.stop(),t[Y].close(),x.stop(!1,!0).remove(),v.remove(),G=!1,x=null,t("."+te).removeData(Y).removeClass(te),t(e).unbind("click."+Z).unbind("keydown."+Z))},J.element=function(){return t(_.el)},J.settings=X)})(jQuery,document,window);
9;/*})'"*/;/*})'"*/
10/*! @license DOMPurify 2.3.10 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/2.3.10/LICENSE */
11!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).DOMPurify=t()}(this,(function(){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,n){return(t=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,n)}function n(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}function r(e,o,a){return(r=n()?Reflect.construct:function(e,n,r){var o=[null];o.push.apply(o,n);var a=new(Function.bind.apply(e,o));return r&&t(a,r.prototype),a}).apply(null,arguments)}function o(e){return function(e){if(Array.isArray(e))return a(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return a(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return a(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var i=Object.hasOwnProperty,l=Object.setPrototypeOf,c=Object.isFrozen,u=Object.getPrototypeOf,s=Object.getOwnPropertyDescriptor,m=Object.freeze,f=Object.seal,p=Object.create,d="undefined"!=typeof Reflect&&Reflect,h=d.apply,g=d.construct;h||(h=function(e,t,n){return e.apply(t,n)}),m||(m=function(e){return e}),f||(f=function(e){return e}),g||(g=function(e,t){return r(e,o(t))});var y,b=_(Array.prototype.forEach),v=_(Array.prototype.pop),T=_(Array.prototype.push),N=_(String.prototype.toLowerCase),A=_(String.prototype.match),E=_(String.prototype.replace),w=_(String.prototype.indexOf),x=_(String.prototype.trim),S=_(RegExp.prototype.test),k=(y=TypeError,function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return g(y,t)});function _(e){return function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return h(e,t,r)}}function O(e,t,n){n=n||N,l&&l(e,null);for(var r=t.length;r--;){var o=t[r];if("string"==typeof o){var a=n(o);a!==o&&(c(t)||(t[r]=a),o=a)}e[o]=!0}return e}function D(e){var t,n=p(null);for(t in e)h(i,e,[t])&&(n[t]=e[t]);return n}function R(e,t){for(;null!==e;){var n=s(e,t);if(n){if(n.get)return _(n.get);if("function"==typeof n.value)return _(n.value)}e=u(e)}return function(e){return console.warn("fallback value for",e),null}}var L=m(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),M=m(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),C=m(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),I=m(["animate","color-profile","cursor","discard","fedropshadow","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),F=m(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover"]),H=m(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),U=m(["#text"]),z=m(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","
11spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),j=m(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),B=m(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),P=m(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),G=f(/\{\{[\w\W]*|[\w\W]*\}\}/gm),W=f(/<%[\w\W]*|[\w\W]*%>/gm),q=f(/^data-[\-\w.\u00B7-\uFFFF]/),Y=f(/^aria-[\-\w]+$/),K=f(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),V=f(/^(?:\w+script|data):/i),$=f(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),X=f(/^html$/i),Z=function(){return"undefined"==typeof window?null:window},J=function(t,n){if("object"!==e(t)||"function"!=typeof t.createPolicy)return null;var r=null,o="data-tt-policy-suffix";n.currentScript&&n.currentScript.hasAttribute(o)&&(r=n.currentScript.getAttribute(o));var a="dompurify"+(r?"#"+r:"");try{return t.createPolicy(a,{createHTML:function(e){return e},createScriptURL:function(e){return e}})}catch(e){return console.warn("TrustedTypes policy "+a+" could not be created."),null}};return function t(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Z(),r=function(e){return t(e)};if(r.version="2.3.10",r.removed=[],!n||!n.document||9!==n.document.nodeType)return r.isSupported=!1,r;var a=n.document,i=n.document,l=n.DocumentFragment,c=n.HTMLTemplateElement,u=n.Node,s=n.Element,f=n.NodeFilter,p=n.NamedNodeMap,d=void 0===p?n.NamedNodeMap||n.MozNamedAttrMap:p,h=n.HTMLFormElement,g=n.DOMParser,y=n.trustedTypes,_=s.prototype,Q=R(_,"cloneNode"),ee=R(_,"nextSibling"),te=R(_,"childNodes"),ne=R(_,"parentNode");if("function"==typeof c){var re=i.createElement("template");re.content&&re.content.ownerDocument&&(i=re.content.ownerDocument)}var oe=J(y,a),ae=oe?oe.createHTML(""):"",ie=i,le=ie.implementation,ce=ie.createNodeIterator,ue=ie.createDocumentFragment,se=ie.getElementsByTagName,me=a.importNode,fe={};try{fe=D(i).documentMode?i.documentMode:{}}catch(e){}var pe={};r.isSupported="function"==typeof ne&&le&&void 0!==le.createHTMLDocument&&9!==fe;var de,he,ge=G,ye=W,be=q,ve=Y,Te=V,Ne=$,Ae=K,Ee=null,we=O({},[].concat(o(L),o(M),o(C),o(F),o(U))),xe=null,Se=O({},[].concat(o(z),o(j),o(B),o(P))),ke=Object.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),_e=null,Oe=null,De=!0,Re=!0,Le=!1,Me=!1,Ce=!1,Ie=!1,Fe=!1,He=!1,Ue=!1,ze=!1,je=!0,Be=!0,Pe=!1,Ge={},We=null,qe=O({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),Ye=null,Ke=O({},["audio","video","img","source","image","track"]),Ve=null,$e=O({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Xe="http://www.w3.org/1998/Math/MathML",Ze="http://www.w3.org/2000/svg",Je="http://www.w3.org/1999/xhtml",Qe=Je,et=!1,tt=["application/xhtml+xml","text/html"],nt="text/html",rt=null,ot=i.createElement("form"),at=function(e){return e instanceof RegExp||e instanceof Function},it=function(t){rt&&rt===t||(t&&"object"===e(t)||(t={}
vendor: 5,000 bytes, line 11
11),t=D(t),de=de=-1===tt.indexOf(t.PARSER_MEDIA_TYPE)?nt:t.PARSER_MEDIA_TYPE,he="application/xhtml+xml"===de?function(e){return e}:N,Ee="ALLOWED_TAGS"in t?O({},t.ALLOWED_TAGS,he):we,xe="ALLOWED_ATTR"in t?O({},t.ALLOWED_ATTR,he):Se,Ve="ADD_URI_SAFE_ATTR"in t?O(D($e),t.ADD_URI_SAFE_ATTR,he):$e,Ye="ADD_DATA_URI_TAGS"in t?O(D(Ke),t.ADD_DATA_URI_TAGS,he):Ke,We="FORBID_CONTENTS"in t?O({},t.FORBID_CONTENTS,he):qe,_e="FORBID_TAGS"in t?O({},t.FORBID_TAGS,he):{},Oe="FORBID_ATTR"in t?O({},t.FORBID_ATTR,he):{},Ge="USE_PROFILES"in t&&t.USE_PROFILES,De=!1!==t.ALLOW_ARIA_ATTR,Re=!1!==t.ALLOW_DATA_ATTR,Le=t.ALLOW_UNKNOWN_PROTOCOLS||!1,Me=t.SAFE_FOR_TEMPLATES||!1,Ce=t.WHOLE_DOCUMENT||!1,He=t.RETURN_DOM||!1,Ue=t.RETURN_DOM_FRAGMENT||!1,ze=t.RETURN_TRUSTED_TYPE||!1,Fe=t.FORCE_BODY||!1,je=!1!==t.SANITIZE_DOM,Be=!1!==t.KEEP_CONTENT,Pe=t.IN_PLACE||!1,Ae=t.ALLOWED_URI_REGEXP||Ae,Qe=t.NAMESPACE||Je,t.CUSTOM_ELEMENT_HANDLING&&at(t.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(ke.tagNameCheck=t.CUSTOM_ELEMENT_HANDLING.tagNameCheck),t.CUSTOM_ELEMENT_HANDLING&&at(t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(ke.attributeNameCheck=t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),t.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(ke.allowCustomizedBuiltInElements=t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Me&&(Re=!1),Ue&&(He=!0),Ge&&(Ee=O({},o(U)),xe=[],!0===Ge.html&&(O(Ee,L),O(xe,z)),!0===Ge.svg&&(O(Ee,M),O(xe,j),O(xe,P)),!0===Ge.svgFilters&&(O(Ee,C),O(xe,j),O(xe,P)),!0===Ge.mathMl&&(O(Ee,F),O(xe,B),O(xe,P))),t.ADD_TAGS&&(Ee===we&&(Ee=D(Ee)),O(Ee,t.ADD_TAGS,he)),t.ADD_ATTR&&(xe===Se&&(xe=D(xe)),O(xe,t.ADD_ATTR,he)),t.ADD_URI_SAFE_ATTR&&O(Ve,t.ADD_URI_SAFE_ATTR,he),t.FORBID_CONTENTS&&(We===qe&&(We=D(We)),O(We,t.FORBID_CONTENTS,he)),Be&&(Ee["#text"]=!0),Ce&&O(Ee,["html","head","body"]),Ee.table&&(O(Ee,["tbody"]),delete _e.tbody),m&&m(t),rt=t)},lt=O({},["mi","mo","mn","ms","mtext"]),ct=O({},["foreignobject","desc","title","annotation-xml"]),ut=O({},["title","style","font","a","script"]),st=O({},M);O(st,C),O(st,I);var mt=O({},F);O(mt,H);var ft=function(e){var t=ne(e);t&&t.tagName||(t={namespaceURI:Je,tagName:"template"});var n=N(e.tagName),r=N(t.tagName);return e.namespaceURI===Ze?t.namespaceURI===Je?"svg"===n:t.namespaceURI===Xe?"svg"===n&&("annotation-xml"===r||lt[r]):Boolean(st[n]):e.namespaceURI===Xe?t.namespaceURI===Je?"math"===n:t.namespaceURI===Ze?"math"===n&&ct[r]:Boolean(mt[n]):e.namespaceURI===Je&&(!(t.namespaceURI===Ze&&!ct[r])&&(!(t.namespaceURI===Xe&&!lt[r])&&(!mt[n]&&(ut[n]||!st[n]))))},pt=function(e){T(r.removed,{element:e});try{e.parentNode.removeChild(e)}catch(t){try{e.outerHTML=ae}catch(t){e.remove()}}},dt=function(e,t){try{T(r.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){T(r.removed,{attribute:null,from:t})}if(t.removeAttribute(e),"is"===e&&!xe[e])if(He||Ue)try{pt(t)}catch(e){}else try{t.setAttribute(e,"")}catch(e){}},ht=function(e){var t,n;if(Fe)e="<remove></remove>"+e;else{var r=A(e,/^[\r\n\t ]+/);n=r&&r[0]}"application/xhtml+xml"===de&&(e='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+e+"</body></html>");var o=oe?oe.createHTML(e):e;if(Qe===Je)try{t=(new g).parseFromString(o,de)}catch(e){}if(!t||!t.documentElement){t=le.createDocument(Qe,"template",null);try{t.documentElement.innerHTML=et?"":o}catch(e){}}var a=t.body||t.documentElement;return e&&n&&a.insertBefore(i.createTextNode(n),a.childNodes[0]||null),Qe===Je?se.call(t,Ce?"html":"body")[0]:Ce?t.documentElement:a},gt=function(e){return ce.call(e.ownerDocument||e,e,f.SHOW_ELEMENT|f.SHOW_COMMENT|f.SHOW_TEXT,null,!1)},yt=function(e){return e instanceof h&&("string"!=typeof e.nodeName||"string"!=typeof e.textContent||"function"!=typeof e.removeChild||!(e.attributes instanceof d)||"function"!=typeof e.removeAttribute||"function"!=typeof e.setAttribute||"string"!=typeof e.namespaceURI||"function"!=typeof e.insertBefore)},bt=function(t){return"object"===e(u)?t instanceof u:t&&"object"===e(t)&&"number"==typeof t.nodeType&&"string"==typeof t.nodeName},vt=function(e,t,n){pe[e]&&b(pe[e],(function(e){e.call(r,t,n,rt)}))},Tt=function(e){var t;if(vt("beforeSanitizeElements",e,null),yt(e))return pt(e),!0;if(S(/[\u0080-\uFFFF]/,e.nodeName))return pt(e),!0;var n=he(e.nodeName);if(vt("uponSanitizeElement",e,{tagName:n,allowedTags:Ee}),e.hasChildNodes()&&!bt(e.firstElementChild)&&(!bt(e.content)||!bt(e.content.firstElementChild))&&S(/<[/\w]/g,e.innerHTML)&&S(/<[/\w]/g,e.textContent))return pt(e),!0;if("select"===n&&S(/<template/i,e.innerHTML))return pt(e),!0;if(!Ee[n]||_e[n]){if(!_e[n]&&At(n)){if(ke.tagNameCheck instanceof RegExp&&S(ke.tagNameCheck,n))return!1;if(ke.tagNameCheck instanceof Function&&ke.tagNameCheck(n))return!1}if(Be&&!We[n]){var o=ne(e)||e.parentNode,a=te(e)||e.childNodes;if(a&&o)for(var i=a.length-1;i>=0;--i)o.insertBefore(Q(a[i],!0),ee(e))}return pt(e),!0}return e instanceof s&&!ft(e)?(pt(e),!0):"noscript"!==n&&"noembed"!==n||!S(/<\/no(script|embed)/i,e.innerHTML)?(Me&&3===e.n
11odeType&&(t=e.textContent,t=E(t,ge," "),t=E(t,ye," "),e.textContent!==t&&(T(r.removed,{element:e.cloneNode()}),e.textContent=t)),vt("afterSanitizeElements",e,null),!1):(pt(e),!0)},Nt=function(e,t,n){if(je&&("id"===t||"name"===t)&&(n in i||n in ot))return!1;if(Re&&!Oe[t]&&S(be,t));else if(De&&S(ve,t));else if(!xe[t]||Oe[t]){if(!(At(e)&&(ke.tagNameCheck instanceof RegExp&&S(ke.tagNameCheck,e)||ke.tagNameCheck instanceof Function&&ke.tagNameCheck(e))&&(ke.attributeNameCheck instanceof RegExp&&S(ke.attributeNameCheck,t)||ke.attributeNameCheck instanceof Function&&ke.attributeNameCheck(t))||"is"===t&&ke.allowCustomizedBuiltInElements&&(ke.tagNameCheck instanceof RegExp&&S(ke.tagNameCheck,n)||ke.tagNameCheck instanceof Function&&ke.tagNameCheck(n))))return!1}else if(Ve[t]);else if(S(Ae,E(n,Ne,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==w(n,"data:")||!Ye[e]){if(Le&&!S(Te,E(n,Ne,"")));else if(n)return!1}else;return!0},At=function(e){return e.indexOf("-")>0},Et=function(t){var n,o,a,i;vt("beforeSanitizeAttributes",t,null);var l=t.attributes;if(l){var c={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:xe};for(i=l.length;i--;){var u=n=l[i],s=u.name,m=u.namespaceURI;if(o="value"===s?n.value:x(n.value),a=he(s),c.attrName=a,c.attrValue=o,c.keepAttr=!0,c.forceKeepAttr=void 0,vt("uponSanitizeAttribute",t,c),o=c.attrValue,!c.forceKeepAttr&&(dt(s,t),c.keepAttr))if(S(/\/>/i,o))dt(s,t);else{Me&&(o=E(o,ge," "),o=E(o,ye," "));var f=he(t.nodeName);if(Nt(f,a,o)){if(oe&&"object"===e(y)&&"function"==typeof y.getAttributeType)if(m);else switch(y.getAttributeType(f,a)){case"TrustedHTML":o=oe.createHTML(o);break;case"TrustedScriptURL":o=oe.createScriptURL(o)}try{m?t.setAttributeNS(m,s,o):t.setAttribute(s,o),v(r.removed)}catch(e){}}}}vt("afterSanitizeAttributes",t,null)}},wt=function e(t){var n,r=gt(t);for(vt("beforeSanitizeShadowDOM",t,null);n=r.nextNode();)vt("uponSanitizeShadowNode",n,null),Tt(n)||(n.content instanceof l&&e(n.content),Et(n));vt("afterSanitizeShadowDOM",t,null)};return r.sanitize=function(t,o){var i,c,s,m,f;if((et=!t)&&(t="\x3c!--\x3e"),"string"!=typeof t&&!bt(t)){if("function"!=typeof t.toString)throw k("toString is not a function");if("string"!=typeof(t=t.toString()))throw k("dirty is not a string, aborting")}if(!r.isSupported){if("object"===e(n.toStaticHTML)||"function"==typeof n.toStaticHTML){if("string"==typeof t)return n.toStaticHTML(t);if(bt(t))return n.toStaticHTML(t.outerHTML)}return t}if(Ie||it(o),r.removed=[],"string"==typeof t&&(Pe=!1),Pe){if(t.nodeName){var p=he(t.nodeName);if(!Ee[p]||_e[p])throw k("root node is forbidden and cannot be sanitized in-place")}}else if(t instanceof u)1===(c=(i=ht("\x3c!----\x3e")).ownerDocument.importNode(t,!0)).nodeType&&"BODY"===c.nodeName||"HTML"===c.nodeName?i=c:i.appendChild(c);else{if(!He&&!Me&&!Ce&&-1===t.indexOf("<"))return oe&&ze?oe.createHTML(t):t;if(!(i=ht(t)))return He?null:ze?ae:""}i&&Fe&&pt(i.firstChild);for(var d=gt(Pe?t:i);s=d.nextNode();)3===s.nodeType&&s===m||Tt(s)||(s.content instanceof l&&wt(s.content),Et(s),m=s);if(m=null,Pe)return t;if(He){if(Ue)for(f=ue.call(i.ownerDocument);i.firstChild;)f.appendChild(i.firstChild);else f=i;return xe.shadowroot&&(f=me.call(a,f,!0)),f}var h=Ce?i.outerHTML:i.innerHTML;return Ce&&Ee["!doctype"]&&i.ownerDocument&&i.ownerDocument.doctype&&i.ownerDocument.doctype.name&&S(X,i.ownerDocument.doctype.name)&&(h="<!DOCTYPE "+i.ownerDocument.doctype.name+">\n"+h),Me&&(h=E(h,ge," "),h=E(h,ye," ")),oe&&ze?oe.createHTML(h):h},r.setConfig=function(e){it(e),Ie=!0},r.clearConfig=function(){rt=null,Ie=!1},r.isValidAttribute=function(e,t,n){rt||it({});var r=he(e),o=he(t);return Nt(r,o,n)},r.addHook=function(e,t){"function"==typeof t&&(pe[e]=pe[e]||[],T(pe[e],t))},r.removeHook=function(e){if(pe[e])return v(pe[e])},r.removeHooks=function(e){pe[e]&&(pe[e]=[])},r.removeAllHooks=function(){pe={}},r}()}));
12//# sourceMappingURL=purify.min.js.map
13;/*})'"*/;/*})'"*/
14/**
15 * @file
16 * Colorbox module init js.
17 */
18
19(function ($) {
20
21Drupal.behaviors.initColorbox = {
22  attach: function (context, settings) {
23    if (!$.isFunction($('a, area, input', context).colorbox) || typeof settings.colorbox === 'undefined') {
24      return;
25    }
26
27    if (settings.colorbox.mobiledetect && window.matchMedia) {
28      // Disable Colorbox for small screens.
29      var mq = window.matchMedia("(max-device-width: " + settings.colorbox.mobiledevicewidth + ")");
30      if (mq.matches) {
31        return;
32      }
33    }
34
35    // Use "data-colorbox-gallery" if set otherwise use "rel".
36    settings.colorbox.rel = function () {
37      if ($(this).data('colorbox-gallery')) {
38        return $(this).data('colorbox-gallery');
39      }
40      else {
41        return $(this).attr('rel');
42      }
43    };
44
45    $('.colorbox', context)
46      .once('init-colorbox').each(function(){
47        // Only images are supported for the "colorbox" class.
48        // The "photo" setting forces the href attribute to be treated as an image.
49        var extendParams = {
50          photo: true
51        };
52        // If a title attribute is supplied, sanitize it.
53        var title = $(this).attr('title');
54        if (title) {
55          extendParams.title = Drupal.colorbox.sanitizeMarkup(title);
56        }
57        $(this).colorbox($.extend({}, settings.colorbox, extendParams));
58      });
59
60    $(context).bind('cbox_complete', function () {
61      Drupal.attachBehaviors($('#cboxLoadedContent'));
62    });
63  }
64};
65
66// Create colorbox namespace if it doesn't exist.
67if (!Drupal.hasOwnProperty('colorbox')) {
68  Drupal.colorbox = {};
69}
70
71/**
72 * Global function to allow sanitizing captions and control strings.
73 *
74 * @param markup
75 *   String containing potential markup.
76 * @return @string
77 *  Sanitized string with potentially dangerous markup removed.
78 */
79Drupal.colorbox.sanitizeMarkup = function(markup) {
80  // If DOMPurify installed, allow some HTML. Otherwise, treat as plain text.
81  if (typeof DOMPurify !== 'undefined') {
82    var purifyConfig = {
83      ALLOWED_TAGS: [
84        'a',
85        'b',
86        'strong',
87        'i',
88        'em',
89        'u',
90        'cite',
91        'code',
92        'br'
93      ],
94      ALLOWED_ATTR: [
95        'href',
96        'hreflang',
97        'title',
98        'target'
99      ]
100    }
101    if (Drupal.settings.hasOwnProperty('dompurify_custom_config')) {
102      purifyConfig = Drupal.settings.dompurify_custom_config;
103    }
104    return DOMPurify.sanitize(markup, purifyConfig);
105  }
106  else {
107    return Drupal.checkPlain(markup);
108  }
109}
110
111})(jQuery);
112;/*})'"*/;/*})'"*/
113/**
114 * @file
115 * Colorbox module style js.
116 */
117
118(function ($) {
119
120Drupal.behaviors.initColorboxPlainStyle = {
121  attach: function (context, settings) {
122    $(context).bind('cbox_complete', function () {
123      // Make all the controls invisible.
124      $('#cboxCurrent, #cboxSlideshow, #cboxPrevious, #cboxNext', context).addClass('element-invisible');
125      // Replace "Close" with "×" and show.
126      $('#cboxClose', context).html('\327').addClass('cbox-close-plain');
127      // Hide empty title.
128      if ($('#cboxTitle:empty', context).length == true) {
129        $('#cboxTitle', context).hide();
130      }
131      $('#cboxLoadedContent', context).bind('mouseover', function () {
132        $('#cboxClose', context).animate({opacity: 1}, {queue: false, duration: "fast"});
133        if ($('#cboxTitle:empty', context).length == false) {
134          $('#cboxTitle', context).slideDown();
135        }
136      });
137      $('#cboxOverlay', context).bind('mouseover', function () {
138        $('#cboxClose', context).animate({opacity: 0}, {queue: false, duration: "fast"});
139        if ($('#cboxTitle:empty', context).length == false) {
140          $('#cboxTitle', context).slideUp();
141        }
142      });
143    });
144    $(context).bind('cbox_closed', function () {
145      $('#cboxClose', context).removeClass('cbox-close-plain');
146    });
147  }
148};
149
150})(jQuery);
151;/*})'"*/;/*})'"*/
152/**
153 * @file
154 * Colorbox module inline js.
155 */
156
157(function ($) {
158
159Drupal.behaviors.initColorboxInline = {
160  attach: function (context, settings) {
161    if (!$.isFunction($.colorbox) || typeof settings.colorbox === 'undefined') {
162      return;
163    }
164
165    if (settings.colorbox.mobiledetect && window.matchMedia) {
166      // Disable Colorbox for small screens.
167      var mq = window.matchMedia("(max-device-width: " + settings.colorbox.mobiledevicewidth + ")");
168      if (mq.matches) {
169        return;
170      }
171    }
172
173    $.urlParam = function(name, url){
174      if (name == 'fragment') {
175        var results = new RegExp('(#[^&#]*)').exec(url);
176      }
177      else {
178        var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(url);
179      }
180      if (!results) { return ''; }
181      return results[1] || '';
182    };
183    $('.colorbox-inline', context).once('init-colorbox-inline').colorbox({
184      transition:settings.colorbox.transition,
185      speed:settings.colorbox.speed,
186      opacity:settings.colorbox.opacity,
187      slideshow:settings.colorbox.slideshow,
188      slideshowAuto:settings.colorbox.slideshowAuto,
189      slideshowSpeed:settings.colorbox.slideshowSpeed,
190      slideshowStart:settings.colorbox.slideshowStart,
191      slideshowStop:settings.colorbox.slideshowStop,
192      current:settings.colorbox.current,
193      previous:settings.colorbox.previous,
194      next:settings.colorbox.next,
195      close:settings.colorbox.close,
196      overlayClose:settings.colorbox.overlayClose,
197      maxWidth:settings.colorbox.maxWidth,
198      maxHeight:settings.colorbox.maxHeight,
199      innerWidth:function(){
200        return $.urlParam('width', $(this).attr('href'));
201      },
202      innerHeight:function(){
203        return $.urlParam('height', $(this).attr('href'));
204      },
205      title:function(){
206        return Drupal.colorbox.sanitizeMarkup(
207          decodeURIComponent($.urlParam('title', $(this).attr('href'))));
208      },
209      iframe:function(){
210        return $.urlParam('iframe', $(this).attr('href'));
211      },
212      inline:function(){
213        return $.urlParam('inline', $(this).attr('href'));
214      },
215      href:function(){
216        return $.urlParam('fragment', $(this).attr('href'));
217      }
218    });
219  }
220};
221
222})(jQuery);
223;/*})'"*/;/*})'"*/
224(function($){
225/**
226 * Toggle the visibility of the scroll to top link.
227 */
228 
229Drupal.behaviors.scroll_to_top = {
230  attach: function (context, settings) {
231	// append  back to top link top body if it is not
232	var exist= jQuery('#back-top').length; // exist = 0 if element doesn't exist
233	if(exist == 0){ // this test is for fixing the ajax bug 
234		$("body").append("<p id='back-top'><a href='#top'><span id='button'></span><span id='link'>" + settings.scroll_to_top.label + "</span></a></p>");
235	}
236	// Preview function
237	$("input").change(function () {
238		// building the style for preview
239		var style="<style>#scroll-to-top-prev-container #back-top-prev span#button-prev{ background-color:"+$("#edit-scroll-to-top-bg-color-out").val()+";} #scroll-to-top-prev-container #back-top-prev span#button-prev:hover{ background-color:"+$("#edit-scroll-to-top-bg-color-hover").val()+" }</style>"
240		// building the html content of preview
241		var html="<p id='back-top-prev' style='position:relative;'><a href='#top'><span id='button-prev'></span><span id='link'>";
242		// if label enabled display it
243		if($("#edit-scroll-to-top-display-text").attr('checked')){
244		html+=$("#edit-scroll-to-top-label").val();
245		}
246		html+="</span></a></p>";
247		// update the preview
248		$("#scroll-to-top-prev-container").html(style+html);
249	});
250	$("#back-top").hide();
251	$(function () {
252		$(window).scroll(function () {
253		// Adding IE8 support
254		  var scrollTop = 0;
255		  if (document.documentElement && document.documentElement.scrollTop) {
256			scrollTop = document.documentElement.scrollTop;
257		  }
258      if ($(this).scrollTop() > 100 || scrollTop > 100) {
259				$('#back-top').fadeIn();
260			} else {
261				$('#back-top').fadeOut();
262			}
263		});
264
265		// scroll body to 0px on click
266		$('#back-top a').click(function () {
267			$('body,html').animate({
268				scrollTop: 0
269			}, 800);
270			return false;
271		});
272	});
273	}
274};
275})(jQuery);
276;/*})'"*/;/*})'"*/
277/**
278 * @file
279 *
280 * Fivestar JavaScript behaviors integration.
281 */
282
283/**
284 * Create a degradeable star rating interface out of a simple form structure.
285 *
286 * Originally based on the Star Rating jQuery plugin by Wil Stuckey:
287 * http://sandbox.wilstuckey.com/jquery-ratings/
288 */
289(function($){ // Create local scope.
290
291Drupal.behaviors.fivestar = {
292  attach: function (context) {
293    $(context).find('div.fivestar-form-item').once('fivestar', function() {
294      var $this = $(this);
295      var $container = $('<div class="fivestar-widget clearfix"></div>');
296      var $select = $('select', $this);
297
298      // Setup the cancel button
299      var $cancel = $('option[value="0"]', $this);
300      if ($cancel.length) {
301        $('<div class="cancel"><a href="#0" title="' + $cancel.text() + '">' + $cancel.text() + '</a></div>')
302          .appendTo($container);
303      }
304
305      // Setup the rating buttons
306      var $options = $('option', $this).not('[value="-"], [value="0"]');
307      var index = -1;
308      $options.each(function(i, element) {
309        var classes = 'star-' + (i+1);
310        classes += (i + 1) % 2 == 0 ? ' even' : ' odd';
311        classes += i == 0 ? ' star-first' : '';
312        classes += i + 1 == $options.length ? ' star-last' : '';
313        $('<div class="star"><a href="#' + element.value + '" title="' + element.text + '">' + element.text + '</a></div>')
314          .addClass(classes)
315          .appendTo($container);
316        if (element.value == $select.val()) {
317          index = i + 1;
318        }
319      });
320
321      if (index != -1) {
322        $container.find('.star').slice(0, index).addClass('on');
323      }
324      $container.addClass('fivestar-widget-' + ($options.length));
325      $container.find('a')
326        .bind('click', $this, Drupal.behaviors.fivestar.rate)
327        .bind('mouseover', $this, Drupal.behaviors.fivestar.hover);
328
329      $container.bind('mouseover mouseout', $this, Drupal.behaviors.fivestar.hover);
330
331      // Attach the new widget and hide the existing widget.
332      $select.after($container).css('display', 'none');
333
334      // Allow other modules to modify the widget.
335      Drupal.attachBehaviors($this);
336    });
337  },
338  rate: function(event) {
339    var $this = $(this);
340    var $widget = event.data;
341    var value = this.hash.replace('#', '');
342    $('select', $widget).val(value).change();
343    var $this_star = (value == 0) ? $this.parent().parent().find('.star') : $this.closest('.star');
344    $this_star.prevAll('.star').andSelf().addClass('on');
345    $this_star.nextAll('.star').removeClass('on');
346    if(value==0){
347      $this_star.removeClass('on');
348    }
349
350    event.preventDefault();
351  },
352  hover: function(event) {
353    var $this = $(this);
354    var $widget = event.data;
355    var $target = $(event.target);
356    var $stars = $('.star', $this);
357
358    if (event.type == 'mouseover') {
359      var index = $stars.index($target.parent());
360      $stars.each(function(i, element) {
361        if (i <= index) {
362          $(element).addClass('hover');
363        } else {
364          $(element).removeClass('hover');
365        }
366      });
367    } else {
368      $stars.removeClass('hover');
369    }
370  }
371};
372
373})(jQuery);
374;/*})'"*/;/*})'"*/
375/**
376 * @file
377 * Some basic behaviors and utility functions for Views.
378 */
379(function ($) {
380
381  Drupal.Views = {};
382
383  /**
384   * JQuery UI tabs, Views integration component.
385   */
386  Drupal.behaviors.viewsTabs = {
387    attach: function (context) {
388      if ($.viewsUi && $.viewsUi.tabs) {
389        $('#views-tabset').once('views-processed').viewsTabs({
390          selectedClass: 'active'
391        });
392      }
393
394      $('a.views-remove-link').once('views-processed').click(function(event) {
395        var id = $(this).attr('id').replace('views-remove-link-', '');
396        $('#views-row-' + id).hide();
397        $('#views-removed-' + id).get(0).checked = true;
398        event.preventDefault();
399      });
400      // Here is to handle display deletion
401      // (checking in the hidden checkbox and hiding out the row).
402      $('a.display-remove-link')
403        .addClass('display-processed')
404        .click(function() {
405          var id = $(this).attr('id').replace('display-remove-link-', '');
406          $('#display-row-' + id).hide();
407          $('#display-removed-' + id).get(0).checked = true;
408          return false;
409        });
410    }
411  };
412
413  /**
414   * Helper function to parse a querystring.
415   */
416  Drupal.Views.parseQueryString = function (query) {
417    var args = {};
418    var pos = query.indexOf('?');
419    if (pos != -1) {
420      query = query.substring(pos + 1);
421    }
422    var pairs = query.split('&');
423    for (var i in pairs) {
424      if (typeof(pairs[i]) == 'string') {
425        var pair = pairs[i].split('=');
426        // Ignore the 'q' path argument, if present.
427        if (pair[0] != 'q' && pair[1]) {
428          args[decodeURIComponent(pair[0].replace(/\+/g, ' '))] = decodeURIComponent(pair[1].replace(/\+/g, ' '));
429        }
430      }
431    }
432    return args;
433  };
434
435  /**
436   * Helper function to return a view's arguments based on a path.
437   */
438  Drupal.Views.parseViewArgs = function (href, viewPath) {
439    // Provide language prefix.
440    if (Drupal.settings.pathPrefix) {
441      var viewPath = Drupal.settings.pathPrefix + viewPath;
442    }
443    var returnObj = {};
444    var path = Drupal.Views.getPath(href);
445    // Ensure there is a correct path.
446    if (viewPath && path.substring(0, viewPath.length + 1) == viewPath + '/') {
447      var args = decodeURIComponent(path.substring(viewPath.length + 1, path.length));
448      returnObj.view_args = args;
449      returnObj.view_path = path;
450    }
451    return returnObj;
452  };
453
454  /**
455   * Strip off the protocol plus domain from an href.
456   */
457  Drupal.Views.pathPortion = function (href) {
458    // Remove e.g. http://example.com if present.
459    var protocol = window.location.protocol;
460    if (href.substring(0, protocol.length) == protocol) {
461      // 2 is the length of the '//' that normally follows the protocol.
462      href = href.substring(href.indexOf('/', protocol.length + 2));
463    }
464    return href;
465  };
466
467  /**
468   * Return the Drupal path portion of an href.
469   */
470  Drupal.Views.getPath = function (href) {
471    href = Drupal.Views.pathPortion(href);
472    href = href.substring(Drupal.settings.basePath.length, href.length);
473    // 3 is the length of the '?q=' added to the URL without clean URLs.
474    if (href.substring(0, 3) == '?q=') {
475      href = href.substring(3, href.length);
476    }
477    var chars = ['#', '?', '&'];
478    for (var i in chars) {
479      if (href.indexOf(chars[i]) > -1) {
480        href = href.substr(0, href.indexOf(chars[i]));
481      }
482    }
483    return href;
484  };
485
486})(jQuery);
487;/*})'"*/;/*})'"*/
488(function ($) {
489
490/**
491 * A progressbar object. Initialized with the given id. Must be inserted into
492 * the DOM afterwards through progressBar.element.
493 *
494 * method is the function which will perform the HTTP request to get the
495 * progress bar state. Either "GET" or "POST".
496 *
497 * e.g. pb = new progressBar('myProgressBar');
498 *      some_element.appendChild(pb.element);
499 */
500Drupal.progressBar = function (id, updateCallback, method, errorCallback) {
501  var pb = this;
502  this.id = id;
503  this.method = method || 'GET';
504  this.updateCallback = updateCallback;
505  this.errorCallback = errorCallback;
506
507  // The WAI-ARIA setting aria-live="polite" will announce changes after users
508  // have completed their current activity and not interrupt the screen reader.
509  this.element = $('<div class="progress" aria-live="polite"></div>').attr('id', id);
510  this.element.html('<div class="bar"><div class="filled"></div></div>' +
511                    '<div class="percentage"></div>' +
512                    '<div class="message">&nbsp;</div>');
513};
514
515/**
516 * Set the percentage and status message for the progressbar.
517 */
518Drupal.progressBar.prototype.setProgress = function (percentage, message) {
519  if (percentage >= 0 && percentage <= 100) {
520    $('div.filled', this.element).css('width', percentage + '%');
521    $('div.percentage', this.element).html(percentage + '%');
522  }
523  $('div.message', this.element).html(message);
524  if (this.updateCallback) {
525    this.updateCallback(percentage, message, this);
526  }
527};
528
529/**
530 * Start monitoring progress via Ajax.
531 */
532Drupal.progressBar.prototype.startMonitoring = function (uri, delay) {
533  this.delay = delay;
534  this.uri = uri;
535  this.sendPing();
536};
537
538/**
539 * Stop monitoring progress via Ajax.
540 */
541Drupal.progressBar.prototype.stopMonitoring = function () {
542  clearTimeout(this.timer);
543  // This allows monitoring to be stopped from within the callback.
544  this.uri = null;
545};
546
547/**
548 * Request progress data from server.
549 */
550Drupal.progressBar.prototype.sendPing = function () {
551  if (this.timer) {
552    clearTimeout(this.timer);
553  }
554  if (this.uri) {
555    var pb = this;
556    // When doing a post request, you need non-null data. Otherwise a
557    // HTTP 411 or HTTP 406 (with Apache mod_security) error may result.
558    $.ajax({
559      type: this.method,
560      url: this.uri,
561      data: '',
562      dataType: 'json',
563      success: function (progress) {
564        // Display errors.
565        if (progress.status == 0) {
566          pb.displayError(progress.data);
567          return;
568        }
569        // Update display.
570        pb.setProgress(progress.percentage, progress.message);
571        // Schedule next timer.
572        pb.timer = setTimeout(function () { pb.sendPing(); }, pb.delay);
573      },
574      error: function (xmlhttp) {
575        pb.displayError(Drupal.ajaxError(xmlhttp, pb.uri));
576      }
577    });
578  }
579};
580
581/**
582 * Display errors on the page.
583 */
584Drupal.progressBar.prototype.displayError = function (string) {
585  var error = $('<div class="messages error"></div>').html(string);
586  $(this.element).before(error).hide();
587
588  if (this.errorCallback) {
589    this.errorCallback(this);
590  }
591};
592
593})(jQuery);
594;/*})'"*/;/*})'"*/
595/**
596 * @file
597 * Handles AJAX fetching of views, including filter submission and response.
598 */
599(function ($) {
600
601  /**
602   * Attaches the AJAX behavior to exposed filter forms and key views links.
603   */
604  Drupal.behaviors.ViewsAjaxView = {};
605  Drupal.behaviors.ViewsAjaxView.attach = function() {
606    if (Drupal.settings && Drupal.settings.views && Drupal.settings.views.ajaxViews) {
607      $.each(Drupal.settings.views.ajaxViews, function(i, settings) {
608        Drupal.views.instances[i] = new Drupal.views.ajaxView(settings);
609      });
610    }
611  };
612
613  Drupal.views = {};
614  Drupal.views.instances = {};
615
616  /**
617   * JavaScript object for a certain view.
618   */
619  Drupal.views.ajaxView = function(settings) {
620    var selector = '.view-dom-id-' + settings.view_dom_id;
621    this.$view = $(selector);
622
623    // If view is not present return to prevent errors.
624    if (!this.$view.length) {
625      return;
626    }
627
628    // Retrieve the path to use for views' ajax.
629    var ajax_path = Drupal.settings.views.ajax_path;
630
631    // If there are multiple views this might've ended up showing up multiple
632    // times.
633    if (ajax_path.constructor.toString().indexOf("Array") != -1) {
634      ajax_path = ajax_path[0];
635    }
636
637    // Check if there are any GET parameters to send to views.
638    var queryString = window.location.search || '';
639    if (queryString !== '') {
640      // Remove the question mark and Drupal path component if any.
641      var queryString = queryString.slice(1).replace(/q=[^&]+&?|&?render=[^&]+/, '');
642      if (queryString !== '') {
643        // If there is a '?' in ajax_path, clean url are on and & should be
644        // used to add parameters.
645        queryString = ((/\?/.test(ajax_path)) ? '&' : '?') + queryString;
646      }
647    }
648
649    this.element_settings = {
650      url: ajax_path + queryString,
651      submit: settings,
652      setClick: true,
653      event: 'click',
654      selector: selector,
655      progress: {
656        type: 'throbber'
657      }
658    };
659
660    this.settings = settings;
661
662    // Add the ajax to exposed forms.
663    this.$exposed_form = $('#views-exposed-form-' + settings.view_name.replace(/_/g, '-') + '-' + settings.view_display_id.replace(/_/g, '-'));
664    this.$exposed_form.once(jQuery.proxy(this.attachExposedFormAjax, this));
665
666    // Store Drupal.ajax objects here for all pager links.
667    this.links = [];
668
669    // Add the ajax to pagers.
670    this.$view
671      .once(jQuery.proxy(this.attachPagerAjax, this));
672
673    // Add a trigger to update this view specifically. In order to trigger a
674    // refresh use the following code.
675    //
676    // @code
677    // jQuery('.view-name').trigger('RefreshView');
678    // @endcode
679    // Add a trigger to update this view specifically.
680    var self_settings = this.element_settings;
681    self_settings.event = 'RefreshView';
682    var self = this;
683    this.$view.once('refresh', function () {
684      self.refreshViewAjax = new Drupal.ajax(self.selector, self.$view, self_settings);
685    });
686  };
687
688  Drupal.views.ajaxView.prototype.attachExposedFormAjax = function() {
689    var button = $('input[type=submit], button[type=submit], input[type=image]', this.$exposed_form);
690    button = button[0];
691
692    // Call the autocomplete submit before doing AJAX.
693    $(button).click(function () {
694      if (Drupal.autocompleteSubmit) {
695        Drupal.autocompleteSubmit();
696      }
697    });
698
699    this.exposedFormAjax = new Drupal.ajax($(button).attr('id'), button, this.element_settings);
700  };
701
702  /**
703   * Attach the ajax behavior to each link.
704   */
705  Drupal.views.ajaxView.prototype.attachPagerAjax = function() {
706    this.$view.find('ul.pager > li > a, ol.pager > li > a, th.views-field a, .attachment .views-summary a')
707      .each(jQuery.proxy(this.attachPagerLinkAjax, this));
708  };
709
710  /**
711   * Attach the ajax behavior to a single link.
712   */
713  Drupal.views.ajaxView.prototype.attachPagerLinkAjax = function(id, link) {
714    var $link = $(link);
715    var viewData = {};
716    var href = $link.attr('href');
717    // Don't attach to pagers inside nested views.
718    if ($link.closest('.view')[0] !== this.$view[0] &&
719      $link.closest('.view').parent().hasClass('attachment') === false) {
720      return;
721    }
722
723    // Provide a default page if none has been set. This must be done
724    // prior to merging with settings to avoid accidentally using the
725    // page landed on instead of page 1.
726    if (typeof(viewData.page) === 'undefined') {
727      viewData.page = 0;
728    }
729
730    // Construct an object using the settings defaults and then overriding
731    // with data specific to the link.
732    $.extend(
733      viewData,
734      this.settings,
735      Drupal.Views.parseQueryString(href),
736      // Extract argument data from the URL.
737      Drupal.Views.parseViewArgs(href, this.settings.view_base_path)
738    );
739
740    // For anchor tags, these will go to the target of the anchor rather
741    // than the usual location.
742    $.extend(viewData, Drupal.Views.parseViewArgs(href, this.settings.view_base_path));
743
744    // Construct an object using the element settings defaults,
745    // then overriding submit with viewData.
746    var pager_settings = $.extend({}, this.element_settings);
747    pager_settings.submit = viewData;
748    this.pagerAjax = new Drupal.ajax(false, $link, pager_settings);
749    this.links.push(this.pagerAjax);
750  };
751
752  Drupal.ajax.prototype.commands.viewsScrollTop = function (ajax, response, status) {
753    // Scroll to the top of the view. This will allow users
754    // to browse newly loaded content after e.g. clicking a pager
755    // link.
756    var offset = $(response.selector).offset();
757    // We can't guarantee that the scrollable object should be
758    // the body, as the view could be embedded in something
759    // more complex such as a modal popup. Recurse up the DOM
760    // and scroll the first element that has a non-zero top.
761    var scrollTarget = response.selector;
762    while ($(scrollTarget).scrollTop() == 0 && $(scrollTarget).parent()) {
763      scrollTarget = $(scrollTarget).parent();
764    }
765    // Only scroll upward.
766    if (offset.top - 10 < $(scrollTarget).scrollTop()) {
767      $(scrollTarget).animate({scrollTop: (offset.top - 10)}, 500);
768    }
769  };
770
771})(jQuery);
772;/*})'"*/;/*})'"*/
773/**
774 * Event handler that listens for flags selected by the user.
775 */
776jQuery(document).bind('flagGlobalAfterLinkUpdate', function(event, data) {
777  var refresh = new viewsFlagRefresh(data.flagName);
778  jQuery.each(Drupal.settings.views.ajaxViews, function(index, settings) {
779    refresh.ajax(settings);
780  });
781});
782
783/**
784 * Constructor for the viewsFlagRefresh object, sets the name of the flag that
785 * was selected.
786 * 
787 * @param flagName
788 *   The name of the flag selected by the user.
789 */
790function viewsFlagRefresh(flagName) {
791  this.flagName = flagName;
792}
793
794/**
795 * Class method that returns the Views module's AJAX path.
796 * 
797 * @reutrn
798 *   The Views module's AJAX path.
799 */
800viewsFlagRefresh.ajaxPath = function() {
801  var ajaxPath = Drupal.settings.views.ajax_path;
802  if (ajaxPath.constructor.toString().indexOf("Array") != -1) {
803    ajaxPath = ajaxPath[0];
804  }
805  return ajaxPath;
806}
807
808/**
809 * Returns the widget settings associated with the view. Returns false if the
810 * view isn't set to refresh on this flag.
811 * 
812 * @param viewName
813 *   The name of the view we are running the check against.
814 * @param viewDisplayId
815 *   The display ID of the view we are running the check against.
816 * @return
817 *   A string containing the theme hook used to theme the view as it is being
818 *   refreshed, a boolean false if the view should not be refreshed at all.
819 */
820viewsFlagRefresh.prototype.widgetSettings = function(viewName, viewDisplayId) {
821  var settings = Drupal.settings.viewsFlagRefresh.flags;
822  for (var flagName in settings) {
823    functionName = viewName + '-' + viewDisplayId;
824    if (flagName == this.flagName && functionName in settings[flagName]) {
825      return settings[flagName][functionName];
826    }
827  }
828  return false;
829}
830
831/**
832 * Returns a key / value pair to be uses as settings by the ajax methods.
833 * 
834 * @param view
835 *   a jQuery object containing the view.
836 * @param settings
837 *   The View's AJAX settings.
838 * @param theme
839 *   The theme object.
840 * @return
841 *   The AJAX settings.
842 */
843viewsFlagRefresh.ajaxSettings = function(view, settings, theme) {
844  return {
845    url: viewsFlagRefresh.ajaxPath(),
846    type: 'GET',
847    data: settings,
848    success: function(response, status) {
849      // Handle ajax response.
850      jQuery(view).data('viewsFlagRefresh_ajax').success(response, status);
851
852      // Invokes theme hook.
853      jQuery(view).filter(function() { return !jQuery(this).parents('.view').size(); }).each(function() {
854        theme.target = this;
855        theme.hookInvoke('themeHookPost');
856      });
857    },
858    error: function() {
859      // Invokes theme hook, handles errors gracefully.
860      theme.hookInvoke('themeHookPost');
861      Drupal.Views.Ajax.handleErrors(xhr, viewsFlagRefresh.ajaxPath());
862    },
863    dataType: 'json'
864  };
865}
866
867/**
868 * Refreshes a view via AJAX if it is configured to do so.
869 * 
870 * @param settings
871 *   The view's AJAX settings passed through Drupal.settings.views.ajaxViews.
872 */
873viewsFlagRefresh.prototype.ajax = function(settings) {
874  // Bails if the view shouldn't be refreshed when this flag is selected.
875  var widgetSettings = this.widgetSettings(settings.view_name, settings.view_display_id);
876  if (!widgetSettings) {
877    return;
878  }
879
880  // Calculates the selector for the view.
881  var view = '.view-dom-id-' + settings.view_dom_id;
882  if (!jQuery(view).size()) {
883    view = '.view-id-' + settings.view_name + '.view-display-id-' + settings.view_display_id;
884  }
885
886  // Locates the view, AJAX refreshes the content.
887  jQuery(view).filter(function() { return !jQuery(this).parents('.view').size(); }).each(function() {
888    var target = this;
889
890    // create ajax object to handle the response.
891    if (jQuery(target).data('viewsFlagRefresh_ajax') == null) {
892      // TODO: Find a way to handle ajax commands without creating an ajax object.
893      var element_settings = {
894        url: viewsFlagRefresh.ajaxPath(),
895        submit: {},
896        setClick: true,
897        event: 'click',
898        selector: view,
899        progress: { type: 'throbber' }
900      };
901
902      jQuery(target).data('viewsFlagRefresh_ajax', new Drupal.ajax(false, view, element_settings));
903    }
904    
905    // Instantiates the theme object, invokes the widget's theme hook.
906    var theme = new viewsFlagRefresh.theme(target, widgetSettings);
907    theme.hookInvoke('themeHook');
908    
909    // Gets AJAX settings, either refreshes the view or submits the exposed
910    // filter form. This latter refreshes the view and maintains the filters.
911    var ajaxSettings = viewsFlagRefresh.ajaxSettings(view, settings, theme);
912    var exposedForm = jQuery('form#views-exposed-form-' + settings.view_name.replace(/_/g, '-') + '-' + settings.view_display_id.replace(/_/g, '-'));
913    if (exposedForm.size()) {
914      setTimeout(function() { jQuery(exposedForm).ajaxSubmit(ajaxSettings); }, theme.timeout);
915    }
916    else {
917      setTimeout(function() { jQuery.ajax(ajaxSettings); }, theme.timeout);
918    }
919  });
920}
921
922/**
923 * Contructor for our pseudo theme system class.
924 * 
925 * @param target
926 *   A jQuery object containing the content being refreshed.
927 * @param settings
928 *   The widget settings.
929 */
930viewsFlagRefresh.theme = function(target, settings) {
931  this.timeout  = 0;
932  this.target   = target;
933  this.settings = settings;
934}
935
936/**
937 * Invokes a hook in the theme object.
938 * 
939 * @param hookType
940 *   The hook type being invoked, i.e. 'themeHook', 'themeHookPost'.
941 * @return
942 *   A boolean flagging whether the hook exists.
943 */
944viewsFlagRefresh.theme.prototype.hookInvoke = function(hookType) {
945  if (hookType in this.settings && this.settings[hookType] in this) {
946    this[this.settings[hookType]]();
947    return true;
948  }
949  return false;
950}
951
952/**
953 * Adds a throbber image to the view content while it is being refreshed.
954 */
955viewsFlagRefresh.theme.prototype.throbber = function() {
956  // Hide the content of the view.
957  jQuery(this.target).css('visibility', 'hidden');
958  
959  // Captures parent, as the view is usually in something such as a block.
960  var container = jQuery(this.target).parent();
961  
962  // Adds our throbber to the middle of the view.
963  // NOTE: The throbber image is 32px wide.
964  var pos = jQuery(container).position();
965  this.throbberElement = jQuery('<img src="' + Drupal.settings.viewsFlagRefresh.imagePath + '/throbber.gif" class="views_flag_refresh-throbber" />')
966    .css('left', pos.left + (jQuery(container).outerWidth() / 2) - 16)
967    .css('top', pos.top + (jQuery(container).outerHeight() / 2) - 16)
968    .insertAfter(this.target);
969}
970
971/**
972 * Cleans up the throbber image.
973 * 
974 * @param target
975 *   A jQuery object containing the view being refreshed.
976 */
977viewsFlagRefresh.theme.prototype.throbberPost = function() {
978  jQuery(this.throbberElement).remove();
979}
980;/*})'"*/;/*})'"*/
981/**
982 * @file
983 * SEARCH AUTOCOMPLETE javascript mechanism.
984 *
985 * Sponsored by:
986 * www.axiomcafe.fr
987 */
988
989(function ($) {
990
991  function sanitizeHTML(str) {
992    return $("<div>").html(str).text();
993  }
994
995  //Escape characters in html terms.
996  function escapeHtml(text) {
997    return text
998      .replace(/&/g, "&amp;")
999      .replace(/</g, "&lt;")
1000      .replace(/>/g, "&gt;")
1001      .replace(/"/g, "&quot;");
1002  }
1003  
1004  // Escape characters in pattern before creating regexp.
1005  function escapeRegExp(str) {
1006    str = $.trim(str);
1007    return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
1008  }
1009
1010  // Autocomplete
1011  $.ui.autocomplete.prototype._renderItem = function (ul, item) {
1012    var term = escapeHtml(this.term);
1013    var first = ("group" in item)  ? 'first' : '';
1014    var innerHTML = '<div class="ui-autocomplete-fields ' + first + '">';
1015    item.value = sanitizeHTML(item.value);
1016    item.label = sanitizeHTML(item.label);
1017    if (item.fields) {
1018      $.each(item.fields, function(key, value) {
1019        var regex = new RegExp('(' + escapeRegExp(term) + ')', 'gi');
1020        var output = sanitizeHTML(value);
1021        if (value.indexOf('src=') == -1 && value.indexOf('href=') == -1) {
1022          output = output.replace(regex, "<span class='ui-autocomplete-field-term'>$1</span>");
1023          innerHTML += ('<div class="ui-autocomplete-field-' + key + '">' + output + '</div>');
1024        } else {
1025          innerHTML += ('<div class="ui-autocomplete-field-' + key + '">' + value + '</div>');
1026        }
1027      });
1028    } else {
1029      innerHTML += ('<div class="ui-autocomplete-field">' + item.label + '</div>');
1030    }
1031    innerHTML += '</div>';
1032
1033    var group = '';
1034    if ("group" in item) {
1035    	groupId = typeof(item.group.group_id) !== 'undefined' ? item.group.group_id : '';
1036    	groupName = typeof(item.group.group_name) !== 'undefined' ? item.group.group_name : '';
1037      group += ('<div class="ui-autocomplete-field-group ' + groupId + '">' + groupName + '</div>');
1038      $(group).appendTo(ul);
1039    }
1040    var elem =  $("<li class=ui-menu-item-" + first + "></li>" )
1041    .append("<a>" + innerHTML + "</a>");
1042    if (item.value == '') {
1043    	elem = $("<li class='ui-state-disabled ui-menu-item-" + first + " ui-menu-item'>" + item.label + "</li>" );
1044    }
1045    elem.data("item.autocomplete", item).appendTo(ul);
1046    
1047    Drupal.attachBehaviors(elem);
1048    return elem;
1049  };
1050
1051  $.ui.autocomplete.prototype._resizeMenu = function() {
1052    var ul = this.menu.element;
1053    ul.outerWidth(Math.max(ul.width("").outerWidth() + 5, this.options.position.of == null ? this.element.outerWidth() : this.options.position.of.outerWidth()));
1054  };
1055
1056  Drupal.behaviors.search_autocomplete = {
1057    attach: function(context) {
1058      if (Drupal.settings.search_autocomplete) {
1059        $.each(Drupal.settings.search_autocomplete, function(key, value) {
1060          $(Drupal.settings.search_autocomplete[key].selector).bind("mouseover", function() {
1061             $(Drupal.settings.search_autocomplete[key].selector).addClass('form-autocomplete ui-autocomplete-processed').attr('data-sa-theme', Drupal.settings.search_autocomplete[key].theme).autocomplete({
1062            	 	minLength: Drupal.settings.search_autocomplete[key].minChars,
1063            	 	source: function(request, response) {
1064                 $(Drupal.settings.search_autocomplete[key].selector).addClass('throbbing');
1065		              // External URL:
1066		              if (Drupal.settings.search_autocomplete[key].type == 'external') {
1067		                $.getJSON(Drupal.settings.search_autocomplete[key].datas, { q: encodeURIComponent(request.term) }, function (results) {
1068		                  // Only return the number of values set in the settings.
1069		                  if (results.length) {
1070		                  	results.slice(0, Drupal.settings.search_autocomplete[key].max_sug);
1071		                  }
1072		                  response(results);
1073		                });
1074		              }
1075		              // Internal URL:
1076		              else if (Drupal.settings.search_autocomplete[key].type == 'internal' || Drupal.settings.search_autocomplete[key].type == 'view') {
1077		                $.getJSON(Drupal.settings.search_autocomplete[key].datas, request, function (results) {
1078		                  // Only return the number of values set in the settings.
1079		                  if (results.length) {
1080	                	    results.slice(0, Drupal.settings.search_autocomplete[key].max_sug);
1081		                  }
1082		                  response(results);
1083		                });
1084		              }
1085		              // Static resources:
1086		              else if (Drupal.settings.search_autocomplete[key].type == 'static') {
1087		                var results = $.ui.autocomplete.filter(Drupal.settings.search_autocomplete[key].datas, request.term);
1088	                  if (results.length) {
1089	                    results.slice(0, Drupal.settings.search_autocomplete[key].max_sug);
1090	                  }
1091	                  response(results);
1092		              }
1093		            },
1094		            open: function(event, ui) {
1095		              $(".ui-autocomplete li.ui-menu-item:odd").addClass("ui-menu-item-odd");
1096		              $(".ui-autocomplete li.ui-menu-item:even").addClass("ui-menu-item-even");
1097		              $(Drupal.settings.search_autocomplete[key].selector).removeClass('throbbing');
1098		            },
1099		            select: function(event, ui) {
1100		              if (Drupal.settings.search_autocomplete[key].auto_redirect == 1 && ui.item.link) {
1101		                document.location.href = ui.item.link;
1102		              } else if (Drupal.settings.search_autocomplete[key].auto_submit == 1 && ui.item.value) {
1103		                  $(this).val(ui.item.value);
1104		                  $(this).closest("form").submit();
1105		              }
1106                  $(this).val(sanitizeHTML(ui.item.value));
1107		            },
1108		            focus: function (event, ui) {
1109		              if (typeof ui.item.group != 'undefined') {
1110  		              if (ui.item.group.group_id == 'no_results' || ui.item.group.group_id == 'all_results') {
1111  		                  event.preventDefault();
1112  		              }
1113		              }
1114		            },
1115		            appendTo: $(Drupal.settings.search_autocomplete[key].selector).parent()
1116             }).autocomplete("widget").attr("data-sa-theme", Drupal.settings.search_autocomplete[key].theme);
1117        	});
1118          $(Drupal.settings.search_autocomplete[key].selector).trigger('mouseover');
1119       });
1120      }
1121    }
1122  };
1123})(jQuery);
1124;/*})'"*/;/*})'"*/
1125/**
1126 * @file
1127 * JavaScript behaviors for the front-end display of webforms.
1128 */
1129
1130(function ($) {
1131
1132  "use strict";
1133
1134  Drupal.behaviors.webform = Drupal.behaviors.webform || {};
1135
1136  Drupal.behaviors.webform.attach = function (context) {
1137    // Calendar datepicker behavior.
1138    Drupal.webform.datepicker(context);
1139
1140    // Conditional logic.
1141    if (Drupal.settings.webform && Drupal.settings.webform.conditionals) {
1142      Drupal.webform.conditional(context);
1143    }
1144  };
1145
1146  Drupal.webform = Drupal.webform || {};
1147
1148  Drupal.webform.datepicker = function (context) {
1149    $('div.webform-datepicker').each(function () {
1150      var $webformDatepicker = $(this);
1151      var $calendar = $webformDatepicker.find('input.webform-calendar');
1152
1153      // Ensure the page we're on actually contains a datepicker.
1154      if ($calendar.length == 0) {
1155        return;
1156      }
1157
1158      var startDate = $calendar[0].className.replace(/.*webform-calendar-start-(\d{4}-\d{2}-\d{2}).*/, '$1').split('-');
1159      var endDate = $calendar[0].className.replace(/.*webform-calendar-end-(\d{4}-\d{2}-\d{2}).*/, '$1').split('-');
1160      var firstDay = $calendar[0].className.replace(/.*webform-calendar-day-(\d).*/, '$1');
1161      // Convert date strings into actual Date objects.
1162      startDate = new Date(startDate[0], startDate[1] - 1, startDate[2]);
1163      endDate = new Date(endDate[0], endDate[1] - 1, endDate[2]);
1164
1165      // Ensure that start comes before end for datepicker.
1166      if (startDate > endDate) {
1167        var laterDate = startDate;
1168        startDate = endDate;
1169        endDate = laterDate;
1170      }
1171
1172      var startYear = startDate.getFullYear();
1173      var endYear = endDate.getFullYear();
1174
1175      // Set up the jQuery datepicker element.
1176      $calendar.datepicker({
1177        dateFormat: 'yy-mm-dd',
1178        yearRange: startYear + ':' + endYear,
1179        firstDay: parseInt(firstDay),
1180        minDate: startDate,
1181        maxDate: endDate,
1182        onSelect: function (dateText, inst) {
1183          var date = dateText.split('-');
1184          $webformDatepicker.find('select.year, input.year').val(+date[0]).trigger('change');
1185          $webformDatepicker.find('select.month').val(+date[1]).trigger('change');
1186          $webformDatepicker.find('select.day').val(+date[2]).trigger('change');
1187        },
1188        beforeShow: function (input, inst) {
1189          // Get the select list values.
1190          var year = $webformDatepicker.find('select.year, input.year').val();
1191          var month = $webformDatepicker.find('select.month').val();
1192          var day = $webformDatepicker.find('select.day').val();
1193
1194          // If empty, default to the current year/month/day in the popup.
1195          var today = new Date();
1196          year = year ? year : today.getFullYear();
1197          month = month ? month : today.getMonth() + 1;
1198          day = day ? day : today.getDate();
1199
1200          // Make sure that the default year fits in the available options.
1201          year = (year < startYear || year > endYear) ? startYear : year;
1202
1203          // jQuery UI Datepicker will read the input field and base its date
1204          // off of that, even though in our case the input field is a button.
1205          $(input).val(year + '-' + month + '-' + day);
1206        }
1207      });
1208
1209      // Prevent the calendar button from submitting the form.
1210      $calendar.click(function (event) {
1211        // This event is triggered also when pressing enter when the focus is on
1212        // previous webform components, but we only want to do something when
1213        // we are on the calendar component. By checking the event client x/y
1214        // position we known if it was the user clicking. For keyboard navigators
1215        // simply the focus handles the date picker so we don't have to do
1216        // anything special for them.
1217        if (event.clientX !== 0 && event.clientY !== 0) {
1218          // Focus is only necessary for Safari. But it has no impact on other
1219          // browsers.
1220          $(this).focus();
1221          event.preventDefault();
1222        }
1223      });
1224
1225      // Clear date on backspace or delete.
1226      $calendar.keyup(function (e) {
1227        if (e.keyCode == 8 || e.keyCode == 46) {
1228          $.datepicker._clearDate(this);
1229        }
1230      });
1231    });
1232  };
1233
1234  Drupal.webform.conditional = function (context) {
1235    // Add the bindings to each webform on the page.
1236    $.each(Drupal.settings.webform.conditionals, function (formKey, settings) {
1237      var $form = $('.' + formKey + ':not(.webform-conditional-processed)');
1238      $form.each(function (index, currentForm) {
1239        var $currentForm = $(currentForm);
1240        $currentForm.addClass('webform-conditional-processed');
1241        $currentForm.bind('change', {'settings': settings}, Drupal.webform.conditionalCheck);
1242
1243        // Trigger all the elements that cause conditionals on this form.
1244        Drupal.webform.doConditions($currentForm, settings);
1245      });
1246    });
1247  };
1248
1249  /**
1250   * Event handler to respond to field changes in a form.
1251   *
1252   * This event is bound to the entire form, not individual fields.
1253   */
1254  Drupal.webform.conditionalCheck = function (e) {
1255    var $triggerElement = $(e.target).closest('.webform-component');
1256    if (!$triggerElement.length) {
1257      return;
1258    }
1259    var $form = $triggerElement.closest('form');
1260    var triggerElementKey = $triggerElement.attr('class').match(/webform-component--[^ ]+/)[0];
1261    var settings = e.data.settings;
1262    if (settings.sourceMap[triggerElementKey]) {
1263      Drupal.webform.doConditions($form, settings);
1264    }
1265  };
1266
1267  /**
1268   * Processes all conditional.
1269   */
1270  Drupal.webform.doConditions = function ($form, settings) {
1271
1272    var stackPointer;
1273    var resultStack;
1274
1275    /**
1276     * Initializes an execution stack for a conditional group's rules.
1277     *
1278     * Also initializes sub-conditional rules.
1279     */
1280    function executionStackInitialize(andor) {
1281      stackPointer = -1;
1282      resultStack = [];
1283      executionStackPush(andor);
1284    }
1285
1286    /**
1287     * Starts a new subconditional for the given and/or operator.
1288     */
1289    function executionStackPush(andor) {
1290      resultStack[++stackPointer] = {
1291        results: [],
1292        andor: andor,
1293      };
1294    }
1295
1296    /**
1297     * Adds a rule's result to the current sub-conditional.
1298     */
1299    function executionStackAccumulate(result) {
1300      resultStack[stackPointer]['results'].push(result);
1301    }
1302
1303    /**
1304     * Finishes a sub-conditional and adds the result to the parent stack frame.
1305     */
1306    function executionStackPop() {
1307      // Calculate the and/or result.
1308      var stackFrame = resultStack[stackPointer];
1309      // Pop stack and protect against stack underflow.
1310      stackPointer = Math.max(0, stackPointer - 1);
1311      var $conditionalResults = stackFrame['results'];
1312      var filteredResults = $.map($conditionalResults, function (val) {
1313        return val ? val : null;
1314      });
1315      return stackFrame['andor'] === 'or'
1316                ? filteredResults.length > 0
1317                : filteredResults.length === $conditionalResults.length;
1318    }
1319
1320    // Track what has been set/hidden for each target component's elements.
1321    // Hidden elements must be disabled because if they are required and don't
1322    // have a value, they will prevent submission due to html5 validation.
1323    // Each execution of the conditionals adds a temporary class
1324    // webform-disabled-flag so that elements hidden or set can be disabled and
1325    // also be prevented from being re-enabled by another conditional (such as a
1326    // parent fieldset). After processing conditionals, this temporary class
1327    // must be removed in preparation for the next execution of the
1328    // conditionals.
1329    $.each(settings.ruleGroups, function (rgid_key, rule_group) {
1330      var ruleGroup = settings.ruleGroups[rgid_key];
1331
1332      // Perform the comparison callback and build the results for this group.
1333      executionStackInitialize(ruleGroup['andor']);
1334      $.each(ruleGroup['rules'], function (m, rule) {
1335        switch (rule['source_type']) {
1336          case 'component':
1337            var elementKey = rule['source'];
1338            var element = $form.find('.' + elementKey)[0];
1339            var existingValue = settings.values[elementKey] ? settings.values[elementKey] : null;
1340            executionStackAccumulate(window['Drupal']['webform'][rule.callback](element, existingValue, rule['value']));
1341            break;
1342
1343          case 'conditional_start':
1344            executionStackPush(rule['andor']);
1345            break;
1346
1347          case 'conditional_end':
1348            executionStackAccumulate(executionStackPop());
1349            break;
1350        }
1351      });
1352      var conditionalResult = executionStackPop();
1353
1354      $.each(ruleGroup['actions'], function (aid, action) {
1355        var $target = $form.find('.' + action['target']);
1356        var actionResult = action['invert'] ? !conditionalResult : conditionalResult;
1357        switch (action['action']) {
1358          case 'show':
1359            var changed = actionResult != Drupal.webform.isVisible($target);
1360            if (actionResult) {
1361              $target.find('.webform-conditional-disabled:not(.webform-disabled-flag)')
1362                .removeClass('webform-conditional-disabled')
1363                .webformProp('disabled', false);
1364              $target
1365                .removeClass('webform-conditional-hidden')
1366                .show();
1367              $form.find('.chosen-disabled').prev().trigger('chosen:updated.chosen');
1368            }
1369            else {
1370              $target
1371                .hide()
1372                .addClass('webform-conditional-hidden')
1373                .find(':input')
1374                  .addClass('webform-conditional-disabled webform-disabled-flag')
1375                  .webformProp('disabled', true);
1376            }
1377            if (changed && $target.is('tr')) {
1378              Drupal.webform.restripeTable($target.closest('table').first());
1379            }
1380            break;
1381
1382          case 'require':
1383            var $requiredSpan = $target.find('.form-required, .form-optional').first();
1384            if (actionResult != $requiredSpan.hasClass('form-required')) {
1385              var $targetInputElements = $target.find("input:text,textarea,input[type='email'],select,input:radio,input:checkbox,input:file");
1386              // Rather than hide the required tag, remove it so that other
1387              // jQuery can respond via Drupal behaviors.
1388              Drupal.detachBehaviors($requiredSpan);
1389              $targetInputElements
1390                .webformProp('required', actionResult)
1391                .toggleClass('required', actionResult);
1392              if (actionResult) {
1393                $requiredSpan.replaceWith('<span class="form-required" title="' + Drupal.t('This field is required.') + '">*</span>');
1394              }
1395              else {
1396                $requiredSpan.replaceWith('<span class="form-optional"></span>');
1397              }
1398              Drupal.attachBehaviors($requiredSpan);
1399            }
1400            break;
1401
1402          case 'set':
1403            var $texts = $target.find("input:text,textarea,input[type='email']");
1404            var $selects = $target.find('select,select option,input:radio,input:checkbox');
1405            var $markups = $target.filter('.webform-component-markup');
1406            if (actionResult) {
1407              var multiple = $.map(action['argument'].split(','), $.trim);
1408              $selects
1409                .webformVal(multiple)
1410                .webformProp('disabled', true)
1411                  .addClass('webform-disabled-flag');
1412              $texts
1413                .val([action['argument']])
1414                .webformProp('readonly', true)
1415                .addClass('webform-disabled-flag');
1416              // A special case is made for markup. It is sanitized with
1417              // filter_xss_admin on the server. otherwise text() should be used
1418              // to avoid an XSS vulnerability. text() however would preclude
1419              // the use of tags like <strong> or <a>.
1420              $markups.html(action['argument']);
1421            }
1422            else {
1423              $selects.not('.webform-disabled-flag')
1424                .webformProp('disabled', false);
1425              $texts.not('.webform-disabled-flag')
1426                .webformProp('readonly', false);
1427              // Markup not set? Then restore original markup as provided in
1428              // the attribute data-webform-markup.
1429              $markups.each(function () {
1430                var $this = $(this);
1431                var original = $this.data('webform-markup');
1432                if (original !== undefined) {
1433                  $this.html(original);
1434                }
1435              });
1436            }
1437            break;
1438        }
1439      }); // End look on each action for one conditional.
1440    }); // End loop on each conditional.
1441
1442    $form.find('.webform-disabled-flag').removeClass('webform-disabled-flag');
1443  };
1444
1445  /**
1446   * Event handler to prevent propagation of events.
1447   *
1448   * Typically click for disabling radio and checkboxes.
1449   */
1450  Drupal.webform.stopEvent = function () {
1451    return false;
1452  };
1453
1454  Drupal.webform.conditionalOperatorStringEqual = function (element, existingValue, ruleValue) {
1455    var returnValue = false;
1456    var currentValue = Drupal.webform.stringValue(element, existingValue);
1457    $.each(currentValue, function (n, value) {
1458      if (value.toLowerCase() === ruleValue.toLowerCase()) {
1459        returnValue = true;
1460        return false; // break.
1461      }
1462    });
1463    return returnValue;
1464  };
1465
1466  Drupal.webform.conditionalOperatorStringNotEqual = function (element, existingValue, ruleValue) {
1467    var found = false;
1468    var currentValue = Drupal.webform.stringValue(element, existingValue);
1469    $.each(currentValue, function (n, value) {
1470      if (value.toLowerCase() === ruleValue.toLowerCase()) {
1471        found = true;
1472      }
1473    });
1474    return !found;
1475  };
1476
1477  Drupal.webform.conditionalOperatorStringContains = function (element, existingValue, ruleValue) {
1478    var returnValue = false;
1479    var currentValue = Drupal.webform.stringValue(element, existingValue);
1480    $.each(currentValue, function (n, value) {
1481      if (value.toLowerCase().indexOf(ruleValue.toLowerCase()) > -1) {
1482        returnValue = true;
1483        return false; // break.
1484      }
1485    });
1486    return returnValue;
1487  };
1488
1489  Drupal.webform.conditionalOperatorStringDoesNotContain = function (element, existingValue, ruleValue) {
1490    var found = false;
1491    var currentValue = Drupal.webform.stringValue(element, existingValue);
1492    $.each(currentValue, function (n, value) {
1493      if (value.toLowerCase().indexOf(ruleValue.toLowerCase()) > -1) {
1494        found = true;
1495      }
1496    });
1497    return !found;
1498  };
1499
1500  Drupal.webform.conditionalOperatorStringBeginsWith = function (element, existingValue, ruleValue) {
1501    var returnValue = false;
1502    var currentValue = Drupal.webform.stringValue(element, existingValue);
1503    $.each(currentValue, function (n, value) {
1504      if (value.toLowerCase().indexOf(ruleValue.toLowerCase()) === 0) {
1505        returnValue = true;
1506        return false; // break.
1507      }
1508    });
1509    return returnValue;
1510  };
1511
1512  Drupal.webform.conditionalOperatorStringEndsWith = function (element, existingValue, ruleValue) {
1513    var returnValue = false;
1514    var currentValue = Drupal.webform.stringValue(element, existingValue);
1515    $.each(currentValue, function (n, value) {
1516      if (value.toLowerCase().lastIndexOf(ruleValue.toLowerCase()) === value.length - ruleValue.length) {
1517        returnValue = true;
1518        return false; // break.
1519      }
1520    });
1521    return returnValue;
1522  };
1523
1524  Drupal.webform.conditionalOperatorStringEmpty = function (element, existingValue, ruleValue) {
1525    var currentValue = Drupal.webform.stringValue(element, existingValue);
1526    var returnValue = true;
1527    $.each(currentValue, function (n, value) {
1528      if (value !== '') {
1529        returnValue = false;
1530        return false; // break.
1531      }
1532    });
1533    return returnValue;
1534  };
1535
1536  Drupal.webform.conditionalOperatorStringNotEmpty = function (element, existingValue, ruleValue) {
1537    return !Drupal.webform.conditionalOperatorStringEmpty(element, existingValue, ruleValue);
1538  };
1539
1540  Drupal.webform.conditionalOperatorSelectGreaterThan = function (element, existingValue, ruleValue) {
1541    var currentValue = Drupal.webform.stringValue(element, existingValue);
1542    return Drupal.webform.compare_select(currentValue[0], ruleValue, element) > 0;
1543  };
1544
1545  Drupal.webform.conditionalOperatorSelectGreaterThanEqual = function (element, existingValue, ruleValue) {
1546    var currentValue = Drupal.webform.stringValue(element, existingValue);
1547    var comparison = Drupal.webform.compare_select(currentValue[0], ruleValue, element);
1548    return comparison > 0 || comparison === 0;
1549  };
1550
1551  Drupal.webform.conditionalOperatorSelectLessThan = function (element, existingValue, ruleValue) {
1552    var currentValue = Drupal.webform.stringValue(element, existingValue);
1553    return Drupal.webform.compare_select(currentValue[0], ruleValue, element) < 0;
1554  };
1555
1556  Drupal.webform.conditionalOperatorSelectLessThanEqual = function (element, existingValue, ruleValue) {
1557    var currentValue = Drupal.webform.stringValue(element, existingV
1557alue);
1558    var comparison = Drupal.webform.compare_select(currentValue[0], ruleValue, element);
1559    return comparison < 0 || comparison === 0;
1560  };
1561
1562  Drupal.webform.conditionalOperatorNumericEqual = function (element, existingValue, ruleValue) {
1563    // See float comparison: http://php.net/manual/en/language.types.float.php
1564    var currentValue = Drupal.webform.stringValue(element, existingValue);
1565    var epsilon = 0.000001;
1566    // An empty string does not match any number.
1567    return currentValue[0] === '' ? false : (Math.abs(parseFloat(currentValue[0]) - parseFloat(ruleValue)) < epsilon);
1568  };
1569
1570  Drupal.webform.conditionalOperatorNumericNotEqual = function (element, existingValue, ruleValue) {
1571    // See float comparison: http://php.net/manual/en/language.types.float.php
1572    var currentValue = Drupal.webform.stringValue(element, existingValue);
1573    var epsilon = 0.000001;
1574    // An empty string does not match any number.
1575    return currentValue[0] === '' ? true : (Math.abs(parseFloat(currentValue[0]) - parseFloat(ruleValue)) >= epsilon);
1576  };
1577
1578  Drupal.webform.conditionalOperatorNumericGreaterThan = function (element, existingValue, ruleValue) {
1579    var currentValue = Drupal.webform.stringValue(element, existingValue);
1580    return parseFloat(currentValue[0]) > parseFloat(ruleValue);
1581  };
1582
1583  Drupal.webform.conditionalOperatorNumericGreaterThanEqual = function (element, existingValue, ruleValue) {
1584    return Drupal.webform.conditionalOperatorNumericGreaterThan(element, existingValue, ruleValue) ||
1585           Drupal.webform.conditionalOperatorNumericEqual(element, existingValue, ruleValue);
1586  };
1587
1588  Drupal.webform.conditionalOperatorNumericLessThan = function (element, existingValue, ruleValue) {
1589    var currentValue = Drupal.webform.stringValue(element, existingValue);
1590    return parseFloat(currentValue[0]) < parseFloat(ruleValue);
1591  };
1592
1593  Drupal.webform.conditionalOperatorNumericLessThanEqual = function (element, existingValue, ruleValue) {
1594    return Drupal.webform.conditionalOperatorNumericLessThan(element, existingValue, ruleValue) ||
1595           Drupal.webform.conditionalOperatorNumericEqual(element, existingValue, ruleValue);
1596  };
1597
1598  Drupal.webform.conditionalOperatorDateEqual = function (element, existingValue, ruleValue) {
1599    var currentValue = Drupal.webform.dateValue(element, existingValue);
1600    return currentValue === ruleValue;
1601  };
1602
1603  Drupal.webform.conditionalOperatorDateNotEqual = function (element, existingValue, ruleValue) {
1604    return !Drupal.webform.conditionalOperatorDateEqual(element, existingValue, ruleValue);
1605  };
1606
1607  Drupal.webform.conditionalOperatorDateBefore = function (element, existingValue, ruleValue) {
1608    var currentValue = Drupal.webform.dateValue(element, existingValue);
1609    return (currentValue !== false) && currentValue < ruleValue;
1610  };
1611
1612  Drupal.webform.conditionalOperatorDateBeforeEqual = function (element, existingValue, ruleValue) {
1613    var currentValue = Drupal.webform.dateValue(element, existingValue);
1614    return (currentValue !== false) && (currentValue < ruleValue || currentValue === ruleValue);
1615  };
1616
1617  Drupal.webform.conditionalOperatorDateAfter = function (element, existingValue, ruleValue) {
1618    var currentValue = Drupal.webform.dateValue(element, existingValue);
1619    return (currentValue !== false) && currentValue > ruleValue;
1620  };
1621
1622  Drupal.webform.conditionalOperatorDateAfterEqual = function (element, existingValue, ruleValue) {
1623    var currentValue = Drupal.webform.dateValue(element, existingValue);
1624    return (currentValue !== false) && (currentValue > ruleValue || currentValue === ruleValue);
1625  };
1626
1627  Drupal.webform.conditionalOperatorTimeEqual = function (element, existingValue, ruleValue) {
1628    var currentValue = Drupal.webform.timeValue(element, existingValue);
1629    return currentValue === ruleValue;
1630  };
1631
1632  Drupal.webform.conditionalOperatorTimeNotEqual = function (element, existingValue, ruleValue) {
1633    return !Drupal.webform.conditionalOperatorTimeEqual(element, existingValue, ruleValue);
1634  };
1635
1636  Drupal.webform.conditionalOperatorTimeBefore = function (element, existingV
1636alue, ruleValue) {
1637    // Date and time operators intentionally exclusive for "before".
1638    var currentValue = Drupal.webform.timeValue(element, existingValue);
1639    return (currentValue !== false) && (currentValue < ruleValue);
1640  };
1641
1642  Drupal.webform.conditionalOperatorTimeBeforeEqual = function (element, existingValue, ruleValue) {
1643    // Date and time operators intentionally exclusive for "before".
1644    var currentValue = Drupal.webform.timeValue(element, existingValue);
1645    return (currentValue !== false) && (currentValue < ruleValue || currentValue === ruleValue);
1646  };
1647
1648  Drupal.webform.conditionalOperatorTimeAfter = function (element, existingValue, ruleValue) {
1649    // Date and time operators intentionally inclusive for "after".
1650    var currentValue = Drupal.webform.timeValue(element, existingValue);
1651    return (currentValue !== false) && (currentValue > ruleValue);
1652  };
1653
1654  Drupal.webform.conditionalOperatorTimeAfterEqual = function (element, existingValue, ruleValue) {
1655    // Date and time operators intentionally inclusive for "after".
1656    var currentValue = Drupal.webform.timeValue(element, existingValue);
1657    return (currentValue !== false) && (currentValue > ruleValue || currentValue === ruleValue);
1658  };
1659
1660  /**
1661   * Utility function to compare values of a select component.
1662   *
1663   * @param string a
1664   *   First select option key to compare
1665   * @param string b
1666   *   Second select option key to compare
1667   * @param array options
1668   *   Associative array where the a and b are within the keys
1669   *
1670   * @return integer based upon position of $a and $b in $options
1671   *   -N if $a above (<) $b
1672   *   0 if $a = $b
1673   *   +N if $a is below (>) $b
1674   */
1675  Drupal.webform.compare_select = function (a, b, element) {
1676    var optionList = [];
1677    $('option,input:radio,input:checkbox', element).each(function () {
1678      optionList.push($(this).val());
1679    });
1680    var a_position = optionList.indexOf(a);
1681    var b_position = optionList.indexOf(b);
1682    return (a_position < 0 || b_position < 0) ? null : a_position - b_position;
1683  };
1684
1685  /**
1686   * Utility to return current visibility.
1687   *
1688   * Uses actual visibility, except for hidden components which use the applied
1689   * disabled class.
1690   */
1691  Drupal.webform.isVisible = function ($element) {
1692    return $element.hasClass('webform-component-hidden')
1693              ? !$element.find('input').first().hasClass('webform-conditional-disabled')
1694              : $element.closest('.webform-conditional-hidden').length == 0;
1695  };
1696
1697  /**
1698   * Function to get a string value from a select/radios/text/etc. field.
1699   */
1700  Drupal.webform.stringValue = function (element, existingValue) {
1701    var value = [];
1702    if (element) {
1703      var $element = $(element);
1704      if (Drupal.webform.isVisible($element)) {
1705        // Checkboxes and radios.
1706        $element.find('input[type=checkbox]:checked,input[type=radio]:checked').each(function () {
1707          value.push(this.value);
1708        });
1709        // Select lists.
1710        if (!value.length) {
1711          var selectValue = $element.find('select').val();
1712          if (selectValue) {
1713            if ($.isArray(selectValue)) {
1714              value = selectValue;
1715            }
1716            else {
1717              value.push(selectValue);
1718            }
1719          }
1720        }
1721        // Simple text fields. This check is done last so that the select list
1722        // in select-or-other fields comes before the "other" text field.
1723        if (!value.length) {
1724          $element.find('input:not([type=checkbox],[type=radio]),textarea').each(function () {
1725            value.push(this.value);
1726          });
1727        }
1728      }
1729    }
1730    else {
1731      switch ($.type(existingValue)) {
1732        case 'array':
1733          value = existingValue;
1734          break;
1735
1736        case 'string':
1737          value.push(existingValue);
1738          break;
1739      }
1740    }
1741    return value;
1742  };
1743
1744  /**
1745   * Utility function to calculate a second-based timestamp from a time field.
1746   */
1747  Drupal.webform.dateValue = function (element, existingValue) {
1748    var value = false;
1749    if (element) {
1750      var $element = $(element);
1751      if (Drupal.webform.isVisible($element)) {
1752        var day = $element.find('[name*=day]').val();
1753        var month = $element.find('[name*=month]').val();
1754        var year = $element.find('[name*=year]').val();
1755        // Months are 0 indexed in JavaScript.
1756        if (month) {
1757          month--;
1758        }
1759        if (year !== '' && month !== '' && day !== '') {
1760          value = Date.UTC(year, month, day) / 1000;
1761        }
1762      }
1763    }
1764    else {
1765      if ($.type(existingValue) === 'array' && existingValue.length) {
1766        existingValue = existingValue[0];
1767      }
1768      if ($.type(existingValue) === 'string') {
1769        existingValue = existingV
1769alue.split('-');
1770      }
1771      if (existingValue.length === 3) {
1772        value = Date.UTC(existingValue[0], existingValue[1], existingValue[2]) / 1000;
1773      }
1774    }
1775    return value;
1776  };
1777
1778  /**
1779   * Utility function to calculate a millisecond timestamp from a time field.
1780   */
1781  Drupal.webform.timeValue = function (element, existingValue) {
1782    var value = false;
1783    if (element) {
1784      var $element = $(element);
1785      if (Drupal.webform.isVisible($element)) {
1786        var hour = $element.find('[name*=hour]').val();
1787        var minute = $element.find('[name*=minute]').val();
1788        var ampm = $element.find('[name*=ampm]:checked').val();
1789
1790        // Convert to integers if set.
1791        hour = (hour === '') ? hour : parseInt(hour);
1792        minute = (minute === '') ? minute : parseInt(minute);
1793
1794        if (hour !== '') {
1795          hour = (hour < 12 && ampm == 'pm') ? hour + 12 : hour;
1796          hour = (hour === 12 && ampm == 'am') ? 0 : hour;
1797        }
1798        if (hour !== '' && minute !== '') {
1799          value = Date.UTC(1970, 0, 1, hour, minute) / 1000;
1800        }
1801      }
1802    }
1803    else {
1804      if ($.type(existingValue) === 'array' && existingValue.length) {
1805        existingValue = existingValue[0];
1806      }
1807      if ($.type(existingValue) === 'string') {
1808        existingValue = existingValue.split(':');
1809      }
1810      if (existingValue.length >= 2) {
1811        value = Date.UTC(1970, 0, 1, existingValue[0], existingValue[1]) / 1000;
1812      }
1813    }
1814    return value;
1815  };
1816
1817  /**
1818   * Make a prop shim for jQuery < 1.9.
1819   */
1820  $.fn.webformProp = $.fn.webformProp || function (name, value) {
1821    if (value) {
1822      return $.fn.prop ? this.prop(name, true) : this.attr(name, true);
1823    }
1824    else {
1825      return $.fn.prop ? this.prop(name, false) : this.removeAttr(name);
1826    }
1827  };
1828
1829  /**
1830   * Make a multi-valued val() function.
1831   *
1832   * This is for setting checkboxes, radios, and select elements.
1833   */
1834  $.fn.webformVal = function (values) {
1835    this.each(function () {
1836      var $this = $(this);
1837      var value = $this.val();
1838      var on = $.inArray($this.val(), values) != -1;
1839      if (this.nodeName == 'OPTION') {
1840        $this.webformProp('selected', on ? value : false);
1841      }
1842      else {
1843        $this.val(on ? [value] : false);
1844      }
1845    });
1846    return this;
1847  };
1848
1849  /**
1850   * Given a table's DOM element, restripe the odd/even classes.
1851   */
1852  Drupal.webform.restripeTable = function (table) {
1853    // :even and :odd are reversed because jQuery counts from 0 and
1854    // we count from 1, so we're out of sync.
1855    // Match immediate children of the parent element to allow nesting.
1856    $('> tbody > tr, > tr', table)
1857      .filter(':visible:odd').filter('.odd')
1858        .removeClass('odd').addClass('even')
1859      .end().end()
1860      .filter(':visible:even').filter('.even')
1861        .removeClass('even').addClass('odd');
1862  };
1863
1864})(jQuery);
1865;/*})'"*/;/*})'"*/

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.