//################################################################################################################################################################################################
var G_UNIQUEID = 0;
var G_CKE = [];



//################################################################################################################################################################################################
Encoder = {

	// When encoding do we convert characters into html or numerical entities
	EncodeType : "entity",  // entity OR numerical

	isEmpty : function(val){
		if(val){
			return ((val===null) || val.length==0 || /^\s+$/.test(val));
		}else{
			return true;
		}
	},
	
	// arrays for conversion from HTML Entities to Numerical values
	arr1: ['&nbsp;','&iexcl;','&cent;','&pound;','&curren;','&yen;','&brvbar;','&sect;','&uml;','&copy;','&ordf;','&laquo;','&not;','&shy;','&reg;','&macr;','&deg;','&plusmn;','&sup2;','&sup3;','&acute;','&micro;','&para;','&middot;','&cedil;','&sup1;','&ordm;','&raquo;','&frac14;','&frac12;','&frac34;','&iquest;','&Agrave;','&Aacute;','&Acirc;','&Atilde;','&Auml;','&Aring;','&AElig;','&Ccedil;','&Egrave;','&Eacute;','&Ecirc;','&Euml;','&Igrave;','&Iacute;','&Icirc;','&Iuml;','&ETH;','&Ntilde;','&Ograve;','&Oacute;','&Ocirc;','&Otilde;','&Ouml;','&times;','&Oslash;','&Ugrave;','&Uacute;','&Ucirc;','&Uuml;','&Yacute;','&THORN;','&szlig;','&agrave;','&aacute;','&acirc;','&atilde;','&auml;','&aring;','&aelig;','&ccedil;','&egrave;','&eacute;','&ecirc;','&euml;','&igrave;','&iacute;','&icirc;','&iuml;','&eth;','&ntilde;','&ograve;','&oacute;','&ocirc;','&otilde;','&ouml;','&divide;','&oslash;','&ugrave;','&uacute;','&ucirc;','&uuml;','&yacute;','&thorn;','&yuml;','&quot;','&amp;','&lt;','&gt;','&OElig;','&oelig;','&Scaron;','&scaron;','&Yuml;','&circ;','&tilde;','&ensp;','&emsp;','&thinsp;','&zwnj;','&zwj;','&lrm;','&rlm;','&ndash;','&mdash;','&lsquo;','&rsquo;','&sbquo;','&ldquo;','&rdquo;','&bdquo;','&dagger;','&Dagger;','&permil;','&lsaquo;','&rsaquo;','&euro;','&fnof;','&Alpha;','&Beta;','&Gamma;','&Delta;','&Epsilon;','&Zeta;','&Eta;','&Theta;','&Iota;','&Kappa;','&Lambda;','&Mu;','&Nu;','&Xi;','&Omicron;','&Pi;','&Rho;','&Sigma;','&Tau;','&Upsilon;','&Phi;','&Chi;','&Psi;','&Omega;','&alpha;','&beta;','&gamma;','&delta;','&epsilon;','&zeta;','&eta;','&theta;','&iota;','&kappa;','&lambda;','&mu;','&nu;','&xi;','&omicron;','&pi;','&rho;','&sigmaf;','&sigma;','&tau;','&upsilon;','&phi;','&chi;','&psi;','&omega;','&thetasym;','&upsih;','&piv;','&bull;','&hellip;','&prime;','&Prime;','&oline;','&frasl;','&weierp;','&image;','&real;','&trade;','&alefsym;','&larr;','&uarr;','&rarr;','&darr;','&harr;','&crarr;','&lArr;','&uArr;','&rArr;','&dArr;','&hArr;','&forall;','&part;','&exist;','&empty;','&nabla;','&isin;','&notin;','&ni;','&prod;','&sum;','&minus;','&lowast;','&radic;','&prop;','&infin;','&ang;','&and;','&or;','&cap;','&cup;','&int;','&there4;','&sim;','&cong;','&asymp;','&ne;','&equiv;','&le;','&ge;','&sub;','&sup;','&nsub;','&sube;','&supe;','&oplus;','&otimes;','&perp;','&sdot;','&lceil;','&rceil;','&lfloor;','&rfloor;','&lang;','&rang;','&loz;','&spades;','&clubs;','&hearts;','&diams;'],
	arr2: ['&#160;','&#161;','&#162;','&#163;','&#164;','&#165;','&#166;','&#167;','&#168;','&#169;','&#170;','&#171;','&#172;','&#173;','&#174;','&#175;','&#176;','&#177;','&#178;','&#179;','&#180;','&#181;','&#182;','&#183;','&#184;','&#185;','&#186;','&#187;','&#188;','&#189;','&#190;','&#191;','&#192;','&#193;','&#194;','&#195;','&#196;','&#197;','&#198;','&#199;','&#200;','&#201;','&#202;','&#203;','&#204;','&#205;','&#206;','&#207;','&#208;','&#209;','&#210;','&#211;','&#212;','&#213;','&#214;','&#215;','&#216;','&#217;','&#218;','&#219;','&#220;','&#221;','&#222;','&#223;','&#224;','&#225;','&#226;','&#227;','&#228;','&#229;','&#230;','&#231;','&#232;','&#233;','&#234;','&#235;','&#236;','&#237;','&#238;','&#239;','&#240;','&#241;','&#242;','&#243;','&#244;','&#245;','&#246;','&#247;','&#248;','&#249;','&#250;','&#251;','&#252;','&#253;','&#254;','&#255;','&#34;','&#38;','&#60;','&#62;','&#338;','&#339;','&#352;','&#353;','&#376;','&#710;','&#732;','&#8194;','&#8195;','&#8201;','&#8204;','&#8205;','&#8206;','&#8207;','&#8211;','&#8212;','&#8216;','&#8217;','&#8218;','&#8220;','&#8221;','&#8222;','&#8224;','&#8225;','&#8240;','&#8249;','&#8250;','&#8364;','&#402;','&#913;','&#914;','&#915;','&#916;','&#917;','&#918;','&#919;','&#920;','&#921;','&#922;','&#923;','&#924;','&#925;','&#926;','&#927;','&#928;','&#929;','&#931;','&#932;','&#933;','&#934;','&#935;','&#936;','&#937;','&#945;','&#946;','&#947;','&#948;','&#949;','&#950;','&#951;','&#952;','&#953;','&#954;','&#955;','&#956;','&#957;','&#958;','&#959;','&#960;','&#961;','&#962;','&#963;','&#964;','&#965;','&#966;','&#967;','&#968;','&#969;','&#977;','&#978;','&#982;','&#8226;','&#8230;','&#8242;','&#8243;','&#8254;','&#8260;','&#8472;','&#8465;','&#8476;','&#8482;','&#8501;','&#8592;','&#8593;','&#8594;','&#8595;','&#8596;','&#8629;','&#8656;','&#8657;','&#8658;','&#8659;','&#8660;','&#8704;','&#8706;','&#8707;','&#8709;','&#8711;','&#8712;','&#8713;','&#8715;','&#8719;','&#8721;','&#8722;','&#8727;','&#8730;','&#8733;','&#8734;','&#8736;','&#8743;','&#8744;','&#8745;','&#8746;','&#8747;','&#8756;','&#8764;','&#8773;','&#8776;','&#8800;','&#8801;','&#8804;','&#8805;','&#8834;','&#8835;','&#8836;','&#8838;','&#8839;','&#8853;','&#8855;','&#8869;','&#8901;','&#8968;','&#8969;','&#8970;','&#8971;','&#9001;','&#9002;','&#9674;','&#9824;','&#9827;','&#9829;','&#9830;'],
		
	// Convert HTML entities into numerical entities
	HTML2Numerical : function(s){
		return this.swapArrayVals(s,this.arr1,this.arr2);
	},	

	// Convert Numerical entities into HTML entities
	NumericalToHTML : function(s){
		return this.swapArrayVals(s,this.arr2,this.arr1);
	},


	// Numerically encodes all unicode characters
	numEncode : function(s){ 
		if(this.isEmpty(s)) return ""; 

		var a = [],
			l = s.length; 
		
		for (var i=0;i<l;i++){ 
			var c = s.charAt(i); 
			if (c < " " || c > "~"){ 
				a.push("&#"); 
				a.push(c.charCodeAt()); //numeric value of code point 
				a.push(";"); 
			}else{ 
				a.push(c); 
			} 
		} 
		
		return a.join(""); 	
	}, 
	
	// HTML Decode numerical and HTML entities back to original values
	htmlDecode : function(s){

		var c,m,d = s;
		
		if(this.isEmpty(d)) return "";

		// convert HTML entites back to numerical entites first
		d = this.HTML2Numerical(d);
		
		// look for numerical entities &#34;
		arr=d.match(/&#[0-9]{1,5};/g);
		
		// if no matches found in string then skip
		if(arr!=null){
			for(var x=0;x<arr.length;x++){
				m = arr[x];
				c = m.substring(2,m.length-1); //get numeric part which is refernce to unicode character
				// if its a valid number we can decode
				if(c >= -32768 && c <= 65535){
					// decode every single match within string
					d = d.replace(m, String.fromCharCode(c));
				}else{
					d = d.replace(m, ""); //invalid so replace with nada
				}
			}			
		}

		return d;
	},		

	// encode an input string into either numerical or HTML entities
	htmlEncode : function(s,dbl){
			
		if(this.isEmpty(s)) return "";

		// do we allow double encoding? E.g will &amp; be turned into &amp;amp;
		dbl = dbl || false; //default to prevent double encoding
		
		// if allowing double encoding we do ampersands first
		if(dbl){
			if(this.EncodeType=="numerical"){
				s = s.replace(/&/g, "&#38;");
			}else{
				s = s.replace(/&/g, "&amp;");
			}
		}
		// convert the xss chars to numerical entities ' " < >
		s = this.XSSEncode(s,false);
		
		if(this.EncodeType=="numerical" || !dbl){
			// Now call function that will convert any HTML entities to numerical codes
			s = this.HTML2Numerical(s);
		}

		// Now encode all chars above 127 e.g unicode
		s = this.numEncode(s);

		// now we know anything that needs to be encoded has been converted to numerical entities we
		// can encode any ampersands & that are not part of encoded entities
		// to handle the fact that I need to do a negative check and handle multiple ampersands &&&
		// I am going to use a placeholder

		// if we don't want double encoded entities we ignore the & in existing entities
		if(!dbl){
			s = s.replace(/&#/g,"##AMPHASH##");
		
			if(this.EncodeType=="numerical"){
				s = s.replace(/&/g, "&#38;");
			}else{
				s = s.replace(/&/g, "&amp;");
			}

			s = s.replace(/##AMPHASH##/g,"&#");
		}
		
		// replace any malformed entities
		s = s.replace(/&#\d*([^\d;]|$)/g, "$1");

		if(!dbl){
			// safety check to correct any double encoded &amp;
			s = this.correctEncoding(s);
		}

		// now do we need to convert our numerical encoded string into entities
		if(this.EncodeType=="entity"){
			s = this.NumericalToHTML(s);
		}

		return s;					
	},

	// Encodes the basic 4 characters used to malform HTML in XSS hacks
	XSSEncode : function(s,en){
		if(!this.isEmpty(s)){
			en = en || true;
			// do we convert to numerical or html entity?
			if(en){
				s = s.replace(/\'/g,"&#39;"); //no HTML equivalent as &apos is not cross browser supported
				s = s.replace(/\"/g,"&quot;");
				s = s.replace(/</g,"&lt;");
				s = s.replace(/>/g,"&gt;");
			}else{
				s = s.replace(/\'/g,"&#39;"); //no HTML equivalent as &apos is not cross browser supported
				s = s.replace(/\"/g,"&#34;");
				s = s.replace(/</g,"&#60;");
				s = s.replace(/>/g,"&#62;");
			}
			return s;
		}else{
			return "";
		}
	},

	// returns true if a string contains html or numerical encoded entities
	hasEncoded : function(s){
		if(/&#[0-9]{1,5};/g.test(s)){
			return true;
		}else if(/&[A-Z]{2,6};/gi.test(s)){
			return true;
		}else{
			return false;
		}
	},

	// will remove any unicode characters
	stripUnicode : function(s){
		return s.replace(/[^\x20-\x7E]/g,"");
		
	},

	// corrects any double encoded &amp; entities e.g &amp;amp;
	correctEncoding : function(s){
		return s.replace(/(&amp;)(amp;)+/,"$1");
	},


	// Function to loop through an array swaping each item with the value from another array e.g swap HTML entities with Numericals
	swapArrayVals : function(s,arr1,arr2){
		if(this.isEmpty(s)) return "";
		var re;
		if(arr1 && arr2){
			//ShowDebug("in swapArrayVals arr1.length = " + arr1.length + " arr2.length = " + arr2.length)
			// array lengths must match
			if(arr1.length == arr2.length){
				for(var x=0,i=arr1.length;x<i;x++){
					re = new RegExp(arr1[x], 'g');
					s = s.replace(re,arr2[x]); //swap arr1 item with matching item from arr2	
				}
			}
		}
		return s;
	},

	inArray : function( item, arr ) {
		for ( var i = 0, x = arr.length; i < x; i++ ){
			if ( arr[i] === item ){
				return i;
			}
		}
		return -1;
	}

}



//################################################################################################################################################################################################
Date.prototype.getWeekNumber = function(){
var d = new Date(Date.UTC(this.getFullYear(), this.getMonth(), this.getDate()));
var dayNum = d.getUTCDay() || 7;
d.setUTCDate(d.getUTCDate() + 4 - dayNum);
var yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));
return Math.ceil((((d - yearStart) / 86400000) + 1) / 7)
};



//################################################################################################################################################################################################
function getDateOfISOWeek(V_Year, V_Week){
var simple = new Date(V_Year, 0, (1 + ((V_Week - 1) * 7)));
var ISOweekStart = simple;
if(simple.getDay() <= 4){
	ISOweekStart.setDate(simple.getDate() - simple.getDay() + 1);
}else{ISOweekStart.setDate(simple.getDate() + 8 - simple.getDay());};
return ISOweekStart;
}



//################################################################################################################################################################################################
function XIff(V_Condition, V_True, V_False){
if(V_Condition){return V_True;};
return V_False;
};



//################################################################################################################################################################################################
function XIffTrueArray2(V_Condition, V_TrueN1, V_TrueV1, V_TrueN2, V_TrueV2, V_False){
if(V_Condition){
	var TArray = [];
	TArray[V_TrueN1] = V_TrueV1;
	TArray[V_TrueN2] = V_TrueV2;
	return TArray;
};
return V_False;
};



//################################################################################################################################################################################################
function CallFunctionByName(V_Name){
var TFunc = window[V_Name];
if(typeof TFunc !== 'function'){return;};
TFunc.apply(window, V_Param);
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function CallFunctionByNameX(V_Name, V_Param){
var TFunc = window[V_Name];
if(typeof TFunc !== 'function'){return;};
TFunc.apply(window, V_Param);
};



//################################################################################################################################################################################################
function GetFormErrTextList(V_FormErrList){
var T = '';
for(TItem in V_FormErrList){
	T += '&bull; ' + V_FormErrList[TItem][1] + '<br>';
};
return T;
};



//################################################################################################################################################################################################
function ToolTip_RePos(V_Event, V_Object){
var st = Math.max(document.body.scrollTop, document.documentElement.scrollTop);
if(navigator.userAgent.toLowerCase().indexOf('safari') >= 0) st = 0;
var leftPos = V_Event.clientX + 20;
var topPos = V_Event.clientY + st + 20;
if(leftPos < 0){leftPos = 0;};
if(topPos < 0){topPos = 0;};
if(leftPos + V_Object.offsetWidth + 20 > window.innerWidth){leftPos = window.innerWidth - (V_Object.offsetWidth + 20);};
if(topPos + V_Object.offsetHeight + 20 > window.innerHeight + st){topPos = topPos - (V_Object.offsetHeight + 40);};
V_Object.style.left = leftPos + 'px';
V_Object.style.top = topPos + 'px';
};



//################################################################################################################################################################################################
function ToolTip_Show(V_Event, V_Text){
if(document.all){V_Event = event;};
var V_Object = document.getElementById('div_tooltip');
V_Object.innerHTML = V_Text;
V_Object.style.display = 'block';
ToolTip_RePos(V_Event, V_Object);
};



//################################################################################################################################################################################################
function ToolTip_Hide(){
document.getElementById('div_tooltip').style.display = 'none';
};



//################################################################################################################################################################################################
function MakeLeadingZero(V_Num, V_Max){
var T = V_Num;
var X;
for(X = V_Num.length; X < V_Max; X ++){
	T = "0" + T;
};
return T;
};



//################################################################################################################################################################################################
function ToolTipPrepare(V_ToolTip){
if(V_ToolTip == ''){return '';};
if(typeof V_ToolTip === 'undefined'){return '';};
return ' onmousemove="ToolTip_Show(event,' + "'" + V_ToolTip + "'" + ')" onmouseout="ToolTip_Hide()"'
};



//################################################################################################################################################################################################
function HTTPRequestStateDesc(V_State){
switch(V_State){
	case -1: return 'Fehler bei der Anfrage';
	case -2: return 'Unbekannte Anfrage';
	case 1: return 'Anfrage fehlerfrei';
};
return 'Unbekannter Anfragestatus';
};



//################################################################################################################################################################################################
function HTTPRequest(V_Callback, V_SubData, V_Modul, V_Command, V_Data){
var TData = '';
TData += 'g=rq&m=' + encodeURIComponent(V_Modul) + '&f=' + encodeURIComponent(V_Command);
for(TItem in V_Data){
	if(TData != ''){TData += '&';};
	TData += encodeURIComponent(TItem) + "=" + encodeURIComponent(V_Data[TItem]);
};
var xmlhttp;
if(window.XMLHttpRequest){
	xmlhttp=new XMLHttpRequest();
}else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");};
xmlhttp.onreadystatechange = function(){
	if(xmlhttp.readyState == 4){
		if(xmlhttp.status != 200){V_Callback(-1, V_SubData, ''); return;};
		if(xmlhttp.responseText == ''){V_Callback(-2, V_SubData, ''); return;};
		V_Callback(1, V_SubData, xmlhttp.responseText);
		return;
	};
};
xmlhttp.open("POST", "/api.php");
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send(TData);
};



//################################################################################################################################################################################################
function HTTPRequestCheckReturnX(V_State, V_Data, V_NoErr){
if(V_State != 1){
	if(V_NoErr != 1){Window_Errorbox('Anfragefehler', HTTPRequestStateDesc(V_State));};
	return -1;
};
var TData
try{
	TData = JSON.parse(V_Data);
}catch(err){
	if(V_NoErr != 1){Window_Errorbox('SYSTEMFEHLER', 'Syntax in der System-Antwort ist fehlerhaft');}; return -1;
};
if(typeof TData['return'] === 'undefined'){if(V_NoErr != 1){Window_Errorbox('SYSTEMFEHLER', 'System-Antwort enthält kein RETURN Feld');}; return -1;};
if(TData['return'] == -99999){
	if(typeof TData['data']['return_msg'] === 'undefined'){if(V_NoErr != 1){Window_Errorbox('SYSTEMFEHLER', 'Unbekannter Systemfehler');}; return;};
	if(V_NoErr != 1){Window_Errorbox('SYSTEMFEHLER', TData['data']['return_msg']);};
	return -1;
};
if(typeof TData['data'] === 'undefined'){if(V_NoErr != 1){Window_Errorbox('SYSTEMFEHLER', 'System-Antwort enthält kein DATA Feld');}; return -1;};
return TData;
};



//################################################################################################################################################################################################
function HTTPRequestCheckReturn(V_State, V_Data){
return HTTPRequestCheckReturnX(V_State, V_Data, 0);
};



//################################################################################################################################################################################################
function GetFormularData(V_WinID){
var TData = [];
var TInput;
var TInputs = document.getElementById('_' + V_WinID + '_body').getElementsByTagName('input');
for(TIndex = 0; TIndex < TInputs.length; TIndex++){
	TInput = TInputs[TIndex];
	switch(TInput.dataset['ctltype']){
		case 'date':
			TData[TInput.dataset['key']] = TXFormatDate(Date_ValueGet(TInput.dataset['ctlid']));
			break;
		case 'datetime':
			TData[TInput.dataset['key']] = TXFormatDateTime(DateTime_ValueGet(TInput.dataset['ctlid']));
			break;
		case 'gebdate':
			TData[TInput.dataset['key']] = TXFormatDate(Date_ValueGet(TInput.dataset['ctlid']));
			break;
		case 'text':
			TData[TInput.dataset['key']] = Text_ValueGet(TInput.dataset['ctlid']);
			break;
		case 'email':
			TData[TInput.dataset['key']] = Text_ValueGet(TInput.dataset['ctlid']);
			break;
		case 'phone':
			TData[TInput.dataset['key']] = Text_ValueGet(TInput.dataset['ctlid']);
			break;
		case 'link':
			TData[TInput.dataset['key']] = Text_ValueGet(TInput.dataset['ctlid']);
			break;
		case 'price':
			TData[TInput.dataset['key']] = Price_ValueGet(TInput.dataset['ctlid']);
			break;
		case 'color':
			TData[TInput.dataset['key']] = Text_ValueGet(TInput.dataset['ctlid']);
			break;
		case 'password':
			TData[TInput.dataset['key']] = Text_ValueGet(TInput.dataset['ctlid']);
			break;
		case 'checkbox':
			TData[TInput.dataset['key']] = Checkbox_ValueGet(TInput.dataset['ctlid']);
			break;
		case 'radio':
			TData[TInput.dataset['key']] = Radio_ValueGet(TInput.dataset['ctlid']);
			break;
		case 'geo':
			if(TInput.dataset['key'] == 'lat'){
				TData['lat'] = Geo_ValueGet_Lat(TInput.dataset['ctlid']);
				TData['lng'] = Geo_ValueGet_Lng(TInput.dataset['ctlid']);
			};
			break;
	};
};
TInputs = document.getElementById('_' + V_WinID + '_body').getElementsByTagName('select');
for(TIndex = 0; TIndex < TInputs.length; TIndex++){
	TInput = TInputs[TIndex];
	switch(TInput.dataset['ctltype']){
		case 'dropbox':
			TData[TInput.dataset['key']] = Dropbox_ValueGet(TInput.dataset['ctlid']);
			break;
	};
};
TInputs = document.getElementById('_' + V_WinID + '_body').getElementsByTagName('textarea');
for(TIndex = 0; TIndex < TInputs.length; TIndex++){
	TInput = TInputs[TIndex];
	switch(TInput.dataset['ctltype']){
		case 'textmultiline':
			TData[TInput.dataset['key']] = Text_ValueGet(TInput.dataset['ctlid']);
			break;
		case 'textmultilinehtml':
			TData[TInput.dataset['key']] = G_CKE[TInput.dataset['ctlid']].getData();
			break;
	};
};
return TData;
};



//################################################################################################################################################################################################
function StructToLinear(V_Struct){
var TData = [];
var TItem;
for(TIndex1 = 0; TIndex1 < V_Struct.length; TIndex1 ++){
	if(V_Struct[TIndex1][1] == 1){
		for(TIndex2 = 0; TIndex2 < V_Struct[TIndex1][2].length; TIndex2 ++){
			TItem = V_Struct[TIndex1][2][TIndex2];
			TData[TItem[4]] = '';
		};
	};
};
return TData;
};



//################################################################################################################################################################################################
function Timer_Create(V_IntervalMS, V_Callback, V_Parameter){
return setInterval(function(){V_Callback(V_Parameter);}, V_IntervalMS);
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Timer_Destroy(V_TimerID){
clearInterval(V_TimerID);
};



//################################################################################################################################################################################################
function UpdateDatepicker(){
TPickerD = new Picker.Date($$('.xdatepicker'), {
	weeknumbers: true,
	animationDuration: 100
});
TPickerDT = new Picker.Date($$('.xdatetimepicker'), {
	timePicker: true,
	weeknumbers: true,
	animationDuration: 100
});
};



//################################################################################################################################################################################################
function FormatPreis(V_Preis){
if((V_Preis == '') || (V_Preis == 0) || isNaN(V_Preis) || (typeof V_Preis === 'undefined')){return '0,00';};
var TFull = Math.trunc(V_Preis / 1000);
TFull = TFull.toString();
var TPart = Math.trunc((V_Preis - (TFull * 1000)) / 10);
if(TPart > 0){
	if(TPart < 10){TPart = '0' + TPart;};
}else{TPart = '00';};
var TFullT = '';
var C = 0;
while(true){
	C ++;
	if(C > 100){break;};
	if(TFull.length > 3){
		TFullT = '.' + TFull.substring(TFull.length - 3) + TFullT;
		TFull = TFull.substring(0, TFull.length - 3);
	}else{
		TFullT = TFull + TFullT; break;
	};
};
return TFullT + ',' + TPart;
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function FormatPreisInput(V_Preis){
if((V_Preis == '') || (V_Preis == 0) || isNaN(V_Preis) || (typeof V_Preis === 'undefined')){return '0,00';};
var TFull = Math.trunc(V_Preis / 1000);
var TPart = Math.trunc((V_Preis - (TFull * 1000)) / 10);
if(TPart > 0){
	if(TPart < 10){TPart = '0' + TPart;};
}else{TPart = '00';};
return TFull + ',' + TPart;
};



//################################################################################################################################################################################################
function BuildPhoneBlocks(V_NumberString){
TLen = V_NumberString.length;
TMod = TLen % 2;
T = '';
if(TMod > 0){T += V_NumberString.substring(0, 1) + ' ';};
for(X = TMod; X <= TLen; X += 2){
	T += V_NumberString.substring(X, X + 2) + ' ';
};
if(T != ''){T = T.substring(0, T.length - 2);};
return T;
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function SplitPhonenumber(V_Number){
var PN = [];
PN['valid'] = false;
PN['land'] = '';
PN['ort'] = '';
PN['anschluss'] = '';
PN['durchwahl'] = '';
PN['paystyle'] = 0; //-> 0 = normaltarif / 1 = kostenlos / 2 = Sondertarif

//(+49) 09 06 / 70 57 45 - 7
var TNum = V_Number.replace(' ', '');
var TPos = 0;
PN['valid'] = false;
TNum = TNum.trim();
if(TNum.substring(0, 1) == '+'){
	TNum = TNum.substring(1).trim();
	TPos = 3;
	if(TPos !== -1){
		PN['land'] = TNum.substring(0, TPos - 1).trim();
		if(PN['land'].substring(0, 1) == '+'){PN['land'] = PN['land'].substring(1).trim();};
		TNum = '0' + trim(substr(TNum, TPos - 1));
	};
}else if(TNum.substring(0, 1) == '['){
	TPos = TNum.indexOf(']');
	if(TPos !== -1){
		PN['land'] = TNum.substring(1, TPos - 1).trim();
		if(PN['land'].substring(0, 1) == '+'){PN['land'] = PN['land'].substring(1).trim();};
		TNum = TNum.substring(TPos + 1).trim();
	};
}else if(TNum.substring(0, 1) == '('){
	TPos = TNum.indexOf(')');
	if(TPos !== -1){
		PN['land'] = TNum.substring(1, TPos - 1).trim();
		if(PN['land'].substring(0, 1) == '+'){PN['land'] = PN['land'].substring(1).trim();};
		TNum = TNum.substring(TPos + 1).trim();
	};
};

TPos = TNum.indexOf('/');
if(TPos === -1){
	switch(TNum){
		case '110': PN['ort'] = TNum; PN['valid'] = true;
		case '112': PN['ort'] = TNum; PN['valid'] = true;
	};
	return PN;
};

PN['ort'] = TNum.substring(0, TPos);
TNum = TNum.substring(TPos + 1);

TPos = TNum.indexOf('-');
if(TPos !== -1){
	PN['anschluss'] = TNum.substring(0, TPos);
	PN['durchwahl'] = TNum.substring(TPos + 1);
}else{
	PN['anschluss'] = TNum;
	if(PN['ort'] == ''){
		switch(PN['anschluss']){
			case '110': var TVal = PN['anschluss']; PN['anschluss'] = PN['ort']; PN['ort'] = TVal; break;
			case '112': var TVal = PN['anschluss']; PN['anschluss'] = PN['ort']; PN['ort'] = TVal; break;
		};
	};
};

if(PN['land'] == ''){PN['land'] = '49';};
if(PN['land'] == '49'){
	switch(PN['ort']){
		case '110': PN['paystyle'] = 1; break;
		case '112': PN['paystyle'] = 1; break;
		case '115': PN['paystyle'] = 2; break;
		case '0137': PN['paystyle'] = 2; break;
		case '0180': PN['paystyle'] = 2; break;
		case '0190': PN['paystyle'] = 2; break;
		case '0700': PN['paystyle'] = 2; break;
		case '0800': PN['paystyle'] = 1; break;
		case '0900': PN['paystyle'] = 2; break;
	};
};

PN['valid'] = true;

PN['land'] = PN['land'].replace(' ', '');
PN['ort'] = PN['ort'].replace(' ', '');
PN['anschluss'] = PN['anschluss'].replace(' ', '');
PN['durchwahl'] = PN['durchwahl'].replace(' ', '');

return PN;
}

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function FormatPhonenumberText(V_Phonenumber){
if(V_Phonenumber['valid'] != true){return '';};
var T = '';
if(V_Phonenumber['land'] != '49'){T += '[+' + V_Phonenumber['land'] + '] ';};
switch(V_Phonenumber['ort']){
	case '110':	return V_Phonenumber['ort']; break;
	case '112':	return V_Phonenumber['ort']; break;
	case '115': return V_Phonenumber['ort']; break;
	case '0137': T += V_Phonenumber['ort']; break;
	case '0180': T += V_Phonenumber['ort']; break;
	case '0190': T += V_Phonenumber['ort']; break;
	case '0700': T += V_Phonenumber['ort']; break;
	case '0800': T += V_Phonenumber['ort']; break;
	case '0900': T += V_Phonenumber['ort']; break;
	default: T += BuildPhoneBlocks(V_Phonenumber['ort']); break;
};
T += ' / ' + BuildPhoneBlocks(V_Phonenumber['anschluss']);
if(V_Phonenumber['durchwahl'] != ''){T += ' - ' + BuildPhoneBlocks(V_Phonenumber['durchwahl']);};
if(V_Phonenumber['land'] == '49'){
	switch(V_Phonenumber['paystyle']){
		case 0: break;
		case 1: T += ' (Regulär Kostenfrei)'; break;
		case 2: T += ' (Sondertarif)'; break;
	};
};
return T;
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function FormatPhonenumberLink(V_Phonenumber){
if(V_Phonenumber['valid'] != true){return '';};
return '+' + V_Phonenumber['land'] + V_Phonenumber['ort'].substring(1) + V_Phonenumber['anschluss'] + V_Phonenumber['durchwahl'];
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function FormatPhone(V_Phonenumber){
var TPhone = SplitPhonenumber(V_Phonenumber);
if(TPhone['valid'] != true){return '';};
return '<a href="tel:' + FormatPhonenumberLink(TPhone) + '" target="_blank">' + FormatPhonenumberText(TPhone) + '</a>';
};



//################################################################################################################################################################################################
function DateGetMonthNum(V_Date){
if(V_Date == ''){return '';};
var TDatePart = V_Date.split("-");
var TDate = new Date(TDatePart[0], TDatePart[1] - 1, TDatePart[2].substr(0, 2));
return TDate.getMonth() + 1;
};



//################################################################################################################################################################################################
function DateTimeToMS(V_DateTime){
if(V_DateTime == ''){return '';};
var TDateTimePart = V_DateTime.split(" ");
var TDatePart = TDateTimePart[0].split("-");
var TTimePart = TDateTimePart[1].split(":");
var TDate = new Date(TDatePart[0], TDatePart[1] - 1, TDatePart[2], TTimePart[0], TTimePart[1], TTimePart[2]);
return TDate.getTime();
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function FormatDate(V_Date){
if(V_Date == ''){return '';};
var TDatePart = V_Date.split("-");
var TDate = new Date(TDatePart[0], TDatePart[1] - 1, TDatePart[2].substr(0, 2));
var TDay = TDate.getDate();
if(TDay < 10){TDay = '0' + TDay;};
var TMonth = TDate.getMonth() + 1;
if(TMonth < 10){TMonth = '0' + TMonth;};
var TYear = TDate.getFullYear();
return TYear + '.' + TMonth + '.' + TDay;
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function FormatDateTime(V_DateTime){
if(V_DateTime == ''){return '';};
var TDateTimePart = V_DateTime.split(" ");
var TDatePart = TDateTimePart[0].split("-");
var TTimePart = TDateTimePart[1].split(":");

var TDate = new Date(TDatePart[0], TDatePart[1] - 1, TDatePart[2], TTimePart[0], TTimePart[1], TTimePart[2]);
var TDay = TDate.getDate();
if(TDay < 10){TDay = '0' + TDay;};
var TMonth = TDate.getMonth() + 1;
if(TMonth < 10){TMonth = '0' + TMonth;};
var TYear = TDate.getFullYear();

var THour = TDate.getHours();
if(THour < 10){THour = '0' + THour;};
var TMinute = TDate.getMinutes();
if(TMinute < 10){TMinute = '0' + TMinute;};
var TSecond = TDate.getSeconds();
if(TSecond < 10){TSecond = '0' + TSecond;};

return TYear + '.' + TMonth + '.' + TDay + ' - ' + THour + ':' + TMinute + ':' + TSecond;
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function CurDateTime(){
var TDate = new Date();
var TDay = TDate.getDate();
if(TDay < 10){TDay = '0' + TDay;};
var TMonth = TDate.getMonth() + 1;
if(TMonth < 10){TMonth = '0' + TMonth;};
var TYear = TDate.getFullYear();

var THour = TDate.getHours();
if(THour < 10){THour = '0' + THour;};
var TMinute = TDate.getMinutes();
if(TMinute < 10){TMinute = '0' + TMinute;};
var TSecond = TDate.getSeconds();
if(TSecond < 10){TSecond = '0' + TSecond;};

return TYear + '-' + TMonth + '-' + TDay + ' ' + THour + ':' + TMinute + ':' + TSecond;
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function DateTimeByParams(V_Year, V_Month, V_Day, V_Hour, V_Minute, V_Second){
var TDay = V_Day;
if(TDay < 10){TDay = '0' + TDay;};
var TMonth = V_Month;
if(TMonth < 10){TMonth = '0' + TMonth;};
var TYear = V_Year;
var THour = V_Hour;
if(THour < 10){THour = '0' + THour;};
var TMinute = V_Minute;
if(TMinute < 10){TMinute = '0' + TMinute;};
var TSecond = V_Second;
if(TSecond < 10){TSecond = '0' + TSecond;};
return TYear + '-' + TMonth + '-' + TDay + ' ' + THour + ':' + TMinute + ':' + TSecond;
};



//################################################################################################################################################################################################
function TXFormatDate(V_Date){
if(V_Date == ''){return '';};
var TDatePart = V_Date.split(".");
var TDate = new Date(TDatePart[0], TDatePart[1] - 1, TDatePart[2].substr(0, 2));
var TDay = TDate.getDate();
if(TDay < 10){TDay = '0' + TDay;};
var TMonth = TDate.getMonth() + 1;
if(TMonth < 10){TMonth = '0' + TMonth;};
var TYear = TDate.getFullYear();
return TYear + '-' + TMonth + '-' + TDay + ' 00:00:00';
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function TXFormatDateTime(V_DateTime){
if(V_DateTime == ''){return '';};
var TDateTimePart = V_DateTime.split(" - ");
var TDatePart = TDateTimePart[0].split(".");
var TTimePart = [];
if(TDateTimePart.length > 1){
	TTimePart = TDateTimePart[1].split(":");
}else{TTimePart[0] = 0; TTimePart[1] = 0; TTimePart[2] = 0;};
var TDate = new Date(TDatePart[0], TDatePart[1] - 1, TDatePart[2], TTimePart[0], TTimePart[1], TTimePart[2]);
var TDay = TDate.getDate();
if(TDay < 10){TDay = '0' + TDay;};
var TMonth = TDate.getMonth() + 1;
if(TMonth < 10){TMonth = '0' + TMonth;};
var TYear = TDate.getFullYear();

var THour = TDate.getHours();
if(THour < 10){THour = '0' + THour;};
var TMinute = TDate.getMinutes();
if(TMinute < 10){TMinute = '0' + TMinute;};
var TSecond = TDate.getSeconds();
if(TSecond < 10){TSecond = '0' + TSecond;};

return TYear + '-' + TMonth + '-' + TDay + ' ' + THour + ':' + TMinute + ':' + TSecond;
};



//################################################################################################################################################################################################
function nl2br(str, is_xhtml) {
if (typeof str === 'undefined' || str === null){return '';};
var breakTag = (is_xhtml || typeof is_xhtml === 'undefined') ? '<br />' : '<br>';
return (str + '').replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1' + breakTag + '$2');
}



//################################################################################################################################################################################################
function CTLFieldAddX(V_AsTable, V_AsView, V_EditMode, V_ParrentID, V_Top, V_Createable, V_Editable, V_Type, V_Typedata, V_Titel, V_Key, V_Value, V_ToolTip){
var TIDL = [];
TIDL['value'] = 0;
TIDL['step'] = 0;
if((V_Type == 'geo') && (V_Key != 'lat')){return TIDL;};
var TStep = 26;
var TRow = Table_Row_Create(V_ParrentID);
TIDL['row'] = TRow;
var TCell = Table_Cell_Create(TRow, '120px', V_Titel + ':');
TIDL['title'] = TCell;
Table_Cell_SetNoWrap(TCell);
var TAsView = V_AsView;
if(V_AsView == 0){
	if(V_EditMode == 0){
		if(V_Createable == 0){TAsView = 1;};
	}else{
		if(V_Editable == 0){TAsView = 1;};
	};
};
switch(V_Type){
	case "date":
	case "date6":
	case "datetime":
	case "gebdate":
		if(V_Value == '0000-00-00 00:00:00'){V_Value = '';};
		break;
};
if(TAsView == 1){
	var TValue = '';
	TStep = 20;
	switch(V_Type){
		case 'username'			: TValue = V_Value; break;
		case 'text'				: TValue = V_Value; break;
		case 'email'			: if(V_Value != ''){TValue = '<a href="mailto:' + V_Value + '" target="_blank">' + V_Value + '</a>';}; break;
		case 'color'			: TValue = '<div style="height:' + 14 + 'px;border:1px solid #000000;background-color:' + V_Value + ';"></div>'; break;
		case 'textmulti'		: TValue = nl2br(V_Value); break;
		case 'textmultihtml'	: TValue = nl2br(V_Value); break;
		case 'num'				: TValue = V_Value; break;
		case 'phone'			: TValue = FormatPhone(V_Value); break;
		case 'link':
			if(V_Value != ''){
				var XVal = V_Value;
				if((XVal.substr(0, 5).toLowerCase() != 'http:') && (XVal.substr(0, 6).toLowerCase() != 'https:')){XVal = 'http://' + V_Value;};
				TValue = '<a href="' + XVal + '" target="_blank">' + V_Value + '</a>';
			};
			break;
		case 'price'			: TValue = FormatPreis(V_Value); break;
		case 'staat'			: TValue = V_Value; break;
		case 'plz'				: TValue = V_Value; break;
		case 'iban'				: TValue = V_Value; break;
		case 'bool'				: if(V_Value == 1){TValue = '<img src="/syspic/ico/bullet_green_small.png">';}else{TValue = '<img src="/syspic/ico/bullet_gray_small.png">';}; break;
		case 'tri':
			switch(parseInt(V_Value)){
				case 0: TValue = '<img src="/syspic/ico/bullet_gray_small.png">'; break;
				case 1: TValue = '<img src="/syspic/ico/bullet_yellow_small.png">'; break;
				case 2: TValue = '<img src="/syspic/ico/bullet_green_small.png">'; break;
				default: TValue = '?';
			};
			break;
		case 'single'			: TValue = V_Typedata[V_Value]; break;
		case 'date'				: TValue = XIff(V_Value != '', FormatDate(V_Value), ''); break;
		case 'date6'			: TValue = XIff(V_Value != '', FormatDate(V_Value), ''); break;
		case 'datetime'			: TValue = XIff(V_Value != '', FormatDateTime(V_Value), ''); break;
		case 'gebdate'			: TValue = XIff(V_Value != '', FormatDate(V_Value), ''); break;
		case 'imagefdid'		: TValue = '<img class="ctl_imagebgwait" src="/api.php?g=rq&m=system&f=file&th=1&fdid=' + parseInt(V_Value) + '" style="max-width:100%;max-height:180px;">'; break;
		case 'geo':
			TStep = TStep * 10;
			TCtlID = Table_Cell_Create(TRow, '', TValue);
			Ctl_SetDimensionX(TCtlID, '100%', TStep + 'px');
			TIDL['value'] = TCtlID;
			TIDL['step'] = TStep;
			var TCtlIDGeo = Geo_Create(TCtlID, 0, 0, 0, 0, '', V_Value, 1);
			Ctl_SetDimensionX(TCtlIDGeo, '100%', TStep + 'px');
			return TIDL;
	};
	TCtlID = Table_Cell_Create(TRow, '', TValue);
	TIDL['value'] = TCtlID;
	TIDL['step'] = TStep;
	return TIDL;
};
switch(V_Type){
	case 'username'			: 						TCtlID = Input_Add_Text				(TRow, 120, V_Top, TStep, V_Key, V_Value, V_ToolTip); break;
	case 'text'				: 						TCtlID = Input_Add_Text				(TRow, 120, V_Top, TStep, V_Key, V_Value, V_ToolTip); break;
	case 'email'			: 						TCtlID = Input_Add_Text				(TRow, 120, V_Top, TStep, V_Key, V_Value, V_ToolTip); break;
	case 'color'			: 						TCtlID = Input_Add_Color			(TRow, 120, V_Top, TStep, V_Key, V_Value, V_ToolTip); break;
	case 'textmulti'		: TStep = TStep * 4;	TCtlID = Input_Add_TextMulti		(TRow, 120, V_Top, TStep, V_Key, V_Value, V_ToolTip); break;
	case 'textmultihtml'	: TStep = TStep * 16;	TCtlID = Input_Add_TextMultiHTML	(TRow, 120, V_Top, TStep, V_Key, V_Value, V_ToolTip); break;
	case 'num'				: 						TCtlID = Input_Add_Text				(TRow, 120, V_Top, TStep, V_Key, V_Value, V_ToolTip); break;
	case 'phone'			: 						TCtlID = Input_Add_Phone			(TRow, 120, V_Top, TStep, V_Key, V_Value, V_ToolTip); break;
	case 'link'				: 						TCtlID = Input_Add_Link				(TRow, 120, V_Top, TStep, V_Key, V_Value, V_ToolTip); break;
	case 'price'			: 						TCtlID = Input_Add_Price			(TRow, 120, V_Top, TStep, V_Key, V_Value, V_ToolTip); break;
	case 'plz'				: 						TCtlID = Input_Add_Text				(TRow, 120, V_Top, TStep, V_Key, V_Value, V_ToolTip); break;
	case 'bool'				: 						TCtlID = Input_Add_Checkbox			(TRow, 120, V_Top, TStep, V_Key, V_Value, V_ToolTip); break;
	case 'tri':
		TTypeData = [];
		TTypeData[0] = 'Nein';
		TTypeData[1] = 'Tri';
		TTypeData[2] = 'Ja';
		TCtlID = Input_Add_Dropbox(TRow, 120, V_Top, TStep, V_Key, TTypeData, V_Value);
		break;
	case 'iban'				: 						TCtlID = Input_Add_Text				(TRow, 120, V_Top, TStep, V_Key, V_Value, V_ToolTip); break;
	case 'single':
		TCtlID = Input_Add_Dropbox(TRow, 120, V_Top, TStep, V_Key, V_Typedata, V_Value);
		//if(V_EditMode == 1){if(V_Editable != 1){Dropbox_Lock(TCtlID, 1);};};
		break;
	case 'date'				: 						TCtlID = Input_Add_Date				(TRow, 120, V_Top, TStep, V_Key, V_Value, V_ToolTip); TIDL['btndate'] = TCtlID['btndate']; TCtlID = TCtlID['value']; break;
	case 'date6'			: 						TCtlID = Input_Add_Date6			(TRow, 120, V_Top, TStep, V_Key, V_Value, V_ToolTip); TIDL['btndate'] = TCtlID['btndate']; TCtlID = TCtlID['value']; break;
	case 'datetime'			: 						TCtlID = Input_Add_DateTime			(TRow, 120, V_Top, TStep, V_Key, V_Value, V_ToolTip); TIDL['btndate'] = TCtlID['btndate']; TIDL['btntime'] = TCtlID['btntime']; TCtlID = TCtlID['value']; break;
	case 'gebdate'			: 						TCtlID = Input_Add_Date				(TRow, 120, V_Top, TStep, V_Key, V_Value, V_ToolTip); TIDL['btndate'] = TCtlID['btndate']; TCtlID = TCtlID['value']; break;
	case 'imagefdid'		: 						TCtlID = Input_Add_Text				(TRow, 120, V_Top, TStep, V_Key, V_Value, V_ToolTip); break;
	case 'staat'			: 						TCtlID = Input_Add_Text				(TRow, 120, V_Top, TStep, V_Key, V_Value, V_ToolTip); break;
	case 'geo'				: TStep = TStep * 10;	TCtlID = Input_Add_Geo				(TRow, 120, V_Top, TStep, V_Key, V_Value, V_ToolTip); break;
};
TIDL['value'] = TCtlID;
TIDL['step'] = TStep;
return TIDL;
};



//################################################################################################################################################################################################
function CTLFieldAdd(V_AsView, V_EditMode, V_ParrentID, V_Top, V_Createable, V_Editable, V_Type, V_Typedata, V_Titel, V_Key, V_Value, V_ToolTip){
return CTLFieldAddX(0, V_AsView, V_EditMode, V_ParrentID, V_Top, V_Createable, V_Editable, V_Type, V_Typedata, V_Titel, V_Key, V_Value, V_ToolTip);
};




//################################################################################################################################################################################################
var G_Desktop_WinID = 0;
var G_Desktop_Menu_WinID = 0;
var G_Desktop_Menu_ListID = 0;



//################################################################################################################################################################################################
function Desktop_Create(){
if(G_Desktop_WinID != 0){return;};
G_Desktop_WinID = Window_Create(0, 0, 0, 100, 100, '');
Window_SetDimensionX(G_Desktop_WinID, '100%', '100%');
Window_SetTitlebarvisibility(G_Desktop_WinID, 0);
Window_SetMoveable(G_Desktop_WinID, 0);
Window_SetSizeable(G_Desktop_WinID, 0);
Window_SetCloseable(G_Desktop_WinID, 0);
var TWin = document.getElementById('_' + G_Desktop_WinID + '_window');
TWin.dataset['moveontoponfocus'] = 0;
Window_SetBackgroundColor(G_Desktop_WinID, 204, 204, 204, 1);
Window_SetBGPattern(G_Desktop_WinID, 'syspic/bg.png')
Desktop_Menu_Create();

Desktop_Menu_Visibility(1);
};



//################################################################################################################################################################################################
function Desktop_Destroy(){
Desktop_Menu_Visibility(0);
Window_Destroy(G_Desktop_WinID);
G_Desktop_WinID = 0;
G_WindowFocus = null;
G_WindowList = [];
};



//################################################################################################################################################################################################
function Desktop_Menu_Visibility(V_Visible){
var TDiv;
if(V_Visible == 1){
	TDiv = document.getElementById('div_menu')
	TDiv.style.height = '37px';
	TDiv.style.display = 'block';
	TDiv = document.getElementById('div_main')
	TDiv.style.top = '37px';
}else{
	TDiv = document.getElementById('div_menu')
	TDiv.style.height = '0px';
	TDiv.style.display = 'none';
	TDiv = document.getElementById('div_main')
	TDiv.style.top = '0px';
};
};



//################################################################################################################################################################################################
function Desktop_Menu_Create(){
G_Desktop_Menu_WinID = Window_Create(0, 0, 0, 250, 400, '');
Window_SetVisibility(G_Desktop_Menu_WinID, 0);
Window_SetDimensionX(G_Desktop_Menu_WinID, '270px', '100%');
Window_SetTitlebarvisibility(G_Desktop_Menu_WinID, 0);
Window_SetSizeable(G_Desktop_Menu_WinID, 0);
Window_SetMoveable(G_Desktop_Menu_WinID, 0);
Window_SetCloseable(G_Desktop_Menu_WinID, 0);
Window_SetHideOnLostFocus(G_Desktop_Menu_WinID);
Window_SetBackgroundColor(G_Desktop_Menu_WinID, 255, 255, 255, '0.9');
G_Desktop_Menu_ListID = List_Create(G_Desktop_Menu_WinID, 0, 0, 0, 0);
Ctl_SetDimensionX(G_Desktop_Menu_ListID, '100%', '100%');
};



//################################################################################################################################################################################################
function Desktop_Menu_Show(){
Window_SetVisibility(G_Desktop_Menu_WinID, 1);
Window_SetFocus(G_Desktop_Menu_WinID);
var TWin = document.getElementById('_' + G_Desktop_Menu_WinID + '_window');
if(TWin.nextElementChild){TWin.parentNode.appendChild(TWin);};
};



//################################################################################################################################################################################################
function Desktop_Menu_Hide(){
Window_SetVisibility(G_Desktop_Menu_WinID, 0);
};



//################################################################################################################################################################################################
function Desktop_Menu_Item_Click(V_ItemID){
Desktop_Menu_Hide();
var TModul = List_Item_GetData(V_ItemID, 'modul');
if(TModul != ''){System_Modul_Init(TModul);};
};



//################################################################################################################################################################################################
function Desktop_Systray_Click(V_WinID){
if(Window_CheckIfFocus(V_WinID) != 1){
	Window_SetVisibility(V_WinID, 1);
	Window_SetFocus(V_WinID);
	return;
};
if(Window_GetVisibility(V_WinID) == 1){Window_SetVisibility(V_WinID, 0); return;};
Window_SetVisibility(V_WinID, 1);
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Desktop_Systray_Add(V_WinID, V_Icon){
var TSystrayItemID = document.getElementById('_systray_' + V_WinID);
if(TSystrayItemID != null){return;};
var TData = '';
TData += '<div class="div_menu_systrayitem" id="_systray_' + V_WinID + '" onclick="Desktop_Systray_Click(' + V_WinID + ');"><img src="' + V_Icon + '"></div>';
document.getElementById('div_menu').insertAdjacentHTML('beforeend', TData);
document.getElementById('_' + V_WinID + '_minimize').style.display = 'table-cell';
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Desktop_Systray_Update(V_WinID, V_Icon){
var TSystrayItemID = document.getElementById('_systray_' + V_WinID);
if(TSystrayItemID == null){return;};
TSystrayItemID.innerHTML = '<img src="' + V_Icon + '">';
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Desktop_Systray_Del(V_WinID){
var TSystrayItemID = document.getElementById('_systray_' + V_WinID);
if(TSystrayItemID == null){return;};
var TParrent = TSystrayItemID.parentNode;
TParrent.removeChild(TSystrayItemID);
if(document.getElementById('_' + V_WinID + '_minimize') !== null){document.getElementById('_' + V_WinID + '_minimize').style.display = 'none';};
};







//################################################################################################################################################################################################
var G_MouseX = 0;
var G_MouseY = 0;
var G_WindowList = [];
var G_WindowFocus = null;
var G_MouseWindowSelect = null;
var G_MouseMoveOffsetX = 0;
var G_MouseMoveOffsetY = 0;
var G_MouseMoveOffsetTop = 0;
var G_MouseResizeDirection = 0;



//################################################################################################################################################################################################
function ___Window_SetFocus(V_WinID){
if(V_WinID == 0){return;};
var TWin = document.getElementById('_' + V_WinID + '_window');
if(G_WindowFocus != null){
	if(G_WindowFocus.dataset['winid'] == TWin.dataset['winid']){return;};
};
if(TWin.dataset['cangetfocus'] != 1){return;};
if(TWin.dataset['moveontoponfocus'] == 1){TWin.parentNode.appendChild(TWin);};
var TWinHeader;
if(G_WindowFocus != null){
	TWinHeader = document.getElementById('_' + G_WindowFocus.dataset['winid'] + '_header');
	TWinHeader.className = 'div_window_header';
	if(G_WindowFocus.dataset['selfhideonfocuslost'] == 1){G_WindowFocus.style.visibility = 'hidden';};
	if(G_WindowFocus.dataset['selfdetroyonfocuslost'] == 1){Window_Destroy(G_WindowFocus.dataset['winid']);};
};
G_WindowFocus = TWin;
TWinHeader = document.getElementById('_' + G_WindowFocus.dataset['winid'] + '_header');
TWinHeader.className = 'div_window_header_selected';
};



//################################################################################################################################################################################################
function ___Window_GetLastWinID(){
var TMain = document.getElementById('div_main');
var TWinID = 0;
for(TIndex in TMain.childNodes){
	if(TMain.childNodes[TIndex].nodeType == 1){
		TWin = TMain.childNodes[TIndex];
		if(TWin.dataset['iswin'] == 1){
			if(TWin.dataset['cangetfocus'] == 1){
				TWinID = TWin.dataset['winid'];
			};
		};
	};
};
return TWinID;
};



//################################################################################################################################################################################################
function Window_SetFocus(V_WinID){
if(V_WinID == 0){return;};

var TWin = document.getElementById('_' + V_WinID + '_window');
if(G_WindowFocus != null){
	if(G_WindowFocus.dataset['winid'] == TWin.dataset['winid']){return;};
};
if(TWin.dataset['cangetfocus'] != 1){return;};
//if(TWin.dataset['moveontoponfocus'] == 1){TWin.parentNode.appendChild(TWin);};
if(TWin.dataset['moveontoponfocus'] == 1){
	var TWinList = [];
	for(TIndex in G_WindowList){
		if(G_WindowList[TIndex] != V_WinID){TWinList.push(parseInt(G_WindowList[TIndex]));};
	};
	TWinList.push(parseInt(V_WinID));
	G_WindowList = TWinList;
	//console.log(G_WindowList);
	
	var TZIndex = 0;
	for(TIndex in G_WindowList){
		TZIndex ++;
		document.getElementById('_' + parseInt(G_WindowList[TIndex]) + '_window').style.zIndex = TZIndex;
	};
};

var TWinHeader;
if(G_WindowFocus != null){
	TWinHeader = document.getElementById('_' + G_WindowFocus.dataset['winid'] + '_header');
	TWinHeader.className = 'div_window_header';
	if(G_WindowFocus.dataset['selfhideonfocuslost'] == 1){G_WindowFocus.style.visibility = 'hidden';};
	if(G_WindowFocus.dataset['selfdetroyonfocuslost'] == 1){Window_Destroy(G_WindowFocus.dataset['winid']);};
};

G_WindowFocus = TWin;
TWinHeader = document.getElementById('_' + G_WindowFocus.dataset['winid'] + '_header');
TWinHeader.className = 'div_window_header_selected';
};



//################################################################################################################################################################################################
function Window_GetLastWinID(){
var TLastWinID = 0;
for(TIndex in G_WindowList){
	if(document.getElementById('_' + parseInt(G_WindowList[TIndex]) + '_window').dataset['cangetfocus'] == 1){TLastWinID = G_WindowList[TIndex];};
};
return TLastWinID;
};



//################################################################################################################################################################################################
function Window_Event_Move_Start(V_WinID, V_Event){
if(V_Event.button != 0){return;};
if(G_System_Base_MobileDrawMode == true){return;};
if(V_WinID == 0){return;};
G_MouseWindowSelect = document.getElementById('_' + V_WinID + '_window');
if(G_MouseWindowSelect.dataset['moveable'] != 1){return;};
if(G_MouseWindowSelect.dataset['maximized'] == 1){return;};
V_Event = V_Event || window.event;
V_Event.preventDefault();
G_MouseMoveOffsetX = G_MouseWindowSelect.offsetLeft - V_Event.clientX;
G_MouseMoveOffsetY = G_MouseWindowSelect.offsetTop - V_Event.clientY;
document.onmouseup = Window_Event_Move_Stop;
document.onmousemove = Window_Event_Move_Move;
G_MouseWindowSelect.style.cursor = 'move';
Window_SetFocus(G_MouseWindowSelect.dataset['winid']);
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Window_Event_Move_Move(V_Event){
if(V_Event.button != 0){return;};
if(G_System_Base_MobileDrawMode == true){return;};
V_Event = V_Event || window.event;
V_Event.preventDefault();
G_MouseWindowSelect.style.left = (V_Event.clientX + G_MouseMoveOffsetX) + 'px';
if((V_Event.clientY + G_MouseMoveOffsetY) >= -10){G_MouseWindowSelect.style.top  = (V_Event.clientY + G_MouseMoveOffsetY) + 'px';};
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Window_Event_Move_Stop(){
if(G_System_Base_MobileDrawMode == true){return;};
document.onmouseup = null;
document.onmousemove = null;
G_MouseWindowSelect.style.cursor = 'default';
Window_PresetFromUnikeySave(G_MouseWindowSelect.dataset['winid'])
G_MouseWindowSelect = null;
};



//################################################################################################################################################################################################
function Window_Move_Center(V_WinID){
if(V_WinID == 0){return;};
var TDesktop = document.getElementById('div_main');
var TWin = document.getElementById('_' + V_WinID + '_window');
if(G_System_Base_MobileDrawMode == true){
	TWin.style.left = '0px';
	TWin.style.top = '0px';
	return;
};
TWin.style.left = ((TDesktop.clientWidth / 2) - (TWin.clientWidth / 2)) + 'px';
TWin.style.top = ((TDesktop.clientHeight / 2) - (TWin.clientHeight / 2)) + 'px';
};



//################################################################################################################################################################################################
function Window_SetTop(V_WinID, V_Top){
if(V_WinID == 0){return;};
var TWin = document.getElementById('_' + V_WinID + '_window');
if(G_System_Base_MobileDrawMode == true){
	TWin.style.top = '0px';
	return;
};
TWin.style.top = V_Top + 'px';
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Window_SetLeft(V_WinID, V_Left){
if(V_WinID == 0){return;};
var TWin = document.getElementById('_' + V_WinID + '_window');
if(G_System_Base_MobileDrawMode == true){
	TWin.style.left = '0px';
	return;
};
TWin.style.left = V_Left + 'px';
};



//################################################################################################################################################################################################
function Window_SetWidth(V_WinID, V_Width){
if(V_WinID == 0){return;};
var TWin = document.getElementById('_' + V_WinID + '_window');
if(G_System_Base_MobileDrawMode == true){
	TWin.style.width = '100%';
	return;
};
TWin.style.width = V_Width + 'px';
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Window_SetHeight(V_WinID, V_Height){
if(V_WinID == 0){return;};
var TWin = document.getElementById('_' + V_WinID + '_window');
if(G_System_Base_MobileDrawMode == true){
	TWin.style.height = '100%';
	return;
};
TWin.style.height = V_Height + 'px';
};



//################################################################################################################################################################################################
function Window_Resize_Maximize(V_WinID){
if(V_WinID == 0){return;};
var TWin = document.getElementById('_' + V_WinID + '_window');
if(G_System_Base_MobileDrawMode == true){
	TWin.style.left = '0px';
	TWin.style.top = '0px';
	TWin.style.width = '100%';
	TWin.style.height = '100%';
	return;
};
if(TWin.dataset['sizeable'] != 1){return;};
if(TWin.dataset['maximized'] != 1){
	TWin.dataset['left'] = TWin.style.left;
	TWin.dataset['top'] = TWin.style.top;
	TWin.dataset['width'] = TWin.style.width;
	TWin.dataset['height'] = TWin.style.height;
	TWin.dataset['maximized'] = 1;
	TWin.style.left = '0px';
	TWin.style.top = '0px';
	TWin.style.width = '100%';
	TWin.style.height = '100%';
}else{
	TWin.style.left = TWin.dataset['left'];
	TWin.style.top = TWin.dataset['top'];
	TWin.style.width = TWin.dataset['width'];
	TWin.style.height = TWin.dataset['height'];
	TWin.dataset['maximized'] = 0;
};
};



//################################################################################################################################################################################################
function Window_Resize_Minimize(V_WinID){
Window_SetVisibility(V_WinID, 0);
};



//################################################################################################################################################################################################
function Window_Event_Resize_Start(V_WinID, V_Event, V_Direction){
if(V_Event.button != 0){return;};
if(G_System_Base_MobileDrawMode == true){return;};
if(V_WinID == 0){return;};
G_MouseWindowSelect = document.getElementById('_' + V_WinID + '_window');
if(G_MouseWindowSelect.dataset['sizeable'] != 1){return;};
G_MouseWindowSelect.dataset['maximized'] = 0;
V_Event = V_Event || window.event;
V_Event.preventDefault();
G_MouseResizeDirection = V_Direction;
G_MouseMoveOffsetTop = document.getElementById('div_menu').clientHeight + 2;
switch(G_MouseResizeDirection){
	case 0: //TOP
		G_MouseWindowSelect.style.cursor = 'ns-resize';
		G_MouseMoveOffsetY = G_MouseWindowSelect.offsetTop + G_MouseWindowSelect.clientHeight;
		break;
	case 1: //BOTTOM
		G_MouseWindowSelect.style.cursor = 'ns-resize';
		G_MouseMoveOffsetY = G_MouseWindowSelect.offsetTop;
		break;
	case 2: //LEFT
		G_MouseWindowSelect.style.cursor = 'ew-resize';
		G_MouseMoveOffsetX = G_MouseWindowSelect.offsetLeft + G_MouseWindowSelect.clientWidth;
		break;
	case 3: //RIGHT
		G_MouseWindowSelect.style.cursor = 'ew-resize';
		G_MouseMoveOffsetX = G_MouseWindowSelect.offsetLeft;
		break;
	case 4: //TOP-LEFT
		G_MouseWindowSelect.style.cursor = 'nwse-resize';
		G_MouseMoveOffsetY = G_MouseWindowSelect.offsetTop + G_MouseWindowSelect.clientHeight;
		G_MouseMoveOffsetX = G_MouseWindowSelect.offsetLeft + G_MouseWindowSelect.clientWidth;
		break;
	case 5: //TOP-RIGHT
		G_MouseWindowSelect.style.cursor = 'nwse-resize';
		G_MouseMoveOffsetY = G_MouseWindowSelect.offsetTop + G_MouseWindowSelect.clientHeight;
		G_MouseMoveOffsetX = G_MouseWindowSelect.offsetLeft;
		break;
	case 6: //BOTTOM-LEFT
		G_MouseWindowSelect.style.cursor = 'nesw-resize';
		G_MouseMoveOffsetY = G_MouseWindowSelect.offsetTop;
		G_MouseMoveOffsetX = G_MouseWindowSelect.offsetLeft + G_MouseWindowSelect.clientWidth;
		break;
	case 7: //BOTTOM-RIGHT
		G_MouseWindowSelect.style.cursor = 'nesw-resize';
		G_MouseMoveOffsetY = G_MouseWindowSelect.offsetTop;
		G_MouseMoveOffsetX = G_MouseWindowSelect.offsetLeft;
		break;
};
document.onmouseup = Window_Event_Resize_Stop;
document.onmousemove = Window_Event_Resize_Move;
Window_SetFocus(G_MouseWindowSelect.dataset['winid']);
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Window_Event_Resize_Move(V_Event){
if(V_Event.button != 0){return;};
if(G_System_Base_MobileDrawMode == true){return;};
V_Event = V_Event || window.event;
V_Event.preventDefault();
if(V_Event.clientX < 0){return;};
if(V_Event.clientY < 0){return;};
switch(G_MouseResizeDirection){
	case 0: //TOP
		if((G_MouseMoveOffsetY - V_Event.clientY) >= 50){
			G_MouseWindowSelect.style.top = (V_Event.clientY - G_MouseMoveOffsetTop) + 'px';
			G_MouseWindowSelect.style.height = (G_MouseMoveOffsetY - V_Event.clientY + G_MouseMoveOffsetTop + 2) + 'px';
		};
		break;
	case 1: //BOTTOM
		if((V_Event.clientY - G_MouseMoveOffsetY) >= 50){
			G_MouseWindowSelect.style.height = (V_Event.clientY - G_MouseMoveOffsetY - G_MouseMoveOffsetTop + 4) + 'px';
		};
		break;
	case 2: //LEFT
		if((G_MouseMoveOffsetX - V_Event.clientX) >= 50){
			G_MouseWindowSelect.style.left = (V_Event.clientX - 2) + 'px';
			G_MouseWindowSelect.style.width = (G_MouseMoveOffsetX - V_Event.clientX + 4) + 'px';
		};
		break;
	case 3: //RIGHT
		if((V_Event.clientX - G_MouseMoveOffsetX) >= 50){
			G_MouseWindowSelect.style.width = (V_Event.clientX - G_MouseMoveOffsetX + 2) + 'px';
		};
		break;
	case 4: //TOP-LEFT
		if((G_MouseMoveOffsetY - V_Event.clientY) >= 50){
			G_MouseWindowSelect.style.top = (V_Event.clientY - G_MouseMoveOffsetTop) + 'px';
			G_MouseWindowSelect.style.height = (G_MouseMoveOffsetY - V_Event.clientY + G_MouseMoveOffsetTop + 2) + 'px';
		};
		if((G_MouseMoveOffsetX - V_Event.clientX) >= 50){
			G_MouseWindowSelect.style.left = V_Event.clientX + 'px';
			G_MouseWindowSelect.style.width = (G_MouseMoveOffsetX - V_Event.clientX) + 'px';
		};
		break;
	case 5: //TOP-RIGHT
		if((G_MouseMoveOffsetY - V_Event.clientY) >= 50){
			G_MouseWindowSelect.style.top = (V_Event.clientY - G_MouseMoveOffsetTop) + 'px';
			G_MouseWindowSelect.style.height = (G_MouseMoveOffsetY - V_Event.clientY + G_MouseMoveOffsetTop + 2) + 'px';
		};
		if((V_Event.clientX - G_MouseMoveOffsetX) >= 50){
			G_MouseWindowSelect.style.width = (V_Event.clientX - G_MouseMoveOffsetX) + 'px';
		};
		break;
	case 6: //BOTTOM-LEFT
		if((V_Event.clientY - G_MouseMoveOffsetY) >= 50){
			G_MouseWindowSelect.style.height = (V_Event.clientY - G_MouseMoveOffsetY - G_MouseMoveOffsetTop + 4) + 'px';
		};
		if((G_MouseMoveOffsetX - V_Event.clientX) >= 50){
			G_MouseWindowSelect.style.left = V_Event.clientX + 'px';
			G_MouseWindowSelect.style.width = (G_MouseMoveOffsetX - V_Event.clientX) + 'px';
		};
		break;
	case 7: //BOTTOM-RIGHT
		if((V_Event.clientY - G_MouseMoveOffsetY) >= 50){
			G_MouseWindowSelect.style.height = (V_Event.clientY - G_MouseMoveOffsetY - G_MouseMoveOffsetTop + 4) + 'px';
		};
		if((V_Event.clientX - G_MouseMoveOffsetX) >= 50){
			G_MouseWindowSelect.style.width = (V_Event.clientX - G_MouseMoveOffsetX) + 'px';
		};
		break;
};
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Window_Event_Resize_Stop(){
if(G_System_Base_MobileDrawMode == true){return;};
document.onmouseup = null;
document.onmousemove = null;
G_MouseWindowSelect.style.cursor = 'default';
Window_PresetFromUnikeySave(G_MouseWindowSelect.dataset['winid'])
G_MouseWindowSelect = null;
};



//################################################################################################################################################################################################
function Window_Close(V_WinID){
if(V_WinID == 0){return;};
Window_Destroy(V_WinID);
};



//################################################################################################################################################################################################
function Window_Destroy(V_WinID){
if(V_WinID == 0){return;};
var TWin = document.getElementById('_' + V_WinID + '_window');
var TWinID2 = 0;
TWinID2 = TWin.dataset['lockwinid'];
var TParrent = TWin.parentNode;
TParrent.removeChild(TWin);

var TWinList = [];
for(TIndex in G_WindowList){
	if(G_WindowList[TIndex] != V_WinID){TWinList.push(parseInt(G_WindowList[TIndex]));};
};
G_WindowList = TWinList;
//console.log(G_WindowList);


Desktop_Systray_Del(V_WinID);
ToolTip_Hide();
G_WindowFocus = null;
var TWinIDLast = Window_GetLastWinID();
//if(TParrent.lastElementChild != null){Window_SetFocus(TParrent.lastElementChild.dataset['winid']);};
Window_SetFocus(TWinIDLast);
if(TWinID2 > 0){Window_Destroy(TWinID2);};
};



//################################################################################################################################################################################################
function Window_Create(V_AppID, V_Left, V_Top, V_Width, V_Height, V_Title, V_OnClose){
G_UNIQUEID += 1;
var TWinID = G_UNIQUEID;
var TData = '';
var TOnClose = '';
if(typeof V_OnClose !== 'undefined'){TOnClose = V_OnClose;};
if(TOnClose != ''){TOnClose += '(' + TWinID + ');';};
if(TOnClose == ''){TOnClose = 'Window_Close(' + TWinID + ');';};
TData += '<div id="_' + TWinID + '_window" class="div_window" onmousedown="Window_SetFocus(' + TWinID + ');">';
TData += '	<div id="_' + TWinID + '_header" class="div_window_header">';
TData += '		<div class="div_window_header_table"><div class="div_window_header_table_body"><div class="div_window_header_table_row">';
TData += '		<div id="_' + TWinID + '_icon" class="div_window_header_icon"></div>';
TData += '		<div id="_' + TWinID + '_title" class="div_window_header_title" onmousedown="Window_Event_Move_Start(' + TWinID + ', event);" ondblclick="Window_Resize_Maximize(' + TWinID + ');"><div style="left:0px;right:0px;top:0px;bottom:0px;overflow:hidden;">' + V_Title + '</div></div>';
TData += '		<div id="_' + TWinID + '_help" class="div_window_header_help"' + ToolTipPrepare('Hilfe anzeigen') + '>?</div>';
TData += '		<div id="_' + TWinID + '_minimize" class="div_window_header_minimize" style="display:none;" onclick="Window_Resize_Minimize(' + TWinID + ');"' + ToolTipPrepare('Fenster Minimieren') + '><div class="icon_window_minimize"></div></div>';
TData += '		<div id="_' + TWinID + '_maximize" class="div_window_header_maximize" ' + XIff(G_System_Base_MobileDrawMode == true, 'style="display:none;" ', '') + 'onclick="Window_Resize_Maximize(' + TWinID + ');"' + ToolTipPrepare('Fenster Maximieren / Normalisieren') + '><div class="icon_window_maximize"></div></div>';
TData += '		<div id="_' + TWinID + '_close" class="div_window_header_close" onclick="' + TOnClose + '"' + ToolTipPrepare('Fenster schließen') + '>&times;</div>';
TData += '		</div></div></div>';
TData += '	</div>';
TData += '	<div id="_' + TWinID + '_menu" class="div_window_menu"></div>';
TData += '	<div id="_' + TWinID + '_body" class="div_window_body"></div>';
TData += '	<div id="_' + TWinID + '_resize" class="div_window_resize"' + XIff(G_System_Base_MobileDrawMode == true, 'style="display:none;" ', '') + '>';
TData += '		<div onmousedown="Window_Event_Resize_Start(' + TWinID + ', event, 0);" class="div_window_resize_bar" style="left:6px;top:0px;right:6px;height:4px;cursor:ns-resize;"></div>';
TData += '		<div onmousedown="Window_Event_Resize_Start(' + TWinID + ', event, 1);" class="div_window_resize_bar" style="left:6px;bottom:0px;right:6px;height:4px;cursor:ns-resize;"></div>';
TData += '		<div onmousedown="Window_Event_Resize_Start(' + TWinID + ', event, 2);" class="div_window_resize_bar" style="left:0px;top:6px;width:4px;bottom:6px;cursor:ew-resize;"></div>';
TData += '		<div onmousedown="Window_Event_Resize_Start(' + TWinID + ', event, 3);" class="div_window_resize_bar" style="width:4px;top:6px;right:0px;bottom:6px;cursor:ew-resize;"></div>';
TData += '		<div onmousedown="Window_Event_Resize_Start(' + TWinID + ', event, 4);" class="div_window_resize_bar" style="left:0px;top:0px;width:6px;height:6px;cursor:nwse-resize;"></div>';
TData += '		<div onmousedown="Window_Event_Resize_Start(' + TWinID + ', event, 5);" class="div_window_resize_bar" style="right:0px;top:0px;width:6px;height:6px;cursor:nesw-resize;"></div>';
TData += '		<div onmousedown="Window_Event_Resize_Start(' + TWinID + ', event, 6);" class="div_window_resize_bar" style="left:0px;bottom:0px;width:6px;height:6px;cursor:nesw-resize;"></div>';
TData += '		<div onmousedown="Window_Event_Resize_Start(' + TWinID + ', event, 7);" class="div_window_resize_bar" style="right:0px;bottom:0px;width:6px;height:6px;cursor:nwse-resize;"></div>';
TData += '	</div>';
TData += '	<div id="_' + TWinID + '_lock" class="div_window_lock"><img class="ctl_image" style="left:calc(50% - 15px);top:calc(50% - 15px);" src="/syspic/wait.gif"></div>';
TData += '</div>';
document.getElementById('div_main').insertAdjacentHTML('beforeend', TData);
G_WindowList.push(parseInt(TWinID));
//console.log(G_WindowList);
var TWin = document.getElementById('_' + TWinID + '_window');
TWin.style.left = V_Left + 'px';
TWin.style.top = V_Top + 'px';
TWin.style.width = V_Width + 'px';
TWin.style.height = V_Height + 'px';
TWin.dataset['winid'] = TWinID;
TWin.dataset['appid'] = V_AppID;
TWin.dataset['iswin'] = 1;
TWin.dataset['isapp'] = 0;
TWin.dataset['moveable'] = 1;
TWin.dataset['sizeable'] = 1;
TWin.dataset['maximized'] = 0;
TWin.dataset['cangetfocus'] = 1;
TWin.dataset['lockwinid'] = 0;
TWin.dataset['selfdetroyonfocuslost'] = 0;
TWin.dataset['selfhideonfocuslost'] = 0;
TWin.dataset['moveontoponfocus'] = 1;
TWin.dataset['UNIKEY'] = '';

if(G_System_Base_MobileDrawMode == true){
	TWin.dataset['moveable'] = 0;
	TWin.dataset['sizeable'] = 0;
	TWin.style.left = '0px';
	TWin.style.top = '0px';
	TWin.style.width = '100%';
	TWin.style.height = '100%';
};

Window_SetFocus(TWinID);
return TWinID;
};



//################################################################################################################################################################################################
function Window_SetUnikey(V_WinID, V_Unikey){
var TItem = document.getElementById('_' + V_WinID + '_window');
TItem.dataset['UNIKEY'] = V_Unikey;
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Window_PresetFromUnikeyLoad(V_WinID){
var TWin = document.getElementById('_' + V_WinID + '_window');
if(TWin.dataset['UNIKEY'] == ''){return;};
if(G_System_Base_MobileDrawMode == true){return;};
var TValue;
TValue = localStorage.getItem(TWin.dataset['UNIKEY'] + '__pos_x');	if(TValue != null){TWin.style.left = TValue;};
TValue = localStorage.getItem(TWin.dataset['UNIKEY'] + '__pos_y');	if(TValue != null){TWin.style.top = TValue;};
TValue = localStorage.getItem(TWin.dataset['UNIKEY'] + '__size_w');	if(TValue != null){TWin.style.width = TValue;};
TValue = localStorage.getItem(TWin.dataset['UNIKEY'] + '__size_h');	if(TValue != null){TWin.style.height = TValue;};
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Window_PresetFromUnikeySave(V_WinID){
var TWin = document.getElementById('_' + V_WinID + '_window');
if(TWin.dataset['UNIKEY'] == ''){return;};
if(G_System_Base_MobileDrawMode == true){return;};
localStorage.setItem(TWin.dataset['UNIKEY'] + '__pos_x', TWin.style.left);
localStorage.setItem(TWin.dataset['UNIKEY'] + '__pos_y', TWin.style.top);
localStorage.setItem(TWin.dataset['UNIKEY'] + '__size_w', TWin.style.width);
localStorage.setItem(TWin.dataset['UNIKEY'] + '__size_h', TWin.style.height);
};



//################################################################################################################################################################################################
function Window_SetData(V_WinID, V_Name, V_Value){
var TItem = document.getElementById('_' + V_WinID + '_window');
TItem.dataset['__data_' + V_Name] = V_Value;
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Window_GetData(V_WinID, V_Name){
var TItem = document.getElementById('_' + V_WinID + '_window');
if(typeof TItem == null){return '';};
return TItem.dataset['__data_' + V_Name];
};



//################################################################################################################################################################################################
function Window_UpdateBodyPosDim(V_WinID){
var TTop = 0;
if(document.getElementById('_' + V_WinID + '_header').style.display == ''){TTop += 35;};
if(document.getElementById('_' + V_WinID + '_header').style.display == 'block'){TTop += 35;};
if(document.getElementById('_' + V_WinID + '_menu').style.display == 'block'){TTop += 28;};
document.getElementById('_' + V_WinID + '_body').style.top = TTop + "px";
};



//################################################################################################################################################################################################
function Window_MenuAdd(V_WinID, V_IconPath, V_Callback, V_ToolTip){
G_UNIQUEID += 1;
var TMenuItemID = G_UNIQUEID;
document.getElementById('_' + V_WinID + '_menu').style.display = "block";
Window_UpdateBodyPosDim(V_WinID);
var TCallback = V_Callback;
if(TCallback != ''){TCallback += '(' + TMenuItemID + ')';};
document.getElementById('_' + V_WinID + '_menu').insertAdjacentHTML('beforeend', '<div id="_' + TMenuItemID + '_menu_item" class="div_window_menu_item" onclick="' + TCallback + '"' + ToolTipPrepare(V_ToolTip) + '><img id="_' + TMenuItemID + '_menu_item_img" class="div_window_menu_item_img" src="' + V_IconPath + '"></div>');
return TMenuItemID;
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Window_MenuAddElem(V_WinID){
G_UNIQUEID += 1;
var TMenuItemID = G_UNIQUEID;
document.getElementById('_' + V_WinID + '_menu').style.display = "block";
Window_UpdateBodyPosDim(V_WinID);
document.getElementById('_' + V_WinID + '_menu').insertAdjacentHTML('beforeend', '<div id="_' + TMenuItemID + '_menu_item" class="div_window_menu_itemelem"><div id="_' + TMenuItemID + '_body"></div></div>');
return TMenuItemID;
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Window_MenuAddSpace(V_WinID){
G_UNIQUEID += 1;
var TMenuItemID = G_UNIQUEID;
document.getElementById('_' + V_WinID + '_menu').style.display = "block";
Window_UpdateBodyPosDim(V_WinID);
document.getElementById('_' + V_WinID + '_menu').insertAdjacentHTML('beforeend', '<div id="_' + TMenuItemID + '_menu_item" class="div_window_menu_space"><div class="div_window_menu_spaceitem"></div></div>');
return TMenuItemID;
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Window_Menu_SetData(V_CtlID, V_Name, V_Value){
var TItem = document.getElementById('_' + V_CtlID + '_menu_item');
TItem.dataset['__data_' + V_Name] = V_Value;
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Window_Menu_GetData(V_CtlID, V_Name){
var TItem = document.getElementById('_' + V_CtlID + '_menu_item');
return TItem.dataset['__data_' + V_Name];
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Window_Menu_Disable(V_CtlID, V_Disabled){
document.getElementById('_' + V_CtlID + '_menu_item').style.pointerEvents = XIff(V_Disabled == 1, 'none', 'auto');
document.getElementById('_' + V_CtlID + '_menu_item_img').className = XIff(V_Disabled == 1, 'div_window_menu_item_imgdis', 'div_window_menu_item_img');
};



//################################################################################################################################################################################################
function Window_SetLock(V_WinID, V_Locked){
if(V_WinID == 0){return;};
var TWinLock = document.getElementById('_' + V_WinID + '_lock');
TWinLock.style.display = XIff(V_Locked == 1, 'block', 'none');
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Window_SetIcon(V_WinID, V_IconPath){
if(V_WinID == 0){return;};
var TWinIcon = document.getElementById('_' + V_WinID + '_icon');
if(V_IconPath != ''){
	TWinIcon.innerHTML = '<img src="' + V_IconPath + '" style="max-width:19px;max-height:19px;">';
	TWinIcon.style.display = 'table-cell';
}else{TWinIcon.innerHTML = ''; TWinIcon.style.display = 'none';};
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Window_SetHelp(V_WinID, V_Callback){
if(V_WinID == 0){return;};
var TWinHelp = document.getElementById('_' + V_WinID + '_help');
if(V_Callback){
	TWinHelp.style.display = 'table-cell';
	TWinHelp.onclick = V_Callback;
}else{TWinHelp.style.display = 'none'; TWinHelp.onclick = null;};
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Window_SetMoveable(V_WinID, V_Moveable){
if(V_WinID == 0){return;};
if(G_System_Base_MobileDrawMode == true){return;};
var TWin = document.getElementById('_' + V_WinID + '_window');
TWin.dataset['moveable'] = XIff(V_Moveable == 1, 1, 0);
//if(TWin.dataset['moveable'] == 0){Window_SetSizeable(V_WinID, 0);};
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Window_SetSizeable(V_WinID, V_Sizeable){
if(V_WinID == 0){return;};
if(G_System_Base_MobileDrawMode == true){return;};
var TWin = document.getElementById('_' + V_WinID + '_window');
TWin.dataset['sizeable'] = XIff(V_Sizeable == 1, 1, 0);
if(TWin.dataset['sizeable'] == 1){
	document.getElementById('_' + V_WinID + '_resize').style.display = 'block';
	document.getElementById('_' + V_WinID + '_maximize').style.display = 'block';
	document.getElementById('_' + V_WinID + '_minimize').style.display = 'block';
}else{
	document.getElementById('_' + V_WinID + '_resize').style.display = 'none';
	document.getElementById('_' + V_WinID + '_maximize').style.display = 'none';
	document.getElementById('_' + V_WinID + '_minimize').style.display = 'none';
};
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Window_SetCloseable(V_WinID, V_Closeable){
if(V_WinID == 0){return;};
var TWin = document.getElementById('_' + V_WinID + '_window');
if(XIff(V_Closeable == 1, 1, 0) == 1){
	document.getElementById('_' + V_WinID + '_close').style.display = 'block';
}else{
	document.getElementById('_' + V_WinID + '_close').style.display = 'none';
};
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Window_SetBackgroundColor(V_WinID, V_R, V_G, V_B, V_A){
if(V_WinID == 0){return;};
var TWin = document.getElementById('_' + V_WinID + '_window');
TWin.style.background = 'rgba(' + V_R + ',' + V_G + ',' + V_B + ',' + V_A + ')';
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Window_SetTitlebarvisibility(V_WinID, V_Visible){
if(V_WinID == 0){return;};
var TWin = document.getElementById('_' + V_WinID + '_header');
TWin.style.display = XIff(V_Visible == 1, 'block', 'none');
Window_UpdateBodyPosDim(V_WinID);
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Window_SetCanGetFocus(V_WinID, V_CanGetFocus){
if(V_WinID == 0){return;};
var TWin = document.getElementById('_' + V_WinID + '_window');
TWin.dataset['cangetfocus'] = XIff(V_CanGetFocus == 1, 1, 0);
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Window_SetDestroyOnLostFocus(V_WinID){
if(V_WinID == 0){return;};
var TWin = document.getElementById('_' + V_WinID + '_window');
TWin.dataset['selfdetroyonfocuslost'] = 1;
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Window_SetHideOnLostFocus(V_WinID){
if(V_WinID == 0){return;};
var TWin = document.getElementById('_' + V_WinID + '_window');
TWin.dataset['selfhideonfocuslost'] = 1;
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Window_SetVisibility(V_WinID, V_Visible){
if(V_WinID == 0){return;};
var TWin = document.getElementById('_' + V_WinID + '_window');
TWin.style.visibility = XIff(V_Visible == 1, 'visible', 'hidden');
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Window_GetVisibility(V_WinID){
if(V_WinID == 0){return;};
var TWin = document.getElementById('_' + V_WinID + '_window');
if(TWin.style.visibility == 'visible'){return 1;};
return 0;
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Window_CheckIfFocus(V_WinID){
if(V_WinID == 0){return 0;};
if(G_WindowFocus == null){return 0;};
if(G_WindowFocus.dataset['winid'] != V_WinID){return 0;};
return 1;
};



//################################################################################################################################################################################################
function Window_SetBGPattern(V_WinID, V_ImageURL){
if(V_WinID == 0){return;};
var TWin = document.getElementById('_' + V_WinID + '_window');
TWin.style.backgroundImage = "url('" + V_ImageURL + "')";
TWin.style.backgroundRepeat = "repeat";
};



//################################################################################################################################################################################################
function Window_SetPositionX(V_WinID, V_Left, V_Top){
if(V_WinID == 0){return;};
var TWin = document.getElementById('_' + V_WinID + '_window');
if(G_System_Base_MobileDrawMode == true){
	TWin.style.left = '0px';
	TWin.style.top = '0px';
	return;
};
TWin.style.left = V_Left;
TWin.style.top = V_Top;
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Window_SetDimensionX(V_WinID, V_Width, V_Height){
if(V_WinID == 0){return;};
var TWin = document.getElementById('_' + V_WinID + '_window');
if(G_System_Base_MobileDrawMode == true){
	TWin.style.width = '100%';
	TWin.style.height = '100%';
	return;
};
TWin.style.width = V_Width;
TWin.style.height = V_Height;
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Window_SetMaxDimensionX(V_WinID, V_Width, V_Height){
if(V_WinID == 0){return;};
var TWin = document.getElementById('_' + V_WinID + '_window');
if(G_System_Base_MobileDrawMode == true){
	TWin.style.maxWidth = '0px';
	TWin.style.maxHeight = '0px';
	return;
};
TWin.style.maxWidth = V_Width;
TWin.style.maxHeight = V_Height;
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Window_SetMinDimensionX(V_WinID, V_Width, V_Height){
if(V_WinID == 0){return;};
var TWin = document.getElementById('_' + V_WinID + '_window');
if(G_System_Base_MobileDrawMode == true){return;};
TWin.style.minWidth = V_Width;
TWin.style.minHeight = V_Height;
};



//################################################################################################################################################################################################
function Window_CreateLockwindow(){
var TWinID = Window_Create(0, 0, 0, 0, 0, '');
Window_Resize_Maximize(TWinID);
Window_SetTitlebarvisibility(TWinID, 0);
Window_SetCanGetFocus(TWinID, 0);
Window_SetSizeable(TWinID, 0);
Window_SetMoveable(TWinID, 0);
Window_SetCloseable(TWinID, 0);
Window_SetBackgroundColor(TWinID, '0', '0', '0', '0.2');
return TWinID;
};



//################################################################################################################################################################################################
function Window_Helpbox(V_Title, V_Text, V_SysLocked = 0){
var TWinID2 = 0;
if(V_SysLocked == 1){TWinID2 = Window_CreateLockwindow();};
var TWinID = Window_Create(0, 0, 0, 400, 140, V_Title);
Window_SetSizeable(TWinID, 0);
Window_SetIcon(TWinID, '/syspic/ico/help.png');
var TWin = document.getElementById('_' + TWinID + '_window');
TWin.dataset['lockwinid'] = TWinID2;
TWin.style.height = 'auto';
TWin.insertAdjacentHTML('beforeend', '<div style="padding:20px;">' + V_Text + '</div>');
Window_Move_Center(TWinID);
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Window_Msgbox(V_Title, V_Text, V_SysLocked = 0){
var TWinID2 = 0;
if(V_SysLocked == 1){TWinID2 = Window_CreateLockwindow();};
var TWinID = Window_Create(0, 0, 0, 400, 140, V_Title);
Window_SetSizeable(TWinID, 0);
Window_SetIcon(TWinID, '/syspic/ico/info.png');
var TWin = document.getElementById('_' + TWinID + '_window');
TWin.dataset['lockwinid'] = TWinID2;
TWin.style.height = 'auto';
TWin.insertAdjacentHTML('beforeend', '<div style="padding:20px;">' + V_Text + '</div>');
Window_Move_Center(TWinID);
var TWinEv = document.getElementById('_' + TWinID + '_close');
TWinEv.tabIndex = 0;
TWinEv.addEventListener('keyup', function(e){if(e.code == 'Escape'){Window_Destroy(TWinID);};});
TWinEv.focus();
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Window_Errorbox(V_Title, V_Text, V_SysLocked = 1){
var TWinID2 = 0;
if(V_SysLocked == 1){TWinID2 = Window_CreateLockwindow();};
var TWinID = Window_Create(0, 0, 0, 400, 140, V_Title);
Window_SetSizeable(TWinID, 0);
Window_SetIcon(TWinID, '/syspic/ico/error.png');
var TWin = document.getElementById('_' + TWinID + '_window');
TWin.dataset['lockwinid'] = TWinID2;
TWin.style.height = 'auto';
TWin.insertAdjacentHTML('beforeend', '<div style="padding:20px;">' + V_Text + '</div>');
Window_Move_Center(TWinID);
var TWinEv = document.getElementById('_' + TWinID + '_close');
TWinEv.tabIndex = 0;
TWinEv.addEventListener('keyup', function(e){if(e.code == 'Escape'){Window_Destroy(TWinID);};});
TWinEv.focus();
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Window_Askbox(V_Title, V_Text, V_SysLocked = 0, V_Callback, V_SubData){
var TWinID2 = 0;
if(V_SysLocked == 1){TWinID2 = Window_CreateLockwindow();};
var TWinID = Window_Create(0, 0, 0, 400, 140, V_Title);
Window_SetSizeable(TWinID, 0);
Window_SetIcon(TWinID, '/syspic/ico/ask.png');
Window_SetCloseable(TWinID, 0);
var TWin = document.getElementById('_' + TWinID + '_window');
TWin.dataset['lockwinid'] = TWinID2;
TWin.style.height = 'auto';
TWin.insertAdjacentHTML('beforeend', '<div style="padding:20px;">' + V_Text + '</div>');
var TButtons = '';
TButtons += '<button class="ctl_button" style="width:80px;height:26px;top:5px;left:calc(100% - 90px);" onclick="Window_Destroy(' + TWinID + ');' + V_Callback + '(1, ' + V_SubData + ');">Ja</button>';
TButtons += '<button class="ctl_button" style="width:80px;height:26px;top:5px;left:calc(100% - 180px);" onclick="Window_Destroy(' + TWinID + ');' + V_Callback + '(0, ' + V_SubData + ');">Nein</button>';
TWin.insertAdjacentHTML('beforeend', '<div style="position:relative;padding:20px;">' + TButtons + '</div>');
Window_Move_Center(TWinID);
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Window_Printbox_Print_Click(V_CtlID){
var TWinID = Window_Menu_GetData(V_CtlID, 'winid');
var TTPW = document.getElementById('_' + TWinID + '_tempprintwin').contentWindow;
TTPW.focus();
TTPW.print();
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Window_Printbox(V_Title, V_SourceURL, V_SysLocked = 0){
var TWinID2 = 0;
if(V_SysLocked == 1){TWinID2 = Window_CreateLockwindow();};
var TWinID = Window_Create(0, 0, 0, 640, 500, 'Vorschau - ' + V_Title);
Window_SetIcon(TWinID, '/syspic/ico/drucken.png');
var TWin = document.getElementById('_' + TWinID + '_window');
TWin.dataset['lockwinid'] = TWinID2;
var TContID = Container_Create(TWinID, 0, 0, 0, 0);
Ctl_SetDimensionX(TContID, '100%', '100%');
TMenuID = Window_MenuAdd(TWinID, '/syspic/ico/drucken.png', 'Window_Printbox_Print_Click', 'Drucker wählen, einstellen und starten');
Window_Menu_SetData(TMenuID, 'winid', TWinID);
var TCont = document.getElementById('_' + TContID + '_body');
TCont.insertAdjacentHTML('beforeend', '<iframe id="_' + TWinID + '_tempprintwin" src="' + V_SourceURL + '" style="display:block;border:none;position:relative;width:100%;height:100%;"></iframe>');
Window_Move_Center(TWinID);
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Window_Filebox(V_Title, V_BasePath, V_Multiselect, V_SysLocked = 0, V_Callback, V_SubData){
var TWinID2 = 0;
//if(V_SysLocked == 1){TWinID2 = Window_CreateLockwindow();};
var TWinID = Window_Create(0, 0, 0, 400, 300, V_Title);
Window_SetIcon(TWinID, '/syspic/ico/openfile.png');
Window_SetCloseable(TWinID, 0);
Window_Move_Center(TWinID);
var TWin = document.getElementById('_' + TWinID + '_window');
TWin.dataset['lockwinid'] = TWinID2;

var TMenuID = Window_MenuAdd(TWinID, '/syspic/ico/update.png', '', 'Aktualisieren');
Window_Menu_SetData(TMenuID, 'winid', TWinID);

TMenuID = Window_MenuAddElem(TWinID);
document.getElementById('_' + TMenuID + '_menu_item').style.width = "calc(100% - 32px)";
var TCtlIDPath = Text_Create(TMenuID, 0, 0, 0, 26, 'path', V_BasePath, '');
Text_Lock(TCtlIDPath, 1);
Ctl_SetDimensionX(TCtlIDPath, '100%', '100%');

var TCont = Container_Create(TWinID, 0, 0, 0, 0);
Window_SetData(TWinID, 'container', TCont);
Ctl_SetDimensionX(TCont, '100%', 'calc(100% - 26px)');




};









//################################################################################################################################################################################################
function Ctl_Destroy(V_CtlID){
if(V_CtlID == 0){return;};
var TCtl = document.getElementById('_' + V_CtlID + '_ctl');
var TParrent = TCtl.parentNode;
TParrent.removeChild(TCtl);
};



//################################################################################################################################################################################################
function Ctl_SetPositionX(V_CtlID, V_Left, V_Top){
if(V_CtlID == 0){return;};
var TCtl = document.getElementById('_' + V_CtlID + '_ctl');
TCtl.style.left = V_Left;
TCtl.style.top = V_Top;
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Ctl_SetPositionReference(V_CtlID, V_Reference){
if(V_CtlID == 0){return;};
var TCtl = document.getElementById('_' + V_CtlID + '_ctl');
TCtl.style.position = V_Reference;
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Ctl_SetDimensionX(V_CtlID, V_Width, V_Height){
if(V_CtlID == 0){return;};
var TCtl = document.getElementById('_' + V_CtlID + '_ctl');
TCtl.style.width = V_Width;
TCtl.style.height = V_Height;
//TCtl.style.lineHeight = V_Height;
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Ctl_SetDimensionXNLH(V_CtlID, V_Width, V_Height){
if(V_CtlID == 0){return;};
var TCtl = document.getElementById('_' + V_CtlID + '_ctl');
TCtl.style.width = V_Width;
TCtl.style.height = V_Height;
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Ctl_SetDimensionMaxX(V_CtlID, V_Width, V_Height){
if(V_CtlID == 0){return;};
var TCtl = document.getElementById('_' + V_CtlID + '_ctl');
TCtl.style.maxWidth = V_Width;
TCtl.style.maxHeight = V_Height;
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Ctl_SetDimensionMinX(V_CtlID, V_Width, V_Height){
if(V_CtlID == 0){return;};
var TCtl = document.getElementById('_' + V_CtlID + '_ctl');
TCtl.style.minWidth = V_Width;
TCtl.style.minHeight = V_Height;
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Ctl_SetVisibility(V_CtlID, V_Visible){
if(V_CtlID == 0){return;};
var TCtl = document.getElementById('_' + V_CtlID + '_ctl');
TCtl.style.visibility = XIff(V_Visible == 1, 'visible', 'hidden');
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Ctl_SetRowHidden(V_CtlID, V_Hidden){
if(V_CtlID == 0){return;};
var TCtl = document.getElementById('_' + V_CtlID + '_ctl');
TCtl.style.display = XIff(V_Hidden == 0, 'table-row', 'none');
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Ctl_SetPosition(V_CtlID, V_Position){
if(V_CtlID == 0){return;};
var TCtl = document.getElementById('_' + V_CtlID + '_ctl');
TCtl.style.position = V_Position;
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Ctl_SetMarginX(V_CtlID, V_Margin){
if(V_CtlID == 0){return;};
var TCtl = document.getElementById('_' + V_CtlID + '_ctl');
TCtl.style.margin = V_Margin;
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Ctl_SetDisabled(V_CtlID, V_Disabled){
if(V_CtlID == 0){return;};
var TCtl = document.getElementById('_' + V_CtlID + '_ctl');
TCtl.disabled = XIff(V_Disabled == 1, true, false);
};



//################################################################################################################################################################################################
function Ctl_SetData(V_CtlID, V_Name, V_Value){
if(V_CtlID == 0){return;};
var TItem = document.getElementById('_' + V_CtlID + '_ctl');
TItem.dataset['__data_' + V_Name] = V_Value;
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Ctl_GetData(V_CtlID, V_Name){
if(V_CtlID == 0){return '';};
var TItem = document.getElementById('_' + V_CtlID + '_ctl');
return TItem.dataset['__data_' + V_Name];
};



//################################################################################################################################################################################################
function Ctl_SetBackgroundColor(V_CtlID, V_Color){
if(V_CtlID == 0){return;};
var TCtl = document.getElementById('_' + V_CtlID + '_ctl');
TCtl.style.backgroundColor = V_Color;
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Ctl_SetBorder(V_CtlID, V_Border){
if(V_CtlID == 0){return;};
var TCtl = document.getElementById('_' + V_CtlID + '_ctl');
TCtl.style.border = V_Border;
};



//################################################################################################################################################################################################
function Ctl_SetCallback(V_CtlID, V_EventName, V_Function){
if(V_CtlID == 0){return;};
var TCtl = document.getElementById('_' + V_CtlID + '_ctl');
TCtl.addEventListener(V_EventName, V_Function);
return TCtl.value;
};




//################################################################################################################################################################################################
function Button_Create(V_Parrent, V_Left, V_Top, V_Width, V_Height, V_Title, V_Callback, V_ToolTip){
G_UNIQUEID += 1;
var TCtlID = G_UNIQUEID;
var TData = '';
TData += '<button id="_' + TCtlID + '_ctl" class="ctl_button" onclick="' + V_Callback + '(' + TCtlID + ');"' + ToolTipPrepare(V_ToolTip) + '>';
TData += V_Title;
TData += '</button>';
document.getElementById('_' + V_Parrent + '_body').insertAdjacentHTML('beforeend', TData);
var TCtl = document.getElementById('_' + TCtlID + '_ctl');
TCtl.style.left = V_Left + 'px';
TCtl.style.top = V_Top + 'px';
TCtl.style.width = V_Width + 'px';
TCtl.style.height = V_Height + 'px';
TCtl.dataset['parrentid'] = V_Parrent;
TCtl.dataset['ctlid'] = TCtlID;
return TCtlID;
};



//################################################################################################################################################################################################
function Button_SetClassColor(V_CtlID, V_Class){
document.getElementById('_' + V_CtlID + '_ctl').className = 'ctl_button' + V_Class;
};



//################################################################################################################################################################################################
function Text_Create(V_Parrent, V_Left, V_Top, V_Width, V_Height, V_Key, V_Text, V_Placeholder){
G_UNIQUEID += 1;
var TCtlID = G_UNIQUEID;
var TData = '';
TData += '<input type="text" id="_' + TCtlID + '_ctl" class="ctl_text" value="' + Encoder.htmlEncode(V_Text.toString()) + '" placeholder="' + V_Placeholder + '">';
document.getElementById('_' + V_Parrent + '_body').insertAdjacentHTML('beforeend', TData);
var TCtl = document.getElementById('_' + TCtlID + '_ctl');
TCtl.style.left = V_Left + 'px';
TCtl.style.top = V_Top + 'px';
TCtl.style.width = V_Width + 'px';
TCtl.style.height = V_Height + 'px';
TCtl.dataset['parrentid'] = V_Parrent;
TCtl.dataset['ctlid'] = TCtlID;
TCtl.dataset['ctltype'] = 'text';
TCtl.dataset['key'] = V_Key;
return TCtlID;
};



//################################################################################################################################################################################################
function Phone_Create(V_Parrent, V_Left, V_Top, V_Width, V_Height, V_Key, V_Text, V_Placeholder){
G_UNIQUEID += 1;
var TCtlID = G_UNIQUEID;
var TData = '';
TData += '<input type="text" id="_' + TCtlID + '_ctl" class="ctl_text" value="' + Encoder.htmlEncode(V_Text) + '" placeholder="' + V_Placeholder + '">';
document.getElementById('_' + V_Parrent + '_body').insertAdjacentHTML('beforeend', TData);
var TCtl = document.getElementById('_' + TCtlID + '_ctl');
TCtl.style.left = V_Left + 'px';
TCtl.style.top = V_Top + 'px';
TCtl.style.width = V_Width + 'px';
TCtl.style.height = V_Height + 'px';
TCtl.dataset['parrentid'] = V_Parrent;
TCtl.dataset['ctlid'] = TCtlID;
TCtl.dataset['ctltype'] = 'phone';
TCtl.dataset['key'] = V_Key;
return TCtlID;
};



//################################################################################################################################################################################################
function Link_Create(V_Parrent, V_Left, V_Top, V_Width, V_Height, V_Key, V_Text, V_Placeholder){
G_UNIQUEID += 1;
var TCtlID = G_UNIQUEID;
var TData = '';
TData += '<input type="text" id="_' + TCtlID + '_ctl" class="ctl_text" value="' + Encoder.htmlEncode(V_Text) + '" placeholder="' + V_Placeholder + '">';
document.getElementById('_' + V_Parrent + '_body').insertAdjacentHTML('beforeend', TData);
var TCtl = document.getElementById('_' + TCtlID + '_ctl');
TCtl.style.left = V_Left + 'px';
TCtl.style.top = V_Top + 'px';
TCtl.style.width = V_Width + 'px';
TCtl.style.height = V_Height + 'px';
TCtl.dataset['parrentid'] = V_Parrent;
TCtl.dataset['ctlid'] = TCtlID;
TCtl.dataset['ctltype'] = 'link';
TCtl.dataset['key'] = V_Key;
return TCtlID;
};



//################################################################################################################################################################################################
function Text_Create_OnChange(V_Parrent, V_Left, V_Top, V_Width, V_Height, V_Key, V_Text, V_Placeholder, V_Callback){
G_UNIQUEID += 1;
var TCtlID = G_UNIQUEID;
var TData = '';
TData += '<input type="text" id="_' + TCtlID + '_ctl" class="ctl_text" value="' + Encoder.htmlEncode(V_Text) + '" placeholder="' + V_Placeholder + '" onchange="' + V_Callback + '(' + "'" + TCtlID + "'" + '")>';
document.getElementById('_' + V_Parrent + '_body').insertAdjacentHTML('beforeend', TData);
var TCtl = document.getElementById('_' + TCtlID + '_ctl');
TCtl.style.left = V_Left + 'px';
TCtl.style.top = V_Top + 'px';
TCtl.style.width = V_Width + 'px';
TCtl.style.height = V_Height + 'px';
TCtl.dataset['parrentid'] = V_Parrent;
TCtl.dataset['ctlid'] = TCtlID;
TCtl.dataset['ctltype'] = 'text';
TCtl.dataset['key'] = V_Key;
return TCtlID;
};



//################################################################################################################################################################################################
function Password_Create(V_Parrent, V_Left, V_Top, V_Width, V_Height, V_Key, V_Text, V_Placeholder){
G_UNIQUEID += 1;
var TCtlID = G_UNIQUEID;
var TData = '';
TData += '<input type="password" id="_' + TCtlID + '_ctl" class="ctl_text" value="' + Encoder.htmlEncode(V_Text) + '" placeholder="' + V_Placeholder + '">';
document.getElementById('_' + V_Parrent + '_body').insertAdjacentHTML('beforeend', TData);
var TCtl = document.getElementById('_' + TCtlID + '_ctl');
TCtl.style.left = V_Left + 'px';
TCtl.style.top = V_Top + 'px';
TCtl.style.width = V_Width + 'px';
TCtl.style.height = V_Height + 'px';
TCtl.dataset['parrentid'] = V_Parrent;
TCtl.dataset['ctlid'] = TCtlID;
TCtl.dataset['ctltype'] = 'password';
TCtl.dataset['key'] = V_Key;
return TCtlID;
};



//################################################################################################################################################################################################
function TextMultiline_Create(V_Parrent, V_Left, V_Top, V_Width, V_Height, V_Key, V_Text, V_Placeholder){
G_UNIQUEID += 1;
var TCtlID = G_UNIQUEID;
var TData = '';
TData += '<textarea type="text" id="_' + TCtlID + '_ctl" class="ctl_text" style="resize:none;" placeholder="' + V_Placeholder + '">' + V_Text + '</textarea>';
document.getElementById('_' + V_Parrent + '_body').insertAdjacentHTML('beforeend', TData);
var TCtl = document.getElementById('_' + TCtlID + '_ctl');
TCtl.style.left = V_Left + 'px';
TCtl.style.top = V_Top + 'px';
TCtl.style.width = V_Width + 'px';
TCtl.style.height = V_Height + 'px';
TCtl.dataset['parrentid'] = V_Parrent;
TCtl.dataset['ctlid'] = TCtlID;
TCtl.dataset['ctltype'] = 'textmultiline';
TCtl.dataset['key'] = V_Key;
return TCtlID;
};



//################################################################################################################################################################################################
function TextMultilineHTML_CreateX(V_Parrent, V_Left, V_Top, V_Width, V_Height, V_Key, V_Text, V_Placeholder){
G_UNIQUEID += 1;
var TCtlID = G_UNIQUEID;
var TData = '';
TData += '<div id="_' + TCtlID + '_ctl_" style="-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;"><textarea type="text" id="_' + TCtlID + '_ctl" class="ctl_text" style="resize:none;" placeholder="' + V_Placeholder + '">' + V_Text + '</textarea></div>';
document.getElementById('_' + V_Parrent + '_body').insertAdjacentHTML('beforeend', TData);
var TCtl = document.getElementById('_' + TCtlID + '_ctl');
TCtl.style.width = '100%';
//TCtl.style.height = '100%';
//TCtl.style.minHeight = V_Height;
TCtl.dataset['parrentid'] = V_Parrent;
TCtl.dataset['ctlid'] = TCtlID;
TCtl.dataset['ctltype'] = 'textmultilinehtml';
TCtl.dataset['key'] = V_Key;

CKEDITOR.instances['_' + TCtlID + '_ctl'];
G_CKE[TCtlID] = CKEDITOR.replace('_' + TCtlID + '_ctl',{toolbar:'Basic'});
CKEDITOR.removePlugins = 'resize';
CKEDITOR.config.resize_enabled = false;
CKEDITOR.config.width = 'calc(100% - 2px)';
CKEDITOR.config.height = '300px';

var TCtl = document.getElementById('_' + TCtlID + '_ctl_');
TCtl.style.position = 'absolute';
TCtl.style.left = V_Left + 'px';
TCtl.style.top = V_Top + 'px';
TCtl.style.width = V_Width;
TCtl.style.lineHeight = 'normal';
//TCtl.style.minHeight = V_Height;

var TRet = [];
TRet['ctlid'] = TCtlID;
TRet['ckedit'] = G_CKE[TCtlID];
TRet['ckeditid'] = TCtlID;
return TRet;
};



//################################################################################################################################################################################################
function TextMultilineHTML_Create(V_Parrent, V_Left, V_Top, V_Width, V_Height, V_Key, V_Text, V_Placeholder){
var TRet = TextMultilineHTML_CreateX(V_Parrent, V_Left, V_Top, V_Width, V_Height, V_Key, V_Text, V_Placeholder);
return TRet['ctlid'];
};



//################################################################################################################################################################################################
function Text_ValueGet(V_CtlID){
var TCtl = document.getElementById('_' + V_CtlID + '_ctl');
return TCtl.value;
};



//################################################################################################################################################################################################
function Text_ValueSet(V_CtlID, V_Value){
var TCtl = document.getElementById('_' + V_CtlID + '_ctl');
TCtl.value = V_Value;
};



//################################################################################################################################################################################################
function Text_Lock(V_CtlID, V_Locked){
document.getElementById('_' + V_CtlID + '_ctl').readOnly = XIff(V_Locked == 1, true, false);
};




//################################################################################################################################################################################################
function Frame_Create(V_Parrent, V_Left, V_Top, V_Width, V_Height){
G_UNIQUEID += 1;
var TCtlID = G_UNIQUEID;
var TData = '';
TData += '<div id="_' + TCtlID + '_ctl" class="ctl_frame">';
TData += '	<div id="_' + TCtlID + '_title" class="ctl_frame_title"></div>';
TData += '	<div id="_' + TCtlID + '_body" class="ctl_frame_body">';
TData += '	</div>';
TData += '</div>';
document.getElementById('_' + V_Parrent + '_body').insertAdjacentHTML('beforeend', TData);
var TCtl = document.getElementById('_' + TCtlID + '_ctl');
TCtl.style.left = V_Left + 'px';
TCtl.style.top = V_Top + 'px';
TCtl.style.width = V_Width + 'px';
TCtl.style.height = V_Height + 'px';
TCtl.dataset['parrentid'] = V_Parrent;
TCtl.dataset['ctlid'] = TCtlID;
return TCtlID;
};



//################################################################################################################################################################################################
function Frame_CreateAsLine(V_Parrent){
G_UNIQUEID += 1;
var TCtlID = G_UNIQUEID;
var TData = '';
TData += '<div id="_' + TCtlID + '_ctl" class="ctl_frameasline">';
TData += '	<div style="positon:relative;padding-top:6px;left:0px;top:0px;right:0px;"><div id="_' + TCtlID + '_menu" class="div_frame_menu" style="positon:relative;left:0px;top:0px;right:0px;"></div></div>';
TData += '	<div id="_' + TCtlID + '_title" class="ctl_frame_title"></div>';
TData += '	<div id="_' + TCtlID + '_body" class="ctl_frameasline_body">';
TData += '	</div>';
TData += '</div>';
document.getElementById('_' + V_Parrent + '_body').insertAdjacentHTML('beforeend', TData);
var TCtl = document.getElementById('_' + TCtlID + '_ctl');
TCtl.dataset['parrentid'] = V_Parrent;
TCtl.dataset['ctlid'] = TCtlID;
return TCtlID;
};



//################################################################################################################################################################################################
function Frame_SetBackgroundColorX(V_CtlID, V_Color){
var TCtl = document.getElementById('_' + V_CtlID + '_ctl');
TCtl.style.backgroundColor = V_Color;
};



//################################################################################################################################################################################################
function Frame_SetBorderX(V_CtlID, V_Border){
var TCtl = document.getElementById('_' + V_CtlID + '_ctl');
TCtl.style.border = V_Border;
};



//################################################################################################################################################################################################
function Frame_SetText(V_CtlID, V_Text){
var TCtl = document.getElementById('_' + V_CtlID + '_title');
TCtl.innerHTML = V_Text;
TCtl.style.paddingLeft = XIff(V_Text != '', '5px', '0px');
TCtl.style.paddingRight = TCtl.style.paddingLeft;
};



//################################################################################################################################################################################################
function Frame_SetBodyHTML(V_CtlID, V_Html){
var TCtl = document.getElementById('_' + V_CtlID + '_body');
TCtl.innerHTML = V_Html;
};



//################################################################################################################################################################################################
function Frame_MenuAdd(V_CtlID, V_IconPath, V_Callback, V_ToolTip){
G_UNIQUEID += 1;
var TMenuItemID = G_UNIQUEID;
document.getElementById('_' + V_CtlID + '_menu').style.display = "block";
var TCallback = V_Callback;
if(TCallback != ''){TCallback += '(' + TMenuItemID + ')';};
document.getElementById('_' + V_CtlID + '_menu').insertAdjacentHTML('beforeend', '<div id="_' + TMenuItemID + '_menu_item" class="div_window_menu_item" onclick="' + TCallback + '"' + ToolTipPrepare(V_ToolTip) + '><img id="_' + TMenuItemID + '_menu_item_img" class="div_window_menu_item_img" src="' + V_IconPath + '"></div>');
return TMenuItemID;
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Frame_MenuAddElem(V_CtlID){
G_UNIQUEID += 1;
var TMenuItemID = G_UNIQUEID;
document.getElementById('_' + V_CtlID + '_menu').style.display = "block";
document.getElementById('_' + V_CtlID + '_menu').insertAdjacentHTML('beforeend', '<div id="_' + TMenuItemID + '_menu_item" class="div_window_menu_itemelem"><div id="_' + TMenuItemID + '_body"></div></div>');
return TMenuItemID;
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Frame_MenuAddSpace(V_CtlID){
G_UNIQUEID += 1;
var TMenuItemID = G_UNIQUEID;
document.getElementById('_' + V_CtlID + '_menu').style.display = "block";
document.getElementById('_' + V_CtlID + '_menu').insertAdjacentHTML('beforeend', '<div id="_' + TMenuItemID + '_menu_item" class="div_window_menu_space"><div class="div_window_menu_spaceitem"></div></div>');
return TMenuItemID;
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Frame_Menu_SetData(V_CtlID, V_Name, V_Value){
var TItem = document.getElementById('_' + V_CtlID + '_menu_item');
TItem.dataset['__data_' + V_Name] = V_Value;
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Frame_Menu_GetData(V_CtlID, V_Name){
var TItem = document.getElementById('_' + V_CtlID + '_menu_item');
return TItem.dataset['__data_' + V_Name];
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Frame_Menu_Disable(V_CtlID, V_Disabled){
document.getElementById('_' + V_CtlID + '_menu_item').style.pointerEvents = XIff(V_Disabled == 1, 'none', 'auto');
document.getElementById('_' + V_CtlID + '_menu_item_img').className = XIff(V_Disabled == 1, 'div_window_menu_item_imgdis', 'div_window_menu_item_img');
};


//################################################################################################################################################################################################
function Container_Create(V_Parrent, V_Left, V_Top, V_Width, V_Height){
G_UNIQUEID += 1;
var TCtlID = G_UNIQUEID;
var TData = '';
TData += '<div id="_' + TCtlID + '_ctl" class="ctl_container">';
TData += '	<div id="_' + TCtlID + '_body" class="ctl_container_body"></div>';
TData += '</div>';
document.getElementById('_' + V_Parrent + '_body').insertAdjacentHTML('beforeend', TData);
var TCtl = document.getElementById('_' + TCtlID + '_ctl');
TCtl.style.left = V_Left + 'px';
TCtl.style.top = V_Top + 'px';
TCtl.style.width = V_Width + 'px';
TCtl.style.height = V_Height + 'px';
TCtl.dataset['parrentid'] = V_Parrent;
TCtl.dataset['ctlid'] = TCtlID;
return TCtlID;
};



//################################################################################################################################################################################################
function Container_SetBackgroundColorX(V_CtlID, V_Color){
var TCtl = document.getElementById('_' + V_CtlID + '_ctl');
TCtl.style.backgroundColor = V_Color;
};



//################################################################################################################################################################################################
function Container_SetBorderX(V_CtlID, V_Border){
var TCtl = document.getElementById('_' + V_CtlID + '_ctl');
TCtl.style.border = V_Border;
};



//################################################################################################################################################################################################
function SUPER_Image_Create(V_CtlID, V_Parrent, V_Left, V_Top, V_Width, V_Height, V_ImagePath){
var TCtlID = V_CtlID;
var TData = '';
TData += '<img id="_' + TCtlID + '_ctl" class="ctl_image" src="' + V_ImagePath + '">';
document.getElementById('_' + V_Parrent + '_body').insertAdjacentHTML('beforeend', TData);
var TCtl = document.getElementById('_' + TCtlID + '_ctl');
TCtl.style.left = V_Left + 'px';
TCtl.style.top = V_Top + 'px';
TCtl.style.width = V_Width + 'px';
TCtl.style.height = V_Height + 'px';
TCtl.dataset['parrentid'] = V_Parrent;
TCtl.dataset['ctlid'] = TCtlID;
return TCtlID;
};



//################################################################################################################################################################################################
function Image_Create(V_Parrent, V_Left, V_Top, V_Width, V_Height, V_ImagePath){
G_UNIQUEID += 1;
return SUPER_Image_Create(G_UNIQUEID, V_Parrent, V_Left, V_Top, V_Width, V_Height, V_ImagePath);
};



//################################################################################################################################################################################################
function Image_SetImage(V_CtlID, V_ImagePath){
document.getElementById('_' + V_CtlID + '_ctl').src = V_ImagePath;
};



//################################################################################################################################################################################################
function List_Create(V_Parrent, V_Left, V_Top, V_Width, V_Height){
G_UNIQUEID += 1;
var TCtlID = G_UNIQUEID;
var TData = '';
TData += '<div id="_' + TCtlID + '_ctl" class="ctl_list">';
TData += '	<div id="_' + TCtlID + '_body" class="ctl_list_body">';
TData += '	</div>';
TData += '</div>';
document.getElementById('_' + V_Parrent + '_body').insertAdjacentHTML('beforeend', TData);
var TCtl = document.getElementById('_' + TCtlID + '_ctl');
TCtl.style.left = V_Left + 'px';
TCtl.style.top = V_Top + 'px';
TCtl.style.width = V_Width + 'px';
TCtl.style.height = V_Height + 'px';
TCtl.dataset['parrentid'] = V_Parrent;
TCtl.dataset['ctlid'] = TCtlID;
return TCtlID;
};



//################################################################################################################################################################################################
function List_Clear(V_CtlID){
var TNode = document.getElementById('_' + V_CtlID + '_body');
while(TNode.firstChild){
    TNode.removeChild(TNode.firstChild);
};
};



//################################################################################################################################################################################################
function List_Add(V_CtlID, V_Style, V_Img, V_Text, V_OnClick, V_OnDblClick, V_ToolTip){
G_UNIQUEID += 1;
var TCtlItemID = G_UNIQUEID;
var TData = '';
var TOnClick = V_OnClick; if(TOnClick != ''){TOnClick += '(' + TCtlItemID + ');';};
var TOnDblClick = V_OnDblClick; if(TOnDblClick != ''){TOnDblClick += '(' + TCtlItemID + ');';};
TData += '<div id="_' + TCtlItemID + '_ctl_item" class="ctl_list_item_' + V_Style + '" onclick="' + TOnClick + '" ondblclick="' + TOnDblClick + '"' + ToolTipPrepare(V_ToolTip) + '>';
TData += '<div id="_' + TCtlItemID + '_ctl_item_image" class="ctl_list_item_' + V_Style + '_image"><img class="ctl_list_item_' + V_Style + '_image_img" src="' + V_Img + '"></div>';
TData += '<div id="_' + TCtlItemID + '_ctl_item_text" class="ctl_list_item_' + V_Style + '_text">' + V_Text + '</div>';
TData += '</div>';
document.getElementById('_' + V_CtlID + '_body').insertAdjacentHTML('beforeend', TData);
var TItem = document.getElementById('_' + TCtlItemID + '_ctl_item');
TItem.dataset['ctlid'] = V_CtlID;
return TCtlItemID;
};



//################################################################################################################################################################################################
function List_Item_SetData(V_ItemID, V_Name, V_Value){
var TItem = document.getElementById('_' + V_ItemID + '_ctl_item');
TItem.dataset['__list_' + V_Name] = V_Value;
};



//################################################################################################################################################################################################
function List_Item_GetData(V_ItemID, V_Name){
var TItem = document.getElementById('_' + V_ItemID + '_ctl_item');
return TItem.dataset['__list_' + V_Name];
};





//################################################################################################################################################################################################
function Label_Create(V_Parrent, V_Left, V_Top, V_Width, V_Height, V_Text){
G_UNIQUEID += 1;
var TCtlID = G_UNIQUEID;
var TData = '';
TData += '<div id="_' + TCtlID + '_ctl" class="ctl_label">' + V_Text + '</div>';
document.getElementById('_' + V_Parrent + '_body').insertAdjacentHTML('beforeend', TData);
var TCtl = document.getElementById('_' + TCtlID + '_ctl');
TCtl.style.left = V_Left + 'px';
TCtl.style.top = V_Top + 'px';
TCtl.style.width = V_Width + 'px';
TCtl.style.height = V_Height + 'px';
TCtl.style.lineHeight = V_Height + 'px';
TCtl.dataset['parrentid'] = V_Parrent;
TCtl.dataset['ctlid'] = TCtlID;
return TCtlID;
};




//################################################################################################################################################################################################
function Checkbox_CreateX(V_Parrent, V_Left, V_Top, V_Width, V_Height, V_Key, V_Value, V_ToolTip, V_CallbackChange){
G_UNIQUEID += 1;
var TCtlID = G_UNIQUEID;
var TData = '';
var TCallback = '';
if(V_CallbackChange != ''){TCallback = ' onchange="' + V_CallbackChange + '(' + TCtlID + ');"'};
TData += '<label id="_' + TCtlID + '_ctl" class="ctl_checkbox"' + ToolTipPrepare(V_ToolTip) + ' style="position:relative;">';
TData += '<input id="_' + TCtlID + '_ctl_checkbox" type="checkbox"' + XIff(V_Value == 1, ' checked="checked"', '') + TCallback + '>';
TData += '<span class="ctl_checkbox_checkmark"></span>';
TData += '</label>';
document.getElementById('_' + V_Parrent + '_body').insertAdjacentHTML('beforeend', TData);
var TCtl = document.getElementById('_' + TCtlID + '_ctl');
TCtl.style.left = V_Left + 'px';
TCtl.style.top = V_Top + 'px';
TCtl.style.width = V_Width + 'px';
TCtl.style.height = V_Height + 'px';
TCtl.dataset['parrentid'] = V_Parrent;
TCtl.dataset['ctlid'] = TCtlID;
var TCtlInput = document.getElementById('_' + TCtlID + '_ctl_checkbox');
TCtlInput.dataset['parrentid'] = V_Parrent;
TCtlInput.dataset['ctlid'] = TCtlID;
TCtlInput.dataset['ctltype'] = 'checkbox';
TCtlInput.dataset['key'] = V_Key;
return TCtlID;
};



//################################################################################################################################################################################################
function Checkbox_Create(V_Parrent, V_Left, V_Top, V_Width, V_Height, V_Key, V_Value, V_ToolTip){
return Checkbox_CreateX(V_Parrent, V_Left, V_Top, V_Width, V_Height, V_Key, V_Value, V_ToolTip, '');
};



//################################################################################################################################################################################################
function Checkbox_ValueGet(V_CtlID){
var TCtl = document.getElementById('_' + V_CtlID + '_ctl_checkbox');
return XIff(TCtl.checked == true, 1, 0);
};



//################################################################################################################################################################################################
function Checkbox_ValueSet(V_CtlID, V_Value){
var TCtl = document.getElementById('_' + V_CtlID + '_ctl_checkbox');
TCtl.checked = XIff(V_Value == 1, true, false);
};




//################################################################################################################################################################################################
function Dropbox_Create(V_Parrent, V_Left, V_Top, V_Width, V_Height, V_Key, V_OnChange){
G_UNIQUEID += 1;
var TCtlID = G_UNIQUEID;
var TData = '';
var TOnChange = V_OnChange; if(TOnChange != ''){TOnChange += '(' + TCtlID + ');';};
TData += '<select id="_' + TCtlID + '_ctl" class="ctl_dropbox" onchange="' + TOnChange + '"></select>';
document.getElementById('_' + V_Parrent + '_body').insertAdjacentHTML('beforeend', TData);
var TCtl = document.getElementById('_' + TCtlID + '_ctl');
TCtl.style.left = V_Left + 'px';
TCtl.style.top = V_Top + 'px';
TCtl.style.width = V_Width + 'px';
TCtl.style.height = V_Height + 'px';
TCtl.dataset['parrentid'] = V_Parrent;
TCtl.dataset['ctlid'] = TCtlID;
TCtl.dataset['ctltype'] = 'dropbox';
TCtl.dataset['key'] = V_Key;
return TCtlID;
};



//################################################################################################################################################################################################
function Dropbox_Clear(V_CtlID){
var TCtl = document.getElementById('_' + V_CtlID + '_ctl');
TCtl.innerHTML = '';
};



//################################################################################################################################################################################################
function Dropbox_Add(V_CtlID, V_ID, V_Text, V_Selected){
G_UNIQUEID += 1;
var TCtlItemID = G_UNIQUEID;
var TData = '';
TData += '<option id="_' + TCtlItemID + '_ctl_item" class="ctl_dropbox_item" value="' + V_ID + '"' + XIff(V_Selected == 1, ' selected', '') + '>' + V_Text + '</option>';
document.getElementById('_' + V_CtlID + '_ctl').insertAdjacentHTML('beforeend', TData);
var TItem = document.getElementById('_' + TCtlItemID + '_ctl_item');
TItem.dataset['ctlid'] = V_CtlID;
return TCtlItemID;
};



//################################################################################################################################################################################################
function Dropbox_ValueGet(V_CtlID){
var TCtl = document.getElementById('_' + V_CtlID + '_ctl');
return TCtl.options[TCtl.selectedIndex].value;
};



//################################################################################################################################################################################################
function Dropbox_Lock(V_CtlID, V_Locked){
document.getElementById('_' + V_CtlID + '_ctl').readOnly = XIff(V_Locked == 1, true, false);
};




//################################################################################################################################################################################################
function Table_Create(V_Parrent, V_Left, V_Top, V_Width, V_Height){
G_UNIQUEID += 1;
var TCtlID = G_UNIQUEID;
var TData = '';
TData += '<div id="_' + TCtlID + '_ctl" class="ctl_table"><div id="_' + TCtlID + '_body" class="ctl_table_body">';
TData += '</div></div>';
document.getElementById('_' + V_Parrent + '_body').insertAdjacentHTML('beforeend', TData);
var TCtl = document.getElementById('_' + TCtlID + '_ctl');
TCtl.style.left = V_Left + 'px';
TCtl.style.top = V_Top + 'px';
TCtl.style.width = V_Width + 'px';
TCtl.style.height = V_Height + 'px';
TCtl.dataset['parrentid'] = V_Parrent;
TCtl.dataset['ctlid'] = TCtlID;
return TCtlID;
};



//################################################################################################################################################################################################
function Table_Clear(V_CtlID){
var TCtl = document.getElementById('_' + V_CtlID + '_body');
TCtl.innerHTML = '';
};



//################################################################################################################################################################################################
function Table_Row_Create(V_Parrent){
G_UNIQUEID += 1;
var TCtlID = G_UNIQUEID;
var TData = '';
TData += '<div id="_' + TCtlID + '_ctl" class="ctl_table_row">';
TData += '</div>';
document.getElementById('_' + V_Parrent + '_body').insertAdjacentHTML('beforeend', TData);
var TCtl = document.getElementById('_' + TCtlID + '_ctl');
TCtl.dataset['parrentid'] = V_Parrent;
TCtl.dataset['ctlid'] = TCtlID;
return TCtlID;
};



//################################################################################################################################################################################################
function Table_RowHover_Create(V_Parrent){
G_UNIQUEID += 1;
var TCtlID = G_UNIQUEID;
var TData = '';
TData += '<div id="_' + TCtlID + '_ctl" class="ctl_table_rowhover">';
TData += '</div>';
document.getElementById('_' + V_Parrent + '_body').insertAdjacentHTML('beforeend', TData);
var TCtl = document.getElementById('_' + TCtlID + '_ctl');
TCtl.dataset['parrentid'] = V_Parrent;
TCtl.dataset['ctlid'] = TCtlID;
return TCtlID;
};



//################################################################################################################################################################################################
function Table_RowHover_CreateDbl(V_Parrent, V_Callback, V_CallbackParam){
G_UNIQUEID += 1;
var TCtlID = G_UNIQUEID;
var TData = '';
TData += '<div id="_' + TCtlID + '_ctl" class="ctl_table_rowhover" ondblclick="' + V_Callback + '(' + "'" + V_CallbackParam + "'" + ')">';
TData += '</div>';
document.getElementById('_' + V_Parrent + '_body').insertAdjacentHTML('beforeend', TData);
var TCtl = document.getElementById('_' + TCtlID + '_ctl');
TCtl.dataset['parrentid'] = V_Parrent;
TCtl.dataset['ctlid'] = TCtlID;
return TCtlID;
};



//################################################################################################################################################################################################
function Table_Cell_Create(V_Parrent, V_WidthX, V_Text){
G_UNIQUEID += 1;
var TCtlID = G_UNIQUEID;
var TData = '';
TData += '<div id="_' + TCtlID + '_ctl" class="ctl_table_cell"><div id="_' + TCtlID + '_body" class="ctl_table_cell_body">';
TData += V_Text;
TData += '</div></div>';
document.getElementById('_' + V_Parrent + '_ctl').insertAdjacentHTML('beforeend', TData);
var TCtl = document.getElementById('_' + TCtlID + '_ctl');
if(V_WidthX != ''){
	TCtl.style.width = V_WidthX;
	TCtl.style.minWidth = V_WidthX;
	TCtl.style.maxWidth = V_WidthX;
};
TCtl.dataset['parrentid'] = V_Parrent;
TCtl.dataset['ctlid'] = TCtlID;
return TCtlID;
};



//################################################################################################################################################################################################
function Table_Cell_CreateLast(V_Parrent, V_WidthX, V_Text){
G_UNIQUEID += 1;
var TCtlID = G_UNIQUEID;
var TData = '';
TData += '<div id="_' + TCtlID + '_ctl" class="ctl_table_cell"><div id="_' + TCtlID + '_body" class="ctl_table_cell_body" style="border-top:1px solid #000000;">';
TData += V_Text;
TData += '</div></div>';
document.getElementById('_' + V_Parrent + '_ctl').insertAdjacentHTML('beforeend', TData);
var TCtl = document.getElementById('_' + TCtlID + '_ctl');
if(V_WidthX != ''){
	TCtl.style.width = V_WidthX;
	TCtl.style.minWidth = V_WidthX;
	TCtl.style.maxWidth = V_WidthX;
};
TCtl.dataset['parrentid'] = V_Parrent;
TCtl.dataset['ctlid'] = TCtlID;
return TCtlID;
};



//################################################################################################################################################################################################
function Table_Cell_CreateDbl(V_Parrent, V_WidthX, V_Text, V_Callback){
G_UNIQUEID += 1;
var TCtlID = G_UNIQUEID;
var TData = '';
TData += '<div id="_' + TCtlID + '_ctl" class="ctl_table_cell" ondblclick="' + V_Callback + '(' + "'" + TCtlID + "'" + ')"><div id="_' + TCtlID + '_body" class="ctl_table_cell_body">';
TData += V_Text;
TData += '</div></div>';
document.getElementById('_' + V_Parrent + '_ctl').insertAdjacentHTML('beforeend', TData);
var TCtl = document.getElementById('_' + TCtlID + '_ctl');
if(V_WidthX != ''){
	TCtl.style.width = V_WidthX;
	TCtl.style.minWidth = V_WidthX;
	TCtl.style.maxWidth = V_WidthX;
};
TCtl.dataset['parrentid'] = V_Parrent;
TCtl.dataset['ctlid'] = TCtlID;
return TCtlID;
};



//################################################################################################################################################################################################
function Table_Cell_CreateClick(V_Parrent, V_WidthX, V_Text, V_Callback, V_CallbackParam){
G_UNIQUEID += 1;
var TCtlID = G_UNIQUEID;
var TData = '';
TData += '<div id="_' + TCtlID + '_ctl" class="ctl_table_cell" onclick="' + V_Callback + '(' + "'" + V_CallbackParam + "'" + ')"><div id="_' + TCtlID + '_body" class="ctl_table_cell_body">';
TData += V_Text;
TData += '</div></div>';
document.getElementById('_' + V_Parrent + '_ctl').insertAdjacentHTML('beforeend', TData);
var TCtl = document.getElementById('_' + TCtlID + '_ctl');
if(V_WidthX != ''){
	TCtl.style.width = V_WidthX;
	TCtl.style.minWidth = V_WidthX;
	TCtl.style.maxWidth = V_WidthX;
};
TCtl.dataset['parrentid'] = V_Parrent;
TCtl.dataset['ctlid'] = TCtlID;
return TCtlID;
};



//################################################################################################################################################################################################
function Table_CellHover_CreateClick(V_Parrent, V_WidthX, V_Text, V_Callback, V_CallbackParam){
G_UNIQUEID += 1;
var TCtlID = G_UNIQUEID;
var TData = '';
TData += '<div id="_' + TCtlID + '_ctl" class="ctl_table_cellitemhover" onclick="' + V_Callback + '(' + "'" + V_CallbackParam + "'" + ')"><div id="_' + TCtlID + '_body" class="ctl_table_cell_body">';
TData += V_Text;
TData += '</div></div>';
document.getElementById('_' + V_Parrent + '_ctl').insertAdjacentHTML('beforeend', TData);
var TCtl = document.getElementById('_' + TCtlID + '_ctl');
if(V_WidthX != ''){
	TCtl.style.width = V_WidthX;
	TCtl.style.minWidth = V_WidthX;
	TCtl.style.maxWidth = V_WidthX;
};
TCtl.dataset['parrentid'] = V_Parrent;
TCtl.dataset['ctlid'] = TCtlID;
return TCtlID;
};



//################################################################################################################################################################################################
function Table_Cell_SetNoWrap(V_CtlID){
var TCtl = document.getElementById('_' + V_CtlID + '_ctl');
TCtl.style.whiteSpace = 'nowrap';
};



//################################################################################################################################################################################################
function Table_Cell_SetTextAlign(V_CtlID, V_Align){
var TCtl = document.getElementById('_' + V_CtlID + '_ctl');
TCtl.style.textAlign = V_Align;
};




//################################################################################################################################################################################################
function Date_Create(V_Parrent, V_Left, V_Top, V_Width, V_Height, V_Key, V_Date, V_Placeholder){
G_UNIQUEID += 1;
var TCtlID = G_UNIQUEID;
var TData = '';
TData += '<input type="text" id="_' + TCtlID + '_ctl" class="ctl_date" autocomplete=off value="' + FormatDate(V_Date) + '" placeholder="' + V_Placeholder + '">';
document.getElementById('_' + V_Parrent + '_body').insertAdjacentHTML('beforeend', TData);
var TCtl = document.getElementById('_' + TCtlID + '_ctl');
TCtl.style.left = V_Left + 'px';
TCtl.style.top = V_Top + 'px';
TCtl.style.width = V_Width + 'px';
TCtl.style.height = V_Height + 'px';
TCtl.dataset['parrentid'] = V_Parrent;
TCtl.dataset['ctlid'] = TCtlID;
TCtl.dataset['ctltype'] = 'date';
TCtl.dataset['key'] = V_Key;
return TCtlID;
};



//################################################################################################################################################################################################
function Date_CreateDateTime(V_Parrent, V_Left, V_Top, V_Width, V_Height, V_Key, V_Date, V_Placeholder){
G_UNIQUEID += 1;
var TCtlID = G_UNIQUEID;
var TData = '';
TData += '<input type="text" id="_' + TCtlID + '_ctl" class="ctl_date" autocomplete=off value="' + FormatDateTime(V_Date) + '" placeholder="' + V_Placeholder + '">';
document.getElementById('_' + V_Parrent + '_body').insertAdjacentHTML('beforeend', TData);
var TCtl = document.getElementById('_' + TCtlID + '_ctl');
TCtl.style.left = V_Left + 'px';
TCtl.style.top = V_Top + 'px';
TCtl.style.width = V_Width + 'px';
TCtl.style.height = V_Height + 'px';
TCtl.dataset['parrentid'] = V_Parrent;
TCtl.dataset['ctlid'] = TCtlID;
TCtl.dataset['ctltype'] = 'datetime';
TCtl.dataset['key'] = V_Key;
return TCtlID;
};



//################################################################################################################################################################################################
function Date_ValueGet(V_CtlID){
var TCtl = document.getElementById('_' + V_CtlID + '_ctl');
return TCtl.value;
};



//################################################################################################################################################################################################
function DateTime_ValueGet(V_CtlID){
var TCtl = document.getElementById('_' + V_CtlID + '_ctl');
return TCtl.value;
};



//################################################################################################################################################################################################
function Date_Lock(V_CtlID, V_Locked){
document.getElementById('_' + V_CtlID + '_ctl').readOnly = XIff(V_Locked == 1, true, false);
};




//################################################################################################################################################################################################
function Radio_Create(V_Parrent, V_Left, V_Top, V_Width, V_Height, V_Key, V_Value){
G_UNIQUEID += 1;
var TCtlID = G_UNIQUEID;
var TData = '';
TData += '<input type="radio" id="_' + TCtlID + '_ctl" class="ctl_radio" value="' + V_Value + '">';
document.getElementById('_' + V_Parrent + '_body').insertAdjacentHTML('beforeend', TData);
var TCtl = document.getElementById('_' + TCtlID + '_ctl');
TCtl.style.left = V_Left + 'px';
TCtl.style.top = V_Top + 'px';
TCtl.style.width = V_Width + 'px';
TCtl.style.height = V_Height + 'px';
TCtl.dataset['parrentid'] = V_Parrent;
TCtl.dataset['ctlid'] = TCtlID;
TCtl.dataset['ctltype'] = 'radio';
TCtl.dataset['key'] = V_Key;
return TCtlID;
};



//################################################################################################################################################################################################
function Radio_ValueGet(V_CtlID){
console.log(V_CtlID)
var TCtl = document.getElementById('_' + V_CtlID + '_ctl');
var TKey = TCtl.dataset['key'];
var TItems = document.getElementsByName(TKey);
for (var i = 0, length = TItems.length; i < length; i++){
	if (TItems[i].checked){return TItems[i].value;};
};
return 0;
};




//################################################################################################################################################################################################
function Color_Create(V_Parrent, V_Left, V_Top, V_Width, V_Height, V_Key, V_Date, V_Placeholder){
G_UNIQUEID += 1;
var TCtlID = G_UNIQUEID;
var TData = '';
TData += '<input type="color" id="_' + TCtlID + '_ctl" class="ctl_color" autocomplete=off value="' + V_Date + '" placeholder="' + V_Placeholder + '">';
document.getElementById('_' + V_Parrent + '_body').insertAdjacentHTML('beforeend', TData);
var TCtl = document.getElementById('_' + TCtlID + '_ctl');
TCtl.style.left = V_Left + 'px';
TCtl.style.top = V_Top + 'px';
TCtl.style.width = V_Width + 'px';
TCtl.style.height = V_Height + 'px';
TCtl.dataset['parrentid'] = V_Parrent;
TCtl.dataset['ctlid'] = TCtlID;
TCtl.dataset['ctltype'] = 'color';
TCtl.dataset['key'] = V_Key;
return TCtlID;
};



//################################################################################################################################################################################################
function Color_ValueGet(V_CtlID){
var TCtl = document.getElementById('_' + V_CtlID + '_ctl');
return TCtl.value;
};



//################################################################################################################################################################################################
function Color_Lock(V_CtlID, V_Locked){
document.getElementById('_' + V_CtlID + '_ctl').readOnly = XIff(V_Locked == 1, true, false);
};




//################################################################################################################################################################################################
function Price_Create(V_Parrent, V_Left, V_Top, V_Width, V_Height, V_Key, V_Price, V_Placeholder){
G_UNIQUEID += 1;
var TCtlID = G_UNIQUEID;
var TData = '';
TData += '<input type="text" id="_' + TCtlID + '_ctl" class="ctl_text" value="' + FormatPreisInput(V_Price) + '" placeholder="' + V_Placeholder + '">';
document.getElementById('_' + V_Parrent + '_body').insertAdjacentHTML('beforeend', TData);
var TCtl = document.getElementById('_' + TCtlID + '_ctl');
TCtl.style.left = V_Left + 'px';
TCtl.style.top = V_Top + 'px';
TCtl.style.width = V_Width + 'px';
TCtl.style.height = V_Height + 'px';
TCtl.dataset['parrentid'] = V_Parrent;
TCtl.dataset['ctlid'] = TCtlID;
TCtl.dataset['ctltype'] = 'price';
TCtl.dataset['key'] = V_Key;
return TCtlID;
};



//################################################################################################################################################################################################
function Price_ValueGet(V_CtlID){
var TCtl = document.getElementById('_' + V_CtlID + '_ctl');
var TPart = TCtl.value.split(',');
console.log(TPart);
var TVal = 0;
if(TPart.length > 1){
	TVal = ((parseInt(TPart[0]) * 1000) + parseInt(parseInt(TPart[1]) * 10));
}else if(TPart.length == 1){
	TVal = (parseInt(TPart[0]) * 1000);
};
console.log(TVal);
return TVal;
};



//################################################################################################################################################################################################
function Price_ValueSet(V_CtlID, V_Value){
var TCtl = document.getElementById('_' + V_CtlID + '_ctl');
TCtl.value = FormatPreis(V_Value);
};



//################################################################################################################################################################################################
function Price_Lock(V_CtlID, V_Locked){
document.getElementById('_' + V_CtlID + '_ctl').readOnly = XIff(V_Locked == 1, true, false);
};




//################################################################################################################################################################################################
function Geo_Create(V_Parrent, V_Left, V_Top, V_Width, V_Height, V_Key, V_Value, V_ViewOnly){
G_UNIQUEID += 1;
var TCtlID = G_UNIQUEID;
var TData = '';

var TZoom = 15;
var TLat = V_Value['lat'];
var TLng = V_Value['lng'];
if(TLat == ''){TLat = 0;};
if(TLng == ''){TLng = 0;};
if((TLat == 0) && (TLng == 0)){
	TLat = 48.715527;
	TLng = 10.783742;
	TZoom = 10;
};

TData += '<input type="hidden" id="_' + TCtlID + '_ctl_lat" value="' + TLat + '">';
TData += '<input type="hidden" id="_' + TCtlID + '_ctl_lng" value="' + TLng + '">';
TData += '<div id="gmapm_' + TCtlID + '" style="padding:0px;background-color:#AACCFF;height:100%;width:100%"></div>';
TData += '<div id="gmapm_' + TCtlID + '_info" data-__data_ctlid="' + TCtlID + '" style="color:#000000;"></div>';

TData = '<div id="_' + TCtlID + '_ctl" class="ctl_geo">' + TData + '</div>';
document.getElementById('_' + V_Parrent + '_body').insertAdjacentHTML('beforeend', TData);
var TCtl = document.getElementById('_' + TCtlID + '_ctl');
TCtl.style.left = V_Left + 'px';
TCtl.style.top = V_Top + 'px';
TCtl.style.width = V_Width + 'px';
TCtl.style.height = V_Height + 'px';
TCtl.style.minHeight = '100px';
TCtl.dataset['parrentid'] = V_Parrent;
TCtl.dataset['ctlid'] = TCtlID;
TCtl.dataset['ctltype'] = 'geo';
TCtl.dataset['key'] = V_Key;

var TCtl = document.getElementById('_' + TCtlID + '_ctl_lat');
TCtl.dataset['parrentid'] = V_Parrent;
TCtl.dataset['ctlid'] = TCtlID;
TCtl.dataset['ctltype'] = 'geo';
TCtl.dataset['key'] = 'lat';


var mapOptions = {
	zoom: TZoom,
	center: new google.maps.LatLng(TLat, TLng),
	mapTypeId: google.maps.MapTypeId.ROADMAP
};
var mapElement = document.getElementById('gmapm_' + TCtlID);
var map = new google.maps.Map(mapElement, mapOptions);
var TDraggable = false;
if(V_ViewOnly == 0){TDraggable = true;};
var marker = new google.maps.Marker({
	position: new google.maps.LatLng(TLat, TLng),
	title: '',
	map: map,
	draggable: TDraggable,
});
if(V_ViewOnly == 0){
	google.maps.event.addListener(marker, 'dragend', function(){
		var TObj = document.getElementById('gmapm_info_' + TCtlID);
		var TLat = marker.getPosition().lat();
		var TLng = marker.getPosition().lng();
		document.getElementById('_' + TCtlID + '_ctl_lat').value = TLat;
		document.getElementById('_' + TCtlID + '_ctl_lng').value = TLng;
	});
};

return TCtlID;
};



//################################################################################################################################################################################################
function Geo_ValueGet(V_CtlID){
var TValue = [];
TValue['lat'] = document.getElementById('_' + V_CtlID + '_ctl_lat').value;
TValue['lng'] = document.getElementById('_' + V_CtlID + '_ctl_lon').value;
return TValue;
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Geo_ValueGet_Lat(V_CtlID){
return document.getElementById('_' + V_CtlID + '_ctl_lat').value;
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Geo_ValueGet_Lng(V_CtlID){
return document.getElementById('_' + V_CtlID + '_ctl_lng').value;
};

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function Geo_ValueGetKey(V_CtlID, V_Key){
switch(V_Key){
	case 'lat': return document.getElementById('_' + V_CtlID + '_ctl_lat').value;
	case 'lng': return document.getElementById('_' + V_CtlID + '_ctl_lng').value;
};
};



//################################################################################################################################################################################################
function Geo_ValueSet(V_CtlID, V_Value){
document.getElementById('_' + V_CtlID + '_ctl_lat').value = V_Value['lat'];
document.getElementById('_' + V_CtlID + '_ctl_lng').value = V_Value['lng'];
};




//################################################################################################################################################################################################
function Input_INT_DateSelect_Click(V_WinID, V_Day){
var TTargetID = Window_GetData(V_WinID, 'targetinputctlid');
var TCallback = Ctl_GetData(TTargetID, 'callback');
var TYear = parseInt(Window_GetData(V_WinID, 'year'));
var TMonth = parseInt(Window_GetData(V_WinID, 'month'));
var TDay = parseInt(V_Day);
if(TYear < 10){TYear = '0' + TYear;};
if(TMonth < 10){TMonth = '0' + TMonth;};
if(TDay < 10){TDay = '0' + TDay;};
var TDateTime = document.getElementById('_' + TTargetID + '_ctl').value;
if(TDateTime == ''){TDateTime = '0000.00.00 - 00:00:00';};
var TDateTimePart = TDateTime.split(" - ");
var TDatePart = TDateTimePart[0].split(".");
if(typeof TDateTimePart[1] !== 'undefined'){
	var TTimePart = TDateTimePart[1].split(":");
	var TDate = new Date(TDatePart[0], TDatePart[1] - 1, TDatePart[2], TTimePart[0], TTimePart[1], TTimePart[2]);
	var THour = TDate.getHours();
	if(THour < 10){THour = '0' + THour;};
	var TMinute = TDate.getMinutes();
	if(TMinute < 10){TMinute = '0' + TMinute;};
	var TSecond = TDate.getSeconds();
	if(TSecond < 10){TSecond = '0' + TSecond;};
	document.getElementById('_' + TTargetID + '_ctl').value = TYear + '.' + TMonth + '.' + TDay + ' - ' + THour + ':' + TMinute + ':' + TSecond;
}else{
	var TDateOld = new Date(TDatePart[0], TDatePart[1] - 1, TDatePart[2], 0, 0, 0);
	document.getElementById('_' + TTargetID + '_ctl').value = TYear + '.' + TMonth + '.' + TDay;
};
Window_Destroy(V_WinID);
if(TCallback != ''){window[TCallback](TTargetID);};
};



//################################################################################################################################################################################################
function Input_INT_DateSelect6_Click(V_WinID, V_Day, V_Month, V_Year){
var TTargetID = Window_GetData(V_WinID, 'targetinputctlid');
var TCallback = Ctl_GetData(TTargetID, 'callback');
var TYear = parseInt(V_Year);
var TMonth = parseInt(V_Month);
var TDay = parseInt(V_Day);
if(TYear < 10){TYear = '0' + TYear;};
if(TMonth < 10){TMonth = '0' + TMonth;};
if(TDay < 10){TDay = '0' + TDay;};
var TDateTime = document.getElementById('_' + TTargetID + '_ctl').value;
if(TDateTime == ''){TDateTime = '0000.00.00 - 00:00:00';};
var TDateTimePart = TDateTime.split(" - ");
var TDatePart = TDateTimePart[0].split(".");
if(typeof TDateTimePart[1] !== 'undefined'){
	var TTimePart = TDateTimePart[1].split(":");
	var TDate = new Date(TDatePart[0], TDatePart[1] - 1, TDatePart[2], TTimePart[0], TTimePart[1], TTimePart[2]);
	var THour = TDate.getHours();
	if(THour < 10){THour = '0' + THour;};
	var TMinute = TDate.getMinutes();
	if(TMinute < 10){TMinute = '0' + TMinute;};
	var TSecond = TDate.getSeconds();
	if(TSecond < 10){TSecond = '0' + TSecond;};
	document.getElementById('_' + TTargetID + '_ctl').value = TYear + '.' + TMonth + '.' + TDay + ' - ' + THour + ':' + TMinute + ':' + TSecond;
}else{
	var TDateOld = new Date(TDatePart[0], TDatePart[1] - 1, TDatePart[2], 0, 0, 0);
	document.getElementById('_' + TTargetID + '_ctl').value = TYear + '.' + TMonth + '.' + TDay;
};
Window_Destroy(V_WinID);
if(TCallback != ''){window[TCallback](TTargetID);};
};



//################################################################################################################################################################################################
function Input_INT_DateSelectCreateCalBuild(V_WinID, V_Year, V_Month){
Window_SetLock(V_WinID, 1)
Window_SetData(V_WinID, 'year', V_Year);
Window_SetData(V_WinID, 'month', V_Month);
var TContID = Window_GetData(V_WinID, 'container');
var TDateTime = Window_GetData(V_WinID, 'oldvalue');
if(TDateTime == ''){TDateTime = '0000.00.00 - 00:00:00';};
var TDateTimePart = TDateTime.split(" - ");
var TDatePart = TDateTimePart[0].split(".");
if(typeof TDateTimePart[1] !== 'undefined'){
	var TTimePart = TDateTimePart[1].split(":");
	var TDateOld = new Date(TDatePart[0], TDatePart[1] - 1, TDatePart[2], TTimePart[0], TTimePart[1], TTimePart[2]);
}else{
	var TDateOld = new Date(TDatePart[0], TDatePart[1] - 1, TDatePart[2], 0, 0, 0);
};
var TMonthsKey = {1: "January", 2: "February", 3: "March", 4: "April", 5: "May", 6: "June", 7: "July", 8: "August", 9: "September", 10: "October", 11: "November", 12: "December"};
var TDays = [{"date": 1, "selected": false}, {"date": 3, "selected": false}, {"date": 4, "selected": false}, {"date": 6, "selected": false}, {"date": 9, "selected": false}];
var TLangDaysKey = {"Mo": "Monday", "Di": "Tuesday", "Mi": "Wednesday", "Do": "Thursday", "Fr": "Friday", "Sa": "Saturday", "So": "Sunday"};
var TLangDays = ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"];
var TLangMonth = {1: "Januar", 2: "Februar", 3: "März", 4: "April", 5: "Mai", 6: "Juni", 7: "Juli", 8: "August", 9: "September", 10: "Oktober", 11: "November", 12: "Dezember"};
var TDate = new Date(TMonthsKey[V_Month] + " 1, " + V_Year + " 00:00:00 GMT+0000");
var TDateCur = new Date();
TDate = new Date(TMonthsKey[TDate.getMonth() + 1] + " 1, " + TDate.getFullYear() + " 00:00:00 GMT+0000");
var TData = '';
TData += '<div class="ctl_table" style="width:100%;height:20px;">';
TData += '<div class="ctl_table_row">';
var TNY = 0;
var TNM = 0;
TNY = TDate.getFullYear(); TNM = TDate.getMonth();
if(TNM <= 0){TNM = 12; TNY -= 1;};
TData += '<div class="ctl_table_cell" style="text-align:center;width:30px;"><div class="text_link_black notextsel" style="cursor:pointer;" onclick="Input_INT_DateSelectCreateCalBuild(' + V_WinID + ',' + (V_Year - 1) + ',' + V_Month + ');"><b>&lt;&lt;</b></div></div>';
TData += '<div class="ctl_table_cell" style="text-align:center;width:30px;"><div class="text_link_black notextsel" style="cursor:pointer;" onclick="Input_INT_DateSelectCreateCalBuild(' + V_WinID + ',' + TNY + ',' + TNM + ');"><b>&lt;</b></div></div>';
TData += '<div class="ctl_table_cell" style="text-align:center;"><b>(' + (TDate.getMonth() + 1) + ') ' + TLangMonth[TDate.getMonth() + 1] + ' ' + TDate.getFullYear() + '</b></div>';
TNY = TDate.getFullYear(); TNM = TDate.getMonth() + 2;
if(TNM >= 13){TNM = 1; TNY += 1;};
TData += '<div class="ctl_table_cell" style="text-align:center;width:30px;"><div class="text_link_black notextsel" style="cursor:pointer;" onclick="Input_INT_DateSelectCreateCalBuild(' + V_WinID + ',' + TNY + ',' + TNM + ');"><b>&gt;</b></div></div>';
TData += '<div class="ctl_table_cell" style="text-align:center;width:30px;"><div class="text_link_black notextsel" style="cursor:pointer;" onclick="Input_INT_DateSelectCreateCalBuild(' + V_WinID + ',' + (V_Year + 1) + ',' + V_Month + ');"><b>&gt;&gt;</b></div></div>';
TData += '</div>';
TData += '</div>';
TData += '';
TData += '<div class="ctl_table" style="table-layout:fixed;width:calc(100% - 1px);height:calc(100% - 1px);">';
TData += '<div class="ctl_table_row">';
for(x = 0; x < 7; x++){
	TData += '<div class="ctl_table_cell" style="height:20px;text-align:center;"><b>' + TLangDays[x] + '</b></div>';
};
TData += '</div><div class="ctl_table_row">';
var C = 0;
var TFrom = TDate.getDay();
if(TFrom == 0){TFrom = 7;};
var TPreMonDate = new Date(TDate.getTime());
TPreMonDate.setDate(TPreMonDate.getDate() - TFrom);
var TPreMonNum = TPreMonDate.getDate();
for(x = 1; x < TFrom; x++){
	TPreMonNum += 1;
	C += 1;
	TData += '<div class="selector_date_table_cell selector_date_table_cell_prev"></div>';
	if(C == 7){C = 0; TData += '</div><div class="ctl_table_row">';};
};
var TKey = TDate.getFullYear() + "_" + (TDate.getMonth() + 1) + "_"
var TTo = new Date(TDate.getFullYear(), TDate.getMonth() + 1, 0).getDate();
var TIsCurMon = false;
var TTDate = new Date();
var TCurDay = parseInt(TTDate.getDate());
if((TDate.getFullYear() == TTDate.getFullYear()) && (TDate.getMonth() == TTDate.getMonth())){TIsCurMon = true;};
var TBorderStyle = '';
for(x = 1; x <= TTo; x++){
	C += 1;
	TBorderStyle = '';
	if(TIsCurMon == true){if(x == TCurDay){TBorderStyle = 'now';};};
	if((TDateOld.getFullYear() == TDate.getFullYear()) && (TDateOld.getMonth() == TDate.getMonth()) && (TDateOld.getDate() == x)){TBorderStyle = 'sel';};
	TData += '<div class="selector_date_table_cell selector_date_table_cell_cur' + TBorderStyle + '" onclick="Input_INT_DateSelect_Click(' + V_WinID + ',' + x + ');"' + '"><b>' + x + '</b></div>';
	if(C >= 7){C = 0; TData += '</div>'; if(x <= TTo){TData += '<div class="ctl_table_row">';};};
};
if(C > 0){
	for(x = 1; x <= 7; x++){
		C += 1;
		TData += '<div class="selector_date_table_cell selector_date_table_cell_next"></div>';
		if(C >= 7){break;};
	};
};
TData += '</div>';
TData += '</div>';
document.getElementById('_' + TContID + '_ctl').innerHTML = TData;
Window_SetLock(V_WinID, 0)
};



//################################################################################################################################################################################################
function Input_INT_DateSelectCreateCalBuild6(V_WinID, V_Year, V_Month){
Window_SetLock(V_WinID, 1)
Window_SetData(V_WinID, 'year', V_Year);
Window_SetData(V_WinID, 'month', V_Month);
var TContID = Window_GetData(V_WinID, 'container');
var TDateTime = Window_GetData(V_WinID, 'oldvalue');
if(TDateTime == ''){TDateTime = '0000.00.00 - 00:00:00';};
var TDateTimePart = TDateTime.split(" - ");
var TDatePart = TDateTimePart[0].split(".");
if(typeof TDateTimePart[1] !== 'undefined'){
	var TTimePart = TDateTimePart[1].split(":");
	var TDateOld = new Date(TDatePart[0], TDatePart[1] - 1, TDatePart[2], TTimePart[0], TTimePart[1], TTimePart[2]);
}else{
	var TDateOld = new Date(TDatePart[0], TDatePart[1] - 1, TDatePart[2], 0, 0, 0);
};
var TMonthsKey = {1: "January", 2: "February", 3: "March", 4: "April", 5: "May", 6: "June", 7: "July", 8: "August", 9: "September", 10: "October", 11: "November", 12: "December"};
var TDays = [{"date": 1, "selected": false}, {"date": 3, "selected": false}, {"date": 4, "selected": false}, {"date": 6, "selected": false}, {"date": 9, "selected": false}];
var TLangDaysKey = {"Mo": "Monday", "Di": "Tuesday", "Mi": "Wednesday", "Do": "Thursday", "Fr": "Friday", "Sa": "Saturday", "So": "Sunday"};
var TLangDays = ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"];
var TLangMonth = {1: "Januar", 2: "Februar", 3: "März", 4: "April", 5: "Mai", 6: "Juni", 7: "Juli", 8: "August", 9: "September", 10: "Oktober", 11: "November", 12: "Dezember"};
var TDate = new Date(TMonthsKey[V_Month] + " 1, " + V_Year + " 00:00:00 GMT+0000");
var TDateCur = new Date();

var TData = '';
TData += '<div class="ctl_table" style="table-layout:fixed;width:100%;height:20px;">';
TData += '<div class="ctl_table_row">';
var TNY = 0;
var TNM = 0;
TNY = TDate.getFullYear(); TNM = TDate.getMonth();
if(TNM <= 0){TNM = 12; TNY -= 1;};
TData += '<div class="ctl_table_cell" style="text-align:center;width:30px;"><div class="text_link_black notextsel" style="cursor:pointer;" onclick="Input_INT_DateSelectCreateCalBuild6(' + V_WinID + ',' + TNY + ',' + TNM + ');"><b>&lt;</b></div></div>';
TData += '<div class="ctl_table_cell" style="text-align:center;"></div>';
TNY = TDate.getFullYear(); TNM = TDate.getMonth() + 2;
if(TNM >= 13){TNM = 1; TNY += 1;};
TData += '<div class="ctl_table_cell" style="text-align:center;width:30px;"><div class="text_link_black notextsel" style="cursor:pointer;" onclick="Input_INT_DateSelectCreateCalBuild6(' + V_WinID + ',' + TNY + ',' + TNM + ');"><b>&gt;</b></div></div>';
TData += '</div>';
TData += '</div>';
TData += '';

TData += '<div class="ctl_table" style="width:100%;height:100%;">';
TData += '<div class="ctl_table_row">';



var TMonthX = TDate.getMonth();
var TYearX = TDate.getFullYear();
for(cx = 0; cx < 6; cx ++){
	TMonthX = TMonthX + 1;
	if(TMonthX > 12){
		TMonthX = 1;
		TYearX = TYearX + 1;
	};
	TDate = new Date(TMonthsKey[TMonthX] + " 1, " + TYearX + " 00:00:00 GMT+0000");
	
	var TBOCol = '';
	if((TDateCur.getFullYear() == TDate.getFullYear()) && (TDateCur.getMonth() == TDate.getMonth())){
		TBOCol = 'border:3px solid #48608F;background-color:#A4C2FF;';
	};
	TData += '<div class="ctl_table_cell" style="text-align:center;width:33%;border:1px solid #AAAAAA;' + TBOCol + '">';
	TData += '<div class="ctl_table" style="table-layout:fixed;width:100%;height:20px;">';
	TData += '<div class="ctl_table_row">';
	var TNY = 0;
	var TNM = 0;
	TData += '<div class="ctl_table_cell" style="text-align:center;"><b>(' + (TDate.getMonth() + 1) + ') ' + TLangMonth[TDate.getMonth() + 1] + ' ' + TDate.getFullYear() + '</b></div>';
	TData += '</div>';
	TData += '</div>';
	TData += '';
	
	TData += '<div class="ctl_table" style="table-layout:fixed;width:calc(100% - 1px);height:calc(100% - 22px);">';
	TData += '<div class="ctl_table_row">';
	for(x = 0; x < 7; x++){
		TData += '<div class="ctl_table_cell" style="height:20px;text-align:center;"><b>' + TLangDays[x] + '</b></div>';
	};
	TData += '</div><div class="ctl_table_row">';
	var C = 0;
	var TFrom = TDate.getDay();
	if(TFrom == 0){TFrom = 7;};
	var TPreMonDate = new Date(TDate.getTime());
	TPreMonDate.setDate(TPreMonDate.getDate() - TFrom);
	var TPreMonNum = TPreMonDate.getDate();
	for(x = 1; x < TFrom; x++){
		TPreMonNum += 1;
		C += 1;
		TData += '<div class="selector_date_table_cell selector_date_table_cell_prev"></div>';
		if(C == 7){C = 0; TData += '</div><div class="ctl_table_row">';};
	};
	var TKey = TDate.getFullYear() + "_" + (TDate.getMonth() + 1) + "_"
	var TTo = new Date(TDate.getFullYear(), TDate.getMonth() + 1, 0).getDate();
	var TIsCurMon = false;
	var TTDate = new Date();
	var TCurDay = parseInt(TTDate.getDate());
	if((TDate.getFullYear() == TTDate.getFullYear()) && (TDate.getMonth() == TTDate.getMonth())){TIsCurMon = true;};
	var TBorderStyle = '';
	for(x = 1; x <= TTo; x++){
		C += 1;
		TBorderStyle = '';
		if(TIsCurMon == true){if(x == TCurDay){TBorderStyle = 'now';};};
		if((TDateOld.getFullYear() == TDate.getFullYear()) && (TDateOld.getMonth() == TDate.getMonth()) && (TDateOld.getDate() == x)){TBorderStyle = 'sel';};
		TData += '<div class="selector_date_table_cell selector_date_table_cell_cur' + TBorderStyle + '" onclick="Input_INT_DateSelect6_Click(' + V_WinID + ',' + x + ',' + (TDate.getMonth() + 1) + ',' + TDate.getFullYear() + ');"' + '"><b>' + x + '</b></div>';
		if(C >= 7){C = 0; TData += '</div>'; if(x <= TTo){TData += '<div class="ctl_table_row">';};};
	};
	if(C > 0){
		for(x = 1; x <= 7; x++){
			C += 1;
			TData += '<div class="selector_date_table_cell selector_date_table_cell_next"></div>';
			if(C >= 7){break;};
		};
	};
	TData += '</div>';
	TData += '</div>';
	TData += '</div>';
	if(cx == 2){
		TData += '</div>';
		TData += '<div class="ctl_table_row">';
	};
};
TData += '</div>';
TData += '</div>';


document.getElementById('_' + TContID + '_ctl').innerHTML = TData;
Window_SetLock(V_WinID, 0)
};



//################################################################################################################################################################################################
function Input_INT_DateSelect(V_TargetInputCtlID){
var TValue = document.getElementById('_' + V_TargetInputCtlID + '_ctl').value;
var TWinID2 = TWinID2 = Window_CreateLockwindow();
var TWinID = Window_Create(0, 0, 0, 260, 260, 'Datum wählen');
Window_SetSizeable(TWinID, 0);
Window_SetIcon(TWinID, '/syspic/ico/dateselect.png');
//Window_SetCloseable(TWinID, 0);
var TWin = document.getElementById('_' + TWinID + '_window');
TWin.dataset['lockwinid'] = TWinID2;
Window_SetData(TWinID, 'targetinputctlid', V_TargetInputCtlID);
Window_SetData(TWinID, 'callback', '');
Window_Move_Center(TWinID);
var TCont = Container_Create(TWinID, 0, 0, 0, 0);
Window_SetData(TWinID, 'oldvalue', TValue);
Window_SetData(TWinID, 'container', TCont);
Ctl_SetDimensionX(TCont, '100%', 'calc(100% - 26px)');
var TDateTime = TValue;
if(TDateTime != ''){
	var TDateTimePart = TDateTime.split(" - ");
	var TDatePart = TDateTimePart[0].split(".");
	if(typeof TDateTimePart[1] !== 'undefined'){
		var TTimePart = TDateTimePart[1].split(":");
		var TDate = new Date(TDatePart[0], TDatePart[1] - 1, TDatePart[2], TTimePart[0], TTimePart[1], TTimePart[2]);
	}else{
		var TDate = new Date(TDatePart[0], TDatePart[1] - 1, TDatePart[2], 0, 0, 0);
	};
}else{var TDate = new Date();};
Input_INT_DateSelectCreateCalBuild(TWinID, TDate.getFullYear(), TDate.getMonth() + 1);
};



//################################################################################################################################################################################################
function Input_INT_DateSelect6(V_TargetInputCtlID){
var TValue = document.getElementById('_' + V_TargetInputCtlID + '_ctl').value;
var TWinID2 = TWinID2 = Window_CreateLockwindow();
var TWinID = Window_Create(0, 0, 0, 600, 420, 'Datum wählen');
Window_SetSizeable(TWinID, 0);
Window_SetIcon(TWinID, '/syspic/ico/dateselect.png');
//Window_SetCloseable(TWinID, 0);
var TWin = document.getElementById('_' + TWinID + '_window');
TWin.dataset['lockwinid'] = TWinID2;
Window_SetData(TWinID, 'targetinputctlid', V_TargetInputCtlID);
Window_SetData(TWinID, 'callback', '');
Window_Move_Center(TWinID);
var TCont = Container_Create(TWinID, 0, 0, 0, 0);
Window_SetData(TWinID, 'oldvalue', TValue);
Window_SetData(TWinID, 'container', TCont);
Ctl_SetDimensionX(TCont, 'calc(100% - 1px)', 'calc(100% - 26px)');
var TDateTime = TValue;
if(TDateTime != ''){
	var TDateTimePart = TDateTime.split(" - ");
	var TDatePart = TDateTimePart[0].split(".");
	if(typeof TDateTimePart[1] !== 'undefined'){
		var TTimePart = TDateTimePart[1].split(":");
		var TDate = new Date(TDatePart[0], TDatePart[1] - 1, TDatePart[2], TTimePart[0], TTimePart[1], TTimePart[2]);
	}else{
		var TDate = new Date(TDatePart[0], TDatePart[1] - 1, TDatePart[2], 0, 0, 0);
	};
}else{var TDate = new Date();};
Input_INT_DateSelectCreateCalBuild6(TWinID, TDate.getFullYear(), TDate.getMonth() + 1);
};



//################################################################################################################################################################################################
function Input_INT_TimeSelect_Direkt_Click(V_CtlID){
var TWinID = Ctl_GetData(V_CtlID, 'winid');
var THour = parseInt(Ctl_GetData(V_CtlID, 'timeh'));
var TMinute = parseInt(Ctl_GetData(V_CtlID, 'timem'));
if(parseInt(THour) < 10){THour = '0' + parseInt(THour);};
if(parseInt(TMinute) < 10){TMinute = '0' + parseInt(TMinute);};
Text_ValueSet(Window_GetData(TWinID, 'ctlidtexth'), THour);
Text_ValueSet(Window_GetData(TWinID, 'ctlidtextm'), TMinute);
};



//################################################################################################################################################################################################
function Input_INT_TimeSelect_Click(V_CtlID){
var TWinID = Ctl_GetData(V_CtlID, 'winid');
var THour = parseInt(Text_ValueGet(Window_GetData(TWinID, 'ctlidtexth')));
var TMinute = parseInt(Text_ValueGet(Window_GetData(TWinID, 'ctlidtextm')));
var TTargetID = Window_GetData(TWinID, 'targetinputctlid');
var TCallback = Ctl_GetData(TTargetID, 'callback');
var TDateTime = document.getElementById('_' + TTargetID + '_ctl').value;
if(TDateTime == ''){TDateTime = '0000.00.00 - 00:00:00';};
var TDateTimePart = TDateTime.split(" - ");
var TDatePart = TDateTimePart[0].split(".");
if(typeof TDateTimePart[1] === 'undefined'){Window_Destroy(TWinID); return;};
var TTimePart = TDateTimePart[1].split(":");
var TDate = new Date(TDatePart[0], TDatePart[1] - 1, TDatePart[2], TTimePart[0], TTimePart[1], TTimePart[2]);
var TYear = TDate.getFullYear();
var TMonth = TDate.getMonth() + 1;
if(parseInt(TMonth) < 10){TMonth = '0' + parseInt(TMonth);};
var TDay = TDate.getDate();
if(parseInt(TDay) < 10){TDay = '0' + parseInt(TDay);};
if(parseInt(THour) < 10){THour = '0' + parseInt(THour);};
if(parseInt(TMinute) < 10){TMinute = '0' + parseInt(TMinute);};
var TSecond = '00';
document.getElementById('_' + TTargetID + '_ctl').value = TYear + '.' + TMonth + '.' + TDay + ' - ' + THour + ':' + TMinute + ':' + TSecond;
Window_Destroy(TWinID);
if(TCallback != ''){window[TCallback](TTargetID);};
};



//################################################################################################################################################################################################
function Input_INT_TimeSelect(V_TargetInputCtlID){
var TValue = document.getElementById('_' + V_TargetInputCtlID + '_ctl').value;
var TDateTime = TValue;
if(TDateTime != ''){
	var TDateTimePart = TDateTime.split(" - ");
	var TDatePart = TDateTimePart[0].split(".");
	if(typeof TDateTimePart[1] !== 'undefined'){
		var TTimePart = TDateTimePart[1].split(":");
		var TDate = new Date(TDatePart[0], TDatePart[1] - 1, TDatePart[2], TTimePart[0], TTimePart[1], TTimePart[2]);
	}else{
		var TDate = new Date(TDatePart[0], TDatePart[1] - 1, TDatePart[2], 0, 0, 0);
	};
}else{var TDate = new Date();};
var TWinID2 = TWinID2 = Window_CreateLockwindow();
var TWinID = Window_Create(0, 0, 0, 200, 220, 'Uhrzeit wählen');
Window_SetSizeable(TWinID, 0);
Window_SetIcon(TWinID, '/syspic/ico/clockselect.png');
Window_SetLock(TWinID, 1)
var TWin = document.getElementById('_' + TWinID + '_window');
TWin.dataset['lockwinid'] = TWinID2;
Window_SetData(TWinID, 'targetinputctlid', V_TargetInputCtlID);
Window_Move_Center(TWinID);
var TCtlID;
var TCtl;
TCtlID = Button_Create(TWinID, 0, 0, 0, 0, '08:00', 'Input_INT_TimeSelect_Direkt_Click', '');
Ctl_SetData(TCtlID, 'winid', TWinID); Ctl_SetData(TCtlID, 'timeh', 8); Ctl_SetData(TCtlID, 'timem', 0);
Ctl_SetDimensionX(TCtlID, 'calc((100% - 26px) / 2)', '26px'); Ctl_SetPositionX(TCtlID, '10px', '10px');
TCtlID = Button_Create(TWinID, 0, 0, 0, 0, '10:00', 'Input_INT_TimeSelect_Direkt_Click', '');
Ctl_SetData(TCtlID, 'winid', TWinID); Ctl_SetData(TCtlID, 'timeh', 10); Ctl_SetData(TCtlID, 'timem', 0);
Ctl_SetDimensionX(TCtlID, 'calc((100% - 26px) / 2)', '26px'); Ctl_SetPositionX(TCtlID, 'calc(15px + (100% - 26px) / 2)', '10px');
TCtlID = Button_Create(TWinID, 0, 0, 0, 0, '14:00', 'Input_INT_TimeSelect_Direkt_Click', '');
Ctl_SetData(TCtlID, 'winid', TWinID); Ctl_SetData(TCtlID, 'timeh', 14); Ctl_SetData(TCtlID, 'timem', 0);
Ctl_SetDimensionX(TCtlID, 'calc((100% - 26px) / 2)', '26px'); Ctl_SetPositionX(TCtlID, '10px', '40px');
TCtlID = Button_Create(TWinID, 0, 0, 0, 0, '16:00', 'Input_INT_TimeSelect_Direkt_Click', '');
Ctl_SetData(TCtlID, 'winid', TWinID); Ctl_SetData(TCtlID, 'timeh', 16); Ctl_SetData(TCtlID, 'timem', 0);
Ctl_SetDimensionX(TCtlID, 'calc((100% - 26px) / 2)', '26px'); Ctl_SetPositionX(TCtlID, 'calc(15px + (100% - 26px) / 2)', '40px');
TCtlID = Button_Create(TWinID, 0, 0, 0, 0, '18:00', 'Input_INT_TimeSelect_Direkt_Click', '');
Ctl_SetData(TCtlID, 'winid', TWinID); Ctl_SetData(TCtlID, 'timeh', 18); Ctl_SetData(TCtlID, 'timem', 0);
Ctl_SetDimensionX(TCtlID, 'calc((100% - 26px) / 2)', '26px'); Ctl_SetPositionX(TCtlID, '10px', '70px');
TCtlID = Button_Create(TWinID, 0, 0, 0, 0, '20:00', 'Input_INT_TimeSelect_Direkt_Click', '');
Ctl_SetData(TCtlID, 'winid', TWinID); Ctl_SetData(TCtlID, 'timeh', 20); Ctl_SetData(TCtlID, 'timem', 0);
Ctl_SetDimensionX(TCtlID, 'calc((100% - 26px) / 2)', '26px'); Ctl_SetPositionX(TCtlID, 'calc(15px + (100% - 26px) / 2)', '70px');
var TTVal = TDate.getHours()
if(TTVal < 10){TTVal = '0' + TTVal;};
var TCtlIDH = Text_Create(TWinID, 0, 0, 0, 0, '', TTVal, '');
Window_SetData(TWinID, 'ctlidtexth', TCtlIDH);
Ctl_SetDimensionX(TCtlIDH, 'calc((100% - 26px) / 2)', '40px'); Ctl_SetPositionX(TCtlIDH, '10px', '100px');
TCtl = document.getElementById('_' + TCtlIDH + '_ctl');
TCtl.style.fontSize = '25px';
TCtl.style.textAlign = 'center';
TCtl.addEventListener("wheel", function(e){var V = parseInt(parseInt(Text_ValueGet(TCtlIDH)) + parseInt(Math.sign(e.deltaY))); if(V < 0){V = 23;}; if(V > 23){V = 0;}; if(V < 10){V = '0' + V;}; Text_ValueSet(TCtlIDH, V);});
var TTVal = TDate.getMinutes()
if(TTVal < 10){TTVal = '0' + TTVal;};
var TCtlIDM = Text_Create(TWinID, 0, 0, 0, 0, '', TTVal, '');
Window_SetData(TWinID, 'ctlidtextm', TCtlIDM);
Ctl_SetDimensionX(TCtlIDM, 'calc((100% - 26px) / 2)', '40px'); Ctl_SetPositionX(TCtlIDM, 'calc(15px + (100% - 26px) / 2)', '100px');
TCtl = document.getElementById('_' + TCtlIDM + '_ctl');
TCtl.style.fontSize = '25px';
TCtl.style.textAlign = 'center';
TCtl.addEventListener("wheel", function(e){var V = parseInt(parseInt(Text_ValueGet(TCtlIDM)) + parseInt(Math.sign(e.deltaY))); if(V < 0){V = 59;}; if(V > 59){V = 0;}; if(V < 10){V = '0' + V;}; Text_ValueSet(TCtlIDM, V);});
TCtlID = Button_Create(TWinID, 0, 0, 0, 0, 'Übernehmen', 'Input_INT_TimeSelect_Click', '');
Ctl_SetData(TCtlID, 'winid', TWinID); Ctl_SetData(TCtlID, 'timeh', 20); Ctl_SetData(TCtlID, 'timem', 0);
Ctl_SetDimensionX(TCtlID, 'calc((100% - 20px)', '26px'); Ctl_SetPositionX(TCtlID, '10px', '145px');
Window_SetLock(TWinID, 0)
};



//################################################################################################################################################################################################
function Input_Add_Label(V_ParrentID, V_TitleWidth, V_Top, V_Height, V_Key, V_Value){
var TCell2 = Table_Cell_Create(V_ParrentID, '', '');
Ctl_SetDimensionX(TCell2, '100%', V_Height + 'px');
var TCtlIDText = Label_Create(TCell2, 0, 0, 0, 0, V_Value);
Ctl_SetDimensionX(TCtlIDText, '100%', V_Height + 'px');
return TCtlIDText;
};



//################################################################################################################################################################################################
function Input_Add_Text(V_ParrentID, V_TitleWidth, V_Top, V_Height, V_Key, V_Value, V_ToolTip){
var TCell2 = Table_Cell_Create(V_ParrentID, '', '');
Ctl_SetDimensionX(TCell2, '100%', V_Height + 'px');
var TCtlIDText = Text_Create(TCell2, 0, 0, 0, 0, V_Key, V_Value, '');
Ctl_SetDimensionX(TCtlIDText, '100%', V_Height + 'px');
return TCtlIDText;
};



//################################################################################################################################################################################################
function Input_Add_Phone(V_ParrentID, V_TitleWidth, V_Top, V_Height, V_Key, V_Value, V_ToolTip){
var TCell2 = Table_Cell_Create(V_ParrentID, '', '');
Ctl_SetDimensionX(TCell2, '100%', V_Height + 'px');
var TCtlIDText = Phone_Create(TCell2, 0, 0, 0, 0, V_Key, V_Value, '');
Ctl_SetDimensionX(TCtlIDText, '100%', V_Height + 'px');
return TCtlIDText;
};



//################################################################################################################################################################################################
function Input_Add_Link(V_ParrentID, V_TitleWidth, V_Top, V_Height, V_Key, V_Value, V_ToolTip){
var TCell2 = Table_Cell_Create(V_ParrentID, '', '');
Ctl_SetDimensionX(TCell2, '100%', V_Height + 'px');
var TCtlIDText = Link_Create(TCell2, 0, 0, 0, 0, V_Key, V_Value, '');
Ctl_SetDimensionX(TCtlIDText, '100%', V_Height + 'px');
return TCtlIDText;
};



//################################################################################################################################################################################################
function Input_Add_Geo(V_ParrentID, V_TitleWidth, V_Top, V_Height, V_Key, V_Value, V_ToolTip){
var TCell2 = Table_Cell_Create(V_ParrentID, '', '');
Ctl_SetDimensionX(TCell2, '100%', V_Height + 'px');
var TCtlIDText = Geo_Create(TCell2, 0, 0, 0, 0, V_Key, V_Value, 0);
Ctl_SetDimensionX(TCtlIDText, '100%', V_Height + 'px');
return TCtlIDText;
};



//################################################################################################################################################################################################
function Input_Add_TextMulti(V_ParrentID, V_TitleWidth, V_Top, V_Height, V_Key, V_Value, V_ToolTip){
var TCell2 = Table_Cell_Create(V_ParrentID, '', '');
Ctl_SetDimensionX(TCell2, '100%', V_Height + 'px');
var TCtlIDText = TextMultiline_Create(TCell2, 0, 0, 0, 0, V_Key, V_Value, '');
Ctl_SetDimensionX(TCtlIDText, '100%', V_Height + 'px');
return TCtlIDText;
};



//################################################################################################################################################################################################
function Input_Add_TextMultiHTML(V_ParrentID, V_TitleWidth, V_Top, V_Height, V_Key, V_Value, V_ToolTip){
var TCell2 = Table_Cell_Create(V_ParrentID, '', '');
Ctl_SetDimensionX(TCell2, '100%', V_Height + 'px');
var TCtlIDText = TextMultilineHTML_Create(TCell2, 0, 0, '100%', V_Height + 'px', V_Key, V_Value, '');
Ctl_SetDimensionX(TCtlIDText, '100%', V_Height + 'px');
return TCtlIDText;
};



//################################################################################################################################################################################################
function Input_Add_Text_XButton(V_ParrentID, V_TitleWidth, V_Top, V_Height, V_Key, V_Value, V_Placeholder, V_XButtonTitle, V_XButtonCallback, V_XButtonToolTip){
var TCell2 = Table_Cell_Create(V_ParrentID, '', '');
Ctl_SetDimensionX(TCell2, '100%', V_Height + 'px');
var TCtlIDText = Text_Create(TCell2, 0, 0, 0, 0, V_Key, V_Value, '');
Ctl_SetDimensionX(TCtlIDText, 'calc(100% - ' + 60 + 'px)', '');
var TCtlIDBtn = Button_Create(TCell2, V_TitleWidth + 20, V_Top, V_Height, V_Height, V_XButtonTitle, V_XButtonCallback, V_XButtonToolTip);
Ctl_SetPositionX(TCtlIDBtn, 'calc(100% - 35px)', '10px');
return [TCtlIDText, TCtlIDBtn];
};



//################################################################################################################################################################################################
function Input_Add_Checkbox(V_ParrentID, V_TitleWidth, V_Top, V_Height, V_Key, V_Value, V_ToolTip){
var TCell2 = Table_Cell_Create(V_ParrentID, '', '');
Ctl_SetDimensionX(TCell2, '100%', V_Height + 'px');
var TCtlIDCheckbox = Checkbox_Create(TCell2, 0, 0, V_Height, V_Height, V_Key, V_Value, V_ToolTip);
return TCtlIDCheckbox;
};



//################################################################################################################################################################################################
function Input_Add_Dropbox(V_ParrentID, V_TitleWidth, V_Top, V_Height, V_Key, V_ValueList, V_ValueSelected){
var TCell2 = Table_Cell_Create(V_ParrentID, '', '');
Ctl_SetDimensionX(TCell2, '100%', V_Height + 'px');
var TCtlIDDropbox = Dropbox_Create(TCell2, 0, 0, V_Height, V_Height, V_Key, '');
Ctl_SetDimensionX(TCtlIDDropbox, '100%', V_Height + 'px');
for(var TKey in V_ValueList){
	Dropbox_Add(TCtlIDDropbox, TKey, V_ValueList[TKey], XIff(TKey == V_ValueSelected, 1, 0));
};
return TCtlIDDropbox;
};



//################################################################################################################################################################################################
function Input_Add_Date(V_ParrentID, V_TitleWidth, V_Top, V_Height, V_Key, V_Value, V_ToolTip){
var TCell2 = Table_Cell_Create(V_ParrentID, '', '');
Ctl_SetDimensionX(TCell2, '100%', V_Height + 'px');
var TCtlIDDate = Date_Create(TCell2, 0, 0, 0, 0, V_Key, V_Value, '');
Ctl_SetData(TCtlIDDate, 'callback', '');
Ctl_SetDimensionX(TCtlIDDate, 'calc(100% - ' + V_Height + 'px)', V_Height + 'px');
var TCtlIDBtnDate = Container_Create(TCell2, 0, 0, 0, 0);
Ctl_SetPositionX(TCtlIDBtnDate, 'calc(100% - ' + V_Height + 'px)', '');
Ctl_SetDimensionX(TCtlIDBtnDate, V_Height + 'px', V_Height + 'px');
document.getElementById('_' + TCtlIDBtnDate + '_body').insertAdjacentHTML('beforeend', '<div class="ctl_date_item" style="width:' + V_Height + 'px;height:' + V_Height + 'px;" onclick="Input_INT_DateSelect(' + TCtlIDDate + ')"><img class="ctl_date_item_img" style="padding:2px;padding-left:3px;padding-top:3px;width:' + (parseInt(V_Height) - 2) + 'px;height:' + (parseInt(V_Height) - 2) + 'px;" src="/syspic/ico/dateselect.png"></div>');
var TCtlIDs = [];
TCtlIDs['value'] = TCtlIDDate;
TCtlIDs['btndate'] = TCtlIDBtnDate;
return TCtlIDs;
};



//################################################################################################################################################################################################
function Input_Add_Date6(V_ParrentID, V_TitleWidth, V_Top, V_Height, V_Key, V_Value, V_ToolTip){
var TCell2 = Table_Cell_Create(V_ParrentID, '', '');
Ctl_SetDimensionX(TCell2, '100%', V_Height + 'px');
var TCtlIDDate = Date_Create(TCell2, 0, 0, 0, 0, V_Key, V_Value, '');
Ctl_SetData(TCtlIDDate, 'callback', '');
Ctl_SetDimensionX(TCtlIDDate, 'calc(100% - ' + V_Height + 'px)', V_Height + 'px');
var TCtlIDBtnDate = Container_Create(TCell2, 0, 0, 0, 0);
Ctl_SetPositionX(TCtlIDBtnDate, 'calc(100% - ' + V_Height + 'px)', '');
Ctl_SetDimensionX(TCtlIDBtnDate, V_Height + 'px', V_Height + 'px');
document.getElementById('_' + TCtlIDBtnDate + '_body').insertAdjacentHTML('beforeend', '<div class="ctl_date_item" style="width:' + V_Height + 'px;height:' + V_Height + 'px;" onclick="Input_INT_DateSelect6(' + TCtlIDDate + ')"><img class="ctl_date_item_img" style="padding:2px;padding-left:3px;padding-top:3px;width:' + (parseInt(V_Height) - 2) + 'px;height:' + (parseInt(V_Height) - 2) + 'px;" src="/syspic/ico/dateselect.png"></div>');
var TCtlIDs = [];
TCtlIDs['value'] = TCtlIDDate;
TCtlIDs['btndate'] = TCtlIDBtnDate;
return TCtlIDs;
};



//################################################################################################################################################################################################
function Input_Add_DateTime(V_ParrentID, V_TitleWidth, V_Top, V_Height, V_Key, V_Value, V_ToolTip){
if(V_Height < 2){return 0;};
var TCell2 = Table_Cell_Create(V_ParrentID, '', '');
Ctl_SetDimensionX(TCell2, '100%', V_Height + 'px');
var TCtlIDDate = Date_CreateDateTime(TCell2, 0, 0, 0, 0, V_Key, V_Value, '');
Ctl_SetData(TCtlIDDate, 'callback', '');
Ctl_SetDimensionX(TCtlIDDate, 'calc(100% - ' + (V_Height * 2) + 'px)', V_Height + 'px');
var TCtlIDBtnTime = Container_Create(TCell2, 0, 0, 0, 0);
Ctl_SetPositionX(TCtlIDBtnTime, 'calc(100% - ' + (V_Height * 2) + 'px)', '');
Ctl_SetDimensionX(TCtlIDBtnTime, V_Height + 'px', V_Height + 'px');
document.getElementById('_' + TCtlIDBtnTime + '_body').insertAdjacentHTML('beforeend', '<div class="ctl_date_item" style="width:' + V_Height + 'px;height:' + V_Height + 'px;" onclick="Input_INT_TimeSelect(' + TCtlIDDate + ')"><img class="ctl_date_item_img" style="padding:2px;padding-left:3px;padding-top:3px;width:' + (parseInt(V_Height) - 2) + 'px;height:' + (parseInt(V_Height) - 2) + 'px;" src="/syspic/ico/clockselect.png"></div>');
var TCtlIDBtnDate = Container_Create(TCell2, 0, 0, 0, 0);
Ctl_SetPositionX(TCtlIDBtnDate, 'calc(100% - ' + V_Height + 'px)', '');
Ctl_SetDimensionX(TCtlIDBtnDate, V_Height + 'px', V_Height + 'px');
document.getElementById('_' + TCtlIDBtnDate + '_body').insertAdjacentHTML('beforeend', '<div class="ctl_date_item" style="width:' + V_Height + 'px;height:' + V_Height + 'px;" onclick="Input_INT_DateSelect(' + TCtlIDDate + ')"><img class="ctl_date_item_img" style="padding:2px;padding-left:3px;padding-top:3px;width:' + (parseInt(V_Height) - 2) + 'px;height:' + (parseInt(V_Height) - 2) + 'px;" src="/syspic/ico/dateselect.png"></div>');
var TCtlIDs = [];
TCtlIDs['value'] = TCtlIDDate;
TCtlIDs['btndate'] = TCtlIDBtnDate;
TCtlIDs['btntime'] = TCtlIDBtnTime;
return TCtlIDDate;
};



//################################################################################################################################################################################################
function Input_Add_Color(V_ParrentID, V_TitleWidth, V_Top, V_Height, V_Key, V_Value, V_ToolTip){
var TCell2 = Table_Cell_Create(V_ParrentID, '', '');
Ctl_SetDimensionX(TCell2, '100%', V_Height + 'px');
var TCtlIDText = Color_Create(TCell2, 0, 0, 0, 0, V_Key, V_Value, '');
Ctl_SetDimensionX(TCtlIDText, '100%', V_Height + 'px');
return TCtlIDText;
};



//################################################################################################################################################################################################
function Input_Add_Price(V_ParrentID, V_TitleWidth, V_Top, V_Height, V_Key, V_Value, V_ToolTip){
var TCell2 = Table_Cell_Create(V_ParrentID, '', '');
Ctl_SetDimensionX(TCell2, '100%', V_Height + 'px');
var TCtlIDText = Price_Create(TCell2, 0, 0, 0, 0, V_Key, V_Value, '');
Ctl_SetDimensionX(TCtlIDText, '100%', V_Height + 'px');
return TCtlIDText;
};




//################################################################################################################################################################################################
var G_System_Base_MobileDrawMode = false;
var G_System_Win_Login = 0;
var G_System_Win_LoginBtn = 0;



//################################################################################################################################################################################################
function System_Modul_CheckRunning(V_Modul){
var TMain = document.getElementById('div_main');
for(TIndex in TMain.childNodes){
	if(TMain.childNodes[TIndex].nodeType == 1){
		TWin = TMain.childNodes[TIndex];
		if(TWin.dataset['isapp'] == 1){
			if(TWin.dataset['modul'] == V_Modul){return true;};
		};
	};
};
return false;
};



//################################################################################################################################################################################################
function System_Modul_Runcount(V_Modul){
var C = 0;
var TMain = document.getElementById('div_main');
for(TIndex in TMain.childNodes){
	if(TMain.childNodes[TIndex].nodeType == 1){
		TWin = TMain.childNodes[TIndex];
		if(TWin.dataset['isapp'] == 1){
			if(TWin.dataset['modul'] == V_Modul){C ++;};
		};
	};
};
return C;
};



//################################################################################################################################################################################################
function System_Modul_Init_Callback(V_State, V_SubData, V_Data){
var TData = HTTPRequestCheckReturn(V_State, V_Data);
if(TData == -1){return;};
switch(TData['return']){
	case -1:
		if(typeof TData['data']['return_msg'] === 'undefined'){Window_Errorbox('Modulstart', 'Modul nicht gefunden.'); return;};
		Window_Errorbox('Modulstart', TData['data']['return_msg']);
		return;
		
	case 1:
		if(typeof TData['data']['include'] === 'undefined'){Window_Errorbox('SYSTEMFEHLER', 'Datenstruktur fehlerhaft'); return;};
		var TScriptData = TData['data']['include'];
		G_UNIQUEID += 1;
		var TAppID = G_UNIQUEID;
		TScriptData = 'var APP_AppID = "' + TAppID + '";' + "\r\n" + TScriptData;
		TScriptData = 'var APP_ModuleName = ' + "'" + V_SubData + "'" + ';' + "\r\n" + TScriptData;
		if(typeof TData['data']['position'] !== 'undefined'){TScriptData = 'var APP_Init_PositionX = ' + TData['data']['position'][0] + ';' + "\r\n" + 'var APP_Init_PositionY = ' + TData['data']['position'][1] + ';' + TScriptData;};
		if(typeof TData['data']['size'] !== 'undefined'){TScriptData = 'var APP_Init_SizeW = ' + TData['data']['size'][0] + ';' + "\r\n" + 'var APP_Init_SizeH = ' + TData['data']['size'][1] + ';' + TScriptData;};

		var TScript = document.createElement('script');
		TScript.setAttribute('type', 'text/javascript');
		TScript.setAttribute('data-app-appid', TAppID);
		TScript.innerHTML = 'var G_MyAppID = ' + TAppID + ';' + TScriptData;
		document.getElementById('div_main').insertAdjacentHTML('beforeend', '<div id="_' + TAppID + '_app" style=""></div>');
		var TApp = document.getElementById('_' + TAppID + '_app');
		TApp.dataset['iswin'] = 0;
		TApp.dataset['isapp'] = 1;
		TApp.dataset['appid'] = TAppID;
		TApp.dataset['modul'] = V_SubData;
		TApp.appendChild(TScript);
		return;
		
};
};



//################################################################################################################################################################################################
function System_Modul_Init(V_Modul){
HTTPRequest(System_Modul_Init_Callback, V_Modul, V_Modul, 'init', '');
};



//################################################################################################################################################################################################
function System_Modul_InitX(V_Modul, V_Params){
HTTPRequest(System_Modul_Init_Callback, V_Modul, V_Modul, 'init', V_Params);
};



//################################################################################################################################################################################################
function System_Modul_Term(V_AppID){
var TApp = document.getElementById('_' + V_AppID + '_app');
var TParrent = TApp.parentNode;
TParrent.removeChild(TApp);
};



//################################################################################################################################################################################################
function System_Login_ExecInit(V_Data){
var TData = V_Data;
if(typeof TData['data']['menu'] === 'undefined'){System_LoginClose(); System_LoginOpen(); Window_Errorbox('SYSTEMFEHLER', 'Datenstruktur fehlerhaft'); return;};
if(typeof TData['data']['start'] === 'undefined'){System_LoginClose(); System_LoginOpen(); Window_Errorbox('SYSTEMFEHLER', 'Datenstruktur fehlerhaft'); return;};
System_LoginClose();
Desktop_Create();
List_Clear(G_Desktop_Menu_ListID);
for(TIndex in TData['data']['menu']){
	TItemID = List_Add(G_Desktop_Menu_ListID, 'box', TData['data']['menu'][TIndex].icon, TData['data']['menu'][TIndex].name, 'Desktop_Menu_Item_Click', '', TData['data']['menu'][TIndex].tooltip);
	List_Item_SetData(TItemID, 'modul', TData['data']['menu'][TIndex].modul);
};
for(TModulname in TData['data']['start']){
	if(TData['data']['start'][TModulname] != ''){System_Modul_Init(TData['data']['start'][TModulname]);};
};
return;
};



//################################################################################################################################################################################################
function System_Login_Callback(V_State, V_SubData, V_Data){
var TData = HTTPRequestCheckReturn(V_State, V_Data);
if(TData == -1){Window_SetLock(V_SubData, 0); return;};
var TItemID;
switch(TData['return']){
	case -1:
		if(typeof TData['data']['return_msg'] === 'undefined'){Window_Errorbox('Systemanmeldung', 'Anmeldung nicht möglich.'); Window_SetLock(V_SubData, 0); return;};
		Window_Errorbox('Systemanmeldung', TData['data']['return_msg']);
		Window_SetLock(V_SubData, 0);
		return;
		
	case 1:
		System_Login_ExecInit(TData);
		return;
		
};
Window_SetLock(V_SubData, 0);
};



//################################################################################################################################################################################################
function System_Login_Callback_Login(V_CtlID){
var TWinID = Ctl_GetData(V_CtlID, 'winid');
Window_SetLock(TWinID, 1);
var TCtlIDUsername = Window_GetData(TWinID, 'ctlidusername');
var TCtlIDPasswort = Window_GetData(TWinID, 'ctlidpassword');
HTTPRequest(System_Login_Callback, TWinID, 'system', 'login', {u: Text_ValueGet(TCtlIDUsername), p: Text_ValueGet(TCtlIDPasswort)});
};



//################################################################################################################################################################################################
function System_Login_Callback_Help(){
Window_Helpbox('Hilfe - Systemanmeldung', 'Sollten Sie Probleme mit der Anmeldung haben, dann wenden Sie sich bitte an die IT-Abteilung.<br><br>SysOp@BGB-Movie.de');
};



//################################################################################################################################################################################################
function System_CloseAll(){
Desktop_Destroy();
document.getElementById('div_main').innerHTML = '';
};



//################################################################################################################################################################################################
function System_DrawModeSelect_Mobile(V_CtlID){
G_System_Base_MobileDrawMode = true;
localStorage.setItem('__BASE_DRAW_MODE__', '1');
System_CloseAll();
System_LoginCheck();
};



//################################################################################################################################################################################################
function System_DrawModeSelect_Desktop(V_CtlID){
G_System_Base_MobileDrawMode = false;
localStorage.setItem('__BASE_DRAW_MODE__', '0');
System_CloseAll();
System_LoginCheck();
};



//################################################################################################################################################################################################
function System_LoginOpen(){
System_CloseAll();
var TCtlID;
var TWinID = Window_Create(0, 0, 0, 400, 145, 'Systemanmeldung');
G_System_Win_Login = TWinID;
Window_SetCloseable(TWinID, 0);
Window_SetSizeable(TWinID, 0);
Window_SetIcon(TWinID, '/syspic/ico/key.png');
Window_Move_Center(TWinID);
Window_SetTop(TWinID, 100);
Window_SetHelp(TWinID, function(){System_Login_Callback_Help();});
TCtlID = Text_Create(TWinID, 10, 10, 380, 25, 'username', '', 'Benutzername');
var TCtlIDUser = TCtlID;
Ctl_SetDimensionX(TCtlID, 'calc(100% - 20px)', 25);
Window_SetData(TWinID, 'ctlidusername', TCtlID);
TCtlID = Password_Create(TWinID, 10, 40, 380, 25, 'password', '', 'Passwort');
var TCtlIDPass = TCtlID;
Ctl_SetDimensionX(TCtlID, 'calc(100% - 20px)', '25px');
Window_SetData(TWinID, 'ctlidpassword', TCtlID);
TCtlID = Button_Create(TWinID, 290, 75, 100, 25, 'Anmelden', 'System_Login_Callback_Login');
G_System_Win_LoginBtn = TCtlID;
Ctl_SetPositionX(TCtlID, 'calc(100% - 110px)', '75px');
Ctl_SetData(TCtlID, 'winid', TWinID);

if(G_System_Base_MobileDrawMode == false){
	TCtlID = Button_Create(TWinID, 10, 75, 100, 25, 'Handy-Mode', 'System_DrawModeSelect_Mobile');
}else{
	TCtlID = Button_Create(TWinID, 10, 75, 100, 25, 'Desktop-Mode', 'System_DrawModeSelect_Desktop');
};

Ctl_SetCallback(TCtlIDUser, 'keyup', function(e){if((e.code == 'Enter') || (e.code == 'NumpadEnter')){System_Login_Callback_Login(G_System_Win_LoginBtn);};});
Ctl_SetCallback(TCtlIDPass, 'keyup', function(e){if((e.code == 'Enter') || (e.code == 'NumpadEnter')){System_Login_Callback_Login(G_System_Win_LoginBtn);};});

};



//################################################################################################################################################################################################
function System_LoginClose(){
if(G_System_Win_Login == 0){return;};
Window_Destroy(G_System_Win_Login);
G_System_Win_Login = 0;
};



//################################################################################################################################################################################################
function System_LoginCheck_Callback(V_State, V_SubData, V_Data){
var TData = HTTPRequestCheckReturn(V_State, V_Data);
if(TData == -1){System_LoginOpen(); return;};
if(TData['return'] == -1){System_LoginOpen(); return;};
System_Login_ExecInit(TData);
};



//################################################################################################################################################################################################
function System_LoginCheck(){
HTTPRequest(System_LoginCheck_Callback, '', 'system', 'logincheck', '');
};



//################################################################################################################################################################################################
if(localStorage.getItem('__BASE_DRAW_MODE__') == '1'){G_System_Base_MobileDrawMode = true;};
console.log('BASE_DRAW_MODE');
console.log(G_System_Base_MobileDrawMode);
System_CloseAll();
System_LoginCheck();


