function SForm2XML(){
	this.version = "1.0";
	};

SForm2XML.prototype.decode = function($xd){
var $an = "name", $av = "value", $at = "type", $e = null,
		$xe = null, $f = document.forms[$xd.getAttribute($an)];
	if($f!=null){
		for(var i=0; i<$f.elements.length; i++){
			$e = $f.elements[i];
			if($e.type=="radio"){
				$e.checked = false;
				for(var j=0; j<$xd.childNodes.length(); j++){
					$xe = $xd.childNodes.item(j);
					if($xe.getAttribute($at)==$e.type&&$e.value==$xe.getAttribute($av)){
						$e.checked = true;
						break;
						};
					};
				}
			else{
				for(var j=0; j<$xd.childNodes.length(); j++){
					$xe = $xd.childNodes.item(j);
					if($xe.getAttribute($an)==$e.name){
						switch($e.type){
							case "checkbox":
								$e.checked = (($xe.getAttribute($av)=="true") ? true : false);
								break;
							case "select-one":
								for(var k=0; k<$e.options.length; k++){
									$e.options[k].selected = ($xe.getAttribute($av)==$e.options[k].value)
									};
								break;
							case "select-multiple":
								for(var k=0; k<$e.options.length; k++){
									$e.options[k].selected = false;
									for(var l=0; l<$xe.childNodes.length(); l++){
										if($xe.childNodes.item(l).getAttribute($av)==$e.options[k].value){
											$e.options[k].selected = true;
											break;
											};
										};
									};
								break;
							case "password":
								/* do nothing here */
								break;
							default:
								$e.value = $xe.text;
								break;
							};
						};
					};
				};
			};
		};
	};

SForm2XML.prototype.attachFormToXML = function($f, $p){
var $x = this.encode($f), $c = $xo = null;
	for(var i=0; i<$p.childNodes.length(); i++){
		$c = $p.childNodes.item(i);
		if($c.baseName=="form"&&$c.getAttribute("name")==$x.getAttribute("name")){
			$xo = $c;
			break;
			};
		};
	if($xo!=null){
		$p.replaceChild($x, $xo);
		}
	else $p.appendChild($x);
	};

SForm2XML.prototype.detachFormFromXML = function($n, $p){
var $c = $x = null;
	for(var i=0; i<$p.childNodes.length(); i++){
		$c = $p.childNodes.item(i);
		if($c.baseName=="form"&&$c.getAttribute("name")==$n){
			$x = $c;
			break;
			};
		};
	if($x!=null){
		this.decode($x);
		return(true);
		}
	else return(false);
	};

SForm2XML.prototype.doNotEncodeElement = function($e){
	return($e.name=="save-form-values"||(($e.type=="text"||$e.type=="textarea")&&$e.value==""));
	};

SForm2XML.prototype.encode = function($f){
var $e = null, $x = new SXMLDom(), $xd = null,
		$xe = null, $xo = null, $o = null, $av = "value",
		$an = "name", $ae = "element", $at = "type", $cp = "caption",
		$lbl = null;
	$xd = $x.documentElement = $x.createNode("form")
	$xd.setAttribute($an, $f.name);
	for(var i=0; i<$f.elements.length; i++){
		$e = $f.elements[i];
		if(this.doNotEncodeElement($e)){ continue };
		$lbl = document.getElementById("LBL_" + $f.name + "_" + $e.name);
		if($e.type=="radio"&&$e.checked){
			$xe = $x.createNode($ae);
			$xe.setAttribute($an, $e.name);
			$xe.setAttribute($at, $e.type);
			$xe.setAttribute($av, $e.value);
			if($lbl) $xe.setAttribute($cp, $lbl.innerHTML);
			$xe.text = $e.title;
			$xd.appendChild($xe);
			}
		else if($e.type!="button"&&$e.type!="submit"&&$e.type!="reset"&&$e.type!="radio"){
			$xe = $x.createNode($ae);
			$xe.setAttribute($an, $e.name);
			$xe.setAttribute($at, $e.type);
			if($lbl&&$e.type!="checkbox") $xe.setAttribute($cp, $lbl.innerHTML);
			switch($e.type){
				case "checkbox":
					$xe.setAttribute($av, (($e.checked) ? "true" : "false"));
					if($lbl) $xe.setAttribute($cp, $lbl.innerHTML);
					$xe.text = (($e.checked) ? "Ja" : "Nein");
					break;
				case "select-one":
					if($e.options.length>0){
						$o = $e.options[$e.selectedIndex];
						$xe.setAttribute($av, $o.value);
						$xe.text = $o.text;
						};
					break;
				case "select-multiple":
					for(var j=0; j<$e.options.length; j++){
						$o = $e.options[j];
						if($o.selected){
							$o = $e.options[j];
							$xo = $x.createNode("option");
							$xo.setAttribute($av, $o.value);
							$xo.text = $o.text;
							$xe.appendChild($xo);
							};
						};
					break;
				default:
					$xe.text = $e.value;
					break;
				};
			$xd.appendChild($xe);
			};
		};
	return($xd);
	};

var Form2XML = new SForm2XML();