var WinCount, WinOut;	//output windows
var groups=4;			//number of feature groups (blocks)
var uWeights,uPoints,Results;	//arrays of user-defined weights, points and calculation results
var MaxPoints;
var features=new Array(groups);
var weights=new Array(groups);
var remarks=new Array(groups);

features[0]=new Array("Hersteller","Gr&ouml;&szlig;e, Wirtschaftskraft", "Kontinuit&auml;t, Verantwortung","Referenzinstallationen","Erfahrungsberichte","Implementierungskonzept","Service","Schulung");
weights[0]=new Array(10,10,10,20,20,10,20,10);
remarks[0]=new Array("","Feste und freie Mitarbeiter, Umsatz, Hauptgesch&auml;ftsbereich","Gesellschaftsform, Gr&uuml;ndungsjahr, Garantieleistungen, ISO-Zertifizierung","Anzahl, Gr&ouml;&szlig;e, Umfang, Reputation","Termintreue,Einhaltung von Zusagen,Engagement der Mitarbeiter, Kooperation mit Ger&auml;te-, LIS- und KIS-Herstellern","Verst&auml;ndlichkeit, Umfang, L&ouml;sungsskizze","Hotline, Responsezeiten, verf&uuml;gbare Spezialisten","Unterlagen,Onlinehilfen,Schulung vor Ort, Seminare");

features[1]=new Array("Produkt","Architektur","Hardware","Software","Zeitverhalten","Wartungsvertr&auml;ge","Lizenzpolitik");
weights[1]=new Array(20,20,10,10,20,20,20);
remarks[1]=new Array("","Client-Server-Architektur, Peripherie, zentraler Stammdatenserver","Zentralrechner, PC-Netz, Terminals, Drucker, Speicher, Betriebssystem","Datenbank, Datenschutztestate, Nutzung von Standardsoftware, Parametrisierbarkeit (auch durch Anwender)","je nach Datenbankf&uuml;llung, Zahl der Online-Anschl&uuml;sse und Benutzer, insbesondere bei &uuml;ber&ouml;rtlichen Anlagen","Art und Umfang, Hardware und Software, Remote-Zugriff","Online-Ger&auml;te, Datenbank, Mehrfachinstallationen (Campuslizenz), Pay-per-Use (statt Kauf)");

features[2]=new Array("Funktionsumfang","Module","Auskunftsfunktionen","Stammdatenverwaltung","Anforderung und Messwerterfassung","Qualit&auml;tskontrolle","techn. und med. Validation","Befundung","Abrechnung","Archivierung","Statistik");
weights[2]=new Array(40,10,10,10,10,10,10,10,10,10,10);
remarks[2]=new Array("","Klinische Chemie, Mikrobiologie, Blutbank, Automation und Steuerung","Such- und Sortierm&ouml;glichkeiten, Auftragszustand, Probenverfolgung","Pflegbarkeit, Kopierfunktionen, &uuml;bernahme von Altdaten, modul&uuml;bergreifend","Tastatur/Kartenleser/Order Entry, Materialkennung, unterschiedliche Barcodes, Ger&auml;teschnittstellen","Rili-B&auml;K konform (auch parallel alt und neu), Westgard, weitere Regelwerke, grafische Darstellung","Autovalidation, Regelwerke, Alarme,automatische Wiederholungsmessungen, grafische Darstellung","Sortierkriterien f&uuml;r Einsender und Labor, Regelsysteme, ICD-Kodierung, Fu&szlig;noten bei mehrfach gleichen Texten","Mandantenf&auml;higkeit, Leistungsverzeichnisse, Periodenabgrenzung","Verfahren, Dauer, Zugriff, Reaktivierung, Speicherung von Bilddaten","Gespeicherte und freie Abfragen, SQL-Assistent, Export in Standardsoftware");

features[3]=new Array("Integration","Konfigurierbarkeit","Kommunikation intern","Kommunikation extern","Nutzung vorhandener Hardware","Nutzung vorhandener Daten");
weights[3]=new Array(30,20,20,20,20,20);
remarks[3]=new Array("","Anpassung von Software und Benutzeroberfl&auml;che an lokale Situation","Anbindung an KIS und Stationen, POC-Ger&auml;te, dezentrale Drucker, konfigurierbare Standardschnittstellen (HL7 und LDT)","Anbindung anderer Kliniken, Facharztlabor, Laborgemeinschaft","Drucker, Scanner, PCs, Belegleser","&uuml;bernahme von Altdaten, Beibehaltung der Nummernlogik");

//----- Read Write Functions --------------------------------

function chkDigits(tx){	//checks user input for numeric digits
var x=parseInt(tx);
	if (tx!="" && isNaN(x)){
		return "0";
	}else{
		return tx;}
}

function ClearPoints(){	//clears row 2 of input boxes
var i,j,k,m;
	k=3;	//first input in row 2
	for (i=0;i<groups;i++){
		m=weights[i].length-1;	//number of input boxes in group i
		for (j=k;j<k+2*m;j+=2){
			document.InputForm.elements[j].value="";
		}
		k+=2*m+1;
	}
}

function DefaultWeights(tx){	//fills row 1 of input boxes with predefined weights
var i,j,k,m,x;
var n=document.InputForm.elements.length; 	//number of input fields (field 0 = lis)
	if (tx == false){
		for (i=1;i<n;i++) document.InputForm.elements[i].value="";	//clears all input boxes
	}else{
		k=1;	//first input in row 1
		for (i=0;i<groups;i++){
			document.InputForm.elements[k].value = weights[i][0];	//group weight of group i
			m=weights[i].length-1;	//number of individual weights in group i
			x=0;
			for (j=k+1;j<k+2*m;j+=2){
				x+=1;
				document.InputForm.elements[j].value=weights[i][x];
			}
			k+=2*m+1;
		}	
	}	
}

//------ Result Calculation ---------------------------------

function Evaluate(){
var i,j,k,m,x,y;
var n=document.InputForm.elements.length; 	//number of input fields (field 0 = lis)
uWeights=new Array(groups);
uWeights[0]=new Array(weights[0].length);
uWeights[1]=new Array(weights[1].length);
uWeights[2]=new Array(weights[2].length);
uWeights[3]=new Array(weights[3].length);
uPoints=new Array((n+1-groups)/2+1);					
Results=new Array((n+1-groups)/2+1);
MaxPoints=0;
Results[0]=0;					
uPoints[0]=0;						//points[0]= final result

//reads points
	x=0;
	k=3;	//first input in row 2
	for (i=0;i<groups;i++){
		m=weights[i].length-1;	//number of input boxes in group i
		for (j=k;j<k+2*m;j+=2){
			x++;
			uPoints[x] = parseInt(document.InputForm.elements[j].value);
			if (isNaN(uPoints[x])) uPoints[x]=0;
		}
		k+=2*m+1;
	}

//reads weights and calculates results
	x=0;
	k=1;	//first input in row 1
	for (i=0;i<groups;i++){
		uWeights[i][0] = parseInt(document.InputForm.elements[k].value);	//group weight of group i
		if (isNaN(uWeights[i][0])) uWeights[i][0] = 0;
		m=uWeights[i].length-1;	//number of individual weights in group i
		y=0;
		for (j=k+1;j<k+2*m;j+=2){
			x++;
			y++;
			uWeights[i][y] = parseInt(document.InputForm.elements[j].value);
			if (isNaN(uWeights[i][y])) uWeights[i][y] = 0;
			fac=uWeights[i][0]*uWeights[i][y]/10000;
			Results[x]=fac*uPoints[x];
			uPoints[0]+=Results[x];
			MaxPoints+=fac*9/10000;
		}
		k+=2*m+1;
	}

//Opens new window for result output
WinCount++;
WinOut=window.open("","","width=600, height=600,left=10,top=10,resizable=yes,scrollbars=yes,menubar=yes");
WinOut.document.writeln("<html><head><title>Auswertung<\/title><\/head>\n<body style='font-family:arial;font-size:10pt'>");
//Evaluation remark
WinOut.document.writeln("<b>Auswertung f&uuml;r: ",document.InputForm.lis.value,"<\/b><br><br>");
WinOut.document.writeln("Das System erreicht mit ",Math.round(100*uPoints[0])/100," Punkten ");
WinOut.document.writeln("<b>",Math.round(10*uPoints[0]/MaxPoints/100)/10,"\%<\/b> der maximal m&ouml;glichen Punktzahl von ",Math.round(100000*MaxPoints)/10,".");
WinOut.document.writeln("<br><br>");
//Table
WinOut.document.writeln("<table border=\'0\' style='font-family:arial;font-size:10pt'>");
WinOut.document.writeln("<tr style=\'background-color:#22228B;color:#FFFFFF;font-weight:bold\'>");
WinOut.document.writeln("<td>Eigenschaften<\/td><td>Punkte<\/td><td>Gewichte (\%)<\/td>");
WinOut.document.writeln("<td>Bewertungen<\/td><\/tr>");
k=0;
for(i=0;i<groups;i++){
	WinOut.document.writeln("<tr style=\'font-weight:bold;background-color:#999999\'><td>",features[i][0],"<\/td>");
	WinOut.document.writeln("<td><\/td><td align=\'center\'>",uWeights[i][0],"<\/td><td><\/td><\/tr>");
	for(j=1;j<features[i].length;j++){
		k++;
		WinOut.document.writeln("<tr style=\'background-color:#CCCCCC\'><td>",features[i][j],"<\/td>");
		WinOut.document.writeln("<td align=\'center\' style=\'background-color:#EEEEEE\'>",uPoints[k],"<\/td>");
		WinOut.document.writeln("<td align=\'center\'>",uWeights[i][j],"<\/td>");
		WinOut.document.writeln("<td align=\'center\'>",Math.round(100*Results[k])/100,"<\/td><\/tr>");
	}
}
WinOut.document.writeln("<tr style=\'background-color:#999999;font-weight:bold\'>");
WinOut.document.writeln("<td colspan=\"3\">Summe<\/td><td align=\'center\'>",Math.round(100*uPoints[0])/100,"<\/td><\/tr>");

WinOut.document.writeln("<\/table>");
WinOut.document.writeln("<\/body><\/html>");
WinOut.document.close();
}//end of Evaluate

//------ Input Form ------------------------

function InputTable(){
//creates input table with buttons to run the program
var i,j;
var text=""
+"<b>Die untenstehenden Merkmale werden typischerweise bei IT-Ausschreibungen erfragt.<\/b><br><br>"
+"<u>Schritt 1:<\/u> Legen Sie in Spalte 1 fest, welches prozentuale Gewicht jedes aufgef&uuml;hrte Merkmal haben soll (0 bis 99); die Summen sollten 100 ergeben. Praxiserprobte Standardgewichte sind eingetragen.<br>"
+"<u>Schritt 2:<\/u> Vergeben Sie dann in der leeren Spalte 2 Punkte f&uuml;r den Erf&uuml;llungsgrad jedes Merkmals<br>(0 = \"&uuml;berhaupt nicht erf&uuml;llt\", 9 = \"l&auml;sst keine W&uuml;nsche offen\").<br>"
+"<u>Schritt 3:<\/u> Klicken Sie zuletzt auf \'Berechnen\'; Sie erhalten den Gesamtpunktwert des Systems in Prozent. Das LIS mit dem h&ouml;chsten Punktwert ist f&uuml;r Sie am geeignetsten.<br><br>"

//-------- Buttons ---------------
+"<center><input type=\'button\' value=\" Berechnen \" onclick=\"Evaluate()\"> &nbsp &nbsp "
+"<input type=\'button\' value=\" Reset \" onclick=\"ClearPoints()\"><br><br>"
+"<input  type=\'checkbox\' name=\"DefaultWeights\" checked onclick=\"DefaultWeights(this.checked)\"> Standardgewichte verwenden<\/center>"
+"<br><br>"

//-------- User Form --------------
+"<form name=\"InputForm\">"
+"<input type=\'text\' size=\'50\' maxlength=\'100\'  value=\"Firma, System\" name=\"lis\"><br><br>"
+"<table border=\'0\' align=\'center\' style='background-color:#CCCCCC;font-family:arial;font-size:10pt'>"
+"<tr height=\'15px><td colspan=\'3\'><\/tr>"
+"<tr height=\'25px\' style=\'background-color:#22228B;color:#FFFFFF;font-weight:bold\'>"
+"<td colspan=\'2\' style=\'padding-left:5px\'>Gewichtete Merkmale<\/td>"
+"<td colspan=\'2\' style=\'padding-left:5px\'>"
+"Punkte und Entscheidungskriterien <\/td><\/tr>"
+"<tr height=\'15px><td colspan=\'3\'><\/tr>";
  for (i=0;i<groups;i++){
	text+="<tr style=\'background-color:#FFFFFF;font-weight:bold\'><td style=\'width:40px\'>"
	+"<input type=\'text\' style=\'font-weight: bold\' size=\'2\' maxlength=\'2\' onblur=\"this.value=chkDigits(this.value)\"><\/td>"
	+"<td colspan=\'3\'>"+features[i][0]+"<\/tr>";
	for (j=1;j<features[i].length;j++){
		text+="<tr><td align=\'center\' style=\'width:20px\'>"
		+"<input type=\'text\' size=\'2\' maxlength=\'2\' onblur=\"this.value=chkDigits(this.value)\"><\/td><td style=\'width:100px\'>"
		+features[i][j]+"<\/td><td align=\'center\' style=\'width:16px\'>"
		+"<input type=\'text\' size=\'1\' maxlength=\'1\' onkeyup=\"this.value=chkDigits(this.value)\">"
		+"<\/td><td style=\'font:italic\'>"+remarks[i][j]+"<\/tr>";
	}
  }text+="<\/table><\/form>";
document.getElementById("divPageText").innerHTML=text;
}//end of InputTable

function home(){
//Creates home page
var Menue,RightColumn;

Menue="<center><table border=\"1\" style='background-color:#CCCCCC;font-family:arial;font-size:10pt'><tr>"
+"<td style=\'width:100px\'><a href=\"javascript:InputTable()\"><center>Programm<\/a><\/td>"
+"<td style=\'width:100px\'><a href=\"javascript:About()\"><center>Anleitung<\/a><\/td>"
+"<td style=\'width:100px\'><a href=\"javascript:Authors()\"><center>Autoren<\/a><\/td>"
+"<td style=\'width:100px\'><a href=\"hersteller.html\" target=\"LIS Evaluator Herstellerverzeichnis\"><center>Hersteller<\/a><\/td>"
+"<td style=\'width:100px\'><a href=\"javascript:Contact()\"><center>Kontakt<\/a><\/td>"
+"</tr></table></center>";
document.getElementById("divMenue").innerHTML=Menue;

RightColumn="<h2>Gef&ouml;rdert von<\/h2>"
+"<a href=\"hersteller.html\" target=\"LIS Evaluator Herstellerverzeichnis\">"
+"<img src=\"gefoerdert_von.jpg\"><\/a><br><br>";

document.getElementById("divRightColumn").innerHTML=RightColumn;

InputTable();
DefaultWeights(true);
}//end home


//------------------------------

function About(){
var text = "<table style='font-family:arial;font-size:10pt'><tr><td style=\'padding-left:20px;padding-right:20px;vertical-align:top;width:580px\'>"
+"<b>Hintergrund<\/b><br><br>"
+"<img style=\'border:1px solid;margin-right:12px\' src=\"about.jpg\"><br><br>"
+"Der \"LIS-Evaluator\" dient dazu, verschiedene Laborinformationssysteme auf der Basis von Firmenangaben "
+ "(z.B. Ausschreibungsunterlagen) und pers&ouml;nlicher Einsch&auml;tzung objektiv miteinander zu vergleichen.<br><br>"  
+ "Sein Grundprinzip ist einfach: F&uuml;r jedes Merkmal vergeben Sie je nach Erf&uuml;llungsgrad 0 bis 9 Punkte. "
+ "Diese Zahlen werden mit je einem Einzelgewicht und einem Gruppengewicht multipliziert. "
+"Durch Addition ergibt sich dann eine Ma&szlig;zahl f&uuml;r den Vergleich der verschiedenen Angebote. "
+"Je h&ouml;her diese Zahl, desto besser das System. Das Optimum ist 100%.<br><br>"
+"Sinnvolle Standardgewichte sind beim Programmstart bereits vorbelegt. "
+"Sie k&ouml;nnen diese Funktion ausschalten, indem Sie das H&auml;kchen &uuml;ber der Tabelle entfernen.<br><br>"
+"Hinweis: Das Kosten-Nutzen-Verh&auml;ltnis der verschiedenen Angebote wird in diesem Programm nicht bewertet, kann aber leicht von Hand berechnet werden, "
+"indem man die Preise durch die Gesamtpunktzahl dividiert. Man erh&auml;lt so eine Ma&szlig;zahl f&uuml;r den Preis pro Punkt und damit den preisg&uuml;nstigsten Anbieter.<br><br> "
+"Diese Form der computergest&uuml;tzten Bewertung von Labor-EDV-Systemen macht die Entscheidungsfindung "
+ "bei der Neubeschaffung nachvollziehbar und quantifiziert auch "
+"\"weiche Eigenschaften\“ wie z.B. Kontinuit&auml;t eines Unternehmens oder Erfahrungen anderer Anwender.<br><br>"
+"Abschlie&szlig;end sei ausdr&uuml;cklich darauf hingewiesen, dass der LIS-Evaluator weder irgendwelche Verbindlichkeit besitzt "
+"noch Erfahrung und Sachverstand bei der Auftragsvergabe ersetzt. Insbesondere k&ouml;nnen bestimmte Knock-Out-Kriterien trotz ansonsten guter Punktzahl oder "
+"g&uuml;nstiger Preise ein System v&ouml;llig wertlos machen. F&uuml;r R&uuml;ckfragen stehen die Autoren gern zur Verf&uuml;gung.";
document.getElementById("divPageText").innerHTML=text;
}//end of About

function Authors(){
var text = "<table style='font-family:arial;font-size:10pt'><tr><td style=\'padding:30px;vertical-align:top;width:580px\'>"
+"<b>Autoren<\/b><br><br>"
+"<img style=\'border:1px solid;margin-right:12px;float:left;\' src=\"hoffmann.jpg\">"
+"Prof. Dr. med. Georg Hoffmann war in den 1980er-Jahren Oberarzt am Labor des Klinikums M&uuml;nchen-Bogenhausen "
+"und Anfang der 90er-Jahre Forschungsleiter f&uuml;r Laborautomation bei Boehringer Mannheim. Unter anderem spezifizierte und entwickelte er "
+"dort Labor-EDV-Systeme, Expertensysteme und Computersimulationsprogramme.<br><br>"
+"Seit 1995 ist er Gesch&auml;ftsf&uuml;hrer des Beratungs- und Software-Unternehmens <i>Trillium GmbH<\/i> und "
+"seit 1997 Herausgeber der Zeitschrift <i>Trillium Report<\/i>. "
+"Das vorliegende Programm entwickelte er 2006 in Javascript f&uuml;r die freie Benutzung auf der Trillium-Report-Website.<hr><br>"
+"<img style=\'border:1px solid;margin-right:12px;float:left;\' src=\"heidrich.jpg\">"
+"Dr. Rainer Heidrich leitete in den 1990er-Jahren ein Kliniklabor in Solingen und war "
+"Vorsitzender der Arbeitsgruppe Labor-EDV der Deutschen Gesellschaft f&uuml;r Klinische Chemie. "
+"Seit 1995 betreut er die Krankenhauslaboratorien der Gemeinschaftspraxis <i>Limbach und Kollegen<\/i>.<br><br>"
+"In dieser Zeit sammelte er umfangreiche Erfahrungen bei der Ausschreibung, Beschaffung und Einf&uuml;hrung von EDV-Systemen "
+"vor allem f&uuml;r mittlere Kreiskrankenh&auml;user, die das Gros der deutschen Laborszene bestimmen. "
+"2006 publizierte der Trillium-Report seinen Beitrag &uuml;ber die Bewertung und Auswahl von Labor-EDV-Systemen, "
+"in dem dieses Programm erstmals vorgestellt wurde. 2010 wurde erschien ein Update, das im vorliegenden Programm ber&uuml;cksichtigt ist. <hr>"
+"Die Autoren bedanken sich bei Dr. H. Luthe, G&ouml;ttingen und Dr. M. Orth, Stuttgart f&uuml;r fachkundige Beratung und inhaltliche Mitarbeit am LIS-Evaluator.";
document.getElementById("divPageText").innerHTML=text;
}//end of Authors


function Contact(){
var text = "<center><b>Kontakt<\/b><\/center><br>"
+"<table style='font-family:arial;font-size:10pt'><tr><td style=\'padding-left:20px;padding-right:20px;width:300px\'>"
+"Prof. Dr. med. Georg Hoffmann<br>"
+"Tel: +49 - (0)8144 - 9111<br>"
+"Fax: +49 - (0)8144 - 98169<br>"
+"E-mail: <a href=\"mailto:hoffmann@trillium.de\">hoffmann@trillium.de<\/a><br>"
+"Web: <a href=\"http:\/\/www.trillium.de\" target=\"trillium\">www.trillium.de<\/a>"
+"<\/td><td style=\'padding-left:20px;padding-right:20px;width:300px\'>"
+"Dr. Rainer Heidrich<br>"
+"Tel: +49 - (0) 6221 - 3432 - 160<br>"
+"Fax: +49 - (0) 6221 - 3432 - 311<br>"
+"E-mail: <a href=\"mailto:Heidrich@labor-limbach.de\">Heidrich@labor-limbach.de<\/a><br>"
+"Web: <a href=\"http:\/\/www.labor-limbach.de\" target=\"limbach\">www.labor-limbach.de<\/a>"
+"<\/td><\/tr><tr><td style=\'padding-left:20px;padding-right:20px\' colspan=\"2\">"
+"<hr><b>Impressum<\/b><br><br>"
+"Inhaltlich Verantwortlicher nach §10 Absatz 3 MDStV:<br>"
+"Prof. Dr. med. Georg Hoffmann, Hauptstr. 12b, 82284 Grafrath<br><br>"
+"<u>Haftungshinweis<\/u><br>"
+"Der Inhalt verlinkter Seiten liegt in der Verantwortung der jeweiligen Betreiber."
+"<\/td><\/tr><\/table>";
document.getElementById("divPageText").innerHTML=text;
}//end of Contact

