| define( 
'frdl',
['require', 'exports', 'module', 'feature!es6Symbol'
//, 'webfan/bootcache!mobile-detect', 'feature!Modernizr'
  
//#skipped dummies to garbage
, 'feature!Proxy'
, 'feature!customElements'
, 'webfan/bootcache!webfan/overload'
, 'webfan/bootcache!jQuery'
, 'webfan/bootcache!EventEmitter'
//, 'webfan/bootcache!path'
, 'webfan/bootcache!fs'
],
function(require, exports, module, es6Symbol
//, mobileDetect, moderniZr
 
//#skipped dummies to garbage
, ProxyPolyfillDummy
, customElementsPolyfillDummy
, overload
, jQuery
, EventEmitter
//, path
, fs
) {
let frdl = clone(overload).defaultProxy;														 
/*! Source: src/namespace.js https://github.com/mckoss/namespace/blob/master/namespace.js 
   Namespace.js - modular namespaces in JavaScript
   by Mike Koss - placed in the public domain
   
   - minor edits by frdl
*/
(function(global) {
	
	const n = 'Webfan';
	
    var globalNamespace = global[n];
    var VERSION = '3.0.1';
    function Module() {}
    function numeric(s) {
        if (!s) {
            return 0;
        }
        var a = s.split('.');
        return 10000 * parseInt(a[0]) + 100 * parseInt(a[1]) + parseInt(a[2]);
    }
    if (globalNamespace) {
        if (numeric(VERSION) <= numeric(globalNamespace['VERSION'])) {
            return;
        }
        Module = globalNamespace.constructor;
    } else {
        global['namespace'] = globalNamespace = new Module();
    }
    globalNamespace['VERSION'] = VERSION;
    function Require(path) {
        path = path.replace(/-/g, '_');
        var parts = path.split('.');
        var ns = globalNamespace;
        for (var i = 0; i < parts.length; i++) {
            if (ns[parts[i]] === undefined) {
                ns[parts[i]] = new Module();
            }
            ns = ns[parts[i]];
        }
        return ns;
    }
    var proto = Module.prototype;
    proto['module'] = function(path, closure) {
        var exports = Require(path);
        if (closure) {
            closure(exports, Require);
        }
        return exports;
    };
    proto['extend'] = function(exports) {
        for (var sym in exports) {
            if (exports.hasOwnProperty(sym)) {
                this[sym] = exports[sym];
            }
        }
    };
	
	
	global[n] = globalNamespace;
	
	
	
}(new Function("return self || this")()));
 var k, libraryContext = requirejs.s.newContext('frdl');
 for( k in libraryContext){
   frdl[k] = libraryContext[k];
 }
 
 
 
 
var mapLoader = function(){
 requirejs.config({
    map: {
        'webfan/bootcache': {
            '*': 'frdlcjs'
        }
    }
 });
};
	
		
		
		
											 
var loadTinymce = function(){
 window.tinyMCEPreInit = {
    base: requirejs.s.contexts._.config.baseUrl + 'tinymce',
    baseURL: requirejs.s.contexts._.config.baseUrl + 'tinymce',
   // document_base_url:  location.href 
   document_base_url: requirejs.s.contexts._.config.baseUrl + 'tinymce',
 };	
	
  require(['loadPlain!tinymce/tinymce'],
   function(tinymceJS){
   	console.log('tinymceJS', tinymceJS);
       var script = document.createElement('script');
       script.innerHTML = tinymceJS.content;
       frdl.$q('head', false).append(script);
 }); 
};
			
			
				
var  success = false, __loaded = false, to = false;	
var loadFileSystemShims = function(){
if( false!==success && 'undefined'!==typeof frdl.fs && 'undefined'!==typeof frdl.fs.readFile && 'function'===typeof frdl.fs.readFile)return;
if(false===__loaded && false===success && 'undefined'===typeof frdl.fs) {
 __loaded=true;	
	
 require(['webfan/bootcache!fs'], function(fs){
 	try{
	 	 frdl.fs =fs;	
 	     frdl.fs5 = fs;		
         frdl.fs.polyfill.check(true);	
		
		 success = true;	
	}catch(err){
		success = false;
	}    	
        
 });   	
}	
 
 if(('undefined'===typeof frdl.MagicHelper || 'undefined'===typeof frdl.MagicHelper.emitter) && (false===success || 'undefined'===typeof frdl.fs) ){
 	if(!!to)clearTimeout(to);
 	to = setTimeout(loadFileSystemShims,16);
 	return;
 }
 
 frdl.MagicHelper.emitter.on('get fs', function(evData){
 	 require(['webfan/bootcache!fs'], function(fs){
   	 	try{
   	          evData.result = fs;	
              fs.polyfill.check(true);  
              success = true;	
    	}catch(err){
		  
	    }  
     });   		
 });	
 frdl.MagicHelper.emitter.on('get fs5', function(evData){
 	  evData.result = frdl.fs;	
 });	
	
};
											 
let URL = global.URL || global.webkitURL;
let requestFileSystem = global.requestFileSystem || global.webkitRequestFileSystem;
let resolveLocalFileSystemURL = global.resolveLocalFileSystemURL || global.webkitResolveLocalFileSystemURL;
navigator.temporaryStorage = navigator.temporaryStorage || navigator.webkitTemporaryStorage;
navigator.persistentStorage = navigator.persistentStorage || navigator.webkitPersistentStorage;
let BlobBuilder = global.BlobBuilder || global.MozBlobBuilder || global.WebKitBlobBuilder;
													  
        //    frdl.webfan = {};
         //   frdl.webfan.$Async = requirejs.nextTick;
frdl.clone=clone;
frdl.extend=extend;
frdl.str_replace = str_replace;
frdl.html_entity_decode = html_entity_decode;
frdl.get_html_translation_table = get_html_translation_table;
frdl.htmlentities = htmlentities;
frdl.mt_rand = mt_rand;
frdl.base64_encode = base64_encode;
frdl.base64_decode = base64_decode;
frdl.base64_detect = base64_detect;
frdl.urlencode = urlencode;
frdl.urldecode = urldecode;
frdl.explode = explode;
frdl.strip_tags = strip_tags;
frdl.strpos = strpos;
frdl.dashToCamel = dashToCamel;
frdl.camelToDash = camelToDash;
frdl.hexdec=hexdec;
frdl.dechex=dechex;
       
  frdl.WebfanCreateCookie = WebfanCreateCookie;     
  frdl.WebfanCreateCookieSeconds = WebfanCreateCookieSeconds;       
  frdl.WebfanReadCookie = WebfanReadCookie;     
  frdl.WebfanEraseCookie = WebfanEraseCookie; 
  
  
frdl.overload=function(o, fn){
	
  var no = 	require('webfan/bootcache!webfan/overload').make(o);
  if('function'===typeof fn){
  	fn=[fn, fn];
  }	
  
  if('undefined'!==typeof fn && 'undefined'!==typeof fn[0]){
  	no.__call=fn[0];
  }
  
  if('undefined'!==typeof fn && 'undefined'!==typeof fn[1]){
  	no.__get=fn[1];
  }
    
  
};
frdl.debug = {
  mode : function(m){
         if('undefined'!==typeof m){
           sessionStorage.setItem('frdl.debug.mode', m) ;
         }
        return (sessionStorage.getItem('frdl.debug.mode') ) ? sessionStorage.getItem('frdl.debug.mode')  : 0;
  }
};
    frdl.EventEmitter = EventEmitter;       	
    frdl.state = new frdl.EventEmitter;
																						  
																						  
																						  
	//global.require.state=new frdl.EventEmitter;	
	Object.defineProperty(global.require || require, 'state', {
		           get : function(){
					  return frdl.state;																	  
				   }
	});
require(['feature!browser', 'feature!worker'], function(browser, worker){
             if('undefined'===typeof browser)browser=false;
             if('undefined'===typeof worker)worker=false;
             frdl.browser=browser;
             frdl.worker = worker;
             
             if(false!== frdl.browser && 'undefined'===typeof global.tinymce){
             	setTimeout(function(){
             		 if('undefined'===typeof global.tinymce
             		   && null === document.querySelector('script[src*="tinymce"]') 
             		 ){
             		 		loadTinymce();
					  }
				}, 128);
			 }
         
});
 	try{
 	     frdl.fs =fs;	
 	     frdl.fs5 = fs;		
         frdl.fs.polyfill.check(true);     			
	}catch(err){
		loadFileSystemShims();
	}
  
/*
 require(['webfan/bootcache!fs'], function(fs){
 	try{
 	     frdl.fs =fs;	
 	     frdl.fs5 = fs;		
         frdl.fs.polyfill.check(true);     			
	}catch(err){
		loadFileSystemShims();
	}
        
 });    	
		
 */
                frdl.isTraversable = function(thing) {
                    return (('object' === typeof thing || 'array' === typeof thing) && null !== thing) ? true : false;
                };
                frdl.array_unique = function(array) {
                    return ("undefined" === typeof jQuery) ? array.filter(function(el, i, array) {
                        return i === arr.indexOf(el);
                    }) : $.grep(array, function(el, i) {
                        return i === $.inArray(el, array);
                    });
                };
                frdl.filterArray = function(arr, filter) {
                    var o = [];
                    for (var index = 0; index < arr.length; index++) {
                        if (filter(arr[index], index) === true) {
                            o.push(arr[index]);
                        }
                    }
                    return o;
                };
                frdl.shuffleArray = function(a) {
                    var j, x, i;
                    for (i = a.length; i; i--) {
                        j = Math.floor(Math.random() * i);
                        x = a[i - 1];
                        a[i - 1] = a[j];
                        a[j] = x;
                    }
                };
                frdl.filterObject = function(arr, filter) {
                    var o = {};
                    for (var k in arr) {
                        if (filter(arr[k], k) === true) {
                            o[k] = arr[k];
                        }
                    }
                    return o;
                };
                frdl.filter = function(arr, filter, recursive) {
                    if (true === recursive && true === _.isTraversable(arr)) {
                        arr = frdl.each(arr, function(i, v) {
                            arr[i] = _.filter(v, filter, recursive);
                        });
                        return arr;
                    }
                    if ('array' === typeof arr) {
                        return frdl.filterArray(arr, filter);
                    } else if ('object' === typeof arr) {
                        return frdl.filterObject(arr, filter);
                    } else {
                        return (true === filter(arr)) ? arr : undefined;
                    }
                };
                frdl.each = function(object, callback, args) {
                    var name, i = 0,
                        length = ('undefined' !== typeof object.length) ? object.length : undefined,
                        traversable = false;
                    if (true !== frdl.isTraversable(object)) {
                        traversable = false;
                    } else {
                        traversable = true;
                    }
                    if (args) {
                        if (false === traversable) {
                            callback.apply(object, args);
                            return object;
                        }
                        if (length === undefined) {
                            for (name in object)
                                if (callback.apply(object[name], args) === false)
                                    break;
                        } else
                            for (; i < length;)
                                if (callback.apply(object[i++], args) === false)
                                    break;
                    } else {
                        if (false === traversable) {
                            callback.call(object, 0, object);
                            return object;
                        }
                        if (length === undefined) {
                            for (name in object)
                                if (callback.call(object[name], name, object[name]) === false)
                                    break;
                        } else
                            for (var value = object[0]; i < length && callback.call(value, i, value) !== false; value = object[++i]) {}
                    }
                    return object;
                };
           
           
           
																  
														  
													  
													  
 
      /*!# @license * Copied + modified from http://stackoverflow.com/questions/9899372/pure-javascript-equivalent-to-jquerys-ready-how-to-call-a-function-when-the Thanks! */
            (function(InitBaseObj, InitFuncName, InitAddReadyCheckfuncName) {
				 const _TO_ =  64;	
				 var TIMEO =  false;												  
																  
                var ThenEvent = function(baseObj, funcName, addReadyCheckfuncName) {
                    funcName = funcName || "ready";
                    baseObj = baseObj || window;
                    var readyList = [];
                    var readyFired = false;
                    var readyEventHandlersInstalled = false;
                    var defered = false;
                    var readyQueue = [];
                   
																  
                    function ready() {
                        var df = false;
                        frdl.each(readyQueue, function(i, v) {
                            if (true !== v()) {
                                defered = true;
                                df = true;
                                return false;
                            } else {
                                readyQueue[i] = null;
                                readyQueue = frdl.filter(readyQueue, function(v, i) {
                                    if (null === v || 'function' !== typeof v)
                                        return false;
                                    return true;
                                }, false);
                                i--;
                            }
                        });
                        defered = df;
                        if (false === readyFired && false === defered && document.readyState === "complete") {
                            readyFired = true;
                            while (0 < readyList.length && false === defered && document.readyState === "complete") {
                                var Cb = readyList.shift();
                                var r = Cb.fn.call(window, Cb.ctx);
                                if ('boolean' === typeof r) {
                                    if (true === r) {
                                        readyList.push(Cb);
                                        defered = true;
                                    }
                                }
                            }
                        } else {
                            if(!!TIMEO)clearTimeout(TIMEO);
                            TIMEO = setTimeout(ready, _TO_);
                        }
                    }
                    baseObj[funcName] = function(callback, context) {
                        if (readyFired) {
                            setTimeout(function() {
                                try {
                                    callback(context);
                                } catch (err) {
                                    console.trace(err);
                                }
                            }, _TO_);
                            return;
                        } else {
                            readyList.push({
                                fn: callback,
                                ctx: context
                            });
                        }
                        if (document.readyState === "complete") {
                            try {
                               if(!!TIMEO)clearTimeout(TIMEO);
                               TIMEO = setTimeout(ready, _TO_);
                            } catch (err) {
                                console.error(err);
                            }
                        } else if (!readyEventHandlersInstalled) {
                            document.addEventListener("DOMContentLoaded", ready, false);
                            window.addEventListener("load", ready, false);
                            document.addEventListener("readystatechange", function() {
                                if (document.readyState !== "complete") {
                                    if (true === readyFired) {
                                        readyFired = false;
                                        if (0 < readyList.length || 0 < readyQueue.length) {}
                                    }
                                }
                            }, false, true);
                            readyEventHandlersInstalled = true;
                        }
                        return baseObj;
                    };
                    baseObj[addReadyCheckfuncName] = function(fn) {
                        if ('function' === typeof fn && 'function' === typeof readyQueue.push) {
                            readyQueue.push(fn);
                        }
                        readyFired = false;
                        return baseObj;
                    };
                    baseObj.If = function(fn) {
                        return baseObj[addReadyCheckfuncName](fn);
                    };
                    return baseObj;
                };
                InitBaseObj.addReadyEventListener = function(baseObj, funcName, addReadyCheckfuncName) {
                    return ThenEvent(baseObj, funcName, addReadyCheckfuncName);
                };
                InitBaseObj.addReadyEventListener(InitBaseObj, InitFuncName, InitAddReadyCheckfuncName);
            }(frdl, "ready", 'addReadyCheck'));
            
   // frdl.domReady = require('webfan/bootcache!domReady');	
            (function() {
                'use strict';
                   const CONST = Symbol('Symbol.frdl.CONST');
                    class Node { 
                       constructor (p) {
                           this[CONST]=Symbol(p);
		
					    		 this.valueOf = function valueOf(){
										 return this[CONST];
								 };
								 this.toString = function(){
										 return this[Symbol.toStringTag]('string');
								 }; 
                       }
                       get () {
                          return this.valueOf();
                       }
                      [Symbol.toPrimitive](hint){
							     	  if(hint == 'number') {
										return this.id;
									  }
							     	  if(hint == 'string') {
										return this.toString();
									  }
									
							  return this.valueOf();
                        }
                        [Symbol.toStringTag](hint){
									
								return 'Symbol('+this.keyPath+' '+this.id+')';
						}
                    }
/*
                var FRDL_CONSTANTS = frdl.Symbol = {
                	   CONST : CONST
                };
  */              
                let FRDL_CONSTANTS = new Node('Symbol.frdl');
                FRDL_CONSTANTS.CONST = CONST;
                let _idc = -1;
                
                Object.defineProperty(Symbol, 'frdl', {
                    'get': function() {
                        return FRDL_CONSTANTS;
                    },
                    
                    
                    'set': function(val) {
                        if ('string' !== typeof val) {
                            var s = false;
                            try {
                                val = JSON.stringify(val);
                                s = true;
                            } catch (err) {
                                s = false;
                            }
                            if (false === s) {
                                try {
                                    val = val.toString();
                                    s = true;
                                } catch (err) {
                                    s = false;
                                }
                            }
                            if (false === s) {
                                val = '##@@##' + typeof val + (('undefined' !== typeof val.length) ? val.length : 'NaT') + '##@@##';
                            }
                        }
                      
                        	var kp = explode('.', val);
                        	var parent = FRDL_CONSTANTS, current = FRDL_CONSTANTS;
                            var path = 'Symbol.frdl';
                            var Uri = '';
                       	frdl.each(kp, function(pos, KEY){
                            path += '.'+KEY;
                            Uri += '/'+KEY;
                            let p = path;
                            let _uri = Uri;
                            let __id = ++_idc;
         
                             if(!parent.hasOwnProperty(KEY) /*&& ('function'!==typeof Object.getOwnPropertySymbols || -1 === Object.getOwnPropertySymbols(parent).indexOf(KEY) )*/){
                               
           
							     var node = new Node(p);
							                     
	 
								   Object.defineProperty(node, 'id',{
								   	  'get':function(){
								   		     return __id;
								   	  }
								   	});							
								 
		
								   	
								   Object.defineProperty(node, 'uri',{
								   	  'get':function(){
								   		     return _uri;
								   	  }
								   	});									
									 
								   Object.defineProperty(node, 'keyPath',{
								   	  'get':function(){
								   		     return p;
								   	  }
								   	});	
								   					
			                                    
                     
                    
                                      Object.defineProperty(parent, KEY,{
								     	  'get':function(){
								     		     return node
                                                          // .valueOf()
                                                        ;
								     	  },
								     	  'set':function(n){
                                                 var k;
                                                 for(k in n){
                                                    parent[KEY][k]=n[k];  
                                                 }
								     	  },
                                          enumerable: true,
								     	  writeable: true,
                                          configurable: true
								      });	
                                  
                    	        current = parent[KEY] = node;                   
							 } else{
							 	 current = parent[KEY];
							 } 
                               parent = current;
						   });
						   
                        
                    }
                });
            }());
              															  
																  
	            
                
 
 Symbol.frdl = 'main.dependency.ready';
 
 Symbol.frdl = 'LOAD.fs.polyfill'; 
 
 Symbol.frdl = 'xhrWorker';
 Symbol.frdl = 'CONSTANTS';  
  
 Symbol.frdl = 'Angular';  
 Symbol.frdl = 'Plugin';  
 Symbol.frdl = 'Widget'; 
 Symbol.frdl = 'WebApp'; 
 Symbol.frdl = 'Component'; //http://www.peterkroener.de/web-components-erklaert-teil-1-was-sind-web-components/
// Symbol.frdl = 'hps'; 
 //Symbol.frdl = 'hps.module';
 
 Symbol.frdl = 'Frdlweb'; 
 Symbol.frdl = 'Frdlweb.EMITTERS';  // 
 Symbol.frdl = 'Frdlweb.FSM';  // FINAL_EVENT_STATES
 //Symbol.frdl = 'Frdlweb.FESM';  // FINAL_EVENT_STATES
 Symbol.frdl = 'Frdlweb.ESR';  // FINAL_EVENT_STATES  required`s)
 Symbol.frdl = 'Node.NAME'; 
 Symbol.frdl = 'Node.$$$parent'; 
 Symbol.frdl = 'Node.PARENT'; 
 Symbol.frdl = 'fn.exec';  
 Symbol.frdl='fn.__call';
 Symbol.frdl = 'customElement.class'; 
 Symbol.frdl = 'customElement.tag'; 
 Symbol.frdl = 'customElement.importUrl'; 
(function() {
   'use strict';
//CONSTANTS = {};  frdl[Symbol.frdl.CONSTANTS.valueOf()]
//const CONSTANTS = new Map();
    const CONSTANTS = Symbol.frdl.CONSTANTS.valueOf();
    const EMITTERS =  Symbol.frdl.Frdlweb.EMITTERS.valueOf();  
    const FSM = Symbol.frdl.Frdlweb.FSM.valueOf();  
    const ESR = Symbol.frdl.Frdlweb.ESR.valueOf();      
    
    function FrdlwebPrototype(){}   
    FrdlwebPrototype.prototype.VERSION = '0.0.1';
    
    var Frdlweb = new FrdlwebPrototype;
 
   
    Frdlweb[CONSTANTS] = new Map();
    
    
      
    Frdlweb[FSM] = new WeakMap();    
    Frdlweb[EMITTERS] = new Map();   
    Frdlweb[ESR] = new Map();// FINAL_EVENT_STATES  required`s)
    
      
    const privates = new WeakMap();  
    frdl.MagicHelper = {
       // emitter : new  frdl.EventEmitter
        
	};
      
    privates.set(frdl.MagicHelper, Frdlweb);
    
     
  frdl.MagicHelper.emitter=new frdl.EventEmitter;
  
  
  Frdlweb[EMITTERS].set(require, frdl.state);  
  Frdlweb[EMITTERS].set(frdl, frdl.state);  
  Frdlweb[EMITTERS].set(frdl.MagicHelper,  frdl.MagicHelper.emitter);  
  
  
   
frdl.CONST = function(n,v, local){
  if('undefined'!==typeof v && 'undefined'===typeof local){
      local=true;
  }
  if('undefined'===typeof v){
    if('undefined'!==typeof Frdlweb[CONSTANTS].get(n)){
         return clone( Frdlweb[CONSTANTS].get(n) );
    }
      var p = explode('.', n), symFound = false,
          cur = Symbol.frdl;
          
        if('Symbol'===p[0])p.shift();
        if('frdl'===p[0])p.shift();
      frdl.each(p, function(i, KEY){
           if('undefined'!==typeof cur[KEY]){
               symFound=cur[KEY];
           }else{
              symFound = false;
              return false;
           }
          
          cur = cur[KEY];
      });
        if(false!==symFound){
              return symFound.valueOf();
        }
      throw n+' is undefined in frdl.CONST';
  }
    if(Frdlweb[CONSTANTS].has(n)){
       throw n+' is already defined in frdl.CONST';
    } 
   // const VALUE = v;
  // Frdlweb[CONSTANTS][n]=VALUE;
   if('string'===typeof n && false !== strpos(n, '.') ){
        try{
         Symbol.frdl = n;
         n = 'Symbol.frdl.' + n;
         var symb = eval(n)  ;
         n = ('Symbol'===typeof symb.valueOf() ) ? symb.valueOf() : str_replace('.', '_', arguments[0] );
       }catch(err){
           throw arguments[0]+' could not be resolved in frdl.CONST';
       } 
        
   }
    const VALUE = v;
    Frdlweb[CONSTANTS].set(n, VALUE);
   
    if(!local){
       global[n] = VALUE; 
    }
   return clone( Frdlweb[CONSTANTS].get(n) );
};
 
frdl.CONST.defined = function(n){
 return (true!== Frdlweb[CONSTANTS].has(n)) ? false : true;
};
 
					
      
          
														  
    
         frdl.ready.dependencies = frdl.state.required([
       
                      'module loaded : ' + 'webfan/frdl-main-x8'
          
                   //   , 'module loaded : ' + 'Modernizr'
                      , 'module loaded : ' + 'mobile-detect'
             ], function(resolvedDependencies){
          	  
           //   console.log('resolvedDependencies', resolvedDependencies);
          },  frdl.ready/*, false*/);
          
         
           frdl.addReadyCheck(function() {
                    return frdl.ready.dependencies.stateReady();
           });   
                         
         Frdlweb[ESR].set( 
              frdl.ready,
              frdl.ready.dependencies
         );   
          
          
          
         if(false!==frdl.browser){
              frdl.ready.dependencies.add('module loaded : webfan/navigator/simpledialog-9x');
              frdl.ready.dependencies.add('module loaded : webfan/navigator/anchor-routing-9x');
             // NO/BLOCK!?!?   frdl.ready.dependencies.add('module loaded : components/locale/jsin/jsin-9x');
              //'webfan/bootcache!webfan/NamespacePlugin'
       //       frdl.ready.dependencies.add('module loaded : webfan/NamespacePlugin');
              
         }
 
          Frdlweb[ESR].set( 
              frdl.ready,
              frdl.ready.dependencies
         );          																						  
     //  console.log('ESR:frdl.ready', Frdlweb[ESR].get(frdl.ready));
 
 frdl.MagicHelper.addMethodCallback = function (obj, originalMethodName, $returns, callBackMethod, context){
            var fnOriginal = obj[originalMethodName],
                outcome;
            context = context || obj;
																						  
        if(!!$returns){
																						  
            obj[originalMethodName] = function () {
                var outcome = fnOriginal.apply(this, arguments);
                outcome = frdl.extend(outcome, callBackMethod.apply(this, arguments) || {});
                return outcome;
            };
																						  
        }else{
	          obj[originalMethodName] = function () {
                var outcome = fnOriginal.apply(this, arguments);
                  callBackMethod.apply(this, arguments);
                return outcome;
            };
																										  
	    }
};
    
/*
frdl.a.module(String sModuleName, [Array asDependencies])																						  
frdl.MagicHelper.addMethodCallback(angular, "module", true, function(sModuleName, asDependencies){
 
});
*/
			
frdl.CONST('__MAGIC_METHODS__', {
  'i' : 0,
  '__call' : function(name, args){
        frdl.CONST('__MAGIC_METHODS__').i=++(frdl.CONST('__MAGIC_METHODS__').i);
	     var r = {name:name, args:args, result:undefined};
									
		if(0<frdl.debug.mode() )	console.log('__call', r);
																						  
		  frdl.MagicHelper.emitter.emit(name, r);
			if('undefined'===typeof r.result){
			   frdl.MagicHelper.emitter.emit('*', r);																			  
			}																						  
		 return r.result;																				  
  },
  '__get' : function(name){
      frdl.CONST('__MAGIC_METHODS__').i=++(frdl.CONST('__MAGIC_METHODS__').i);
	     var r = {name:name, result:undefined};																				  
    	  frdl.MagicHelper.emitter.emit('get '+name, r);	
			if('undefined'===typeof r.result || 'function'===typeof r.result){
			  frdl.MagicHelper.emitter.emit('get *', r);																			  
			}
		 return r.result;																				  
  }, 
  '__invoke' : function(name){
        frdl.CONST('__MAGIC_METHODS__').i=++(frdl.CONST('__MAGIC_METHODS__').i);
	      throw '@ToDo: __invoke is not defined';																			  
	}
}, true);	
																			  
																						  
		frdl.MagicHelper.emitter.on('test', function(evData){
             console.log('onTest', arguments);
			 evData.result = 'Testresult from frdl.test('+JSON.stringify(evData.args)+')';																			  
		});//frdl.test()
					
		frdl.MagicHelper.emitter.on('plug', function(evData){
			 evData.result = frdl.ns.plugin.apply(frdl.ns, evData.args);																			  
		})
		frdl.MagicHelper.emitter.on('get *', function(evData){
			 if('undefined'!==typeof  frdl.ns[evData.name]){
               evData.result = frdl.ns[evData.name];																			  
             }
	    });	
		frdl.MagicHelper.emitter.on('get Test', function(evData){
             console.log('Test', arguments);
			 evData.result = 'TESTPROPERTY';																			  
		});			//frdl.Test	
																						  
		//frdl.MagicHelper.emitter.on('get *', function(evData){
		//	 evData.result = undefined;																			  
	//	});		
							   
							   
							   
							   
		frdl.MagicHelper.emitter.on('get guid', function(evData){
			 var t = explode('.', frdl.microtime() .toString() );				   
			 var id =  frdl.dechex( parseInt(t[0]) )
							   +'-'
						+   frdl.dechex( parseInt(t[1]) )	   
							  +'-'   
							   + frdl.dechex( frdl.mt_rand() )
						+ '-'
						+ frdl.CONST('__MAGIC_METHODS__').i.toString() 
					  ;				   
			 evData.result = frdl.str_replace('.', '-', id);																			  
		});									   
							   
	
	//loadFileSystemShims();
}());
															  
																  
																  
								
                frdl.microtime = function() {
                    return (new Date() / 1000);
                };
											 
											 
          frdl.$q = function(q, all, context) {
                if ('undefined' === typeof context)
                    var context = document;
                var m = ((false === all) ? 'querySelector' : 'querySelectorAll');
                return context[m](q);
            };
            frdl.$j = function(selector) {
                return new DomObject(selector);
            };
            frdl.cbs = {};
            var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg;
            var ARGUMENT_NAMES = /(?:^|,)\s*([^\s,=]+)/g;
            var getFunctionParameters = frdl.getFunctionParameters = function(func, wrapStart, wrapEnd) {
	              if ('function'===typeof func) {
            	 	 func = func.toString();
            	 }												  
													  
            	 if (typeof func != 'string') {
            	 	  return undefined;
            	 }
                var fnStr = func.replace(STRIP_COMMENTS, '');
                var argsList = fnStr.slice(fnStr.indexOf('(') + 1, fnStr.indexOf(')'));
                var result = argsList.match(ARGUMENT_NAMES);
                if (result === null) {
                    return [];
                } else {
                    var stripped = [];
                    for (var i = 0; i < result.length; i++) {
                        stripped.push((('string' === typeof wrapStart) ? wrapStart : '') + result[i].replace(/[\s,]/g, '') + (('string' === typeof wrapEnd) ? wrapEnd : ''));
                    }
                    return stripped;
                }
            };
            frdl.Reflector = {};
            frdl.Reflector.getFunctionParameters = getFunctionParameters;
            
            
            frdl.Reflector.getFunctionName = function getFunctionName(fn, inspectBody) {
	              if ('function'===typeof fn) {
            	 	 fn = fn.toString();
            	 }												  
													  
            	 if (typeof fn !== 'string') {
            	 	  return undefined;
            	 }
													  
				 if(true!==!!inspectBody){
				     fn = frdl.str_replace(frdl.Reflector.getFunctionBody(fn), '\n', fn);
			     }
													  
            	// var result = fn.match(/function\s*(\S+)\s*\(/);
            	var result = fn.match(/function\s*(\S+)\s*\(|\(\)\=\>\s*(\S+)\s*\(/);
            	 if (!result) {
            	 	  return '';
            	 	   }
            	 	   return result[1];
            };
    frdl.Reflector.getFunctionBody = function getFunctionBody(fn) {
        function removeCommentsFromSource(str) {
            return str.replace(/(?:\/\*(?:[\s\S]*?)\*\/)|(?:([\s;])+\/\/(?:.*)$)/gm, '$1');
        }
		        if ('function'===typeof fn) {
            	 	 fn = fn.toString();
            	 }												  
													  
            	 if (typeof fn != 'string') {
            	 	  return undefined;
            	 }												  
													  
        var s = removeCommentsFromSource( fn );
       return s.substring(s.indexOf('{')+1, s.lastIndexOf('}'));
    };
													  
													  
													  
													  
													  
													  
			
				 frdl.createJavascriptObjectURL=createJavascriptObjectURL;															  
				 frdl.createHTMLObjectURL=createHTMLObjectURL;														  
				 frdl.createCSSObjectURL=createCSSObjectURL;	
													  
				 frdl.linkBLOB=__createObjectURL;										  
													  
													  
								  
																  
																  
																  
																  
																  
	//for browser ctx...															  
																  
           
   frdl.getCSS = function(src, p, once) {
            if(false===frdl.browser)throw 'Cannot frdl.getCSS() in NO_BROWSER context!';
                    frdl.ready(function() {
                        if ('undefined' === typeof once || true === once || true === p) {
                            if (null !== frdl.$q('link[href="' + frdl.str_replace('/', '\/', src) + '"]', false)) {
                                return;
                            }
                        }
                        if ('undefined' === typeof p || null === p || true === p)
                        var p = frdl.$q('head', false);
                        var style = document.createElement('link');
                        style.setAttribute('type', 'text/css');
                        style.setAttribute('rel', 'stylesheet');
                        style.setAttribute('href', src);
						p.append(style)										   
                    });
                    return frdl;
  };
																  
														  
																  
																  
																  
																  
																  
                
                (function() {
                    var lastTime = 0;
                    var vendors = ['ms', 'moz', 'webkit', 'o'];
                    for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
                        window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];
                        window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];
                    }
                    if (!window.requestAnimationFrame)
                        window.requestAnimationFrame = function(callback, element) {
                            var currTime = new Date().getTime();
                            var timeToCall = Math.max(0, 16 - (currTime - lastTime));
                            var id = window.setTimeout(function() {
                                callback(currTime + timeToCall);
                            }, timeToCall);
                            lastTime = currTime + timeToCall;
                            return id;
                        };
                    if (!window.cancelAnimationFrame)
                        window.cancelAnimationFrame = function(id) {
                            clearTimeout(id);
                        };
                    var requestAnimationFrame = window.requestAnimationFrame;
                    var cancelAnimationFrame = window.cancelAnimationFrame;
                    frdl.requestAnimationFrame = function(callback) {
                        return requestAnimationFrame.call(window, callback);
                    };
                    frdl.cancelAnimationFrame = function(id) {
                        return cancelAnimationFrame.call(window, id);
                    };
                }());
     
            frdl.getScript=function(url, callBack, doNotRemove, prepend, args) {
                var scripts = frdl.$q('script');
                if ('undefined' === typeof doNotRemove || true === doNotRemove) {
                    for (var i = 0; i < scripts.length; i++) {
                        if (url === scripts[i].getAttribute('src')) {
                            if (typeof callBack === "function" &&  scripts[i].readyState === "complete") {
                                callBack.apply(this, args);
                                  return "undefined";
                            }
                          
                        }
                    }
                }
                var head = frdl.$q("head", false);
                var script = document.createElement("script");
                script.setAttribute('src', url);
                script.setAttribute('async', 'true');
                var done = false,
                    persistent = ('undefined' === typeof doNotRemove || true === doNotRemove) ? true : false;
                script.setAttribute('type', 'text/javascript');
                /*
                script.onload = script.onreadystatechange = function() {
                    if (!done && (
                   // !this.readyState || this.readyState === "loaded" ||
                     this.readyState === "complete")) {
                        done = true;
                        if (true !== persistent) {
                            script.onload = script.onreadystatechange = null;
                            head.removeChild(script);
                        }
                        if (typeof callBack === "function") {
                            callBack.apply(this, args);
                        }
                    }
                };
                */
                script.onload =  function() {
   
                        done = true;
                        if (true !== persistent) {
                            script.onload = script.onreadystatechange = null;
                            head.removeChild(script);
                        }
                        if (typeof callBack === "function") {
                            callBack.apply(this, args);
                        }
                   
                };
                
                if (true === prepend) {
                    head.insertBefore(script, head.firstChild);
                } else {
                    head.appendChild(script);
                }
                return "undefined";
            };													  
													  
													  
													  
													  
													  
													  
													  
													  
													  
													  
													  
													  
													  
													  
													  
													  
													  
													  
													  
													  
													  
													  
  
            
          if (false === frdl.worker) {
            frdl.addReadyCheck(function() {
                if ('undefined' === typeof $)return false;
                return true;
            });
                     	
            	
             //   frdl.addReadyCheck(function() {
             //           return ('undefined' !== typeof frdl.a && 'function' === typeof frdl.a.module) ? true : false;
             //   });    
         }   // if (false === frdl.worker) {      
            
            
            
            
      
                
                
                
                
                
                
                
                
                
                
                
                
    
mapLoader();
require(['webfan/bootcache!webfan/webfanURLParser'], function(webfanURLParser){	
   frdl.Url = webfanURLParser;
});	//require webfan/bootcache!webfan/webfanURLParser	
require(['webfan/bootcache!webfan/NamespacePlugin'], function(NamespacePlugin){
	    	 frdl.ns = NamespacePlugin;	
             frdl.ns.plugin('webfan', function(){
                     extend({
                         $Async : frdl.requirejs.nextTick
                     });
             });
});		// require(['webfan/bootcache!webfan/NamespacePlugin'
(function(){
   require(['webfan/bootcache!Slim'], function(Slim){
       frdl.Slim = Slim;
  });
}());
      
   
            var DomObject = function(selector) {
                return this.init(selector);
            };
            DomObject.prototype = {
                element: null,
                init: function(selector) {
                    var $ = ('undefined' !== typeof jQuery) ? jQuery : document.querySelector;
                    this.element = ('string' === typeof selector) ? $(selector) : selector;
                    return this;
                },
                attrAdd: function(k, v, delimiter, el) {
                    var del = delimiter;
                    var El = (delimiter && !el) ? ((null !== delimiter) ? $(delimiter) : this.element) : (el) ? $(el) : this.element;
                    if ('string' !== typeof del)
                        del = ' ';
                    if ('object' !== typeof El || null === El)
                        El = this.element;
                    var a = $(El).attr(k);
                    $(El).attr(k, (('string' === typeof a && '' !== a) ? a + del : '') + v);
                    return this;
                },
                attrHas: function(attr, value, el) {
                    if ('undefined' === typeof el)
                        var el = this.element;
                    if (!el.hasAttribute(attr))
                        return false;
                    var a = el.getAttribute(attr).split(/\s+|,/);
                    return (-1 === a.indexOf(value)) ? false : true;
                },
                after: function(newNode, prevNode) {
                    if ('undefined' === typeof prevNode)
                        prevNode = this.element || this;
                    prevNode.parentNode.insertBefore(newNode, prevNode.nextSibling);
                },
                getTagNames: function(tag, scope) {
                    if (null === scope || 'object' !== typeof scope)
                        scope = document;
                    return scope.getElementsByTagName(tag);
                },
                getNames: function(name) {
                    return document.getElementsByName(name);
                },
                getFormData: function(form) {
                    if (typeof FormData !== "object")
                        return this.getFormDataFallback(form);
                    var f = new FormData(form);
                    return f;
                },
                getFormDataFallback: function(form) {
                    var formElements = this.g(form).elements;
                    var postData = {};
                    for (var i = 0; i < formElements.length; i++) {
                        postData[formElements[i].name] = formElements[i].value;
                    }
                    return postData;
                },
                get: function(el) {
                    if ('object' === typeof el) {
                        return el;
                    } else if ('object' === typeof document.getElementById(el)) {
                        return document.getElementById(el);
                    } else if ('string' === typeof el) {
                        return document.querySelector(el);
                    } else {
                        return el;
                    }
                },
                g: function(el) {
                    return frdl.Dom.get(el);
                },
                getByClass: function(className, parent) {
                    parent || (parent = document);
                    var descendants = parent.getElementsByTagName('*'),
                        i = -1,
                        e, result = [];
                    while (e == descendants[++i]) {
                        ((' ' + (e['class'] || e.className) + ' ').indexOf(' ' + className + ' ') > -1) && result.push(e);
                    }
                    return result;
                },
                getStyle: function(CLASSname, raw) {
                    if ("undefined" === typeof raw)
                        var raw = true;
                    var styleSheets = document.styleSheets,
                        cl = [];
                    var styleSheetsLength = styleSheets.length;
                    for (var i = 0; i < styleSheetsLength; i++) {
                        if (styleSheets[i].rules) {
                            var classes = styleSheets[i].rules;
                        } else {
                            try {
                                if (!styleSheets[i].cssRules) {
                                    continue;
                                }
                            } catch (e) {
                                if (e.name === "SecurityError") {
                                    console.log("SecurityError. Cant read: " + styleSheets[i].href);
                                    continue;
                                }
                            }
                            var classes = styleSheets[i].cssRules;
                        }
                        if ('undefined' === typeof CLASSname || null === CLASSname) {
                            cl.push(classes);
                            continue;
                        }
                        for (var x = 0; x < classes.length; x++) {
                            if (classes[x].selectorText === CLASSname) {
                                var ret = (classes[x].cssText) ? classes[x].cssText : classes[x].style.cssText;
                                if (ret.indexOf(classes[x].selectorText) === -1 && false === raw) {
                                    ret = classes[x].selectorText + "{" + ret + "}";
                                }
                                return ret;
                            }
                        }
                    }
                    if ('undefined' === typeof CLASSname || null === CLASSname) {
                        return cl;
                    }
                },
                isVisible: function(sel) {
                    var el = ('object' === typeof this.g(sel)) ? this.g(sel) : sel;
                    if (el !== null && typeof el !== 'undefined' && $(el).css('visibility') !== 'hidden' && $(el).css('display') !== 'none') {
                        return true;
                    } else {
                        return false;
                    }
                },
                isFramed: function() {
                   	
                    try {
                        return frdl.Device().Modernizr.framed;
                    } catch (err) {
                        try {
                              return window.self !== window.top;
                        } catch (e) {
                             return true;
                        }                  
                    }
                                 	
                },
                addText: function(txt, dest) {
                    var t = document.createTextNode(txt);
                    dest = ('object' === typeof dest) ? dest : frdl.Dom.g(dest);
                    dest.appendChild(t);
                },
                add: function(el, dest, prepend) {
                    el = ('object' === typeof el && null !== el) ? el : frdl.Dom.g(el);
                    dest = ('object' === typeof dest && null !== dest) ? dest : frdl.Dom.g(dest);
                    if ('undefined' !== typeof dest && null !== dest) {
                        if ('undefined' !== typeof prepend && true === prepend) {
                            dest.insertBefore(el, dest.firstChild);
                        } else if ('function' === typeof dest.appendChild) {
                            dest.appendChild(el);
                        } else {
                            $(dest).append(el);
                        }
                    } else {
                        console.warn('ERR:');
                        console.dir(arguments);
                        console.dir(dest);
                    }
                },
                remove: function(el) {
                    el = frdl.Dom.g(el);
                    if (null === el)
                        return;
                    el.parentNode.removeChild(el);
                },
                create: function(tag) {
                    return document.createElement(tag);
                },
                createFragment: function() {
                    return document.createDocumentFragment();
                },
                copy: function(element, cloneChildsBool) {
                    if (cloneChildsBool != true && cloneChildsBool != false) {
                        cloneChildsBool = true;
                    }
                    return element.cloneNode(cloneChildsBool);
                },
                insertAtCursor: function(myField, myValue, mod, afterValue) {
                    var field = frdl.Dom.g(myField);
                    if (typeof mod === "undefined")
                        mod = "deleteSelected";
                    if (document.selection) {
                        field.focus();
                        sel = document.selection.createRange();
                        sel.text = myValue;
                    } else if (field.selectionStart || field.selectionStart == '0') {
                        var startPos = field.selectionStart;
                        var endPos = field.selectionEnd;
                        if (mod === "deleteSelected") {
                            field.value = field.value.substring(0, startPos) + myValue + field.value.substring(endPos, field.value.length);
                        } else if (mod === "render") {
                            field.value = field.value.substring(0, startPos) + myValue + field.value.substring(startPos, endPos) + afterValue + field.value.substring(endPos, field.value.length);
                        } else if (mod === "insert") {
                            field.value = field.value.substring(0, startPos) + myValue + field.value.substring(startPos, endPos) + field.value.substring(endPos, field.value.length);
                        } else {
                            field.value = field.value.substring(0, startPos) + myValue + field.value.substring(endPos, field.value.length);
                        }
                    } else {
                        field.value += myValue;
                    }
                },
                createCSSClass: function(selector, style) {
                    if (!document.styleSheets) {
                        return;
                    }
                    if (document.getElementsByTagName("head").length === 0) {
                        return;
                    }
                    var styleSheet, i;
                    var mediaType;
                    if (document.styleSheets.length > 0) {
                        for (i = 0; i < document.styleSheets.length; i++) {
                            if ("undefined" === typeof document.styleSheets[i] || document.styleSheets[i].disabled) {
                                continue;
                            }
                            var media = document.styleSheets[i].media;
                            mediaType = typeof media;
                            if (mediaType === "string") {
                                if (media === "" || (media.indexOf("screen") !== -1)) {
                                    styleSheet = document.styleSheets[i];
                                }
                            } else if (mediaType === "object") {
                                if (media.mediaText === "" || (media.mediaText.indexOf("screen") !== -1)) {
                                    styleSheet = document.styleSheets[i];
                                }
                            }
                            if (typeof styleSheet !== "undefined") {
                                break;
                            }
                        }
                    }
                    if (typeof styleSheet === "undefined") {
                        var styleSheetElement = document.createElement("style");
                        styleSheetElement.type = "text/css";
                        document.getElementsByTagName("head")[0].appendChild(styleSheetElement);
                        for (i = 0; i < document.styleSheets.length; i++) {
                            if ("undefined" === typeof document.styleSheets[i] || document.styleSheets[i].disabled) {
                                continue;
                            }
                            styleSheet = document.styleSheets[i];
                        }
                        var media = styleSheet.media;
                        mediaType = typeof media;
                    }
                    if (mediaType === "string") {
                        for (i = 0; i < styleSheet.rules.length; i++) {
                            if (styleSheet.rules[i].selectorText.toLowerCase() === selector.toLowerCase()) {
                                styleSheet.rules[i].style.cssText = style;
                                return;
                            }
                        }
                        styleSheet.addRule(selector, style);
                    } else if (mediaType === "object") {
                        try {
                            for (i = 0; i < styleSheet.cssRules.length; i++) {
                                if (styleSheet.cssRules[i].selectorText.toLowerCase() === selector.toLowerCase()) {
                                    styleSheet.cssRules[i].style.cssText = style;
                                    return;
                                }
                            }
                        } catch (e) {
                            return;
                        }
                        styleSheet.insertRule(selector + "{" + style + "}", 0);
                    }
                },
                addStylesheetRules: function(rules, merge) {
                    var styleEl = document.createElement('style'),
                        styleSheet;
                    document.head.appendChild(styleEl);
                    styleSheet = styleEl.sheet;
                    for (var i = 0, rl = rules.length; i < rl; i++) {
                        var j = 1,
                            rule = rules[i],
                            selector = rules[i][0],
                            propStr = '',
                            k;
                        if (Object.prototype.toString.call(rule[1][0]) === '[object Array]') {
                            rule = rule[1];
                            j = 0;
                        }
                        for (var pl = rule.length; j < pl; j++) {
                            var prop = rule[j];
                            propStr += prop[0] + ':' + prop[1] + (prop[2] ? ' !important' : '') + ';\n';
                            $(selector).css(prop[0], prop[1] + (prop[2] ? ' !important' : ''));
                        }
                        styleSheet.insertRule(selector + '{' + propStr + '}', styleSheet.cssRules.length);
                    }
                },
                draggable: function(id, id2, save, load) {
                    try {
                        var wDrag = new DragObject(this.g(id), this.g(id2));
                        wDrag.ondrop = function() {
                            if (save === true)
                                wDrag.saveToStore();
                            return true;
                        };
                        if (load === true)
                            wDrag.loadFromStore();
                    } catch (err) {
                        console.log(err);
                        return;
                    }
                },
    
                config: {
                    regex: {
                        jsonParse: /("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)|("[\w\-^\/]\/[\w\-^\/]")|("[A-Za-z\-.0-9\/^"<>=]+[^"<>=]")|("1.3.6.1.4.1[0-9\.^\/A-Za-z<>=]{0,}")|("[\w\.\-]+@[\w\.\-]+\.[\w\.\-]+")/g,
                        url: /("([A-Za-z]+)(:\/\/)([0-9.\-A-Za-z]+)?([0-9\-A-Za-z]+)([.]{1})([A-Za-z]+)(\/)?([^\\"]+)?")/g
                    },
                    renderJSON: {
                        defaultRules: function(_) {
                            var kFound = false,
                                THIS = _,
                                regex_package = {
                                    name: 'Package',
                                    regex: /((")?[\w\-^\/]+\/[\w\-^\/]+(")?)/,
                                    type: 'string',
                                    style: function(match) {
                                        var html = '',
                                            m = match;
                                        m = str_replace('"', '', m);
                                        m = str_replace(':', '', m);
                                        var p;
                                        if ((p = explode('/', m)).length === 2) {
                                            html = '<a style="text-decoration:underline;color:blue;cursor:pointer;" title="Package: ' + htmlentities(p[0] + '/' + p[1]) + '" onclick="$(frdl.wd()).package(\'c\', \'' + p[0] + '\', \'' + p[1] + '\');">' + p[0] + '/' + p[1] + '</a>';
                                        } else {
                                            html = m;
                                        }
                                        return html;
                                    }
                                },
                                regex_any = {
                                    name: 'any',
                                    regex: /("[A-Za-z\-.0-9^"<>=]+[^"<>=]")/g,
                                    type: 'any non html',
                                    style: function(match) {
                                        var m = str_replace(':', '', str_replace('"', '', match.trim()));
                                        var p, html;
                                        if ((p = explode('/', m)).length === 2) {
                                            var title = _T.pTitle(p[0], p[1]);
                                            html = '<a style="text-decoration:underline;color:blue;cursor:pointer;" title="Package: ' + htmlentities(title) + '" onclick="$(frdl.wd()).package(\'c\', \'' + p[0] + '\', \'' + p[1] + '\');">' + title + '</a>';
                                        } else {
                                            html = match;
                                        }
                                        return html;
                                    }
                                };
                            return {
                                def: function(match) {
                                    return match;
                                },
                                defKey: function(match) {
                                    return '<span class="webfan-red" style="font-size:1.1em;">' + str_replace('"', '', match.substr(-1 * match.length - 2)).ucfirst() + '</span>';
                                },
                                types: [{
                                    name: 'True',
                                    regex: /true/,
                                    type: 'boolean',
                                    style: 'color:lightgreen;'
                                }, {
                                    name: 'False',
                                    regex: /false/,
                                    type: 'boolean',
                                    style: 'color:lightred;'
                                }, {
                                    name: 'Null',
                                    regex: /null/,
                                    type: 'nil',
                                    style: 'color:magenta;'
                                }, {
                                    name: 'Number',
                                    regex: /-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/,
                                    type: 'number',
                                    style: 'color:darkorange;'
                                }, {
                                    name: 'Unicode',
                                    regex: /"(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?/,
                                    type: 'string',
                                    style: 'color:green;'
                                }, {
                                    name: 'OID',
                                    regex: /1.3.6.1.4.1[0-9\.^\/A-Za-z<>=]{0,}/,
                                    type: 'string',
                                    style: function(match) {
                                        var OID = str_replace('"', '', match);
                                        return '<a href="http://look-up.webfan.de/' + OID + '">' + OID + '</a>';
                                    }
                                }, {
                                    name: 'Email',
                                    regex: /[\w\.\-]+@[\w\.\-]+\.[\w\.\-]+/,
                                    type: 'string',
                                    style: function(match) {
                                        var mail = str_replace('"', '', match);
                                        return '<a href="mailto:' + mail + '">' + mail + '</a>';
                                    }
                                }, regex_package],
                                keys: [{
                                    name: 'NumKey',
                                    regex: /((")?[0-9]{1,}(")?)/,
                                    type: 'key',
                                    style: function(match) {
                                        if (true === kFound)
                                            return str_replace('"', '', match);
                                        kFound = true;
                                        return ''
                                    }
                                }],
                                any: regex_any,
                                punctuation: {
                                    name: 'Punctuation',
                                    regex: /(([\s])?([\.\[\{]{1})[^"])|([\]]{1}[^"])|([\}]{1}[^"]|[^"][\}]{1})|([\,]{1}[^"]|[^"][\,]{1}|[\,]{1}[\r\n]|[^"][\,]{1}[^"]|"[\,]{1}"|[\,]{1}[\[\{]|[\]\}][\,]{1}|[\r\n][\]]{1})/g,
                                    type: 'punctuation',
                                    style: function(match) {
                                        var comma = '</li><li>',
                                            m = str_replace('"', '', match.trim());
                                        var result = null;
                                        if (',' === m)
                                            result = comma;
                                        if ('[' === m)
                                            result = '<ol style="list-style:list;"><li>';
                                        if (']' === m)
                                            result = '</li></ol>';
                                        if ('{' === m)
                                            result = '<ul style="list-style:list;"><li>';
                                        if ('}' === m)
                                            result = '</li></ul>';
                                        if ('],' === m)
                                            result = '</li></ol>' + comma;
                                        if ('string' === typeof result)
                                            return result;
                                        return match;
                                    }
                                },
                                spaces: {
                                    name: 'Spaces',
                                    regex: /([\r\n]{2,})/g,
                                    type: 'lnbr',
                                    style: function(match) {
                                        return "\r\n";
                                    }
                                },
                                url: {
                                    name: 'Url',
                                    regex: Dom.config.regex.url,
                                    type: 'string',
                                    style: function(match) {
                                        var om = match,
                                            u;
                                        om = str_replace('"', '', om);
                                        var url = (u = new frdl.Url(om)).urlMakeNew(),
                                            maxLength = 16,
                                            maxSub = 6;
                                        if ('' === u.getHost() && '' === u.getPath())
                                            return match;
                                        var linktext = u.getHost() + (('' !== u.getPath()) ? ('/' + u.getPath()) : '');
                                        linktext = (linktext.length > maxLength) ? (linktext.substr(0, maxLength) + '...' + linktext.substr((maxSub * -1))) : linktext;
                                        return '<a href="' + url + '">' + linktext + '</a>';
                                    }
                                }
                            };
                        }
                    }
                },
                renderJSON: function(json, rr, code, pre, REGEX) {
                    if (typeof json !== 'string') {
                        json = JSON.stringify(json, undefined, '\t');
                    }
                    var rules = this.config.renderJSON.defaultRules();
                    if ('undefined' !== typeof jQuery) {
                        rules = Object.create(rules, ('object' === typeof rr) ? rr : {});
                    } else {
                        for (var k in rr) {
                            rules[k] = rr[k];
                        }
                    }
                    var str = json.replace((('undefined' !== typeof REGEX && null !== REGEX) ? REGEX : Dom.config.regex.jsonParse), function(match) {
                        var i = 0,
                            p;
                        if (rules.punctuation.regex.test(match)) {
                            if ('string' === typeof rules.punctuation.style) {
                                return '<span style="' + rules.punctuation.style + '">' + match + '</span>';
                            } else if ('function' === typeof rules.punctuation.style) {
                                return rules.punctuation.style(match);
                            } else {
                                return match;
                            }
                        }
                        if (/^"/.test(match)) {
                            if (/:$/.test(match)) {
                                for (i = 0; i < rules.keys.length; i++) {
                                    p = rules.keys[i];
                                    if (p.regex.test(match)) {
                                        if ('string' === typeof p.style) {
                                            return '<span style="' + p.style + '">' + match + '</span>';
                                        } else if ('function' === typeof p.style) {
                                            return p.style(match);
                                        } else {
                                            return match;
                                        }
                                    }
                                }
                                return ('function' === typeof rules.defKey) ? rules.defKey(match) : '<span style="' + rules.defKey + '">' + match + '</span>';
                            } else {
                                return match;
                            }
                        } else {
                            for (i = 0; i < rules.types.length; i++) {
                                p = rules.types[i];
                                if (p.regex.test(match)) {
                                    if ('string' === typeof p.style) {
                                        return '<span style="' + p.style + '">' + match + '</span>';
                                    } else if ('function' === typeof p.style) {
                                        return p.style(match);
                                    } else {
                                        return match;
                                    }
                                }
                            }
                        }
                    });
                    str = str.replace(rules.punctuation.regex, function(match) {
                        if ('function' === typeof rules.punctuation.style) {
                            return rules.punctuation.style(match);
                        } else if ('string' === typeof rules.punctuation.style) {
                            return '<span style="' + rules.punctuation.style + '">' + match + '</span>';
                        } else {
                            return match;
                        }
                    });
                    str = str.replace(rules.url.regex, function(match) {
                        if ('function' === typeof rules.url.style) {
                            return rules.url.style(match);
                        } else if ('string' === typeof rules.url.style) {
                            return '<span style="' + rules.url.style + '">' + match + '</span>';
                        } else {
                            return match;
                        }
                    });
                    str = str.replace(rules.any.regex, function(match) {
                        if ('function' === typeof rules.any.style) {
                            return rules.any.style(match);
                        } else if ('string' === typeof rules.any.style) {
                            return '<span style="' + rules.any.style + '">' + match + '</span>';
                        } else {
                            return match;
                        }
                    });
                    str = str.replace(rules.spaces.regex, function(match) {
                        if ('function' === typeof rules.spaces.style) {
                            return rules.spaces.style(match);
                        } else if ('string' === typeof rules.spaces.style) {
                            return '<span style="' + rules.spaces.style + '">' + match + '</span>';
                        } else {
                            return match;
                        }
                    });
                    if (true === pre)
                        str = '<pre>' + str + '</pre>';
                    if (true === code)
                        str = '<code>' + str + '</code>';
                    return str;
                },
                bringToFront: function(selector, dSiblings) {
                    if ('undefined' === typeof selector)
                        var selector = this.element;
                    var zmax = 1,
                        d = Dom.getTagNames('*'),
                        i = 0,
                        m = 1,
                        _Siblings = (true === dSiblings) ? true : false;
                    for (i = 0; i < d.length; i++) {
                        var e = d[i];
                        var cur = parseInt(e.style.zIndex);
                        if (isNaN(cur))
                            continue;
                        if (cur > 2 && cur >= zmax - 1)
                            cur--;
                        zmax = cur > zmax ? cur : zmax;
                        e.style.zIndex = cur;
                    }
                    try {
                        if ('string' === typeof selector && ('#' === selector.substr(0, 1) || '.' === selector.substr(0, 1))) {} else if ('string' === typeof selector.selector) {
                            selector = selector.selector;
                        } else if ('string' === typeof selector) {
                            selector = '#' + selector;
                        }
                        $(selector).css('zIndex', ++zmax);
                        if (true === _Siblings)
                            $(selector).siblings().css('zIndex', ++zmax);
                    } catch (err) {
                        console.warn(err + ' : ' + JSON.stringify(selector));
                    }
                }
            };
            let Dom = frdl.Dom = new DomObject(window.document || global);										
										
										
										
                var HOST_API = 'api.webfan.de';   
                
              // var HOST_CDN_PUBLIC_FRDL = 'webfan.de'; 
             //     requirejs.s.contexts._.config.baseUrl
              var HOST_CDN_PUBLIC_FRDL = location.host; 
                     var _h = HOST_CDN_PUBLIC_FRDL.split(/./);
                     _h = _h.reverse();
                    if('webfan'===_h[1]){
                    	     var h = location.host.split(/:/);
                       		HOST_CDN_PUBLIC_FRDL = h[0];
					}else{
						 HOST_CDN_PUBLIC_FRDL = 'webfan.de'; 
					}
                 
                var urlAliasMap = {
             
                    HOST_CDN_PUBLIC_FRDL: HOST_CDN_PUBLIC_FRDL,
              
                    HOST_API: HOST_API,
                    CLI_CONFIG: function() {
                        return location.protocol + '//' + frdl.route('HOST_CDN_PUBLIC_FRDL') + '/cdn/frdl/flow/components/webfan/cli/clisetup/clisetup';
                    },
                    DEMO_API_CLIENT_URL: false,
                    DEMO_API_CLIENT_URL_ALT: false,
                    API_URL: location.protocol + '//' + 'interface.' + HOST_API + '/v1/public/frdl/bounce/cli.jsonp',
                    API_ENDPOINT: location.protocol + '//' + 'interface.' + HOST_API + '/v1/public/',
                    'FRDL.URL.SERACHENGINE.PLUGIN': location.protocol + '//' + 'suche.webfan.de/searchplugin.xml',
                    'FRDL.URL.MANIFEST.WEBAPP.WEBFAN.MY': location.protocol + '//' + 'webfan.de/manifest.webapp',
                    'jQueryMobile.autoInitializePage': false,
                    'jQueryMobile.ajaxEnabled': false,
                    'jQueryMobile.linkBindingEnabled': false,
                    'jQueryMobile.hashListeningEnabled': false,
                    'jQueryMobile.pushStateEnabled': false
                };
                frdl.route = function(alias, params, path, options) {
                    return ('function' === typeof urlAliasMap[alias]) ? urlAliasMap[alias](alias, params, path, options) : urlAliasMap[alias];
                };
                frdl.Route = function(r, v) {
                     var args = Array.prototype.slice.call(arguments);
                      if(0===args.length)return urlAliasMap;
                    if ('undefined' === typeof v && 'object' === typeof r) {
                        frdl.each(r, function(i, R) {
                            urlAliasMap[i] = R;
                        });
                    } else if ('undefined' === typeof urlAliasMap[r] && ('function' === typeof v || 'string' === typeof v)) {
                        urlAliasMap[r] = v;
                    } else if ('undefined' !== typeof urlAliasMap[r] && (null === v || typeof v === typeof urlAliasMap[r])) {
                        urlAliasMap[r] = v;
                    } else if ('undefined' === typeof v && 'undefined' === typeof r) {
                        return urlAliasMap;
                    }  else if ('string' === typeof v && 'string' === typeof r) {
                        urlAliasMap[r] = v;
                    } else if ('function' === typeof urlAliasMap[r] && ('undefined' !== v && 'function' !== typeof v)) {
                   
                       return urlAliasMap[r].apply(args.shift(), args);
                    } else {
                         
                        frdl.Throw('framework', 'Invalid arguments: frdl.Route(' + JSON.stringify(r) + ', ' + JSON.stringify(v) + ');');
                    }
                    return urlAliasMap[r];
                };
       require(['webfan/bootcache!mobile-detect', 'feature!Modernizr'], function(mobileDetect, moderniZr){
       
                 frdl.Modernizr = window.Modernizr;
				frdl.Device = function(){
					 var MobileDetect = mobileDetect;
					 var Modernizr =  moderniZr;
					 var md = new MobileDetect(navigator.userAgent);
                    
				      var Device={
					  	      Modernizr : Modernizr,
                              mq : frdl.Modernizr.mq,
					  	      MobileDetect : md,
					  	      isMobile : !!md.is('mobile') ,
					  	      isTablet : !!md.is('tablet') ,
					  	      isPhone : !!md.is('phone') ,
					  	      isDesktop : !md.is('mobile') && !md.is('tablet') && !md.is('phone') ,
                              os: navigator.platform,
                              OS :navigator.platform
					  }	;
					  
        
					  return Device;
				};					
        });
    
(function(){ 
/**
 Serialize Closures + Classes 
 
// Native:
 var fn=alert;require(['seri'], function(seri){console.log('seri', seri);var s = seri.stringify(fn);console.log('s', s);var N = seri.parse(s).fromJSON();console.log('Unserializerd',  N);N('Hello world');})
 
// Custom:
 var fn=frdl.explode;require(['seri'], function(seri){console.log('seri', seri);var s = seri.stringify(fn);console.log('s', s);var N = seri.parse(s).fromJSON();console.log('Unserializerd',  N);N('Hello world');}) 
 
  
    frdl.task('Tests', 'schedule', new  (frdl.task().serial)( function(resolve, reject){ frdl.task('Tests').pause();console.log('this', console.log, this);resolve(this);} , 
                                                              console.log, 7, 'asf'));frdl.task('Tests').pause();
                                                              
                                                              
*/
/*!  
  frdl.task('Tests', 'schedule', function(){ frdl.task('Tests').pause();console.log('this', this);}, 2, 'tesdtfunc', console.log);
  
    frdl.task('Tests', 'schedule', new  frdl.task().serial( function(){ frdl.task('Tests').pause();console.log('this', console.log, this);}, 2, 'tesdtfunc'), 2, 'tesdtfunc', console.log);
 
    frdl.task('Teusts', 'schedule', new  frdl.task().serial( function(){ frdl.task('Teusts').pause();console.log('this', console.log, this);} , 
                                                              console.log, 2, 'tefsdhggjfshssgdggxsdggdghadgdgtsdgsgdfunc'),
                                    2, 'tefshdhgfshssggdghadgdgtsdgsgdfunc', console.log);
*/
var _task = false;           
frdl.MagicHelper.emitter.on('task', function(evData){
		//	 evData.result = 'TESTPROPERTY';	
		
function DoIt(){
	evData.result = _task.apply(frdl.plug('de.webfan.frdl.cdn.cdn.frdl.flow.components.webfan.queue'), evData.args);
}		
		
																				  
 if('undefined'===typeof _task || false === _task){
 		        
 require(['frdlcjs!seri', 'webfan/bootcache!webfan/tasks-2'], function( seri, TaskQueue){
	
                
         
 //   function SerialTask(fn, callback, priority, description) {
 class SerialTask {
           		 constructor(fn, callback, priority, description){
                  	if('undefined'===typeof description){
						var description='SerialTask ' + new Date();
					}
                  	
                  	
                    this.priority = priority || 1;
                    this.description =description;
                    
                    this.fn = fn;
                    this.callback = callback;
                    
                   
                    this.run = function() {
                        var _self = this;
                        _self.queue.hold();
                        var fnParams = frdl.Reflector.getFunctionParameters(_self.fn);
                    if(2===fnParams.length && 'resolve'===fnParams[0] && 'reject'===fnParams[1]){
						var Fn = new Promise(_self.fn);
					}else{
							var Fn = new Promise(function(resolve, reject){
								   var res =  _self.fn();
								   
								   if(false===res 
								  //   || undefined === res 
								     || null===res
								       ||  res instanceof Error
								     ){
							              reject(res);
						            }else{
							            resolve(res);
						            }
						
							});			
					}
							Fn.then(function(d){
								_self.onSuccess(d);
							}, function(reason){
								_self.onFail(reason);
							});		
							
			                       
                    };
                   this.onSuccess = function(data) {
                        if ('function' === typeof this.callback) {
                            this.callback(null, data);
                        } else if ('string' === typeof this.callback && 'frdl.alert' === this.callback) {
                            var util = require('util');
                            var opts = {
                                showHidden: true,
                                depth: 2
                            };
                            frdl.alert.success(frdl.htmlentities('>...') + '<br />' + frdl.htmlentities('>') + util.inspect(data, opts));
                        }
                        this.queue.release(this.taskId);
                    };
                   this.onFail = function(err) {
                        if ('function' === typeof this.callback) {
                            this.callback(err);
                        } else if ('string' === typeof this.callback && 'frdl.alert' === this.callback) {
                            frdl.alert.error(err);
                        }
                    //    this.queue.release(this.taskId);
                    };
                    
                  }//constructor    
                  
                  
                  
   fromJSON(json) {
  	if(!seri.hasClass(SerialTask))seri.addClass(SerialTask);	
  	
	if('undefined'===typeof json){
	  var json = this. toJSON();
	}
		
 	  	var deserialized = seri.parse(    json  ); 
	
	
	  	
	return new SerialTask(seri.parse(    deserialized.fn  ), seri.parse(    deserialized.callback  ),  deserialized.priority,  deserialized.description);
  }
  	
	
  toJSON() {
  	if(!seri.hasClass(SerialTask))seri.addClass(SerialTask);	
	  	var serialized = {
	  		priority:this.priority,
	  		description:this.description,
	  		fn :  seri.stringify(    this.fn  ),
	  		callback :  seri.stringify(    this.callback  )
	  	};
	  	
	return seri.stringify(    serialized  );  	
  }
 }//	class SerialTask
                    
                    
                                   
                
                                    
           
                var _TaskQueueGroups = {};
                var _frdlTasks = Object.create({
                  //  cli: CLITask,
                   // ql: CLITask,
                    
                    serial : SerialTask
                });
                    Object.defineProperty(_frdlTasks, 'tasks', {
                        get: function() {
                            return _TaskQueueGroups;
                        },
                        set: function(val) {
                            throw 'write to frdl.task().tasks from public scope';
                        },
                        configurable: false
                    });
                var __isOnPruning = false;
                var pruneTasks = function() {
                    __isOnPruning = true;
                    (('undefined' !== typeof webfan && 'function' === typeof webfan.$Async) ? webfan.$Async : setTimeout)(function() {
                        __isOnPruning = false;
                        frdl.each(_TaskQueueGroups, function(groupName, queue) {
                            if (!!_TaskQueueGroups[groupName] && 0 === queue.count()) {
                                (('undefined' !== typeof webfan && 'function' === typeof webfan.$Async) ? webfan.$Async : setTimeout)(function() {
                                    if (!!_TaskQueueGroups[groupName] && 0 === queue.count()) {
                                        (('undefined' !== typeof webfan && 'function' === typeof webfan.$Async) ? webfan.$Async : setTimeout)(function() {
                                            if (!!_TaskQueueGroups[groupName] && 0 === _TaskQueueGroups[groupName].count()) {
                                                _TaskQueueGroups[groupName].clearAll();
                                                _TaskQueueGroups[groupName] = undefined;
                                            }
                                        }, 2000);
                                    }
                                }, 2000);
                            }
                        });
                    }, 30000);
                };
                _task = function() {
                    if (false === !!__isOnPruning) {
                        (('undefined' !== typeof webfan && 'function' === typeof webfan.$Async) ? webfan.$Async : setTimeout)(pruneTasks, 60000);
                    }
                //    var TaskQueue = require('webfan/tasks');
                    var args = Array.prototype.slice.call(arguments);
                    var QueueGroup = (0 < args.length) ? args.shift() : false;
                    var method = (0 < args.length) ? args.shift() : false;
                    if (false === !!QueueGroup) {
                        return _frdlTasks;
                    }
                    if ('undefined' === typeof _TaskQueueGroups[QueueGroup]) {
                        _TaskQueueGroups[QueueGroup] = new TaskQueue(QueueGroup);
                    }
                    if (false === !!method) {
                        return _TaskQueueGroups[QueueGroup];
                    }
                    return _TaskQueueGroups[QueueGroup][method].apply(_TaskQueueGroups[QueueGroup], args);
                };
                
	      
     
                // evData.result = frdl.task;		
                DoIt();
 });                
																						  
																						  
 }// if('undefined'===typeof frdl.task()){      
  else{
  	DoIt();
  }
 																					  
});																						  
																				
}());     																					  
																						  
						
	
                      (function() {
                            /*! https://github.com/mohayonao/inline-worker/blob/master/index.js */
                            'use strict';
                            function WORKER_ENABLED() {
                                return !!(global === global.window && global.URL && global.Blob && global.Worker);
                            }
                            function InlineWorker(func, self) {
                                var _this = this;
                                var functionBody;
                                self = self || {};
                                if (WORKER_ENABLED()) {
                                    functionBody = func.toString().trim().match(/^function\s*\w*\s*\([\w\s,]*\)\s*{([\w\W]*?)}$/)[1];
                                    return new global.Worker(global.URL.createObjectURL(new global.Blob([functionBody], {
                                        type: "text/javascript"
                                    })));
                                }
                                function postMessage(data) {
                                    setTimeout(function() {
                                        _this.onmessage({
                                            data: data
                                        });
                                    }, 0);
                                }
                                this.self = self;
                                this.self.postMessage = postMessage;
                                setTimeout(func.bind(self, self), 0);
                            }
                            InlineWorker.prototype.postMessage = function postMessage(data) {
                                var _this = this;
                                setTimeout(function() {
                                    _this.self.onmessage({
                                        data: data
                                    });
                                }, 0);
                            };
    
                            frdl.InlineWorker = InlineWorker;
    
                      }());
            
						
								
require([ 
        
      //   'webfan/bootcache!fs',
          
          'webfan/bootcache!Sha1',
	      'webfan/bootcache!webfan/navigator/dom-observer-new', 
           
           'webfan/bootcache!libraries/angular/angular-9x'		
           
           
           
						  
],
function(  
       
        //   fs,
           
           
        //   jQuery,
           Sha1,
         //   webfanURLParser,
     //       browser,           worker,                      
          
           watchFor,
           angular
           
           
           ){
	// console.log(frdl.fs);
 														  
	 // frdl.fs = frdl.fs5 = fs;		
     // frdl.fs.polyfill.check(true);  
            
              frdl.Sha1 = Sha1;
       
             
            //  frdl.Url = webfanURLParser;
           //   if('undefined'===typeof browser)browser=false;
         //     if('undefined'===typeof worker)worker=false;
           //   frdl.browser=browser;
           //   frdl.worker = worker;
         
             frdl.watchFor=watchFor;
																					  
																						  
	
(function(angular) {
/*
frdl.MagicHelper.addMethodCallback(angular, 'module', false, function(sModuleName, asDependencies){
    var Plugin  = frdl.ns.plugin(sModuleName);
   return {
        Plugin : Plugin
   };
});
*/
  //frdl.a=angular;
  Object.defineProperty(frdl, 'a', {
       get : function(){
           return angular;
       }
   });
}(angular));	
/*! https://stackoverflow.com/questions/24889783/angularjs-get-list-of-all-registered-modules/24890518#24890518 
Now you can select modules:
angular.modules.select('app.modules.*')
Creating modules tree:
var app = angular.module('app.module.users', ['ui.router'...]);
var app = angular.module('app.module.users.edit', ['app.modules.users']);
Your main module app (concat submodules)
angular.module('app', ['ui.bootstrap', 'app.services', 'app.config']
.concat(angular.modules.select('app.module.*')));
*/
(function(angular) {
    var orig = angular.module;
    angular.modules = [];
    angular.modules.select = function(query) {
        var cache = [], reg = new RegExp(query || '.*');
        for(var i=0,l=this.length;i< l;i++){
            var item = this[i];
            if(reg.test(item)){
                cache.push(item)
            }
        }
        return cache;
    };
    angular.module = function() {
        var args = Array.prototype.slice.call(arguments);
        if (args.length > 1) {
            angular.modules.push(args[0]);
           var app = orig.apply(null, args);
           var appName = args[0];
            app[Symbol.frdl.Plugin.valueOf()]=function WebfanPlugin(){
                  return frdl.plug(appName, arguments[0]);
            };
           
            Object.defineProperty(app, 'runInContext', {
                  get : function(){
                       return  app[Symbol.frdl.Plugin.valueOf()];
                   }
            });
            return app;
         }else{
               return orig.apply(null, args);
        }
   };
	
    angular.defined = function(m) {
        return angular.modules.indexOf(m) > -1;
    };	
}(angular));																					  
 
								  
								  
require([
'webfan/bootcache!webfan/frdl-main-x8',
// 'webfan/bootcache!querystring',
'webfan/bootcache!url',
'webfan/bootcache!buffer'
, 'webfan/bootcache!webfan/webfanURLParser'
], 
													  
function( 
mainModule,
// querystring,								  
url,
buffer
, webfanURLParser						  
){
    frdl.Url = webfanURLParser; 	
	global.buffer=buffer;											  
	frdl.url = url;				
   
   
								
   frdl.main = new mainModule(frdl,  frdl.webfan);
                 frdl.addReadyCheck(function() {
                    return ('undefined' !== typeof frdl.main && true === frdl.main.ready() ) ? true : false;
                });   
          /*  
		    if (false === frdl.worker) {																			  
               frdl.addReadyCheck(function() {
                    return ('undefined' !== typeof frdl.UI && 'function' === typeof frdl.UI.widget  ) ? true : false;
                });   
            }                   
			*/																			  
																						  
	     frdl.wd = function(_m) {
                        function load(m) {
                            if ('undefined' !== typeof m && true !== m)
                                var m = false;
                            if ('function' === typeof $.WebfanDesktop.toggleDesktop && true === m && !frdl.Dom.isVisible(frdl.$q('*[data-frdl-mod="workspace"]', false))) {
                                $.WebfanDesktop.toggleDesktop();
                            } else if ('function' !== typeof $.WebfanDesktop.toggleDesktop && ('undefined' !== typeof m && false !== m)) {
                                $.WebfanDesktop = $.WebfanDesktop(m);
                            } else if ('function' !== typeof $.WebfanDesktop.toggleDesktop && ('undefined' === typeof m || false === m)) {
                                $.WebfanDesktop = $.WebfanDesktop(m);
                            }
                         frdl.webfan.$Async(function() {
							frdl.ready(function() {															  
                                if (false === m && frdl.Dom.isVisible(frdl.$q('*[data-frdl-mod="workspace"]', false))) {
                                    $.WebfanDesktop.hide();
                                } else if (true === m && !frdl.Dom.isVisible(frdl.$q('*[data-frdl-mod="workspace"]', false))) {
                                    $.WebfanDesktop.show();
                                }
                                frdl.webfan.$Async(function() {
                                    $.WebfanDesktop.loadDesktopWidgets();
                                }, 1);
																						  
                                frdl.require.state.emit('resolved', {
                                    identifier: 'frdl.wd',
                                    module: $.WebfanDesktop
                                });
                                frdl.require.state.emit('resolved frdl.wd', {
                                    identifier: 'frdl.wd',
                                    module: $.WebfanDesktop
                                });
							});															  
                          }, 2000);
                         return $.WebfanDesktop;
                        }
                       
						$.WebfanDesktop = load(_m);
                        return $.WebfanDesktop;
                    };																					  
																						  
					
             //   frdl.addReadyCheck(function() {
              //        return ('undefined' !== typeof frdl.Hash && 'function' === typeof frdl.Hash.on) ? true : false;
              //  });        
   
   
  });//  require(['frdlcjs!webfan/frdl-main-x8'], function( mainModule){
});//'webfan/bootcache!libraries/angular/angular-9x'		
/*misc*/
 function WebfanCreateCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
    var u = new frdl.Url('');
   
    var url = u.getLocation();
    var host = u.getHost();
    var h = host.split(".");
	document.cookie = name+"="+value+expires+";domain=."+h[h.length-2]+"."+h[h.length-1]+";path=/";
	document.cookie = name+"="+value+expires+";domain=.webfan.de;path=/";
}
function WebfanCreateCookieSeconds(name,value,s) {
	if (s) {
		var date = new Date();
		date.setTime(date.getTime()+(s*1000));
		var expires = "; expires="+date.toGMTString();
	}else var expires = "";
	
    var u = new frdl.Url('');
    
    var url = u.getLocation();
    var host = u.getHost();
    var h = host.split(".");
	document.cookie = name+"="+value+expires+";domain=."+h[h.length-2]+"."+h[h.length-1]+";path=/";
}
function WebfanReadCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}
function WebfanEraseCookie(name) {
	WebfanCreateCookie(name,"",-1);
}   
/*! frdl.ns.SFRDL (Frdl Standard Library) */
/*! http://locutus.io/php */
function extend(from, to) {
                if (from === null || typeof from !== 'object')
                    return from;
                if (from.constructor !== Object && from.constructor !== Array)
                    return from;
                if (from.constructor === Date || from.constructor === RegExp || from.constructor === Function || from.constructor === String || from.constructor === Number || from.constructor === Boolean)
                    return new from.constructor(from);
                to = to || new from.constructor();
                var name;
                for (name in from) {
                    to[name] = typeof to[name] === 'undefined' ? extend(from[name], null) : to[name];
                }
                return to;
}
function clone(obj) {
                    var clone = extend(obj);
                    return clone;
}
function str_replace(search, replace, subject) {
                if ('string' !== typeof subject)
                    return '';
                try {
                    return subject.split(search).join(replace);
                } catch (err) {
                    if (0 < frdl.debug.mode() && 'undefined' !== typeof console)
                        console.warn(err);
                    return '';
                }
}
											 
											 
											 
											 
											 
											 
            function html_entity_decode(string, quote_style) {
                var hash_map = {},
                    symbol = '',
                    tmp_str = '',
                    entity = '',
                    tmp_str = string.toString();
                if (false === (hash_map = get_html_translation_table('HTML_ENTITIES', quote_style))) {
                    return false;
                }
                delete(hash_map['&']);
                hash_map['&'] = '&';
                for (symbol in hash_map) {
                    entity = hash_map[symbol];
                    tmp_str = tmp_str.split(entity).join(symbol);
                }
                tmp_str = tmp_str.split(''').join("'");
                return tmp_str;
            }
            function get_html_translation_table(table, quote_style) {
                var entities = {},
                    hash_map = {},
                    decimal;
                var constMappingTable = {},
                    constMappingQuoteStyle = {};
                var useTable = {},
                    useQuoteStyle = {};
                constMappingTable[0] = 'HTML_SPECIALCHARS';
                constMappingTable[1] = 'HTML_ENTITIES';
                constMappingQuoteStyle[0] = 'ENT_NOQUOTES';
                constMappingQuoteStyle[2] = 'ENT_COMPAT';
                constMappingQuoteStyle[3] = 'ENT_QUOTES';
                useTable = !isNaN(table) ? constMappingTable[table] : table ? table.toUpperCase() : 'HTML_SPECIALCHARS';
                useQuoteStyle = !isNaN(quote_style) ? constMappingQuoteStyle[quote_style] : quote_style ? quote_style.toUpperCase() : 'ENT_COMPAT';
                if (useTable !== 'HTML_SPECIALCHARS' && useTable !== 'HTML_ENTITIES') {
                    return false;
                }
                entities['38'] = '&';
                if (useTable === 'HTML_ENTITIES') {
                    entities['160'] = ' ';
                    entities['161'] = '¡';
                    entities['162'] = '¢';
                    entities['163'] = '£';
                    entities['164'] = '¤';
                    entities['165'] = '¥';
                    entities['166'] = '¦';
                    entities['167'] = '§';
                    entities['168'] = '¨';
                    entities['169'] = '©';
                    entities['170'] = 'ª';
                    entities['171'] = '«';
                    entities['172'] = '¬';
                    entities['173'] = '­';
                    entities['174'] = '®';
                    entities['175'] = '¯';
                    entities['176'] = '°';
                    entities['177'] = '±';
                    entities['178'] = '²';
                    entities['179'] = '³';
                    entities['180'] = '´';
                    entities['181'] = 'µ';
                    entities['182'] = '¶';
                    entities['183'] = '·';
                    entities['184'] = '¸';
                    entities['185'] = '¹';
                    entities['186'] = 'º';
                    entities['187'] = '»';
                    entities['188'] = '¼';
                    entities['189'] = '½';
                    entities['190'] = '¾';
                    entities['191'] = '¿';
                    entities['192'] = 'À';
                    entities['193'] = 'Á';
                    entities['194'] = 'Â';
                    entities['195'] = 'Ã';
                    entities['196'] = 'Ä';
                    entities['197'] = 'Å';
                    entities['198'] = 'Æ';
                    entities['199'] = 'Ç';
                    entities['200'] = 'È';
                    entities['201'] = 'É';
                    entities['202'] = 'Ê';
                    entities['203'] = 'Ë';
                    entities['204'] = 'Ì';
                    entities['205'] = 'Í';
                    entities['206'] = 'Î';
                    entities['207'] = 'Ï';
                    entities['208'] = 'Ð';
                    entities['209'] = 'Ñ';
                    entities['210'] = 'Ò';
                    entities['211'] = 'Ó';
                    entities['212'] = 'Ô';
                    entities['213'] = 'Õ';
                    entities['214'] = 'Ö';
                    entities['215'] = '×';
                    entities['216'] = 'Ø';
                    entities['217'] = 'Ù';
                    entities['218'] = 'Ú';
                    entities['219'] = 'Û';
                    entities['220'] = 'Ü';
                    entities['221'] = 'Ý';
                    entities['222'] = 'Þ';
                    entities['223'] = 'ß';
                    entities['224'] = 'à';
                    entities['225'] = 'á';
                    entities['226'] = 'â';
                    entities['227'] = 'ã';
                    entities['228'] = 'ä';
                    entities['229'] = 'å';
                    entities['230'] = 'æ';
                    entities['231'] = 'ç';
                    entities['232'] = 'è';
                    entities['233'] = 'é';
                    entities['234'] = 'ê';
                    entities['235'] = 'ë';
                    entities['236'] = 'ì';
                    entities['237'] = 'í';
                    entities['238'] = 'î';
                    entities['239'] = 'ï';
                    entities['240'] = 'ð';
                    entities['241'] = 'ñ';
                    entities['242'] = 'ò';
                    entities['243'] = 'ó';
                    entities['244'] = 'ô';
                    entities['245'] = 'õ';
                    entities['246'] = 'ö';
                    entities['247'] = '÷';
                    entities['248'] = 'ø';
                    entities['249'] = 'ù';
                    entities['250'] = 'ú';
                    entities['251'] = 'û';
                    entities['252'] = 'ü';
                    entities['253'] = 'ý';
                    entities['254'] = 'þ';
                    entities['255'] = 'ÿ';
                }
                if (useQuoteStyle !== 'ENT_NOQUOTES') {
                    entities['34'] = '"';
                }
                if (useQuoteStyle === 'ENT_QUOTES') {
                    entities['39'] = ''';
                }
                entities['60'] = '<';
                entities['62'] = '>';
                for (decimal in entities) {
                    if (entities.hasOwnProperty(decimal)) {
                        hash_map[String.fromCharCode(decimal)] = entities[decimal];
                    }
                }
                return hash_map;
            }
            function htmlentities(string, quote_style, charset, double_encode) {
                var hash_map = get_html_translation_table('HTML_ENTITIES', quote_style),
                    symbol = '';
                string = string == null ? '' : string + '';
                if (!hash_map) {
                    return false;
                }
                if (quote_style && quote_style === 'ENT_QUOTES') {
                    hash_map["'"] = ''';
                }
                if (!!double_encode || double_encode == null) {
                    for (symbol in hash_map) {
                        if (hash_map.hasOwnProperty(symbol)) {
                            string = string.split(symbol).join(hash_map[symbol]);
                        }
                    }
                } else {
                    string = string.replace(/([\s\S]*?)(&(?:#\d+|#x[\da-f]+|[a-zA-Z][\da-z]*);|$)/g, function(ignore, text, entity) {
                        for (symbol in hash_map) {
                            if (hash_map.hasOwnProperty(symbol)) {
                                text = text.split(symbol).join(hash_map[symbol]);
                            }
                        }
                        return text + entity;
                    });
                }
                return string;
            }
            function mt_rand(min, max) {
                var argc = arguments.length;
                if (argc === 0) {
                    min = 0;
                    max = 2147483647;
                } else if (argc === 1) {
                    min = 0;
                    max = min;
                } else if (min < max) {
                    min = parseInt(min);
                    max = parseInt(max);
                } else {
                    min = 0;
                    max = 2147483647;
                }
                return Math.floor(Math.random() * (max - min + 1)) + min;
            }
            function strpos(haystack, needle, offset) {
                var i = (haystack + '').indexOf(needle, (offset || 0));
                return i === -1 ? false : i;
            }
            function base64_encode(data) {
                var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
                var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,
                    ac = 0,
                    enc = "",
                    tmp_arr = [];
                if (!data) {
                    return data;
                }
                do {
                    o1 = data.charCodeAt(i++);
                    o2 = data.charCodeAt(i++);
                    o3 = data.charCodeAt(i++);
                    bits = o1 << 16 | o2 << 8 | o3;
                    h1 = bits >> 18 & 0x3f;
                    h2 = bits >> 12 & 0x3f;
                    h3 = bits >> 6 & 0x3f;
                    h4 = bits & 0x3f;
                    tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
                } while (i < data.length);
                enc = tmp_arr.join('');
                var r = data.length % 3;
                return (r ? enc.slice(0, r - 3) : enc) + '==='.slice(r || 3);
            }
            function base64_decode(data) {
                var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
                var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,
                    ac = 0,
                    dec = "",
                    tmp_arr = [];
                if (!data) {
                    return data;
                }
                data += '';
                do {
                    h1 = b64.indexOf(data.charAt(i++));
                    h2 = b64.indexOf(data.charAt(i++));
                    h3 = b64.indexOf(data.charAt(i++));
                    h4 = b64.indexOf(data.charAt(i++));
                    bits = h1 << 18 | h2 << 12 | h3 << 6 | h4;
                    o1 = bits >> 16 & 0xff;
                    o2 = bits >> 8 & 0xff;
                    o3 = bits & 0xff;
                    if (h3 == 64) {
                        tmp_arr[ac++] = String.fromCharCode(o1);
                    } else if (h4 == 64) {
                        tmp_arr[ac++] = String.fromCharCode(o1, o2);
                    } else {
                        tmp_arr[ac++] = String.fromCharCode(o1, o2, o3);
                    }
                } while (i < data.length);
                dec = tmp_arr.join('');
                return dec;
            }
            function base64_detect(str) {
                var base64Detect = new RegExp("^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})$");
                if (base64Detect.test(str)) {
                    return true;
                } else {
                    return false;
                }
            }
            function urlencode(str) {
                str = (str + '').toString();
                return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').replace(/\)/g, '%29').replace(/\*/g, '%2A').replace(/%20/g, '+');
            }
            function urldecode(str) {
                return decodeURIComponent((str + '').replace(/\+/g, '%20'));
            }
            function explode(delimiter, string, limit) {
                if (arguments.length < 2 || typeof delimiter === 'undefined' || typeof string === 'undefined')
                    return null;
                if (delimiter === '' || delimiter === false || delimiter === null)
                    return false;
                if (typeof delimiter === 'function' || typeof delimiter === 'object' || typeof string === 'function' || typeof string === 'object') {
                    return [0];
                }
                if (delimiter === true)
                    delimiter = '1';
                delimiter += '';
                string += '';
                var s = string.split(delimiter);
                if (typeof limit === 'undefined')
                    return s;
                if (limit === 0)
                    limit = 1;
                if (limit > 0) {
                    if (limit >= s.length)
                        return s;
                    return s.slice(0, limit - 1).concat([s.slice(limit - 1).join(delimiter)]);
                }
                if (-limit >= s.length)
                    return [];
                s.splice(s.length + limit);
                return s;
            }
            function strip_tags(str, allow) {
                var allow = (((allow || "") + "").toLowerCase().match(/<[a-z][a-z0-9]*>/g) || []).join('');
                var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>/gi;
                var commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi;
                return str.replace(commentsAndPhpTags, '').replace(tags, function($0, $1) {
                    return allow.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : '';
                });
            }											 
											 
											 
											 
											 
											 
											 
														  
  function createJavascriptObjectURL(func){
     var functionBody = frdl.Reflector.getFunctionBody(func);
     return URL.createObjectURL(new Blob([functionBody], {
       type: "text/javascript"
    }));
  }												  
				
							  
													  
													  
														  
  function createHTMLObjectURL(HTML){
     return URL.createObjectURL(new Blob([HTML], {
       type: "text/html"
    }));
  }														  
													  
															  
  function createCSSObjectURL(css){
     return URL.createObjectURL(new Blob([css], {
       type: "text/css"
    }));
  }														  
				
  function __createObjectURL(type, content){
	 if(false!==frdl.strpos(type, 'script')){
	   return frdl.createJavascriptObjectURL(content);										  
	}												  
													  
     return URL.createObjectURL(new Blob([content], {
       type: type
    }));
  }														  
													  
		
 function dashToCamel(dash) {
        return dash.indexOf('-') < 0 ? dash : dash.replace(/-[a-z]/g, function (m) {
          return m[1].toUpperCase();
        });
 }
 function camelToDash(camel) {
        return camel.replace(/([A-Z])/g, '-$1').toLowerCase();
  }
function dechex (number) {
  if (number < 0) {
    number = 0xFFFFFFFF + number + 1;
  }
  return parseInt(number, 10)
    .toString(16);
}
function hexdec (hexString) {
  hexString = (hexString + '').replace(/[^a-f0-9]/gi, '');
  return parseInt(hexString, 16);
}
 return frdl;       
});
 |