Your IP : 3.144.157.48


Current Path : /usr/local/mgr5/skins/orion/devel/
Upload File :
Current File : //usr/local/mgr5/skins/orion/devel/utils.js.map

{"version":3,"sources":["utils.js"],"names":["jQuery","ajaxq","queue","options","document","q","r","optionsCopy","o","originalCompleteCallback","complete","request","status","shift","length","ajax","len","push","abort","templates","messages","banner","toolbar","tabCont","tabContMap","listPager","tabContEmpty","tabContDashBoard","dashTaskbar","button","buttons","tabContForm","formItemCaptcha","formItemInput","formItemFile","passwdCheck","confirmCheck","formItemPassword","formItemInputWithZoom","formItemInputWithZoom1","formItemTextarea","formItemCheckbox","formItemHtmldata","formItemSelectList","formItemSelect","formItemMSelect","formItemRadio","formItemRadioImg","formItemLink","formItemExtrBtn","formItemDesk","formItemDeskRadio","formItemTextData","formItemLabel","filterItemLabel","formItemSlider","formItemSliderEditInList","formItemTicketMsg","formItemTicket","formItemSelectAutocomplete","formItemFrame","formItemDateTime","formPageTitle","formItemMgrview","formPageWrapper","filterWrapper","filterItem","filterRow","filterSavedItem","formItemRowDesc","formItemRow","formItemFullWidthRow","formItemFormWidthRow","formItemRowWithoutLabel","formItemRowHidden","formItemRowTextdata","formPlainHint","tabLi","tabChld","progressBar","reportBand","emptyBandOverlay","reportBandDash","fatalError","editinListForm","hintList","formListFilterWrapper","formListFilter","formListContent","formListBlocksContent","formListItemRow","tip","usefulLinks","infoList","fatalAlert","msgTemplList","t","doT","template","vSettings","$","extend","templateSettings","varname","formPlainHintRow","EventMgr","hooks","isTouch","navigator","userAgent","match","touchEvents","touchData","bind","event","callback","events","split","l","on","one","data","oone","object","obind","touch","eventMgr","cb","innerSelect","touchStart","touchEnd","outObject","onwithdata","customEvent","targetEvent","targetCallback","withData","onwithdataHandler","e","preventDefault","selector","em","touchMove","apply","eventData","self","tabId","getAttribute","elemId","window","off","unbind","trigger","delay","setTimeout","console","log","String","triggerStack","triggerStackHandler","addToTriggerStack","func","priority","sort","prioritySort","i","a","b","addHook","deleteHook","ar","slice","ScrollHandler","shiftY","shiftX","bigObj","curObj","objId","contId","obj","cont","sh","vh","sch","moveObj","down","isIe","execScript","up","left","right","intId","blockEvent","stopPropagation","cancelBubble","returnValue","mouseUp","onmouseup","ontouchend","lastValues","setPosition","newPosition","sTop","scrollTop","middle","top","bottom","style","Math","round","delta","marginTop","sw","body","querySelector","CustomEvent","id","dispatchEvent","setPositionHor","sLeft","scrollLeft","vw","schH","hSh","deltaH","marginLeft","hSw","wheel","wheelDelta","currentPosition","direction","STEP","detail","target","clientHeight","scrollHeight","nodeName","parseFloat","scrollMove","stopPos","mDelta","magicNumber","clearInterval","scrollMoveHoriz","moveUp","doc","timeOut","undefined","documentElement","ontouchcancel","setInterval","moveUpHandler","replace","moveLeftHandler","moveLeft","moveDown","moveDownHandler","moveRightHandler","moveRight","cancelScroll","display","vstatus","overflowY","hs","paddingRight","removeClass","parentNode","onmousewheel","bb","onmousedown","tb","onkeydown","contWheelEvent","removeEventListener","cancelScrollHoriz","overflowX","hstatus","hss","paddingBottom","hBb","hTb","updateFunc","key","scrollCorrect","swStyle","tmpHeight","curObjUp","visibleHeight","scrollTrackHeight","deltaTop","offsetTop","allHeight","offsetHeight","deltaAV","scrollHandlerHeight","height","className","indexOf","addEventListener","parseInt","updateFuncHoriz","aw","offsetWidth","width","update","getSize","getSizeHor","visibleWidth","forceMoveSelectItem","boxHeight","elemHeight","mTRaw","mT","df","TABKEY","forceMove","checkTabKeyUp","codeKey","which","keyCode","srcElement","parents","attr","animate","opts","start","Date","timer","progress","duration","step","animateMove","to","from","newPos","pow","scrollTo","offset","raw","drop","onmousemove","tDrop","ontouchmove","move","clientY","moveHor","clientX","tMove","touches","pageY","tMoveHor","pageX","drag","dragHor","tDrag","tDragHor","scrollTrackMDHandler","sbh","getElementById","offsetY","offsetX","offsetST","horizScroll","borderTop","borderBottom","borderLeft","borderRight","bindEvent","ontouchstart","contElem","onkeyup","buildScroll","position","divId","trt","st","ln","lns","trb","createElement","setAttribute","appendChild","buildHorizScroll","attach","detach","keyVar","keyVar1","hasOwnProperty"],"mappings":"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","file":"utils.js","sourcesContent":["/**\r\n * jQuery.ajaxq\r\n * queue ajax requests\r\n * @param {string} queue Name of queue\r\n * @param {object} options\r\n */\r\njQuery.ajaxq = function(queue, options) {\r\n  'use strict';\r\n  // Initialize storage for request queues if it's not initialized yet\r\n  if (typeof document.ajaxq === 'undefined') {\r\n    document.ajaxq = { q: {}, r: null};\r\n  }\r\n\r\n  // Initialize current queue if it's not initialized yet\r\n  if (typeof document.ajaxq.q[queue] === 'undefined') {\r\n    document.ajaxq.q[queue] = [];\r\n  }\r\n  // Request settings are given, enqueue the new request\r\n  if (typeof options !== 'undefined') {\r\n    // Copy the original options, because options.complete is going to be overridden\r\n\r\n    var optionsCopy = {};\r\n    /* jslint forin:true */\r\n    for (var o in options) {\r\n      optionsCopy[o] = options[o];\r\n    }\r\n    options = optionsCopy;\r\n\r\n    // Override the original callback\r\n\r\n    var originalCompleteCallback = options.complete;\r\n\r\n    options.complete = function(request, status) {\r\n      // Dequeue the current request\r\n      document.ajaxq.q[queue].shift();\r\n      document.ajaxq.r = null;\r\n\r\n      // Run the original callback\r\n      if (originalCompleteCallback) {\r\n        originalCompleteCallback(request, status);\r\n      }\r\n\r\n      // Run the next request from the queue\r\n      if (document.ajaxq.q[queue].length > 0) {\r\n        document.ajaxq.r = jQuery.ajax(document.ajaxq.q[queue][0]);\r\n      }\r\n      if (document.ajaxq.q[queue].length === 0) {\r\n        delete document.ajaxq.q[queue];\r\n      }\r\n    };\r\n    if (queue !== 'multiload') {\r\n      var len = document.ajaxq.q[queue].length;\r\n      if (len <= 1) {\r\n        document.ajaxq.q[queue].push(options);\r\n      } else {\r\n        document.ajaxq.q[queue][1] = options;\r\n      }\r\n    //ставим в очередь\r\n    } else {\r\n      // Enqueue the request\r\n      document.ajaxq.q[queue].push(options);\r\n    }\r\n\r\n    // Also, if no request is currently running, start it\r\n    if (document.ajaxq.q[queue].length === 1) {\r\n      document.ajaxq.r = jQuery.ajax(options);\r\n    }\r\n    // No request settings are given, stop current request and clear the queue\r\n  } else {\r\n    if (document.ajaxq.r) {\r\n      document.ajaxq.r.abort();\r\n      document.ajaxq.r = null;\r\n    }\r\n\r\n    delete document.ajaxq.q[queue];\r\n  }\r\n};\r\n\n\nvar templates = (function() {\n  'use strict';\n  // List Template\n\n  var messages =\n      '{{~it.message :value :index }}' +\n        '<div class=\"b-message i-message\">' +\n          '<div class=\"b-message__inner b-message__inner_status_{{=value.status}}\" id=\"{{=value.id}}\">' +\n            '<div class=\"b-message__text {{?value.warning}}b-message__text_warning{{?}}\">{{=value.text}}</div>' +\n            '{{?value.ref}}' +\n              '<div class=\"l-message__link\">' +\n                '<a href=\"{{=value.ref}}\" data-href=\"{{=value.ref}}\" target=\"_blank\" class=\"i-message__more-link {{=value.classes}}\">{{=value.refText}}</a>' +\n              '</div>' +\n            '{{?}}' +\n            '<div class=\"l-message__link\">' +\n              '<a href=\"#\" data-href=\"{{=value.dismissRef}}\" class=\"i-message__dismiss-link\" data-mn=\"dismiss\">{{=value.dismiss}}</a>' +\n            '</div>' +\n          '</div>' +\n          '<div class=\"b-message__triangle b-message__triangle_status_{{=value.status}}\"></div>' +\n        '</div>' +\n      '{{~}}';\n\n  //Banner template\n  var banner =\n      '<div class=\"b-message i-message\">' +\n        '<div  class=\"b-message__inner b-message__inner_status_{{=it.message.status}}\" id=\"{{=it.message.id}}\">' +\n          '<div class=\"b-message__text\">{{=it.message.text}}</div>' +\n            '{{?it.message.ref}}' +\n          '<div class=\"l-message__link\">' +\n            '<a href=\"{{=it.message.ref}}\" data-href=\"{{=it.message.ref}}\" target=\"_blank\" class=\"i-message__more-link {{=it.message.classes}}\">{{=it.message.refText}}</a>' +\n          '</div>' +\n          '{{?}}' +\n          '<div class=\"l-message__link\">' +\n            '<a href=\"#\" data-href=\"{{=it.message.dismissRef}}\" class=\"i-message__dismiss-link\" data-mn=\"dismiss\">{{=it.message.dismiss}}</a>' +\n          '</div>' +\n        '</div>' +\n        '<div class=\"b-message__triangle b-message__triangle_status_{{=it.message.status}}\"></div>' +\n      '</div>';\n\n  var toolbar = '{{?it.btng && it.btng.length > 0}}' +\n      '<div class=\"toolbar\" {{=it.plidAttr}} {{=it.convertAttr}} id=\"toolbar-{{=it.id}}\">' +\n      '<div class=\"toolbar__btn-move-wr\">' +\n        '<div class=\"toolbar__btn-move toolbar__btn-move_dir_left\"></div>' +\n        '<div class=\"toolbar__btn-move toolbar__btn-move_dir_right\"></div>' +\n      '</div>' +\n      '<div class=\"toolbar__inner\">' +\n    //add toolbar icon\n      '{{?it.devMode}}' +\n        '<div class=\"toolbutton-add\"><a href=\"#\" class=\"devel-link-add devel-link-add--toolbutton\"  data-tabid=\"{{=it.id}}\"></a></div>' +\n      '{{?}}' +\n      //foreach\n      '{{ var j, l = it.btng.length; for (j = 0; j < l; j++) { }}' +\n        '{{ var i = 0, btn = it.btng[j].btn, lb = btn.length; }}' +\n        '{{?btn[i] && btn[i].type}}' +\n        '<div class=\"toolgrp ind{{=j}}\" {{=lb}} data-name=\"{{=it.btng[j].name}}\" data-id=\"{{=it.id}}-{{=it.btng[j].name}}\" >' +\n          '{{ if (btn[i] && btn[i].type) { }}' +\n            '<div class=\"toolbar-button hint {{=btn[i].tClass}} i-tip-target_st_btn_{{=btn[i].type}}\" id=\"tbw-{{=it.id}}-{{=btn[i].tname}}\" ' +\n              '{{ var hint = \"\"; if (btn[i].hint) { hint = \"data-hint =  \\'\"  + App.u.escapeQuote(btn[i].hint) + \"\\'\"; hint += \"data-hint-mn=\\'hint_\" + btn[i].tname + \"\\'\"; } }}  {{=hint}}' +\n              ' {{ var confirm = \"\"; if (btn[i].confirm) { confirm = \"data-confirm = \\'\"  + btn[i].confirm + \"\\'\"; confirm += \"data-confirm-d = \\'\"  + btn[i].confirm_delimiter + \"\\'\"; } }}  {{=confirm}}  {{=btn[i].attrs}}>' +\n              '<span href=\"#main-wrapper\" data-url=\"func={{=btn[i].func}}\" ' +\n                  '{{?btn[i].cgi}} data-cgi=\"{{=btn[i].cgi}}\" {{?}}' +\n                  ' {{=btn[i].progressbar}}' +\n                  ' {{=it.tabIdAttr}}' +\n                  ' data-name=\"{{=btn[i].tname}}\" ' +\n                  ' rel=\"{{=it.id}}\"' +\n                  ' class=\"img-link toolbar-button__item-img {{=btn[i].bClass}} \" ' +\n                  '{{=btn[i].dataType}}' +\n                  ' id=\"{{=btn[i].id}}\" data-itemid=\"{{=it.itemId}}\">' +\n                '<div class=\"s-icon s24x24 {{=btn[i].img}}\" {{=btn[i].style}}></div>' +\n                '<div id=\"{{=btn[i].progressId}}{{=it.itemId}}\"></div>' +\n              '</span>' +\n              '<span href=\"#main-wrapper\" data-url=\"func={{=btn[i].func}}\" {{?btn[i].cgi}} data-cgi=\"{{=btn[i].cgi}}\" {{?}} {{=btn[i].progressbar}} {{=it.tabIdAttr}} rel=\"{{=it.id}}\" class=\"toolbar-button__item-text {{=btn[i].bClass}} btntext\" {{=btn[i].dataType}}  data-mn=\"short_{{=btn[i].tname}}\" data-name=\"{{=btn[i].tname}}\">{{=btn[i].name}}</span>' +\n              '{{?it.devMode}}' +\n                '<div class=\"toolbutton-settings\">' +\n                  '<a href=\"#main-wrapper\" class=\"devel-link-settings devel-link-settings--toolbutton\" data-elid=\"{{=btn[i].tname}}\" data-tabid=\"{{=it.id}}\"></a>' +\n                  '<a href=\"#main-wrapper\" class=\"devel-link-delete devel-link-delete--toolbutton\" data-elid=\"{{=btn[i].tname}}\"  data-name=\"{{=btn[i].name}}\" data-tabid=\"{{=it.id}}\"></a>' +\n                '</div>' +\n              '{{?}}' +\n              '<div class=\"toolgrp-control\" id=\"tc-{{=it.id}}-{{=it.btng[j].name}}\"><div class=\"triangledown\"></div></div>' +\n            '</div>' +\n            '{{ } }}' +\n            //toolgrp-bag\n            '<div class=\"toolgrp-bag\" id=\"tb-{{=it.id}}-{{=it.btng[j].name}}\">' +\n            '{{ for (i = 1; i < lb; i++) { }}' +\n            '{{ if (btn[i].type) { }}' +\n              '<div class=\"toolbar-button hint {{=btn[i].tClass}} ind{{=i}}\" id=\"tbw-{{=it.id}}-{{=btn[i].tname}}\" ' +\n              '{{ var hint = \"\"; if (btn[i].hint) { hint = \"data-hint = \\'\"  + App.u.escapeQuote(btn[i].hint) + \"\\'\"; hint += \"data-hint-mn=\\'hint_\" + btn[i].tname + \"\\'\";} }}  {{=hint}}' +\n              '  {{ var confirm = \"\"; if (btn[i].confirm) { confirm = \"data-confirm = \\'\"  + btn[i].confirm + \"\\'\"; confirm += \"data-confirm-d = \\'\"  + btn[i].confirm_delimiter + \"\\'\"; } }}  {{=confirm}} {{=btn[i].attrs}}>' +\n                '<span href=\"#main-wrapper\"' +\n                  ' data-url=\"func={{=btn[i].func}}\"' +\n                  ' {{?btn[i].cgi}} data-cgi=\"{{=btn[i].cgi}}\" {{?}}' +\n                  ' {{=btn[i].progressbar}}' +\n                  ' {{=it.tabIdAttr}}' +\n                  ' data-name=\"{{=btn[i].tname}}\"' +\n                  ' rel=\"{{=it.id}}\" ' +\n                  ' class=\"img-link toolbar-button__item-img {{=btn[i].bClass}} \"' +\n                  ' {{=btn[i].dataType}}' +\n                  ' id=\"{{=btn[i].id}}\" data-itemid=\"{{=it.itemId}}\">' +\n                  '<div class=\"s-icon s24x24 {{=btn[i].img}}\" {{=btn[i].style}}></div>' +\n                  '<div id=\"{{=btn[i].progressId}}{{=it.itemId}}\"></div>' +\n                '</span>' +\n                '<span href=\"#main-wrapper\"' +\n                  ' data-url=\"func={{=btn[i].func}}\"' +\n                  ' {{?btn[i].cgi}} data-cgi=\"{{=btn[i].cgi}}\" {{?}}' +\n                  ' {{=btn[i].progressbar}}' +\n                  ' {{=it.tabIdAttr}}' +\n                  ' data-name=\"{{=btn[i].tname}}\" ' +\n                  ' rel=\"{{=it.id}}\"' +\n                  ' class=\"{{=btn[i].bClass}} btntext\"' +\n                  ' {{=btn[i].dataType}} data-mn=\"short_{{=btn[i].tname}}\">{{=btn[i].name}}</span>' +\n                //devmode\n                '{{?it.devMode}}' +\n                  '<div class=\"toolbutton-settings\">' +\n                    '<a href=\"#\" class=\"devel-link-settings devel-link-settings--toolbutton\" data-elid=\"{{=btn[i].tname}}\" data-tabid=\"{{=it.id}}\"></a>' +\n                    '<a href=\"#\" class=\"devel-link-delete devel-link-delete--toolbutton\" data-elid=\"{{=btn[i].tname}}\" data-name=\"{{=btn[i].name}}\" data-tabid=\"{{=it.id}}\"></a>' +\n                  '</div>' +\n                '{{?}}' +\n              //devmode end\n              '</div>' +\n            //if end\n            '{{ } }}' +\n            //for end\n          '{{ } }}' +\n        '</div>' +\n        //toolgrp end\n      '</div>' +\n      '{{?}}' +\n      '{{ }  }}' +\n      '</div>' +\n      '</div>' +\n      //toolbar end\n      '{{?}}';\n\n  var tabCont = ' ' +\n    '<div id=\"cont-{{=it.id}}\" class=\"tab-content {{=it.btnview}} {{=it.filter}} init\"  data-func={{=it.func}} ' +\n    ' data-pnum=\"{{=it.pNum}}\" data-pcnt=\"{{=it.pcnt}}\" data-tabid=\"{{=it.id}}\" ' +\n    ' data-tab-type=\"list\" data-itemid=\"{{=it.itemId}}\">' +\n      '<div id=\"{{=it.progressid}}\"></div>' +\n      '<div id=\"{{=it.id}}-progressbar-overlay\" class=\"b-tab-overlay\" data-tabid=\"{{=it.id}}\"></div>' +\n      '<div id=\"cont-{{=it.id}}-progressbar\" class=\"b-progressbar\"></div>' +\n      //default progressbar\n      '<div id=\"cont-{{=it.id}}-progressbar-default\" class=\"b-progressbar\">' +\n        '<div id=\"{{=it.id}}-progressbar\" class=\"b-progressbar__outer\">' +\n          '<div class=\"b-progressbar__inner\">' +\n            '<div class=\"b-progressbar__comment\">{{=it.comment}}</div>' +\n            '<div class=\"b-progressbar__loader-wr\"><div class=\"b-progressbar__loader b-progressbar__loader_type_animate\"></div></div>' +\n          '</div>' +\n        '</div>' +\n      '</div>' +\n      //end default progressbar\n      //default progressbar end\n\n      '<div class=\"tab-content-wrapper list-content\" id=\"tcw-{{=it.id}}\">' +\n      //top bar\n      '<div class=\"topBar\">' +\n        '<div class=\"rightBar\">' +\n        '{{?it.devMode}}' +\n          '<a href=\"{{=it.selfurl}}&out=devel\" data-hint=\"{{=it.hDevel}}\" target=\"_blank\" class=\"hint\">' +\n            '<div class=\"s-icon s16x16 l-devel\"></div>' +\n          '</a>' +\n        '{{?}}' +\n          '<a href=\"#\" class=\"reload hint\" data-tabid=\"{{=it.id}}\" data-hint=\"{{=it.hReload}}\" data-hint-mn=\"hint_reloadlist\"><img src=\"{{=it.theme}}img/blue-reload.png\" width=\"16\" height=\"16\"/></a>' +\n          '{{?it.inmenu}}' +\n            '<a href=\"#\" class=\"i-take-favorite hint {{?!it.favorite}}b-elem_style_gracescale{{?}}\" data-hint-unfavorite=\"{{=it.hFavorite}}\" data-hint-favorite=\"{{=it.hUnfavorite}}\" data-state=\"{{?it.favorite}}favorite{{??}}unfavorite{{?}}\">' +\n              '<div class=\"s-icon s16x16 mbar-favorite\"></div>' +\n            '</a>' +\n            '<div class=\"b-pin i-pin hint {{?!it.pin}}b-elem_style_gracescale{{?}}\" data-state=\"{{?it.pin}}pin{{??}}unpin{{?}}\" data-hint-pin=\"{{=it.hintPin}}\" data-hint-unpin=\"{{=it.hintUnpin}}\"></div>' +\n          '{{?}}' +\n          '<a href=\"{{=it.permaLink}}\" data-clipboard-text=\"{{=it.permaLink}}\" data-hint=\"{{=it.hCopy}}\" target=\"_blank\" data-hint-mn=\"hint_copylink\" class=\"hint b-permalink\" id=\"permalink-{{=it.id}}\"><div class=\"p-permalink s16x16 s-icons\"></div></a>' +\n          '{{?it.autoupdate}}' +\n            '<a href=\"#\" data-hint=\"{{=it.hAutoupdate}}\" data-tabid=\"{{=it.id}}\" data-hint-mn=\"hint_autoupdate_stop\" class=\"i-list-icon__stop hint\"><div class=\"s-icon s16x16 p-stop\"></div></a>' +\n          '{{?}}' +\n          '<a href=\"#\" data-hint=\"{{=it.hSelectAll}}\" data-tabid=\"{{=it.id}}\" data-hint-mn=\"hint_selectall\" class=\"select-all hint\"><div class=\"s-icon s16x16 sb-selectall\"></div></a>' +\n          '<a href=\"{{=it.selfurl}}&out=csv\" data-hint=\"{{=it.hExport}}\" data-hint-mn=\"hint_export\" target=\"_blank\" class=\"exel hint\"><div class=\"s-icon s16x16 p-excel\"></div></a>' +\n\n          '<a href=\"{{=it.selfurl}}&out=print\" data-hint=\"{{=it.hPrint}}\" data-hint-mn=\"hint_print\" target=\"_blank\" class=\"print hint\"><div class=\"s-icon s16x16 p-print\"></div></a>' +\n          '<a href=\"?func=tsetting&elid={{=it.func}}&plid={{=it.tsplid}}\" data-hint-mn=\"msg_tsetting\" data-url=\"func=tsetting&elid={{=it.func}}&plid={{=it.tsplid}}\" data-hint=\"{{=it.tsettings}}\" {{=it.tabIdAttr}} rel=\"{{=it.id}}\" class=\"tsetting hint\">' +\n            '<div class=\"s-icon s16x16 l-table\"></div>' +\n          '</a>' +\n          //'<a href=\"#\" class=\"help hint\" data-hint=\"{{=it.hHelp}}\" data-help-type=\"default\" data-help=\"{{=it.help}}\"><div class=\"s-icon s16x16 sb-help\"></div></a>' +\n          '<a href=\"#\" class=\"b-usefulLinks__icon hint i-tip-target_st_help_links\" data-hint=\"{{=it.hHelp}}\"><div class=\"s-icon s16x16 sb-help\"></div></a>' +\n        '</div>' +\n        //top bar end\n        //left bar\n        '<div class=\"leftBar b-leftbar b-leftbar_for_list\">' +\n        //title\n          '<div class=\"reload hint fleft s48x48 s-icon {{=it.tImg}} i-tip-target_st_title_reload\" {{=it.tStyle}} data-tabid=\"{{=it.id}}\" data-hint-mn=\"hint_reloadlist\" data-hint=\"{{=it.hReload}}\"></div>' +\n          '<span>' +\n            '<h2>' +\n              '<span class=\"reload hint b-title i-tip-target_st_typo\" data-fn=\"{{=it.func}}\" data-mn=\"title\" data-tabid=\"{{=it.id}}\" data-hint-mn=\"hint_reloadlist\" data-hint=\"{{=it.hReload}}\">{{=it.tabTitle}}</span>' +\n              '{{=it.breadcrumb}}' +\n              //devmode icons\n              '{{ if (it.devMode) { }}' +\n              '<div class=\"list-settings\">' +\n                '<a href=\"#\" class=\"devel-link-settings devel-link-settings--list\"  data-tabid=\"{{=it.id}}\" data-elid=\"{{=it.func}}\"></a>' + '<a href=\"#\" class=\"devel-link-settings devel-link-settings--list\"  data-tabid=\"{{=it.id}}\" data-elid=\"{{=it.func}}\"></a>' +\n              '</div>' +\n              '{{ } }}' +\n\n            '</h2>' +\n          '</span>' +\n          '<div class=\"clearBoth\"></div>' +\n        '</div>' +\n        //left bar end\n        //messages\n        messages +\n        //messages end\n        '<div class=\"toolbar-wrapper\">' +\n          //livefilter\n          '<div class=\"tsearch\">' +\n            '<div class=\"dib search\">' +\n              '<input type=\"text\" id=\"{{=it.id}}-search\" data-tabid=\"{{=it.id}}\" class=\"itsearch b-input\" placeholder=\"Ctrl + Shift + F\" value=\"{{=it.livefilter}}\"/>' +\n              '<div class=\"close_tsearch\"><a href=\"javascript:void(0)\" data-tabid=\"{{=it.id}}\"><img src=\"{{=it.theme}}img/search_close.png\"/></a></div>' +\n            '</div>' +\n            '{{?it.filter}}<div class=\"i-tip-target_st_filter filter-btn b-filter__toggle hint\" data-hint-mn=\"hint_filter\" data-hint=\"{{=it.fHelp}}\"></div>{{?}}' +\n          '</div>' +\n          //livefilter end\n          //toolbar\n          toolbar +\n        '</div>' +\n          //toolbar end\n        //active filter\n      '{{?it.filter}}' +\n        '<div class=\"b-filter__save-bar\">' +\n          '<div class=\"b-filter__btn-move b-filter__btn-move_dir_left\"></div>' +\n          '<div class=\"b-filter__btn-move b-filter__btn-move_dir_right\"></div>' +\n          '<div class=\"b-filter__save-bar-inner\">' +\n        '</div>' +\n        '</div>' +\n      '{{?}}' +\n      '{{?it.afilter.status}}' +\n      '<div class=\"filter-active i-filter-applied\">' +\n      '<div class=\"filter-btns\">' +\n        '<div class=\"b-button b-button__filter-reset\">{{=it.afilter.resetMsg}}</div>' +\n        '<div class=\"b-button b-button__filter-change\" class=\"b-filter__change-btn\">{{=it.afilter.editMsg}}</div>' +\n      '</div>' +\n      '<div class=\"filter-msg\">' +\n        '<span class=\"head-filter-msg\">{{=it.afilter.fname || it.afilter.fmsg}}</span> {{=it.afilter.msg}}</div>' +\n        '<div class=\"clearBoth\"></div>' +\n      '</div>' +\n      '{{?}}' +\n      //active filter end\n      //filter form wrapper\n      '<div class=\"filter-wrapper\" id=\"filter-{{=it.id}}\"></div>' +\n      //diagram wrappper\n      '<div class=\"diagram-cont\" id=\"diagram-{{=it.id}}\"></div>' +\n      //page wrapper\n      '<div class=\"pager-wrapper\">{{=it.pager}}</div>' +\n    '</div>' +\n    //content table\n    '<div class=\"content\" id=\"ltwr-{{=it.id}}\" data-tabid={{=it.id}}>{{=it.table}}</div>' +\n    //content table end\n  '</div>';\n\n  var tabContMap = '<div id=\"cont-{{=it.id}}\" class=\"tab-content\" data-tabid=\"{{=it.id}}\" data-tab-type=\"map\" data-func={{=it.func}} data-itemid=\"{{=it.itemId}}\">' +\n\n    '<div id=\"{{=it.id}}-progressbar-overlay\" class=\"b-tab-overlay\" data-tabid=\"{{=it.id}}\"></div>' +\n    '<div id=\"cont-{{=it.id}}-progressbar\" class=\"b-progressbar\"></div>' +\n    //default progressbar\n    '<div id=\"cont-{{=it.id}}-progressbar-default\" class=\"b-progressbar\">' +\n      '<div id=\"{{=it.id}}-progressbar\" class=\"b-progressbar__outer\">' +\n        '<div class=\"b-progressbar__inner\">' +\n          '<div class=\"b-progressbar__comment\">{{=it.comment}}</div>' +\n          '<div class=\"b-progressbar__loader-wr\">' +\n          '<div class=\"b-progressbar__loader b-progressbar__loader_type_animate\"></div>' +\n        '</div>' +\n      '</div>' +\n      '</div>' +\n    '</div>' +\n\n    '<div class=\"tab-content-wrapper list-content\" id=\"tcw-{{=it.id}}\">' +\n      '<div class=\"topBar\">' +\n        '<div class=\"rightBar\">' +\n        '{{?it.devMode}}' +\n          '<a href=\"{{=it.selfurl}}&out=devel\" data-hint=\"{{=it.hDevel}}\" target=\"_blank\" class=\"hint\"><div class=\"s-icon s16x16 l-devel\"></div></a>' +\n        '{{?}}' +\n       '<a href=\"#\" class=\"reload hint\" data-tabid=\"{{=it.id}}\" data-hint=\"{{=it.hReload}}\" data-hint-mn=\"hint_reload\"><img src=\"{{=it.theme}}img/blue-reload.png\" width=\"16\" height=\"16\" /></a>' +\n         '{{?it.inmenu}}' +\n          '<a href=\"#\" class=\"i-take-favorite hint {{?!it.favorite}}b-elem_style_gracescale{{?}}\" data-hint-unfavorite=\"{{=it.hFavorite}}\" data-hint-favorite=\"{{=it.hUnfavorite}}\" data-state=\"{{?it.favorite}}favorite{{??}}unfavorite{{?}}\">' +\n            '<div class=\"s-icon s16x16 mbar-favorite\"></div>' +\n          '</a>' +\n          '<div class=\"b-pin i-pin hint {{?!it.pin}}b-elem_style_gracescale{{?}}\" data-state=\"{{?it.pin}}pin{{??}}unpin{{?}}\" data-hint-pin=\"{{=it.hintPin}}\" data-hint-unpin=\"{{=it.hintUnpin}}\"></div>' +\n         // '<a href=\"#\" class=\"help hint\" data-hint=\"{{=it.hHelp}}\" data-help-type=\"{{=it.helpType}}\" data-help=\"{{=it.help}}\" data-help-func=\"{{=it.helpurl}}\"><div class=\"s-icon s16x16 sb-help\"></div></a>' +\n        '{{?}}' +\n    '</div>' +\n        '<div class=\"leftBar b-leftbar b-leftbar_for_map\">' +\n          '<div class=\"reload hint fleft s48x48 s-icon i-tip-target_st_title_reload {{=it.tImg}}\" {{=it.tStyle}} data-tabid=\"{{=it.id}}\" data-hint-mn=\"hint_reload\" data-hint=\"{{=it.hReload}}\"></div>' +\n          '<span><h2><span class=\"reload hint  b-title i-tip-target_st_typo \" data-fn=\"{{=it.func}}\" data-mn=\"title\" data-hint-mn=\"hint_reload\" data-tabid=\"{{=it.id}}\" data-hint=\"{{=it.hReload}}\">{{=it.tabTitle}}</span></h2></span>' +\n          '<div class=\"clearBoth\">' +\n          '</div>' +\n      '</div>' +\n\n    messages +\n\n    //toolbar\n    toolbar +\n      //close topbar\n        '</div>' +\n    //end toolbar\n      '<div class=\"map\" id=\"{{=it.id}}-map\"></div>' +\n   '</div>' +\n\n  '</div>';\n\n\n  //List pager\n  var listPager =\n      '<div class=\"slist\">{{=it.slist}}</div>' +\n      '<div class=\"pager_list pager-list_type_list\">{{=it.pagerList}}</div>' +\n      '<div class=\"page_cnt\">' +\n        '<span class=\"page_cnt_lb_began\" data-mn=\"pagershow\">{{=it.msgBegan}}</span>' +\n        '<input type=\"text\" value=\"{{=it.cnt}}\" maxlength=\"4\" class=\"cnt pager-list__input b-input b-input_for_pager\" name=\"pcnt\"/>' +\n        '<span class=\"page_cnt_lb_end\" data-mn=\"pagerline\"> {{=it.msgEnd}}</span>' +\n        '<div class=\"pager-list__input-submit b-button b-button_style_small\">OK</div>' +\n      '</div>';\n\n  //Empty tab Template\n  var tabContEmpty = '<div id=\"cont-{{=it.id}}\"  class=\"tab-content hidden\" data-itemid=\"{{=it.itemId}}\">' +\n    '<div id=\"{{=it.id}}-progressbar-overlay\" class=\"b-tab-overlay\" data-tabid=\"{{=it.id}}\"></div>' +\n    //default progressbar\n    '<div id=\"cont-{{=it.id}}-progressbar-default\" class=\"b-progressbar\">' +\n      '<div id=\"{{=it.id}}-progressbar\" class=\"b-progressbar__outer\">' +\n      '<div class=\"b-progressbar__inner\">' +\n        '<div class=\"b-progressbar__comment\">{{=it.comment}}</div>' +\n        '<div class=\"b-progressbar__loader-wr\"><div class=\"b-progressbar__loader b-progressbar__loader_type_animate\"></div></div>' +\n      '</div>' +\n      '</div>' +\n    '</div>' +\n  '<div class=\"inner-content-empty\">{{=it.text}}</div>' +\n  '</div>';\n\n  //Dashboard Template\n  var tabContDashBoard = '<div id=\"cont-{{=it.id}}\" class=\"tab-content\" data-tabid=\"{{=it.id}}\" data-func=\"dashboard\" data-tab-type=\"dashboard\">' +\n    '<div id=\"incont-{{=it.id}}\" >' +\n      '<div>' +\n        '<table class=\"dash-table\">' +\n        '<tbody class=\"b-table__tbody\">' +\n          '<tr>' +\n            '<td colspan=\"2\">' +\n              '<div id=\"dash-top\" class=\"b-dashboard_cell\" data-pos=\"top\">{{=it.top}}</div>' +\n            '</td>' +\n          '<tr>' +\n          '<tr>' +\n            '<td class=\"left-row\">' +\n              '<div id=\"dash-left\" class=\"b-dashboard_cell\" data-pos=\"left\" >{{=it.left}}</div>' +\n            '</td>' +\n            '<td class=\"right-row\">' +\n              '<div id=\"dash-right\" class=\"b-dashboard_cell\" data-pos=\"right\">{{=it.right}}</div>' +\n            '</td>' +\n          '<tr>' +\n        '</tbody>' +\n        '</table>' +\n      '</div>' +\n    '</div>' +\n  '</div>';\n\n  //Dashboard block Taskbar Template\n  var dashTaskbar = '<div class=\"toolbar\">' +\n      '{{~it.toolbar :v :i}}' +\n      '{{?v.window || v.link}}' +\n      '<div class=\"toolbar-button\">' +\n        '<a href=\"{{=v.window || v.link}}\" {{=v.target}} class=\"toolbar-button__item-img\">' +\n          '<div class=\"s-icon s48x48 {{=v.img}}\" {{=v.style}}></div>' +\n        '</a>' +\n        '<a href=\"{{=v.window || v.link}}\" {{=v.target}} data-fn=\"dashboard\" data-mn=\"taskbar_{{=v.name}}\">{{=v.msg}}</a>' +\n      '</div>' +\n      '{{??}}' +\n      '<div data-hint=\"{{=v.hint}}\" class=\"toolbar-button hint {{?!v.disabled}} multi-item {{?}} {{?v.disabled}} notActive {{?}} {{?v.top}}i-tip-target_st_dashboard_top{{?}}\">' +\n        '<span href=\"?func={{=v.func}}\" {{?v.list}}data-list=\"{{=v.list}}\"{{?}} {{?v.top}}data-top=\"{{=v.top}}\"{{?}} {{?v.form}}data-form=\"{{=v.form}}\"{{?}} data-type=\"{{=v.type}}\" class=\"toolbar-button__item-img\">' +\n          '<div class=\"s-icon s48x48 {{=v.img}}\" {{=v.style}}></div>' +\n        '</span>' +\n        '<span href=\"?func={{=v.func}}\" {{?v.list}}data-list=\"{{=v.list}}\"{{?}} {{?v.top}}data-top=\"{{=v.top}}\"{{?}} {{?v.form}}data-form=\"{{=v.form}}\"{{?}} data-type=\"{{=v.type}}\" data-fn=\"dashboard\" data-mn=\"taskbar_{{=v.name}}\">{{=v.msg}}</span>' +\n      '</div>' +\n      '{{?}}' +\n      '{{~}}' +\n      '</div>';\n\n  var button =\n      '<div class=\"b-button i-button b-button_color_{{=val.color}} b-button_type_{{=val.type}} i-button_type_{{=val.type}} ' +\n          'b-button_style_{{=val.type}} b-button_act_{{=val.act}} {{?val.focus}}b-form__focus-field{{?}} {{?val.default}}i-button_default_yes{{?}} {{?val.disabled}}b-button_st_disabled{{?}} hint\" ' +\n          'data-tabid=\"{{=it.id}}\" ' +\n          'data-name=\"{{=val.name}}\" ' +\n          'data-hint=\"{{=val.hint}}\" ' +\n          '{{=it.parentAttr}} ' +\n          'data-type=\"{{=it.type}}\" ' +\n          'data-disabled=\"{{=val.disabledText}}\" ' +\n          'data-act=\"{{=val.act}}\" ' +\n          'data-id=\"{{=val.id}}\" ' +\n          'data-flags=\"{{=val.flags}}\" ' +\n          '{{?val.func}}data-func=\"{{=val.func}}\"{{?}} ' +\n          'tabindex=\"0\" ' +\n          'data-elemid=\"{{=ind}}\" ' +\n          'data-enabled=\"{{=val.msg}}\">{{=val.msg}}' +\n          '</div>';\n\n  var buttons = '{{~it.buttons :val :ind}}' +\n        button +\n      '{{~}}';\n\n  //Form & Report Template\n  var tabContForm = '<div id=\"cont-{{=it.id}}\" class=\"tab-content tab-content_st_active {{=it.tabClass}}\" data-tabid=\"{{=it.id}}\" data-tab-type=\"form\" data-report=\"{{=it.type}}\" data-func={{=it.func}} data-itemid=\"{{=it.itemId}}\">' +\n    '<div id=\"{{=it.id}}-progressbar-overlay\" class=\"b-tab-overlay\"></div>' +\n    //default progressbar\n    '<div id=\"cont-{{=it.id}}-progressbar-default\" class=\"b-progressbar\">' +\n      '<div id=\"{{=it.id}}-progressbar\" class=\"b-progressbar__outer\">' +\n      '<div class=\"b-progressbar__inner\">' +\n        '<div class=\"b-progressbar__comment\">{{=it.comment}}</div>' +\n        '<div class=\"b-progressbar__loader-wr\">' +\n          '<div class=\"b-progressbar__loader b-progressbar__loader_type_animate\"></div>' +\n        '</div>' +\n      '</div>' +\n      '</div>' +\n    '</div>' +\n    //default progressbar end\n\n    '<div id=\"cont-{{=it.id}}-progressbar\" class=\"b-progressbar\"></div>' +\n    '<div id=\"incont-{{=it.id}}\" class=\"form-content\">' +\n//    '{{?(it.showcase)}}' +\n//      '<div class=\"b-title\">' +\n//        '<h2 class=\"b-title__text\">{{=it.tabTitle}}</h2>' +\n//      '</div>' +\n//    '{{??}}' +\n    '{{?(!it.showcase)}}' +\n    '<div class=\"topWrapper\">' +\n      //right buttons\n      '<div class=\"rightBar\">' +\n      '{{?it.devMode}}' +\n        '<a href=\"{{=it.selfurl}}&out=devel\" data-hint=\"{{=it.hDevel}}\" target=\"_blank\" class=\"hint\"><div class=\"s-icon s16x16 l-devel\"></div></a>' +\n      '{{?}}' +\n        '{{?it.bands}}' +\n        '{{?it.pdfOn}}<a href=\"{{=it.selfurl}}&out=pdf\" data-hint=\"{{=it.hPdf}}\" data-hint-mn=\"hint_pdf\" target=\"_blank\" class=\"pdf hint\"><div class=\"s-icon s16x16 p-pdf\"></div></a>{{?}}' +\n        '<a href=\"{{=it.selfurl}}&out=print&sok=ok\" data-hint=\"{{=it.hPrint}}\" target=\"_blank\" data-hint-mn=\"hint_print\" class=\"print hint\"><div class=\"s-icon s16x16 p-print\"></div></a>' +\n        '{{?}}' +\n      '<a href=\"#\" class=\"reload hint\" data-hint=\"{{=it.hReload}}\" data-hint-mn=\"hint_reload\" data-tabid=\"{{=it.id}}\"><img src=\"{{=it.theme}}img/blue-reload.png\" width=\"16\" height=\"16\" /></a>' +\n        '{{?it.inmenu}}' +\n        '<a href=\"#\" class=\"i-take-favorite hint {{?!it.favorite}}b-elem_style_gracescale{{?}}\" data-hint-unfavorite=\"{{=it.hFavorite}}\" data-hint-favorite=\"{{=it.hUnfavorite}}\" data-state=\"{{?it.favorite}}favorite{{??}}unfavorite{{?}}\">' +\n          '<div class=\"s-icon s16x16 mbar-favorite\"></div>' +\n        '</a>' +\n        '<div class=\"b-pin i-pin hint {{?!it.pin}}b-elem_style_gracescale{{?}}\" data-state=\"{{?it.pin}}pin{{??}}unpin{{?}}\" data-hint-pin=\"{{=it.hintPin}}\" data-hint-unpin=\"{{=it.hintUnpin}}\"></div>' +\n        '{{?}}' +\n       '<a href=\"{{=it.permaLink}}\" data-clipboard-text=\"{{=it.permaLink}}\" data-hint=\"{{=it.hCopy}}\" target=\"_blank\" data-hint-mn=\"hint_copylink\" class=\"hint b-permalink\" id=\"permalink-{{=it.id}}\"><div class=\"p-permalink s16x16 s-icons\"></div></a>' +\n       //'<a href=\"#\" class=\"help hint\" data-hint=\"{{=it.hHelp}}\" data-help-type=\"{{=it.helpType}}\" data-help=\"{{=it.help}}\" data-help-func=\"{{=it.helpurl}}\"><div class=\"s-icon s16x16 sb-help\"></div></a>' +\n       '<a href=\"#\" class=\"b-usefulLinks__icon hint i-tip-target_st_help_links\" data-hint=\"{{=it.hHelp}}\"><div class=\"s-icon s16x16 sb-help\"></div></a>' +\n     '</div>' +\n      '<div class=\"leftBar b-leftbar b-leftbar_for_form\">' +\n      '<div class=\"reload hint fleft s48x48 s-icon i-tip-target_st_title_reload i-tip-target_st_typo {{=it.tImg}}\" data-hint-mn=\"hint_reload\" {{=it.tStyle}} data-tabid=\"{{=it.id}}\" data-hint=\"{{=it.hReload}}\"></div>' +\n//showcase if end\n        '{{?}}' +\n        '{{?!it.notitle}}' +\n        '<span class=\"tab_title\">' +\n            '<h2 class=\"reload hint b-title_type-form\" data-fn=\"{{=it.func}}\" data-mn=\"title\" data-hint-mn=\"hint_reload\" data-tabid=\"{{=it.id}}\" data-hint=\"{{=it.hReload}}\">' +\n              '{{=it.tabTitle}}' +\n              //devmode icons\n              '{{?it.devMode}}' +\n                '<div class=\"form-settings\">' +\n                  '<a href=\"#\" class=\"devel-link-settings devel-link-settings--form\" data-tabid=\"{{=it.id}}\"></a>' +\n                  '<a href=\"#\" class=\"devel-link-add devel-link-add--field\" data-tabid=\"{{=it.id}}\"></a>' +\n                '</div>' +\n              '{{?}}' +\n            '</h2>' +\n          '{{=it.breadcrumb}}' +\n          '{{?!it.showcase}}' +\n          '{{?}}' +\n        '</span>' +\n//notitle if end\n          '{{?}}' +\n      '{{?!it.showcase}}' +\n        '<div class=\"clearBoth\"></div>' +\n      '</div>' +\n//showcase if end\n      '{{?}}' +\n\n    '{{?(!it.nostep)}}' +\n    '{{?it.formflags.steps}}' +\n    '<div class=\"b-wizard i-wizard\">' +\n      '<div class=\"b-wizard__inner i-wizard__inner\">' +\n        '<div class=\"l-wizard__triangle l-wizard__triangle_dir_left i-wizard__triangle_dir_left\">' +\n          '<div class=\"b-wizard__triangle b-wizard__triangle_dir_left\"></div>' +\n        '</div>' +\n        '{{ var sNum = 0, active, actStep; for (var keyVar in it.formflags.steps) { sNum++ ; actStep = it.formflags.steps[keyVar]; if (keyVar == it.formflags.step ) { active = true; } else { active = false; } }}' +\n          '{{?(sNum !== 1)}}' +\n            '<div class=\"b-wizard__arrow\"></div>' +\n          '{{?}}' +\n          '{{?active}}' +\n            '<div class=\"b-wizard__step i-wizard__step-num_st_active b-wizard__step-num_st_active\">' +\n              '<div class=\"b-wizard__step-num b-wizard__step-num_st_active\" data-mn=\"msg_wizard_step\">{{=it.step}} {{=sNum}}</div>' +\n              '<div class=\"b-wizard__step-desc b-wizard__step-desc_st_active\">{{=actStep.name}}</div>' +\n            '</div>' +\n          '{{??(actStep.unavailable)}}' +\n            '<div class=\"b-wizard__step\">' +\n              '<div class=\"b-wizard__step-num\" data-mn=\"msg_wizard_step\">{{=it.step}} {{=sNum}}</div>' +\n              '<div class=\"b-wizard__step-desc\">{{=actStep.name}}</div>' +\n            '</div>' +\n          '{{??}}' +\n            '<div class=\"b-wizard__step action\">' +\n              '<div class=\"b-wizard__step-num\">' +\n                '<a href=\"#\" data-href=\"func={{=keyVar}}\" class=\"i-wizard__step-link b-wizard__step-link\" data-mn=\"msg_wizard_step\">{{=it.step}} {{=sNum}}</a>' +\n              '</div>' +\n              '<div class=\"b-wizard__step-desc\">{{=actStep.name}}</div>' +\n            '</div>' +\n          '{{?}}' +\n          '{{ } }}' +\n        '<div class=\"l-wizard__triangle l-wizard__triangle_dir_right i-wizard__triangle_dir_right\">' +\n          '<div class=\"b-wizard__triangle b-wizard__triangle_dir_right\"></div>' +\n        '</div>' +\n     '</div>' +\n    '</div><div class=\"b-wizard__bottom-padding\"></div>' +\n    '{{?}}' +\n      //showcase if\n    '{{?}}' +\n\n       '{{?it.message.status}}' +\n          banner +\n       '{{??it.message.length}}' +\n          messages +\n       '{{?}}' +\n        //toolbar\n          toolbar +\n        //toolbar end\n\n      '{{?it.reportInfo}}' +\n      '<div class=\"report_info\">{{=window.filterXSS(window.htmlEncode(it.reportInfo))}}</div>' +\n      '{{?}}' +\n\n        '<div class=\"error-message\">{{=it.ermsg}}</div>' +\n        //topWrapper end\n        '{{?(!it.showcase)}}' +\n          '</div>' +\n        '{{?}}' +\n\n        '<div class=\"l-form l-form__wrapper {{=it.formflags.maxwidth}}\" id=\"form-scroll-{{=it.id}}\">' +\n           '<div class=\"l-form__overlay\"><div class=\"l-form__loader\"></div></div>' +\n           '<div class=\"l-form__inner\" id=\"form-scroll-in-{{=it.id}}\">' +\n            '<form action=\"{{=it.formflags.action}}\" name=\"frm-{{=it.id}}\" method=\"post\" id=\"frm-{{=it.id}}\" class=\"{{=it.files}} {{?it.showcase}}b-form_showcase_yes{{?}}\" data-vars=\"{{=it.__innervars}}\" {{=it.formflags.autocomplete}}>' +\n            '<div id=\"form-wrapper-{{=it.id}}\">' +\n            '<input type=\"hidden\" name=\"func\" value=\"{{=it.func}}\"/>' +\n            //chrome password autofilling prevent from http://benjaminjshore.info/2014/05/chrome-auto-fill-honey-pot-hack.html\n            '<input type=\"password\" style=\"display:none;\"/>' +\n\n            '<input type=\"hidden\" id=\"{{=it.id}}-progresstype\" value=\"{{=it.progress}}\"/>' +\n            '<div id=\"{{=it.progress}}\"></div>' +\n\n            '<input type=\"hidden\" name=\"elid\" value=\"{{=it.elid}}\" id=\"{{=it.id}}-elid\"/>' +\n            '{{?(it.plid != \"\")}}<input type=\"hidden\" name=\"plid\" value=\"{{=it.plid}}\" id=\"{{=it.id}}-plid\"/>{{?}}' +\n            '{{?it.isUserexp}}' +\n            '<div class=\"userexperience {{=it.arePages}}\" data-level=\"{{=it.userexp}}\" data-mn=\"msg_userexperience\"> {{=it.userexpMsg}}</div>' +\n            '{{?}}' +\n            // check for form exist\n              '{{?it.formstatus}}' +\n              '{{=it.pages}}' +\n          //submit buttons\n          '{{?it.buttons.length}}' +\n            '<div class=\"l-buttons i-buttons_form-type_{{=it.type}} l-buttons_for_form\" data-type=\"buttons\" id=\"{{=it.id}}-buttons\">' +\n            '{{~it.buttons :val :ind}}' +\n              button +\n            '{{~}}' +\n            '</div>' +\n          '{{?}}' +\n          '{{?}}' +\n\n              // check for form exist END\n               '</div>' +\n              '<div class=\"bands\">{{=it.bands}}</div>' +\n            '</form>' +\n           '</div>' +\n        '</div>' +\n        '</div>' +\n    '</div>';\n  //captcha\n  var formItemCaptcha = `<div class=\"b-captcha\"><div class=\"b-captcha__inner\"><div class=\"g-recaptcha\" id=\"{{=it.id}}-{{=it.name}}\" data-sitekey=\"{{=it.value}}\"></div></div></div>`;\n\n  //Input template\n  var formItemInput = `<div class=\"l-form__input-wr {{=val.dependFields}} {{=val.setvalue}} {{=val.classes}}\" >\n      <input value=\"{{=val.value}}\" {{=val.attr}} class=\"{{=val.classes}} force-hint b-input b-input_type_{{=val.type}} i-input-control\" id=\"{{=val.name}}-{{=val.id}}\" data-tabid=\"{{=val.id}}\"/>\n      {{?val.prefix}}<div class=\"b-input__prefix i-input__prefix\">{{=val.prefix}}</div>{{?}}\n    </div>`;\n\n  //Input File Template\n  var formItemFile = '<div class=\"{{=it.dependFields}} {{=it.setvalue}} b-input-file__wr\" id=\"b-input-file__wr-{{=it.id}}\">' +\n      '<input  value=\"{{=it.value}}\" {{=it.attr}} id=\"{{=it.name}}-{{=it.id}}\" data-tabid=\"{{=it.id}}\" class=\"b-input b-input_type_file {{=it.classes}}\" />' +\n      '<div class=\"b-input-file-fake\" data-source=\"{{=it.name}}-{{=it.id}}\">' +\n        '<div class=\"b-input-file-fake__input hint\" id=\"f-{{=it.name}}-{{=it.id}}\" data-hint=\"\"></div>' +\n        '<div class=\"b-input-file-fake__btn\">{{=it.msg}}</div>' +\n      '</div>' +\n    '</div>';\n\n  //Password check template\n  var passwdCheck = '<div class=\"checkpass-indicator-wrapper\">' +\n      '<div id=\"checkpass-indicator-wrapper-{{=it.name}}-{{=it.id}}\">' +\n        '<span class=\"strength-pass-indicator\">' +\n          '<span class=\"ci-square si-one\"></span>' +\n            '<span  class=\"ci-square si-two\"></span>' +\n            '<span class=\"ci-square si-three\"></span>' +\n            '<span class=\"ci-square si-four\"></span>' +\n          '</span>' +\n          '<span class=\"strength-pass-text\">' +\n          '<span class=\"st-text st-one\">{{=it.short}}</span>' +\n          '<span class=\"st-text st-two\">{{=it.weak}}</span>' +\n          '<span class=\"st-text st-three\">{{=it.good}}</span>' +\n          '<span class=\"st-text st-four\">{{=it.strong}}</span>' +\n        '</span>' +\n      '</div>' +\n    '</div>';\n\n  var confirmCheck = '<div class=\"b-form-confirm-message\" id=\"check-confirm-{{=it.name}}-{{=it.id}}\">{{=it.doNotMatch}}</div>';\n\n  //Password\n  var formItemPassword =\n    '<div class=\"l-form__input-wr {{=it.dependFields}} {{=it.setvalue}}\" >' +\n      '<input {{=it.attr}} class=\"{{=it.classes}} b-input b-input_type_password force-hint i-input-control\" id=\"{{=it.name}}-{{=it.id}}\" data-parent=\"{{=it.name}}-{{=it.id}}\" data-tabid=\"{{=it.id}}\" value=\"{{=it.value}}\" data-confirm-field=\"{{=it.confirmField}}\" autocomplete=\"off\"/>' +\n      '<input type=\"text\" id=\"{{=it.name}}-{{=it.id}}-fake\" data-parent=\"{{=it.name}}-{{=it.id}}\" data-tabid=\"{{=it.id}}\" style=\"display:none;\" data-confirm-field=\"{{=it.confirmField}}\" class=\"fakePasswd {{=it.classes}} force-hint b-input i-input-control\" autocomplete=\"off\"/>' +\n    '</div>';\n\n  //Input with zoom\n  var formItemInputWithZoom = '<div class=\"l-form__input-wr {{=it.dependFields}} {{=it.setvalue}}\" >' +\n      '<input value=\"{{=it.value}}\" {{=it.inputAttr}} class=\"{{=it.inputClasses}} {{=it.classes}} force-hint b-input b-input_type_text i-input-control\" id=\"{{=it.inputName}}-{{=it.id}}\" data-tabid=\"{{=it.id}}\"/>' +\n      '<textarea class=\"{{=it.textareaClasses}} force-hint b-textarea\" {{=it.textareaAttr}} data-tabid=\"{{=it.id}}\"></textarea>' +\n    '</div>';\n\n  //Input with zoom\n  var formItemInputWithZoom1 = '<div class=\"{{=it.dependFields}}\" >' +\n      '<input {{=it.attr}} class=\"{{=it.classes}} force-hint  b-input b-input_type_text i-input-control\" id=\"{{=it.name}}-{{=it.id}}\" data-tabid=\"{{=it.id}}\"/>' +\n      '<textarea class=\"{{=it.textareaClasses}} force-hint b-textarea\" {{=it.textareaAttr}} data-tabid=\"{{=it.id}}\"></textarea>' +\n    '</div>';\n\n  var formItemTextarea = '<div id=\"b-msg-templ-{{=it.name}}-{{=it.id}}\" class=\"b-msg-templ__options\"></div>' +\n    '<div class=\"{{=it.setvalue}} {{=it.dependFields}} b-textarea__wrapper\">' +\n      '{{?it.quote}}' +\n        '<div class=\"b-ticket-tools-link\">' +\n          '<a href=\"#\" class=\"b-quote hint\" data-target=\"{{=it.name}}-{{=it.id}}\" data-hint-mn=\"hint_quote\" data-hint=\"{{=App.u.escapeQuote(it.hint_quote)}}\">{{=it.msg_quote}}</a>' +\n        '</div>' +\n      '{{?}}' +\n      '{{?it.savedmessage}}' +\n        '<div class=\"b-msg-templ__cont b-ticket-tools-link\" data-target=\"{{=it.name}}-{{=it.id}}\">' +\n          '<a href=\"#\" class=\"b-msg-templ__link hint\" data-hint-mn=\"hint_savedmessage\" data-hint=\"{{=App.u.escapeQuote(it.hint_savedmessage)}}\" data-id=\"{{=it.name}}-{{=it.id}}\" data-tabid=\"{{=it.id}}\">{{=it.msg_savedmessage}}</a>' +\n        '</div>' +\n      '{{?}}' +\n      '<textarea class=\"{{=it.classes}} force-hint b-textarea b-textarea_responsive_yes\" id=\"{{=it.name}}-{{=it.id}}\" {{=it.attr}} data-tabid=\"{{=it.id}}\" data-codelang=\"{{=it.codelang}}\">{{=it.value}}</textarea>' +\n      '{{?it.editor}}<div id=\"{{=it.name}}-{{=it.id}}-editor\" data-id=\"{{=it.name}}-{{=it.id}}\"></div>{{?}}' +\n      '<div class=\"b-resizer i-tip-target_st_textarea_resize {{?it.editor}}b-resizer_for_editor {{??}}b-resizer_for_textarea{{?}}\" id=\"resizer_editor-{{=it.name}}-{{=it.id}}\" data-id=\"{{=it.name}}-{{=it.id}}{{?it.editor}}-editor{{?}}\" {{?it.editor}}data-move-trigger=\"resizeEditor\"{{?}} data-tabid=\"{{=it.id}}\"></div>' +\n    '</div>';\n\n  var formItemCheckbox = '<div class=\"b-checkbox__wrapper {{=val.dependFields}} {{=val.setvalue}} {{?val.img}}l-checkbox-img{{?}}\">' +\n    '{{?val.img}}' +\n    '<div class=\"s-icon s16x16 {{=val.img}} b-checkbox__img\"></div>' +\n    '{{?}}' +\n    '<div class=\"b-checkbox checkboxel\">' +\n      '<div class=\"b-checkbox__control {{=val.cbclass}} {{=val.readonly}} force-hint\" tabindex=\"0\" id=\"{{=val.id}}-{{=val.name}}\" data-tabid=\"{{=val.id}}\" data-id=\"{{=val.name}}\"></div>' +\n    '</div>' +\n    '<div class=\"l-label__wrapper l-label__wrapper_for_checkbox\">' +\n      '<div class=\"b-label__visible b-label__visible_for_checkbox\" data-tabid=\"{{=val.id}}\" data-id=\"{{=val.name}}\">{{=val.desc}}</div>' +\n      '<div class=\"b-label__invisible b-label__invisible_for_checkbox\">{{=val.desc}}</div>' +\n      '<div class=\"b-label__line-dotted b-label__line-dotted_for_checkbox\"></div>' +\n    '</div>' +\n    '<input type=\"hidden\" value=\"{{=val.value}}\" class=\"{{=val.classes}}\" data-handler-val=\"{{=hash(val.value)}}\" name=\"{{=val.name}}\" data-type=\"checkbox\" data-tabid=\"{{=val.id}}\" {{=val.attrInput}}/>' +\n  '</div>';\n\n  var formItemHtmldata = '<div class=\"b-htmldata__inner b-htmldata\">' +\n      '{{?it.img}}' +\n        '<div class=\"b-htmldata__img\">' +\n          '{{?it.img.src}}<img data-type=\"img\" src=\"{{=it.img.src}}\" id=\"{{=it.id}}-{{=it.img.name}}\" width=\"{{=it.img.width}}\" height=\"{{=it.img.height}}\"/>{{??it.img.img}}<div class=\"{{=it.img.img}}\"></div>{{?}}' +\n        '</div>' +\n      '{{?}}' +\n      '<div id=\"{{=it.id}}-{{=it.name}}\">{{=window.filterXSS(window.htmlEncode(it.value))}}</div>' +\n      '<div class=\"b-htmldata__clear\"></div>' +\n    '</div>';\n\n  var formItemSelectList = '{{~val.slist :value:index}}' +\n      '{{ var selected = \"\"; if (val.value == value.key) { selected=\"selected\"; } }}' +\n      '{{ var dependelem = \"\"; if (value.depend != \"\" && value.depend != undefined) { dependelem=\"dependelem\"; } else { dependelem=\"b-myselect__select-li_show_yes\"; } }}' +\n      '<li data-val=\"{{=String(value.key).replace(/\"/g, \\'&quot;\\')}}\" data-code=\"{{=value.code}}\" data-mask=\"{{=value.mask}}\" data-handler-val=\"{{=hash(value.key)}}\" data-dependkey=\"{{=value.depend}}\" ' +\n      'class=\"{{=selected}} {{=dependelem}} {{?value.src||value.img}}b-myselect__item-image{{?}} b-myselect__select-li\">' +\n        '{{?value.src}} <span class=\"b-myselect__img\" style=\"background-image: url({{=value.src}}); ' +\n        '{{?value.width}}width:{{=value.width}}px;{{?}}' +\n        '{{?value.height}}height:{{=value.height}}px;{{?}}\"></span>{{?}}' +\n        '{{?value.img}} <span class=\"b-myselect__img {{=value.img}}\"></span>{{?}}' +\n        '<span class=\"{{=value.classes}} b-myselect__option-value\">{{=value.value}}</span>' +\n      '</li>' +\n      '{{~}}';\n\n  var formItemSelect = `<div class=\"b-myselect b-myselect_st_close {{=val.search}} {{=val.depend}} {{=val.dependFields}} {{=val.readonly}} {{=val.setvalue}}\" data-depend=\"{{=val.dependMaster}}\" id=\"_{{=val.name}}-{{=val.id}}\">\n    <div class=\"b-myselect__select-selected\" data-id=\"_{{=val.name}}-{{=val.id}}\">\n      <div class=\"b-myselect__select-value force-hint\" tabindex=\"0\" data-tabid=\"{{=val.id}}\">{{=val.msg}}</div>\n      <div class=\"b-myselect__arrow-down\"><div class=\"b-myselect__triangle-down\"></div></div>\n    </div>\n    {{?val.search}}<div class=\"b-myselect__search-box\">\n      <input type=\"text\" class=\"scrlbr b-input b-input_for_search sb-input force-hint\" data-id=\"{{=val.id}}-{{=val.name}}\" data-tabId=\"{{=val.id}}\" id=\"sb-cont-{{=val.id}}-{{=val.name}}\"/>\n      <div class=\"sb-info\" id=\"sb-info-{{=val.id}}-{{=val.name}}\"></div>\n    </div>{{?}}\n\n    <div class=\"b-myselect__option-wr\" id=\"opt_{{=val.name}}-{{=val.id}}\" data-tabid=\"{{=val.id}}\">\n      <div class=\"b-myselect__select-list\" id=\"cont-{{=val.id}}-{{=val.name}}\">\n        <ul data-id=\"_{{=val.name}}-{{=val.id}}\" id=\"{{=val.id}}-{{=val.name}}\" class=\"b-myselect__select-ul\">\n          ${formItemSelectList}\n        </ul>\n      </div>\n    </div>\n    <input type=\"hidden\" value=\"{{=val.value}}\" class=\"{{=val.classes}}\" {{?val.targetfontfamilyview}}data-targetview=\"{{=val.targetfontfamilyview}}\"{{?}} data-handler-val=\"{{=hash(val.value)}}\" name=\"{{=val.name}}\" id=\"_{{=val.name}}-{{=val.id}}-val\" data-type=\"select\" data-tabid=\"{{=val.id}}\" {{=val.attrInput}}/>\n  </div>`;\n\n  var formItemMSelect = '{{ var l, selectedClass = \"\"; if (it.hasValue) { selectedClass = \"selected\"; } }}' +\n    '<div class=\"b-mselect {{=selectedClass}} {{=it.readonly}} {{=it.setvalue}}\" data-depend=\"{{=it.dependMaster}}\" id=\"{{=it.id}}-{{=it.name}}-ms\">' +\n      '<div class=\"b-mselect__view-value force-hint\" data-id=\"{{=it.id}}-{{=it.name}}\" tabindex=\"0\" id=\"{{=it.name}}-{{=it.id}}\" data-tabid=\"{{=it.id}}\">' +\n        '<div class=\"b-myselect__arrow-down b-myselect__arrow-down_for_mselect\"><div class=\"b-myselect__triangle-down\"></div></div>' +\n        '<ul class=\"b-mselect__ul-view\" id=\"{{=it.id}}-{{=it.name}}-ms-view\" data-tabid=\"{{=it.id}}\" data-maxselect=\"{{=it.maxselect}}\">' +\n          '<li class=\"b-mselect__item b-mselect__item_msg_unselected\" data-default-msg=\"{{=it.msg}}\">{{?it.mixed}}{{=it.msg_mixed}} {{??}} {{=it.msg}}{{?}}</li>' +\n          '{{ var v = \"\", ind = 0; for (var i in it.values) {  }}' +\n          '{{ var selected = \"\"; if (it.values[i]) { selected=\"chosen\"; } }}' +\n          '{{  if (it.slist[i]) { if (v !== \"\") { v += \",\"; } v += it.slist[i].key; ind++; }}' +\n          '{{ var dependelem = \"\"; if (it.slist[i].depend != \"\" && it.slist[i].depend != undefined) { dependelem=\"dependelem\"; } else { dependelem=\"b-myselect__select-li_show_yes\"; } }}' +\n            '<li class=\"b-mselect__item {{=selected}} {{=dependelem}} \" data-val=\"{{=it.slist[i].key}}\" data-dependkey=\"{{=it.slist[i].depend}}\" unselectable=\"on\" data-s-id=\"{{=it.id}}-{{=it.name}}-{{=i}}\">' +\n              '{{=it.slist[i].value}}' +\n              '<span class=\"b-mselect__unselect\"></span>' +\n            '</li>' +\n          '{{ } } }}' +\n        '</ul>' +\n      '</div>' +\n      '<div class=\"b-mselect__options closed\" id=\"{{=it.id}}-{{=it.name}}-ms-list-wrapper\" data-id=\"{{=it.id}}-{{=it.name}}\" data-tabid=\"{{=it.id}}\">' +\n        '<div class=\"b-mselect__list-value\" id=\"{{=it.id}}-{{=it.name}}-ms-list\">' +\n          '<ul class=\"b-mselect__ul-choose\" id=\"{{=it.id}}-{{=it.name}}-ms-list-ul\" data-id=\"{{=it.id}}-{{=it.name}}\">' +\n            '<li class=\"b-mselect__item b-mselect__item_select-all\">{{=it.msg_select_all}}</li>' +\n            '{{ var l = it.slist.length; for (var i = 0; i < l; i++) {  }}' +\n            '{{ var selected = \"\"; if (it.values[i]) { selected=\"chosen\"; } }}' +\n            '{{ var dependelem = \"\"; if (it.slist[i].depend != \"\" && it.slist[i].depend != undefined) { dependelem=\"dependelem\"; } else { dependelem=\"b-myselect__select-li_show_yes\"; } }}' +\n              '<li class=\"b-mselect__item {{=selected}} {{=dependelem}}\" data-handler-val=\"{{=hash(it.slist[i].key)}}\" data-dependkey=\"{{=it.slist[i].depend}}\" data-val=\"{{=it.slist[i].key}}\" unselectable=\"on\" id=\"{{=it.id}}-{{=it.name}}-{{=i}}\">' +\n               '{{=it.slist[i].value}}' +\n                '<span class=\"b-mselect__unselect\"></span>' +\n              ' </li>' +\n            '{{ } }}' +\n          '</ul>' +\n        '</div>' +\n      '</div>' +\n      //'<div class=\"b-input-btn b-input-btn_type_plus hint\" data-hint-mn=\"msg_plus\" data-hint=\"{{=App.u.escapeQuote(it.hintBtnPlus)}}\" data-id=\"{{=it.id}}-{{=it.name}}\"></div>' +\n      //'<div class=\"b-input-btn b-input-btn_type_minus hint\" data-hint-mn=\"msg_minus\" data-hint=\"{{=App.u.escapeQuote(it.hintBtnMinus)}}\" data-id=\"{{=it.id}}-{{=it.name}}\"></div>' +\n    '<input type=\"hidden\" name=\"{{=it.name}}\" class=\"{{=it.classes}}\" value=\"{{=v}}\" data-type=\"multiple\" {{=it.requiredAttr}} id=\"{{=it.id}}-{{=it.name}}-ms-value\" data-id=\"{{=it.id}}-{{=it.name}}\" data-tabid=\"{{=it.id}}\"/>' +\n   '</div>';\n\n\n  var formItemRadio = '<div class=\"b-radio {{=it.depend}} {{=it.dependFields}} {{=it.readonly}} {{=it.setvalue}}\" id=\"{{=it.id}}-{{=it.name}}-radio\" data-depend=\"{{=it.dependMaster}}\">' +\n  //foreach\n    '{{~it.slist :value :index}}' +\n  '{{ var rbclass = \"\", tabindex = \"\"; if (it.value == value.key) { rbclass=\"checked\"; tabindex = \"tabindex=0\"; } }}' +\n  '{{ var dependelem = \"\"; if (value.depend != \"\" && value.depend != undefined ) { dependelem=\"dependelem\"; } else { dependelem=\"b-myselect__select-li_show_yes\"; } }}' +\n  '<div data-dependkey=\"{{=value.depend}}\" class=\"{{=dependelem}} l-radio__item\">' +\n  '<div class=\"b-radio__control-wr\">' +\n      '<div {{=tabindex}} class=\"b-radio__control {{=it.name}}-{{=it.id}} {{=it.name}}-{{=it.id}}-{{=hash(value.key)}} {{=rbclass}} force-hint\" data-id=\"{{=it.name}}-{{=it.id}}\" data-tabid=\"{{=it.id}}\"  data-val=\"{{=value.key}}\" data-handler-val=\"{{=hash(value.key)}}\">' +\n    '</div>' +\n    '</div>' +\n  '<div class=\"l-label__wrapper l-label__wrapper_for_radio\">' +\n    '<div class=\"b-label__visible b-label__visible_for_radio\" data-r-class=\"{{=it.name}}-{{=it.id}}-{{=hash(value.key)}}\">{{=value.value}}</div>' +\n      '<div class=\"b-label__invisible b-label__invisible_for_radio\">{{=value.value}}</div>' +\n      '<span class=\"b-label__line-dotted b-label__line-dotted_for_radio\"></span>' +\n    '</div>' +\n  '</div>' +\n  //end foreach\n  '{{~}}' +\n  '<input type=\"hidden\" name=\"{{=it.name}}\" data-handler-val=\"{{=hash(it.value)}}\" id=\"{{=it.name}}-{{=it.id}}\" value=\"{{=it.value}}\" class=\"{{=it.classes}}\" data-type=\"radio\" data-tabid=\"{{=it.id}}\" {{=it.attrInput}}/>' +\n  '</div>';\n\n  var formItemRadioImg = '<div class=\"b-radio {{=it.setvalue}} {{=it.readonly}}\">' +\n      '<table class=\"b-radio-img\">' +\n        '<tbody class=\"b-table__tbody\">' +\n      '{{~it.slist :value :index}}' +\n      '{{ var rbclass = \"\", tabindex = \"\"; if (it.value == value.key) { rbclass=\"checked\"; tabindex = \"tabindex=0\"; } }}' +\n      '<tr class=\"b-radio-img__row\" data-r-class=\"{{=it.name}}-{{=it.id}}-{{=hash(value.key)}}\">' +\n      '<td class=\"b-radio-img__col b-radio-img__col_radio\">' +\n        '<div class=\"b-radio__control {{=it.name}}-{{=it.id}} {{=rbclass}} {{=it.name}}-{{=it.id}}-{{=hash(value.key)}}\" {{=tabindex}} data-id=\"{{=it.name}}-{{=it.id}}\"  data-tabid=\"{{=it.id}}\"  data-val=\"{{=value.key}}\" data-handler-val=\"{{=hash(value.key)}}\"></div>' +\n      '</td>' +\n      '<td class=\"b-radio-img__col b-radio-img__col_img\">' +\n        '<div class=\"b-radio-img__img-wrapper\">' +\n          '{{?value.src}} <span class=\"b-radio-img__img\" style=\"background-image: url({{=value.src}}); ' +\n          '{{?value.width}}width:{{=value.width}}px;{{?}}' +\n          '{{?value.height}}height:{{=value.height}}px;{{?}}\"></span>{{?}}' +\n          '{{?value.img}} <span class=\"b-radio-img__img {{=value.img}}\"></span>{{?}}' +\n        '</div>' +\n      '</td>' +\n      '<td class=\"b-radio-img__col b-radio-img__col_desc\"><div class=\"b-radio-img__desc\">{{=window.htmlDecode(value.value)}}</div></td>' +\n      '</tr>' +\n      '{{~}}' +\n      '</tbody>' +\n      '</table>' +\n      '<input type=\"hidden\" name=\"{{=it.name}}\" id=\"{{=it.name}}-{{=it.id}}\" data-handler-val=\"{{=hash(it.value)}}\" class=\"{{=it.classes}}\" value=\"{{=it.value}}\" data-type=\"radio\" data-tabid=\"{{=it.id}}\" />' +\n      '</div>';\n\n      var formItemLink = '<div class=\"b-form-link{{?it.internal}} m-item{{?}}\"><a href=\"{{=it.href}}\" data-url=\"{{=it.href}}\" {{?!it.newtab}}data-parent=\"{{=it.id}}\"{{?}} data-type=\"link\" id=\"{{=it.id}}-{{=it.name}}\" {{?it.target}}target=\"{{=it.target}}\"{{?}} class=\"i-menu-link {{?it.newtab}}newtab{{?}}\">{{=it.text}}</a></div>';\n\n  var formItemExtrBtn = '<{{=it.extrabtn}} data-tname=\"{{=it.name}}-{{=it.id}}\"/>';\n\n  var formItemDesk = '<span class=\"desc\">{{=it.value}}</span>';\n\n  var formItemDeskRadio = '<div class=\"desk\">' +\n      '<div class=\"desk-visible\">{{=it.value}}</div>' +\n      '<div class=\"desk-invisible\">{{=it.value}}</div>' +\n      '<span class=\"b-label__line-dotted\"></span>' +\n    '</div>';\n\n  var formItemTextData = '{{?it.img}}<div class=\"b-textdata__img\">{{?it.img.src}}<img data-type=\"img\" src=\"{{=it.img.src}}\" id=\"{{=it.id}}-{{=it.img.name}}\" width=\"{{=it.img.width}}\" height=\"{{=it.img.height}}\"/>{{??it.img.img}}<div class=\"{{=it.img.img}}\"></div>{{?}}</div>{{?}}' +\n    '<div class=\"b-textdata {{=it.classes}}\" id=\"{{=it.id}}-{{=it.name}}\" data-type=\"textdata\"><div class=\"b-textdata__inner\" {{?it.mtype === \"msg\" || it.mtype === \"msgdata\"}} data-mn=\"{{=it.msgname}}\"{{?}} id=\"{{=it.id}}-{{=it.name}}-inner\">{{=window.filterXSS(it.value)}}</div></div>' +\n    '<div class=\"b-textdata__clear l-clear-both\"></div>';\n\n  var formItemLabel =\n    '<div class=\"l-label__wrapper\">' +\n      '<div class=\"l-label__inner\">' +\n        '<label class=\"b-label__visible\" data-tabid=\"{{=it.tabId}}\" data-id=\"{{=it.id}}\" data-fn=\"{{=it.func}}\" data-mn=\"{{=it.id}}\">{{=it.img}}{{=it.label}}</label>' +\n        '<label class=\"b-label__invisible\">{{=it.img}}{{=it.label}}</label>' +\n        '<span class=\"b-label__line-dotted\"></span>' +\n        '{{?it.required}}<span class=\"b-required-star\">*</span>{{?}}' +\n      '{{?it.devMode}}' +\n        '<div class=\"field-settings\">' +\n          '<a href=\"#\" class=\"devel-link-settings devel-link-settings--field\" data-elid=\"{{=it.id}}\" data-tabid=\"{{=it.tabId}}\"></a>' +\n          '<a href=\"#\" class=\"devel-link-delete devel-link-delete--field\" data-elid=\"{{=it.id}}\" data-name=\"{{=it.label}}\" data-tabid=\"{{=it.tabId}}\"></a>' +\n        '</div>' +\n      '{{?}}' +\n      '</div>' +\n    '</div>';\n\n  var filterItemLabel = '<label data-mn=\"{{=it.name}}\" data-fn=\"{{=it.func}}\">{{=it.label}}</label>';\n\n  var formItemSlider = '<table class=\"b-slider\">' +\n      '<tbody class=\"b-table__tbody\">' +\n      '<tr>' +\n        '<td class=\"l-slider__col l-slider__col_cont_slider\">' +\n          '<div class=\"l-slider__wr {{=it.readonly}}\">' +\n            '<div class=\"b-slider__line\"></div>' +\n            '<div class=\"b-slider__border b-slider__border_pos_left\"></div>' +\n            '<div class=\"b-slider__c-border b-slider__c-border_pos_top\"></div>' +\n            '<div class=\"b-slider__c-border b-slider__c-border_pos_bottom b-slider__c-bottom-border\"></div>' +\n            '<a id=\"{{=it.id}}-{{=it.name}}-slider\" class=\"b-slider__el force-hint\" tabindex=\"0\" data-min=\"{{=it.min}}\" data-tabid=\"{{=it.id}}\"  data-max=\"{{=it.max}}\" data-step=\"{{=it.step}}\" data-id=\"{{=it.id}}-{{=it.name}}\" data-value=\"{{=it.value}}\">' +\n              '<div class=\"b-slider__core\"></div>' +\n            '</a>' +\n            '<div class=\"b-slider__border b-slider__border_pos_right\"></div>' +\n          '</div>' +\n        '</td>' +\n        '<td class=\"l-slider__col l-slider__col_cont_input {{=it.setvalue}}\">' +\n          '<div class=\"l-slider__input-wr {{=it.setvalue}}\">' +\n            '<input type=\"text\" len=\"32\" {{?it.targetfontsizeview}}data-targetview=\"{{=it.targetfontsizeview}}\"{{?}} class=\"b-input b-input_for_slider {{?it.targetfontsizeview}}i-font-size-control{{?}} {{=it.readonly}} force-hint i-input-control {{=it.inputClass}}\" id=\"{{=it.id}}-{{=it.name}}\" data-tabid=\"{{=it.id}}\" name=\"{{=it.name}}\" value=\"{{=it.value}}\" {{=it.readonly}} {{=it.attrInput}}/>' +\n          '</div>' +\n        '</td>' +\n      '</tr>' +\n      '</tbody>' +\n    '</table>';\n\n  var formItemSliderEditInList = '<div class=\"l-form__row_type_slider\">' +\n      '<div class=\"l-form__control-wr\">' +\n        formItemSlider +\n      '</div>' +\n    '</div>';\n\n  var formItemTicketMsg = '{{~it.mlist :value:index}}' +\n      '<tr class=\"b-ticket__table-row {{?value.isCollapsed}} b-ticket__table-row_is_collapsible b-ticket__table-row_is_collapsed {{?}}\">' +\n        '<td class=\"b-ticket__table-col b-ticket__table-col_type_msg\">' +\n          '<div class=\"b-ticket__item b-ticket__item_{{=value.type}} \">' +\n            '<div class=\"b-ticket__item-inner b-ticket__item-inner_{{=value.type}} {{?value.rate.is}}b-ticket__item-inner_has_rate{{?}}\">' +\n            '{{?value.type === \"info\"}}' +\n              '<table class=\"b-ticket__table-info\">' +\n              '<tbody class=\"b-table__tbody\">' +\n              '{{~value.rows :v :i}}' +\n              '<tr class=\"b-ticket__row-info {{?v.header}}b-ticket__row-info_type_header{{?}}\">' +\n              '{{?v.header}}' +\n              '<td class=\"b-ticket__col-info b-ticket__col-info_type_header\" colspan=\"2\">{{=v.label}}</td>' +\n              '{{??}}' +\n              '<td class=\"b-ticket__col-info b-ticket__col-info_type_label\">{{=v.label}}</td>' +\n              '<td class=\"b-ticket__col-info b-ticket__col-info_type_value\">{{=String(v.v).replace(/(\\\\r\\\\n|\\\\n|\\\\r)/g,\" \").replace(/\\\\s+/g,\" \")}}</td>' +\n              '{{?}}' +\n              '</tr>' +\n              '{{~}}' +\n              '</tbody>' +\n              '</table>' +\n            '{{??}}' +\n            '<div class=\"b-ticket__btn-collapse i-ticket__btn-collapse s16x16 s-icon mbar-showall\"></div>' +\n            '{{?value.title}}<div class=\"b-ticket__title\">{{=value.title}}</div>{{?}}' +\n            '<div class=\"b-ticket__body b-ticket__body_same_prop\">{{var b = String(value.body).replace(/\\\\s\\\\r\\\\n|\\\\r\\\\n|\\\\s\\\\n|\\\\n/g, \"<br/>\");}}{{=b}}</div>' +\n            //file\n            '{{?value.file.is}}' +\n              '{{~value.file.elems :vv :ii}}' +\n                '<div class=\"b-ticket__file\">' +\n                  '<a href=\"?func={{=vv.action}}{{~vv.params :v:i}}&{{=v.name}}={{=v.value}}{{~}}\" target=\"_blank\" class=\"b-ticket__file-link {{?vv.preview}}b-image-for-view{{?}}\">{{=vv.name}}</a>' +\n                '</div>' +\n              '{{~}}' +\n            '{{?}}' +\n            //rate\n            '{{?value.rate.is}}' +\n              '<div class=\"b-ticket__rate\">' +\n                '{{~value.rate.items :vv :ii}}' +\n                '<div class=\"b-ticket__rate-item\" data-id=\"{{=vv.id}}\" data-elid=\"{{=vv.elid}}\">' +\n                  '<span class=\"b-ticket__rate-msg\">{{=vv.msg}}</span>' +\n                  '{{~vv.items :v:i}}' +\n                  '<div class=\"b-ticket__rate-{{=v.name}} {{=v.classes}}\" data-name=\"{{=v.name}}\" data-func=\"{{=v.func}}\" data-type=\"{{=v.type}}\"><img src=\"{{=v.img}}\" data-hint=\"{{=App.u.escapeQuote(window.filterXSS(v.hint))}}\" class=\"b-ticket__rate-img hint\"/><span class=\"b-ticket__rate-text\">{{=v.msg}}</span></div>' +\n                  '{{~}}' +\n                  '</div>' +\n                '{{~}}' +\n                '</div>' +\n            '{{?}}' +\n            '<div class=\"b-ticket__clear\"></div>' +\n          '{{?}}' +\n          '</div>' +\n          '</div>' +\n        '</td>' +\n        '<td class=\"b-ticket__table-col b-ticket__table-col_type_avatar\">' +\n        '{{?value.avatar.is && (value.type === \"incoming\" || value.type === \"outcoming\")}}' +\n          '<div class=\"b-ticket__avatar b-ticket__avatar_{{=value.type}}\">' +\n            '<img src=\"{{=value.avatar.src}}\" width=\"{{=value.avatar.width}}\" height=\"{{=value.avatar.height}}\" class=\"b-ticket__avatar-img\"/>' +\n          '</div>' +\n        '{{?}}' +\n      '</td>' +\n      '</tr>' +\n    '{{~}}';\n\n  var formItemTicket = '<div class=\"b-ticket\" {{?it.fontsize||it.fontfamily}} style=\"{{?it.fontsize}}font-size: {{=it.fontsize}}px;{{?}} {{?it.fontfamily}}font-family: {{=String(it.fontfamily).replace(/\"/g, \\'&quot;\\')}}{{?}}{{?}}\">' +\n      '<div class=\"b-ticket__btn-move-wrapper\"><div class=\"b-ticket__btn-move_up b-ticket__btn-move i-ticket__btn-move_up\" data-tabid=\"{{=it.id}}\"></div><div class=\"b-ticket__btn-move_down b-ticket__btn-move i-ticket__btn-move_down\" data-tabid=\"{{=it.id}}\"></div></div>' +\n      '<table class=\"b-ticket__table {{?it.fmsgtype === \"outcoming\"}}b-ticket__table_my_outcoming{{?}}\" id=\"{{=it.id}}-{{=it.name}}\" data-type=\"ticket\">' +\n        '<tbody class=\"b-table__tbody\">' +\n        formItemTicketMsg +\n        '</tbody>' +\n      '</table>' +\n    '</div>';\n\n  var formItemSelectAutocomplete = '<div class=\"{{=it.depend}} b-select-ac\">' +\n    '<input type=\"text\" autocomplete=\"off\" data-name=\"{{=it.name}}\" {{=it.attr}} class=\"{{=it.classes}} b-input b-select-ac__input force-hint\" id=\"{{=it.name}}-{{=it.id}}\" data-tabid=\"{{=it.id}}\" />' +\n    '</div>' +\n    '<div class=\"b-select-ac__list-scroll-wrapper\" id=\"opt-{{=it.name}}-{{=it.id}}\" data-tabid=\"{{=it.id}}\">' +\n      '<div class=\"b-select-ac__list-wrapper {{=it.dependFields}}\" id=\"cont-b-select-ac-list__{{=it.name}}-{{=it.id}}\">' +\n        '<ul class=\"b-select-ac__list\" data-id=\"{{=it.name}}-{{=it.id}}\" id=\"b-select-ac-list__{{=it.name}}-{{=it.id}}\"></ul>' +\n        '<input value=\"{{=it.value}}\" type=\"hidden\" name=\"{{=it.name}}\" class=\"{{=it.classes}}\" id=\"key-{{=it.name}}-{{=it.id}}\" data-tabid=\"{{=it.id}}\"/>' +\n      '<div>' +\n    '</div>';\n\n  var formItemFrame = '<div class=\"b-form-frame\">' +\n      '<iframe frameborder=\"0\" id=\"{{=it.name}}-{{=it.id}}\" name=\"{{=it.name}}\" class=\"{{?it.fullheight}}i-control__fullwidth{{?}}\" data-type=\"frame\" src=\"{{=it.value}}\" width=\"100%\" height=\"{{=it.height}}\"></iframe>' +\n      '<div class=\"b-resizer\" id=\"resizer_editor-{{=it.id}}\" data-id=\"{{=it.name}}-{{=it.id}}\" data-tabid=\"{{=it.id}}\"></div>' +\n      '</div>';\n\n  var formItemDateTime = '<div class=\"b-form-datetime\" id=\"{{=it.id}}-{{=it.name}}\" data-type=\"datetime\" data-difftime=\"{{=it.difftime}}\">{{=it.value}}</div>';\n\n  var formPageTitle = '<h3 class=\"l-form-page__title-wr\" data-name=\"{{=it.name}}\" id=\"tblock-{{=it.id}}\" data-type=\"{{=it.type}}\" data-block-type=\"{{=it.blockType}}\">' +\n    '<div tabindex=\"0\" class=\"b-form-page__title i-form-page__title\">' +\n      '<span class=\"b-form-page__title-content\" data-mn=\"{{=it.name}}\">{{=it.title}}</span>' +\n      '{{?it.reload}}<span class=\"dashblock-reload hint\" data-hint-mn=\"hint_reload\" data-hint=\"{{=App.u.escapeQuote(it.hintReload)}}\"></span>{{?}}' +\n      '<span class=\"b-triangle hint\" data-hint-expanded=\"{{=App.u.escapeQuote(it.hintCollapse)}}\" data-hint-collapsed=\"{{=App.u.escapeQuote(it.hintExpand)}}\" data-state=\"{{?it.collapsed}}collapsed{{??}}expanded{{?}}\"></span>' +\n    '</div>' +\n    '<div class=\"b-form-page__vline\"></div>' +\n  '</h3>';\n\n  var formItemMgrview = '<div class=\"mgrview\" id=\"mgrview-{{=it.tabId}}\"><!--<img src=\"{{=it.theme}}/img/hue.png\" width=\"251\" height=\"168\"/>--><div id=\"{{=it.tabId}}-color1\" class=\"color1 color\"></div><div class=\"color2 color\" id=\"{{=it.tabId}}-color2\" ></div><div class=\"color3 color\" id=\"{{=it.tabId}}-color3\" ></div><div class=\"color4 color\" id=\"{{=it.tabId}}-color4\" ></div><div class=\"color5 color\" id=\"{{=it.tabId}}-color5\" ></div><div class=\"color6 color\" id=\"{{=it.tabId}}-color6\" ></div><div class=\"color7 color\" id=\"{{=it.tabId}}-color7\" ></div></div>';\n\n  var formPageWrapper = '<div class=\"b-form-page b-form-page_view_{{=it.view}} {{=it.classes}} {{?it.withList}}b-form-page_withlist_yes{{?}} {{?it.collapsed}}b-form-page_st_collapsed{{?}}\" id=\"page-{{=it.name}}-{{=it.tabId}}\" data-tabid=\"{{=it.tabId}}\" {{ if (it.hide) { for(var i =0; i< it.hide.length; i++) { }} {{=it.hide[i].name + \"-\" + hash(it.hide[i].value)}}=\"yes\" {{ } } }} {{ if (it.show) { for (var i =0; i< it.show.length; i++) { }} {{=it.show[i].name + \"-\" + it.hash(it.show[i].value)}}=\"yes\" {{ } } }}>' +\n    '{{=it.title}}' +\n    '<div class=\"b-form-page__inner\" style=\"display:{{=it.display}};\" >' +\n      '<table class=\"l-form__table\">' +\n        '<tbody class=\"b-table__tbody\">' +\n        '{{=it.content}}' +\n        '</tbody>' +\n      '</table>' +\n    '</div>' +\n  '</div>';\n\n  var filterWrapper = '<div class=\"filter-inner\">' +\n    '<form name=\"frm-{{=it.tabId}}\" id=\"frm-{{=it.tabId}}\">' +\n      '<input type=\"hidden\" value=\"{{=it.func}}\" name=\"func\"/>' +\n      '<div class=\"filter-inner-inner\">' +\n        '<div class=\"filter-cont\"><table><tr>{{=it.form}}</tr></table></div>' +\n        '<div class=\"filter-btn-wrapper\">' +\n          '<div class=\"filter-btns\">' +\n            '<div class=\"b-button b-button__filter-set b-button_style_ok\" data-tabid=\"{{=it.tabId}}\" data-disabled=\"{{=it.disabled}}\" tabindex=\"0\">{{=it.filterMsg.findMsg}}</div>' +\n            '<div class=\"b-button b-button__filter-save\" data-id=\"{{=it.tabId}}\" tabindex=\"0\">{{=it.filterMsg.saveMsg}}<div class=\"b-button__filter-save-name\">{{=it.sfname||\"\"}}</div></div>' +\n            '<div class=\"b-button b-button__filter-clear\" data-tabid=\"{{=it.tabId}}\" tabindex=\"0\">{{=it.filterMsg.clearMsg}}</div>' +\n          '</div>' +\n        '</div>' +\n        '<div class=\"clearBoth\"></div>' +\n      '</div>' +\n    '</form>' +\n  '</div>';\n\n  var filterItem =\n      '<tr class=\"filter-item {{=it.classes}} l-form__row\" {{ if (it.hide) { for (var i = 0; i < it.hide.length; i++) { }} {{=it.hide[i].name + \"-\" + hash(it.hide[i].value)}}=\"yes\" {{ } } }} {{ if (it.show) { for (var i = 0; i < it.show.length; i++) { }} {{=it.show[i].name + \"-\" + hash(it.show[i].value)}}=\"yes\" {{ } } }}>' +\n        '<td class=\"filter-first\">{{=it.first}}</td>' +\n        '<td class=\"filter-second\"><div class=\"filter-input\">{{=it.second}}</div></td>' +\n      '</tr>';\n\n  var filterRow = '<td class=\"filter-col\">' +\n      '<table class=\"filter-item__table filter-table_n_{{=it.index}}\">{{=it.content}}</table>' +\n      '</td>';\n\n  var filterSavedItem =\n      '<div class=\"b-filter__saved-item {{?it.active}}b-filter__saved-item_st_active{{?}}\">' +\n          '<div class=\"b-filter__saved-item-inner\">' +\n            '<input type=\"text\" class=\"b-filter__saved-name-edit\" ' +\n          'id=\"b-filter__saved-name-edit_tid_{{=it.id}}\" value=\"{{=it.name}}\" ' +\n          'data-id=\"{{=it.id}}\" data-func=\"{{=it.func}}\" data-tabid=\"{{=it.tabId}}\" data-name=\"{{=it.name}}\" />' +\n            '<span class=\"b-filter__saved-name\">{{=it.name}}</span>' +\n          '</div>' +\n          '<span class=\"b-filter__saved-edit\" data-id=\"{{=it.id}}\"></span>' +\n          '<span class=\"b-filter__saved-remove\" data-id=\"{{=it.id}}\"></span>' +\n      '</div>';\n\n  var formItemRowDesc = '<tr class=\"{{=it.classes}} l-form__row\" {{ if (it.hide) { for (var i = 0; i < it.hide.length; i++) { }} {{=it.hide[i].name + \"-\" + hash(it.hide[i].value)}}=\"yes\" {{ } } }} {{ if (it.show) { for (var i  =0; i < it.show.length; i++) { }} {{=it.show[i].name + \"-\" + hash(it.show[i].value)}}=\"yes\" {{ } } }}>' +\n    '<td class=\"l-form__col l-form__col_cont_label\" colspan=\"4\">{{=it.second}}</td>' +\n  '</tr>';\n\n  var formItemRow = '<tr class=\"{{=it.classes}} l-form__row i-form__item\" {{ if (it.hide) { for (var i =0; i < it.hide.length; i++) { }} {{=it.hide[i].name + \"-\" + hash(it.hide[i].value)}}=\"yes\" {{ } } }} {{ if (it.show) { for (var i =0; i < it.show.length; i++) { }} {{=it.show[i].name + \"-\" + hash(it.show[i].value)}}=\"yes\" {{ } } }}>' +\n    '<td class=\"l-form__col l-form__col_cont_label\">{{=it.first}}</td>' +\n    '<td class=\"l-form__col l-form__col_cont_control\" {{=it.colspan}}>' +\n      '<div class=\"l-form__table-control-wrapper\">' +\n      '<table class=\"l-form__table-control\">' +\n        '<tbody class=\"b-table__tbody\">' +\n        '<tr>' +\n          '<td class=\"l-form__col-control\">' +\n            '<div class=\"l-form__control-wr\">{{=it.second}}</div>' +\n          '</td>' +\n          '<td class=\"l-form__col l-form__col_cont_hint\">' +\n            '<div class=\"field-help {{=it.hint}} hint\" data-hint-mn=\"{{=it.fname}}\" data-hint=\"{{=it.third}}\"></div>' +\n          '</td>' +\n          '<td class=\"l-form__col l-form__col_cont_status\">' +\n            '<div class=\"field-desc\" data-mn=\"{{=it.descName}}\">{{=it.desc}}</div>' +\n            '<div class=\"field-status\"></div>' +\n            '{{?it.devMode || it.testMode}}' +\n              '<div class=\"field-settings\">' +\n                '{{?it.devMode}}' +\n                '<a href=\"#\" class=\"devel-link-settings devel-link-settings--field \" data-elid=\"{{=it.fname}}\" data-tabid=\"{{=it.tabId}}\"></a>' +\n                '<a href=\"#\" class=\"devel-link-delete devel-link-delete--field\" data-elid=\"{{=it.fname}}\" data-name=\"{{=it.label}}\" data-tabid=\"{{=it.tabId}}\"></a>' +\n                '{{??}}' +\n                '<a href=\"#\" class=\"testmode__form-link b-elem_style_gracescale\" data-elid=\"{{=it.fname}}\" data-tabid=\"{{=it.tabId}}\"></a>' +\n                '{{?}}' +\n              '</div>' +\n            '{{?}}' +\n          '</td>' +\n        '</tr>' +\n        '<tr class=\"l-form__col-error\">' +\n          '<td colspan=\"3\" class=\"\">' +\n            '<div class=\"b-error-box__wrapper\" data-id=\"{{=it.id}}\">' +\n              '<div class=\"b-error-box\">' +\n                '<div class=\"b-error-box__top-triangle\"></div>' +\n                '<div class=\"b-error-box__inner\">{{=it.error}}</div>' +\n              '</div>' +\n            '</div>' +\n          '</td>' +\n        '</tr>' +\n        '</tbody>' +\n      '</table>' +\n      '</div>' +\n    '</td>' +\n    '<td class=\"l-form__col l-form__col_cont_row-end\"></td>' +\n  '</tr>';\n\n  var formItemFullWidthRow = '<tr class=\"{{=it.classes}} l-form__row i-form__item\" {{ if (it.hide) { for (var i =0; i < it. hide.length; i++) { }} {{=it.hide[i].name + \"-\" + hash(it.hide[i].value)}}=\"yes\" {{ } } }} {{ if (it.show) { for (var i =0; i < it.show.length; i++) { }} {{=it.show[i].name + \"-\" + hash(it.show[i].value)}}=\"yes\" {{ } } }}>' +\n    '<td colspan=\"3\" class=\"l-form__col_type_fullwidth l-form__col l-form__col_cont_control\">' +\n      '{{=it.first}}' +\n      '<table class=\"l-table-fullwidth\">' +\n        '<tbody class=\"b-table__tbody\">' +\n        '<tr>' +\n          '<td class=\"l-form__col-control\">' +\n            '<div class=\"l-form__control-wr\">{{=it.second}}</div>' +\n          '</td>' +\n          '<td class=\"l-form__col l-form__col_cont_hint\">' +\n            '<div class=\"field-help {{=it.hint}} hint\" data-hint-mn=\"{{=it.fname}}\" data-hint=\"{{=it.third}}\"></div>' +\n          '</td>' +\n          '<td class=\"l-form__col l-form__col_cont_status\">' +\n            '<div class=\"field-status\" ></div>' +\n             '{{?it.devMode || it.testMode}}' +\n              '<div class=\"field-settings\">' +\n                '{{?it.devMode}}' +\n                '<a href=\"#\" class=\"devel-link-settings devel-link-settings--field \" data-elid=\"{{=it.fname}}\" data-tabid=\"{{=it.tabId}}\"></a>' +\n                '<a href=\"#\" class=\"devel-link-delete devel-link-delete--field\" data-elid=\"{{=it.fname}}\" data-name=\"{{=it.label}}\" data-tabid=\"{{=it.tabId}}\"></a>' +\n                '{{??}}' +\n                '<a href=\"#\" class=\"testmode__form-link b-elem_style_gracescale\" data-elid=\"{{=it.fname}}\" data-tabid=\"{{=it.tabId}}\"></a>' +\n                '{{?}}' +\n              '</div>' +\n            '{{?}}' +\n          '</td>' +\n        '</tr>' +\n        '<tr class=\"l-form__col-error\">' +\n          '<td colspan=\"3\" class=\"error\">' +\n            '<div class=\"b-error-box__wrapper\" data-id=\"{{=it.id}}\">' +\n              '<div class=\"b-error-box\">' +\n                '<div class=\"b-error-box__top-triangle\"></div>' +\n                '<div class=\"b-error-box__inner\">{{=it.error}}</div>' +\n              '</div>' +\n            '</div>' +\n          '</td>' +\n        '</tr>' +\n        '</tbody>' +\n      '</table>' +\n    '</td>' +\n  '</tr>';\n\n  var formItemFormWidthRow = '<tr class=\"{{=it.classes}} l-form__row i-form__item\" {{ if (it.hide) { for (var i =0; i < it. hide.length; i++) { }} {{=it.hide[i].name + \"-\" + hash(it.hide[i].value)}}=\"yes\" {{ } } }} {{ if (it.show) { for (var i =0; i < it.show.length; i++) { }} {{=it.show[i].name + \"-\" + hash(it.show[i].value)}}=\"yes\" {{ } } }}>' +\n    '<td colspan=\"2\" class=\"formwidth l-form__col l-form__col_cont_control\">' +\n      '{{=it.first}}' +\n      '<table class=\"l-form__table-formwidth l-table-clean\">' +\n        '<tbody class=\"b-table__tbody\">' +\n        '<tr>' +\n          '<td class=\"l-form__col-control\">' +\n            '<div class=\"l-form__control-wr\">{{=it.second}}</div>' +\n          '</td>' +\n          '<td class=\"l-form__col l-form__col_cont_hint\">' +\n            '<div class=\"field-help {{=it.hint}} hint\" data-hint-mn=\"{{=it.fname}}\" data-hint=\"{{=it.third}}\"></div>' +\n          '</td>' +\n          '<td class=\"l-form__col l-form__col_cont_status\">' +\n            '<div class=\"field-desc\"></div>' +\n            '<div class=\"field-status\" ></div>' +\n          '</td>' +\n        '</tr>' +\n        '<tr class=\"l-form__col-error\">' +\n          '<td colspan=\"3\" class=\"error\">' +\n            '<div class=\"b-error-box__wrapper\" data-id=\"{{=it.id}}\">' +\n              '<div class=\"b-error-box\">' +\n                '<div class=\"b-error-box__top-triangle\"></div>' +\n                '<div class=\"b-error-box__inner\">{{=it.error}}</div>' +\n              '</div>' +\n            '</div>' +\n          '</td>' +\n        '</tr>' +\n        '</tbody>' +\n      '</table>' +\n    '</td>' +\n    '<td class=\"l-form__col l-form__col_cont_row-end\"></td>' +\n  '</tr>';\n\n  var formItemRowWithoutLabel = '<tr class=\"{{=it.classes}} l-form__row i-form__item without-label\" {{ if (it.hide) { for (var i =0; i < it.hide.length; i++) { }} {{=it.hide[i].name + \"-\" + hash(it.hide[i].value)}}=\"yes\" {{ } } }} {{ if (it.show) { for (var i = 0; i< it.show.length; i++) { }} {{=it.show[i].name + \"-\" + hash(it.show[i].value)}}=\"yes\" {{ } } }}>' +\n    '<td class=\"l-form__col l-form__col_cont_control\" colspan=\"2\">' +\n      '<table class=\"l-table-clean\">' +\n        '<tbody class=\"b-table__tbody\">' +\n        '<tr>' +\n          '<td class=\"l-form__col-control\">' +\n            '<div class=\"l-form__control-wr\">{{=it.second}}</div>' +\n          '</td>' +\n          '<td class=\"l-form__col l-form__col_cont_hint\">' +\n            '<div class=\"field-help {{=it.hint}} hint\" data-hint-mn=\"{{=it.fname}}\" data-hint=\"{{=it.third}}\"></div>' +\n          '</td>' +\n          '<td class=\"l-form__col l-form__col_cont_status\">' +\n            '<div class=\"field-desc\">{{=it.desc}}</div>' +\n            '<div class=\"field-status\"></div>' +\n          '{{?it.devMode}}' +\n            '<div class=\"field-settings\">' +\n              '<a href=\"#\" class=\"devel-link-settings devel-link-settings--field\" data-elid=\"{{=it.fname}}\" data-tabid=\"{{=it.tabId}}\"></a>' +\n              '<a href=\"#\" class=\"devel-link-delete devel-link-delete--field\" data-elid=\"{{=it.fname}}\" data-name=\"{{=it.label}}\" data-tabid=\"{{=it.tabId}}\"></a>' +\n            '</div>' +\n          '{{?}}' +\n          '</td>' +\n        '</tr>' +\n        '<tr class=\"l-form__col-error\">' +\n          '<td colspan=\"3\" class=\"error\">' +\n            '<div class=\"b-error-box__wrapper\" data-id=\"{{=it.id}}\">' +\n              '<div class=\"b-error-box\">' +\n                '<div class=\"b-error-box__top-triangle\"></div>' +\n                '<div class=\"b-error-box__inner\">{{=it.error}}</div>' +\n              '</div>' +\n            '</div>' +\n          '</td>' +\n        '</tr>' +\n        '</tbody>' +\n      '</table>' +\n    '<td class=\"l-form__col l-form__col_cont_row-end\"></td>' +\n//    '</td>' +\n  '</tr>';\n\n  var formItemRowHidden = '<tr class=\"hidden l-form__row_type_hidden\">' +\n      '<td class=\"l-form__col l-form__col_cont_control\" colspan=\"4\">{{=it.second}}</td>' +\n    '</tr>';\n\n  var formItemRowTextdata = '<tr class=\"{{=it.classes}} l-form__row i-form__item\" {{ if (it.hide) { for (var i = 0; i < it.hide.length; i++) { }} {{=it.hide[i].name + \"-\" + hash(it.hide[i].value)}}=\"yes\" {{ } } }} {{ if (it.show) { for (var i =0; i < it.show.length; i++) { }} {{=it.show[i].name + \"-\" + hash(it.show[i].value)}}=\"yes\" {{ } } }}>' +\n    '<td colspan=\"3\">{{=it.second}}</td>' +\n    '</tr>';\n\n  var formPlainHint = '<tr data-show-{{=it.name}}-{{=window.hash(it.key)}}=\"yes\" class=\"depended-hidden-s l-form__row l-form__row_type_plainhint\">' +\n        '<td class=\"l-form__col-control\" colspan=\"2\">{{=window.htmlEncode(it.content)}}</td>' +\n        '<td class=\"l-form__col l-form__col_cont_row-end\"></td>' +\n      '</tr>';\n\n  var tabLi = '<li class=\"tab-group\" id=\"{{=it.tabId}}\">' +\n    '<span class=\"subtab switch first hint {{?it.isPin}}subtab_is_pin{{?}}\" id=\"switch-{{=it.tabId}}\" data-hint=\"{{=it.hint}}\" data-tabid=\"{{=it.tabId}}\">' +\n      '<a href=\"#\" data-tabid=\"{{=it.tabId}}\"><div {{=it.pinIcon}}></div><span class=\"short\">{{=it.shortTitle}}</span><span class=\"full\">{{=it.title}}</span></a>' +\n      '<a href=\"#\" class=\"close\" rel=\"{{=it.tabId}}\"><div class=\"b-tab-close\"></div></a>' +\n    '</span>' +\n  '</li>';\n\n  var tabChld = '<span id=\"{{=it.tabId}}\"><span class=\"sepr\"></span>' +\n    '<span class=\"subtab switch hint\" id=\"switch-{{=it.tabId}}\" data-hint=\"{{=it.hint}}\" data-tabid=\"{{=it.tabId}}\">' +\n      '<a href=\"#\"  data-tabid=\"{{=it.tabId}}\"><span class=\"short\">{{=it.shortTitle}}</span><span class=\"full\">{{=it.title}}</span></a>' +\n      '<a href=\"#\" class=\"close\" rel=\"{{=it.tabId}}\"><div class=\"i-tab-close b-tab-close\"></div></a>' +\n    '</span>' +\n  '</span>';\n\n  var progressBar = '<div id=\"{{=it.tabId}}-progressbar\" class=\"b-progressbar__outer\">' +\n    '<div class=\"b-progressbar__inner\">' +\n      '<div class=\"b-progressbar__comment\">{{=it.comment}}</div>' +\n      '<div class=\"b-progressbar__loader-wr\">' +\n        '<div class=\"b-progressbar__loader {{=it.colorClass}}\" style=\"width: {{=it.width}}%;\">{{=it.per}}</div>' +\n      '</div>' +\n    '</div>' +\n  '<div/>';\n\n  var reportBand = '<div class=\"band-content {{=it.fullwidth}}\" id=\"{{=it.aid}}\">' +\n    '<div class=\"band-title {{=it.titleClass}}\">{{=it.title}}</div>' +\n    '<div class=\"band-graphic\" ><div class=\"anychart\" id=\"{{=it.gid}}\">' +\n    //wrappers for graphics\n    '{{ for (var i = 0; i < it.dc; i++) { }}' +\n      '<div id=\"{{=it.gid}}{{=i}}\"></div>' +\n    '{{ } }}' +\n  //wrappers for graphics\n    '</div></div>' +\n    '<div class=\"band_show\">' +\n    '<div class=\"band_show_button {{=it.hidden}}\" data-id=\"{{=it.id}}\">' +\n      '<span class=\"show_msg\">{{=it.showMsg}}</span>' +\n      '<span class=\"hide_msg\">{{=it.hideMsg}}</span>' +\n      '<span class=\"triangle-band\"></span></div>' +\n    '</div>' +\n    '<div class=\"band-table block-table {{=it.hiddenClass}}\" id=\"{{=it.id}}\">{{=it.table}}</div>' +\n  '</div>';\n\n  var emptyBandOverlay = '<div class=\"b-band__empty-overlay\"></div>' +\n      '<div class=\"b-band__empty-msg\">{{=it.emptymsg}}</div>' +\n      '<div class=\"b-band__empty-wrapper\" id=\"{{=it.tabId}}-band-empty\"></div>';\n\n  var reportBandDash = '<div class=\"band-content {{=it.fullwidth}}\">' +\n    '{{?it.empty}}' +\n      emptyBandOverlay +\n    '{{?}}' +\n    '<div class=\"band-title {{=it.titleClass}}\">{{=it.title}}</div>' +\n    '<div id=\"{{=it.gid}}\" class=\"band-chart-cont\"></div></div>' +\n  '</div>';\n\n  var fatalError = '<div id=\"fatal-error-{{=it.id}}\" class=\"b-fatal-error b-err__{{=it.type}}\">' +\n    '<div class=\"b-fatal-error__round\">' +\n      '<div class=\"b-fatal-error__inner\">' +\n        '<div class=\"b-fatal-error__sign\">' +\n          '<div class=\"b-fatal-error__sign-top\"></div>' +\n          '<div class=\"b-fatal-error__sign-body\"></div>' +\n          '<div class=\"b-fatal-error__sign-empty\"></div>' +\n          '<div class=\"b-fatal-error__sign-dot\"></div>' +\n        '</div>' +\n        '<div class=\"b-fatal-error__message\">' +\n            '{{=it.message}}' +\n          '{{?it.ref}}' +\n            '<div class=\"more b-fatal-error__more-link\"><a href=\"{{=it.ref}}&newwindow=yes\" target=\"_blank\">{{=it.moreMsg}}</a></div>' +\n          '{{?}}' +\n          '{{?it.refreshLink}}' +\n            '<div class=\"m-item b-fatal-error__refresh-link\"><a href=\"#\" data-url=\"{{=it.refreshLink}}\" >{{=it.refreshLinkMsg}}</a></div>' +\n          '{{?}}' +\n        '</div>' +\n        '{{?it.id}}' +\n        '<div class=\"l-buttons l-buttons_for_fatalerror\">' +\n          '<div class=\"b-button b-button_type_cancel b-button_for_fatalerror i-button_type_cancel\" data-flags=\"refresh\" tabindex=\"0\" data-tabid=\"{{=it.id}}\">{{=it.msgClose}}</div>' +\n        '</div>' +\n        '{{?}}' +\n      '</div>' +\n    '</div>' +\n    '<div class=\"b-fatal-error__triangle\">' +\n    '</div>' +\n  '</div>';\n\n  var editinListForm = '<div>' +\n    '<form id=\"editinlist-form-{{=it.id}}\" class=\"l-form__row\">' +\n      '{{=it.field}}' +\n      '<input type=\"hidden\" name=\"elid\" value=\"{{=it.elid}}\" />' +\n      '<input type=\"hidden\" name=\"sok\" value=\"ok\" />' +\n      '<input type=\"hidden\" name=\"func\" value=\"{{=it.func}}\" />' +\n    '</form>' +\n    '<div class=\"l-buttons l-buttons_for_editinlist\">' +\n      '<div class=\"b-button b-button_style_small b-button_style_green i-btn-editlis-ok\" data-id=\"{{=it.id}}\">&#10004</div>' +\n      '<div class=\"b-button b-button_style_small b-button_style_red i-btn-editlis-cancel\" data-id=\"{{=it.id}}\">&#10008</div>' +\n    '</div>' +\n    '<div id=\"err-cont-{{=it.id}}\" class=\"editlist-err-cont\"></div>' +\n  '</div>';\n\n  var hintList = '{{?val.hintByName}}<div class=\"field-help field-help_available_yes hint b-form-list__hint\" data-hint=\"{{=App.u.escapeQuote(val.hintByName)}}\"></div>{{?}}';\n\n\n  var formListFilterWrapper = '<div id=\"{{=it.id}}-{{=it.name}}\" data-type=\"listfilter\">{{=it.content}}</div>';\n\n  var formListFilter = '<div class=\"checkbox i-form__item i-form-list__filter\" data-srcname=\"{{=it.srcName}}\" data-tabid=\"{{=it.id}}\">' +\n         '<div class=\"b-form-list__filter\">' +\n            '{{~it.list :val :ind}}' +\n              '{{val.id = it.id;}}' +\n              formItemCheckbox +\n            '{{~}}' +\n          '</div>' +\n          '<div class=\"b-form-list__filter-clear i-form-list__filter-clear\">{{=it.resetMsg}}</div>' +\n          '<div class=\"b-form-list__filter-notfound\">{{=it.notFoundMsg}}</div>' +\n        '</div>';\n\n  var formListContent =\n      `<div class=\"b-form-list b-form-list_view_{{=it.view}} i-form-list\" id=\"form-list-{{=it.id}}-{{=it.name}}\">\n          <table class=\"b-form-list__table\" data-name=\"{{=it.name}}\" data-key=\"{{=it.key}}\" id=\"inner-form-list-{{=it.id}}-{{=it.name}}\">\n            <tbody class=\"b-table__tbody\">\n          {{~it.rows :v :i}}\n            <tr class=\"b-form-list__row b-form-list__row_t_{{?(i % 2) === 0}}even{{??}}odd{{?}}\n             {{?it.filterfield && v[it.filterfield]}} row__has__tags\n              {{~v[it.filterfield].v :val :ind}} filter__{{=val}} {{~}}{{??}} row__nohas__tags{{?}}\">\n              {{ for (var key in it.coldata) { }}\n                <td class=\"b-form-list__col b-form-list__col_align_{{=it.coldata[key].align}} b-form-list__col_type_{{=it.coldata[key].type}} {{?v[key] && v[key].header}}b-form-list__col_header_yes{{?}} b-form-list__col_name_{{=key}}\" data-colname=\"{{=key}}\" style=\"width: {{=it.coldata[key].width}}; min-width: {{=it.coldata[key].width}}\">\n                  <div class=\"b-form-list__col-inner b-form-list__col-inner_type_{{=it.coldata[key].type}} {{?it.coldata[key].hint && v[key + \"_hint\"]}}hint{{?}}\" {{?it.coldata[key].hint && v[key + \"_hint\"]}}data-hint=\"{{=App.u.escapeQuote(v[key + \"_hint\"].v)}}\" {{?}}>\n                  {{?v[key]}}\n                    {{?it.coldata[key].type === \"data\" || it.coldata[key].type === \"msg\" || v[key].header}}\n                      <div class=\"b-form-list__data {{?v[key].color}}status-{{=v[key].color}}{{?}} {{?it.testMode}}i-testmode-field{{?}}\">\n                       {{~v[key].props :prop :index }}\n                          {{?index !== 0}}\n                          <div class=\"s-icon s16x16 props  hint\" style=\"background-image: url({{=prop.img}})\" data-hint=\"{{=App.u.escapeQuote(prop.hint)}}\"></div>\n                          {{?}}\n                       {{~}}\n                       {{=window.filterXSS(window.htmlDecode(v[key].v))}}</div>\n                    {{??it.coldata[key].type === \"img\"}}\n                      {{?v[key].src}}\n                        {{?v[key].preview}}\n                          <a href=\"{{=v[key].src}}\" class=\"b-image-for-view\" data-lightbox=\"formlist\" target=\"_blank\">\n                        {{?}}\n                        <img src=\"{{=v[key].src}}\" class=\"b-form-list__img\" width=\"{{=v[key].width}}\" height=\"{{=v[key].height}}\"/>\n                        {{?v[key].preview}}\n                          </a>\n                        {{?}}\n                      {{??v[key].img}}\n                        <div class=\"{{=v[key].img}}\"></div>\n                      {{?}}\n                    {{??it.coldata[key].type === \"button\"}}\n                       {{~v[key] :val :ind}}\n                          ${button}\n                       {{~}}\n                    {{??it.coldata[key].type === \"control\"}}\n                      {{~v[key] :val :ind}}\n                          {{?val.type === \"checkbox\"}}\n                            {{val.id = it.id;}}\n                           <div class=\"i-form__item b-form-list__form-item\"><div class=\"b-form-list__control-wrapper\">${formItemCheckbox}</div>${hintList}</div>\n                         {{??val.type === \"select\"}}\n                            {{val.id = it.id;}}\n                            <div class=\"i-form__item b-form-list__form-item\"><div class=\"b-form-list__control-wrapper\">${formItemSelect}</div>${hintList}</div>\n                          {{??val.type === \"text\"}}\n                            {{val.id = it.id;}}\n                            <div class=\"i-form__item b-form-list__form-item\"><div class=\"b-form-list__control-wrapper\">${formItemInput}</div>${hintList}</div>\n                        {{?}}\n                      {{~}}\n                    {{?}}\n                  {{?}}\n                  </div>\n                </td>\n              {{ } }}\n            </tr>\n          {{~}}\n          </tbody>\n          </table>\n      </div>`;\n\n  var formListBlocksContent = '{{?it.label}}<h3 class=\"b-form-blocks__label\">{{=it.label}}</h3>{{?}}' +\n   '<div class=\"b-form-blocks\">' +\n      '{{~it.rows :v :i}}' +\n        '<div class=\"b-form-blocks__block {{?it.filterfield && v[it.filterfield]}} row__has__tags' +\n              '{{~v[it.filterfield].v :val :ind}} filter__{{=val}} {{~}}{{??}} row__nohas__tags{{?}}\">' +\n          '{{ for (var key in it.coldata) { }}' +\n    //      '<td class=\"b-form-list__col align-{{=it.coldata[key].align}}\" style=\"width: {{=it.coldata[key].width}};\">' +\n            '<div class=\"b-form-list__col-inner b-form-blocks__col-inner_type_{{=it.coldata[key].type}}\">' +\n            '{{?v[key]}}' +\n              '{{?it.coldata[key].type === \"data\" || it.coldata[key].type === \"msg\"}}' +\n              '<div class=\"b-form-list__data {{?v[key].color}}status-{{=v[key].color}}{{?}}\">{{=window.filterXSS(window.htmlDecode(v[key].v))}}</div>' +\n              '{{??it.coldata[key].type === \"img\"}}' +\n                '{{?v[key].src}}' +\n                  '<img src=\"{{=v[key].src}}\" class=\"b-form-list__img\" width=\"{{=v[key].width}}\" height=\"{{=v[key].height}}\"/>' +\n                '{{??v[key].img}}' +\n                  '<div class=\"{{=v[key].img}}\"></div>' +\n                '{{?}}' +\n              '{{??it.coldata[key].type === \"button\"}}' +\n              '<div class=\"b-form-list__button-wrapper\">' +\n              '{{~v[key] :val :ind}}' +\n                button +\n              '{{~}}' +\n              '</div>' +\n              '{{?}}' +\n            '{{?}}' +\n            '</div>' +\n    //      '</td>' +\n          '{{ } }}' +\n        '</div>' +\n      '{{~}}' +\n      '</div>';\n\n  var formListItemRow =\n      '<tr class=\"{{=it.classes}} l-form__row\" {{ if (it.hide) { for (var i =0; i < it.hide.length; i++) { }} {{=it.hide[i].name + \"-\" + hash(it.hide[i].value)}}=\"yes\" {{ } } }} {{ if (it.show) { for (var i =0; i < it.show.length; i++) { }} {{=it.show[i].name + \"-\" + hash(it.show[i].value)}}=\"yes\" {{ } } }}>' +\n        '<td class=\"l-form__col l-form__col_cont_control\" colspan=\"3\">' +\n          '<div id=\"{{=it.id}}-{{=it.name}}\" class=\"{{=it.id}}-list\" data-type=\"list\" data-name=\"{{=it.name}}\">' +\n            '{{?it.view == \"block\"}}' +\n              formListBlocksContent +\n            '{{??}}' +\n              formListContent +\n            '{{?}}' +\n          '</div>' +\n        '</td>' +\n      '</tr>';\n\n  var tip = '<div class=\"b-tip b-tip_name_{{=it.name}}\">' +\n        '<div class=\"b-tip__inner\">' +\n          '{{=it.content}}' +\n        '</div>' +\n      '<div class=\"b-tip__close\" data-name=\"{{=it.name}}\"></div>' +\n    '</div>';\n\n  var usefulLinks = '<div class=\"b-useful-links {{?it.isCollapsed}}b-useful-links_is_collapsed{{?}}\">' +\n      '<div class=\"b-tip__close i-userful-links-collapse\"></div>' +\n      '<div class=\"b-tip__inner\">' +\n        '<div class=\"b-useful-links__title\">{{=it.title}}</div>' +\n        '<div class=\"b-useful-links__content\">{{=it.content}}</div>' +\n      '</div>' +\n    '</div>';\n\n  var infoList = '<div class=\"b-infolist\">' +\n        '<table class=\"b-infolist__table\">' +\n        '<tbody class=\"b-table__tbody\">' +\n          '{{~it.rows :v :i}}' +\n          '<tr class=\"b-infolist__row {{?v.type === \"header\"}}b-infolist__row_type_header{{?}}\">' +\n            '{{?v.type === \"header\"}}' +\n              '<td class=\"b-infolist__col b-infolist__col_type_header\" colspan=\"2\">{{=v.label}}</td>' +\n            '{{??v.type === \"data\"}}' +\n              '<td class=\"b-infolist__col b-infolist__col_type_label\">{{=v.label}}</td>' +\n              '<td class=\"b-infolist__col b-infolist__col_type_value status-{{=v.color}} {{?it.testMode}}i-testmode-field{{?}} hint\" data-hint=\"{{=v.hint}}\" data-name=\"{{=v.name}}\">{{=v.value}}</td>' +\n            '{{??v.type === \"link\"}}' +\n              '<td class=\"b-infolist__col b-infolist__col_type_label\">{{=v.label}}</td>' +\n              '{{?v.link}}' +\n              '<td class=\"b-infolist__col b-infolist__col_type_value m-item\"><a href=\"#\" data-url=\"{{=v.link}}\" data-name=\"{{=v.name}}\" data-hint=\"{{=v.hint}}\" class=\"i-menu-link b-infolist__col_type_value {{?it.testMode}}i-testmode-field{{?}} hint\">{{=v.value}}</a></td>' +\n              '{{??v.url}}' +\n              '<td class=\"b-infolist__col b-infolist__col_type_value\"><a href=\"{{=v.url}}\" target=\"_blank\" class=\"b-infolist__col_type_value {{?it.testMode}}i-testmode-field{{?}} hint\" data-hint=\"{{=v.hint}}\">{{=v.value}}</a></td>' +\n              '{{?}}' +\n            '{{??v.type === \"indicator\"}}' +\n              '<td class=\"b-infolist__col b-infolist__col_type_label\">{{=v.label}}</td>' +\n              '<td class=\"b-infolist__col b-infolist__col_type_value m-item {{?it.testMode}}i-testmode-field{{?}}\" data-name=\"{{=v.name}}\">{{=v.value}} (<span class=\"status-{{=v.color}}\">{{=v.suffix}}</span>)</td>' +\n            '{{?}}' +\n          '</tr>' +\n          '{{~}}' +\n        '</tbody>' +\n        '</table>' +\n      '</div>';\n\n  var fatalAlert = '<div class=\"b-alert__inner {{?it.refreshLink}} b-alert__inner_t_refresh-link{{?}}\">' +\n      '<div class=\"b-alert__icon\">' +\n        '<div class=\"b-alert__sign\">' +\n          '<div class=\"b-alert__sign-top\"></div>' +\n          '<div class=\"b-alert__sign-body\"></div>' +\n          '<div class=\"b-alert__sign-empty\"></div>' +\n          '<div class=\"b-alert__sign-dot\"></div>' +\n        '</div>' +\n      '</div>' +\n      '<div class=\"b-alert__msg-outter\"><div class=\"b-alert__msg\">{{=it.msg}}</div></div>' +\n        '{{?it.ref}}' +\n          '<div class=\"more b-fatal-error__more-link\">' +\n            '<a href=\"{{=it.ref}}\" target=\"_blank\">{{=it.moreMsg}}</a>' +\n          '</div>' +\n        '{{?}}' +\n        '{{?it.refreshLink}}' +\n          '<div class=\"m-item b-fatal-error__refresh-link\">' +\n            '<a href=\"#\" data-url=\"{{=it.refreshLink}}\" >{{=it.refreshLinkMsg}}</a>' +\n          '</div>' +\n        '{{?}}' +\n      '</div>' +\n      '<div class=\"b-alert__clear\"></div>';\n\n  var msgTemplList = '<div class=\"b-msg-templ\" data-target=\"{{=it.id}}\">' +\n      '<div class=\"b-msg-templ__table\">' +\n        '<div class=\"b-msg-templ__table-col b-msg-templ__table-col_content_yes\">' +\n          '<ul class=\"b-msg-templ__title-content\">' +\n            '{{~it.templList  :v :i}}' +\n              '<li class=\"b-msg-templ__title-content-item b-msg-templ__title-content-item_ind_{{=i}}\">{{=v.msg}}</li>' +\n            '{{~}}' +\n          '</ul>' +\n        '</div>' +\n        '<div class=\"b-msg-templ__table-col b-msg-templ__table-col_title_yes\">' +\n          '<ul class=\"b-msg-templ__title-list\">' +\n            '{{~it.templList  :v :i}}' +\n              '{{?i !== 0}}<li class=\"b-msg-templ__title-list-item b-msg-templ__title-list-item_is_comma\">, </li>{{?}}<li class=\"b-msg-templ__title-list-item\" data-ind=\"{{=i}}\" data-id=\"{{=v.id}}\">{{=v.name}}</li>' +\n            '{{~}}' +\n          '</ul>' +\n        '</div>' +\n      '</div>' +\n    '</div>';\n\n  var t = doT.template,\n      vSettings = {};\n  $.extend(vSettings, doT.templateSettings, { varname: 'val' });\n\n  return {\n    tabCont: t(tabCont),\n    tabContEmpty: t(tabContEmpty),\n    tabContForm: t(tabContForm),\n    tabContMap: t(tabContMap),\n    listPager: t(listPager),\n    tabContDashBoard: t(tabContDashBoard),\n    tabLi: t(tabLi),\n    tabChld: t(tabChld),\n    formPageTitle: t(formPageTitle),\n    formItemInput: t(formItemInput, vSettings),\n    formItemCaptcha: t(formItemCaptcha),\n    formItemFile: t(formItemFile),\n    formItemPassword: t(formItemPassword),\n    formItemInputWithZoom: t(formItemInputWithZoom),\n    formItemInputWithZoom1: t(formItemInputWithZoom1),\n    formItemTextarea: t(formItemTextarea),\n    formItemCheckbox: t(formItemCheckbox, vSettings),\n    formItemLabel: t(formItemLabel),\n    formItemExtrBtn: t(formItemExtrBtn),\n    formItemDesk: t(formItemDesk),\n    formItemDeskRadio: t(formItemDeskRadio),\n    formItemSelect: t(formItemSelect, vSettings),\n    formItemSelectList: t(formItemSelectList, vSettings),\n    formItemMSelect: t(formItemMSelect),\n    formItemHtmldata: t(formItemHtmldata),\n    formItemTicket: t(formItemTicket),\n    formItemLink: t(formItemLink),\n    formItemSelectAutocomplete: t(formItemSelectAutocomplete),\n    formItemTicketMsg: t(formItemTicketMsg),\n    formPageWrapper: t(formPageWrapper),\n    formItemRow: t(formItemRow),\n    formItemFullWidthRow: t(formItemFullWidthRow),\n    formItemFormWidthRow: t(formItemFormWidthRow),\n    formItemRowWithoutLabel: t(formItemRowWithoutLabel),\n    formItemRowTextdata: t(formItemRowTextdata),\n    formItemRowHidden: t(formItemRowHidden),\n    formItemFrame: t(formItemFrame),\n    formListContent: t(formListContent),\n    formListBlocksContent: t(formListBlocksContent),\n    filterWrapper: t(filterWrapper),\n    filterSavedItem: t(filterSavedItem),\n    filterRow: t(filterRow),\n    filterItemLabel: t(filterItemLabel),\n    filterItem: t(filterItem),\n    formItemRowDesc: t(formItemRowDesc),\n    formListItemRow: t(formListItemRow),\n    formPlainHintRow: t(formPlainHint),\n    formItemSlider: t(formItemSlider),\n    formItemMgrview: t(formItemMgrview),\n    formItemRadio: t(formItemRadio),\n    formItemRadioImg: t(formItemRadioImg),\n    formItemTextData: t(formItemTextData),\n    dashTaskbar: t(dashTaskbar),\n    progressBar: t(progressBar),\n    reportBand: t(reportBand),\n    reportBandDash: t(reportBandDash),\n    banner: t(banner),\n    buttons: t(buttons),\n    fatalError: t(fatalError),\n    passwdCheck: t(passwdCheck),\n    editinListForm: t(editinListForm),\n    confirmCheck: t(confirmCheck),\n    formItemSliderEditInList: t(formItemSliderEditInList),\n    tip: t(tip),\n    infoList: t(infoList),\n    fatalAlert: t(fatalAlert),\n    msgTemplList: t(msgTemplList),\n    emptyBandOverlay: t(emptyBandOverlay),\n    usefulLinks: t(usefulLinks),\n    formListFilter: t(formListFilter),\n    formListFilterWrapper: t(formListFilterWrapper),\n    formItemDateTime: t(formItemDateTime)\n  };\n}());\n\n// Event manager\n//@todo unit test\nvar EventMgr = {\n\n  o: function() {\n    'use strict';\n    return $('body');\n  },\n\n  hooks: {},\n\n  isTouch: function() {\n    return (navigator.userAgent.match(/Android/i) ||\n     navigator.userAgent.match(/webOS/i) ||\n     navigator.userAgent.match(/iPhone/i) ||\n     navigator.userAgent.match(/iPad/i) ||\n     navigator.userAgent.match(/iPod/i) ||\n     navigator.userAgent.match(/BlackBerry/i) ||\n     navigator.userAgent.match(/Windows Phone/i));\n  },\n\n  touchEvents: {},\n\n  touchData: {},\n  /**\n   * bind custom event\n   * @this {EventMgr} EventMgr object\n   */\n  bind: function(event, callback) {\n    'use strict';\n    var events = event.split(','),\n        l = event.length;\n    while (l--) {\n      this.o().on(events[l], callback);\n    }\n  },\n  /**\n   * bind custom event for one time\n   * @this {EventMgr} EventMgr object\n   */\n  one: function(event, callback, data) {\n    'use strict';\n    var events = event.split(','),\n        l = event.length;\n    while (l--) {\n      this.o().one(events[l], data, callback);\n    }\n  },\n  /**\n   * wrapper for jQuery.one\n   */\n  oone: function(object, event, callback) {\n    'use strict';\n    if (typeof object === 'string') {\n      $(object).one(event, callback);\n    } else {\n      object.one(event, callback);\n    }\n  },\n  /**\n   * wrapper for jQuery.obind\n   */\n  obind: function(object, event, callback) {\n    'use strict';\n    var touch;\n    if (event === 'click' &&\n         this.isTouch() &&\n         typeof object === 'string') {\n      event = 'touchstart';\n      touch = true;\n    }\n    if (!touch) {\n      if (typeof object === 'string') {\n        $(object).on(event, callback);\n      } else {\n        object.on(event, callback);\n      }\n    } else {\n      var data = {\n          eventMgr: this,\n          cb: callback\n      };\n      if (typeof object === 'string') {\n        data.innerSelect = object;\n        $(object).on(event, data, this.touchStart);\n       // $(object).on('touchmove', data, this.touchMove);\n        $(object).on('touchend', data, this.touchEnd);\n      }\n    }\n  },\n\n  /**\n   * wrapper for jQuery.on\n   * */\n  on: function(outObject, innerSelect, event, callback) {\n    'use strict';\n    var touch = false;\n    if (event === 'click' && this.isTouch()) {\n      event = 'touchstart';\n      touch = true;\n    }\n    if (!touch) {\n      if (typeof outObject === 'string') {\n        $(outObject).on(event, innerSelect, callback);\n      } else {\n        outObject.on(event, innerSelect, callback);\n      }\n    } else {\n        var data = {\n          innerSelect: innerSelect,\n          eventMgr: this,\n          cb: callback\n        };\n       if (typeof outObject === 'string') {\n        $(outObject).on(event, innerSelect, data, this.touchStart);\n        //$(outObject).on('touchmove', innerSelect, data, this.touchMove);\n        $(outObject).on('touchend', innerSelect, data, this.touchEnd);\n      } else {\n        outObject.on(event, innerSelect, data, this.touchStart);\n        //outObject.on('touchmove', innerSelect, data, this.touchMove);\n        outObject.on('touchend', innerSelect, data, this.touchEnd);\n      }\n    }\n  },\n  /**\n   * allow hooks for original events\n   * @this {EventMgr} EventMgr object\n   */\n  onwithdata: function(outObject, innerSelect, event, customEvent, callback) {\n    'use strict';\n    var data = {\n      targetEvent: customEvent,\n      targetCallback: callback,\n      eventMgr: this,\n      innerSelect: innerSelect,\n      withData: true\n    },\n    touch = false;\n\n    if (event === 'click' && this.isTouch()) {\n      event = 'touchstart';\n      touch = true;\n    }\n    if (!touch) {\n      if (typeof outObject === 'string') {\n        $(outObject).on(event, innerSelect, data, this.onwithdataHandler);\n      } else {\n        outObject.on(event, innerSelect, data, this.onwithdataHandler);\n      }\n    } else {\n      if (typeof outObject === 'string') {\n        $(outObject).on(event, innerSelect, data, this.touchStart);\n        //$(outObject).on('touchmove', innerSelect, data, this.touchMove);\n        $(outObject).on('touchend', innerSelect, data, this.touchEnd);\n      } else {\n        outObject.on(event, innerSelect, data, this.touchStart);\n        //outObject.on('touchmove', innerSelect, data, this.touchMove);\n        outObject.on('touchend', innerSelect, data, this.touchEnd);\n      }\n    }\n  },\n\n  touchStart: function(e) {\n    e.preventDefault();\n    var selector = e.data.innerSelect,\n        em = e.data.eventMgr;\n    em.touchEvents[selector] = true;\n  },\n\n  touchMove: function(e) {\n    var selector = e.data.innerSelect,\n        em = e.data.eventMgr;\n    em.touchEvents[selector] = false;\n  },\n\n  touchEnd: function(e) {\n    var selector = e.data.innerSelect,\n        em = e.data.eventMgr;\n    if (em.touchEvents[selector]) {\n      if (e.data.withData) {\n        em.onwithdataHandler.apply(this, [e]);\n        em.touchEvents[selector] = false;\n      } else {\n        e.data.cb.apply(this, [e]);\n        em.touchEvents[selector] = false;\n      }\n    }\n  },\n\n  /**\n   * handler for onwithdata\n   * @this {HTMLNode} HTMLNode\n   */\n  onwithdataHandler: function(e) {\n    'use strict';\n    var eventData = e.data,\n        targetEvent = eventData.targetEvent,\n        targetCallback = eventData.targetCallback,\n        data = {},\n        self = eventData.eventMgr;\n    if (this) {\n      data.tabId = this.getAttribute('data-tabid');\n      data.elemId = this.getAttribute('data-elemid');\n    }\n    if (targetEvent) {\n      if (self.hooks[targetEvent] && self.hooks[targetEvent].length > 0) {\n        var l = self.hooks[targetEvent].length;\n        while (l--) {\n          if (typeof self.hooks[targetEvent][l] === 'function') {\n            self.hooks[targetEvent][l].apply(window, [data]);\n          }\n        }\n      }\n    }\n    if (typeof targetCallback === 'function') {\n      targetCallback.apply(this, [e, data]);\n    }\n  },\n  /**\n   * wrapper for jQuery.off\n   */\n  off: function(outObject, event) {\n    'use strict';\n    if (typeof outObject === 'string') {\n      $(outObject).off(event);\n    } else {\n      outObject.off(event);\n    }\n  },\n  /**\n   * unbind event\n   * @this {EventMgr} EventMgr object\n   */\n  unbind: function(event, callback) {\n    'use strict';\n    var events = event.split(','),\n        l = event.length;\n    while (l--) {\n      this.o().off(events[l], callback);\n    }\n  },\n  /**\n   * wrapper for jQuery.trigger\n   * @this {EventMgr} EventMgr object\n   */\n  trigger: function(event, data, delay) {\n    'use strict';\n    if (delay) {\n      setTimeout(function(self) { return function() {\n        if (typeof event !== 'string') {\n          console.log('event !== string in trigger', event, data);\n          event = String(event);\n        }\n        self.o().trigger(event, data);};\n      } (this), delay);\n    } else {\n      if (this.hooks[event] && this.hooks[event].length > 0) {\n        var l = this.hooks[event].length;\n        while (l--) {\n          if (typeof this.hooks[event][l] === 'function') {\n            this.hooks[event][l].apply(window, [data]);\n          }\n        }\n      }\n      if (typeof event !== 'string') {\n        console.log('event !== string in trigger', event, data);\n        event = String(event);\n      }\n      this.o().trigger(event, data);\n    }\n    if (this.triggerStack[event]) {\n      this.triggerStackHandler(event, data);\n    }\n  },\n  triggerStack: {},\n  /**\n   * add to trigger stack\n   * @param {String} event event name\n   * @param {function} func function for call\n   * @param {number} priority stack call order\n   * @this {EventMgr} EventMgr object\n   */\n  addToTriggerStack: function(event, func, priority) {\n    if (!this.triggerStack[event]) {\n      this.triggerStack[event] = [];\n    }\n    this.triggerStack[event].push({\n        func: func,\n        priority: priority\n    });\n    this.triggerStack[event].sort(this.prioritySort);\n  },\n\n  triggerStackHandler: function(event, data) {\n    if (this.triggerStack[event]) {\n      var l = this.triggerStack[event].length;\n      for (var i = 0; i < l; i++) {\n         if (typeof this.triggerStack[event][i].func === 'function') {\n           //break if return true\n           if (this.triggerStack[event][i].func.apply(window, [{}, data])) {\n            break;\n           }\n         }\n      }\n    }\n  },\n  prioritySort: function(a, b) {\n    return a.priority - b.priority;\n  },\n  /**\n   * add hook for custom event\n   * @this {EventMgr} EventMgr object\n   */\n  addHook: function(event, callback) {\n    'use strict';\n    var events = event.split(','),\n        l = event.length;\n    while (l--) {\n      if (this.hooks[events[l]]) {\n        this.hooks[events[l]].push(callback);\n      } else {\n        this.hooks[events[l]] = [];\n        this.hooks[events[l]].push(callback);\n      }\n    }\n  },\n  /**\n   * remove hook\n   * @this {EventMgr} EventMgr object\n   */\n  deleteHook: function(event, callback) {\n    'use strict';\n    if (this.hooks[event]) {\n      var len = this.hooks[event].length - 1,\n          ar = this.hooks[event];\n\n      for (var i = len; i <= 0; i--) {\n        if (ar(i) === callback) {\n          ar.slice(i, i);\n        }\n      }\n    }\n  }\n};\n\n/**\n * ScrollHandler\n * @class\n */\nvar ScrollHandler = (function() {\n  'use strict';\n  var shiftY = 0,\n\n      shiftX = 0,\n\n      bigObj = {},\n      /**\n       * Current Scroll object\n       */\n      curObj = {\n        /**\n         * Object id\n         */\n        objId: null,\n        /**\n         * Wrapper id\n         */\n        contId: null,\n        /**\n         * Wrapper id\n         */\n        obj: null,\n        /**\n         * HTML Object of Object\n         */\n        cont: null,\n        /**\n         * HTML Object of ScrollHandler\n         */\n        sh: null,\n        /**\n         * Visible height (wrapper's height)\n         */\n        vh: null,\n        /**\n         * Scroll handler height\n         */\n        sch: null\n      },\n\n      moveObj = {}, //temp object moved elems\n      down = false, //go down\n      /* jslint evil:true */\n      isIe = !!window.execScript,\n      /* jslint evil:false */\n      up = false, // go up\n      left = false, //go left\n      right = false,  //go right\n      intId = null,\n      /**\n       * Block not needed events when scrolling\n       */\n      blockEvent = function(e) {\n        e = e || window.event;\n        if (e.stopPropagation) {\n          e.stopPropagation();\n        } else { e.cancelBubble = true; }\n        if (e.preventDefault) {\n          e.preventDefault();\n        } else { e.returnValue = false; }\n      },\n      /**\n       * Handler for mouseup\n       * unbind mouseup/touchend handlers\n       */\n      mouseUp = function() {\n        down = false;\n        up = false;\n        left = false;\n        right = false;\n        document.onmouseup = null;\n        document.ontouchend = null;\n      },\n      /**\n       * Set Position for object and scrollhandler\n       */\n      lastValues = {},\n\n      setPosition = function(newPosition) {\n        var sTop, scrollTop,\n            middle = false,\n            top = false,\n            bottom = false;\n        if ((newPosition <= moveObj.vh - moveObj.sch) && (newPosition >= 0)) {\n          sTop = newPosition;\n          middle = true;\n        } else if (newPosition > moveObj.vh - moveObj.sch) {\n          sTop = moveObj.vh - moveObj.sch;\n          bottom = true;\n        } else {\n          sTop = 0;\n          top = true;\n        }\n\n        moveObj.sh.style.top = sTop + 'px';\n        scrollTop = Math.round(sTop * moveObj.delta);\n        if (isIe) {\n          moveObj.cont.scrollTop = 0;\n          moveObj.obj.style.marginTop = scrollTop * (-1) + 'px';\n        } else {\n          moveObj.cont.scrollTop = scrollTop;\n          moveObj.sw.style.top = scrollTop + 'px';\n        }\n        if (lastValues[moveObj.contId] !== sTop) {\n          var body = document.querySelector('body') || document.body,\n              event;\n          try {\n            event = new CustomEvent('verticalScroll', { 'detail': {\n                top: top,\n                middle: middle,\n                bottom: bottom,\n                id: moveObj.contId}});\n            body.dispatchEvent(event);\n          } catch (e) {}\n        }\n        lastValues[moveObj.contId] = sTop;\n        return false;\n      },\n      /**\n       * Set Position for horizontal object and scrollhandler\n       */\n      setPositionHor = function(newPosition) {\n        var sLeft, scrollLeft;\n        if ((newPosition <= moveObj.vw - moveObj.schH) && (newPosition >= 0)) {\n          sLeft = newPosition;\n        } else if (newPosition > moveObj.vw - moveObj.schH) {\n          sLeft = moveObj.vw - moveObj.schH;\n        } else {\n          sLeft = 0;\n        }\n        moveObj.hSh.style.left = sLeft + 'px';\n        scrollLeft = Math.round(sLeft * moveObj.deltaH);\n\n        if (isIe) {\n          moveObj.cont.scrollLeft = 0;\n          moveObj.obj.style.marginLeft = scrollLeft * (-1) + 'px';\n        } else {\n          moveObj.cont.scrollLeft = scrollLeft;\n          moveObj.hSw.style.left = scrollLeft + 'px';\n        }\n        return false;\n      },\n      /**\n       * Mouse wheel handler\n       */\n      wheel = function(e) {\n        e = e || window.event;\n        var wheelDelta = 0,\n            id = this.getAttribute('id'),\n            currentPosition,\n            newPosition,\n            direction, delta, STEP = 64;\n        moveObj = bigObj[id];\n        //check for exist scroll\n        if (!moveObj) { return; }\n        delta = moveObj.delta;\n        //detect direction\n        if (e.wheelDelta) {\n          direction = e.wheelDelta > 0 ? -1 : 1;\n        } else if (e.detail) {\n          direction = e.detail < 0 ? -1 : 1;\n        }\n        //check for native scroll\n        if (e.target) {\n          var target = e.target;\n          //check for scroll\n          //target.clientHeight > 0 ==> for opera\n          if (target.clientHeight < target.scrollHeight &&\n              target.clientHeight > 0 &&\n              target.nodeName === 'TEXTAREA') {\n            //scroll down\n            if (\n                //(target.clientHeight + 1) ==> for safari\n                (direction === 1 && (target.scrollTop <\n                    (target.scrollHeight - (target.clientHeight + 1)))) ||\n                (direction === -1 && target.scrollTop !== 0)\n                ) {\n                  return true;\n            }\n          }\n        }\n\n        if (e.wheelDelta) {\n          wheelDelta = -e.wheelDelta / 2.5;\n        } else if (e.detail) { //for FF\n          wheelDelta = e.detail * 16;\n        }\n\n        if (wheelDelta) {\n          currentPosition = parseFloat(moveObj.sh.style.top);\n          newPosition = ((wheelDelta / delta)) + currentPosition;\n          setPosition(newPosition);\n        }\n        blockEvent(e);\n      },\n      /**\n       * Scroll mover by UP/DOWN scroll btn\n       */\n      scrollMove = function(stopPos) {\n        var currentPosition, mDelta, newPosition, magicNumber = 5;\n        if (!moveObj) {\n           clearInterval(intId);\n        }\n        currentPosition = parseFloat(moveObj.sh.style.top);\n        mDelta = magicNumber / moveObj.delta;\n        if (up) {\n          newPosition = currentPosition - mDelta;\n          setPosition(newPosition);\n          if (stopPos && newPosition < stopPos) {\n            clearInterval(intId);\n          }\n        } else if (down) {\n          newPosition = mDelta + currentPosition;\n          setPosition(newPosition);\n          if (stopPos && newPosition > stopPos) {\n            clearInterval(intId);\n          }\n        } else {\n          clearInterval(intId);\n        }\n      },\n      /**\n       * Scroll mover horizontal by UP/DOWN scroll btn\n       */\n      scrollMoveHoriz = function(stopPos) {\n        var currentPosition, mDelta, newPosition, magicNumber = 5;\n        if (!moveObj) {\n           clearInterval(intId);\n        }\n        currentPosition = parseFloat(moveObj.hSh.style.left);\n        mDelta = magicNumber / moveObj.deltaH;\n        if (left) {\n          newPosition = currentPosition - mDelta;\n          setPositionHor(newPosition);\n          if (stopPos && newPosition < stopPos) {\n            clearInterval(intId);\n          }\n       } else if (right) {\n          newPosition = mDelta + currentPosition;\n          setPositionHor(newPosition);\n          if (stopPos && newPosition > stopPos) {\n            clearInterval(intId);\n          }\n       } else {\n          clearInterval(intId);\n        }\n      },\n      /**\n       * Handler for button move up\n       */\n      moveUp = function(id, stopPos) {\n        var doc = document,\n            timeOut = stopPos !== undefined ? 1 : 10;\n        moveObj = bigObj[id];\n        up = true;\n        //some issues about\n        if (!('ontouchstart' in doc.documentElement)) {\n          doc.onmouseup = mouseUp;\n        }\n        //for touchpads\n        doc.ontouchend = mouseUp;\n        doc.ontouchcancel = mouseUp;\n        scrollMove(stopPos);\n        intId = setInterval(function() { scrollMove(stopPos); }, timeOut);\n      },\n\n      moveUpHandler = function(e) {\n        e = e || window.event;\n        var id = this.getAttribute('id').replace('-top-button', '');\n        moveUp(id);\n        blockEvent(e);\n        return false;\n      },\n\n      moveLeftHandler = function(e) {\n        e = e || window.event;\n        var id = this.getAttribute('id').replace('-left-button', '');\n        moveLeft(id);\n        blockEvent(e);\n        return false;\n      },\n\n      moveLeft = function(id, stopPos) {\n        var doc = document,\n            timeOut = stopPos !== undefined ? 1 : 10;\n        moveObj = bigObj[id];\n        left = true;\n        //some issues about\n        if (!('ontouchstart' in doc.documentElement)) {\n          doc.onmouseup = mouseUp;\n        }\n        //for touchpads\n        doc.ontouchend = mouseUp;\n        doc.ontouchcancel = mouseUp;\n        scrollMoveHoriz(stopPos);\n        intId = setInterval(function() { scrollMoveHoriz(stopPos); }, timeOut);\n      },\n      /**\n       * Handler for button move down\n       */\n      moveDown = function(id, stopPos) {\n        var doc = document,\n            timeOut = stopPos !== undefined ? 1 : 10;\n        moveObj = bigObj[id];\n        down = true;\n        if (!('ontouchstart' in doc.documentElement)) {\n          doc.onmouseup = mouseUp;\n        }\n        //for touchpads\n        doc.ontouchend = mouseUp;\n        doc.ontouchcancel = mouseUp;\n        scrollMove(stopPos);\n        intId = setInterval(function() { scrollMove(stopPos); }, timeOut);\n      },\n\n      moveDownHandler = function(e) {\n        e = e || window.event;\n        var id = this.getAttribute('id').replace('-bottom-button', '');\n        moveDown(id);\n        blockEvent(e);\n        return false;\n      },\n\n      moveRightHandler = function(e) {\n        e = e || window.event;\n        var id = this.getAttribute('id').replace('-right-button', '');\n        moveRight(id);\n        blockEvent(e);\n        return false;\n      },\n\n      moveRight = function(id, stopPos) {\n        var doc = document,\n            timeOut = stopPos !== undefined ? 1 : 10;\n        moveObj = bigObj[id];\n        right = true;\n        if (!('ontouchstart' in doc.documentElement)) {\n          doc.onmouseup = mouseUp;\n        }\n        //for touchpads\n        doc.ontouchend = mouseUp;\n        doc.ontouchcancel = mouseUp;\n        scrollMoveHoriz(stopPos);\n        intId = setInterval(function() { scrollMoveHoriz(stopPos); }, timeOut);\n      },\n      /**\n       * Cancel scroll, hide scroll handler\n       * @param {curObj} obj Current object\n       */\n      cancelScroll = function(obj) {\n        if (!obj) { return; }\n        //need to fix\n        obj.sh.style.display = 'none';\n        obj.vstatus = true;\n        obj.cont.style.overflowY = '';\n        //hide horiz scroll\n        if (obj.hs) {\n          obj.vstatus = false;\n          obj.sw.style.display = 'none';\n          obj.cont.style.paddingRight = '0px';\n          // $(obj.cont).removeClass('vertical-scroll');\n        }\n        $(obj.cont).removeClass('vertical-scroll');\n        $(obj.cont.parentNode).removeClass('vertical-scroll-child');\n        //this._curObj.sh = null;\n        obj.cont.onmousewheel = null;\n        obj.bb.onmousedown = null;\n        obj.tb.onmousedown = null;\n        obj.cont.onkeydown = null;\n        if (isIe) {\n          obj.obj.style.marginTop = 0;\n        }\n        obj.cont.scrollTop = 0;\n        obj.sh.style.top = 0 + 'px';\n        obj.sw.style.top = 0 + 'px';\n        if (obj.contWheelEvent) {\n          obj.cont.removeEventListener('DOMMouseScroll', wheel, false);\n          obj.contWheelEvent = false;\n        }\n      },\n      /**\n       * Cancel horiz scroll, hide scroll handler\n       * @param {curObj} obj Current object\n       */\n      cancelScrollHoriz = function(obj) {\n         if (!obj) { return; }\n        //need to fix\n        obj.hSh.style.display = 'none';\n        obj.cont.style.overflowX = '';\n        obj.hstatus = true;\n        if (!obj.hss) {\n          obj.hstatus = false;\n          obj.hSw.style.display = 'none';\n          $(obj.cont).removeClass('horizontal-scroll');\n          obj.cont.paddingBottom = '0px';\n        }\n        //this._curObj.sh = null;\n        obj.hBb.onmousedown = null;\n        obj.hTb.onmousedown = null;\n        if (isIe) {\n          obj.obj.style.marginLeft = 0;\n        }\n        obj.cont.scrollLeft = 0 + 'px';\n        obj.hSh.style.top = 0 + 'px';\n      },\n      /**\n       * Update scroll method\n       */\n      updateFunc = function(key) {\n        if (bigObj[key] === undefined) { return; }\n        var scrollCorrect = 36, swStyle, tmpHeight, scrollTop, curObjUp;\n            curObjUp = bigObj[key];\n        if (curObjUp.hstatus) {\n          scrollCorrect += 18;\n        }\n        //trackHeight\n        var visibleHeight = curObjUp.cont.clientHeight,\n            scrollTrackHeight = visibleHeight - scrollCorrect,\n            deltaTop = (curObjUp.obj.offsetTop > 0) ?\n                curObjUp.obj.offsetTop : 0,\n            allHeight = curObjUp.obj.offsetHeight + deltaTop,\n            deltaAV = allHeight / visibleHeight,\n            scrollHandlerHeight = scrollTrackHeight / deltaAV,\n            delta = allHeight / scrollTrackHeight;\n        //if hide element exit\n        if (visibleHeight === 0) { return; }\n        curObjUp.vh = scrollTrackHeight;\n        //all height, object height\n\n        //var sch = (visibleHeight) / (allHeight /\n        // (visibleHeight + scrollCorrect));\n        if (scrollHandlerHeight < 25) {\n          scrollHandlerHeight = 25;\n          delta = (allHeight - (scrollTrackHeight + scrollCorrect)) /\n              (scrollTrackHeight - 25);\n        }\n        //size of step\n        curObjUp.delta = delta;\n        curObjUp.sch = scrollHandlerHeight;\n        //check for nothing scroll\n        tmpHeight = scrollTrackHeight + scrollCorrect;\n        if (scrollTrackHeight < scrollCorrect ||\n            scrollHandlerHeight > scrollTrackHeight ||\n            tmpHeight === allHeight) {\n          cancelScroll(curObjUp);\n          //scrollHandlerHeight = scrollTrackHeight;\n        } else {\n          //set scroll handler size\n          swStyle = curObjUp.sw.style;\n          //keep state\n          curObjUp.cont.scrollTop = parseFloat(swStyle.top);\n          //swStyle.top = curObjUp.cont.scrollTop;\n          curObjUp.sh.style.height = scrollHandlerHeight + 'px';\n          curObjUp.sh.style.display = 'block';\n          swStyle.display = 'block';\n          curObjUp.cont.style.paddingRight = '18px';\n          curObjUp.cont.style.overflowY = 'hidden';\n          if (curObjUp.cont.className.indexOf('vertical-scroll') === -1) {\n            curObjUp.cont.className += ' vertical-scroll';\n            curObjUp.cont.parentNode.className += ' vertical-scroll-child';\n          }\n          if (!curObjUp.contWheelEvent) {\n            curObjUp.cont.addEventListener('DOMMouseScroll', wheel, false);\n            curObjUp.contWheelEvent = true;\n          }\n\n          curObjUp.cont.onmousewheel = wheel;\n\n          curObjUp.bb.onmousedown = moveDownHandler;\n          curObjUp.tb.onmousedown = moveUpHandler;\n\n          //check real behavior\n          if (parseInt(curObjUp.sh.style.top, 10) + curObjUp.sch >\n              curObjUp.vh) {\n            curObjUp.sh.style.top = curObjUp.vh - curObjUp.sch + 'px';\n            scrollTop = (curObjUp.vh - curObjUp.sch) * curObjUp.delta;\n            swStyle.top = scrollTop + 'px';\n            curObjUp.cont.scrollTop = scrollTop;\n          }\n        }\n        bigObj[key] = curObjUp;\n        curObjUp = null;\n      },\n      /**\n       * Update horiz scroll method\n       */\n      updateFuncHoriz = function(key) {\n        if (bigObj[key] === undefined) { return; }\n        var scrollCorrect = 36,\n            curObjUp = bigObj[key],\n            vw, aw, delta, sch;\n        if (curObjUp.vstatus) {\n          scrollCorrect += 18;\n        }\n\n        vw = curObjUp.cont.offsetWidth - scrollCorrect;\n        curObjUp.vw = vw;\n        //ll height, object height\n        aw = curObjUp.obj.offsetWidth;\n        delta = aw / (vw);\n        //scroll height\n        sch = (vw) / (aw / (vw + scrollCorrect));\n\n        if (sch < 25) {\n          //var dp = 25 - sch;\n          sch = 25;\n          delta = (aw - (vw + scrollCorrect)) / (vw - 25);\n        }\n        //size of step\n        curObjUp.deltaH = delta;\n        curObjUp.schH = sch;\n        //check for nothing scroll\n        if (vw < scrollCorrect || sch > vw || vw + scrollCorrect === aw) {\n          cancelScrollHoriz(curObjUp);\n          //sch = vw;\n        } else {\n          //set scroll handler size\n          curObjUp.hSh.style.width = sch + 'px';\n          curObjUp.hSw.style.display = 'block';\n          curObjUp.hSh.style.display = 'block';\n          curObjUp.cont.style.overflowX = 'hidden';\n          curObjUp.cont.style.paddingBottom = '18px';\n\n          curObjUp.hBb.onmousedown = moveRightHandler;\n          curObjUp.hTb.onmousedown = moveLeftHandler;\n\n         //check real behavior\n          if (parseInt(curObjUp.hSh.style.top, 10) + curObjUp.schH >\n              curObjUp.vw) {\n            curObjUp.hSh.style.left = curObjUp.vw - curObjUp.schH + 'px';\n            curObjUp.obj.scrollLeft =\n                (curObjUp.vw - curObjUp.schH) * curObjUp.deltaH;\n          }\n        }\n        bigObj[key] = curObjUp;\n        curObjUp = null;\n      },\n      /**\n       * void method, update sizes\n       */\n      update = function(id) {\n        if (id) {\n          updateFunc(id);\n          updateFuncHoriz(id);\n        } else {\n          var key;\n          /* jslint forin:true */\n          for (key in bigObj) {\n            updateFunc(key);\n            updateFuncHoriz(key);\n          }\n        }\n      },\n      /**\n       * get sizes of objects and calculate delta\n       */\n      getSize = function() {\n        //visible height\n        var scrollCorrect = 36,\n            visibleHeight = curObj.cont.clientHeight,\n            scrollTrackHeight = visibleHeight - scrollCorrect,\n            deltaTop = (curObj.obj.offsetTop > 0) ? curObj.obj.offsetTop : 0,\n            allHeight = curObj.obj.offsetHeight + deltaTop,\n            deltaAV = allHeight / visibleHeight,\n            scrollHandlerHeight = scrollTrackHeight / deltaAV,\n            delta = allHeight / scrollTrackHeight;\n\n        //-18px for top/bottom buttons\n        curObj.vh = scrollTrackHeight;\n        curObj.delta = delta;\n        //scroll height\n        curObj.sch = scrollHandlerHeight;\n\n        //check for nothing scroll\n        if (scrollTrackHeight < 36 ||\n            scrollHandlerHeight > scrollTrackHeight ||\n            ((scrollTrackHeight + 36) === allHeight)) {\n          cancelScroll(curObj);\n        } else {\n          curObj.vstatus = true;\n          curObj.cont.className += ' vertical-scroll';\n          curObj.cont.parentNode.className += ' vertical-scroll-child';\n          if (scrollHandlerHeight < 25) {\n            scrollHandlerHeight = 25;\n          }\n          //set scroll handler size\n          curObj.sh.style.height = scrollHandlerHeight + 'px';\n          curObj.sh.style.left = 0;\n          curObj.cont.scrollTop = 0;\n          curObj.cont.style.paddingRight = '18px';\n          curObj.cont.style.overflowY = 'hidden';\n        }\n      },\n\n      getSizeHor = function() {\n        //visible height\n        var visibleWidth = curObj.cont.offsetWidth - 36,\n            //all height, object height\n            aw = curObj.obj.offsetWidth,\n            //size of step\n            delta = aw / (visibleWidth),\n            sch;\n\n        //-20px for top/bottom buttons\n        curObj.vw = visibleWidth;\n        curObj.deltaH = delta;\n        //scroll height\n        sch = (visibleWidth) / (aw / (visibleWidth + 36));\n        curObj.schH = sch;\n\n        //check for nothing scroll\n        if (visibleWidth < 36 ||\n            sch > visibleWidth ||\n            visibleWidth + 36 === aw) {\n          cancelScrollHoriz(curObj);\n          sch = visibleWidth;\n        } else {\n          curObj.hstatus = true;\n          curObj.cont.className += ' horizontal-scroll';\n          if (sch < 25) {\n            sch = 25;\n          }\n          //set scroll handler size\n          curObj.hSh.style.width = sch + 'px';\n          curObj.hSh.style.left = 0;\n          curObj.hSw.style.display = 'block';\n          curObj.cont.scrollLeft = 0;\n          curObj.cont.style.paddingBottom = '18px';\n          curObj.cont.style.overflowX = 'hidden';\n        }\n      },\n\n      forceMoveSelectItem = function(id, offsetTop, boxHeight, elemHeight) {\n        moveObj = bigObj[id];\n        if (!moveObj) { return; }\n        var boxHeight =  boxHeight || 223,\n            elemHeight = elemHeight || 16,\n            newPosition = null,\n            mTRaw = moveObj.cont.scrollTop,\n            mT = 0,\n            df;\n        if (mTRaw !== '') {\n          mT = parseFloat(mTRaw);\n        }\n        df = offsetTop - mT;\n        if (boxHeight < df) {\n          //movedown\n          if (boxHeight < (df - 17)) {\n            newPosition = (offsetTop) / moveObj.delta;\n          } else {\n            newPosition = (mT + elemHeight) / moveObj.delta;\n          }\n        } else if (df < 0) {\n          //moveup\n          newPosition = (mT - elemHeight) / moveObj.delta;\n        }\n        if (newPosition !== null) {\n          setPosition(newPosition);\n        }\n      },\n\n      TABKEY = 9,\n      /**\n       * force mov\n       */\n      forceMove = function(id) {\n        if (!id) { return; }\n        moveObj = bigObj[id];\n        var scrollTop = moveObj.cont.scrollTop,\n            newPosition = scrollTop / moveObj.delta;\n        setPosition(newPosition);\n      },\n\n      checkTabKeyUp = function(e) {\n        e = e || window.event;\n        var codeKey, contId;\n            codeKey = e.which || e.keyCode;\n        if (codeKey === TABKEY) {\n          contId = $(e.target || e.srcElement)\n              .parents('div.vertical-scroll')\n              .attr('id');\n          forceMove(contId);\n        }\n      },\n      animate = function(opts) {\n        var start = new Date(),\n            timer = setInterval(function() {\n              var progress = (new Date() - start) / opts.duration;\n              if (progress > 1) { progress = 1; }\n              opts.step(progress);\n              if (progress === 1) {\n                clearInterval(timer);\n              }\n            }, opts.delay || 10);\n      },\n\n      animateMove = function(to, from) {\n        from = from || 0;\n        animate({\n          duration: 350,\n          step: function(progress) {\n            //var newPos =  (1 - Math.sin(Math.acos(progress))) * to;\n            var newPos = from + (Math.pow(progress, 2)) * to;\n            setPosition(newPos);\n          }\n        });\n      },\n      /**\n       * set scrollTop\n       * @param {string} id  scroll contId\n       * @param {number} offset Offset to move\n       * @param {number} raw Raw value to Move in offset param\n       * @param {boolean|undefined} animate Scrolling with animate\n       */\n      scrollTo = function(id, offset, raw, animate) {\n        if (!id) { return; }\n        moveObj = bigObj[id];\n        if (!moveObj) { return; }\n        var newPosition = 0,\n            from = parseFloat(moveObj.sh.style.top) || 0;\n        if (!raw) {\n          newPosition = offset / moveObj.delta;\n        } else {\n          newPosition = offset;\n        }\n        if (!animate) {\n          setPosition(newPosition);\n        } else {\n          newPosition -= from;\n          animateMove(newPosition, from);\n        }\n      },\n      /**\n       * Handler for mouseup\n       * unbind mousemove and mouseup\n       */\n      drop = function() {\n        moveObj = null;\n        document.onmousemove = null;\n        document.onmouseup = null;\n      },\n      /**\n       * Handler for touchend\n       * unbind ontouchmove and touchend\n       */\n      tDrop = function() {\n        moveObj = null;\n        document.ontouchmove = null;\n        document.ontouchend = null;\n        document.ontouchcancel = null;\n      },\n      /**\n       * Handler for move\n       */\n      move = function(e) {\n        e = e || window.event;\n        setPosition(e.clientY - shiftY);\n        blockEvent(e);\n        return false;\n      },\n      /**\n       * Handler for move horizontal\n       */\n      moveHor = function(e) {\n        e = e || window.event;\n        setPositionHor(e.clientX - shiftX);\n        blockEvent(e);\n        return false;\n      },\n      /**\n       * Handler for touchmove\n       */\n      tMove = function(e) {\n        e = e || window.event;\n        setPosition(e.touches[0].pageY - shiftY);\n        blockEvent(e);\n        return false;\n      },\n      /**\n       * Handler for touchmove horizontal\n       */\n      tMoveHor = function(e) {\n        e = e || window.event;\n        setPositionHor(e.touches[0].pageX - shiftX);\n        blockEvent(e);\n        return false;\n      },\n      /**\n       * Handler for mousedown for scrollhandler\n       * bind handlers for touchmove, touchend\n       */\n      drag = function(e) {\n        e = e || window.event;\n        var id, doc, top;\n        id = this.getAttribute('id').replace('-scrollbar-handler', '');\n        top = this.style.top === '' ? 0 : parseFloat(this.style.top);\n        shiftY = e.clientY - top;\n        doc = document;\n        moveObj = bigObj[id];\n        doc.onmousemove = move;\n        doc.onmouseup = drop;\n        blockEvent(e);\n        return false;\n      },\n      /**\n       * Handler for mousedown for scrollhandler horizontal\n       * bind handlers for touchmove, touchend\n       */\n      dragHor = function(e) {\n        e = e || window.event;\n        var id, doc, left;\n        id = this.getAttribute('id').replace('-scrollbar-handler-horiz', '');\n        left = this.style.left === '' ? 0 : parseFloat(this.style.left);\n        shiftX = e.clientX - left;\n        moveObj = bigObj[id];\n        doc = document;\n        doc.onmousemove = moveHor;\n        doc.onmouseup = drop;\n        blockEvent(e);\n        return false;\n      },\n      /**\n       * Handler for touchstart for scrollhandler\n       * bind handlers for touchmove, touchend\n       */\n      tDrag = function(e) {\n        e = e || window.event;\n        var id, doc, top;\n        id = this.getAttribute('id').replace('-scrollbar-handler', '');\n        top = this.style.top === '' ? 0 : parseFloat(this.style.top);\n        shiftY = e.touches[0].pageY - top;\n        moveObj = bigObj[id];\n        doc = document;\n        doc.ontouchmove = tMove;\n        doc.ontouchend = tDrop;\n        doc.ontouchcancel = tDrop;\n        blockEvent(e);\n        return false;\n      },\n      /**\n       * Handler for touchstart for scrollhandler horizontal\n       * bind handlers for touchmove, touchend\n       */\n      tDragHor = function(e) {\n        e = e || window.event;\n        var id, doc, left;\n        id = this.getAttribute('id').replace('-scrollbar-handler-horiz', '');\n        left = this.style.left === '' ? 0 : parseFloat(this.style.left);\n        shiftX = e.touches[0].pageX - left;\n        moveObj = bigObj[id];\n        doc = document;\n        doc.ontouchmove = tMoveHor;\n        doc.ontouchend = tDrop;\n        doc.ontouchcancel = tDrop;\n        blockEvent(e);\n        return false;\n      },\n      /**\n       * Scroll by scroll track click\n       */\n      scrollTrackMDHandler = function(e) {\n        var id = String(this.getAttribute('id')).replace('-scrollbar-track', ''),\n            sbh = document.getElementById(id + '-scrollbar-handler'),\n            offsetY, offsetX,\n            offsetST,\n            horizScroll = false;\n        if (!sbh) {\n          id = String(this.getAttribute('id')).replace('-scrollbar-track-horiz', '');\n          sbh = document.getElementById(id + '-scrollbar-handler-horiz');\n          if (!sbh) {\n            return;\n          }\n          horizScroll = true;\n        }\n        if (!horizScroll) {\n          var borderTop = parseInt(sbh.style.top, 10),\n              borderBottom = parseInt(sbh.style.height, 10);\n          if (e.offsetX && e.offsetY) {\n            offsetY = e.offsetY;\n          } else {\n            offsetST = $(this).offset();\n            offsetY = e.clientY - offsetST.top;\n          }\n          if (offsetY < borderTop) {\n            //direction up\n            moveUp(id, offsetY);\n          } else if (offsetY > borderBottom) {\n            //direction down\n            moveDown(id, offsetY - borderBottom);\n          }\n        } else {\n          var borderLeft = parseInt(sbh.style.left, 10),\n              borderRight = parseInt(sbh.style.width, 10);\n          if (e.offsetX && e.offsetY) {\n            offsetX = e.offsetX;\n          } else {\n            offsetST = $(this).offset();\n            offsetX = e.clientX - offsetST.left;\n          }\n          if (offsetX < borderLeft) {\n            //direction up\n            moveLeft(id, offsetX);\n          } else if (offsetX > borderRight) {\n            //direction down\n            moveRight(id, offsetX - borderRight);\n          }\n        }\n      },\n      /**\n       * Bind handler for scrollhandler on mousedown and touchstart events\n       */\n      bindEvent = function() {\n        if (curObj.sh) {\n          curObj.sh.onmousedown = drag;\n          curObj.sh.ontouchstart = tDrag;\n          var contElem = curObj.cont;\n\n          contElem.onkeyup = function(e) {\n            checkTabKeyUp(e);\n          };\n          contElem = null;\n        }\n        if (curObj.hSh) {\n          curObj.hSh.onmousedown = dragHor;\n          curObj.hSh.ontouchstart = tDragHor;\n        }\n      },\n\n      /**\n       * void method for build scroll\n       */\n      buildScroll = function() {\n        //@TODO might be add class?\n        curObj.cont.style.overflowY = 'hidden';\n        curObj.cont.style.position = 'relative';\n        var sw, divId, tb, trt, st, sh, ln, lns, bb, trb;\n\n        //create scroll wrapper\n        sw = document.createElement('div');\n        divId = curObj.contId + '-scrollbar-wrapper';\n        sw.setAttribute('id', divId);\n        sw.setAttribute('class', 'scrollbar-wrapper scrlbr');\n\n        curObj.cont.appendChild(sw);\n\n        //create scroll button top\n        tb = document.createElement('div');\n        tb.setAttribute('id', curObj.contId + '-top-button');\n        tb.setAttribute('class', 'top-button scrlbr');\n        sw.appendChild(tb);\n\n        trt = document.createElement('div');\n        trt.setAttribute('class', 'triangl-top scrlbr');\n        tb.appendChild(trt);\n\n        //create scroll button scrollbar-track\n        st = document.createElement('div');\n        st.setAttribute('id', curObj.contId + '-scrollbar-track');\n        st.setAttribute('class', 'scrollbar-track scrlbr');\n        sw.appendChild(st);\n        //create scroll button scrollbar-handler\n        sh = document.createElement('div');\n        sh.setAttribute('id', curObj.contId + '-scrollbar-handler');\n        sh.setAttribute('class', 'scrollbar-handler scrlbr');\n\n        curObj.st = st;\n        curObj.sh = sh;\n\n        st.appendChild(sh);\n\n        //create scroll button scrollbar-handler\n        ln = document.createElement('div');\n        ln.setAttribute('class', 'scrollbar-lines scrlbr');\n\n        lns = document.createElement('div');\n        lns.setAttribute('class', 'scrollbar-line scrlbr');\n\n        ln.appendChild(lns);\n\n        sh.appendChild(ln);\n\n        //create scroll button bottom\n        bb = document.createElement('div');\n        bb.setAttribute('id', curObj.contId + '-bottom-button');\n        bb.setAttribute('class', 'bottom-button scrlbr');\n        sw.appendChild(bb);\n\n        trb = document.createElement('div');\n        trb.setAttribute('class', 'triangl-bot scrlbr');\n        bb.appendChild(trb);\n\n        curObj.sw = sw;\n        curObj.bb = bb;\n        curObj.tb = tb;\n\n        if (curObj.sh !== null) {\n          //for mouse wheel\n          if (curObj.cont.addEventListener) {\n            curObj.cont.addEventListener('DOMMouseScroll', wheel, false);\n            curObj.contWheelEvent = true;\n            curObj.st.addEventListener('mousedown', scrollTrackMDHandler, false);\n          }\n          curObj.cont.onmousewheel = wheel;\n          //for button up/down scroll!!!\n          if (!('ontouchstart' in document.documentElement)) {\n            bb.onmousedown = moveDownHandler;\n            tb.onmousedown = moveUpHandler;\n          }\n          //for touchpads\n          bb.ontouchstart = moveDownHandler;\n          tb.ontouchstart = moveUpHandler;\n        }\n        getSize();\n      },\n\n      buildHorizScroll = function() {\n        curObj.cont.style.overflowX = 'hidden';\n        curObj.cont.style.position = 'relative';\n\n        //create scroll wrapper\n        var sw, divId, tb, trt, st, sh, ln, lns, bb, trb;\n\n        divId = curObj.contId + '-scrollbar-wrapper-horiz';\n        sw = document.createElement('div');\n        sw.setAttribute('id', divId);\n        sw.setAttribute('class', 'scrollbar-wrapper-horiz scrlbr');\n\n        curObj.cont.appendChild(sw);\n\n        //create scroll button top\n        tb = document.createElement('div');\n        tb.setAttribute('id', curObj.contId + '-left-button');\n        tb.setAttribute('class', 'left-button scrlbr');\n        sw.appendChild(tb);\n\n        trt = document.createElement('div');\n        trt.setAttribute('class', 'triangl-left scrlbr');\n        tb.appendChild(trt);\n\n        //create scroll button scrollbar-track\n        st = document.createElement('div');\n        st.setAttribute('id', curObj.contId + '-scrollbar-track-horiz');\n        st.setAttribute('class', 'scrollbar-track-horiz scrlbr');\n        sw.appendChild(st);\n        curObj.st = st;\n        //create scroll button scrollbar-handler\n        sh = document.createElement('div');\n        sh.setAttribute('id', curObj.contId + '-scrollbar-handler-horiz');\n        sh.setAttribute('class', 'scrollbar-handler-horiz scrlbr');\n\n        curObj.hSh = sh;\n\n        st.appendChild(sh);\n\n        //create scroll button scrollbar-handler\n        ln = document.createElement('div');\n        ln.setAttribute('class', 'scrollbar-lines scrlbr');\n\n        lns = document.createElement('div');\n        lns.setAttribute('class', 'scrollbar-line scrlbr');\n\n        ln.appendChild(lns);\n\n        sh.appendChild(ln);\n\n        //create scroll button bottom\n        bb = document.createElement('div');\n        bb.setAttribute('id', curObj.contId + '-right-button');\n        bb.setAttribute('class', 'right-button scrlbr');\n        sw.appendChild(bb);\n\n        trb = document.createElement('div');\n        trb.setAttribute('class', 'triangl-right scrlbr');\n        bb.appendChild(trb);\n\n        curObj.hSw = sw;\n        curObj.hBb = bb;\n        curObj.hTb = tb;\n\n        if (curObj.hSh !== null) {\n          //for button up/down scroll!!!!\n          if (!('ontouchstart' in document.documentElement)) {\n            bb.onmousedown = moveRightHandler;\n            tb.onmousedown = moveLeftHandler;\n          }\n          //for touchpads\n          bb.ontouchstart = moveRightHandler;\n          tb.ontouchstart = moveLeftHandler;\n        }\n        if (curObj.st.addEventListener) {\n          curObj.st.addEventListener('mousedown', scrollTrackMDHandler, false);\n        }\n\n        getSizeHor();\n      },\n      /**\n       * Attach object for scrolling\n       * @param {String} contId Id of wrapper object\n       * @param {String} objId Id of object\n       * @param {Boolean} hs HideScroll if nothing scrolling\n       * @param {Boolean} hss hideHoriz scroll\n       */\n      attach = function(contId, objId, tabId, hs, hss) {\n        var obj = document.getElementById(objId),\n            cont = document.getElementById(contId);\n\n        if (!obj || !cont) {\n          return false;\n        }\n        //bind resize\n        curObj = {\n          'objId' : objId,\n          'contId' : contId,\n          'obj' : obj,\n          'cont' : cont,\n          'tabId' : tabId,\n          'hs' : hs || false,\n          'hhs' : hss || false\n        };\n        buildScroll();\n        buildHorizScroll();\n        bigObj[contId] = curObj;\n        bindEvent();\n        curObj = null;\n        obj = null;\n        cont = null;\n        //return _curObj;\n      },\n\n      detach = function(tabId) {\n        var keyVar, keyVar1;\n        //rbin = document.getElementById('rbin');\n        for (keyVar in bigObj) {\n          if (bigObj[keyVar].tabId === tabId) {\n            if (bigObj[keyVar].cont.removeEventListener) {\n              if (bigObj[keyVar].contWheelEvent) {\n                bigObj[keyVar].cont\n                    .removeEventListener('DOMMouseScroll', wheel, false);\n                bigObj[keyVar].contWheelEvent = false;\n              }\n            }\n            for (keyVar1 in bigObj[keyVar]) {\n              if (bigObj[keyVar].hasOwnProperty(keyVar1)) {\n                bigObj[keyVar][keyVar1] = null;\n              }\n            }\n            delete lastValues[bigObj[keyVar].contId];\n            delete bigObj[keyVar];\n          }\n        }\n      };\n  return {\n    attach: attach,\n    update: update,\n    bigObj: bigObj,\n    scrollMove: scrollMove,\n    scrollMoveHoriz: scrollMoveHoriz,\n    scrollTo: scrollTo,\n    forceMove: forceMove,\n    forceMoveSelectItem: forceMoveSelectItem,\n    detach: detach\n  };\n}());\n"]}