Your IP : 18.219.32.237


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

'use strict';

/**
 * jQuery.ajaxq
 * queue ajax requests
 * @param {string} queue Name of queue
 * @param {object} options
 */
jQuery.ajaxq = function (queue, options) {
  'use strict';
  // Initialize storage for request queues if it's not initialized yet

  if (typeof document.ajaxq === 'undefined') {
    document.ajaxq = { q: {}, r: null };
  }

  // Initialize current queue if it's not initialized yet
  if (typeof document.ajaxq.q[queue] === 'undefined') {
    document.ajaxq.q[queue] = [];
  }
  // Request settings are given, enqueue the new request
  if (typeof options !== 'undefined') {
    // Copy the original options, because options.complete is going to be overridden

    var optionsCopy = {};
    /* jslint forin:true */
    for (var o in options) {
      optionsCopy[o] = options[o];
    }
    options = optionsCopy;

    // Override the original callback

    var originalCompleteCallback = options.complete;

    options.complete = function (request, status) {
      // Dequeue the current request
      document.ajaxq.q[queue].shift();
      document.ajaxq.r = null;

      // Run the original callback
      if (originalCompleteCallback) {
        originalCompleteCallback(request, status);
      }

      // Run the next request from the queue
      if (document.ajaxq.q[queue].length > 0) {
        document.ajaxq.r = jQuery.ajax(document.ajaxq.q[queue][0]);
      }
      if (document.ajaxq.q[queue].length === 0) {
        delete document.ajaxq.q[queue];
      }
    };
    if (queue !== 'multiload') {
      var len = document.ajaxq.q[queue].length;
      if (len <= 1) {
        document.ajaxq.q[queue].push(options);
      } else {
        document.ajaxq.q[queue][1] = options;
      }
      //ставим в очередь
    } else {
      // Enqueue the request
      document.ajaxq.q[queue].push(options);
    }

    // Also, if no request is currently running, start it
    if (document.ajaxq.q[queue].length === 1) {
      document.ajaxq.r = jQuery.ajax(options);
    }
    // No request settings are given, stop current request and clear the queue
  } else {
    if (document.ajaxq.r) {
      document.ajaxq.r.abort();
      document.ajaxq.r = null;
    }

    delete document.ajaxq.q[queue];
  }
};
//# sourceMappingURL=jquery.ajaxq.js.map

'use strict';

var templates = function () {
  'use strict';
  // List Template

  var messages = '{{~it.message :value :index }}' + '<div class="b-message i-message">' + '<div class="b-message__inner b-message__inner_status_{{=value.status}}" id="{{=value.id}}">' + '<div class="b-message__text {{?value.warning}}b-message__text_warning{{?}}">{{=value.text}}</div>' + '{{?value.ref}}' + '<div class="l-message__link">' + '<a href="{{=value.ref}}" data-href="{{=value.ref}}" target="_blank" class="i-message__more-link {{=value.classes}}">{{=value.refText}}</a>' + '</div>' + '{{?}}' + '<div class="l-message__link">' + '<a href="#" data-href="{{=value.dismissRef}}" class="i-message__dismiss-link" data-mn="dismiss">{{=value.dismiss}}</a>' + '</div>' + '</div>' + '<div class="b-message__triangle b-message__triangle_status_{{=value.status}}"></div>' + '</div>' + '{{~}}';

  //Banner template
  var banner = '<div class="b-message i-message">' + '<div  class="b-message__inner b-message__inner_status_{{=it.message.status}}" id="{{=it.message.id}}">' + '<div class="b-message__text">{{=it.message.text}}</div>' + '{{?it.message.ref}}' + '<div class="l-message__link">' + '<a href="{{=it.message.ref}}" data-href="{{=it.message.ref}}" target="_blank" class="i-message__more-link {{=it.message.classes}}">{{=it.message.refText}}</a>' + '</div>' + '{{?}}' + '<div class="l-message__link">' + '<a href="#" data-href="{{=it.message.dismissRef}}" class="i-message__dismiss-link" data-mn="dismiss">{{=it.message.dismiss}}</a>' + '</div>' + '</div>' + '<div class="b-message__triangle b-message__triangle_status_{{=it.message.status}}"></div>' + '</div>';

  var toolbar = '{{?it.btng && it.btng.length > 0}}' + '<div class="toolbar" {{=it.plidAttr}} {{=it.convertAttr}} id="toolbar-{{=it.id}}">' + '<div class="toolbar__btn-move-wr">' + '<div class="toolbar__btn-move toolbar__btn-move_dir_left"></div>' + '<div class="toolbar__btn-move toolbar__btn-move_dir_right"></div>' + '</div>' + '<div class="toolbar__inner">' +
  //add toolbar icon
  '{{?it.devMode}}' + '<div class="toolbutton-add"><a href="#" class="devel-link-add devel-link-add--toolbutton"  data-tabid="{{=it.id}}"></a></div>' + '{{?}}' +
  //foreach
  '{{ var j, l = it.btng.length; for (j = 0; j < l; j++) { }}' + '{{ var i = 0, btn = it.btng[j].btn, lb = btn.length; }}' + '{{?btn[i] && btn[i].type}}' + '<div class="toolgrp ind{{=j}}" {{=lb}} data-name="{{=it.btng[j].name}}" data-id="{{=it.id}}-{{=it.btng[j].name}}" >' + '{{ if (btn[i] && btn[i].type) { }}' + '<div class="toolbar-button hint {{=btn[i].tClass}} i-tip-target_st_btn_{{=btn[i].type}}" id="tbw-{{=it.id}}-{{=btn[i].tname}}" ' + '{{ var hint = ""; if (btn[i].hint) { hint = "data-hint =  \'"  + App.u.escapeQuote(btn[i].hint) + "\'"; hint += "data-hint-mn=\'hint_" + btn[i].tname + "\'"; } }}  {{=hint}}' + ' {{ var confirm = ""; if (btn[i].confirm) { confirm = "data-confirm = \'"  + btn[i].confirm + "\'"; confirm += "data-confirm-d = \'"  + btn[i].confirm_delimiter + "\'"; } }}  {{=confirm}}  {{=btn[i].attrs}}>' + '<span href="#main-wrapper" data-url="func={{=btn[i].func}}" ' + '{{?btn[i].cgi}} data-cgi="{{=btn[i].cgi}}" {{?}}' + ' {{=btn[i].progressbar}}' + ' {{=it.tabIdAttr}}' + ' data-name="{{=btn[i].tname}}" ' + ' rel="{{=it.id}}"' + ' class="img-link toolbar-button__item-img {{=btn[i].bClass}} " ' + '{{=btn[i].dataType}}' + ' id="{{=btn[i].id}}" data-itemid="{{=it.itemId}}">' + '<div class="s-icon s24x24 {{=btn[i].img}}" {{=btn[i].style}}></div>' + '<div id="{{=btn[i].progressId}}{{=it.itemId}}"></div>' + '</span>' + '<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>' + '{{?it.devMode}}' + '<div class="toolbutton-settings">' + '<a href="#main-wrapper" class="devel-link-settings devel-link-settings--toolbutton" data-elid="{{=btn[i].tname}}" data-tabid="{{=it.id}}"></a>' + '<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>' + '</div>' + '{{?}}' + '<div class="toolgrp-control" id="tc-{{=it.id}}-{{=it.btng[j].name}}"><div class="triangledown"></div></div>' + '</div>' + '{{ } }}' +
  //toolgrp-bag
  '<div class="toolgrp-bag" id="tb-{{=it.id}}-{{=it.btng[j].name}}">' + '{{ for (i = 1; i < lb; i++) { }}' + '{{ if (btn[i].type) { }}' + '<div class="toolbar-button hint {{=btn[i].tClass}} ind{{=i}}" id="tbw-{{=it.id}}-{{=btn[i].tname}}" ' + '{{ var hint = ""; if (btn[i].hint) { hint = "data-hint = \'"  + App.u.escapeQuote(btn[i].hint) + "\'"; hint += "data-hint-mn=\'hint_" + btn[i].tname + "\'";} }}  {{=hint}}' + '  {{ var confirm = ""; if (btn[i].confirm) { confirm = "data-confirm = \'"  + btn[i].confirm + "\'"; confirm += "data-confirm-d = \'"  + btn[i].confirm_delimiter + "\'"; } }}  {{=confirm}} {{=btn[i].attrs}}>' + '<span href="#main-wrapper"' + ' data-url="func={{=btn[i].func}}"' + ' {{?btn[i].cgi}} data-cgi="{{=btn[i].cgi}}" {{?}}' + ' {{=btn[i].progressbar}}' + ' {{=it.tabIdAttr}}' + ' data-name="{{=btn[i].tname}}"' + ' rel="{{=it.id}}" ' + ' class="img-link toolbar-button__item-img {{=btn[i].bClass}} "' + ' {{=btn[i].dataType}}' + ' id="{{=btn[i].id}}" data-itemid="{{=it.itemId}}">' + '<div class="s-icon s24x24 {{=btn[i].img}}" {{=btn[i].style}}></div>' + '<div id="{{=btn[i].progressId}}{{=it.itemId}}"></div>' + '</span>' + '<span href="#main-wrapper"' + ' data-url="func={{=btn[i].func}}"' + ' {{?btn[i].cgi}} data-cgi="{{=btn[i].cgi}}" {{?}}' + ' {{=btn[i].progressbar}}' + ' {{=it.tabIdAttr}}' + ' data-name="{{=btn[i].tname}}" ' + ' rel="{{=it.id}}"' + ' class="{{=btn[i].bClass}} btntext"' + ' {{=btn[i].dataType}} data-mn="short_{{=btn[i].tname}}">{{=btn[i].name}}</span>' +
  //devmode
  '{{?it.devMode}}' + '<div class="toolbutton-settings">' + '<a href="#" class="devel-link-settings devel-link-settings--toolbutton" data-elid="{{=btn[i].tname}}" data-tabid="{{=it.id}}"></a>' + '<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>' + '</div>' + '{{?}}' +
  //devmode end
  '</div>' +
  //if end
  '{{ } }}' +
  //for end
  '{{ } }}' + '</div>' +
  //toolgrp end
  '</div>' + '{{?}}' + '{{ }  }}' + '</div>' + '</div>' +
  //toolbar end
  '{{?}}';

  var tabCont = ' ' + '<div id="cont-{{=it.id}}" class="tab-content {{=it.btnview}} {{=it.filter}} init"  data-func={{=it.func}} ' + ' data-pnum="{{=it.pNum}}" data-pcnt="{{=it.pcnt}}" data-tabid="{{=it.id}}" ' + ' data-tab-type="list" data-itemid="{{=it.itemId}}">' + '<div id="{{=it.progressid}}"></div>' + '<div id="{{=it.id}}-progressbar-overlay" class="b-tab-overlay" data-tabid="{{=it.id}}"></div>' + '<div id="cont-{{=it.id}}-progressbar" class="b-progressbar"></div>' +
  //default progressbar
  '<div id="cont-{{=it.id}}-progressbar-default" class="b-progressbar">' + '<div id="{{=it.id}}-progressbar" class="b-progressbar__outer">' + '<div class="b-progressbar__inner">' + '<div class="b-progressbar__comment">{{=it.comment}}</div>' + '<div class="b-progressbar__loader-wr"><div class="b-progressbar__loader b-progressbar__loader_type_animate"></div></div>' + '</div>' + '</div>' + '</div>' +
  //end default progressbar
  //default progressbar end

  '<div class="tab-content-wrapper list-content" id="tcw-{{=it.id}}">' +
  //top bar
  '<div class="topBar">' + '<div class="rightBar">' + '{{?it.devMode}}' + '<a href="{{=it.selfurl}}&out=devel" data-hint="{{=it.hDevel}}" target="_blank" class="hint">' + '<div class="s-icon s16x16 l-devel"></div>' + '</a>' + '{{?}}' + '<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>' + '{{?it.inmenu}}' + '<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{{?}}">' + '<div class="s-icon s16x16 mbar-favorite"></div>' + '</a>' + '<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>' + '{{?}}' + '<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>' + '{{?it.autoupdate}}' + '<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>' + '{{?}}' + '<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>' + '<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>' + '<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>' + '<a href="?{{=it.tsettingsParam}}" data-hint-mn="msg_tsetting" data-url="{{=it.tsettingsParam}}" data-hint="{{=it.tsettings}}" {{=it.tabIdAttr}} rel="{{=it.id}}" class="tsetting hint">' + '<div class="s-icon s16x16 l-table"></div>' + '</a>' +
  //'<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>' +
  '<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>' + '</div>' +
  //top bar end
  //left bar
  '<div class="leftBar b-leftbar b-leftbar_for_list">' +
  //title
  '<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>' + '<span>' + '<h2>' + '<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>' + '{{=it.breadcrumb}}' +
  //devmode icons
  '{{ if (it.devMode) { }}' + '<div class="list-settings">' + '<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>' + '</div>' + '{{ } }}' + '</h2>' + '</span>' + '<div class="clearBoth"></div>' + '</div>' +
  //left bar end
  //messages
  messages +
  //messages end
  '<div class="toolbar-wrapper">' +
  //livefilter
  '<div class="tsearch">' + '<div class="dib search">' + '<input type="text" id="{{=it.id}}-search" data-tabid="{{=it.id}}" class="itsearch b-input" placeholder="Ctrl + Shift + F" value="{{=it.livefilter}}"/>' + '<div class="close_tsearch"><a href="javascript:void(0)" data-tabid="{{=it.id}}"><img src="{{=it.theme}}img/search_close.png"/></a></div>' + '</div>' + '{{?it.filter}}<div class="i-tip-target_st_filter filter-btn b-filter__toggle b-filter__toggle_is_disabled hint" data-hint-mn="hint_filter" data-hint="{{=it.fHelp}}"></div>{{?}}' + '</div>' +
  //livefilter end
  //toolbar
  toolbar + '</div>' +
  //toolbar end
  //active filter
  '{{?it.filter}}' + '<div class="b-filter__save-bar">' + '<div class="b-filter__btn-move b-filter__btn-move_dir_left"></div>' + '<div class="b-filter__btn-move b-filter__btn-move_dir_right"></div>' + '<div class="b-filter__save-bar-inner">' + '</div>' + '</div>' + '{{?}}' + '{{?it.afilter.status}}' + '<div class="filter-active i-filter-applied">' + '<div class="filter-btns">' + '<div class="b-button b-button__filter-reset b-button_st_disabled">{{=it.afilter.resetMsg}}</div>' + '<div class="b-button b-button__filter-change b-button_st_disabled" class="b-filter__change-btn">{{=it.afilter.editMsg}}</div>' + '</div>' + '<div class="filter-msg">' + '<span class="head-filter-msg">{{=it.afilter.fname || it.afilter.fmsg}}</span> {{=it.afilter.msg}}</div>' + '<div class="clearBoth"></div>' + '</div>' + '{{?}}' +
  //active filter end
  //filter form wrapper
  '<div class="filter-wrapper" id="filter-{{=it.id}}"></div>' +
  //diagram wrappper
  '<div class="diagram-cont" id="diagram-{{=it.id}}"></div>' +
  //page wrapper
  '<div class="pager-wrapper">{{=it.pager}}</div>' + '</div>' +
  //content table
  '<div class="content" id="ltwr-{{=it.id}}" data-tabid={{=it.id}}>{{=it.table}}</div>' +
  //content table end
  '</div>';

  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}}">' + '<div id="{{=it.id}}-progressbar-overlay" class="b-tab-overlay" data-tabid="{{=it.id}}"></div>' + '<div id="cont-{{=it.id}}-progressbar" class="b-progressbar"></div>' +
  //default progressbar
  '<div id="cont-{{=it.id}}-progressbar-default" class="b-progressbar">' + '<div id="{{=it.id}}-progressbar" class="b-progressbar__outer">' + '<div class="b-progressbar__inner">' + '<div class="b-progressbar__comment">{{=it.comment}}</div>' + '<div class="b-progressbar__loader-wr">' + '<div class="b-progressbar__loader b-progressbar__loader_type_animate"></div>' + '</div>' + '</div>' + '</div>' + '</div>' + '<div class="tab-content-wrapper list-content" id="tcw-{{=it.id}}">' + '<div class="topBar">' + '<div class="rightBar">' + '{{?it.devMode}}' + '<a href="{{=it.selfurl}}&out=devel" data-hint="{{=it.hDevel}}" target="_blank" class="hint"><div class="s-icon s16x16 l-devel"></div></a>' + '{{?}}' + '<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>' + '{{?it.inmenu}}' + '<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{{?}}">' + '<div class="s-icon s16x16 mbar-favorite"></div>' + '</a>' + '<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>' +
  // '<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>' +
  '{{?}}' + '</div>' + '<div class="leftBar b-leftbar b-leftbar_for_map">' + '<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>' + '<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>' + '<div class="clearBoth">' + '</div>' + '</div>' + messages +

  //toolbar
  toolbar +
  //close topbar
  '</div>' +
  //end toolbar
  '<div class="map" id="{{=it.id}}-map"></div>' + '</div>' + '</div>';

  //List pager
  var listPager = '<div class="slist">{{=it.slist}}</div>' + '<div class="pager_list pager-list_type_list">{{=it.pagerList}}</div>' + '<div class="page_cnt">' + '<span class="page_cnt_lb_began" data-mn="pagershow">{{=it.msgBegan}}</span>' + '<input type="text" value="{{=it.cnt}}" maxlength="4" class="cnt pager-list__input b-input b-input_for_pager" name="pcnt"/>' + '<span class="page_cnt_lb_end" data-mn="pagerline"> {{=it.msgEnd}}</span>' + '<div class="pager-list__input-submit b-button b-button_style_small">OK</div>' + '</div>';

  //Empty tab Template
  var tabContEmpty = '<div id="cont-{{=it.id}}"  class="tab-content hidden" data-itemid="{{=it.itemId}}">' + '<div id="{{=it.id}}-progressbar-overlay" class="b-tab-overlay" data-tabid="{{=it.id}}"></div>' +
  //default progressbar
  '<div id="cont-{{=it.id}}-progressbar-default" class="b-progressbar">' + '<div id="{{=it.id}}-progressbar" class="b-progressbar__outer">' + '<div class="b-progressbar__inner">' + '<div class="b-progressbar__comment">{{=it.comment}}</div>' + '<div class="b-progressbar__loader-wr"><div class="b-progressbar__loader b-progressbar__loader_type_animate"></div></div>' + '</div>' + '</div>' + '</div>' + '<div class="inner-content-empty">{{=it.text}}</div>' + '</div>';

  //Dashboard Template
  var tabContDashBoard = '<div id="cont-{{=it.id}}" class="tab-content" data-tabid="{{=it.id}}" data-func="dashboard" data-tab-type="dashboard">' + '<div id="incont-{{=it.id}}" >' + '<div>' + '<table class="dash-table">' + '<tbody class="b-table__tbody">' + '<tr>' + '<td colspan="2">' + '<div id="dash-top" class="b-dashboard_cell" data-pos="top">{{=it.top}}</div>' + '</td>' + '<tr>' + '<tr>' + '<td class="left-row">' + '<div id="dash-left" class="b-dashboard_cell" data-pos="left" >{{=it.left}}</div>' + '</td>' + '<td class="right-row">' + '<div id="dash-right" class="b-dashboard_cell" data-pos="right">{{=it.right}}</div>' + '</td>' + '<tr>' + '</tbody>' + '</table>' + '</div>' + '</div>' + '</div>';

  //Dashboard block Taskbar Template
  var dashTaskbar = '<div class="toolbar">' + '{{~it.toolbar :v :i}}' + '{{?v.window || v.link}}' + '<div class="toolbar-button">' + '<a href="{{=v.window || v.link}}" {{=v.target}} class="toolbar-button__item-img">' + '<div class="s-icon s48x48 {{=v.img}}" {{=v.style}}></div>' + '</a>' + '<a href="{{=v.window || v.link}}" {{=v.target}} data-fn="dashboard" data-mn="taskbar_{{=v.name}}">{{=v.msg}}</a>' + '</div>' + '{{??}}' + '<div data-hint="{{=v.hint}}" class="toolbar-button hint {{?!v.disabled}} multi-item {{?}} {{?v.disabled}} notActive {{?}} {{?v.top}}i-tip-target_st_dashboard_top{{?}}">' + '<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">' + '<div class="s-icon s48x48 {{=v.img}}" {{=v.style}}></div>' + '</span>' + '<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>' + '</div>' + '{{?}}' + '{{~}}' + '</div>';

  var button = '<div class="b-button i-button b-button_color_{{=val.color}} b-button_type_{{=val.type}} i-button_type_{{=val.type}} ' + '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" ' + 'data-tabid="{{=it.id}}" ' + 'data-name="{{=val.name}}" ' + 'data-hint="{{=val.hint}}" ' + '{{=it.parentAttr}} ' + 'data-type="{{=it.type}}" ' + 'data-disabled="{{=val.disabledText}}" ' + 'data-act="{{=val.act}}" ' + 'data-id="{{=val.id}}" ' + 'data-flags="{{=val.flags}}" ' + '{{?val.func}}data-func="{{=val.func}}"{{?}} ' + 'tabindex="0" ' + 'data-elemid="{{=ind}}" ' + 'data-enabled="{{=val.msg}}">{{=val.msg}}' + '</div>';

  var buttons = '{{~it.buttons :val :ind}}' + button + '{{~}}';

  //Form & Report Template
  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}}">' + '<div id="{{=it.id}}-progressbar-overlay" class="b-tab-overlay"></div>' +
  //default progressbar
  '<div id="cont-{{=it.id}}-progressbar-default" class="b-progressbar">' + '<div id="{{=it.id}}-progressbar" class="b-progressbar__outer">' + '<div class="b-progressbar__inner">' + '<div class="b-progressbar__comment">{{=it.comment}}</div>' + '<div class="b-progressbar__loader-wr">' + '<div class="b-progressbar__loader b-progressbar__loader_type_animate"></div>' + '</div>' + '</div>' + '</div>' + '</div>' +
  //default progressbar end

  '<div id="cont-{{=it.id}}-progressbar" class="b-progressbar"></div>' + '<div id="incont-{{=it.id}}" class="form-content">' +
  //    '{{?(it.showcase)}}' +
  //      '<div class="b-title">' +
  //        '<h2 class="b-title__text">{{=it.tabTitle}}</h2>' +
  //      '</div>' +
  //    '{{??}}' +
  '{{?(!it.showcase)}}' + '<div class="topWrapper">' +
  //right buttons
  '<div class="rightBar">' + '{{?it.devMode}}' + '<a href="{{=it.selfurl}}&out=devel" data-hint="{{=it.hDevel}}" target="_blank" class="hint"><div class="s-icon s16x16 l-devel"></div></a>' + '{{?}}' + '{{?it.bands}}' + '{{?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>{{?}}' + '<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>' + '{{?}}' + '<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>' + '{{?it.inmenu}}' + '<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{{?}}">' + '<div class="s-icon s16x16 mbar-favorite"></div>' + '</a>' + '<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>' + '{{?}}' + '<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>' +
  //'<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>' +
  '<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>' + '</div>' + '<div class="leftBar b-leftbar b-leftbar_for_form">' + '<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>' +
  //showcase if end
  '{{?}}' + '{{?!it.notitle}}' + '<span class="tab_title">' + '<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}}">' + '{{=it.tabTitle}}' +
  //devmode icons
  '{{?it.devMode}}' + '<div class="form-settings">' + '<a href="#" class="devel-link-settings devel-link-settings--form" data-tabid="{{=it.id}}"></a>' + '<a href="#" class="devel-link-add devel-link-add--field" data-tabid="{{=it.id}}"></a>' + '</div>' + '{{?}}' + '</h2>' + '{{=it.breadcrumb}}' + '{{?!it.showcase}}' + '{{?}}' + '</span>' +
  //notitle if end
  '{{?}}' + '{{?!it.showcase}}' + '<div class="clearBoth"></div>' + '</div>' +
  //showcase if end
  '{{?}}' + '{{?(!it.nostep)}}' + '{{?it.formflags.steps}}' + '<div class="b-wizard i-wizard">' + '<div class="b-wizard__inner i-wizard__inner">' + '<div class="l-wizard__triangle l-wizard__triangle_dir_left i-wizard__triangle_dir_left">' + '<div class="b-wizard__triangle b-wizard__triangle_dir_left"></div>' + '</div>' + '{{ 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; } }}' + '{{?(sNum !== 1)}}' + '<div class="b-wizard__arrow"></div>' + '{{?}}' + '{{?active}}' + '<div class="b-wizard__step i-wizard__step-num_st_active b-wizard__step-num_st_active">' + '<div class="b-wizard__step-num b-wizard__step-num_st_active" data-mn="msg_wizard_step">{{=it.step}} {{=sNum}}</div>' + '<div class="b-wizard__step-desc b-wizard__step-desc_st_active">{{=actStep.name}}</div>' + '</div>' + '{{??(actStep.unavailable)}}' + '<div class="b-wizard__step">' + '<div class="b-wizard__step-num" data-mn="msg_wizard_step">{{=it.step}} {{=sNum}}</div>' + '<div class="b-wizard__step-desc">{{=actStep.name}}</div>' + '</div>' + '{{??}}' + '<div class="b-wizard__step action">' + '<div class="b-wizard__step-num">' + '<a href="#" data-href="func={{=keyVar}}" class="i-wizard__step-link b-wizard__step-link" data-mn="msg_wizard_step">{{=it.step}} {{=sNum}}</a>' + '</div>' + '<div class="b-wizard__step-desc">{{=actStep.name}}</div>' + '</div>' + '{{?}}' + '{{ } }}' + '<div class="l-wizard__triangle l-wizard__triangle_dir_right i-wizard__triangle_dir_right">' + '<div class="b-wizard__triangle b-wizard__triangle_dir_right"></div>' + '</div>' + '</div>' + '</div><div class="b-wizard__bottom-padding"></div>' + '{{?}}' +
  //showcase if
  '{{?}}' + '{{?it.message.status}}' + banner + '{{??it.message.length}}' + messages + '{{?}}' +
  //toolbar
  toolbar +
  //toolbar end

  '{{?it.reportInfo}}' + '<div class="report_info">{{=window.filterXSS(window.htmlEncode(it.reportInfo))}}</div>' + '{{?}}' + '<div class="error-message">{{=it.ermsg}}</div>' +
  //topWrapper end
  '{{?(!it.showcase)}}' + '</div>' + '{{?}}' + '<div class="l-form l-form__wrapper {{=it.formflags.maxwidth}}" id="form-scroll-{{=it.id}}">' + '<div class="l-form__overlay"><div class="l-form__loader"></div></div>' + '<div class="l-form__inner" id="form-scroll-in-{{=it.id}}">' + '<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}}>' + '<div id="form-wrapper-{{=it.id}}">' + '<input type="hidden" name="func" value="{{=it.func}}"/>' +
  //chrome password autofilling prevent from http://benjaminjshore.info/2014/05/chrome-auto-fill-honey-pot-hack.html
  '<input type="password" style="display:none;"/>' + '<input type="hidden" id="{{=it.id}}-progresstype" value="{{=it.progress}}"/>' + '<div id="{{=it.progress}}"></div>' + '<input type="hidden" name="elid" value="{{=it.elid}}" id="{{=it.id}}-elid"/>' + '{{?(it.plid != "")}}<input type="hidden" name="plid" value="{{=it.plid}}" id="{{=it.id}}-plid"/>{{?}}' + '{{?it.isUserexp}}' + '<div class="userexperience {{=it.arePages}}" data-level="{{=it.userexp}}" data-mn="msg_userexperience"> {{=it.userexpMsg}}</div>' + '{{?}}' +
  // check for form exist
  '{{?it.formstatus}}' + '{{=it.pages}}' +
  //submit buttons
  '{{?it.buttons.length}}' + '<div class="l-buttons i-buttons_form-type_{{=it.type}} l-buttons_for_form" data-type="buttons" id="{{=it.id}}-buttons">' + '{{~it.buttons :val :ind}}' + button + '{{~}}' + '</div>' + '{{?}}' + '{{?}}' +

  // check for form exist END
  '</div>' + '<div class="bands">{{=it.bands}}</div>' + '</form>' + '</div>' + '</div>' + '</div>' + '</div>';
  //captcha
  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>';

  //Input template
  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>';

  //Input File Template
  var formItemFile = '<div class="{{=it.dependFields}} {{=it.setvalue}} b-input-file__wr" id="b-input-file__wr-{{=it.id}}">' + '<input  value="{{=it.value}}" {{=it.attr}} id="{{=it.name}}-{{=it.id}}" data-tabid="{{=it.id}}" class="b-input b-input_type_file {{=it.classes}}" />' + '<div class="b-input-file-fake" data-source="{{=it.name}}-{{=it.id}}">' + '<div class="b-input-file-fake__input hint" id="f-{{=it.name}}-{{=it.id}}" data-hint=""></div>' + '<div class="b-input-file-fake__btn">{{=it.msg}}</div>' + '</div>' + '</div>';

  //Password check template
  var passwdCheck = '<div class="checkpass-indicator-wrapper">' + '<div id="checkpass-indicator-wrapper-{{=it.name}}-{{=it.id}}">' + '<span class="strength-pass-indicator">' + '<span class="ci-square si-one"></span>' + '<span  class="ci-square si-two"></span>' + '<span class="ci-square si-three"></span>' + '<span class="ci-square si-four"></span>' + '</span>' + '<span class="strength-pass-text">' + '<span class="st-text st-one">{{=it.short}}</span>' + '<span class="st-text st-two">{{=it.weak}}</span>' + '<span class="st-text st-three">{{=it.good}}</span>' + '<span class="st-text st-four">{{=it.strong}}</span>' + '</span>' + '</div>' + '</div>';

  var confirmCheck = '<div class="b-form-confirm-message" id="check-confirm-{{=it.name}}-{{=it.id}}">{{=it.doNotMatch}}</div>';

  //Password
  var formItemPassword = '<div class="l-form__input-wr {{=it.dependFields}} {{=it.setvalue}}" >' + '<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"/>' + '<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"/>' + '</div>';

  //Input with zoom
  var formItemInputWithZoom = '<div class="l-form__input-wr {{=it.dependFields}} {{=it.setvalue}}" >' + '<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}}"/>' + '<textarea class="{{=it.textareaClasses}} force-hint b-textarea" {{=it.textareaAttr}} data-tabid="{{=it.id}}"></textarea>' + '</div>';

  //Input with zoom
  var formItemInputWithZoom1 = '<div class="{{=it.dependFields}}" >' + '<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}}"/>' + '<textarea class="{{=it.textareaClasses}} force-hint b-textarea" {{=it.textareaAttr}} data-tabid="{{=it.id}}"></textarea>' + '</div>';

  var formItemTextarea = '<div id="b-msg-templ-{{=it.name}}-{{=it.id}}" class="b-msg-templ__options"></div>' + '<div class="{{=it.setvalue}} {{=it.dependFields}} b-textarea__wrapper">' + '{{?it.quote}}' + '<div class="b-ticket-tools-link">' + '<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>' + '</div>' + '{{?}}' + '{{?it.savedmessage}}' + '<div class="b-msg-templ__cont b-ticket-tools-link" data-target="{{=it.name}}-{{=it.id}}">' + '<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>' + '</div>' + '{{?}}' + '<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>' + '{{?it.editor}}<div id="{{=it.name}}-{{=it.id}}-editor" data-id="{{=it.name}}-{{=it.id}}"></div>{{?}}' + '<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>' + '</div>';

  var formItemCheckbox = '<div class="b-checkbox__wrapper {{=val.dependFields}} {{=val.setvalue}} {{?val.img}}l-checkbox-img{{?}}">' + '{{?val.img}}' + '<div class="s-icon s16x16 {{=val.img}} b-checkbox__img"></div>' + '{{?}}' + '<div class="b-checkbox checkboxel">' + '<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>' + '</div>' + '<div class="l-label__wrapper l-label__wrapper_for_checkbox">' + '<div class="b-label__visible b-label__visible_for_checkbox" data-tabid="{{=val.id}}" data-id="{{=val.name}}">{{=val.desc}}</div>' + '<div class="b-label__invisible b-label__invisible_for_checkbox">{{=val.desc}}</div>' + '<div class="b-label__line-dotted b-label__line-dotted_for_checkbox"></div>' + '</div>' + '<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}}/>' + '</div>';

  var formItemHtmldata = '<div class="b-htmldata__inner b-htmldata">' + '{{?it.img}}' + '<div class="b-htmldata__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>' + '{{?}}' + '<div id="{{=it.id}}-{{=it.name}}">{{=window.filterXSS(window.htmlEncode(it.value))}}</div>' + '<div class="b-htmldata__clear"></div>' + '</div>';

  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      {{~}}';

  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>';

  var formItemMSelect = '{{ var l, selectedClass = ""; if (it.hasValue) { selectedClass = "selected"; } }}' + '<div class="b-mselect {{=selectedClass}} {{=it.readonly}} {{=it.setvalue}}" data-depend="{{=it.dependMaster}}" id="{{=it.id}}-{{=it.name}}-ms">' + '<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}}">' + '<div class="b-myselect__arrow-down b-myselect__arrow-down_for_mselect"><div class="b-myselect__triangle-down"></div></div>' + '<ul class="b-mselect__ul-view" id="{{=it.id}}-{{=it.name}}-ms-view" data-tabid="{{=it.id}}" data-maxselect="{{=it.maxselect}}">' + '<li class="b-mselect__item b-mselect__item_msg_unselected" data-default-msg="{{=it.msg}}">{{?it.mixed}}{{=it.msg_mixed}} {{??}} {{=it.msg}}{{?}}</li>' + '{{ var v = "", ind = 0; for (var i in it.values) {  }}' + '{{ var selected = ""; if (it.values[i]) { selected="chosen"; } }}' + '{{  if (it.slist[i]) { if (v !== "") { v += ","; } v += it.slist[i].key; ind++; }}' + '{{ var dependelem = ""; if (it.slist[i].depend != "" && it.slist[i].depend != undefined) { dependelem="dependelem"; } else { dependelem="b-myselect__select-li_show_yes"; } }}' + '<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}}">' + '{{=it.slist[i].value}}' + '<span class="b-mselect__unselect"></span>' + '</li>' + '{{ } } }}' + '</ul>' + '</div>' + '<div class="b-mselect__options closed" id="{{=it.id}}-{{=it.name}}-ms-list-wrapper" data-id="{{=it.id}}-{{=it.name}}" data-tabid="{{=it.id}}">' + '<div class="b-mselect__list-value" id="{{=it.id}}-{{=it.name}}-ms-list">' + '<ul class="b-mselect__ul-choose" id="{{=it.id}}-{{=it.name}}-ms-list-ul" data-id="{{=it.id}}-{{=it.name}}">' + '<li class="b-mselect__item b-mselect__item_select-all">{{=it.msg_select_all}}</li>' + '{{ var l = it.slist.length; for (var i = 0; i < l; i++) {  }}' + '{{ var selected = ""; if (it.values[i]) { selected="chosen"; } }}' + '{{ var dependelem = ""; if (it.slist[i].depend != "" && it.slist[i].depend != undefined) { dependelem="dependelem"; } else { dependelem="b-myselect__select-li_show_yes"; } }}' + '<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}}">' + '{{=it.slist[i].value}}' + '<span class="b-mselect__unselect"></span>' + ' </li>' + '{{ } }}' + '</ul>' + '</div>' + '</div>' +
  //'<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>' +
  //'<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>' +
  '<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}}"/>' + '</div>';

  var formItemRadio = '<div class="b-radio {{=it.depend}} {{=it.dependFields}} {{=it.readonly}} {{=it.setvalue}}" id="{{=it.id}}-{{=it.name}}-radio" data-depend="{{=it.dependMaster}}">' +
  //foreach
  '{{~it.slist :value :index}}' + '{{ var rbclass = "", tabindex = ""; if (it.value == value.key) { rbclass="checked"; tabindex = "tabindex=0"; } }}' + '{{ var dependelem = ""; if (value.depend != "" && value.depend != undefined ) { dependelem="dependelem"; } else { dependelem="b-myselect__select-li_show_yes"; } }}' + '<div data-dependkey="{{=value.depend}}" class="{{=dependelem}} l-radio__item">' + '<div class="b-radio__control-wr">' + '<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)}}">' + '</div>' + '</div>' + '<div class="l-label__wrapper l-label__wrapper_for_radio">' + '<div class="b-label__visible b-label__visible_for_radio" data-r-class="{{=it.name}}-{{=it.id}}-{{=hash(value.key)}}">{{=value.value}}</div>' + '<div class="b-label__invisible b-label__invisible_for_radio">{{=value.value}}</div>' + '<span class="b-label__line-dotted b-label__line-dotted_for_radio"></span>' + '</div>' + '</div>' +
  //end foreach
  '{{~}}' + '<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}}/>' + '</div>';

  var formItemRadioImg = '<div class="b-radio {{=it.setvalue}} {{=it.readonly}}">' + '<table class="b-radio-img">' + '<tbody class="b-table__tbody">' + '{{~it.slist :value :index}}' + '{{ var rbclass = "", tabindex = ""; if (it.value == value.key) { rbclass="checked"; tabindex = "tabindex=0"; } }}' + '<tr class="b-radio-img__row" data-r-class="{{=it.name}}-{{=it.id}}-{{=hash(value.key)}}">' + '<td class="b-radio-img__col b-radio-img__col_radio">' + '<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>' + '</td>' + '<td class="b-radio-img__col b-radio-img__col_img">' + '<div class="b-radio-img__img-wrapper">' + '{{?value.src}} <span class="b-radio-img__img" style="background-image: url({{=value.src}}); ' + '{{?value.width}}width:{{=value.width}}px;{{?}}' + '{{?value.height}}height:{{=value.height}}px;{{?}}"></span>{{?}}' + '{{?value.img}} <span class="b-radio-img__img {{=value.img}}"></span>{{?}}' + '</div>' + '</td>' + '<td class="b-radio-img__col b-radio-img__col_desc"><div class="b-radio-img__desc">{{=window.htmlDecode(value.value)}}</div></td>' + '</tr>' + '{{~}}' + '</tbody>' + '</table>' + '<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}}" />' + '</div>';

  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>';

  var formItemExtrBtn = '<{{=it.extrabtn}} data-tname="{{=it.name}}-{{=it.id}}"/>';

  var formItemDesk = '<span class="desc">{{=it.value}}</span>';

  var formItemDeskRadio = '<div class="desk">' + '<div class="desk-visible">{{=it.value}}</div>' + '<div class="desk-invisible">{{=it.value}}</div>' + '<span class="b-label__line-dotted"></span>' + '</div>';

  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>{{?}}' + '<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>' + '<div class="b-textdata__clear l-clear-both"></div>';

  var formItemLabel = '<div class="l-label__wrapper">' + '<div class="l-label__inner">' + '<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>' + '<label class="b-label__invisible">{{=it.img}}{{=it.label}}</label>' + '<span class="b-label__line-dotted"></span>' + '{{?it.required}}<span class="b-required-star">*</span>{{?}}' + '{{?it.devMode}}' + '<div class="field-settings">' + '<a href="#" class="devel-link-settings devel-link-settings--field" data-elid="{{=it.id}}" data-tabid="{{=it.tabId}}"></a>' + '<a href="#" class="devel-link-delete devel-link-delete--field" data-elid="{{=it.id}}" data-name="{{=it.label}}" data-tabid="{{=it.tabId}}"></a>' + '</div>' + '{{?}}' + '</div>' + '</div>';

  var filterItemLabel = '<label data-mn="{{=it.name}}" data-fn="{{=it.func}}">{{=it.label}}</label>';

  var formItemSlider = '<table class="b-slider">' + '<tbody class="b-table__tbody">' + '<tr>' + '<td class="l-slider__col l-slider__col_cont_slider">' + '<div class="l-slider__wr {{=it.readonly}}">' + '<div class="b-slider__line"></div>' + '<div class="b-slider__border b-slider__border_pos_left"></div>' + '<div class="b-slider__c-border b-slider__c-border_pos_top"></div>' + '<div class="b-slider__c-border b-slider__c-border_pos_bottom b-slider__c-bottom-border"></div>' + '<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}}">' + '<div class="b-slider__core"></div>' + '</a>' + '<div class="b-slider__border b-slider__border_pos_right"></div>' + '</div>' + '</td>' + '<td class="l-slider__col l-slider__col_cont_input {{=it.setvalue}}">' + '<div class="l-slider__input-wr {{=it.setvalue}}">' + '<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}}/>' + '</div>' + '</td>' + '</tr>' + '</tbody>' + '</table>';

  var formItemSliderEditInList = '<div class="l-form__row_type_slider">' + '<div class="l-form__control-wr">' + formItemSlider + '</div>' + '</div>';

  var formItemTicketMsg = '{{~it.mlist :value:index}}' + '<tr class="b-ticket__table-row {{?value.isCollapsed}} b-ticket__table-row_is_collapsible b-ticket__table-row_is_collapsed {{?}}">' + '<td class="b-ticket__table-col b-ticket__table-col_type_msg">' + '<div class="b-ticket__item b-ticket__item_{{=value.type}} ">' + '<div class="b-ticket__item-inner b-ticket__item-inner_{{=value.type}} {{?value.rate.is}}b-ticket__item-inner_has_rate{{?}}">' + '{{?value.type === "info"}}' + '<table class="b-ticket__table-info">' + '<tbody class="b-table__tbody">' + '{{~value.rows :v :i}}' + '<tr class="b-ticket__row-info {{?v.header}}b-ticket__row-info_type_header{{?}}">' + '{{?v.header}}' + '<td class="b-ticket__col-info b-ticket__col-info_type_header" colspan="2">{{=v.label}}</td>' + '{{??}}' + '<td class="b-ticket__col-info b-ticket__col-info_type_label">{{=v.label}}</td>' + '<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>' + '{{?}}' + '</tr>' + '{{~}}' + '</tbody>' + '</table>' + '{{??}}' + '<div class="b-ticket__btn-collapse i-ticket__btn-collapse s16x16 s-icon mbar-showall"></div>' + '{{?value.title}}<div class="b-ticket__title">{{=value.title}}</div>{{?}}' + '<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>' +
  //file
  '{{?value.file.is}}' + '{{~value.file.elems :vv :ii}}' + '<div class="b-ticket__file">' + '<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>' + '</div>' + '{{~}}' + '{{?}}' +
  //rate
  '{{?value.rate.is}}' + '<div class="b-ticket__rate">' + '{{~value.rate.items :vv :ii}}' + '<div class="b-ticket__rate-item" data-id="{{=vv.id}}" data-elid="{{=vv.elid}}">' + '<span class="b-ticket__rate-msg">{{=vv.msg}}</span>' + '{{~vv.items :v:i}}' + '<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>' + '{{~}}' + '</div>' + '{{~}}' + '</div>' + '{{?}}' + '<div class="b-ticket__clear"></div>' + '{{?}}' + '</div>' + '</div>' + '</td>' + '<td class="b-ticket__table-col b-ticket__table-col_type_avatar">' + '{{?value.avatar.is && (value.type === "incoming" || value.type === "outcoming")}}' + '<div class="b-ticket__avatar b-ticket__avatar_{{=value.type}}">' + '<img src="{{=value.avatar.src}}" width="{{=value.avatar.width}}" height="{{=value.avatar.height}}" class="b-ticket__avatar-img"/>' + '</div>' + '{{?}}' + '</td>' + '</tr>' + '{{~}}';

  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;\')}}{{?}}{{?}}">' + '<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>' + '<table class="b-ticket__table {{?it.fmsgtype === "outcoming"}}b-ticket__table_my_outcoming{{?}}" id="{{=it.id}}-{{=it.name}}" data-type="ticket">' + '<tbody class="b-table__tbody">' + formItemTicketMsg + '</tbody>' + '</table>' + '</div>';

  var formItemSelectAutocomplete = '<div class="{{=it.depend}} b-select-ac">' + '<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}}" />' + '</div>' + '<div class="b-select-ac__list-scroll-wrapper" id="opt-{{=it.name}}-{{=it.id}}" data-tabid="{{=it.id}}">' + '<div class="b-select-ac__list-wrapper {{=it.dependFields}}" id="cont-b-select-ac-list__{{=it.name}}-{{=it.id}}">' + '<ul class="b-select-ac__list" data-id="{{=it.name}}-{{=it.id}}" id="b-select-ac-list__{{=it.name}}-{{=it.id}}"></ul>' + '<input value="{{=it.value}}" type="hidden" name="{{=it.name}}" class="{{=it.classes}}" id="key-{{=it.name}}-{{=it.id}}" data-tabid="{{=it.id}}"/>' + '<div>' + '</div>';

  var formItemFrame = '<div class="b-form-frame">' + '<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>' + '<div class="b-resizer" id="resizer_editor-{{=it.id}}" data-id="{{=it.name}}-{{=it.id}}" data-tabid="{{=it.id}}"></div>' + '</div>';

  var formItemDateTime = '<div class="b-form-datetime" id="{{=it.id}}-{{=it.name}}" data-type="datetime" data-difftime="{{=it.difftime}}">{{=it.value}}</div>';

  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}}">' + '<div tabindex="0" class="b-form-page__title i-form-page__title">' + '<span class="b-form-page__title-content" data-mn="{{=it.name}}">{{=it.title}}</span>' + '{{?it.reload}}<span class="dashblock-reload hint" data-hint-mn="hint_reload" data-hint="{{=App.u.escapeQuote(it.hintReload)}}"></span>{{?}}' + '<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>' + '</div>' + '<div class="b-form-page__vline"></div>' + '</h3>';

  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>';

  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" {{ } } }}>' + '{{=it.title}}' + '<div class="b-form-page__inner" style="display:{{=it.display}};" >' + '<table class="l-form__table">' + '<tbody class="b-table__tbody">' + '{{=it.content}}' + '</tbody>' + '</table>' + '</div>' + '</div>';

  var filterWrapper = '<div class="filter-inner">' + '<form name="frm-{{=it.tabId}}" id="frm-{{=it.tabId}}">' + '<input type="hidden" value="{{=it.func}}" name="func"/>' + '<div class="filter-inner-inner">' + '<div class="filter-cont"><table><tr>{{=it.form}}</tr></table></div>' + '<div class="filter-btn-wrapper">' + '<div class="filter-btns">' + '<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>' + '<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>' + '<div class="b-button b-button__filter-clear" data-tabid="{{=it.tabId}}" tabindex="0">{{=it.filterMsg.clearMsg}}</div>' + '</div>' + '</div>' + '<div class="clearBoth"></div>' + '</div>' + '</form>' + '</div>';

  var filterItem = '<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" {{ } } }}>' + '<td class="filter-first">{{=it.first}}</td>' + '<td class="filter-second"><div class="filter-input">{{=it.second}}</div></td>' + '</tr>';

  var filterRow = '<td class="filter-col">' + '<table class="filter-item__table filter-table_n_{{=it.index}}">{{=it.content}}</table>' + '</td>';

  var filterSavedItem = '<div class="b-filter__saved-item {{?it.active}}b-filter__saved-item_st_active{{?}}">' + '<div class="b-filter__saved-item-inner">' + '<input type="text" class="b-filter__saved-name-edit" ' + 'id="b-filter__saved-name-edit_tid_{{=it.id}}" value="{{=it.name}}" ' + 'data-id="{{=it.id}}" data-func="{{=it.func}}" data-tabid="{{=it.tabId}}" data-name="{{=it.name}}" />' + '<span class="b-filter__saved-name">{{=it.name}}</span>' + '</div>' + '<span class="b-filter__saved-edit" data-id="{{=it.id}}"></span>' + '<span class="b-filter__saved-remove" data-id="{{=it.id}}"></span>' + '</div>';

  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" {{ } } }}>' + '<td class="l-form__col l-form__col_cont_label" colspan="4">{{=it.second}}</td>' + '</tr>';

  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" {{ } } }}>' + '<td class="l-form__col l-form__col_cont_label">{{=it.first}}</td>' + '<td class="l-form__col l-form__col_cont_control" {{=it.colspan}}>' + '<div class="l-form__table-control-wrapper">' + '<table class="l-form__table-control">' + '<tbody class="b-table__tbody">' + '<tr>' + '<td class="l-form__col-control">' + '<div class="l-form__control-wr">{{=it.second}}</div>' + '</td>' + '<td class="l-form__col l-form__col_cont_hint">' + '<div class="field-help {{=it.hint}} hint" data-hint-mn="{{=it.fname}}" data-hint="{{=it.third}}"></div>' + '</td>' + '<td class="l-form__col l-form__col_cont_status">' + '<div class="field-desc" data-mn="{{=it.descName}}">{{=it.desc}}</div>' + '<div class="field-status"></div>' + '{{?it.devMode || it.testMode}}' + '<div class="field-settings">' + '{{?it.devMode}}' + '<a href="#" class="devel-link-settings devel-link-settings--field " data-elid="{{=it.fname}}" data-tabid="{{=it.tabId}}"></a>' + '<a href="#" class="devel-link-delete devel-link-delete--field" data-elid="{{=it.fname}}" data-name="{{=it.label}}" data-tabid="{{=it.tabId}}"></a>' + '{{??}}' + '<a href="#" class="testmode__form-link b-elem_style_gracescale" data-elid="{{=it.fname}}" data-tabid="{{=it.tabId}}"></a>' + '{{?}}' + '</div>' + '{{?}}' + '</td>' + '</tr>' + '<tr class="l-form__col-error">' + '<td colspan="3" class="">' + '<div class="b-error-box__wrapper" data-id="{{=it.id}}">' + '<div class="b-error-box">' + '<div class="b-error-box__top-triangle"></div>' + '<div class="b-error-box__inner">{{=it.error}}</div>' + '</div>' + '</div>' + '</td>' + '</tr>' + '</tbody>' + '</table>' + '</div>' + '</td>' + '<td class="l-form__col l-form__col_cont_row-end"></td>' + '</tr>';

  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" {{ } } }}>' + '<td colspan="3" class="l-form__col_type_fullwidth l-form__col l-form__col_cont_control">' + '{{=it.first}}' + '<table class="l-table-fullwidth">' + '<tbody class="b-table__tbody">' + '<tr>' + '<td class="l-form__col-control">' + '<div class="l-form__control-wr">{{=it.second}}</div>' + '</td>' + '<td class="l-form__col l-form__col_cont_hint">' + '<div class="field-help {{=it.hint}} hint" data-hint-mn="{{=it.fname}}" data-hint="{{=it.third}}"></div>' + '</td>' + '<td class="l-form__col l-form__col_cont_status">' + '<div class="field-status" ></div>' + '{{?it.devMode || it.testMode}}' + '<div class="field-settings">' + '{{?it.devMode}}' + '<a href="#" class="devel-link-settings devel-link-settings--field " data-elid="{{=it.fname}}" data-tabid="{{=it.tabId}}"></a>' + '<a href="#" class="devel-link-delete devel-link-delete--field" data-elid="{{=it.fname}}" data-name="{{=it.label}}" data-tabid="{{=it.tabId}}"></a>' + '{{??}}' + '<a href="#" class="testmode__form-link b-elem_style_gracescale" data-elid="{{=it.fname}}" data-tabid="{{=it.tabId}}"></a>' + '{{?}}' + '</div>' + '{{?}}' + '</td>' + '</tr>' + '<tr class="l-form__col-error">' + '<td colspan="3" class="error">' + '<div class="b-error-box__wrapper" data-id="{{=it.id}}">' + '<div class="b-error-box">' + '<div class="b-error-box__top-triangle"></div>' + '<div class="b-error-box__inner">{{=it.error}}</div>' + '</div>' + '</div>' + '</td>' + '</tr>' + '</tbody>' + '</table>' + '</td>' + '</tr>';

  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" {{ } } }}>' + '<td colspan="2" class="formwidth l-form__col l-form__col_cont_control">' + '{{=it.first}}' + '<table class="l-form__table-formwidth l-table-clean">' + '<tbody class="b-table__tbody">' + '<tr>' + '<td class="l-form__col-control">' + '<div class="l-form__control-wr">{{=it.second}}</div>' + '</td>' + '<td class="l-form__col l-form__col_cont_hint">' + '<div class="field-help {{=it.hint}} hint" data-hint-mn="{{=it.fname}}" data-hint="{{=it.third}}"></div>' + '</td>' + '<td class="l-form__col l-form__col_cont_status">' + '<div class="field-desc"></div>' + '<div class="field-status" ></div>' + '</td>' + '</tr>' + '<tr class="l-form__col-error">' + '<td colspan="3" class="error">' + '<div class="b-error-box__wrapper" data-id="{{=it.id}}">' + '<div class="b-error-box">' + '<div class="b-error-box__top-triangle"></div>' + '<div class="b-error-box__inner">{{=it.error}}</div>' + '</div>' + '</div>' + '</td>' + '</tr>' + '</tbody>' + '</table>' + '</td>' + '<td class="l-form__col l-form__col_cont_row-end"></td>' + '</tr>';

  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" {{ } } }}>' + '<td class="l-form__col l-form__col_cont_control" colspan="2">' + '<table class="l-table-clean">' + '<tbody class="b-table__tbody">' + '<tr>' + '<td class="l-form__col-control">' + '<div class="l-form__control-wr">{{=it.second}}</div>' + '</td>' + '<td class="l-form__col l-form__col_cont_hint">' + '<div class="field-help {{=it.hint}} hint" data-hint-mn="{{=it.fname}}" data-hint="{{=it.third}}"></div>' + '</td>' + '<td class="l-form__col l-form__col_cont_status">' + '<div class="field-desc">{{=it.desc}}</div>' + '<div class="field-status"></div>' + '{{?it.devMode}}' + '<div class="field-settings">' + '<a href="#" class="devel-link-settings devel-link-settings--field" data-elid="{{=it.fname}}" data-tabid="{{=it.tabId}}"></a>' + '<a href="#" class="devel-link-delete devel-link-delete--field" data-elid="{{=it.fname}}" data-name="{{=it.label}}" data-tabid="{{=it.tabId}}"></a>' + '</div>' + '{{?}}' + '</td>' + '</tr>' + '<tr class="l-form__col-error">' + '<td colspan="3" class="error">' + '<div class="b-error-box__wrapper" data-id="{{=it.id}}">' + '<div class="b-error-box">' + '<div class="b-error-box__top-triangle"></div>' + '<div class="b-error-box__inner">{{=it.error}}</div>' + '</div>' + '</div>' + '</td>' + '</tr>' + '</tbody>' + '</table>' + '<td class="l-form__col l-form__col_cont_row-end"></td>' +
  //    '</td>' +
  '</tr>';

  var formItemRowHidden = '<tr class="hidden l-form__row_type_hidden">' + '<td class="l-form__col l-form__col_cont_control" colspan="4">{{=it.second}}</td>' + '</tr>';

  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" {{ } } }}>' + '<td colspan="3">{{=it.second}}</td>' + '</tr>';

  var formPlainHint = '<tr data-show-{{=it.name}}-{{=window.hash(it.key)}}="yes" class="depended-hidden-s l-form__row l-form__row_type_plainhint">' + '<td class="l-form__col-control" colspan="2">{{=window.htmlEncode(it.content)}}</td>' + '<td class="l-form__col l-form__col_cont_row-end"></td>' + '</tr>';

  var tabLi = '<li class="tab-group" id="{{=it.tabId}}">' + '<span class="subtab switch first hint {{?it.isPin}}subtab_is_pin{{?}}" id="switch-{{=it.tabId}}" data-hint="{{=it.hint}}" data-tabid="{{=it.tabId}}">' + '<a href="#" data-tabid="{{=it.tabId}}"><div {{=it.pinIcon}}></div><span class="short">{{=it.shortTitle}}</span><span class="full">{{=it.title}}</span></a>' + '<a href="#" class="close" rel="{{=it.tabId}}"><div class="b-tab-close"></div></a>' + '</span>' + '</li>';

  var tabChld = '<span id="{{=it.tabId}}"><span class="sepr"></span>' + '<span class="subtab switch hint" id="switch-{{=it.tabId}}" data-hint="{{=it.hint}}" data-tabid="{{=it.tabId}}">' + '<a href="#"  data-tabid="{{=it.tabId}}"><span class="short">{{=it.shortTitle}}</span><span class="full">{{=it.title}}</span></a>' + '<a href="#" class="close" rel="{{=it.tabId}}"><div class="i-tab-close b-tab-close"></div></a>' + '</span>' + '</span>';

  var progressBar = '<div id="{{=it.tabId}}-progressbar" class="b-progressbar__outer">' + '<div class="b-progressbar__inner">' + '<div class="b-progressbar__comment">{{=it.comment}}</div>' + '<div class="b-progressbar__loader-wr">' + '<div class="b-progressbar__loader {{=it.colorClass}}" style="width: {{=it.width}}%;">{{=it.per}}</div>' + '</div>' + '</div>' + '<div/>';

  var reportBand = '<div class="band-content {{=it.fullwidth}}" id="{{=it.aid}}">' + '<div class="band-title {{=it.titleClass}}">{{=it.title}}</div>' + '<div class="band-graphic" ><div class="anychart" id="{{=it.gid}}">' +
  //wrappers for graphics
  '{{ for (var i = 0; i < it.dc; i++) { }}' + '<div id="{{=it.gid}}{{=i}}"></div>' + '{{ } }}' +
  //wrappers for graphics
  '</div></div>' + '<div class="band_show">' + '<div class="band_show_button {{=it.hidden}}" data-id="{{=it.id}}">' + '<span class="show_msg">{{=it.showMsg}}</span>' + '<span class="hide_msg">{{=it.hideMsg}}</span>' + '<span class="triangle-band"></span></div>' + '</div>' + '<div class="band-table block-table {{=it.hiddenClass}}" id="{{=it.id}}">{{=it.table}}</div>' + '</div>';

  var emptyBandOverlay = '<div class="b-band__empty-overlay"></div>' + '<div class="b-band__empty-msg">{{=it.emptymsg}}</div>' + '<div class="b-band__empty-wrapper" id="{{=it.tabId}}-band-empty"></div>';

  var reportBandDash = '<div class="band-content {{=it.fullwidth}}">' + '{{?it.empty}}' + emptyBandOverlay + '{{?}}' + '<div class="band-title {{=it.titleClass}}">{{=it.title}}</div>' + '<div id="{{=it.gid}}" class="band-chart-cont"></div></div>' + '</div>';

  var fatalError = '<div id="fatal-error-{{=it.id}}" class="b-fatal-error b-err__{{=it.type}}">' + '<div class="b-fatal-error__round">' + '<div class="b-fatal-error__inner">' + '<div class="b-fatal-error__sign">' + '<div class="b-fatal-error__sign-top"></div>' + '<div class="b-fatal-error__sign-body"></div>' + '<div class="b-fatal-error__sign-empty"></div>' + '<div class="b-fatal-error__sign-dot"></div>' + '</div>' + '<div class="b-fatal-error__message">' + '{{=it.message}}' + '{{?it.ref}}' + '<div class="more b-fatal-error__more-link"><a href="{{=it.ref}}&newwindow=yes" target="_blank">{{=it.moreMsg}}</a></div>' + '{{?}}' + '{{?it.refreshLink}}' + '<div class="m-item b-fatal-error__refresh-link"><a href="#" data-url="{{=it.refreshLink}}" >{{=it.refreshLinkMsg}}</a></div>' + '{{?}}' + '</div>' + '{{?it.id}}' + '<div class="l-buttons l-buttons_for_fatalerror">' + '<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>' + '</div>' + '{{?}}' + '</div>' + '</div>' + '<div class="b-fatal-error__triangle">' + '</div>' + '</div>';

  var editinListForm = '<div>' + '<form id="editinlist-form-{{=it.id}}" class="l-form__row">' + '{{=it.field}}' + '<input type="hidden" name="elid" value="{{=it.elid}}" />' + '<input type="hidden" name="sok" value="ok" />' + '<input type="hidden" name="func" value="{{=it.func}}" />' + '</form>' + '<div class="l-buttons l-buttons_for_editinlist">' + '<div class="b-button b-button_style_small b-button_style_green i-btn-editlis-ok" data-id="{{=it.id}}">&#10004</div>' + '<div class="b-button b-button_style_small b-button_style_red i-btn-editlis-cancel" data-id="{{=it.id}}">&#10008</div>' + '</div>' + '<div id="err-cont-{{=it.id}}" class="editlist-err-cont"></div>' + '</div>';

  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>{{?}}';

  var formListFilterWrapper = '<div id="{{=it.id}}-{{=it.name}}" data-type="listfilter">{{=it.content}}</div>';

  var formListFilter = '<div class="checkbox i-form__item i-form-list__filter" data-srcname="{{=it.srcName}}" data-tabid="{{=it.id}}">' + '<div class="b-form-list__filter">' + '{{~it.list :val :ind}}' + '{{val.id = it.id;}}' + formItemCheckbox + '{{~}}' + '</div>' + '<div class="b-form-list__filter-clear i-form-list__filter-clear">{{=it.resetMsg}}</div>' + '<div class="b-form-list__filter-notfound">{{=it.notFoundMsg}}</div>' + '</div>';

  var formListContent = '<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>';

  var formListBlocksContent = '{{?it.label}}<h3 class="b-form-blocks__label">{{=it.label}}</h3>{{?}}' + '<div class="b-form-blocks">' + '{{~it.rows :v :i}}' + '<div class="b-form-blocks__block {{?it.filterfield && v[it.filterfield]}} row__has__tags' + '{{~v[it.filterfield].v :val :ind}} filter__{{=val}} {{~}}{{??}} row__nohas__tags{{?}}">' + '{{ for (var key in it.coldata) { }}' +
  //      '<td class="b-form-list__col align-{{=it.coldata[key].align}}" style="width: {{=it.coldata[key].width}};">' +
  '<div class="b-form-list__col-inner b-form-blocks__col-inner_type_{{=it.coldata[key].type}}">' + '{{?v[key]}}' + '{{?it.coldata[key].type === "data" || it.coldata[key].type === "msg"}}' + '<div class="b-form-list__data {{?v[key].color}}status-{{=v[key].color}}{{?}}">{{=window.filterXSS(window.htmlDecode(v[key].v))}}</div>' + '{{??it.coldata[key].type === "img"}}' + '{{?v[key].src}}' + '<img src="{{=v[key].src}}" class="b-form-list__img" width="{{=v[key].width}}" height="{{=v[key].height}}"/>' + '{{??v[key].img}}' + '<div class="{{=v[key].img}}"></div>' + '{{?}}' + '{{??it.coldata[key].type === "button"}}' + '<div class="b-form-list__button-wrapper">' + '{{~v[key] :val :ind}}' + button + '{{~}}' + '</div>' + '{{?}}' + '{{?}}' + '</div>' +
  //      '</td>' +
  '{{ } }}' + '</div>' + '{{~}}' + '</div>';

  var formListItemRow = '<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" {{ } } }}>' + '<td class="l-form__col l-form__col_cont_control" colspan="3">' + '<div id="{{=it.id}}-{{=it.name}}" class="{{=it.id}}-list" data-type="list" data-name="{{=it.name}}">' + '{{?it.view == "block"}}' + formListBlocksContent + '{{??}}' + formListContent + '{{?}}' + '</div>' + '</td>' + '</tr>';

  var tip = '<div class="b-tip b-tip_name_{{=it.name}}">' + '<div class="b-tip__inner">' + '{{=it.content}}' + '</div>' + '<div class="b-tip__close" data-name="{{=it.name}}"></div>' + '</div>';

  var usefulLinks = '<div class="b-useful-links {{?it.isCollapsed}}b-useful-links_is_collapsed{{?}}">' + '<div class="b-tip__close i-userful-links-collapse"></div>' + '<div class="b-tip__inner">' + '<div class="b-useful-links__title">{{=it.title}}</div>' + '<div class="b-useful-links__content">{{=it.content}}</div>' + '</div>' + '</div>';

  var infoList = '<div class="b-infolist">' + '<table class="b-infolist__table">' + '<tbody class="b-table__tbody">' + '{{~it.rows :v :i}}' + '<tr class="b-infolist__row {{?v.type === "header"}}b-infolist__row_type_header{{?}}">' + '{{?v.type === "header"}}' + '<td class="b-infolist__col b-infolist__col_type_header" colspan="2">{{=v.label}}</td>' + '{{??v.type === "data"}}' + '<td class="b-infolist__col b-infolist__col_type_label">{{=v.label}}</td>' + '<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>' + '{{??v.type === "link"}}' + '<td class="b-infolist__col b-infolist__col_type_label">{{=v.label}}</td>' + '{{?v.link}}' + '<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>' + '{{??v.url}}' + '<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>' + '{{?}}' + '{{??v.type === "indicator"}}' + '<td class="b-infolist__col b-infolist__col_type_label">{{=v.label}}</td>' + '<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>' + '{{?}}' + '</tr>' + '{{~}}' + '</tbody>' + '</table>' + '</div>';

  var licenseDashBlock = '<div class="b-license-block">\n    <div class="b-license-block__line">{{=it.msg_limit}}:\n    {{?it.limit_webdomain === \'infinit\'}} {{=it.msg_infinit}} {{??}}\n    {{=it.msg_before}} {{=it.limit_webdomain}} {{=it.msg_domains}} <span class="{{?it.left_webdomain_warn}}b-license-block__warning{{?}}">({{=it.msg_left}} {{=it.left_webdomain}})</span>\n    {{?}}\n    </div>\n    <div class="b-license-block__line">{{=it.msg_version}}: {{=it.version}} \n      {{?it.has_update}}<a class="b-menu-item b-license-block__update" data-url="?func={{=it.update_func}}">{{=it.msg_update_panel}}</a>{{?}}\n    </div>\n    {{?it.limit_webdomain !== \'infinit\'}} \n    <div class="b-button b-menu-item" data-url="?func={{=it.change_limit_func}}">{{=it.msg_change_limit}}</div>\n    {{?}}\n    <div class="b-button b-button_type_cancel b-menu-item" data-url="?func={{=it.details_func}}">{{=it.msg_details}}</div>\n  </div>';

  var updateToIsp6 = '\n    <div class="b-update-block">\n      <p class="b-update-block__text">{{=it.msg_created}} {{=it.used_webdomain}}{{=it.msg_webdomains}} {{=it.msg_recommended}} <strong>{{=it.recommended_pricelist}}</strong>{{?it.recommended_unlimit === \'on\'}}{{=it.msg_unlimit_allows_use}}{{??}}{{=it.msg_limit_allows_use}} {{=it.recommended_count}} {{?}} {{=it.msg_sites}}</p>\n      <div class="b-button b-menu-item" data-url="?func={{=it.pricelist_func}}">{{=it.msg_change_pricelist}}</div>\n      <div class="b-button b-button_type_cancel b-menu-item" data-url="?func={{=it.changes_func}}">{{=it.msg_changelog}}</div>\n    </div>\n  ';

  var fatalAlert = '<div class="b-alert__inner {{?it.refreshLink}} b-alert__inner_t_refresh-link{{?}}">' + '<div class="b-alert__icon">' + '<div class="b-alert__sign">' + '<div class="b-alert__sign-top"></div>' + '<div class="b-alert__sign-body"></div>' + '<div class="b-alert__sign-empty"></div>' + '<div class="b-alert__sign-dot"></div>' + '</div>' + '</div>' + '<div class="b-alert__msg-outter"><div class="b-alert__msg">{{=it.msg}}</div></div>' + '{{?it.ref}}' + '<div class="more b-fatal-error__more-link">' + '<a href="{{=it.ref}}" target="_blank">{{=it.moreMsg}}</a>' + '</div>' + '{{?}}' + '{{?it.refreshLink}}' + '<div class="m-item b-fatal-error__refresh-link">' + '<a href="#" data-url="{{=it.refreshLink}}" >{{=it.refreshLinkMsg}}</a>' + '</div>' + '{{?}}' + '</div>' + '<div class="b-alert__clear"></div>';

  var msgTemplList = '<div class="b-msg-templ" data-target="{{=it.id}}">' + '<div class="b-msg-templ__table">' + '<div class="b-msg-templ__table-col b-msg-templ__table-col_content_yes">' + '<ul class="b-msg-templ__title-content">' + '{{~it.templList  :v :i}}' + '<li class="b-msg-templ__title-content-item b-msg-templ__title-content-item_ind_{{=i}}">{{=v.msg}}</li>' + '{{~}}' + '</ul>' + '</div>' + '<div class="b-msg-templ__table-col b-msg-templ__table-col_title_yes">' + '<ul class="b-msg-templ__title-list">' + '{{~it.templList  :v :i}}' + '{{?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>' + '{{~}}' + '</ul>' + '</div>' + '</div>' + '</div>';

  var t = doT.template,
      vSettings = {};
  $.extend(vSettings, doT.templateSettings, { varname: 'val' });

  return {
    tabCont: t(tabCont),
    tabContEmpty: t(tabContEmpty),
    tabContForm: t(tabContForm),
    tabContMap: t(tabContMap),
    listPager: t(listPager),
    tabContDashBoard: t(tabContDashBoard),
    tabLi: t(tabLi),
    tabChld: t(tabChld),
    formPageTitle: t(formPageTitle),
    formItemInput: t(formItemInput, vSettings),
    formItemCaptcha: t(formItemCaptcha),
    formItemFile: t(formItemFile),
    formItemPassword: t(formItemPassword),
    formItemInputWithZoom: t(formItemInputWithZoom),
    formItemInputWithZoom1: t(formItemInputWithZoom1),
    formItemTextarea: t(formItemTextarea),
    formItemCheckbox: t(formItemCheckbox, vSettings),
    formItemLabel: t(formItemLabel),
    formItemExtrBtn: t(formItemExtrBtn),
    formItemDesk: t(formItemDesk),
    formItemDeskRadio: t(formItemDeskRadio),
    formItemSelect: t(formItemSelect, vSettings),
    formItemSelectList: t(formItemSelectList, vSettings),
    formItemMSelect: t(formItemMSelect),
    formItemHtmldata: t(formItemHtmldata),
    formItemTicket: t(formItemTicket),
    formItemLink: t(formItemLink),
    formItemSelectAutocomplete: t(formItemSelectAutocomplete),
    formItemTicketMsg: t(formItemTicketMsg),
    formPageWrapper: t(formPageWrapper),
    formItemRow: t(formItemRow),
    formItemFullWidthRow: t(formItemFullWidthRow),
    formItemFormWidthRow: t(formItemFormWidthRow),
    formItemRowWithoutLabel: t(formItemRowWithoutLabel),
    formItemRowTextdata: t(formItemRowTextdata),
    formItemRowHidden: t(formItemRowHidden),
    formItemFrame: t(formItemFrame),
    formListContent: t(formListContent),
    formListBlocksContent: t(formListBlocksContent),
    filterWrapper: t(filterWrapper),
    filterSavedItem: t(filterSavedItem),
    filterRow: t(filterRow),
    filterItemLabel: t(filterItemLabel),
    filterItem: t(filterItem),
    formItemRowDesc: t(formItemRowDesc),
    formListItemRow: t(formListItemRow),
    formPlainHintRow: t(formPlainHint),
    formItemSlider: t(formItemSlider),
    formItemMgrview: t(formItemMgrview),
    formItemRadio: t(formItemRadio),
    formItemRadioImg: t(formItemRadioImg),
    formItemTextData: t(formItemTextData),
    dashTaskbar: t(dashTaskbar),
    progressBar: t(progressBar),
    reportBand: t(reportBand),
    reportBandDash: t(reportBandDash),
    banner: t(banner),
    buttons: t(buttons),
    fatalError: t(fatalError),
    passwdCheck: t(passwdCheck),
    editinListForm: t(editinListForm),
    confirmCheck: t(confirmCheck),
    formItemSliderEditInList: t(formItemSliderEditInList),
    tip: t(tip),
    infoList: t(infoList),
    fatalAlert: t(fatalAlert),
    msgTemplList: t(msgTemplList),
    emptyBandOverlay: t(emptyBandOverlay),
    usefulLinks: t(usefulLinks),
    formListFilter: t(formListFilter),
    formListFilterWrapper: t(formListFilterWrapper),
    formItemDateTime: t(formItemDateTime),
    licenseDashBlock: t(licenseDashBlock),
    updateToIsp6: t(updateToIsp6)
  };
}();
//# sourceMappingURL=templates.js.map

'use strict';

// Event manager
//@todo unit test
var EventMgr = {

  o: function o() {
    'use strict';

    return $('body');
  },

  hooks: {},

  isTouch: function isTouch() {
    return navigator.userAgent.match(/Android/i) || navigator.userAgent.match(/webOS/i) || navigator.userAgent.match(/iPhone/i) || navigator.userAgent.match(/iPad/i) || navigator.userAgent.match(/iPod/i) || navigator.userAgent.match(/BlackBerry/i) || navigator.userAgent.match(/Windows Phone/i);
  },

  touchEvents: {},

  touchData: {},
  /**
   * bind custom event
   * @this {EventMgr} EventMgr object
   */
  bind: function bind(event, callback) {
    'use strict';

    var events = event.split(','),
        l = event.length;
    while (l--) {
      this.o().on(events[l], callback);
    }
  },
  /**
   * bind custom event for one time
   * @this {EventMgr} EventMgr object
   */
  one: function one(event, callback, data) {
    'use strict';

    var events = event.split(','),
        l = event.length;
    while (l--) {
      this.o().one(events[l], data, callback);
    }
  },
  /**
   * wrapper for jQuery.one
   */
  oone: function oone(object, event, callback) {
    'use strict';

    if (typeof object === 'string') {
      $(object).one(event, callback);
    } else {
      object.one(event, callback);
    }
  },
  /**
   * wrapper for jQuery.obind
   */
  obind: function obind(object, event, callback) {
    'use strict';

    var touch;
    if (event === 'click' && this.isTouch() && typeof object === 'string') {
      event = 'touchstart';
      touch = true;
    }
    if (!touch) {
      if (typeof object === 'string') {
        $(object).on(event, callback);
      } else {
        object.on(event, callback);
      }
    } else {
      var data = {
        eventMgr: this,
        cb: callback
      };
      if (typeof object === 'string') {
        data.innerSelect = object;
        $(object).on(event, data, this.touchStart);
        // $(object).on('touchmove', data, this.touchMove);
        $(object).on('touchend', data, this.touchEnd);
      }
    }
  },

  /**
   * wrapper for jQuery.on
   * */
  on: function on(outObject, innerSelect, event, callback) {
    'use strict';

    var touch = false;
    if (event === 'click' && this.isTouch()) {
      event = 'touchstart';
      touch = true;
    }
    if (!touch) {
      if (typeof outObject === 'string') {
        $(outObject).on(event, innerSelect, callback);
      } else {
        outObject.on(event, innerSelect, callback);
      }
    } else {
      var data = {
        innerSelect: innerSelect,
        eventMgr: this,
        cb: callback
      };
      if (typeof outObject === 'string') {
        $(outObject).on(event, innerSelect, data, this.touchStart);
        //$(outObject).on('touchmove', innerSelect, data, this.touchMove);
        $(outObject).on('touchend', innerSelect, data, this.touchEnd);
      } else {
        outObject.on(event, innerSelect, data, this.touchStart);
        //outObject.on('touchmove', innerSelect, data, this.touchMove);
        outObject.on('touchend', innerSelect, data, this.touchEnd);
      }
    }
  },
  /**
   * allow hooks for original events
   * @this {EventMgr} EventMgr object
   */
  onwithdata: function onwithdata(outObject, innerSelect, event, customEvent, callback) {
    'use strict';

    var data = {
      targetEvent: customEvent,
      targetCallback: callback,
      eventMgr: this,
      innerSelect: innerSelect,
      withData: true
    },
        touch = false;

    if (event === 'click' && this.isTouch()) {
      event = 'touchstart';
      touch = true;
    }
    if (!touch) {
      if (typeof outObject === 'string') {
        $(outObject).on(event, innerSelect, data, this.onwithdataHandler);
      } else {
        outObject.on(event, innerSelect, data, this.onwithdataHandler);
      }
    } else {
      if (typeof outObject === 'string') {
        $(outObject).on(event, innerSelect, data, this.touchStart);
        //$(outObject).on('touchmove', innerSelect, data, this.touchMove);
        $(outObject).on('touchend', innerSelect, data, this.touchEnd);
      } else {
        outObject.on(event, innerSelect, data, this.touchStart);
        //outObject.on('touchmove', innerSelect, data, this.touchMove);
        outObject.on('touchend', innerSelect, data, this.touchEnd);
      }
    }
  },

  touchStart: function touchStart(e) {
    e.preventDefault();
    var selector = e.data.innerSelect,
        em = e.data.eventMgr;
    em.touchEvents[selector] = true;
  },

  touchMove: function touchMove(e) {
    var selector = e.data.innerSelect,
        em = e.data.eventMgr;
    em.touchEvents[selector] = false;
  },

  touchEnd: function touchEnd(e) {
    var selector = e.data.innerSelect,
        em = e.data.eventMgr;
    if (em.touchEvents[selector]) {
      if (e.data.withData) {
        em.onwithdataHandler.apply(this, [e]);
        em.touchEvents[selector] = false;
      } else {
        e.data.cb.apply(this, [e]);
        em.touchEvents[selector] = false;
      }
    }
  },

  /**
   * handler for onwithdata
   * @this {HTMLNode} HTMLNode
   */
  onwithdataHandler: function onwithdataHandler(e) {
    'use strict';

    var eventData = e.data,
        targetEvent = eventData.targetEvent,
        targetCallback = eventData.targetCallback,
        data = {},
        self = eventData.eventMgr;
    if (this) {
      data.tabId = this.getAttribute('data-tabid');
      data.elemId = this.getAttribute('data-elemid');
    }
    if (targetEvent) {
      if (self.hooks[targetEvent] && self.hooks[targetEvent].length > 0) {
        var l = self.hooks[targetEvent].length;
        while (l--) {
          if (typeof self.hooks[targetEvent][l] === 'function') {
            self.hooks[targetEvent][l].apply(window, [data]);
          }
        }
      }
    }
    if (typeof targetCallback === 'function') {
      targetCallback.apply(this, [e, data]);
    }
  },
  /**
   * wrapper for jQuery.off
   */
  off: function off(outObject, event) {
    'use strict';

    if (typeof outObject === 'string') {
      $(outObject).off(event);
    } else {
      outObject.off(event);
    }
  },
  /**
   * unbind event
   * @this {EventMgr} EventMgr object
   */
  unbind: function unbind(event, callback) {
    'use strict';

    var events = event.split(','),
        l = event.length;
    while (l--) {
      this.o().off(events[l], callback);
    }
  },
  /**
   * wrapper for jQuery.trigger
   * @this {EventMgr} EventMgr object
   */
  trigger: function trigger(event, data, delay) {
    'use strict';

    if (delay) {
      setTimeout(function (self) {
        return function () {
          if (typeof event !== 'string') {
            console.log('event !== string in trigger', event, data);
            event = String(event);
          }
          self.o().trigger(event, data);
        };
      }(this), delay);
    } else {
      if (this.hooks[event] && this.hooks[event].length > 0) {
        var l = this.hooks[event].length;
        while (l--) {
          if (typeof this.hooks[event][l] === 'function') {
            this.hooks[event][l].apply(window, [data]);
          }
        }
      }
      if (typeof event !== 'string') {
        console.log('event !== string in trigger', event, data);
        event = String(event);
      }
      this.o().trigger(event, data);
    }
    if (this.triggerStack[event]) {
      this.triggerStackHandler(event, data);
    }
  },
  triggerStack: {},
  /**
   * add to trigger stack
   * @param {String} event event name
   * @param {function} func function for call
   * @param {number} priority stack call order
   * @this {EventMgr} EventMgr object
   */
  addToTriggerStack: function addToTriggerStack(event, func, priority) {
    if (!this.triggerStack[event]) {
      this.triggerStack[event] = [];
    }
    this.triggerStack[event].push({
      func: func,
      priority: priority
    });
    this.triggerStack[event].sort(this.prioritySort);
  },

  triggerStackHandler: function triggerStackHandler(event, data) {
    if (this.triggerStack[event]) {
      var l = this.triggerStack[event].length;
      for (var i = 0; i < l; i++) {
        if (typeof this.triggerStack[event][i].func === 'function') {
          //break if return true
          if (this.triggerStack[event][i].func.apply(window, [{}, data])) {
            break;
          }
        }
      }
    }
  },
  prioritySort: function prioritySort(a, b) {
    return a.priority - b.priority;
  },
  /**
   * add hook for custom event
   * @this {EventMgr} EventMgr object
   */
  addHook: function addHook(event, callback) {
    'use strict';

    var events = event.split(','),
        l = event.length;
    while (l--) {
      if (this.hooks[events[l]]) {
        this.hooks[events[l]].push(callback);
      } else {
        this.hooks[events[l]] = [];
        this.hooks[events[l]].push(callback);
      }
    }
  },
  /**
   * remove hook
   * @this {EventMgr} EventMgr object
   */
  deleteHook: function deleteHook(event, callback) {
    'use strict';

    if (this.hooks[event]) {
      var len = this.hooks[event].length - 1,
          ar = this.hooks[event];

      for (var i = len; i <= 0; i--) {
        if (ar(i) === callback) {
          ar.slice(i, i);
        }
      }
    }
  }
};
//# sourceMappingURL=eventmgr.js.map

'use strict';

/**
 * ScrollHandler
 * @class
 */
var ScrollHandler = function () {
  'use strict';

  var shiftY = 0,
      shiftX = 0,
      SCROLLBAR_INIT_CLASS = 'scrollbar-init',
      VERTICAL_SCROLL_CLASS = 'vertical-scroll',
      bigObj = {},

  /**
   * Current Scroll object
   */
  curObj = {
    /**
     * Object id
     */
    objId: null,
    /**
     * Wrapper id
     */
    contId: null,
    /**
     * Wrapper id
     */
    obj: null,
    /**
     * HTML Object of Object
     */
    cont: null,
    /**
     * HTML Object of ScrollHandler
     */
    sh: null,
    /**
     * Visible height (wrapper's height)
     */
    vh: null,
    /**
     * Scroll handler height
     */
    sch: null
  },
      moveObj = {},
      //temp object moved elems
  down = false,
      //go down
  /* jslint evil:true */
  isIe = !!window.execScript,

  /* jslint evil:false */
  up = false,
      // go up
  left = false,
      //go left
  right = false,
      //go right
  intId = null,

  /**
   * Block not needed events when scrolling
   */
  blockEvent = function blockEvent(e) {
    e = e || window.event;
    if (e.stopPropagation) {
      e.stopPropagation();
    } else {
      e.cancelBubble = true;
    }
    if (e.preventDefault) {
      e.preventDefault();
    } else {
      e.returnValue = false;
    }
  },

  /**
   * Handler for mouseup
   * unbind mouseup/touchend handlers
   */
  mouseUp = function mouseUp() {
    down = false;
    up = false;
    left = false;
    right = false;
    document.onmouseup = null;
    document.ontouchend = null;
  },

  /**
   * Set Position for object and scrollhandler
   */
  lastValues = {},
      setPosition = function setPosition(newPosition) {
    var sTop,
        scrollTop,
        middle = false,
        top = false,
        bottom = false;
    if (newPosition <= moveObj.vh - moveObj.sch && newPosition >= 0) {
      sTop = newPosition;
      middle = true;
    } else if (newPosition > moveObj.vh - moveObj.sch) {
      sTop = moveObj.vh - moveObj.sch;
      bottom = true;
    } else {
      sTop = 0;
      top = true;
    }

    moveObj.sh.style.top = sTop + 'px';
    scrollTop = Math.round(sTop * moveObj.delta);
    if (isIe) {
      moveObj.cont.scrollTop = 0;
      moveObj.obj.style.marginTop = scrollTop * -1 + 'px';
    } else {
      moveObj.cont.scrollTop = scrollTop;
      moveObj.sw.style.top = scrollTop + 'px';
    }
    if (lastValues[moveObj.contId] !== sTop) {
      var body = document.querySelector('body') || document.body,
          event;
      try {
        event = new CustomEvent('verticalScroll', { 'detail': {
            top: top,
            middle: middle,
            bottom: bottom,
            id: moveObj.contId } });
        body.dispatchEvent(event);
      } catch (e) {}
    }
    lastValues[moveObj.contId] = sTop;
    return false;
  },

  /**
   * Set Position for horizontal object and scrollhandler
   */
  setPositionHor = function setPositionHor(newPosition) {
    var sLeft, scrollLeft;
    if (newPosition <= moveObj.vw - moveObj.schH && newPosition >= 0) {
      sLeft = newPosition;
    } else if (newPosition > moveObj.vw - moveObj.schH) {
      sLeft = moveObj.vw - moveObj.schH;
    } else {
      sLeft = 0;
    }
    moveObj.hSh.style.left = sLeft + 'px';
    scrollLeft = Math.round(sLeft * moveObj.deltaH);

    if (isIe) {
      moveObj.cont.scrollLeft = 0;
      moveObj.obj.style.marginLeft = scrollLeft * -1 + 'px';
    } else {
      moveObj.cont.scrollLeft = scrollLeft;
      moveObj.hSw.style.left = scrollLeft + 'px';
    }
    return false;
  },

  /**
   * Mouse wheel handler
   */
  wheel = function wheel(e) {
    e = e || window.event;
    var wheelDelta = 0,
        id = this.getAttribute('id'),
        currentPosition,
        newPosition,
        direction,
        delta,
        STEP = 64;
    moveObj = bigObj[id];
    //check for exist scroll
    if (!moveObj) {
      return;
    }
    delta = moveObj.delta;
    //detect direction
    if (e.wheelDelta) {
      direction = e.wheelDelta > 0 ? -1 : 1;
    } else if (e.detail) {
      direction = e.detail < 0 ? -1 : 1;
    }
    //check for native scroll
    if (e.target) {
      var target = e.target;
      //check for scroll
      //target.clientHeight > 0 ==> for opera
      if (target.clientHeight < target.scrollHeight && target.clientHeight > 0 && target.nodeName === 'TEXTAREA') {
        //scroll down
        if (
        //(target.clientHeight + 1) ==> for safari
        direction === 1 && target.scrollTop < target.scrollHeight - (target.clientHeight + 1) || direction === -1 && target.scrollTop !== 0) {
          return true;
        }
      }
    }

    if (e.wheelDelta) {
      wheelDelta = -e.wheelDelta / 2.5;
    } else if (e.detail) {
      //for FF
      wheelDelta = e.detail * 16;
    }

    if (wheelDelta) {
      currentPosition = parseFloat(moveObj.sh.style.top);
      newPosition = wheelDelta / delta + currentPosition;
      setPosition(newPosition);
    }
    blockEvent(e);
  },

  /**
   * Scroll mover by UP/DOWN scroll btn
   */
  scrollMove = function scrollMove(stopPos) {
    var currentPosition,
        mDelta,
        newPosition,
        magicNumber = 5;
    if (!moveObj) {
      clearInterval(intId);
    }
    currentPosition = parseFloat(moveObj.sh.style.top);
    mDelta = magicNumber / moveObj.delta;
    if (up) {
      newPosition = currentPosition - mDelta;
      setPosition(newPosition);
      if (stopPos && newPosition < stopPos) {
        clearInterval(intId);
      }
    } else if (down) {
      newPosition = mDelta + currentPosition;
      setPosition(newPosition);
      if (stopPos && newPosition > stopPos) {
        clearInterval(intId);
      }
    } else {
      clearInterval(intId);
    }
  },

  /**
   * Scroll mover horizontal by UP/DOWN scroll btn
   */
  scrollMoveHoriz = function scrollMoveHoriz(stopPos) {
    var currentPosition,
        mDelta,
        newPosition,
        magicNumber = 5;
    if (!moveObj) {
      clearInterval(intId);
    }
    currentPosition = parseFloat(moveObj.hSh.style.left);
    mDelta = magicNumber / moveObj.deltaH;
    if (left) {
      newPosition = currentPosition - mDelta;
      setPositionHor(newPosition);
      if (stopPos && newPosition < stopPos) {
        clearInterval(intId);
      }
    } else if (right) {
      newPosition = mDelta + currentPosition;
      setPositionHor(newPosition);
      if (stopPos && newPosition > stopPos) {
        clearInterval(intId);
      }
    } else {
      clearInterval(intId);
    }
  },

  /**
   * Handler for button move up
   */
  moveUp = function moveUp(id, stopPos) {
    var doc = document,
        timeOut = stopPos !== undefined ? 1 : 10;
    moveObj = bigObj[id];
    up = true;
    //some issues about
    if (!('ontouchstart' in doc.documentElement)) {
      doc.onmouseup = mouseUp;
    }
    //for touchpads
    doc.ontouchend = mouseUp;
    doc.ontouchcancel = mouseUp;
    scrollMove(stopPos);
    intId = setInterval(function () {
      scrollMove(stopPos);
    }, timeOut);
  },
      moveUpHandler = function moveUpHandler(e) {
    e = e || window.event;
    var id = this.getAttribute('id').replace('-top-button', '');
    moveUp(id);
    blockEvent(e);
    return false;
  },
      moveLeftHandler = function moveLeftHandler(e) {
    e = e || window.event;
    var id = this.getAttribute('id').replace('-left-button', '');
    moveLeft(id);
    blockEvent(e);
    return false;
  },
      moveLeft = function moveLeft(id, stopPos) {
    var doc = document,
        timeOut = stopPos !== undefined ? 1 : 10;
    moveObj = bigObj[id];
    left = true;
    //some issues about
    if (!('ontouchstart' in doc.documentElement)) {
      doc.onmouseup = mouseUp;
    }
    //for touchpads
    doc.ontouchend = mouseUp;
    doc.ontouchcancel = mouseUp;
    scrollMoveHoriz(stopPos);
    intId = setInterval(function () {
      scrollMoveHoriz(stopPos);
    }, timeOut);
  },

  /**
   * Handler for button move down
   */
  moveDown = function moveDown(id, stopPos) {
    var doc = document,
        timeOut = stopPos !== undefined ? 1 : 10;
    moveObj = bigObj[id];
    down = true;
    if (!('ontouchstart' in doc.documentElement)) {
      doc.onmouseup = mouseUp;
    }
    //for touchpads
    doc.ontouchend = mouseUp;
    doc.ontouchcancel = mouseUp;
    scrollMove(stopPos);
    intId = setInterval(function () {
      scrollMove(stopPos);
    }, timeOut);
  },
      moveDownHandler = function moveDownHandler(e) {
    e = e || window.event;
    var id = this.getAttribute('id').replace('-bottom-button', '');
    moveDown(id);
    blockEvent(e);
    return false;
  },
      moveRightHandler = function moveRightHandler(e) {
    e = e || window.event;
    var id = this.getAttribute('id').replace('-right-button', '');
    moveRight(id);
    blockEvent(e);
    return false;
  },
      moveRight = function moveRight(id, stopPos) {
    var doc = document,
        timeOut = stopPos !== undefined ? 1 : 10;
    moveObj = bigObj[id];
    right = true;
    if (!('ontouchstart' in doc.documentElement)) {
      doc.onmouseup = mouseUp;
    }
    //for touchpads
    doc.ontouchend = mouseUp;
    doc.ontouchcancel = mouseUp;
    scrollMoveHoriz(stopPos);
    intId = setInterval(function () {
      scrollMoveHoriz(stopPos);
    }, timeOut);
  },

  /**
   * Cancel scroll, hide scroll handler
   * @param {curObj} obj Current object
   */
  cancelScroll = function cancelScroll(obj) {
    if (!obj) {
      return;
    }
    //need to fix
    obj.sh.style.display = 'none';
    obj.vstatus = true;
    obj.cont.style.overflowY = '';
    //hide horiz scroll
    if (obj.hs) {
      obj.vstatus = false;
      obj.sw.style.display = 'none';
      obj.cont.style.paddingRight = '0px';
      // $(obj.cont).removeClass('vertical-scroll');
    }
    $(obj.cont).removeClass(VERTICAL_SCROLL_CLASS);
    $(obj.cont.parentNode).removeClass('vertical-scroll-child');
    //this._curObj.sh = null;
    obj.cont.onmousewheel = null;
    obj.bb.onmousedown = null;
    obj.tb.onmousedown = null;
    obj.cont.onkeydown = null;
    if (isIe) {
      obj.obj.style.marginTop = 0;
    }
    obj.cont.scrollTop = 0;
    obj.sh.style.top = 0 + 'px';
    obj.sw.style.top = 0 + 'px';
    if (obj.contWheelEvent) {
      obj.cont.removeEventListener('DOMMouseScroll', wheel, false);
      obj.contWheelEvent = false;
    }
  },

  /**
   * Cancel horiz scroll, hide scroll handler
   * @param {curObj} obj Current object
   */
  cancelScrollHoriz = function cancelScrollHoriz(obj) {
    if (!obj) {
      return;
    }
    //need to fix
    obj.hSh.style.display = 'none';
    obj.cont.style.overflowX = '';
    obj.hstatus = true;
    if (!obj.hss) {
      obj.hstatus = false;
      obj.hSw.style.display = 'none';
      $(obj.cont).removeClass('horizontal-scroll');
      obj.cont.paddingBottom = '0px';
    }
    //this._curObj.sh = null;
    obj.hBb.onmousedown = null;
    obj.hTb.onmousedown = null;
    if (isIe) {
      obj.obj.style.marginLeft = 0;
    }
    obj.cont.scrollLeft = 0 + 'px';
    obj.hSh.style.top = 0 + 'px';
  },

  /**
   * Update scroll method
   */
  updateFunc = function updateFunc(key) {
    if (bigObj[key] === undefined) {
      return;
    }
    var scrollCorrect = 36,
        swStyle,
        tmpHeight,
        scrollTop,
        curObjUp;
    curObjUp = bigObj[key];
    curObjUp.cont.className += ' ' + SCROLLBAR_INIT_CLASS;
    if (curObjUp.hstatus) {
      scrollCorrect += 18;
    }
    //trackHeight
    var visibleHeight = curObjUp.cont.clientHeight,
        scrollTrackHeight = visibleHeight - scrollCorrect,
        deltaTop = curObjUp.obj.offsetTop > 0 ? curObjUp.obj.offsetTop : 0,
        allHeight = curObjUp.obj.offsetHeight + deltaTop,
        deltaAV = allHeight / visibleHeight,
        scrollHandlerHeight = scrollTrackHeight / deltaAV,
        delta = allHeight / scrollTrackHeight;
    //if hide element exit
    if (visibleHeight === 0) {
      return;
    }
    curObjUp.vh = scrollTrackHeight;
    //all height, object height

    //var sch = (visibleHeight) / (allHeight /
    // (visibleHeight + scrollCorrect));
    if (scrollHandlerHeight < 25) {
      scrollHandlerHeight = 25;
      delta = (allHeight - (scrollTrackHeight + scrollCorrect)) / (scrollTrackHeight - 25);
    }
    //size of step
    curObjUp.delta = delta;
    curObjUp.sch = scrollHandlerHeight;
    //check for nothing scroll
    tmpHeight = scrollTrackHeight + scrollCorrect;
    if (scrollTrackHeight < scrollCorrect || scrollHandlerHeight > scrollTrackHeight || tmpHeight === allHeight) {
      cancelScroll(curObjUp);
      //scrollHandlerHeight = scrollTrackHeight;
    } else {
      //set scroll handler size
      swStyle = curObjUp.sw.style;
      //keep state
      curObjUp.cont.scrollTop = parseFloat(swStyle.top);
      //swStyle.top = curObjUp.cont.scrollTop;
      curObjUp.sh.style.height = scrollHandlerHeight + 'px';
      curObjUp.sh.style.display = 'block';
      swStyle.display = 'block';
      curObjUp.cont.style.paddingRight = '18px';
      curObjUp.cont.style.overflowY = 'hidden';
      if (curObjUp.cont.className.indexOf(VERTICAL_SCROLL_CLASS) === -1) {
        curObjUp.cont.className += ' ' + VERTICAL_SCROLL_CLASS;
        curObjUp.cont.parentNode.className += ' vertical-scroll-child';
      }
      if (!curObjUp.contWheelEvent) {
        curObjUp.cont.addEventListener('DOMMouseScroll', wheel, false);
        curObjUp.contWheelEvent = true;
      }

      curObjUp.cont.onmousewheel = wheel;

      curObjUp.bb.onmousedown = moveDownHandler;
      curObjUp.tb.onmousedown = moveUpHandler;

      //check real behavior
      if (parseInt(curObjUp.sh.style.top, 10) + curObjUp.sch > curObjUp.vh) {
        curObjUp.sh.style.top = curObjUp.vh - curObjUp.sch + 'px';
        scrollTop = (curObjUp.vh - curObjUp.sch) * curObjUp.delta;
        swStyle.top = scrollTop + 'px';
        curObjUp.cont.scrollTop = scrollTop;
      }
    }
    bigObj[key] = curObjUp;
    curObjUp.cont.className = curObjUp.cont.className.replace(SCROLLBAR_INIT_CLASS, ' ');
    curObjUp = null;
  },

  /**
   * Update horiz scroll method
   */
  updateFuncHoriz = function updateFuncHoriz(key) {
    if (bigObj[key] === undefined) {
      return;
    }
    var scrollCorrect = 36,
        curObjUp = bigObj[key],
        vw,
        aw,
        delta,
        sch;
    if (curObjUp.vstatus) {
      scrollCorrect += 18;
    }

    vw = curObjUp.cont.offsetWidth - scrollCorrect;
    curObjUp.vw = vw;
    //ll height, object height
    aw = curObjUp.obj.offsetWidth;
    delta = aw / vw;
    //scroll height
    sch = vw / (aw / (vw + scrollCorrect));

    if (sch < 25) {
      //var dp = 25 - sch;
      sch = 25;
      delta = (aw - (vw + scrollCorrect)) / (vw - 25);
    }
    //size of step
    curObjUp.deltaH = delta;
    curObjUp.schH = sch;
    //check for nothing scroll
    if (vw < scrollCorrect || sch > vw || vw + scrollCorrect === aw) {
      cancelScrollHoriz(curObjUp);
      //sch = vw;
    } else {
      //set scroll handler size
      curObjUp.hSh.style.width = sch + 'px';
      curObjUp.hSw.style.display = 'block';
      curObjUp.hSh.style.display = 'block';
      curObjUp.cont.style.overflowX = 'hidden';
      curObjUp.cont.style.paddingBottom = '18px';

      curObjUp.hBb.onmousedown = moveRightHandler;
      curObjUp.hTb.onmousedown = moveLeftHandler;

      //check real behavior
      if (parseInt(curObjUp.hSh.style.top, 10) + curObjUp.schH > curObjUp.vw) {
        curObjUp.hSh.style.left = curObjUp.vw - curObjUp.schH + 'px';
        curObjUp.obj.scrollLeft = (curObjUp.vw - curObjUp.schH) * curObjUp.deltaH;
      }
    }
    bigObj[key] = curObjUp;
    curObjUp = null;
  },

  /**
   * void method, update sizes
   */
  update = function update(id) {
    if (id) {
      updateFunc(id);
      updateFuncHoriz(id);
    } else {
      var key;
      /* jslint forin:true */
      for (key in bigObj) {
        updateFunc(key);
        updateFuncHoriz(key);
      }
    }
  },

  /**
   * get sizes of objects and calculate delta
   */
  getSize = function getSize() {
    //visible height
    var scrollCorrect = 36,
        visibleHeight = curObj.cont.clientHeight,
        scrollTrackHeight = visibleHeight - scrollCorrect,
        deltaTop = curObj.obj.offsetTop > 0 ? curObj.obj.offsetTop : 0,
        allHeight = curObj.obj.offsetHeight + deltaTop,
        deltaAV = allHeight / visibleHeight,
        scrollHandlerHeight = scrollTrackHeight / deltaAV,
        delta = allHeight / scrollTrackHeight;

    //-18px for top/bottom buttons
    curObj.vh = scrollTrackHeight;
    curObj.delta = delta;
    //scroll height
    curObj.sch = scrollHandlerHeight;

    //check for nothing scroll
    if (scrollTrackHeight < 36 || scrollHandlerHeight > scrollTrackHeight || scrollTrackHeight + 36 === allHeight) {
      cancelScroll(curObj);
    } else {
      curObj.vstatus = true;
      curObj.cont.className += ' ' + VERTICAL_SCROLL_CLASS;
      curObj.cont.parentNode.className += ' vertical-scroll-child';
      if (scrollHandlerHeight < 25) {
        scrollHandlerHeight = 25;
      }
      //set scroll handler size
      curObj.sh.style.height = scrollHandlerHeight + 'px';
      curObj.sh.style.left = 0;
      curObj.cont.scrollTop = 0;
      curObj.cont.style.paddingRight = '18px';
      curObj.cont.style.overflowY = 'hidden';
    }
    curObj.cont.className = curObj.cont.className.replace(SCROLLBAR_INIT_CLASS, ' ');
  },
      getSizeHor = function getSizeHor() {
    //visible height
    var visibleWidth = curObj.cont.offsetWidth - 36,

    //all height, object height
    aw = curObj.obj.offsetWidth,

    //size of step
    delta = aw / visibleWidth,
        sch;

    //-20px for top/bottom buttons
    curObj.vw = visibleWidth;
    curObj.deltaH = delta;
    //scroll height
    sch = visibleWidth / (aw / (visibleWidth + 36));
    curObj.schH = sch;

    //check for nothing scroll
    if (visibleWidth < 36 || sch > visibleWidth || visibleWidth + 36 === aw) {
      cancelScrollHoriz(curObj);
      sch = visibleWidth;
    } else {
      curObj.hstatus = true;
      curObj.cont.className += ' horizontal-scroll';
      if (sch < 25) {
        sch = 25;
      }
      //set scroll handler size
      curObj.hSh.style.width = sch + 'px';
      curObj.hSh.style.left = 0;
      curObj.hSw.style.display = 'block';
      curObj.cont.scrollLeft = 0;
      curObj.cont.style.paddingBottom = '18px';
      curObj.cont.style.overflowX = 'hidden';
    }
    curObj.cont.className = curObj.cont.className.replace(SCROLLBAR_INIT_CLASS, ' ');
  },
      forceMoveSelectItem = function forceMoveSelectItem(id, offsetTop, boxHeight, elemHeight) {
    moveObj = bigObj[id];
    if (!moveObj) {
      return;
    }
    var boxHeight = boxHeight || 223,
        elemHeight = elemHeight || 16,
        newPosition = null,
        mTRaw = moveObj.cont.scrollTop,
        mT = 0,
        df;
    if (mTRaw !== '') {
      mT = parseFloat(mTRaw);
    }
    df = offsetTop - mT;
    if (boxHeight < df) {
      //movedown
      if (boxHeight < df - 17) {
        newPosition = offsetTop / moveObj.delta;
      } else {
        newPosition = (mT + elemHeight) / moveObj.delta;
      }
    } else if (df < 0) {
      //moveup
      newPosition = (mT - elemHeight) / moveObj.delta;
    }
    if (newPosition !== null) {
      setPosition(newPosition);
    }
  },
      TABKEY = 9,

  /**
   * force mov
   */
  forceMove = function forceMove(id) {
    if (!id) {
      return;
    }
    moveObj = bigObj[id];
    var scrollTop = moveObj.cont.scrollTop,
        newPosition = scrollTop / moveObj.delta;
    setPosition(newPosition);
  },
      checkTabKeyUp = function checkTabKeyUp(e) {
    e = e || window.event;
    var codeKey, contId;
    codeKey = e.which || e.keyCode;
    if (codeKey === TABKEY) {
      contId = $(e.target || e.srcElement).parents('div.' + VERTICAL_SCROLL_CLASS).attr('id');
      forceMove(contId);
    }
  },
      animate = function animate(opts) {
    var start = new Date(),
        timer = setInterval(function () {
      var progress = (new Date() - start) / opts.duration;
      if (progress > 1) {
        progress = 1;
      }
      opts.step(progress);
      if (progress === 1) {
        clearInterval(timer);
      }
    }, opts.delay || 10);
  },
      animateMove = function animateMove(to, from) {
    from = from || 0;
    animate({
      duration: 350,
      step: function step(progress) {
        //var newPos =  (1 - Math.sin(Math.acos(progress))) * to;
        var newPos = from + Math.pow(progress, 2) * to;
        setPosition(newPos);
      }
    });
  },

  /**
   * set scrollTop
   * @param {string} id  scroll contId
   * @param {number} offset Offset to move
   * @param {number} raw Raw value to Move in offset param
   * @param {boolean|undefined} animate Scrolling with animate
   */
  scrollTo = function scrollTo(id, offset, raw, animate) {
    if (!id) {
      return;
    }
    moveObj = bigObj[id];
    if (!moveObj) {
      return;
    }
    var newPosition = 0,
        from = parseFloat(moveObj.sh.style.top) || 0;
    if (!raw) {
      newPosition = offset / moveObj.delta;
    } else {
      newPosition = offset;
    }
    if (!animate) {
      setPosition(newPosition);
    } else {
      newPosition -= from;
      animateMove(newPosition, from);
    }
  },

  /**
   * Handler for mouseup
   * unbind mousemove and mouseup
   */
  drop = function drop() {
    moveObj = null;
    document.onmousemove = null;
    document.onmouseup = null;
  },

  /**
   * Handler for touchend
   * unbind ontouchmove and touchend
   */
  tDrop = function tDrop() {
    moveObj = null;
    document.ontouchmove = null;
    document.ontouchend = null;
    document.ontouchcancel = null;
  },

  /**
   * Handler for move
   */
  move = function move(e) {
    e = e || window.event;
    setPosition(e.clientY - shiftY);
    blockEvent(e);
    return false;
  },

  /**
   * Handler for move horizontal
   */
  moveHor = function moveHor(e) {
    e = e || window.event;
    setPositionHor(e.clientX - shiftX);
    blockEvent(e);
    return false;
  },

  /**
   * Handler for touchmove
   */
  tMove = function tMove(e) {
    e = e || window.event;
    setPosition(e.touches[0].pageY - shiftY);
    blockEvent(e);
    return false;
  },

  /**
   * Handler for touchmove horizontal
   */
  tMoveHor = function tMoveHor(e) {
    e = e || window.event;
    setPositionHor(e.touches[0].pageX - shiftX);
    blockEvent(e);
    return false;
  },

  /**
   * Handler for mousedown for scrollhandler
   * bind handlers for touchmove, touchend
   */
  drag = function drag(e) {
    e = e || window.event;
    var id, doc, top;
    id = this.getAttribute('id').replace('-scrollbar-handler', '');
    top = this.style.top === '' ? 0 : parseFloat(this.style.top);
    shiftY = e.clientY - top;
    doc = document;
    moveObj = bigObj[id];
    doc.onmousemove = move;
    doc.onmouseup = drop;
    blockEvent(e);
    return false;
  },

  /**
   * Handler for mousedown for scrollhandler horizontal
   * bind handlers for touchmove, touchend
   */
  dragHor = function dragHor(e) {
    e = e || window.event;
    var id, doc, left;
    id = this.getAttribute('id').replace('-scrollbar-handler-horiz', '');
    left = this.style.left === '' ? 0 : parseFloat(this.style.left);
    shiftX = e.clientX - left;
    moveObj = bigObj[id];
    doc = document;
    doc.onmousemove = moveHor;
    doc.onmouseup = drop;
    blockEvent(e);
    return false;
  },

  /**
   * Handler for touchstart for scrollhandler
   * bind handlers for touchmove, touchend
   */
  tDrag = function tDrag(e) {
    e = e || window.event;
    var id, doc, top;
    id = this.getAttribute('id').replace('-scrollbar-handler', '');
    top = this.style.top === '' ? 0 : parseFloat(this.style.top);
    shiftY = e.touches[0].pageY - top;
    moveObj = bigObj[id];
    doc = document;
    doc.ontouchmove = tMove;
    doc.ontouchend = tDrop;
    doc.ontouchcancel = tDrop;
    blockEvent(e);
    return false;
  },

  /**
   * Handler for touchstart for scrollhandler horizontal
   * bind handlers for touchmove, touchend
   */
  tDragHor = function tDragHor(e) {
    e = e || window.event;
    var id, doc, left;
    id = this.getAttribute('id').replace('-scrollbar-handler-horiz', '');
    left = this.style.left === '' ? 0 : parseFloat(this.style.left);
    shiftX = e.touches[0].pageX - left;
    moveObj = bigObj[id];
    doc = document;
    doc.ontouchmove = tMoveHor;
    doc.ontouchend = tDrop;
    doc.ontouchcancel = tDrop;
    blockEvent(e);
    return false;
  },

  /**
   * Scroll by scroll track click
   */
  scrollTrackMDHandler = function scrollTrackMDHandler(e) {
    var id = String(this.getAttribute('id')).replace('-scrollbar-track', ''),
        sbh = document.getElementById(id + '-scrollbar-handler'),
        offsetY,
        offsetX,
        offsetST,
        horizScroll = false;
    if (!sbh) {
      id = String(this.getAttribute('id')).replace('-scrollbar-track-horiz', '');
      sbh = document.getElementById(id + '-scrollbar-handler-horiz');
      if (!sbh) {
        return;
      }
      horizScroll = true;
    }
    if (!horizScroll) {
      var borderTop = parseInt(sbh.style.top, 10),
          borderBottom = parseInt(sbh.style.height, 10);
      if (e.offsetX && e.offsetY) {
        offsetY = e.offsetY;
      } else {
        offsetST = $(this).offset();
        offsetY = e.clientY - offsetST.top;
      }
      if (offsetY < borderTop) {
        //direction up
        moveUp(id, offsetY);
      } else if (offsetY > borderBottom) {
        //direction down
        moveDown(id, offsetY - borderBottom);
      }
    } else {
      var borderLeft = parseInt(sbh.style.left, 10),
          borderRight = parseInt(sbh.style.width, 10);
      if (e.offsetX && e.offsetY) {
        offsetX = e.offsetX;
      } else {
        offsetST = $(this).offset();
        offsetX = e.clientX - offsetST.left;
      }
      if (offsetX < borderLeft) {
        //direction up
        moveLeft(id, offsetX);
      } else if (offsetX > borderRight) {
        //direction down
        moveRight(id, offsetX - borderRight);
      }
    }
  },

  /**
   * Bind handler for scrollhandler on mousedown and touchstart events
   */
  bindEvent = function bindEvent() {
    if (curObj.sh) {
      curObj.sh.onmousedown = drag;
      curObj.sh.ontouchstart = tDrag;
      var contElem = curObj.cont;

      contElem.onkeyup = function (e) {
        checkTabKeyUp(e);
      };
      contElem = null;
    }
    if (curObj.hSh) {
      curObj.hSh.onmousedown = dragHor;
      curObj.hSh.ontouchstart = tDragHor;
    }
  },


  /**
   * void method for build scroll
   */
  buildScroll = function buildScroll() {
    //@TODO might be add class?
    curObj.cont.style.overflowY = 'hidden';
    curObj.cont.style.position = 'relative';
    curObj.cont.className += ' ' + SCROLLBAR_INIT_CLASS;
    var sw, divId, tb, trt, st, sh, ln, lns, bb, trb;

    //create scroll wrapper
    sw = document.createElement('div');
    divId = curObj.contId + '-scrollbar-wrapper';
    sw.setAttribute('id', divId);
    sw.setAttribute('class', 'scrollbar-wrapper scrlbr');

    curObj.cont.appendChild(sw);

    //create scroll button top
    tb = document.createElement('div');
    tb.setAttribute('id', curObj.contId + '-top-button');
    tb.setAttribute('class', 'top-button scrlbr');
    sw.appendChild(tb);

    trt = document.createElement('div');
    trt.setAttribute('class', 'triangl-top scrlbr');
    tb.appendChild(trt);

    //create scroll button scrollbar-track
    st = document.createElement('div');
    st.setAttribute('id', curObj.contId + '-scrollbar-track');
    st.setAttribute('class', 'scrollbar-track scrlbr');
    sw.appendChild(st);
    //create scroll button scrollbar-handler
    sh = document.createElement('div');
    sh.setAttribute('id', curObj.contId + '-scrollbar-handler');
    sh.setAttribute('class', 'scrollbar-handler scrlbr');

    curObj.st = st;
    curObj.sh = sh;

    st.appendChild(sh);

    //create scroll button scrollbar-handler
    ln = document.createElement('div');
    ln.setAttribute('class', 'scrollbar-lines scrlbr');

    lns = document.createElement('div');
    lns.setAttribute('class', 'scrollbar-line scrlbr');

    ln.appendChild(lns);

    sh.appendChild(ln);

    //create scroll button bottom
    bb = document.createElement('div');
    bb.setAttribute('id', curObj.contId + '-bottom-button');
    bb.setAttribute('class', 'bottom-button scrlbr');
    sw.appendChild(bb);

    trb = document.createElement('div');
    trb.setAttribute('class', 'triangl-bot scrlbr');
    bb.appendChild(trb);

    curObj.sw = sw;
    curObj.bb = bb;
    curObj.tb = tb;

    if (curObj.sh !== null) {
      //for mouse wheel
      if (curObj.cont.addEventListener) {
        curObj.cont.addEventListener('DOMMouseScroll', wheel, false);
        curObj.contWheelEvent = true;
        curObj.st.addEventListener('mousedown', scrollTrackMDHandler, false);
      }
      curObj.cont.onmousewheel = wheel;
      //for button up/down scroll!!!
      if (!('ontouchstart' in document.documentElement)) {
        bb.onmousedown = moveDownHandler;
        tb.onmousedown = moveUpHandler;
      }
      //for touchpads
      bb.ontouchstart = moveDownHandler;
      tb.ontouchstart = moveUpHandler;
    }
    getSize();
  },
      buildHorizScroll = function buildHorizScroll() {
    curObj.cont.style.overflowX = 'hidden';
    curObj.cont.style.position = 'relative';

    //create scroll wrapper
    var sw, divId, tb, trt, st, sh, ln, lns, bb, trb;

    divId = curObj.contId + '-scrollbar-wrapper-horiz';
    sw = document.createElement('div');
    sw.setAttribute('id', divId);
    sw.setAttribute('class', 'scrollbar-wrapper-horiz scrlbr');

    curObj.cont.appendChild(sw);

    //create scroll button top
    tb = document.createElement('div');
    tb.setAttribute('id', curObj.contId + '-left-button');
    tb.setAttribute('class', 'left-button scrlbr');
    sw.appendChild(tb);

    trt = document.createElement('div');
    trt.setAttribute('class', 'triangl-left scrlbr');
    tb.appendChild(trt);

    //create scroll button scrollbar-track
    st = document.createElement('div');
    st.setAttribute('id', curObj.contId + '-scrollbar-track-horiz');
    st.setAttribute('class', 'scrollbar-track-horiz scrlbr');
    sw.appendChild(st);
    curObj.st = st;
    //create scroll button scrollbar-handler
    sh = document.createElement('div');
    sh.setAttribute('id', curObj.contId + '-scrollbar-handler-horiz');
    sh.setAttribute('class', 'scrollbar-handler-horiz scrlbr');

    curObj.hSh = sh;

    st.appendChild(sh);

    //create scroll button scrollbar-handler
    ln = document.createElement('div');
    ln.setAttribute('class', 'scrollbar-lines scrlbr');

    lns = document.createElement('div');
    lns.setAttribute('class', 'scrollbar-line scrlbr');

    ln.appendChild(lns);

    sh.appendChild(ln);

    //create scroll button bottom
    bb = document.createElement('div');
    bb.setAttribute('id', curObj.contId + '-right-button');
    bb.setAttribute('class', 'right-button scrlbr');
    sw.appendChild(bb);

    trb = document.createElement('div');
    trb.setAttribute('class', 'triangl-right scrlbr');
    bb.appendChild(trb);

    curObj.hSw = sw;
    curObj.hBb = bb;
    curObj.hTb = tb;

    if (curObj.hSh !== null) {
      //for button up/down scroll!!!!
      if (!('ontouchstart' in document.documentElement)) {
        bb.onmousedown = moveRightHandler;
        tb.onmousedown = moveLeftHandler;
      }
      //for touchpads
      bb.ontouchstart = moveRightHandler;
      tb.ontouchstart = moveLeftHandler;
    }
    if (curObj.st.addEventListener) {
      curObj.st.addEventListener('mousedown', scrollTrackMDHandler, false);
    }

    getSizeHor();
  },

  /**
   * Attach object for scrolling
   * @param {String} contId Id of wrapper object
   * @param {String} objId Id of object
   * @param {Boolean} hs HideScroll if nothing scrolling
   * @param {Boolean} hss hideHoriz scroll
   */
  attach = function attach(contId, objId, tabId, hs, hss) {
    var obj = document.getElementById(objId),
        cont = document.getElementById(contId);

    if (!obj || !cont) {
      return false;
    }
    //bind resize
    curObj = {
      'objId': objId,
      'contId': contId,
      'obj': obj,
      'cont': cont,
      'tabId': tabId,
      'hs': hs || false,
      'hhs': hss || false
    };
    buildScroll();
    buildHorizScroll();
    bigObj[contId] = curObj;
    bindEvent();
    curObj = null;
    obj = null;
    cont = null;
    //return _curObj;
  },
      detach = function detach(tabId) {
    var keyVar, keyVar1;
    //rbin = document.getElementById('rbin');
    for (keyVar in bigObj) {
      if (bigObj[keyVar].tabId === tabId) {
        if (bigObj[keyVar].cont.removeEventListener) {
          if (bigObj[keyVar].contWheelEvent) {
            bigObj[keyVar].cont.removeEventListener('DOMMouseScroll', wheel, false);
            bigObj[keyVar].contWheelEvent = false;
          }
        }
        for (keyVar1 in bigObj[keyVar]) {
          if (bigObj[keyVar].hasOwnProperty(keyVar1)) {
            bigObj[keyVar][keyVar1] = null;
          }
        }
        delete lastValues[bigObj[keyVar].contId];
        delete bigObj[keyVar];
      }
    }
  };
  return {
    attach: attach,
    update: update,
    bigObj: bigObj,
    scrollMove: scrollMove,
    scrollMoveHoriz: scrollMoveHoriz,
    scrollTo: scrollTo,
    forceMove: forceMove,
    forceMoveSelectItem: forceMoveSelectItem,
    detach: detach
  };
}();
//# sourceMappingURL=scroll.js.map