function XmlToObject(xmlnode)
{
	// wenn der xmlnode nicht angegeben ist
	if(!xmlnode) return null;
	
	// array mit den datensätzen
	var kliniken=new Array();
	var k=xmlnode.getElementsByTagName("ds");
	for(var i=0;i<k.length;i++) {
		kliniken.push(new klinik(k[i],i));
	}
	return kliniken;
}

function klinik(xmlnode,nr)
{
	// Position
		var pos=xmlnode.getElementsByTagName('pos')[0];
		var long=pos.getElementsByTagName('long')[0].firstChild.nodeValue;
		var lat=pos.getElementsByTagName('lat')[0].firstChild.nodeValue;
		
	// adresse
		var adress=xmlnode.getElementsByTagName('adress')[0];
		var zip=adress.getElementsByTagName('zip')[0].firstChild.nodeValue;
		var city=adress.getElementsByTagName('city')[0].firstChild.nodeValue;
		var street=getValue(adress,"street");
		var hno=getValue(adress,"hno");
	
	// kontaktdaten
		var contact=xmlnode.getElementsByTagName('contact')[0];
		var vorwahl=getValue(contact,"vorwahl");
		var tel=getValue(contact,"tel");
		var fax=getValue(contact,"fax");
		var web=getValue(contact,"web");
		var email=getValue(contact,"email");
	
	// details
		var details=xmlnode.getElementsByTagName('details')[0];
		var betten=getValue(details,"betten");
		var tp=getValue(details,"tp");
		var versorgung=getValue(details,"versorgung");
		var traeger=getValue(details,"traeger");
		var skhr_id=getValue(details,"skhr_id");

		
	this.id=xmlnode.getAttribute('id');
	this.name=getValue(xmlnode,"name");
	this.zusatz1=getValue(xmlnode,"zusatz1");
	this.zusatz2=getValue(xmlnode,"zusatz2");
	this.pos=new kpos(long,lat);
	this.dist=getValue(xmlnode,"dist");
	this.adress=new kadress(zip,city,street,hno);
	this.contact=new kcontact(vorwahl,tel,fax,web,email);
	this.details=new kdetails(betten,tp,versorgung,traeger,skhr_id);
	
	if(betten<100) this.radius=4;
	else if(betten<300) this.radius=6;
	else if(betten<600) this.radius=8;
	else if(betten<900) this.radius=10;
	else if(betten>=900) this.radius=12;
	
	var color=1;	// grün
	switch(versorgung)
	{
		case 'R': color=2; break;	// Regelv. - blau
		case 'S': color=3; break;	// Schwerpunktv. - gelb
		case 'M': color=4; break;	// Maximalv. - Meganta
		case 'F': color=5; break;	// Fachkrankenhaus - Cyan
		case 'P': color=6; break;	// Privatklinik - grau
	}
	
	var bildurl="http://www.kliniksuche-sachsen.de/daten/kreis.php?radius="+this.radius+"&c="+color;
	
	// Map24 Location als Element mit aufnehnehmen und pos ersetzen
	this.loc=new Map24.Location({
			Longitude: long,
			Latitude: lat,
			LogoURL: bildurl
			});
	this.loc.addListener( "OnMouseOver", show_loc_info, nr  );
	
	this.printInfos=printInfos;
	
	// die nummer im Array
	this.nr=nr;
	
	// die Route, wenn sie schon berechnet wurde
	this.route=null;
	
}

function printInfos(target,long)
{
	// wenn der langtext kommen soll, das ganze nochmal in ein div packen
	if(long)
	{
		var div=document.createElement("div");
		
		// alternierente Hintergrundfarbe
		if(this.nr%2) div.className="r1";
		else div.className="r2";
		
		target.appendChild(div);
		target=div;
		
		// weiter angaben rechts neben den namen
		var d=document.createElement("div");
		if(this.dist) {
			d.className="dist";
			d.appendChild(document.createTextNode(this.dist));
			d.appendChild(document.createElement("br"));
			d.appendChild(document.createElement("br"));
		}
		
		var a_r=document.createElement("a");
		a_r.setAttribute("href","javascript:calculateRoute("+this.nr+")");
		a_r.appendChild(document.createTextNode("zeige Route"));
		a_r.style.marginRight="20px";
		d.appendChild(a_r);
		
		var a_c=document.createElement("a");
		a_c.setAttribute("href","javascript:center_on_location("+this.nr+")");
		a_c.appendChild(document.createTextNode("auf Karte zeigen"));
		d.appendChild(a_c);
		target.appendChild(d);
	}
	
	// Klinikname
	var name=document.createElement("b");
	name.appendChild(document.createTextNode(this.name));
	target.appendChild(name);
	target.appendChild(document.createElement("br"));
	
	if(this.zusatz1) {
		target.appendChild(document.createTextNode(this.zusatz1));
		target.appendChild(document.createElement("br"));
	}
	
	if(this.zusatz2) {
		target.appendChild(document.createTextNode(this.zusatz2));
		target.appendChild(document.createElement("br"));
	}
	
	// leerzeile
	target.appendChild(document.createElement("br"));
	
	// entfernung rechts neben die addressen
	if(this.dist&&long==null) {
		var d=document.createElement("div");
		d.className="dist";
		d.appendChild(document.createTextNode(this.dist));
		target.appendChild(d);
	}
		
	// adresse
	if(this.adress.street) {
		target.appendChild(document.createTextNode(this.adress.street+" "));
		if(this.adress.hno) target.appendChild(document.createTextNode(this.adress.hno));
		target.appendChild(document.createElement("br"));
	}
	target.appendChild(document.createTextNode(this.adress.zip+" "+this.adress.city));

	// leerzeilen
	target.appendChild(document.createElement("br"));
	
	// wenn eine ID für das Sächsiches Krankenhausregister angegeben ist
	if(this.details.skhr_id) {
		var a=document.createElement("a");
		a.setAttribute("href","http://www.krankenhausregister-sachsen.de/krankenhaus_Ort_allgemeine_angaben_"+this.details.skhr_id+".htm");
		a.setAttribute("target","_blank");
		a.style.cssFloat="right";	// FF
		a.style.styleFloat="right";	// IE
		a.style.display="block";
		a.appendChild(document.createTextNode("mehr"));
		target.appendChild(a);
	}
	
	// link zur Internetseite
	if(this.contact.web) {
		var a2=document.createElement("a");
		a2.setAttribute("href",this.contact.web);
		a2.setAttribute("target","_blank");
		a2.appendChild(document.createTextNode("zur Homepage"));
		target.appendChild(a2);
	}
}

function kpos(long,lat)
{
	this.long=long;
	this.lat=lat;
}

function kadress(zip,city,street,hno)
{
	this.zip=zip;
	this.city=city;
	this.street=street;
	this.hno=hno;
}

function kcontact(vorwahl,tel,fax,web,email)
{
	this.vorwahl=vorwahl;
	this.tel=tel;
	this.fax=fax;
	this.web=web;
	this.email=email;
}

function kdetails(betten,tp,versorgung,traeger,skhr_id)
{
	this.betten=betten;
	this.tp=tp;
	this.versorgung=versorgung;
	this.traeger=traeger;
	this.skhr_id=skhr_id;
}

// wenn der Wert gesetzt ist gibt die funktions null zurück, ansonsten null
function getValue(xmlnode,valname)
{
	// prüfen ob der tag da ist
	var val=xmlnode.getElementsByTagName(valname);
	if (val.length>0) val=val[0];
	else return null;
	
	// prüfen ob der tag inhalt hat
	if(val.hasChildNodes()) val=val.firstChild.nodeValue;
	else val=null;
	return val;
}
