window.onerror = fehlbehandl;

function fehlbehandl(x, y, z) {
	//x = Nachricht
	//y = Datei
	//z = Zeile
	
	//windows-version ermitteln
	var str = navigator.userAgent;
	var anf = str.indexOf("Win");
	var end = str.substring(anf).indexOf(";");
	
	//generierte fehlermeldung
	var str_fehler = zle+" "+z+": "+x.replace(/\r|\n/g, "")+" ("+y+", "+str.substring(anf, anf+end)+", "+navigator.platform+")";
	
	if(fehlausg(str_fehler) == 6){
		var xml = new XMLHttpRequest();
		//versuchen fehler zu senden
		xml.open('POST', "http://dahi24.da.funpic.de/errors/error.php");
		xml.setRequestHeader('Content-type','application/x-www-form-urlencoded; charset=utf-8'); //für post wichtig
		xml.onreadystatechange = function (){ auswert_fehlbehandl(xml, str_fehler) };
		try{
			xml.send("fehler="+str_fehler+"&programm=Denk-Daran "+System.Gadget.version);
		}
		catch(e){
			//request wurde geblockt
		}
	}

}


function auswert_fehlbehandl(xml, str_fehler) {
	//fehlermeldung cachen, wenn kein netz
 	if(xml.readyState == 4){
		if(xml.status != "200"){
			fso = new ActiveXObject("Scripting.FileSystemObject");
			pfad_error = System.Gadget.path + "\\daten\\errorcache.dat";
			
			
			//bereits vorhandene fehler einlesen
			if(fso.FileExists(pfad_error)){
				fso_dat = fso.OpenTextFile(pfad_error, 1, false, -1);
				alttxt = fso_dat.ReadAll();
				fso_dat.close();
			}
			else alttxt="";
				
			var txte=alttxt.split("\r\n");
			var prf=0;
			
			//prüfen ob fehler schon mal aufgetreten ist
			for(var i=0; i<txte.length; i++){ 
				if(txte[i] == str_fehler) prf=1;
			}
			
			if(prf == 0){
				//umbruch anhängen, wenn schon was in der textdatei steht
				if(alttxt != "") var tmp = "\r\n";
				else var tmp = "";
				
				fso_dat = fso.OpenTextFile(pfad_error, 8, true, -1);
				fso_dat.Write(tmp+str_fehler);
				fso_dat.close();
			}
		}
	}
}


//fehlermeldungen, die bei fehlender internetverbindung auftraten, an den server senden, wenn möglich
function lokfehlsend(){
	fso = new ActiveXObject ("Scripting.FileSystemObject");
	pfad_error = System.Gadget.path + "\\daten\\errorcache.dat";
	
	//es wurden fehler gecacht
	if(fso.FileExists(pfad_error)){
		var fso_dat = fso.OpenTextFile(pfad_error, 1, false, -1);
		alttxt = fso_dat.ReadAll();
		fso_dat.close();
	
	
		var txte=alttxt.split("\r\n");
		var text="";
		
		//backslash für versendung vorbereiten
		for(var i=0; i<txte.length; i++){
			text += txte[i];
			if(i != (txte.length-1))text += "\\r\\n";
		}
		
		//lokal zwischengespeicherte fehler wenn möglich senden
		var xml = new XMLHttpRequest();
		xml.open('POST', "http://dahi24.da.funpic.de/errors/error.php");
		xml.setRequestHeader('Content-type','application/x-www-form-urlencoded; charset=utf-8'); //für post wichtig (zeichensatz, da er sonst unveraendert als utf16 aus der textdatei uebernommen wird)
		xml.onreadystatechange = function (){ 
			
			if(xml.readyState == 4){
				if(xml.status == "200"){
					fso.DeleteFile(pfad_error, true);
				}
			}
			
		};
		
		try{
			xml.send("fehler="+text+"&programm=Denk-Daran "+System.Gadget.version);
		}
		catch(e){
			//request wurde geblockt
		}
	}
}


//liest Gadget-Einstellungen (hoffentlich) zuverlässiger ein
function readGadgetSetting(x){
	var i=0;
	var ok = false;
	do{
		try{
			var tmp = System.Gadget.Settings.read(x);
			ok = true;
		}
		catch(e){
			i++;
			if(i == 5){ //letzer versuch fehlgeschlagen
				fehlbehandl("On following setting cannot be accessed: '" + x + "'. Cause could be a real-time scanner or a system optimization program.", "-", "-");
			}
		}
	} while(ok == false && i < 5);
	return tmp;
}