// Tinos AjaxScripte Sammlung Version 3.6 (24.02.2010)
// ===================================================
var http_request = false; // Variable für erfolgreichen Request

function getAllFormData() { // Lese alle Formular-Daten aus und sende sie als POST mit
  var str_post="";
  for (i = 0; i < document.forms.length; i++) { // Durchlaufe alle Formulare
      for (j = 0; j < document.forms[i].elements.length; j++) { // Durchlaufe alle Elemente der Form
		//alert(document.forms[i].elements[j].type);
		if ((document.forms[i].elements[j].type == "radio") || (document.forms[i].elements[j].type == "checkbox")) {
			if (document.forms[i].elements[j].checked == true) {
				//str_post = str_post + document.forms[i].elements[j].name + "=" + document.forms[i].elements[j].value + "&";
				str_post = str_post + document.forms[i].elements[j].name + "=" + Url.encode(eplus(document.forms[i].elements[j].value)) + "&";
			}
		} else {
			str_post = str_post + document.forms[i].elements[j].name + "=" + Url.encode(eplus(document.forms[i].elements[j].value)) + "&";
			//str_post = str_post + document.forms[i].elements[j].name + "=" + document.forms[i].elements[j].value + "&";
			//alert(str_post);
		}
		//alert ("F:" + document.forms[i].name + " -> " + document.forms[i].elements[j].name + ":" + document.forms[i].elements[j].value);
      } // Ende Schleife j
  } // Ende Schleife i
  return str_post.substr(0,str_post.length - 1);   // Entfernt das letzte "&"
}


/*
Erklärung zu macheRequest:
=========================
<Parameterwerte>
url								Bsp: "meineseite.asp" 	(Wenn die seite Paremeterwerte enhält werden diese ausgesondert. Wenn aktionen ausgeführt werden sollen, werden diese nur beim 1. durchgeführt. Beim Rest nur ein Reload)
target*		Standard = maintext	Bsp: divhilfe		(hier ist der Name des Zieldiv hinterlegt, ist der wert '', dann wird immer 'd_'+idwert genommen
method*		Standard = GET		Bsp: GET oder POST	(Legt fest wie die Seite übertrgen werden soll. Bei POST werden die Parameter in der URL ignoriert)
arr**		Standard = 0		Bsp: New Array(0,1,5)	(Erste Wert des Arrays ist der Zähler, 2. Wert ist die erste ID, welche verändert werden soll, Folgewerte werden NUR Reloaded)
type*		Standard = 0 		Bsp: 0 = Normale Seite, 1 = DropdownMenu, 2 = Inputfelder (Formular), 4 = Upload (geht nicht)
* = Optional
** == aktuell deaktiviert

NEU:
url können aufgelistet werden mit , getrennt 	Bsp: index.html,meineseite.html,dritteseite.html
target können augelistet werden mit , getrennt	Bsp: div1,div2,div3

Nach jeden Durchlauf wird das 1 Element in der Aufzählung entfernt


*/
//function macheRequest(url,target,method,arr,type)
function macheRequest() {
	//show('warte',1);
	
	//zeigeSie(macheRequest.arguments);  // Zum testen...
	
	// Parameter prüfen und Standardwerte zuweisen
	url = macheRequest.arguments[0];
	if (typeof macheRequest.arguments[1] == 'undefined') { target = ""; } else { target = macheRequest.arguments[1]; }
	if (typeof macheRequest.arguments[2] == 'undefined') { method = "GET"; } else { method = macheRequest.arguments[2]; }
	if (typeof macheRequest.arguments[3] == 'undefined') { arr = 0; } else { arr = macheRequest.arguments[3]; }
	if (typeof macheRequest.arguments[4] == 'undefined') { type= 0; } else { type = macheRequest.arguments[4]; }
	
	http_request = false;
    if (window.XMLHttpRequest) { // Mozilla, Safari,...
        http_request = new XMLHttpRequest();
        if (http_request.overrideMimeType) {
			http_request.overrideMimeType('text/xml; charset=iso-8859-1');
        }
    
	/*  Geht bei alten IE Versionen nicht */
	/*
	} else if (window.ActiveXObject) { // IE
		setMimeType('text/xml; charset=ISO-8859-1');
		var avers = ["Microsoft.XmlHttp", "MSXML2.XmlHttp", "MSXML2.XmlHttp.3.0",  "MSXML2.XmlHttp.4.0", "MSXML2.XmlHttp.5.0"];
		for (var i = avers.length -1; i >= 0; i--) {
			  try {httpObj = new ActiveXObject(avers[i]);
					return httpObj;
			  } catch(e) {}
		}
	}
	*/

	
	} else if (window.ActiveXObject) { // IE
		try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
        }
    }
	

    if (!http_request) {
        alert('Ende :( Kann keine XMLHTTP-Instanz erzeugen');
        return false;
    }
	
	if (method == "GET") {
			if (isArray(arr) == true) { // Falls MacheRequest mehrmals hintereinander aufgerufen werden soll und in d_<nr> ausgegeben wird
				// Bei GET füge als aid den aktuellen Positionswert + 1
				
				//u = Url.encode(u);
				
				var u = url.split("?");
				url = u[0]; // URL ohne Parameter

				if (typeof u[1] != 'undefined') {
					u = u[0] + "?" + u[1] + "&aid=" + arr[parseInt(arr[0]) + 1];
				} else {
					u = u[0] + "?aid=" + arr[parseInt(arr[0]) + 1];
				}
			} else {
				
				var arr_url = url.split(",");
				u = arr_url[0];
			}
		
		var str = null;
	} else { // Bei POST füge die Werte die beim Post übergeben wurden hinzu
		var str = getAllFormData();
		var arr_url = url.split(",");
		u = arr_url[0];
	}

	a = '';
	if (typeof arr.length != 'undefined') {
		for (i=0; i < arr.length; i++ ){ 
			a += arr[i]+','; 
		}
		a = a.substr(0,a.length - 1); // Entfernt letztes Komma
		a = 'new Array(' + a + ')';
	} else {
		a = 'new Array(0)';
	}

	arr_target = target.split(",");
	
	/*
	if (type == 4) {
		// prepare the MIME POST data
		var boundaryString = 'capitano';
		var boundary = '--' + boundaryString;
		var requestbody = boundary + '\n' 
		+ 'Content-Disposition: form-data; name="mytext"' + '\n' 
		+ '\n' 
		+ mytext + '\n' 
		+ '\n' 
		+ boundary + '\n' 
		+ 'Content-Disposition: form-data; name="myfile"; filename="' 
			+ filename + '"' + '\n' 
		+ 'Content-Type: application/octet-stream' + '\n' 
		+ '\n'
		+ escape(binary.readBytes(binary.available()))
		+ '\n'
		+ boundary;
	}
	*/

	
	

	// .-NICHT VERÄNDERN-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
	http_request.open(method, u, true);
	if (type == 4) {
		http_request.setRequestHeader("Content-type", "multipart/form-data;");
	} else {
		http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; ISO-8859-1");
	}
	http_request.setRequestHeader('If-Modified-Since', 'Sat, 1 Jan 2000 00:00:00 GMT');
	http_request.onreadystatechange = zeigeInhalt; // Funktion zur Ausgabe der Daten festlegen
	http_request.onreadystatechange = new Function('zeigeInhalt("'+url+'","'+method+'",'+a+','+type+',"'+target+'")');
	http_request.send(str);
	// .-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
}

function zeigeInhalt(url,method,arr,type,target) {
	if (http_request.readyState == 4) { // Wenn die Seite komplett und fertig zurückgegeben wurde
		if (http_request.status == 200) { // Wenn die Seite gefunden und geladen wurde
			//show('warte',0);
			
			// Wert in arr[0] um 1 erhöhen
			arr[0] = parseInt(arr[0]) + 1;
			
			
			var arr_url = url.split(",");
			var arr_target = target.split(",");
			
			
			// target festlegen
			if (arr_target[0] != "") {
				t = arr_target[0];
			} else {
				t = "d_" + arr[arr[0]];
			}
			
			if (arr_target[0] == "") { t = "maintext"; } 
			
			//var xmlDoc = http_request.responseXML.documentElement;
			//var xmldata = http_request.responseXML.getElementsByTagName("*");
			//var elm = xmldata[0].getElementsByTagName("*");
			//var myVar2 = myData.search(/a/);

			
			// Prüfen ob DIV existiert und ggf erzeugen
			var clsbtn = "";
			var divgenerate = false;
			if (testForObject(arr_target[0]) == null) {
				var breite = 560;
				//var hoehe = 450;
				var newdiv = document.createElement('div');
				newdiv.setAttribute('id', arr_target[0]);
				newdiv.style.position = "absolute";
				newdiv.style.width = breite;
				//newdiv.style.height = hoehe;
				/////newdiv.style.background = "#FFF";
				/////newdiv.style.border = "2px solid #000";
				newdiv.style.left = "50%";
				newdiv.style.top = "50%";
				newdiv.style.marginLeft = ((breite/2)*-1) + document.body.scrollLeft;
				//newdiv.style.marginTop = ((hoehe/2)*-1);
				newdiv.style.padding = "10";
				newdiv.style.fontFamily = "Verdana";
				newdiv.style.fontSize = "13";
				newdiv.style.textAlign = "left";
				newdiv.style.overflow = "auto";
				newdiv.style.zIndex = "99";
				document.body.appendChild(newdiv);
				$("#"+arr_target[0]).draggable();
				
				div = document.getElementById(arr_target[0]);
				
				/*
				var hoehe = div.offsetHeight;
				div.style.marginTop = ((hoehe/2)*-1);
				*/
				divgenerate = true;
				//clsbtn = "<BR><center><input style='width:100%;border:1px solid #CCC; background:#666; color:#FFF; font-weight:bold;' type='button' onclick='destroy(\""+target+"\");' value='Schließen'></center>";
			}
			
			
			// Ausgabe
			if (type == 1) { // Element ist ein Dropdownmenu
				select_innerHTML(document.getElementById(t),http_request.responseText);
			} else if (type == 2) { // Element ist Input-Textfeld (Wert via Value)
				document.getElementById(t).value = http_request.responseText;
			} else { // Element ist ein innerHTML im Text (3 oder 4)
				document.getElementById(t).innerHTML = http_request.responseText + clsbtn;
			}
			
			
			
			// Nach Befüllen des Div Tags die Höhe anpassen
			if (divgenerate == true) {
				centerToTop(div);
				centerToLeft(div);
				//var hoehe = div.offsetHeight;
				//alert(hoehe);
				//alert(document.body.scrollHeight);
				//alert(document.body.scrollTop);
				//div.style.marginTop = ((hoehe / 2)*-1) + document.body.scrollTop;
			}
			
			//show(target,1);
			
			//RequestLinks(t); // Um Alle Links umzuwandeln
			//alert(utf8_encode(document.getElementById(t).innerHTML));
			//document.getElementById("tarea").value = utf8_encode(http_request.responseText);
			//document.getElementById("tarea").value = http_request.responseText;
		

			// ============== Für Array Request ==============// Wenn Wert in arr[0] noch nicht kleiner als Größe der Arrays-Startwertposition -> Dann nochmal ausführen
			if (arr[0] < (arr.length - 1)) { // Muss noch anders gelöst werden
				macheRequest(url, type, arr, target);
			}
			
			// ============== Für Multi Request ==============
			//alert(arr_url.length); 
			if (arr_url.length > 1) {
				arr_url.shift(); // Entfernt 1. Element im Array, sofern mehr als 1 Element vorhanden ist
				
				if (arr_target.length > 1) {
					arr_target.shift(); // Entfernt 1. Element im Array	, sofern mehr als 1 Element vorhanden ist
				}
				var new_url = arr_url.join(","); // Wandelt alle Elemente des Array in eine lange Zeichenkette um
				var new_target = arr_target.join(","); // Wandelt alle Elemente des Array in eine lange Zeichenkette um
				
				//alert(new_url);
				//alert(new_target);
			
				if (new_url != "" && new_target != "") {
					macheRequest(new_url, new_target, method, 0, type); // Fügt MacheRequest erneut aus, sofern url und target gefüllt sind
				}
			}
		
		
		if (type==99) {
				//alert($('#art_id').val());
				uploader();
		}
		
		} else { // Seite nicht gefunden, nicht erreichbar oder ähnliches
            alert("Bei dem Request ist ein Problem aufgetreten!\nBitte überprüfen Sie die Schreibweise der URL oder ob die Zielseite Fehler enthält.\nURL: "+url+"\nZiel: "+target+"");
        }

    }
}




// ================================== FUNCTIONS SAMMLUNG ==================================
function centerToTop(divObj) {
	//div = document.getElementById(divid);
	var hoehe = divObj.offsetHeight;
	//alert(hoehe);
	//alert(document.body.scrollHeight);
	//alert(document.body.scrollTop);
	divObj.style.marginTop = ((hoehe / 2)*-1) + document.body.scrollTop + 'px';
}

function centerToLeft(divObj) {
	//div = document.getElementById(divid);
	var breite = divObj.offsetLeft;
	//alert(hoehe);
	//alert(document.body.scrollHeight);
	//alert(document.body.scrollTop);
	divObj.style.marginLeft = ((breite / 2)*-1) + document.body.scrollLeft + 'px';
}




// Objektprüfung auf Existenz
function testForObject(Id, Tag) {
	var o = document.getElementById(Id);
	if (o) {
		if (Tag) {
			if (o.tagName.toLowerCase() == Tag.toLowerCase()) {
				return o;
			}
		} else {
			return o;
		}
	}
	return null;
}

function destroy(id) {
	var DIVtoRemove = document.getElementById(id);
	DIVtoRemove.parentNode.removeChild(DIVtoRemove);
}



function RequestLinks(div) {
	document.charset="iso-8859-1";
	//alert("RequestLinks wurde geladen");
	
// .................................................................................
	/*
	frm = document.getElementsByTagName("form");
	for (z=0;z<document.forms.length;z++) {
		alert(frm[z].name);
		alert(frm[z].namedItem("name"));
	}
	*/
	
	elm = document.getElementsByTagName("input");
	for (i=0; i < elm.length;i++) {
		if (elm[i].type == "submit") {
			
			frmname = "";
			frmname = document.forms[0].name;
			url = document.forms[0].action;
			
			if (url == "") { url = getFilename(); }
			method = document.forms[0].method.toUpperCase()
			
			//alert(url);
			//alert(method);
			//elm[i].removeAttribute("onclick");
			//elm[i].removeAttribute("type");
			elm[i].setAttribute("name", "submitbtn"); 
			
			replaceT(elm[i]);
			
			
			//elm[i].removeAttribute("type");
			//elm[i].type = "button"; // geht nicht im IE
			
			//elm[i].removeAttribute("type");
			
			
			
			//alert(elm[i].name);
			//setAttr(elm[i].name,"type","button");
			
			elm[i].onclick = new Function("return checkit('" + url + "','" + div + "','" + method + "','" + frmname +"');");
			elm[i].onmouseover = new Function("Tip('" + url + "');");
			elm[i].onmouseout = new Function("UnTip();");
			
		}
	}
	
	// .................................................................................

	var elm = document.getElementsByTagName("a");
	//alert(elm.length + " Links werden getauscht!");
	for (i=0; i < elm.length; i++) {
		
		//elm[i].onmouseover = function(){this.className=this.className;};
		//elm[i].onmouseout = function(){this.className=this.className;};
		
		//alert(elm[i].name + ": " +elm[i].value + " | " + elm[i].href);
		
		if (elm[i].href != '') {
			if (elm[i].href.search(/#/) != -1) { // # kommt in der Adresse vor
					rn = elm[i].href.split("#");
					elm[i].onmouseover = new Function("Tip('Springe Zu: " + rn[1] + "');");
					elm[i].onmouseout = new Function("UnTip();");
					//elm[i].onclick = new Function("macheRequest('" + elm[i].href + "', '" + div + "' ,'GET',0,0);");
			} else if (elm[i].href.search(/javascript/) != -1) {
					//alert(elm[i].href);
					elm[i].href.replace(/javascript:/, "");
					elm[i].href.replace(/javascript/, "");

					elm[i].onclick = new Function(elm[i].href);
					elm[i].onmouseover = new Function("Tip('Funktion');");
					elm[i].onmouseout = new Function("UnTip();");
			/*
			} else if (elm[i].href.search(/javascript:print/) != -1) {
					elm[i].onclick = new Function("print();");
					elm[i].onmouseover = new Function("Tip('Seite Drucken');");
					elm[i].onmouseout = new Function("UnTip();");
			} else if (elm[i].href.search(/javascript:history.back/) != -1) {
					elm[i].onclick = new Function("history.back();");
					elm[i].onmouseover = new Function("Tip('Zurück');");
					elm[i].onmouseout = new Function("UnTip();");
			*/
			} else {
				
				if (elm[i].target != "_blank") {
					//alert(elm[i].href);
					elm[i].onclick = new Function("macheRequest('" + elm[i].href + "', '" + div + "' ,'GET',0,0);");
					elm[i].onmouseover = new Function("Tip('" + elm[i].href + "');");
					elm[i].onmouseout = new Function("UnTip();");
					
					elm[i].removeAttribute("href");					
					
				} else {
					elm[i].onmouseover = new Function("Tip('Externer Link: " + elm[i].href + "');");
					elm[i].onmouseout = new Function("UnTip();");
				}
			}
		} else {
			elm[i].removeAttribute("href");
		}
	}
}
// .................................................................................

function setAttr(id,attr,value) {
	//alert(id + ": " + attr +"-->" + value);
    var newAttr = document.createAttribute(attr);
    newAttr.nodeValue = value;
    document.getElementById(id).setAttributeNode(newAttr); 
}



function replaceT(obj){
	var newO=document.createElement('input');
	newO.setAttribute('type','button');
	newO.setAttribute('name',obj.getAttribute('name'));
	newO.setAttribute('value','absenden');
	obj.parentNode.replaceChild(newO,obj);
}



function getFilename() {
	var strFilename;
	var strHref = self.location.href;
	strHref = strHref.replace(/\//g,"\\");
	var iIdx = strHref.lastIndexOf("\\");
	if (-1<iIdx) {
		strFilename = strHref.substring(iIdx+1);
	} else {
		strFilename = strHref;
	}
	return strFilename;
}




function zeigeSie(arg) {
	for (t = 0; t < arg.length; t++) {
		alert(arg[t]);
	}

}

function gkz() {
	var gkz;
	gkz = document.getElementById("stadt_gemeinde").options[document.getElementById("stadt_gemeinde").options.selectedIndex].value
	//alert(gkz);
	macheRequest('getdata.php?gkz=' + gkz,'GET', new Array(0),'ortsteil');
}

function ddler(divi,divo,url) {
	//alert(url);
	// +=======[LEGENDE]========+=========[Beispiel]=========+
	// |divi = Inputdiv         | divi = 'stadt_gemeinde';   |
	// |divo = Zieldiv (Output) | divo = 'ortsteil';         |
	// |url = Ziel URL          | url = 'getdata.php?gkz=';  |
	// +========================+============================+
	var par;
	par = document.getElementById(divi).options[document.getElementById(divi).options.selectedIndex].value;
	//alert(par);
	//alert(url + par);
	macheRequest(url + par,divo,'GET',0,1);
}

function divit(id,value) {
	document.getElementById(id).innerHTML = value;
}

function setcolor(widget, color) {
	var widget = document.getElementById(widget);
	widget.style.background = color;
}

function reloadMainWindow() {
	window.location.reload();
}

function show(divname,v) {
	divObj = document.getElementById(divname);
	if (v == 1) {	// Zeige den DIV Tag
		divObj.style.display='block';
		divObj.disabled = false;
	} else {		// Verstecke den DIV Tag
		divObj.style.display='none';
		divObj.disabled = true;
	}
}

function isArray(obj) { // Prüfen ob Objekt ein Array ist
   if (obj.constructor.toString().indexOf("Array") == -1)
      return false;
   else
      return true;
}

function select_innerHTML(objeto,innerHTML){
/******
* select_innerHTML - corrige o bug do InnerHTML em selects no IE
* Veja o problema em: http://support.microsoft.com/default.aspx?scid=kb;en-us;276228
* Versão: 2.1 - 04/09/2007
* Autor: Micox - Náiron José C. Guimarães - micoxjcg@yahoo.com.br
* @objeto(tipo HTMLobject): o select a ser alterado
* @innerHTML(tipo string): o novo valor do innerHTML
*******/
    objeto.innerHTML = ""
    var selTemp = document.createElement("micoxselect")
    var opt;
    selTemp.id="micoxselect1"
    document.body.appendChild(selTemp)
    selTemp = document.getElementById("micoxselect1")
    selTemp.style.display="none"
    if(innerHTML.indexOf("<option")<0){//se não é option eu converto
        innerHTML = "<option>" + innerHTML + "</option>"
    }
    innerHTML = innerHTML.replace(/<option/g,"<span").replace(/<\/option/g,"</span")
    selTemp.innerHTML = innerHTML
      
    
    for(var i=0;i<selTemp.childNodes.length;i++){
  var spantemp = selTemp.childNodes[i];
  
        if(spantemp.tagName){     
            opt = document.createElement("OPTION")
    
   if(document.all){ //IE
    objeto.add(opt)
   }else{
    objeto.appendChild(opt)
   }       
    
   //getting attributes
   for(var j=0; j<spantemp.attributes.length ; j++){
    var attrName = spantemp.attributes[j].nodeName;
    var attrVal = spantemp.attributes[j].nodeValue;
    if(attrVal){
     try{
      opt.setAttribute(attrName,attrVal);
      opt.setAttributeNode(spantemp.attributes[j].cloneNode(true));
     }catch(e){}
    }
   }
   //getting styles
   if(spantemp.style){
    for(var y in spantemp.style){
     try{opt.style[y] = spantemp.style[y];}catch(e){}
    }
   }
   //value and text
   opt.value = spantemp.getAttribute("value")
   opt.text = spantemp.innerHTML
   //IE
   opt.selected = spantemp.getAttribute('selected');
   opt.className = spantemp.className;
  } 
 }    
 document.body.removeChild(selTemp)
 selTemp = null
}





function utf8_decode ( str_data ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Webtoolkit.info (http://www.webtoolkit.info/)
    // +      input by: Aman Gupta
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Norman "zEh" Fuchs
    // +   bugfixed by: hitwork
    // +   bugfixed by: Onno Marsman
    // +      input by: Brett Zamir (http://brettz9.blogspot.com)
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // *     example 1: utf8_decode('Kevin van Zonneveld');
    // *     returns 1: 'Kevin van Zonneveld'
 
    var tmp_arr = [], i = 0, ac = 0, c1 = 0, c2 = 0, c3 = 0;
    
    str_data += '';
    
    while ( i < str_data.length ) {
        c1 = str_data.charCodeAt(i);
        if (c1 < 128) {
            tmp_arr[ac++] = String.fromCharCode(c1);
            i++;
        } else if ((c1 > 191) && (c1 < 224)) {
            c2 = str_data.charCodeAt(i+1);
            tmp_arr[ac++] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));
            i += 2;
        } else {
            c2 = str_data.charCodeAt(i+1);
            c3 = str_data.charCodeAt(i+2);
            tmp_arr[ac++] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
            i += 3;
        }
    }
 
    return tmp_arr.join('');
}





function utf8_encode ( string ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Webtoolkit.info (http://www.webtoolkit.info/)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: sowberry
    // +    tweaked by: Jack
    // +   bugfixed by: Onno Marsman
    // +   improved by: Yves Sucaet
    // +   bugfixed by: Onno Marsman
    // *     example 1: utf8_encode('Kevin van Zonneveld');
    // *     returns 1: 'Kevin van Zonneveld'
 
    string = (string+'').replace(/\r\n/g, "\n").replace(/\r/g, "\n");
 
    var utftext = "";
    var start, end;
    var stringl = 0;
 
    start = end = 0;
    stringl = string.length;
    for (var n = 0; n < stringl; n++) {
        var c1 = string.charCodeAt(n);
        var enc = null;
 
        if (c1 < 128) {
            end++;
        } else if((c1 > 127) && (c1 < 2048)) {
            enc = String.fromCharCode((c1 >> 6) | 192) + String.fromCharCode((c1 & 63) | 128);
        } else {
            enc = String.fromCharCode((c1 >> 12) | 224) + String.fromCharCode(((c1 >> 6) & 63) | 128) + String.fromCharCode((c1 & 63) | 128);
        }
        if (enc != null) {
            if (end > start) {
                utftext += string.substring(start, end);
            }
            utftext += enc;
            start = end = n+1;
        }
    }
 
    if (end > start) {
        utftext += string.substring(start, string.length);
    }
 
    return utftext;
}

// ========================================================================================




// Checkit Formular Prüfer Version 0.3 by Tino Prönen
//=============================================
//alert("Checkit 0.2 wurde erfolgreich geladen");

function precolor(ID) {
// Felder vorher colorieren
	for (f = 0; f < document.forms.length ; f++) { // Durchlaufe alle Formulare
		frm = document.forms[f]; // frm = formular 
		if ((frm.name == ID) || (ID == "")) { // Erst weitermachen, wenn keine ID übergeben wurde oder die übergabe Zutrifft !
			for (e = 0; e < frm.elements.length; e++) { // Durchlaufe alle Elemente der Form
				elm = document.forms[f].elements[e]; // elm = Element
				if (elm.name.substr(0,1) != "_") {
					if (elm.type != "button") {
						colorit(elm,"#000000","white"); // Pflichtfeld
					} else {
						//bgImg = new Image(); bgImg.src = "btn_bg.jpg";
						//elm.style.backgroundImage = "url("+bgImg.src+")";
					}
				} else {
					colorit(elm,"#696969","#EBEBEB"); // Optionales Feld
				}
			}
		}
	}
}


function checkit(url,div,method,ID) {

	var code;
	precolor(ID);
	var color1 = "#FFFFFF";
	var color2 = "ffedb8";
	
	// Durchlauf der Felder zur Prüfung
	for (f = 0; f < document.forms.length ; f++) { // Durchlaufe alle Formulare
		frm = document.forms[f]; // frm = formular 
		if ((frm.name == ID) || (ID == "")) { // Erst weitermachen, wenn keine ID übergeben wurde oder die übergabe Zutrifft !
			for (e = 0; e < frm.elements.length; e++) { // Durchlaufe alle Elemente der Form
				elm = document.forms[f].elements[e]; // elm = Element
				
				
				
				//alert(elm.name.substr(0,1));
				//alert(elm.type);
				if (elm.name.substr(0,1) != "_") { // Nur dann weiter, wenn Elementname nicht mit "_" beginnt
				
				if ((elm.type == "hidden") && (elm.name == "code_org")) {  // Captcha Code auslesen ====================
					code = elm.value;
				}
				
				if ((elm.type == "checkbox") || (elm.type == "radio")) {  // CHECKBOCX und RADIO ===================
					var passcheck = false;
					var elm_name = elm.name;
					var elm_length = frm[elm_name].length;
					for (c = 0; c < elm_length; c++) {
						n = e + c;
						passcheck = passcheck || frm.elements[n].checked;
					}
					e = e + (elm_length - 1)
					
					
					if (elm_length == frm[elm_name].length) { // Ende wurde erreicht
						if (passcheck == false) {
							alert("Bitte für " + d_s(elm.name.toUpperCase()) + " eine Auswahl treffen.");
							colorit(elm,color1,color2);
							elm.focus();
							return false;
						}
					}
				
				} else if (elm.type == "password") { // TEXT und TEXTAREA ===================
					if (elm.value == "") {
							alert("Bitte füllen Sie das Feld " + d_s(elm.name.toUpperCase()) + ".");
							colorit(elm,color1,color2);
							elm.focus();
							return false;
					}
				
				} else if ((elm.type == "text") || (elm.type == "textarea")) { // TEXT und TEXTAREA ===================
					if (elm.value == "") {
							alert("Bitte füllen Sie das Feld " + d_s(elm.name.toUpperCase()) + ".");
							colorit(elm,color1,color2);
							elm.focus();
							return false;
					}
					

					if (elm.name.search(/Email/) != -1 ) { // Im Namen kommt das Wort Email vor
						if (validate(elm.value) == false) {
							alert("Bitte gültige Email-Adresse angeben.");
							colorit(elm,color1,color2);
							elm.focus();
							return false
						}
					}
					
					if ((elm.name.search(/datum/) != -1 ) || (elm.name.search(/Datum/) != -1 )) { // Im Namen kommt das Wort Datum/datum vor
						if (checkDate(elm.value) == false) {
							alert("Bitte geben Sie für " + d_s(elm.name.toUpperCase()) + " ein gültiges Datum an.");
							colorit(elm,color1,color2);
							elm.focus();
							return false
						}
					}
					
					if ((elm.name.search(/uhrzeit/) != -1 ) || (elm.name.search(/Uhrzeit/) != -1 )) { // Im Namen kommt das Wort Uhrzeit/uhrzeit vor
						if (checkTime(elm.value) == false) {
							alert("Bitte geben Sie für " + d_s(elm.name.toUpperCase()) + " eine gültige Uhrzeit an.");
							colorit(elm,color1,color2);
							elm.focus();
							return false
						}
					}
					
					
					if ((elm.name.search(/code/) != -1 ) || (elm.name.search(/Code/) != -1 )) { // Im Namen kommt das Wort Code/code vor
						if (elm.value != code) {
							alert("Bitte gültigen Zahlen-Code eingeben.");
							colorit(elm,color1,color2);
							elm.focus();
							return false
						}
					}
					
					
				} else if (elm.type == "select-one") { // EINFACHES SELECT ============================
					if (elm.selectedIndex == 0) {
						alert("Bitte für " + d_s(elm.name.toUpperCase()) + " eine Auswahl treffen.");
						colorit(elm,color1,color2);
						elm.focus();
						return false;
					}
				
				
				} // Ende If für Typenfrage ====================================================================================================
				}// Ende If für Prüfung ob "_" vorran steht
			} // Ende 2. For Schleife (e)
		} // Ende IF Bedinung
	} // Ende 1. for Schleife (f)

//return true;
//alert("Formular wird abgesendet");
//alert(url + " " + div + " " + method);
macheRequest(url,div,method);
//macheRequest('tmpl_formular_save.php','maintext','POST');

} // Ende Function

function validate(emailad) {
    var exclude=/[^@\-\.\w]|^[_@\.\-]|[\._\-]{2}|[@\.]{2}|(@)[^@]*\1/;
    var check=/@[\w\-]+\./;
    var checkend=/\.[a-zA-Z]{2,3}$/;
        if(((emailad.search(exclude) != -1)||(emailad.search(check))== -1)||(emailad.search(checkend) == -1)) {
          return false;
        } else {
          return true;
        }
}

function colorit(elm,color1,color2) {
	if ((elm.type == "text") || (elm.type == "textarea") || (elm.type == "password")) {
		elm.style.backgroundColor = color2;
		//elm.style.border = "solid "+color1+" 1px";
	} else {
		if (navigator.appName == "Microsoft Internet Explorer") {
		
		} else {
			elm.style.backgroundColor = color2;
			//elm.style.border = "solid "+color1+" 1px";
		}
	}
}

function charsonly(elm,a,z) { // Bsp nur Werte von 0-9, oder A-Z, oder a-Z oder a-z
	for (i=0; i < elm.value.length; i++) {
		if (elm.value.charAt(i) < a || elm.value.charAt(i) > z) {
			return false;
		} else {
			return true;
		}
	}
}

function checkDate(value) {
	var spl = value.split('.');
	if (spl.length != 3) {
		return false;
	} else if ((spl[0].length != 2) || (spl[0].match(/\D/) != null) || (spl[0] < 1) || (spl[0] > 31)) {
		return false;
	} else if ((spl[1].length != 2) || (spl[1].match(/\D/) != null) || (spl[1] < 1) || (spl[1] > 12)) {
		return false;
	} else if ((spl[2].length != 4) || (spl[2].match(/\D/) != null) || (spl[2] < 1900) || (spl[2] > 2036)) {
		return false;
	} else {
		return true;
	}
}

function checkTime(value) {
	var spl = value.split(':');
	if (spl.length != 2) {
		return false;
	} else if ((spl[0].length != 2) || (spl[0].match(/\D/) != null) || (spl[0] < 1) || (spl[0] > 24)) {
		return false;
	} else if ((spl[1].length != 2) || (spl[1].match(/\D/) != null) || (spl[1] < 1) || (spl[1] > 60)) {
		return false;
	} else {
		return true;
	}
}



function d_s(value) {
	value = value.replace(/_/gi, " ");  // g = alle Vorkommen ersetzten, i = ignoriere Groß/Kleinschreibung
	return value;
}


function eplus(value) {
	value = value.replace(/\+/g,"%2B");
	return value;
}



function get_GET_params() {
   var GET = new Array();
   if(location.search.length > 0) {
      var get_param_str = location.search.substring(1, location.search.length);
      var get_params = get_param_str.split("&");
      for(i = 0; i < get_params.length; i++) {
         var key_value = get_params[i].split("=");
         if(key_value.length == 2) {
            var key = key_value[0];
            var value = key_value[1];
            GET[key] = value;
         }
      }
   }
   return(GET);
}
 
function get_GET_param(key) {
   var get_params = get_GET_params();
   if(get_params[key])
      return(get_params[key]);
   else
      return false;
}



/**
*
*  URL encode / decode
*  http://www.webtoolkit.info/
*
**/
 
var Url = {
 
	// public method for url encoding
	encode : function (string) {
		return escape(this._utf8_encode(string));
	},
 
	// public method for url decoding
	decode : function (string) {
		return this._utf8_decode(unescape(string));
	},
 
	// private method for UTF-8 encoding
	_utf8_encode : function (string) {
		string = string.replace(/\r\n/g,"\n");
		var utftext = "";
 
		for (var n = 0; n < string.length; n++) {
 
			var c = string.charCodeAt(n);
 
			if (c < 128) {
				utftext += String.fromCharCode(c);
			}
			else if((c > 127) && (c < 2048)) {
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			}
			else {
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}
 
		}
 
		return utftext;
	},
 
	// private method for UTF-8 decoding
	_utf8_decode : function (utftext) {
		var string = "";
		var i = 0;
		var c = c1 = c2 = 0;
 
		while ( i < utftext.length ) {
 
			c = utftext.charCodeAt(i);
 
			if (c < 128) {
				string += String.fromCharCode(c);
				i++;
			}
			else if((c > 191) && (c < 224)) {
				c2 = utftext.charCodeAt(i+1);
				string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
				i += 2;
			}
			else {
				c2 = utftext.charCodeAt(i+1);
				c3 = utftext.charCodeAt(i+2);
				string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
				i += 3;
			}
 
		}
 
		return string;
	}
 
}


