code: function(event_name, event_object, freeze_protection) {
  
  		// slice, cause handlers may be removed while they are called
  		var handlers = this._event_handlers[event_name].slice(),
  			i = 0,
  			count = handlers.length;
  
  		// unfortunately, browser can raise an event inside another event.
  		// Example test case:
  		// {$if(is_visible)}
  		// 		<button x:click="remove_me">click me</button>
  		// {/if}
  		// Click handler should set `is_visible` to false, so the button is removed.
  		// Button element will be removed from DOM inside click handler, in view_manager.refresh()
  		// At the moment of removal, browser fires focusout event. Each event ends with view_manager.refresh(),
  		// which will also try to remove the button.
  		// Read more here:
  		// for understanding, see http://stackoverflow.com/questions/21926083/failed-to-execute-removechild-on-node
  		this._nested_handlers_count++;
  
  		for (; i < count; i++) {
  
  			handlers[i].fn.call(handlers[i].context, event_name, event_object);
  
  		}
  
  		this._nested_handlers_count--;
  
  		if (
  			this._nested_handlers_count == 0
  			&& !Lava.view_manager.isRefreshing()
  			&& (!freeze_protection || !Lava.ScopeManager.hasInfiniteLoop())
  		) {
  
  			Lava.view_manager.refresh();
  
  		}
  
  	}
docs: Actual listener for DOM events. Calls framework listeners, attached via {@link Lava.Core#addGlobalHandler}
  @param {string} event_name DOM event name
  @param {Object} event_object Event object, returned by low-level framework
  @param {boolean} freeze_protection Is this a frequent event, which may cause lags