ElementInit = {
	ConfigAll : {tabSwitcher:true,blockPopper:true,datePicker:true,popupLink:true,autoValidate:true,tablerowcollapse:true,tblSort_:true,collapseSections:true},
	ConfigJsonForm : {tabSwitcher:true,blockPopper:true,datePicker:true,popupLink:true,autoValidate:false,tablerowcollapse:true,tblSort_:true,collapseSections:true},
	ConfigDefault : {datePicker:true,blockPopper:true,tablerowcollapse:true},
	ConfigForm : {blockPopper:true,datePicker:true,popupLink:true,autoValidate:true},
	RowDefault : {blockPopper:true,datePicker:true,popupLink:true,autoValidate:true,collapseSections:true},
	init : function(_element,_config)
	{
		_element = _element || document.body;
		_config = _config || ElementInit.ConfigDefault;

		var _elmId = _element.id,
		      _idScope = "#" + DOM.aquireId(_element),
		      _key, _cfg, _oCfg, _tmpCfg;


		// ======================================================================
		// Tab Switcher
		if (_config.tabSwitcher && window.tabSwitcher)
		{
      // temporarily prefix all tabSwitcher.config selectors with _idScope
      var _oldCfg = tabSwitcher.config
      tabSwitcher.config = {};
			for (_key in _oldCfg)
			{
        var newKey = _idScope+' '+_key.split(',').join(','+_idScope+' ');
				tabSwitcher.config[newKey] = _oldCfg[_key];
      }
      tabSwitcher.init();
      tabSwitcher.config = _oldCfg;
    }


		// ======================================================================
		// Block Popper
		if (_config.blockPopper && window.blockPopper)
		{
			_tmpCfg = { linkSelector : blockPopper.linkSelector };
			blockPopper.linkSelector = _idScope+" "+blockPopper.linkSelector;
			blockPopper.init();
			blockPopper.linkSelector = _tmpCfg.linkSelector;
		}


		// ======================================================================
		// Date picker
		if (_config.datePicker && window.datePicker)
		{
			datePicker.init(_element)
		}


		// ======================================================================
		// Popup Links
		if (_config.popupLink && window.popupLinks)
		{
			popupLinks.init(_element);
		}


		// ======================================================================
		// Auto Validation
		if (_config.autoValidate && window.autoValidate)
		{
			defangForm.scopeElm = _element;
			defangForm.resetButtons.init();
			defangForm.enterKey.init();
			defangForm.scopeElm = null;
			autoValidate.init();
		}
		
		//tablerowcollapse
		if(_config.tablerowcollapse && window.tablerowcollapse)
		{
			tablerowcollapse.init(_element);
		}
		
		//Tablesort
		if(_config.tblSort_ && window.tblSort_)
		{
			tblSort_.init(_element);
		}

		// Tab Switcher
		if (_config.collapseSections && window.collapseSections)
		{
		    _tmpCfg = {};
			for (_key in collapseSections.config)
			{
				_cfg = collapseSections.config[_key];
				_tmpCfg[_key] = {
				blockSel : _cfg.blockSel
				};
				_cfg.blockSel = _idScope+" "+_cfg.blockSel;
    		}
    		collapseSections.init();
			for (_key in _tmpCfg)
			{
				_oCfg = _tmpCfg[_key];
				collapseSections.config[_key].blockSel = _oCfg.blockSel;
			}
  		}

		_element.id = _elmId;	
	}
};

