Kapi Hospital Berater

add some premium functionallity to the game

// ==UserScript==
// @name           Kapi Hospital Berater
// @date           05.10.2017
// @version        2.4.3.04
// @include        http://*kapihospital.com/*
// @grant          GM_getValue
// @grant          GM_setValue
// @grant          GM_addStyle
// @grant          GM_xmlhttpRequest
// @description     add some premium functionallity to the game
// @require        http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.js
// @namespace https://gf.qytechs.cn/users/155060
// ==/UserScript==

window.addEventListener("load", function() {

// Umlaute
var ae = "\u00E4";	var oe = "\u00F6";	var ue = "\u00FC";
var Ae = "\u00C4";	var Oe = "\u00D6";	var Ue = "\u00DC";
var sz = "\u00DF";

// global definitions
var texte = new Object();
var gamepages = new Object();
var medi = new Object();

if (document.location.href.search("de.kapihospital.com")!=-1) {
	var lng = "de";
	var gamepage = ".kapihospital.com";
	var reg = /http:\/\/s(\d+)\.de\.kapihospital\.com\/(.*?)\.php(.*)/i;
	var reg2 = /http:\/\/(s\d+\.de\.|de\.|)kapihospital\.com\/(.*)/i;
	var delimThou = ".";
	var regDelimThou = /\./g;
	var delimDeci = ",";
	var regDelimDeci = /,/;
}

if (document.location.href.search("pl.kapihospital.com")!=-1) {
	var lng = "pl";
	var gamepage = ".pl.kapihospital.com";
	var reg = /http:\/\/s(\d+)\.pl\.kapihospital\.com\/(.*?)\.php(.*)/i;
	var reg2 = /http:\/\/(s\d+\.|www\.|)kapihospital\.com\/(.*)/i;
	var delimThou = ".";
	var regDelimThou = /\./g;
	var delimDeci = ",";
	var regDelimDeci = /,/;
}

if (document.location.href.search("uk.kapihospital.com")!=-1) {
	var lng = "uk";
	var gamepage = ".uk.kapihospital.com";
	var reg = /http:\/\/s(\d+)\.uk\.kapihospital\.com\/(.*?)\.php(.*)/i;
	var reg2 = /http:\/\/(s\d+\.|www\.|)kapihospital\.com\/(.*)/i;
	var delimThou = ".";
	var regDelimThou = /\./g;
	var delimDeci = ",";
	var regDelimDeci = /,/;
}

loadLanguage(lng);


gamepages["de"] = "http://www.de.kapihospital.com";
gamepages["pl"] = "http://www.pl.kapihospital.com/";
gamepages["uk"] = "http://www.uk.kapihospital.com/";

//***********************************************************************************************************

var scriptUrl = "https://userscripts-mirror.org/scripts/show/149667";
var Global = unsafeWindow.Global;
var loc = reg.exec(document.location.href);
var all  = document.getElementsByTagName("body")[0];
var now = Math.floor((new Date()).getTime()/1000);
var nie = 2147483000;
var questcnt = 0;

var server = "";
var page = "";
var pageZusatz = "";
var developer = false;
var candtable = document.getElementsByTagName("table");
var username = "";

var valRackLimit = "";
var valMaxRackLimit = "";
var valGlobalClockInTitle = "";
var questTime = "";
var valStartQuestAutomatic = false;
var logindata = new Array;


if(loc){
	server = loc[1];
	page = loc[2];
	pageZusatz = loc[3];
	developer = (pageZusatz=="?dev");
	candtable = document.getElementsByTagName("table");
	username = GM_getValue(lng+"_"+server+"_username","");

	switch (page) {
		case "main":
					do_main();
					break;
					
		case "logout": 
					do_login();
					break;
	}
} 
else 
	do_login();


//***********************************************************************************************************

function do_main() {
	//if (!username) document.location.href = "http://www"+gamepage;
	// CSS
	GM_addStyle("tr:hover{background-color:lightblue;}");
	GM_addStyle("table.hoveryellow tr:hover{background-color:yellow;}");
	GM_addStyle("div.hoverlightblue:hover{background-color:lightblue;}");
	GM_addStyle("div.hoverblue:hover{background-color:blue;}");
	GM_addStyle("#quicklinks{position:fixed;right:-100px;top:0px;width:100px;height:100%;padding-left:15px;background-color:#999;z-index:200;}");
	GM_addStyle("#quicklinks:hover{right:0px;!important}");
	GM_addStyle("#quicklinks>div{float:left;}");
	GM_addStyle("#quicklinks>div>div{position:relative;width:50px;height:50px;}");
	GM_addStyle(".miniicon{font-weight:bold;padding:2px;border:1px inset white;}");
	GM_addStyle(".allcured{border:3px solid green!important;}");
	GM_addStyle(".needminitreatment{border:3px solid yellow;border-left:3px solid yellow!important;}");
	GM_addStyle(".unhealable{border:3px solid red;border-top:3px solid red!important;border-right:3px solid red!important;}");
	GM_addStyle(".racklow{"+GM_getValue(lng+"_"+server+"_"+username+"_css_racklow","background-color:orangered;")+"}");
	GM_addStyle(".cursorstandard{ cursor: default!important;}");

	// Updatecheck
	if (GM_getValue("valUpdate",true)) {
		valLastUpdate = GM_getValue("valLastUpdate","");
		if(valLastUpdate=="") {
			GM_xmlhttpRequest({
				method: "GET",
				url: "https://userscripts-mirror.org/scripts/source/149667.meta.js",
				onload: function(response) {
					keyusoversion = /uso:version\s+(\d+)/;
					serverversion = keyusoversion.exec(response.responseText)[1];
					GM_setValue("valLastUpdate",serverversion);
				}
			});
		} else {
			GM_xmlhttpRequest({
				method: "GET",
				url: "https://userscripts-mirror.org/scripts/source/149667.meta.js",
				onload: function(response) {
					keyusoversion = /uso:version\s+(\d+)/;
					serverversion = keyusoversion.exec(response.responseText)[1];
					if (valLastUpdate!=serverversion) {
						GM_setValue("valLastUpdate",serverversion);
						if(confirm(texte["confirmUpdate"])) {
							document.location.href = "https://userscripts-mirror.org/scripts/source/149667.user.js";
						}
					}
				}
			});
		}
	}

	var documentTitle = document.title;
	try{var maincontainer = $("border4").parentNode;}catch(err){var maincontainer=all;}
	try{var werbecontainer = $("defaultUpjersToolbarContainer").parentNode;}catch(err){var werbecontainer=all;}
	
	var lastXmlRequest = 0;
	
	var rooms = new Array();
	var patients = new Array();
	var roomTimes = new Object();
	
	roomTimes["global"] = [0,0];
	roomTimes["allrooms"] = [0,0];
	roomTimes["emptyrooms"] = [0,0];
	
	
	for(var v in Global.availableMedics[0] )
	{ 
		medi[Global.availableMedics[0][v]["diseases"]] = Global.availableMedics[0][v];
	}
	
	var cand = document.getElementsByClassName("room");
	
	valRackLimit = GM_getValue(lng+"_"+server+"_"+username+"_valRackLimit",50);
	valMaxRackLimit = GM_getValue(lng+"_"+server+"_"+username+"_valMaxRackLimit",100);
	valGlobalClockInTitle = GM_getValue(lng+"_"+server+"_"+username+"_valGlobalClockInTitle",true);
	questTime = GM_getValue(lng+"_"+server+"_"+username+"_questTime",0);
	valStartQuestAutomatic = GM_getValue(lng+"_"+server+"_"+username+"_valStartQuestAutomatic", true);
	
	if (developer) 
		createElement("div",{id:"help1",style:"z-index:2;position:absolute;top:15px;left:0px;background-color:#CCC;border:2px solid black;padding:3px;"},all);
		
	
	// punkte
	GM_xmlhttpRequest({
	  method: "GET",
	  url: "service.help.php?mode=level",
	 // synchronous: true,
	  onload:function(response) 
	  {					
			var text = JSON.parse(response.responseText);			
			var dom = (new DOMParser()).parseFromString(text["message"], "text/xml");
			var tbdy = dom.getElementsByTagName("tbody").item(0);
			var tz = tbdy.getElementsByTagName("tr");
			
			
			$("pkt").addEventListener("mouseover",function(){
				var punkte = parseInt(this.innerHTML.replace(/\./g,""),10);
				
				for( var z=0; z<tz.length; z++ )
					if( punkte < parseInt( tz.item(z).getElementsByTagName("td").item(1).textContent.replace(/\./g,""), 10 ) )
						break;
	
				this.title = texte["noch"]+" "+number_format( parseInt( tz.item(z).getElementsByTagName("td").item(1).textContent.replace(/\./g,""), 10 ) - punkte);
			},false);
	  },
	});
	
	patientDiseases = new Object(); 
	// patientDiseases[patientId][diseaseNr]: heartbeat,cured,notreatment,comesnext,""=ill
	// patientDiseases[patientId][room]: current room (type)
	// patientDiseases[patientId][floor]: current floor
	// patientDiseases[patientId][roomX]: needed room to go (type)
	// patientDiseases[patientId][m_done]: count of minitreatments done
	// patientDiseases[patientId][state]: 0=waitingroom,1=bed,2=nurse,3=in room,4=treatment,5=cured
	// patientDiseases[patientId][unhealable]: if not healable
	/*try{ patientDiseases = explode(GM_getValue(lng+"_"+server+"_"+username+"_patientDiseases","{}")); }catch(err){}
	
	for(var pat in patientDiseases)
	{
		if(!Global.refPatients.get("p"+pat)){ delete patientDiseases[pat]; }
		else {
			if(!patientDiseases[pat]["state"]){ patientDiseases[pat]["state"]=1; }
			if(!patientDiseases[pat]["room"]){ patientDiseases[pat]["room"]=6; }
			if(!patientDiseases[pat]["floor"]){ patientDiseases[pat]["floor"]=1; }
		}
	}*/
	
	//For non Premium Players, read patient stats from Server
	if( ! Global.ISPREMIUM )
	{
		var patids = Global.refPatients.values();
		for(var v=0; v < patids.length; v++ )
		{
			refreshPatient(patids[v]["id"], false);
		}
	}
		
	if(developer)
	{

		$("garten_komplett").addEventListener("mouseover",function(event){
			$("help1").innerHTML  = "";
			var roomId = 0;
			var patientId=0;
			
			if(!isNaN(event.target.id.replace("r",""))){
				roomId = event.target.id.replace("r","");
				patientId = Global.refRooms.get(event.target.id).patient;
			}
			else if(!isNaN(event.target.id.replace("p",""))){
				roomId = (Global.refPatients.get(event.target.id).room+"").replace("r","");
				patientId = event.target.id.replace("p","");
			}
			
			if(patientId!=0){
				var help = Global.refPatients.get("p"+patientId);
				for(var v in help){
					if(typeof(help[v])!="function") $("help1").innerHTML += "<br>"+v+" : "+help[v];
				}
				$("help1").innerHTML += "<br>"
				if(patientDiseases[patientId]){
					$("help1").innerHTML += "<br>Diseases:"
					for(var v in patientDiseases[patientId]){
						$("help1").innerHTML += "<br>"+v+" : "+patientDiseases[patientId][v];
					}
				}
				$("help1").innerHTML += "<br>"
			}

			$("help1").innerHTML += "<br>Floor:" + Global.selectedFloor;
			
			if(roomId!=0){
				$("help1").innerHTML += "<br>Roominfos:"
				var help = Global.refRooms.get("r"+roomId);
				for(var v in help){
					if(typeof(help[v])!="function") $("help1").innerHTML += "<br>"+v+" : "+help[v];
					//else $("help1").innerHTML += "<br>"+v+" : Fkt";
				}
				$("help1").innerHTML += "<br>"
				var help = Global.availableRooms[help["roomid"]];
				for(var v in help){
					if(typeof(help[v])!="function") $("help1").innerHTML += "<br>"+v+" : "+help[v];
				}

			}
		},false);

		help = Global.availableRooms[1];
		help = Global.availableDiseases[0][6];
		help = Global.availableMedics[0]["med6"];
		help = Global.availableMedics[0];
		//Log(help);
	}
	
	//Mediregal durchblaetterfunktion
	$("racknavigation_right").removeAttribute("onclick");
	$("racknavigation_left").removeAttribute("onclick");
	
	$("racknavigation_left").addEventListener("click",  
										function()
										{
											var prev = unsafeWindow.Rack._curPage - 1;
											var max = Math.ceil( unsafeWindow.Rack._elements[unsafeWindow.Rack._actualMedType].size() / unsafeWindow.Rack._elementsPerPage );
											
											if( unsafeWindow.Rack._curPage == 1 )
												unsafeWindow.Rack.showPage( max );
											else
												unsafeWindow.Rack.showPage( prev );
										}, false );
	
	
	$("racknavigation_right").addEventListener("click", 
										function( )
										{
											var next = unsafeWindow.Rack._curPage + 1;
											var max = Math.ceil( unsafeWindow.Rack._elements[unsafeWindow.Rack._actualMedType].size() / unsafeWindow.Rack._elementsPerPage );
											
											if( next > max )
												unsafeWindow.Rack.showPage( 1 );
											else
												unsafeWindow.Rack.showPage( next );

										}, true );
										
	var newdiv, newdiv1, newbutton;
	// Werbung
	if (werbecontainer) {
		werbecontainer.style.display = "";
		maincontainer.style.marginTop = "5px";
	}
	if ($("getcoinsnow")) { $("getcoinsnow").style.display = "none"; }
	if ($("nicelink")) { $("nicelink").style.display = "none"; }
	newdiv = document.getElementsByTagName("div");
	for(var v=0;v<newdiv.length;v++) if(newdiv[v].hasAttribute("onclick")&&newdiv[v].getAttribute("onclick").search("facebook")!=-1) newdiv[v].style.display = "none";

	// MiniIcons
	newdiv = createElement("div",{id:"berater_miniicons ",style:"color:white;height:50px;position:absolute;width:13px;z-index:10;top:186px;left:5px;"},maincontainer);
	newdiv1 = createElement("div",{class:"miniicon hoverblue cursorclickable",style:"border:0;"},newdiv,"P");
	newdiv1.addEventListener("click",function(){buildInfoPanel("patients");},false);
	createElement("div",{style:"height:10px;"},newdiv);

	/*
	var floors = 2;
	for(var v=floors;v>0;v--){
		newdiv1 = createElement("div",{id:"miniiconSelectFloor"+v,class:"miniicon hoverblue cursorclickable"},newdiv,v);
		newdiv1.addEventListener("click",function(){unsafeWindow.Map.jumpTo("floor"+this.id.replace("miniiconSelectFloor",""));miniiconSelectFloor();},false);
	}
	function miniiconSelectFloor(){
		for(var v=1;v<=floors;v++) $("miniiconSelectFloor"+v).style.backgroundColor = (v==parseInt(Global.selectedFloor,10)?"blue":"");
	}
	miniiconSelectFloor();
	*/
			
	// Button-Leiste
	newdiv = createElement("div",{style:"position:absolute;top:784px;display:inline;"},maincontainer);
	newbutton = createElement("button",{type:"button",class:"cursorclickable",style:"margin-left:3px;"},newdiv,texte["set_ScriptHomepage"]);
	newbutton.addEventListener("click",function(){window.open(scriptUrl)},false);
	newbutton.addEventListener("mouseover",function(){this.style.backgroundColor="#cc9"},false);
	newbutton.addEventListener("mouseout",function(){this.style.backgroundColor=""},false);
	newbutton = createElement("button",{id:"berateroptionen",type:"button",class:"cursorclickable",style:"margin-left:3px;"},newdiv,texte["optionen"]);
	newbutton.addEventListener("click",function(){buildInfoPanel("options");},false);
	newbutton.addEventListener("mouseover",function(){this.style.backgroundColor="#cc9"},false);
	newbutton.addEventListener("mouseout",function(){this.style.backgroundColor=""},false);

	// InfoPanel
	createElement("div",{id:"infoPanel",name:"",style:"position:absolute;top:184px;left:252px;width:600px;height:500px;background-image:url('http://pics.kapihospital.de/bg_referral_01.jpg');z-index:101;display:none;"},all);

        // Quicklinks
        var arrQuicklinks = [
            [],
            ["Apotheke Pillenexpress", "shop1", 1, 1],
            [Ae + "rztevereinigung und Wettbewerb", "guildhouse", 3, 1],
            ["Rathaus", "townhall", 3, 1],
            ["Medizinischer Gro" + sz + "handel", "shop2", 1, 1],
            ["Zeitungsredaktion", "editoraloffice", 3, 1],
            ["Autoh" + ae + "ndler", "ambulancestore", 3, 2],
            ["Forschungszentrum", "rcenter", 3, 2],
            [],
            ["Internetcafe", "shop3", 1, 2],
            ["Architekturb" + ue + "ro", "architect", 3, 2],
            ["Tante-Emma-Laden", "shop4", 1, 2],
            ["Bushaltestelle", "busstop", 3, 1],
            ["Speakers Corner", "speakers", 3, 1],
            ["Garage", "garage", 2, 1],
            ["Bank", "bank", 3, 1],
            ["Patientenb" + oe + "rse", "exchange", 2, 1],
            ["Fr" + ae + "ulein Rosenwasser", "goodgirl", 3, 1],
            ["Dr. Knievel", "badboy", 3, 2]
        ];

        newdiv = createElement("div", {id: "quicklinks"}, all);

        var day = (new Date()).getDay();
        var city2Allowed = (Global.ISPREMIUM || (day == 3) || (day == 6));

        for (var mode = 1; mode < 4; mode++) {
            for (var v = 1; v < arrQuicklinks.length; v++)
                if (arrQuicklinks[v][2] == mode) {
                    var newdiv1 = createElement("div", {id: v, class: "hoverlightblue", title: arrQuicklinks[v][0]}, newdiv);
                    createElement("div", {class: "cursorclickable c1_a_50 c1_" + v + "_50", title: arrQuicklinks[v][0]}, newdiv1);


                    if ((arrQuicklinks[v][3] == 1) || city2Allowed) {
                        newdiv1.addEventListener("click", function () {
                            unsafeWindow.show_page(arrQuicklinks[this.id][1]);
                        }, false);
                    }
                    else {
                        newdiv1.style.opacity = "0.3";
                    }

                }
            createElement("div", {style: "clear:both;"}, newdiv);
            createElement("div", {style: "height:20px;width:100px;"}, newdiv);
        }

        var breaker = createElement("div", {style: "height:20px;width:100px;"}, newdiv);
        createElement("hr", {style: "height:2px;color:blue; background: blue; width:100%;"}, breaker);

        // Neue Autobuttons
        var arrQuicklinks2 = [
            [texte["autoBuy"]],
            [texte["autoNurse"]],
            [texte["autoClean"]],
            [texte["autoDisposeMedi"], 3]
        ];


        for (var v = 0; v < arrQuicklinks2.length; v++) {
            var newdiv1 = createElement("div", {id: "auto" + v, class: "hoverlightblue", title: arrQuicklinks2[v][0]}, newdiv);

            if (v == 0) {
                // Medi Buy Button
                createElement("div", {class: "cursorclickable c1_a_50 c1_" + 15 + "_50", title: arrQuicklinks2[v][0]}, newdiv1);
                newdiv1.addEventListener("click", function () {
                    var medstoBuy = Array();
                    var price_overall = 0.00;
                    //var buytext ="";

                    var dialogdiv = createElement("div", {"id": "buyquest", "style": "text-align:center; background-color:white; padding: 4px; height:500px; position:absolute; left:50%; top:50%; margin-left:-200px; margin-top:-200px; widht:400px; z-index:999;font-size:normal;"}, all);
                    var dialogdiv2 = createElement("div", {"id": "buyquest2", "style": "overflow:auto; width:400px; height:475px;"}, dialogdiv);
                    var dialogdiv3 = createElement("div", {"id": "buyquest3", "style": "height:25px;text-align:center;"}, dialogdiv);

                    createElement("h2", {}, dialogdiv2, "Medis kaufen");

                    var newtab = createElement("table", {border: "1px", cellspacing: "0px", cellpadding: "0px", style: "text-align:left;width:100%;"}, dialogdiv2);
                    tabrow = createElement("tr", "", newtab);
                    createElement("td", {style: "text-align:center;"}, tabrow, "kaufen");
                    createElement("td", {style: "text-align:center;"}, tabrow, "Bezeichnung");
                    createElement("td", {style: "text-align:center;"}, tabrow, "Preis");

                    for (var i = 0; i < unsafeWindow.Rack.elements.length; i++) {
                        for (var k in Global.availableMedics._object) {
                            if (Global.availableMedics._object[k]["id"] == unsafeWindow.Rack.elements[i]["product"]) {
                                if (Global.availableMedics._object[k]["shop"] != 0) {
                                    if (Global.availableMedics._object[k]["shop"] < 3 || city2Allowed) {
                                        //console.log(Global.availableMedics._object[k]);
                                        if (( diff = valMaxRackLimit - parseInt(unsafeWindow.Rack.elements[i]["amount"], 10) ) > 0) {
                                            medprice = number_format((Global.availableMedics._object[k]["price"] * diff), 2, ',', '.');
                                            //console.log("medprice >"+ medprice + "<" );

                                            price_overall += parseFloat((Global.availableMedics._object[k]["price"] * diff), 2);
                                            console.log("price_overall >" + price_overall + "<");

                                            //medstoBuy.push( { "itemid":Global.availableMedics._object[k]["id"], "amount":diff } );
                                            //buytext += diff + " x " +Global.availableMedics._object[k]["name"] + ": " + medprice + Global._KH_CURRENCY + "\n";

                                            tabrow = createElement("tr", "", newtab);
                                            tabcell = createElement("td", {style: "text-align:center;"}, tabrow);

                                            newinput = createElement("input", {"id": Global.availableMedics._object[k]["id"] + "#" + diff, "type": "checkbox", "checked": "checked", "title": Global.availableMedics._object[k]["name"], "style": "margin-right:0px;margin-left:1px;"}, tabcell);
                                            newinput.addEventListener("click", function () {

												if( this.checked ) {
													if( $("am_"+this.id.split('#')[0]) ) {
														$("am_"+this.id.split('#')[0]).removeAttribute("readonly")
													}
													
												}
												else
												{
													if( $("am_"+this.id.split('#')[0]) ) {
														$("am_"+this.id.split('#')[0]).setAttribute("readonly", "readonly")
													}
												}
												
												calc_overall();

												return;
										},false);
										
										buymed.check = newinput;
										
										newinput = createElement("input", {"id":"am_"+Global.availableMedics[0][k]["id"], "type":"text", "maxlength":"3", "size":"3", "value":diff, "title":"Menge", "style":"width:25px;margin-left:5px;"}, tabcell );
										newinput.addEventListener("keyup",function(){
											this.value=keepDigits(this.value);

											if( ! isNaN(this.value) )
												calc_overall();
											
										},false);
										
										buymed.diff_inp = newinput;										

										tabcell = createElement("td", "", tabrow, Global.availableMedics[0][k]["name"] );
										tabcell = createElement("td",{"id":"prc"+Global.availableMedics[0][k]["id"], style:"text-align:right;"},tabrow, medprice + " " + Global._KH_CURRENCY );
										
										medstoBuy.push(buymed);
										break;
									}
								}
							}
						}
					}
				}
				
				
				tabrow = createElement("tr","",newtab);
				createElement("td",{},tabrow, "Gesamtsumme");
				createElement("td",{id:"prover", colspan:"2", style:"text-align:right;font-color:red;font-weigth:bold;"}, tabrow, hT_format(price_overall));
			
				
				newbutton=createElement("button", {type:"button",class:"cursorclickable", id:"buyok", style:"width:100px;height:20px;margin:3px;"}, dialogdiv3, texte["buy"] );
				newbutton.addEventListener("click",function(){
					
					//sorting by shop
					medstoBuy.sort(function(a, b){
					 return a.product.shop-b.product.shop
					})
					
					lastshop=-1;
					buyme = Array();
					
					for( idx in medstoBuy ) {
						
						if( medstoBuy[idx].check.checked ) {
							
							if( lastshop > -1 && lastshop != medstoBuy[idx].product.shop ) {
								//shop has changed, so make request
								var payload = JSON.stringify(medstoBuy);
						
								params={};
								params.shop=lastshop;
								params.products=JSON.stringify(buyme);
								
								console.log(params);
								unsafeWindow.Cart._sendRequest( "city.shop", "get", params, true);
								all.removeChild(dialogdiv);
								
								new Ajax.Request("service.setinfobox.php",{method:"get",parameters:{ infomsg:$("dlg_msgtype").value }})
								all.removeChild($("dlg_message"));
								all.removeChild($("dlg_background"));
								
								
								
								buyme = Array();
							}
							
							buyme.push( { "id":medstoBuy[idx].check.id.split('#')[0], "amount":$('am_'+medstoBuy[idx].check.id.split('#')[0]).value } );
							lastshop = medstoBuy[idx].product.shop;
						}
					}
					
					// send also the last shop
					if( medstoBuy.length > 0 ) {
						params={};
						params.shop=lastshop;
						params.products=JSON.stringify(buyme);
						
						
						unsafeWindow.Cart._sendRequest( "city.shop", "get", params, true);
						all.removeChild(dialogdiv);
						
						
						/*var answ = GM_xmlhttpRequest({
						  method: "GET",
						  url: "service.setinfobox.php?infomsg="+$("dlg_msgtype").value
						 // synchronous: true,
						});
						
						console.log(answ);*/

						
						
						/*all.removeChild($("dlg_message"));
						all.removeChild($("dlg_background"));*/
					}
				},false);
				
				newbutton=createElement("button", {type:"button",class:"cursorclickable", id:"buycancel", style:"width:100px;height:20px;margin:3px;"}, dialogdiv3, texte["cancel"] );
				newbutton.addEventListener("click",function(){
						all.removeChild(dialogdiv);
						dialogdiv = null;
						return;
				},false);
			},false);
		}
		
		if( v == 1 )
		{
			var actpat;
			
			// Autoschwester Button
			createElement("div",{class:"cursorclickable c1_a_50 c1_"+2+"_50",title:arrQuicklinks2[v][0]},newdiv1);
			newdiv1.addEventListener("click", function()
			{				
				rooms = Global.refRooms.values();
						
				for( var v=0; v<rooms.length; v++ )
				{
					if ( rooms[v].roomid == 6 || rooms[v].roomid == 60 )
					{
						console.log( "Prüfe Raum: "+ rooms[v].topleft );
															
						//Wenn ein Patient drin liegt
						if( rooms[v].patient != 0 )
						{
							console.log("Bett hat Patient: " + rooms[v].patient);
							refreshPatient( rooms[v].patient, true );
						}
						
					}
				}
			
			},false);
		}
		
		//Dreckige Räume säubern
		if( v == 2 )
		{
			createElement("div",{class:"cursorclickable c1_a_50 c1_"+8+"_50",title:arrQuicklinks2[v][0]},newdiv1);
			newdiv1.addEventListener("click", cleaningfunc, false );
		}
		
		//Medis verteilen
		if( v == 3 )
		{
			createElement("div",{class:"cursorclickable c1_a_50 c1_"+1+"_50",title:arrQuicklinks2[v][0]},newdiv1);
			newdiv1.addEventListener("click", medifunc, false );
		}
	}
			
	createElement("div",{style:"clear:both;"},newdiv);
	createElement("div",{style:"height:20px;width:100px;"},newdiv);
	
	
	
	// Hotkeys
	if (GM_getValue(lng+"_"+server+"_"+username+"_valHotkey",true)){
		window.addEventListener("keydown",function(event){
			if (event.altKey){
			switch (event.keyCode) {
				case 49: if($("floor_jump_1")){ closeInfoPanel();click($("floor_jump_1")); } event.preventDefault(); break; // Ebene 1
				case 50: if($("floor_jump_2")){ closeInfoPanel();click($("floor_jump_2")); } event.preventDefault(); break; // Ebene 2
				case 51: if($("floor_jump_3")){ closeInfoPanel();click($("floor_jump_3")); } event.preventDefault(); break; // Ebene 3
				case 52: if($("floor_jump_4")){ closeInfoPanel();click($("floor_jump_4")); } event.preventDefault(); break; // Ebene 3
				case 66: unsafeWindow.show_page("exchange"); event.preventDefault(); break; // B:Boerse
				case 71: unsafeWindow.show_page("garage"); event.preventDefault(); break; // G:Garage
				case 80: buildInfoPanel("patients"); event.preventDefault(); break; // P:Patients
			}
			}
		},false);
	}

	/* adding minigolf rooms */
	click($("floor_jump_90"));
	click($("floor_jump_1"));


	window.setInterval(function()
	{
		now = Math.floor((new Date()).getTime()/1000);
		rooms = Global.refRooms.values();
		patients = Global.refPatients.values();
		
		var currPatientId = 0;
		var currRoom = null;
		
		if(!roomTimes[Global.selectedFloor]){ roomTimes[Global.selectedFloor] = new Object; }
		var calcGlobalTime = false;
		roomTimes["allrooms"][Global.selectedFloor] = 0;
		
		// Rooms
		var cand = document.getElementsByClassName("room");
		
		/* room states ...so far
		0: 
		1: 
		2: ready
		3: treatment
		4: 
		5:
		6: cleaning
		7: dirty
		
		*/
		if(Global.nonEmptyFields[0])
		{
			for(var v=0;v<cand.length;v++)
			{
				if( (currRoom = Global.refRooms.get(cand[v].id) ) )
				{ 
					if(currRoom["roomid"]==6 || currRoom["roomid"]==60)
					{ 
						// Bed
						if(currPatientId = parseInt(currRoom["patient"],10))
						{
							if( patientDiseases[currPatientId] )
							{
								if(!$("p"+currPatientId))
								{
									patientDiseases[currPatientId]["state"] = 2; 
									patientDiseases[currPatientId]["floor"] = currRoom["roomid"]==60 ? 90 : 1;
									patientDiseases[currPatientId]["room"] = currRoom["roomid"];
								}
							}
							else 
							{ 
								initPatient(currPatientId); 
							}
							
							if( $( "treatmentr"+currRoom["topleft"] ) || $( "barmaidr"+currRoom["topleft"] ) )
							{
								if( (!roomTimes[Global.selectedFloor][currRoom["topleft"]])||(currRoom["ends"]!=roomTimes[Global.selectedFloor][currRoom["topleft"]][0])){
									roomTimes[Global.selectedFloor][currRoom["topleft"]] = [currRoom["ends"],now+currRoom["ends"],3];
								}
								
								if(!$("timeinfo_"+currRoom["topleft"])){ 
									createElement("div",{id:"timeinfo_"+currRoom["topleft"],style:"position:absolute;top:0px;left:1px;background-color:white;"}, $("r"+ currRoom["topleft"] ) ); 
								}
								
								$("timeinfo_"+currRoom["topleft"]).innerHTML = time2str( roomTimes[Global.selectedFloor][currRoom["topleft"]][1]-now, 2);
							}
							else
							{
								if( $("timeinfo_"+currRoom["topleft"]) ) { removeElement($("timeinfo_"+currRoom.topleft));  }
							}
						}
					} 
					else if( (Global.availableRooms[currRoom["roomid"]] ) && (Global.availableRooms[currRoom["roomid"]]["diseases"].length>0))
					{ // Behandlungsraum
						roomTimes["allrooms"][Global.selectedFloor]++;
						
						if( currRoom["state"]==3 || currRoom["state"]==6 ) {
							
							if( (!roomTimes[Global.selectedFloor][currRoom["topleft"]])||(currRoom["ends"]!=roomTimes[Global.selectedFloor][currRoom["topleft"]][0])){
								roomTimes[Global.selectedFloor][currRoom["topleft"]] = [currRoom["ends"],now+currRoom["ends"],3];
								
								if( currRoom["state"]==3 )
									calcGlobalTime = true;
							}
							
							if(!$("timeinfo_"+currRoom["topleft"])){ 
								createElement("div",{id:"timeinfo_"+currRoom["topleft"],style:"position:absolute;bottom:23px;left:13px;font-weight:bold;background-color:white;"},$("r"+ currRoom["topleft"] )); 
							}
							$("timeinfo_"+currRoom["topleft"]).innerHTML = time2str(roomTimes[Global.selectedFloor][currRoom["topleft"]][1]-now);	
							
							// treatment?
							if($("gradient_r"+currRoom["topleft"])){
								if( currRoom["state"]==3 ) {
									if(currPatientId = parseInt(currRoom["patient"],10)){
										if(patientDiseases[currPatientId]){
											patientDiseases[currPatientId]["state"] = 4; 
											patientDiseases[currPatientId]["floor"] = Global.selectedFloor;
											patientDiseases[currPatientId]["room"] = currRoom["roomid"];
										} else { initPatient(currPatientId); }
									} 
								
									// Medis
									if($("alert"+currRoom.topleft)){
										var currDisease = null;
										if(currDisease = calcCurrDisease(currRoom["patient"])){
											if(!$("mediinfo_"+currRoom.topleft)){ createElement("div",{id:"mediinfo_"+currRoom.topleft,style:"position:absolute;top:5px;left:5px;font-weight:bold;background-color:white;-moz-border-radius:5px;"},$("r"+currRoom.topleft)); }
											$("mediinfo_"+currRoom.topleft).setAttribute("class","m_a_30 m_"+medi[currDisease]["id"]+"_30");
										}
									} else {
										if($("mediinfo_"+currRoom.topleft)){ removeElement($("mediinfo_"+currRoom.topleft)); }
									}
								}
								
							} else {
								if( currRoom["state"] == 3 ) {
									if($("timeinfo_"+currRoom.topleft)){ removeElement($("timeinfo_"+currRoom.topleft)); }
									if($("mediinfo_"+currRoom.topleft)){ removeElement($("mediinfo_"+currRoom.topleft)); }
								}
							}
						} else {
							
							if((!roomTimes[Global.selectedFloor][currRoom["topleft"]])||(currRoom["state"]!=roomTimes[Global.selectedFloor][currRoom["topleft"]][2])){ calcGlobalTime = true; }
							roomTimes[Global.selectedFloor][currRoom["topleft"]] = [0,0,currRoom["state"]];
							if($("timeinfo_"+currRoom.topleft)){ removeElement($("timeinfo_"+currRoom.topleft)); }
							if($("mediinfo_"+currRoom.topleft)){ removeElement($("mediinfo_"+currRoom.topleft)); }
						}
					}
				}
			}
		}

		if( roomTimes["global"][0] <= now )
			calcGlobalTime = true;
		
		if(calcGlobalTime){
			Log("calcGlobalTime");
			roomTimes["global"][0] = nie;
			//roomTimes["allrooms"][0] = 0;
			roomTimes["emptyrooms"][0] = 0;
			roomTimes["global"][Global.selectedFloor] = nie;
			for(var floor=1;floor<roomTimes["global"].length;floor++){
				roomTimes["global"][floor] = nie;
				roomTimes["emptyrooms"][floor] = 0;
				for(var help in roomTimes[floor]){ 
					if(roomTimes[floor][help][1]<=now){ roomTimes["emptyrooms"][floor]++; }
					else { roomTimes["global"][floor] = Math.min(roomTimes["global"][floor],roomTimes[floor][help][1]); }
				}
				roomTimes["global"][0] = Math.min(roomTimes["global"][0],roomTimes["global"][floor]); 
				//roomTimes["allrooms"][0] += roomTimes["allrooms"][floor];
				roomTimes["emptyrooms"][0] += roomTimes["emptyrooms"][floor];
			}
		}
		if(valGlobalClockInTitle){
			document.title = (roomTimes["global"][0]<nie?time2str(roomTimes["global"][0]-now):texte["fertig"].toUpperCase())+" - "+roomTimes["emptyrooms"][0]+" - "+documentTitle;
		} else {
			if(!$("globalclock")){ createElement("div",{id:"globalclock",title:"global time",style:"position:absolute;top:0px;left:0px;font-weight:bold;background-color:white;"},all); }
			$("globalclock").innerHTML = (roomTimes["global"][0]<nie?time2str(roomTimes["global"][0]-now):texte["fertig"].toUpperCase())+" - "+roomTimes["emptyrooms"][0];
		}
		if(!$("floorclock")){ createElement("div",{id:"floorclock",title:"floor time",style:"position:absolute;top:5px;left:20px;font-weight:bold;background-color:white;"},$("hospital_content")); }
		$("floorclock").innerHTML = ((roomTimes["allrooms"][Global.selectedFloor]>0)?(roomTimes["global"][Global.selectedFloor]<nie?time2str(roomTimes["global"][Global.selectedFloor]-now):texte["fertig"].toUpperCase()):"---")+" - "+roomTimes["emptyrooms"][Global.selectedFloor];
		
		// Patients Divs
		var canddiv = $("hospital_content").getElementsByClassName("patient");
		
		for(var pat=0;pat<canddiv.length;pat++){
			currPatientId = parseInt(canddiv[pat].id.replace("p",""),10);
			if( patientDiseases[currPatientId] )
			{
				patientDiseases[currPatientId]["floor"] = Global.refPatients.get("p"+currPatientId)["floor"];
				var classStr = canddiv[pat].getAttribute("class").replace(" allcured","").replace(" unhealable","").replace(" needminitreatment","");
				
				//dont remove, its flickring to much
				if( $("mcont_"+currPatientId) ) {
					//removeElement( $("mcont_"+currPatientId) );
				}
				
				// 0=waitingroom,1=bed,2=nurse/barkeeper,3=in room,4=treatment/bar,5=cured
				if( patientDiseases[currPatientId]["state"] !=5 )
				{
					if(patientDiseases[currPatientId]["state"] == 2 )
					{
						patientDiseases[currPatientId]["m_done"]++;
						calcEndTreatment(currPatientId);
					} 
					else if(patientDiseases[currPatientId]["state"]==4)
					{
						calcEndTreatment(currPatientId);
					}
					
					
					patientDiseases[currPatientId]["room"] = Global.refRooms.get(Global.refPatients.get("p"+currPatientId)["room"])["roomid"];
					
					if( patientDiseases[currPatientId]["room"] == 6 || patientDiseases[currPatientId]["room"] == 60 )
					{ 
						patientDiseases[currPatientId]["state"] = 1;						
						
						//in bed
						if( ! $("mcont_"+currPatientId) ) {
							createElement("div",{id:"mcont_"+currPatientId, style:"float:right;background-color:white;margin-right:2px;"}, canddiv[pat] );
						
							for( var m=0; m < patientDiseases[currPatientId]["m_done"]; m++ ) {
								createElement("div",{style:"width: 7px; height: 7px; margin: 1px;background-color:green;"}, $("mcont_"+currPatientId) );
							}
							
							for( ; m < 4; m++ ) {
								createElement("div",{style:"width: 7px; height: 7px; margin: 1px;background-color:red;"}, $("mcont_"+currPatientId) );
							}
						}
					}
					else 
					{ 
						patientDiseases[currPatientId]["state"] = 3;
					}
					
					//ist zu testen
					calcEndTreatment(currPatientId);
				}				
				
				if( patientDiseases[currPatientId]["state"]!=5 )
				{
					if(patientDiseases[currPatientId]["m_done"] < 4 ) 
					{ 
						classStr += " needminitreatment"+(patientDiseases[currPatientId]["unhealable"]?" unhealable":""); 
					}
					else if(patientDiseases[currPatientId]["unhealable"])
					{ 
						classStr += " unhealable"; 
					}
				}
				else
				{
					classStr += " allcured";
				}
				
				
				canddiv[pat].setAttribute("class",classStr);
			} 
			else 
			{ 
				initPatient(currPatientId); 
			}
		}

		// waiting patients
		canddiv = $("waitingroom").getElementsByClassName("waitingpatient");
		for(var pat=0;pat<canddiv.length;pat++){
			canddiv[pat].style.opacity = ((Global.refPatients.get(canddiv[pat].id).referred!=0)?"0.4":"1"); //verkaufte
			var currPatientId = parseInt(canddiv[pat].id.replace("p",""),10);
			if(patientDiseases[currPatientId]){
				patientDiseases[currPatientId]["floor"] = 0;
				patientDiseases[currPatientId]["room"] = 0;
				if(patientDiseases[currPatientId]["unhealable"]){ canddiv[pat].setAttribute("class",canddiv[pat].getAttribute("class").replace(" unhealable","")+" unhealable"); }
				if(patientDiseases[currPatientId]["state"]>0){ patientDiseases[currPatientId]["state"]=0; }
			} else { initPatient(currPatientId); }
		}
		canddiv=null;

		// waiting doctors
		canddiv = $("golfwaitingroom").getElementsByClassName("waitingdoctor");
		for(var pat=0;pat<canddiv.length;pat++){
			canddiv[pat].style.opacity = ((Global.refPatients.get(canddiv[pat].id).referred!=0)?"0.4":"1"); //verkaufte
			var currPatientId = parseInt(canddiv[pat].id.replace("p",""),10);
			if(patientDiseases[currPatientId])
			{
				patientDiseases[currPatientId]["floor"] = 0;
				patientDiseases[currPatientId]["room"] = 0;
				if(patientDiseases[currPatientId]["unhealable"]){ canddiv[pat].setAttribute("class",canddiv[pat].getAttribute("class").replace(" unhealable","")+" unhealable"); }
				if(patientDiseases[currPatientId]["state"]>0){ patientDiseases[currPatientId]["state"]=0; }
			}
			else { initPatient(currPatientId); }
		}
		canddiv=null;

		
		
		// QuestClock
		if(!$("questclock")){ createElement("div",{id:"questclock",title:"quest time",style:"position:absolute;bottom:0px;right:0px;font-weight:bold;background-color:white;"},$("waitingroom")); }
		
		$("questclock").innerHTML = ( (questTime > now) ? time2str(questTime-now) : texte["fertig"].toUpperCase() );
		
	}, 1000);
	
	window.setInterval(function()
	{
		var now = Math.floor((new Date()).getTime()/1000);
		
		if( valStartQuestAutomatic ) {
			if( !(questTime > now) && questcnt < 8 )
				start_Quest();
		}
	}, 3000 );
	

	window.setInterval(function(){ // leaving patient
		var cand = $("goingpatient").getElementsByClassName("patient");
		for(var v=0;v<cand.length;v++){
			var currPatientId = parseInt(cand[v].id.replace("p",""),10)
			if(patientDiseases[currPatientId]){ delete patientDiseases[currPatientId]; }
		}
		//<div style="position: absolute; left: 46px; width: 25px; height: 36px; top: 31px; 
		//background-image: url(&quot;http://pics.kapihospital.de/patient3_walksaway.gif&quot;); z-index: 1000;" 
		//class="patient cursordrag allcured" id="p9233468"></div>
	},500);
	
	window.setInterval(function(){
		var cand = $("rackItems").getElementsByClassName("medamount");
		for(var v in cand){
			if (cand[v].nodeType === 1)
			{
				var help = cand[v].getAttribute("class");
			
				if( parseInt(cand[v].innerHTML, 10) < valRackLimit )
				{
					if( help.search(" racklow")==-1)
						cand[v].setAttribute("class",help+" racklow"); 
				} 
				else 
				{
					if(help.search(" racklow")!=-1)
						cand[v].setAttribute("class",help.replace(" racklow",""));
				}
			}
		}
		for(var pat in patientDiseases){
			if((patientDiseases[pat]["state"]==0)&&(!$("p"+pat))){ // waiting+gone
				delete patientDiseases[pat];
			}
		}
		GM_setValue(lng+"_"+server+"_"+username+"_patientDiseases",implode(patientDiseases));
		cand=null;
	},5000);
	
	// Patient-MouseOver Diseases
	var beraterDiseaseBubble = createElement("div",{id:"beraterDiseaseBubble",style:"z-index:2000;position:absolute;top:0px;left:0px;background-color:#CCC;-moz-border-radius:10px;border:2px solid black;padding:3px;margin-left:40px;"},all);
	hiddenPatientDiv = createElement("div",{id:"hiddenPatientDiv",style:"display:;"},all);
	
	$("garten_komplett").addEventListener("mouseover",function(event){
		Log("MOUSEOVER "+event.target.id);
		var patientId=0;
		if(!isNaN(event.target.id.replace("r",""))){
			var currRoom = Global.refRooms.get(event.target.id);
			highlightPatients(currRoom.roomid);
			patientId = currRoom.patient;
		}
		else if(!isNaN(event.target.id.replace("p",""))){
			patientId = event.target.id.replace("p","");
		}
		beraterDiseaseBubble.innerHTML = "";
		if(patientId!=0){
			beraterDiseaseBubble.style.display="block";
			beraterDiseaseBubble.setAttribute("name",patientId);
			plotPatient(beraterDiseaseBubble);
			//getPatientData(patientId);
			
			if( Global.ISPREMIUM )
			{
				var patdetail = $("treatico");
				if( patdetail.childNodes.length > 0 )
				{
					patientDiseases[patientId]["m_done"]=4; 
				}
			}
		}
	},false);
	
	$("garten_komplett").addEventListener("mousemove",function(event){
		beraterDiseaseBubble.style.left = event.pageX+"px";
		beraterDiseaseBubble.style.top = event.pageY+"px";
	},false);
	
	$("garten_komplett").addEventListener("mouseout",function(event){
		beraterDiseaseBubble.style.display="none";
		unhighlightPatients();
	},false);

	// Frame Observer
	newswindowObserver = window.setInterval(function(){
		if(($("newswindow").style.display!="none")&&(!$("newswindowObserver"))){
			createElement("h1",{id:"newswindowObserver"},$("newswindow"));
			if($("msgwindow")){
				var help = $("msgwindow").getAttribute("style");
				if(help.search("medicalrecord_1.png")!=-1){ do_Patientenblatt(); }
				else if(help.search("bg_exchange2.jpg")!=-1){ do_Patientenboerse(); }
				else if(help.search("bg_notes.png")!=-1){ do_Notepad(); }
				else if(help.search("bg_questfinished")!=-1){ do_Quest(); }
				else if(help.search("bg_garage")!=-1){ do_Quest(); }
				else if(help.search("quest_bg")!=-1){ do_Quest(); }
				else if(help.search("bg_shop")!=-1){ do_Shop(); }
				else if(help.search("bg_mail")!=-1){ do_Mail(); }
			}
		}
	},200);

	// Rack
	$("rackItems").addEventListener("dblclick",function(event){
		var shop = Global.availableMedics[0]["med"+event.target.getAttribute("medid")]["shop"];
		if((shop<3)||city2Allowed){
			unsafeWindow.show_page("shop"+shop);
		} else {
			alert(texte["shopHeuteNichtErreichbar"]);
		}
	},false);

	newdiv=null;newdiv1=null;newbutton=null;
}

/*************************** end do_main() ******************************************/


/*************************** definition helper functions ****************************/
function loadLanguage(lang) {
	switch (lang) {
		case "de":
					texte["berater"] = "Berater";
					texte["autologin1"] = "Ermittle aktive Sessions. Bitte 5 Sekunden warten<br>...";
					texte["autologin2"] = "Alle Accounts eingeloggt.";
					texte["optionen"] = "Optionen";
					texte["fertig"] = "Fertig";
					texte["shopHeuteNichtErreichbar"] = "Shop heute nicht erreichbar";
					texte["noch"] = "noch";
					// options panel
					texte["set_ScriptHomepage"] = "Scripthomepage";
					texte["set_AutoLogin"] = "Automatisch einloggen";
					texte["set_Update"] = "Update";
					texte["set_RackLow"] = "Minimaler Lagerbestand";
					texte["set_RackMax"] = "Maximaler Lagerbestand";
					texte["set_valGlobalClockInTitle"] = "Globale Zeit im Titel";
					texte["set_valStartQuestAutomatic"] = "Quests automatisch";
					texte["info_AutoLogin"] = "Sobald Nutzerdaten und Passwort eingegeben sind, werden die Accounts wieder eingeloggt. Es m"+ue+"ssen Popups erlaubt werden bei mehreren Accounts.";
					texte["info_Update"] = "Es wird gepr"+ue+"ft, ob eine neuere Version dieses Scriptes verf"+ue+"gbar ist.";
					texte["info_RackLow"] = "Ein Medikament wird markiert, falls der Lagerbestand unter diese Grenze f"+ae+"llt.";
					texte["info_RackMax"] = "Es werden beim automatischen Einkauf die Medikamente bis zu diesem Lagerbestand afgef"+ue+"llt.";
					texte["info_valGlobalClockInTitle"] = "Die globale Zeit wird im Fenstertitel angezeigt. Ansonsten im Fenster.";
					texte["info_valStartQuestAutomatic"] = "Soll sofort die nächste Quest gestartet werden, wenn eine beended wurde ( max. 8 )?";
					texte["confirmUpdate"] = "Es liegt eine neue Script-Version vor. Diese installieren?";
					texte["zeigePasswoerter"] = "zeige Passw"+oe+"rter";
					texte["autoLogin"] = "Automatischer Login";
					texte["accountAktiv"] = "Account aktiv";
					texte["server"] = "Server";
					texte["ungueltigerServer"] = "Ungueltiger Server";
					texte["name"] = "Name";
					texte["passwort"] = "Passwort";
					texte["speichern"] = "speichern";
					texte["loeschen"] = "l"+oe+"schen";
					texte["buy"] = "kaufen";
					texte["cancel"] = "Abbrechen";
					texte["autoBuy"] = "automatische Lagerauff"+ue+"llung";
					texte["autoClean"] = "R"+ae+"ume s"+ae+"ubern";
					texte["autoNurse"] = "Krankenschwester rufen";
					texte["autoDisposeMedi"] = "Medikamente verteilen";
					// patients panel
					texte["zeigeGeheilteKrankheiten"] = "Zeige geheilte Krankheiten";
					texte["minipics"] = "Minipics";
					texte["Beschreibung"] = "unbehandelt/Gesamt";
					texte["Beschreibung2"] = "Hilfetext um dieses Fenster zu verstehen: Anzahl dieser Krankheit unbehandelt ohne gerade in Behandlung befindliche/Anzahl Gesamt";
					texte["frei"] = "Krankenbetten";
					texte["inBehandlung"] = "in Behandlung";
					texte["waitingroom"] = "Warteraum";
					texte["Gesamt"] = "Gesamt";
					// boerse
					texte["showUncurable"] = "Zeige Unheilbare";
					//Systemwords
					texte["waehrung"] = "hT"; //Global._KH_CURRENCY
					texte["coins"] = "Coins";
					break;

		case "uk": 
					texte["berater"] = "Adviser";
					texte["autologin1"] = "Checking active sessions.  Please wait 5 seconds<br>...";
					texte["autologin2"] = "All accounts logged in.";
					texte["optionen"] = "Options";
					texte["fertig"] = "Done";
					texte["shopHeuteNichtErreichbar"] = "The shop is not available";
					texte["noch"] = "Left";
					// options panel
					texte["set_ScriptHomepage"] = "Script Homepage";
					texte["set_AutoLogin"] = "Automatic login";
					texte["set_Update"] = "Update";
					texte["set_RackLow"] = "Minimal rackamount";
					texte["set_valGlobalClockInTitle"] = "Czas w tytule karty.";
					texte["info_AutoLogin"] = "Once username and password information is given, all accounts will be logged in";
					texte["info_Update"] = "Checks whether an updated version of this Advisor script is available.";
					texte["info_RackLow"] = "A product is marked if its amount in your rack is falling below this value.";
					texte["info_valGlobalClockInTitle"] = "Global clock in title";
					texte["info_valStartQuestAutomatic"] = "Should the next quest start automaticly, if the previous ends?";
					texte["info_RackMax"] = "By automatic buy, the product will be filled until this limit.";
					texte["confirmUpdate"] = "Jest nowa wersja skryptu Doradca Kapi Hospital. Czy chcesz ja zainstalowac?";
					texte["zeigePasswoerter"] = "Pokaz haslo";
					texte["autoLogin"] = "Automatic loging in";
					texte["accountAktiv"] = "Account is acrive";
					texte["server"] = "Server";
					texte["ungueltigerServer"] = "Wrong server";
					texte["name"] = "Name";
					texte["passwort"] = "Password";
					texte["speichern"] = "Save";
					texte["loeschen"] = "Erase";
					texte["buy"] = "buy";
					texte["cancel"] = "cancel";
					texte["autoBuy"] = "buy medics";
					texte["autoClean"] = "clean rooms";
					texte["autoNurse"] = "call nurse";
					texte["autoDisposeMedi"] = "dispose medics";
					// patients panel
					texte["zeigeGeheilteKrankheiten"] = "Show cured of the disease";
					texte["minipics"] = "Minipics";
					texte["Beschreibung"] = "untreated/overall";
					texte["Beschreibung2"] = "helptext to understand this window: Number of untreated diseases without those currently treated/overall number";
					texte["frei"] = "Hospital beds";
					texte["inBehandlung"] = "in a room";
					texte["waitingroom"] = "Waiting room";
					texte["Gesamt"] = "Overall";
					// boerse
					texte["showUncurable"] = "Show uncurable";
					//Systemwords
					texte["waehrung"] = "hT"; //Global._KH_CURRENCY
					texte["coins"] = "Coins";
					break;

		case "pl":
					texte["berater"] = "Doradca";
					texte["autologin1"] = "Sprawdzenie aktywnych sesji. Prosze odczekac 5 sekund<br>...";
					texte["autologin2"] = "Wszystkie konta zalogowane.";
					texte["optionen"] = "Opcje";
					texte["fertig"] = "Gotowe";
					texte["shopHeuteNichtErreichbar"] = "Sklep jest teraz niedostepny";
					texte["noch"] = "Pozostalo";
					// options panel
					texte["set_ScriptHomepage"] = "Strona domowa skryptu";
					texte["set_AutoLogin"] = "Automatyczne logowanie";
					texte["set_Update"] = "Aktualizacja";
					texte["set_RackLow"] = "Minimalna ilosc lekarstw w regale";
					texte["set_valGlobalClockInTitle"] = "Czas w tytule karty.";
					texte["info_AutoLogin"] = "Po wprowadzeniu nazwy uzytkownika i hasla nastepuje automatyczne logowanie. Pozwala to zachowac ciaglosc grania. Przy wielu kontach musi byc dozwolone wyskakiwanie okienek.";
					texte["info_Update"] = "Automatycznie sprawdza czy jest nowsza wersja tego skryptu.";
					texte["info_RackLow"] = "Produkt zostanie zaznaczony, gdy jego ilosc w regale spadnie ponizej tego poziomu";
					texte["info_valGlobalClockInTitle"] = "Czas globalny jest wyswietlany w pasku tytulowym okna.";
					texte["info_valStartQuestAutomatic"] = "Should the next quest starrt automaticly, if the previous ends?";
					texte["info_RackMax"] = "By automatic buy, the product will be filled until this limit.";
					texte["confirmUpdate"] = "Jest nowa wersja skryptu Doradca Kapi Hospital. Czy chcesz ja zainstalowac?";
					texte["zeigePasswoerter"] = "Pokaz haslo";
					texte["autoLogin"] = "Automatyczne logowanie";
					texte["accountAktiv"] = "Konto aktywne";
					texte["server"] = "Serwer";
					texte["ungueltigerServer"] = "Bledny serwer";
					texte["name"] = "Login";
					texte["passwort"] = "Haslo";
					texte["speichern"] = "Zapisz";
					texte["loeschen"] = "Usun";
					texte["buy"] = "buy";
					texte["cancel"] = "cancel";
					texte["autoBuy"] = "buy medics";
					texte["autoClean"] = "clean rooms";
					texte["autoNurse"] = "call nurse";
					texte["autoDisposeMedi"] = "dispose medics";
					// patients panel
					texte["zeigeGeheilteKrankheiten"] = "Pokaz wyleczone choroby";
					texte["minipics"] = "Minipics";
					texte["Beschreibung"] = "untreated/overall";
					texte["Beschreibung2"] = "helptext to understand this window: Number of untreated diseases without those currently treated/overall number";texte["frei"] = "Wolny";
					texte["inBehandlung"] = "Leczony";
					texte["waitingroom"] = "Poczekalnia";
					texte["Gesamt"] = "Overall";
					// boerse
					texte["showUncurable"] = "Pokaz nieuleczalnych";
					//Systemwords
					texte["waehrung"] = "hT"; //Global._KH_CURRENCY
					texte["coins"] = "Monety";
					break;
	}
}

function $(ID) {
	return document.getElementById(ID)
}

function removeElement(node){
	node.parentNode.removeChild(node)
}

function createElement(type, attributes, append, inner){
	var node = document.createElement(type);
	
	for (var attr in attributes) {
		if (attr=="checked") 
			node.checked=attributes[attr];
		else if (attributes.hasOwnProperty(attr)) 
			node.setAttribute(attr, attributes[attr]);
	}
	
	if (append) 
		append.appendChild(node);
		
	if (inner) 
		node.innerHTML = inner;
		
	return node;
}

function click(A) {
	var B = document.createEvent("MouseEvents");
	
	B.initEvent("click", true, true);
	A.dispatchEvent(B);
	
	if (A.href)
		document.location.href = A.href;
}

function mousedown(A) {
	var B = document.createEvent("MouseEvents");
	
	B.initEvent("mousedown", true, true);
	A.dispatchEvent(B);
}
function mousemove(A) {
	var B = document.createEvent("MouseEvents");
	
	B.initEvent("mousemove", true, true);
	A.dispatchEvent(B);
}

function number_format(number,decimals,dec_point,thousands_sep){
	// http://kevin.vanzonneveld.net
	// +   original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
	// +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
	// +     bugfix by: Michael White (http://getsprink.com)
	// +     bugfix by: Benjamin Lupton
	// +     bugfix by: Allan Jensen (http://www.winternet.no)
	// +    revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
	// +     bugfix by: Howard Yeend
	// +    revised by: Luke Smith (http://lucassmith.name)
	// +     bugfix by: Diogo Resende
	// +     bugfix by: Rival
	// %        note 1: For 1000.55 result with precision 1 in FF/Opera is 1,000.5, but in IE is 1,000.6
	// *     example 1: number_format(1234.56);
	// *     returns 1: '1,235'
	// *     example 2: number_format(1234.56, 2, ',', ' ');
	// *     returns 2: '1 234,56'
	// *     example 3: number_format(1234.5678, 2, '.', '');
	// *     returns 3: '1234.57'
	// *     example 4: number_format(67, 2, ',', '.');
	// *     returns 4: '67,00'
	// *     example 5: number_format(1000);
	// *     returns 5: '1,000'
	// *     example 6: number_format(67.311, 2);
	// *     returns 6: '67.31'

	var n = number, prec = decimals;
	n = !isFinite(+n) ? 0 : +n;
	prec = !isFinite(+prec) ? 0 : Math.abs(prec);
	var sep = (typeof thousands_sep == "undefined") ? delimThou : thousands_sep; // changed!
	var dec = (typeof dec_point == "undefined") ? delimDeci : dec_point; // changed!

	var s = (prec > 0) ? n.toFixed(prec) : Math.round(n).toFixed(prec); //fix for IE parseFloat(0.55).toFixed(0) = 0;

	var abs = Math.abs(n).toFixed(prec);
	var _, i;

	if (abs >= 1000) {
		_ = abs.split(/\D/);
		i = _[0].length % 3 || 3;

		_[0] = s.slice(0,i + (n < 0)) +
			  _[0].slice(i).replace(/(\d{3})/g, sep+'$1');

		s = _.join(dec);
	} 
	else {
		s = s.replace('.', dec);
	}
	
	return s;
}

function hT_format(number){
	return number_format(number,2)+"&nbsp;"+Global._KH_CURRENCY;
}

function hT_formatgr(number){
	return number_format(number,0)+"&nbsp;"+Global._KH_CURRENCY;
}

function keepDigits ( str ) {
	return str.replace( /[^0-9]/g, "" );
}

function calc_overall() {
	var checkboxes = $('buyquest2').querySelectorAll('input[type="checkbox"]');
	var overall = 0.00;
	
	for(var i = 0; i < checkboxes.length; i++)
	{
		if( checkboxes[i].checked )
		{
			var medid = checkboxes[i].id.split('#')[0];
			var amount = $('am_'+medid).value;
						
			var medprice = number_format( (Global.availableMedics[0][medid]["price"] * amount), 2, ',', '.');
			
		
			
			$('prc'+medid).innerHTML = medprice + " " + Global._KH_CURRENCY;
			
			overall += parseFloat((Global.availableMedics[0][medid]["price"] * amount), 2);
		}
	}
	
	if( $('prover') )
		$('prover').innerHTML = hT_format(overall);
}

function time2str(time,mode){
	str="";
	time = Math.max(0,time);
        tmp="";
		
	//seconds
	if (!mode || mode == 2) {
		if (time%60>=10) 
			str+=":"+Math.floor(time%60);
		else
			str+=":0"+Math.floor(time%60);
	}
	
	//minutes
	time=time/60;
	if( mode != 2 )
		tmp=":";
		
	if (time>=1){
		if (time%60>=10) 
			str=tmp+Math.floor(time%60)+str;
		else 
			str=tmp+"0"+Math.floor(time%60)+str;
	}
	else {
			str=tmp+"00"+str;
	}
	
	if( mode != 2 )
	{
		//hours
		time=time/60;
		if (time>=1) 
			str=Math.floor(time%24)+str;
		else 
			str="0"+str;
		
		//days
		time=time/24;
		
		if (time>=1) 
			str=Math.floor(time)+"d "+str;
	}

	return str;
}

function uhrzeit(time,mode){
	var help = new Date(time*1000);
	
	if (help.getHours()<10) { 
		var str = "0"+help.getHours(); 
	}
	else { 
		var str = help.getHours(); 
	}
	
	if (help.getMinutes()<10) { 
		str += ":0"+help.getMinutes(); 
	}
	else { 
		str += ":"+help.getMinutes(); 
	}
	
	if (!mode) {
		if (help.getSeconds()<10) { 
			str += ":0"+help.getSeconds();
		}
		else { 
			str += ":"+help.getSeconds(); 
		}
	}
	
	return str;
}

function explode(str){
	//GM_log("Begin explode "+ str);
	if (str == "") 
		throw("Explode error Argument empty");
		
	if (str=="undefined") 
		throw ("Explode error Argument is undefined");
		
	if (typeof str != "string") 
		throw ("Explode error Argument not a String");

	try{
		return eval('(' + str + ')');
	} catch(err){
		GM_log("Explode error : " + err);
		throw ("Explode error : " + err);
	}
}

function implode(arr){//--- function written by Jan-Hans
	try {
		var line = new String();
		var InternalCounter = -1;
		var NoKey = new Boolean(false);
   
		if (typeof arr != "object") 
			throw("Argument not a Object or Array" + typeof arr +"<br>");
   
		var type = (arr instanceof Array); //true->array | false->object

		line = (type)?"[":"{";
		for(var i in arr ){
			if (typeof arr[i] == "function") 
				continue;
				
			InternalCounter++;
			if (type){
				while (i>InternalCounter){
					line += ",";
					InternalCounter++;
				}
			}else { //arr == object
				line += "\"" + i + "\"";
				line += ":";
			}
			
			if (typeof arr[i] == "number" || typeof arr[i] == "boolean"){
				line +=  arr[i];
			} else if (typeof arr[i] == "string"){
				line +=  "\"" + arr[i] + "\"";
			} else if(typeof arr[i] == "undefined"){
				line += '';
			} else {
				line += implode(arr[i]);
			}
			
			line += ",";
		}
		
		var endChar = line.substring(line.length-1,line.length);
		
		return line.substring(0,line.length-1) + (("{[".indexOf(endChar)!=-1)? endChar:"")+ ((type)?"]":"}");
	} catch (err){
		GM_log("Implode error : " + err);
		throw ("Implode error : " + err);
	}
}

function Log(obj,pre){
	if(developer){
		if(typeof(pre)=="undefined") 
			pre="";
			
		if(typeof(obj)=="object"){
			//GM_log("______________________________ object");
			for(var v in obj) Log(obj[v],pre+v+" : ");
			//GM_log("______________________________ object end");
		} else {
			GM_log(pre+obj);
		}
	}
}

function closeInfoPanel(){
	$("infoPanel").setAttribute("name","");
	$("infoPanel").style.display = "none";
}
	
function buildInfoPanel(mode){
	
	if(mode==$("infoPanel").getAttribute("name"))
		closeInfoPanel();
	else {
		$("infoPanel").setAttribute("name",mode);
		$("infoPanel").innerHTML = "";
		$("infoPanel").style.display = "block";
		
		divInfo = createElement("div",{style:"position:absolute;left:20px;top:80px;width:570px;height:400px;overflow:auto;"},$("infoPanel"));
		newdiv = createElement("img",{class:"cursorclickable",style:"font-size:10px;position:absolute;height:35px;width:35px;right:10px;top:2px;"},$("infoPanel"));
		newdiv.addEventListener("click",closeInfoPanel,false);

		if (mode=="options"){
			createElement("div",{align:"center",style:"line-height:30px;font-weight:bold;"},divInfo,texte["optionen"]);
			newtable = createElement("table",{style:"width:100%;",border:"1"},divInfo);

			newtr = createElement("tr","",newtable);
			newtd = createElement("td",{align:"center"},newtr);
			var valUpdate = GM_getValue("valUpdate",true);
			inp = createElement("input",{id:"inputvalUpdate",type:"checkbox",class:"link",checked:valUpdate},newtd);
			inp.addEventListener("click",function(){valUpdate=this.checked;GM_setValue("valUpdate", valUpdate);},false);
			createElement("td","",newtr,texte["set_Update"]);
			createElement("td","",newtr,texte["info_Update"]);
			
			newtr = createElement("tr","",newtable);
			newtd = createElement("td",{align:"center"},newtr);
			inp = createElement("input",{id:"inputvalGlobalClockInTitle",type:"checkbox",class:"link",checked:valGlobalClockInTitle},newtd);
			inp.addEventListener("click",function(){valGlobalClockInTitle=this.checked;GM_setValue(lng+"_"+server+"_"+username+"_valGlobalClockInTitle",valGlobalClockInTitle);},false);
			createElement("td","",newtr,texte["set_valGlobalClockInTitle"]);
			createElement("td","",newtr,texte["info_valGlobalClockInTitle"]);
			
			newtr = createElement("tr","",newtable);
			newtd = createElement("td",{align:"center"},newtr);
			newinput = createElement("input",{id:"inputvalRackLimit",value:valRackLimit,maxlength:"5",size:"5px",style:"background-color:transparent;"},newtd);
			newinput.addEventListener("focus",function(){this.style.backgroundColor="lightblue";},false);
			newinput.addEventListener("blur",function(){this.style.backgroundColor="transparent";},false);
			newinput.addEventListener("keyup",function(){
				valRackLimit=parseInt(this.value,10);
				if (!isNaN(valRackLimit)) { GM_setValue(lng+"_"+server+"_"+username+"_valRackLimit", valRackLimit); }
				this.value = (isNaN(valRackLimit)?"":valRackLimit);
			},false);
			createElement("td","",newtr,texte["set_RackLow"]);
			createElement("td","",newtr,texte["info_RackLow"]);			
			
			newtr = createElement("tr","",newtable);
			newtd = createElement("td",{align:"center"},newtr);
			newinput = createElement("input",{id:"inputvalMaxRackLimit",value:valMaxRackLimit,maxlength:"5",size:"5px",style:"background-color:transparent;"},newtd);
			newinput.addEventListener("focus",function(){this.style.backgroundColor="lightblue";},false);
			newinput.addEventListener("blur",function(){this.style.backgroundColor="transparent";},false);
			newinput.addEventListener("keyup",function(){
				valMaxRackLimit=parseInt(this.value,10);
				if (!isNaN(valMaxRackLimit)) { GM_setValue(lng+"_"+server+"_"+username+"_valMaxRackLimit", valMaxRackLimit); }
				this.value = (isNaN(valMaxRackLimit)?"":valMaxRackLimit);
			},false);
			createElement("td","",newtr,texte["set_RackMax"]);
			createElement("td","",newtr,texte["info_RackMax"]);	
			
			newtr = createElement("tr","",newtable);
			newtd = createElement("td",{align:"center"},newtr);
			inp = createElement("input",{id:"inputvalStartQuestAutomatic",type:"checkbox",class:"link",checked:valStartQuestAutomatic},newtd);
			inp.addEventListener("click",function(){
				valStartQuestAutomatic=this.checked;
				GM_setValue(lng+"_"+server+"_"+username+"_valStartQuestAutomatic",valStartQuestAutomatic);
			},false);
			createElement("td","",newtr,texte["set_valStartQuestAutomatic"]);
			createElement("td","",newtr,texte["info_valStartQuestAutomatic"]);		

			//AutoLogin
			createElement("div",{align:"center",style:"line-height:30px;margin-top:20px;font-weight:bold;"},divInfo,texte["autoLogin"]);
			newtable=createElement("table",{id:"tableAutologin",align:"center"},divInfo);
						
			buildLoginTable(false);
			
			newdiv = createElement("div",{align:"center"},divInfo);
			newinput = createElement("input",{type:"checkbox",class:"cursorclickable",checked:false},newdiv);
			newinput.addEventListener("click",function(){buildLoginTable(this.checked);},false);
			newspan = createElement("span","",newdiv,texte["zeigePasswoerter"]);
			
							
			//CSS
			var cssArr = new Object();
			cssArr["css_racklow"] = [[],"background-color:orangered;"];
			createElement("div",{align:"center",style:"line-height:30px;margin-top:20px;font-weight:bold;"},divInfo,"CSS");
			newtable = createElement("table",{align:"center"},divInfo);
			for(var v in cssArr){
				newtr = createElement("tr","",newtable);
				createElement("td","",newtr,v);
				newtd = createElement("td","",newtr);
				var help = GM_getValue(lng+"_"+server+"_"+username+"_"+v,cssArr[v][1]);
				newinput = createElement("input",{id:v,value:help,style:"width:300px;"},newtd);
				newinput.addEventListener("keyup",function(){
					if(this.value=="") this.value = cssArr[this.id][1];
					GM_setValue(lng+"_"+server+"_"+username+"_"+this.id,this.value);
					cssArr[this.id][1] = this.value;
					var help = cssArr[this.id][1];
					for(var w=0;w<cssArr[this.id][0].length;w++){ help = cssArr[cssArr[this.id][0][w]][1]+help; }
					this.parentNode.nextSibling.firstChild.setAttribute("style",help);
				},false);
				newtd = createElement("td","",newtr);
				for(var w=0;w<cssArr[v][0].length;w++){ help = cssArr[cssArr[v][0][w]][1]+help; }
				newdiv = createElement("div",{style:help},newtd,"test");
			}
		}
		
		if (mode=="patients"){
			buildPatientsTable(1,true,false);
		}
	}
}

function saveLogin(){
	GM_setValue("logindata", implode(logindata) );
}

function buildLoginTable(showPW) {
	
	try{ 
		logindata = explode( GM_getValue("logindata","[]") ); 
	}
	catch(err){ 
		logindata= new Array; 
	}
	
	newtable = createElement("table",{align:"center"});
	$("tableAutologin").parentNode.replaceChild(newtable,$("tableAutologin"));
	newtable.id = "tableAutologin";
	newtable.addEventListener("change",saveLogin,false);
	newtr = createElement("tr",{},newtable);
	createElement("th",{},newtr,texte["server"]);
	createElement("th",{},newtr,texte["name"]);
	createElement("th",{},newtr,texte["passwort"]);
	
	for (var v=0;v<logindata.length;v++){
		newtr = createElement("tr","",newtable);
		newtd = createElement("td","",newtr);
		newinp = createElement("input",{id:"loginActive"+v,type:"checkbox",title:texte["accountAktiv"],checked:logindata[v][4]},newtd);
		newinp.addEventListener("change",function(){ logindata[this.id.replace("loginActive","")][4] = this.checked; },false);
		newinp = createElement("input",{id:"loginServer"+v,style:"width:20px",maxlength:"2"},newtd);
		
		if (isNaN(logindata[v][1]))
			logindata[v][1]="0";
		
		if (logindata[v][1]!="0")
			newinp.value = logindata[v][1];
			
		newinp.addEventListener("change",function(){
			var readin = parseInt(this.value,10);
			if (isNaN(readin) || (readin<1)) {alert(texte["ungueltigerServer"]); this.value="";}
			else {
				this.value = readin;
				logindata[this.id.replace("loginServer","")][1] = readin;
			}
		},false);
		
		newselect = createElement("select",{id:"loginLng"+v},newtd);
		for(var w in gamepages)	createElement("option",{value:w},newselect,w);
		newselect.value = logindata[v][0];
		newselect.addEventListener("change",function(){ logindata[this.id.replace("loginLng","")][0] = this.value; },false);

		newtd = createElement("td","",newtr);
		newinput = createElement("input",{id:"loginName"+v,style:"width:150px",value:logindata[v][2],maxlength:"20"},newtd);
		newinput.addEventListener("change",function(){ logindata[this.id.replace("loginName","")][2] = this.value; },false);

		newtd = createElement("td",{},newtr);
		newinput = createElement("input",{id:"loginPW"+v,style:"width:150px",value:logindata[v][3],maxlength:"20"},newtd);
		
		if (!showPW)
			newinput.type = "password";
			
		newinput.addEventListener("change",function(){ logindata[this.id.replace("loginPW","")][3] = this.value; },false);

		newtd=createElement("td","",newtr);
		if (v>0) {
			newdiv = createElement("div",{id:"loginUp"+v,class:"link2",style:"width:14px;height:10px;"},newtd);
			createElement("img",{src:"http://dqt9wzym747n.cloudfront.net/pics/quest_up.gif",style:"width:14px;height:10px;"},newdiv);
			newdiv.addEventListener("mouseover",function(){this.style.backgroundColor="blue"},false);
			newdiv.addEventListener("mouseout",function(){this.style.backgroundColor="transparent"},false);
			newdiv.addEventListener("click",function(){
				var currLine=parseInt(this.id.replace("loginUp",""),10);
				logindata.splice(currLine-1,2,logindata[currLine],logindata[currLine-1]);
				saveLogin();
				buildLoginTable(showPW);
			},false);
		}
		
		if (v<logindata.length-1) {
			newdiv = createElement("div",{id:"loginDown"+v,class:"link2",style:"width:14px;height:10px;"},newtd);
			createElement("img",{src:"http://dqt9wzym747n.cloudfront.net/pics/quest_down.gif",style:"width:14px;height:10px;"},newdiv);
			newdiv.addEventListener("mouseover",function(){this.style.backgroundColor="blue"},false);
			newdiv.addEventListener("mouseout",function(){this.style.backgroundColor="transparent"},false);
			newdiv.addEventListener("click",function(){
				var currLine=parseInt(this.id.replace("loginDown",""),10);
				logindata.splice(currLine,2,logindata[currLine+1],logindata[currLine]);
				saveLogin();
				buildLoginTable(showPW);
			},false);
		}

		newtd=createElement("td",{title:texte["loeschen"],id:"loginDelete"+v},newtr);
		createElement("img",{src:"http://dqt9wzym747n.cloudfront.net/pics/popin/contracts/anullieren.gif",class:"link2",style:"width: 16px; height: 16px;"},newtd);
		newtd.addEventListener("mouseover",function(){this.style.backgroundColor="blue"},false);
		newtd.addEventListener("mouseout",function(){this.style.backgroundColor="transparent"},false);
		newtd.addEventListener("click",function(){
			var currLine=this.id.replace("loginDelete","");
			logindata.splice(currLine,1);
			saveLogin();
			buildLoginTable(showPW);
		},false);
	}

	newtr = createElement("tr","",newtable);
	newtd = createElement("td",{colspan:"5",class:"link",style:"font-weight:bold;font-size:16px;text-align:right;"},newtr,"+");
	newtd.addEventListener("mouseover",function(){this.style.backgroundColor="blue"},false);
	newtd.addEventListener("mouseout",function(){this.style.backgroundColor="transparent"},false);
	newtd.addEventListener("click",function(){
		logindata.push([lng,"0","","","true"]); // neue leere zeile
		saveLogin();
		buildLoginTable(showPW);
	},false);
}

function buildPatientsTable(mode,showCured,minipic) {
	divInfo.innerHTML = "";
	patients = Global.refPatients.values();
	newtable = createElement("table",{border:"1",width:"100%"},divInfo);
	newtablehead=createElement("thead","",newtable);
	newtablebody=createElement("tbody",{style:"overflow-y:auto;overflow-x:hidden;height:365px;"},newtable);

	newtr = createElement("tr","",newtablehead);
	newth = createElement("th",{colspan:"5"},newtr);
	newspan = createElement("span",{style:"margin-right:3px"},newth);
	newinput = createElement("input",{type:"checkbox",checked:showCured,class:"cursorclickable"},newspan);
	newinput.addEventListener("click",function(){ buildPatientsTable(mode,this.checked,minipic); },false);
	createElement("span","",newspan,texte["zeigeGeheilteKrankheiten"]);
	newspan = createElement("span",{style:"margin-right:3px"},newth);
	newinput = createElement("input",{type:"checkbox",checked:minipic,class:"cursorclickable"},newspan);
	newinput.addEventListener("click",function(){ buildPatientsTable(mode,showCured,this.checked); },false);
	createElement("span","",newspan,texte["minipics"]);
	newinput = createElement("input",{type:"button",style:"margin-right:3px",value:"Patienten",class:"cursorclickable"},newth);
	newinput.addEventListener("click",function(){ buildPatientsTable(1,showCured,minipic); },false);
	newinput = createElement("input",{type:"button",style:"margin-right:3px",value:"R"+ae+"ume",class:"cursorclickable"},newth);
	newinput.addEventListener("click",function(){ buildPatientsTable(2,showCured,minipic); },false);

	if(mode==1){
		for(var posi=0;posi<3;posi++){
			for(var pat in patientDiseases){
				switch(patientDiseases[pat]["state"]){
					case 1: 
					case 2: 
							if(posi==0){
								newtr = createElement("tr",{"id":pat,"class":"cursorclickable","onclick":'show_page("medical",this)'},newtablebody);
								newtr.addEventListener("click",closeInfoPanel,false);
								createElement("td","",newtr,pat);
								createElement("td",{colspan:"2"},newtr,Global.availableRooms[6]["name"]);
								newtd = createElement("td",{style:"padding-right:30px"},newtr);
								plotPatient(newtd,pat,showCured,minipic);
							} 
							break;
					case 3: 
					case 4: 
							if(posi==1){
								newtr = createElement("tr",{"id":pat,"class":"cursorclickable","onclick":'show_page("medical",this)'},newtablebody);
								newtr.addEventListener("click",closeInfoPanel,false);
								createElement("td","",newtr,pat);
								createElement("td","",newtr,patientDiseases[pat]["floor"]);
								createElement("td","",newtr,Global.availableRooms[patientDiseases[pat]["room"]]["name"]);
								newtd = createElement("td",{style:"padding-right:30px"},newtr);
								plotPatient(newtd,pat,showCured,minipic);
							} 
							break;
					case 0: 
							if(posi==2){
								newtr = createElement("tr",{"id":pat,"class":"cursorclickable","onclick":'show_page("medical",this)'},newtablebody);
								newtr.addEventListener("click",closeInfoPanel,false);
								createElement("td","",newtr,pat);
								createElement("td",{colspan:"2"},newtr,texte["waitingroom"]);
								newtd = createElement("td",{style:"padding-right:30px"},newtr);
								plotPatient(newtd,pat,showCured,minipic);
							}
							break;
				}
			}
			newtr = createElement("tr","",newtablebody);
			createElement("td",{colspan:"4"},newtr,"");
		}
	} else if(mode==2) {
		var sumDiseases = new Object();
		for(var pat in patientDiseases){
			for(var disease in patientDiseases[pat]) if(!isNaN(disease)){
				var currRoom = Global.availableDiseases[0][disease]["room"][0];
				
				if(!sumDiseases[currRoom])
					sumDiseases[currRoom] = new Object();
					
				if(!sumDiseases[currRoom][disease])
					sumDiseases[currRoom][disease]=[0,0,0,0,0,0];
				
				switch(patientDiseases[pat]["state"]){
					case 1: 
					case 2: 
							sumDiseases[currRoom][disease][0]++;
							if((patientDiseases[pat][disease]!="cured")&&(patientDiseases[pat][disease]!="heartbeat")) 
								sumDiseases[currRoom][disease][1]++;
							break; 
					case 3: 
					case 4:
							sumDiseases[currRoom][disease][2]++;
							if((patientDiseases[pat][disease]!="cured")&&(patientDiseases[pat][disease]!="heartbeat")) 
								sumDiseases[currRoom][disease][3]++;
							break; 
					case 0:
							sumDiseases[currRoom][disease][4]++;
							if((patientDiseases[pat][disease]!="cured")&&(patientDiseases[pat][disease]!="heartbeat")) 
								sumDiseases[currRoom][disease][5]++;
							break;
				}
			}
		}

		newtr = createElement("tr","",newtablebody);
		newtd = createElement("td",{title:texte["Beschreibung2"]},newtr,texte["Beschreibung"]);
		newtd = createElement("td","",newtr,texte["frei"]);
		newtd = createElement("td","",newtr,texte["inBehandlung"]);
		newtd = createElement("td","",newtr,texte["waitingroom"]);
		newtd = createElement("td","",newtr,texte["Gesamt"]);

		var	disease_baseclass = "d";
		var icon_baseclass = "d";

		if( Global.selectedFloor == 90 )
		{
			disease_baseclass = "minigolf_d";
			icon_baseclass = "mgd"; 
		}
		
		for(var r in sumDiseases){
			newtr = createElement("tr","",newtablebody);
			newtd = createElement("td","",newtr,Global.availableRooms[r].name);
			var totalTotalTime = 0;
			
			for(var v=0;v<4;v++){
				var totalTime = 0;
				newtd = createElement("td",{style:(v==3?"padding-right:30px;":"")},newtr);
				
				for(var disease in sumDiseases[r]) {						
					if(sumDiseases[r][disease][ 2*v + ( 1 - showCured ) ] > 0 ) {
						newdiv = createElement("div",{style:"float:left;margin-right:2px;"},newtd);
						createElement("div",{class:disease_baseclass+"_a_30 "+icon_baseclass+"_"+disease+"_30"},newdiv);
						createElement("div","",newdiv,time2str(Global.availableDiseases[0][disease]["basetime"],1));
						createElement("div","",newdiv,sumDiseases[r][disease][2*v+1]+"/"+sumDiseases[r][disease][2*v]);
						totalTime += sumDiseases[r][disease][2*v+1]*Global.availableDiseases[0][disease]["basetime"];
					}
				}
				
				totalTotalTime += totalTime;
				if (v == 3)
					newdiv = createElement("div",{style:"margin-right:2px;font-weight:bold;padding-top:20px;"},newtd,time2str(totalTotalTime,1));
				else
					newdiv = createElement("div",{style:"margin-right:2px;font-weight:bold;padding-top:20px;"},newtd,time2str(totalTime,1));
			}
		}
	}
}

// Cleaner Function
function cleaningfunc() {
	var cleaner = $("cleaner");	
	var cur_floor = Global.selectedFloor;
	var floor=1;
	
	for( var max_floor=1; $("floor_jump_"+max_floor); max_floor++ );
	max_floor--;
	
	function initfloor( nfloor ) {			
		$( 'floor_jump_'+nfloor ).click();					
		
		setTimeout( 
			function ()
			{
				rooms = Global.rooms;
														
				for(var v=0;v<rooms.length;v++)
				{
					if ( ( rooms[v].cleanup ) && ( rooms[v].ends==0 ) && ( rooms[v].roomid != 6 || rooms[v].roomid != 60 ) )
					{
						var croom=Global.refRooms.get("r"+rooms[v].topleft);
						console.log("cleaner for room: "+rooms[v].topleft);
						croom._onDrop(cleaner,"","");
					}
				}
				
				if( floor < max_floor ) {
					floor++;
					initfloor( floor );
				}
				else {
					if( floor != cur_floor )
						$('floor_jump_'+cur_floor).click();
				}
			}								
		 , 1000);
	}							
	
	initfloor( floor );	
}

function medifunc()
{
	var cur_floor = Global.selectedFloor;
	var floor=1;
	
	var type = unsafeWindow.Rack._actualMedType;
	console.log("MediType: " + type);
	
	for( var max_floor=1; $("floor_jump_"+max_floor); max_floor++ );
		max_floor--;
	
	function initmedi( nfloor )
	{			
		$( 'floor_jump_'+nfloor ).click();
		
		setTimeout( 
			function () {
				rooms = Global.rooms;
												
				for(var v=0;v<rooms.length;v++) {
					if( ( currRoom = Global.refRooms.get( "r"+rooms[v].topleft ) ) ) { 							
						if( currRoom["roomid"] !=6 && currRoom["roomid"] !=60 )
						{
							if( (Global.availableRooms[currRoom["roomid"]] ) && (Global.availableRooms[currRoom["roomid"]]["diseases"].length > 0 )) { // Behandlungsraum
								
								if(currRoom["state"]==3) {
									if( $("gradient_r"+currRoom["topleft"]) && $("alert"+currRoom.topleft) ) {
										// Medis
										
										var currDisease = null;
										currDisease = calcCurrDisease(currRoom["patient"]);
										//console.log(currDisease);
										
										if( currDisease ) {
											if( $("mediinfo_"+currRoom.topleft) )
											{ 
												//console.log( $('rackItem'+medi[currDisease]["id"] ) );
												
												for( var i=0; i < unsafeWindow.Rack._elements[type]; i++ ) {
													if( unsafeWindow.Rack._elements[type][i]["product"] == medi[currDisease]["id"] )
														break;
												}
												
												var med = createElement("div", {
													id:"rackItem"+medi[currDisease]["id"], 
													class:"med ri_a", 
													medid:medi[currDisease]["id"], 
													amount:unsafeWindow.Rack._elements[type][i]["amount"], 
													rlevel:unsafeWindow.Rack._elements[type][i]["rlevel"]
												}, null);
												
												console.log(med);
												currRoom._onDrop( med, "", "" );
											}
										}
									}
								}
							}
						}
					}
				}
				
				if( floor < max_floor ) {
					floor++;
					initmedi( floor );
				}
				else {
					/*
					 * error window is shown, close it and start again
					 * (its when disease array is not complete)
					 */
					if( $("dlg_message").style.display != "none" && $("btn_info") ) {
						click($("btn_info"));
						floor = 1;
						initmedi( floor );
					}
					
					if( floor != cur_floor )
						$('floor_jump_'+cur_floor).click();
				}
			}								
		 , 1500);
	}							
	
	initmedi( floor );
}

function initPatient(patientId) {

	if( !patientDiseases[patientId] )
	{
	
		patientDiseases[patientId] = new Object;
		patientDiseases[patientId]["m_done"] = 0;
		patientDiseases[patientId]["floor"] = 1;
		//patientDiseases[patientId]["xml"] = 0;
		
		var help = Global.refPatients.get("p"+patientId);
		
		if(help)
		{
			patientDiseases[patientId]["floor"] = help["floor"];
			
			for(var v=0;v<help["diseases"].length;v++)
			{
				patientDiseases[patientId][help["diseases"][v]] = "";
				patientDiseases[patientId]["room"+Global.availableDiseases[ (Global.selectedFloor == 90?2:0)][help["diseases"][v]]["room"][0]] = 1;
			}
		}
	}

	getPatientInfos( patientId, false );

	calcPatientState(patientId);
}

function refreshPatient( patientId, with_nurse ) {		
	if( !patientDiseases[patientId] )
		initPatient(patientId);
			
	getPatientInfos( patientId, with_nurse );
}


function updPatientState( patientId, infos, with_nurse ) {
	var cured = true;
	var obj = infos.find('div#diseases');

	// is not set with special diseases
	if( obj[0] ) 	{
		for(var w=0; w<obj[0].children.length; w++ ) {
			
			var disease = (/d_(\d+)_50/).exec(obj[0].children[w].firstElementChild.getAttribute("class"))[1];	

			if(obj[0].children[w].firstElementChild.firstElementChild) {
				
				patientDiseases[patientId][disease] = (/(.+) (.+)/).exec(obj[0].children[w].firstElementChild.firstElementChild.getAttribute("class"))[2];
				
				if(patientDiseases[patientId][disease] == "notreatment")
					patientDiseases[patientId]["unhealable"] = 1; 
				
				if(patientDiseases[patientId][disease] != "cured")
					cured = false; 
				else
					patientDiseases[patientId]["room"+Global.availableDiseases[0][disease]["room"][0]] = 0;
			}
			else {
				patientDiseases[patientId][disease] = "";
				patientDiseases[patientId]["room"+Global.availableDiseases[0][disease]["room"][0]] = 1;
				
				cured = false;
			}
		}
	}
	else {
		//special disease
		for(var disease in patientDiseases[patientId]) {
			if(!isNaN(disease)) {
				patientDiseases[patientId][disease] = "cured";
				break;
			}
		}
	}
			
	
	// nurse
	var canddiv = infos.find('.minitreatment');	
	patientDiseases[patientId]["m_done"] = 4;

	for(var v=0; v<canddiv.length; v++ ) {
		var classstr = canddiv[v].getAttribute("class").trim();
		if( classstr == "minitreatment" )
		{
			patientDiseases[patientId]["m_done"]--; 
			cured = false;
		}
	}
	
	if( with_nurse )
	{
		for(var v=0; v<canddiv.length; v++ )
		{
			var classstr = canddiv[v].getAttribute("class").trim();
			if( classstr == "minitreatment" )
			{			
				var help = Global.refPatients.get("p"+patientId);
				if(	patientDiseases[patientId]["state"] == 1 && !( $("treatment"+help["room"]) ) )
				{
					unsafeWindow.MedicalRecord._onclick( canddiv[v], patientId );
					break;
				}
			}
		}
	}
	
	if( cured )
		patientDiseases[patientId]["state"]=5; 
	else 
		calcComesNext(patientId);
			
	calcPatientState(patientId);
}

function calcPatientState(patientId) {

	var help = Global.refPatients.get("p"+patientId);
	var help2 = null;
	
	if(help)
		help2 = Global.refRooms.get(help["room"]);
		
	if( patientDiseases[patientId]["state"] != 5 ) {
	
		if( $("p"+patientId) )
		{
			if($("p"+patientId).getAttribute("class").search("waitingpatient")!=-1) {
				patientDiseases[patientId]["state"]=0;
				patientDiseases[patientId]["room"]=0;
			} 
			else {
				if(help2) {
					patientDiseases[patientId]["state"] = ( help2["roomid"] == 6 || help2["roomid"] == 60 )? 1 : 3 ;
					patientDiseases[patientId]["room"]=help2["roomid"];
				} 
				else {
					patientDiseases[patientId]["state"]=1;
					patientDiseases[patientId]["room"]=6;
				}				
			}
		} 
		/*else
		{
			if(help2) {
				patientDiseases[patientId]["state"]=( help2["roomid"]==6  || help2["roomid"] == 60  ) ? 2 : 4;
				patientDiseases[patientId]["room"]=help2["roomid"];
			} 
			else {
				patientDiseases[patientId]["state"]=2;
				patientDiseases[patientId]["room"]=6;
			}
		}	*/	
	}	
}

function plotPatient(target,currPatientId,showCured,minipic) { //(target) , (target,showCured)
	if(!isNaN(currPatientId)){
		if(typeof(showCured)!="boolean")
			showCured = true;
	} else {
		if(typeof(currPatientId)=="boolean")
			showCured = currPatientId;
			
		else 
			showCured = true;

		currPatientId = parseInt(target.getAttribute("name"),10);
	}
	
	if(typeof(minipic)!="boolean")
		minipic = false;
		
	Log("plotPatient "+currPatientId+" "+showCured+" "+minipic);
	target.innerHTML = "";
	
	initPatient(currPatientId); 

	// diseases
	var usedRooms = new Object();
	var newdiv;
	var restlicheZeit = 0;
	var	disease_baseclass = "d";
	var icon_baseclass = "d";

	if( Global.selectedFloor == 90 )
	{
		disease_baseclass = "minigolf_d";
		icon_baseclass = "mgd"; 
	}
	
	
	for(var disease in patientDiseases[currPatientId]) {
		if(!isNaN(disease)) {
			if(showCured || patientDiseases[currPatientId][disease]!="cured") {
				newdiv = createElement("div",{style:"float:left;"},target);
				if(minipic) {
					if(patientDiseases[currPatientId][disease]=="cured"){
						newdiv1 = createElement("div",{class: disease_baseclass+"_a_15 " + icon_baseclass + "_"+disease+"_15",style:"opacity:0.5;"},newdiv);
						createElement("div",{class:"treatment_icon_15 treatment_icon_15_1"},newdiv1);
					}
					else	{
						newdiv1 = createElement("div",{class:disease_baseclass+"_a_15 " + icon_baseclass + "_"+disease+"_15"},newdiv);
					}
				} 
				else  {
					if(patientDiseases[currPatientId][disease]=="cured") {
						newdiv1 = createElement("div",{class:disease_baseclass+"_a_30 " + icon_baseclass + "_"+disease+"_30",style:"opacity:0.3;"},newdiv);
						createElement("div",{class:"treatmenticons "+patientDiseases[currPatientId][disease]+"s"},newdiv1);						
					}
					else if(patientDiseases[currPatientId][disease]) {
						newdiv1 = createElement("div",{class:disease_baseclass+"_a_30 " + icon_baseclass + "_"+disease+"_30"},newdiv);
						createElement("div",{class:"treatmenticons "+patientDiseases[currPatientId][disease]+"s"},newdiv1);
					}
					else {
						newdiv1 = createElement("div",{class:disease_baseclass+"_a_30 " + icon_baseclass + "_"+disease+"_30"},newdiv);
					}
				
					if(patientDiseases[currPatientId][disease]!="cured"){
						newdiv2 = createElement("div","",newdiv,time2str(Global.availableDiseases[0][disease]["basetime"],1));
						restlicheZeit += Global.availableDiseases[0][disease]["basetime"];
						
						if (!usedRooms[Global.availableDiseases[0][disease]["room"][0]]){
							usedRooms[Global.availableDiseases[0][disease]["room"][0]] = 1;
							newdiv2.style.fontWeight = "bold";
						}
					}
				}
			}
		}
	}
	// nurse
	if(patientDiseases[currPatientId]["m_done"]==4){
		if(minipic){
			newdiv = createElement("div",{style:"position:relative;float:left;"},target);
			createElement("div",{class:"treatment_icon_15 treatment_icon_15_1"},newdiv);
		} else {
			newdiv = createElement("div",{style:"position:relative;float:left;margin-left:30px;"},target);
			createElement("div",{class:"pat_dis1 treatmenticonpa"},newdiv);
			createElement("div",{class:"treatmenticons cureds"},newdiv);
			newdiv2 = createElement("div","",newdiv,time2str(restlicheZeit,1));
			newdiv2.style.fontWeight = "bold";
		}
	}
	else {
		if(!minipic) {
			newdiv = createElement("div",{style:"position:relative;float:left;margin-left:30px;"},target);
			createElement("div",{class:"pat_dis1 treatmenticonpa"},newdiv);
			newdiv2 = createElement("div","",newdiv,time2str(restlicheZeit,1));
			newdiv2.style.fontWeight = "bold";
		}
	}
	newdiv=null;
}

function getPatientInfos( id, with_nurse ) {
	var answ = GM_xmlhttpRequest({
	  method: "GET",
	  url: "medicalrecord.php?patient="+id,
	 // synchronous: true,
	  onload:function(response) 
	  {					
			var text = JSON.parse(response.responseText);
						
			updPatientState( id, jQuery( text["message"] ), with_nurse );
	  },
	  onerror:function(response )
	  {
		  return "";
	  }
	});
}

function highlightPatients(roomid) {
	// Patients
	var canddiv = $("garten_komplett").getElementsByClassName("patient");
	
	for(var v=0;v<canddiv.length;v++) {
		canddiv[v].style.border="";
		var currPatientId = parseInt(canddiv[v].id.replace("p",""),10);

		//refresh on minigolf
		if( Global.selectedFloor == 90 )
		{
			var help = Global.refPatients.get("p"+currPatientId);
		
			if(help)
			{
				patientDiseases[currPatientId]["floor"] = help["floor"];
				
				for(var j=0;j<help["diseases"].length;j++)
				{
					patientDiseases[currPatientId][help["diseases"][j]] = "";
					patientDiseases[currPatientId]["room"+Global.availableDiseases[2][help["diseases"][j]]["room"][0]] = 1;
				}
			}						
		}
		
		if(patientDiseases[currPatientId])
		{							
			if( patientDiseases[currPatientId]["room"+roomid] )
				canddiv[v].style.border="3px solid blue";
		} 
		else 
			initPatient(currPatientId); 
	}
	
	// in Rooms
	var canddiv = $("garten_komplett").getElementsByClassName("room");
	for(var v=0;v<canddiv.length;v++)
	{
		canddiv[v].style.backgroundColor="";
		var currPatientId = Global.refRooms.get(canddiv[v].id)["patient"];
		
		if(currPatientId)
		{
			if( !$("p"+currPatientId) )
			{
				if(patientDiseases[currPatientId])
				{
					if(patientDiseases[currPatientId]["room"+roomid])
					{
						canddiv[v].style.backgroundColor="blue";
					}
				}
				else
				{
					initPatient(currPatientId);
				}
			}
		}
	}
	canddiv=null;
}

function unhighlightPatients(){
	Log("unhighlightPatients");
	var canddiv = $("garten_komplett").getElementsByClassName("patient");
	
	for(var v=0;v<canddiv.length;v++){
		canddiv[v].style.border="";
	}
	var canddiv = $("garten_komplett").getElementsByClassName("room");
	
	for(var v=0;v<canddiv.length;v++){
		canddiv[v].style.backgroundColor="";
	}
	canddiv=null;
}

function calcCurrDisease(patientId){ // returns current treatment
	var result = null;
	if(patientDiseases[patientId]){
		for(var v in patientDiseases[patientId]) if((!isNaN(v)) && (patientDiseases[patientId][v]=="heartbeat")){
			result = v; break;
		}
		if(!result){ // no treatment found, set one
			var currPatient = Global.refPatients.get("p"+patientId);
			var currRoom = Global.refRooms.get(currPatient["room"]);
			if(currRoom){
				if(patientDiseases[patientId]["room"+currRoom.roomid]) delete patientDiseases[patientId]["room"+currRoom.roomid];
				for(var disease in patientDiseases[patientId]) if((!isNaN(disease))&&(patientDiseases[patientId][disease]!="cured")) {
					for(var roomDiseaseNr=0;roomDiseaseNr<Global.availableRooms[currRoom.roomid]["diseases"][roomDiseaseNr];roomDiseaseNr++){
						if(disease==Global.availableRooms[currRoom.roomid]["diseases"][roomDiseaseNr]){
							if(!result){
								patientDiseases[patientId][disease] = "heartbeat";
								result = disease;
							} else {
								patientDiseases[patientId]["room"+currRoom.roomid]=1;
							}
						}
					}
				}
			}
		}
	} else { 
		initPatient(patientId);
		result=calcCurrDisease(patientId); 
	}
	
	calcComesNext(patientId);
	return result;
}

function calcComesNext(patientId){
	Log("calcComesNext "+patientId);
	if(patientDiseases[patientId]){
		var currRoomId = null;
		for(var disease in patientDiseases[patientId]) if(!isNaN(disease) && (patientDiseases[patientId][disease] == "heartbeat")){
			currRoomId = Global.availableDiseases[0][disease]["room"][0]; break;
		}
		if(currRoomId){
			for(var disease in patientDiseases[patientId]) if(!isNaN(disease) && (patientDiseases[patientId][disease] == "") && (currRoomId == Global.availableDiseases[0][disease]["room"])){
				patientDiseases[patientId][disease] = "comesnext";
			}
		}
	} else { initPatient(patientId); }
}

function calcEndTreatment(patientId){
	Log("calcEndTreatment "+patientId);
	
	if(patientDiseases[patientId]){
		var cured = true;
		
		for(var v in patientDiseases[patientId]) if(!isNaN(v)){
			var currDiseaseRoom = Global.availableDiseases[0][v]["room"][0];
			
			if(patientDiseases[patientId][v]=="heartbeat"){ 
				patientDiseases[patientId][v]="cured";
				if(patientDiseases[patientId]["room"+currDiseaseRoom])
					delete patientDiseases[patientId]["room"+currDiseaseRoom];
			} else {
				if(patientDiseases[patientId][v]=="comesnext")
					patientDiseases[patientId][v]="";
					
				if(patientDiseases[patientId][v]!="cured"){ 
					cured=false; 
					patientDiseases[patientId]["room"+currDiseaseRoom] = 1;
				}
			}
		}
		
		if(cured&&(patientDiseases[patientId]["m_done"]>3))
			patientDiseases[patientId]["state"] = 5;

	} else
		initPatient(patientId);
}

function do_Patientenblatt(){
	var currPatientId = parseInt((/MedicalRecord\.\_onclick\(this, (\d+)/).exec($("msgwindow").innerHTML)[1],10);
	var currPatient = Global.refPatients.get("p"+currPatientId);
	
	// diseases
	var canddiv = $("msgwindow").getElementsByTagName("div");
	
	for(var v=0;v<canddiv.length;v++)
		if(canddiv[v].id=="diseases")
			break;
			
	patientDiseases[currPatientId] = new Object;
	var cured = true;
	
	for(var w=0; w<canddiv[v].children.length; w++ ){

		var disease = (/d_(\d+)_50/).exec(canddiv[v].children[w].firstElementChild.getAttribute("class"))[1];
		
		if(canddiv[v].children[w].firstElementChild.firstElementChild ){
			
			patientDiseases[currPatientId][disease] = (/(.+) (.+)/).exec(canddiv[v].children[w].firstElementChild.firstElementChild.getAttribute("class"))[2];
			
			if(patientDiseases[currPatientId][disease]=="notreatment")
				patientDiseases[currPatientId]["unhealable"] = 1;
				
			if(patientDiseases[currPatientId][disease]!="cured")
				cured=false;
		} else {
			patientDiseases[currPatientId][disease] = "";
			patientDiseases[currPatientId]["room"+Global.availableDiseases[0][disease]["room"][0]] = 1;
			cured = false;
		}
	}
	
	// nurse
	var canddiv = $("msgwindow").getElementsByClassName("minitreatment");
	patientDiseases[currPatientId]["m_done"] = 4;
	
	for(var v=0;v<canddiv.length;v++)
	{
		if( canddiv[v].getAttribute("class") != "minitreatment doneNormal" && canddiv[v].getAttribute("class") != "minitreatment doneMinigolf" )
		{ 
			patientDiseases[currPatientId]["m_done"]--; 
			cured=false;
		}
	}
	
	if(cured)
		patientDiseases[currPatientId]["state"]=5;
	else {
		calcComesNext(currPatientId);
		calcPatientState(currPatientId);
	}
	
	var maxprice = parseFloat($("med_price").getElementsByTagName("span")[0].innerHTML.split("-")[1].replace(Global._KH_THOUSANDSEPERATOR,"").replace(Global._KH_DECIMALSEPERATOR,"."),10)
	createElement("div",{"style":"position:absolute;top:380px;right:130px;color:red;"},$("ref_divdetailsbig"),"85%: "+hT_formatgr(0.85*maxprice)+", 90%: "+hT_formatgr(0.9*maxprice)+", 95%: "+hT_formatgr(0.95*maxprice));
	
	var newimg = createElement("img",{"style":"position:absolute;top:440px;left:219px;width:16px;height:16px;","src":"http://pics.kapihospital.de/addressbook.gif","class":"cursorclickable","title":"Adressbuch"},$("ref_divdetailsbig"));
	newimg.addEventListener("click",function(){
		var newdiv = createElement("div",{"id":"refAdressBook","style":"top:70px;width:265px;height:350px;position:absolute;z-index:30;right:0px;background:url('http://pics.kapihospital.de/addressbook_newmsg.gif') no-repeat scroll left top transparent;overflow:visible;"},$("ref_divdetails"));
		var newdiv1 = createElement("div",{"style":"position:absolute;left:12px;top:5px;z-index:2;width:15px;height:10px;","class":"cursorclickable","title":"schlie"+sz+"en"},newdiv);
		newdiv1.addEventListener("click",function(){
			removeElement($("refAdressBook"));
		},false);	
		createElement("div",{"style":"z-index:1;position:absolute;width:165px;top:15px;left:45px;right:15px;text-align:center;font-weight:bold;font-size:medium;"},newdiv,"Adressbuch");
		newdiv1 = createElement("div",{"style":"position:absolute;width:180px;height:225px;top:50px;left:45px;right:0px;overflow-y:auto;overflow-x:hidden;"},newdiv);
		var newtable = createElement("table",{"cellspacing":"0"},newdiv1);
		contacts = explode(GM_getValue(lng+"_"+server+"_"+username+"_contacts","[]"));
		for(var v=0;v<contacts.length;v++){
			newdiv1 = createElement("div",{"class":"cursorclickable"},createElement("td",{},createElement("tr",{},newtable)),contacts[v]);
			newdiv1.addEventListener("click",function(){
				$("ref_recipient").value = this.innerHTML;
				removeElement($("refAdressBook"));
			},false);
		}
		newdiv=null;newdiv1=null;newtable=null;newdiv1=null;
	},false);
	canddiv=null;newimg=null;
}
	
function do_Quest(){
	console.log("do_Quest");

	if($("ga_running"))
	{
		if($("ga_running").style.display != "none")
		{
			questTime = now+unsafeWindow.GarageOld["ends"];
			GM_setValue(lng+"_"+server+"_"+username+"_questTime", questTime);
		} 
		else 
		{
			window.setTimeout(do_Quest,200);
		}
	}
}

function start_Quest() {

	if( unsafeWindow.GarageOld["ends"] > 0 )
		return;
	
	unsafeWindow.show_page("garage");

	window.setTimeout( function()
	{
		if( $("newswindow_badge")  )
		{
			//Erfolgsmeldung wird angezeigt
			console.log("Im Finish");
			unsafeWindow.close_badge();
		}
		
		window.setTimeout( function()
		{
			if( $("ga_new") && $("ga_new").style.display != "none" )
			{
				if( unsafeWindow.GarageOld.actualOperation < 8 )
					unsafeWindow.GarageOld.doJob();
			}
							
			window.setTimeout( unsafeWindow.close_page, 500 );
			
		}, 400 );
		
	}, 500 );
}

function do_Mail(){
	var keyMsgShow = /showMessage\(['|\s]*(\d+)['|\s]*,'(.*?)'\)/;
	var keyMsgDelete = /deleteMessage\(['|\s]*(\d+)['|\s]*,\s*this,\s*'(.*?)'\)/;
	var candtable = $("msgwindow").getElementsByTagName("table");
	var cand = null;
	var help = null;
	if(candtable[0]){
		cand = candtable[0].getElementsByTagName("a");
		if(cand[0]&&(help = keyMsgShow.exec(cand[0].href))){
			if (help[2]=="inbox"){
				// Inbox
				var msgIdIn = new Array;
				for(var v=0;v<cand.length;v++){
					help = keyMsgShow.exec(cand[v].href);
					if(help){ msgIdIn.push(help[1]); }
				}
				GM_setValue(lng+"_"+server+"_"+username+"msgIdIn",implode(msgIdIn));
				cand = candtable[0].getElementsByTagName("input");
				for(var v=0;v<cand.length;v++){
					cand[v].setAttribute("title","Alt+Klick um alle Gleichen zu markieren");
					cand[v].addEventListener("click",function(event){
						if(event.altKey){
							var cand = this.parentNode.parentNode.getElementsByTagName("a");
							var cand2=null;
							var help = [this.checked,cand[0].innerHTML,cand[1].innerHTML];
							cand = this.parentNode.parentNode.parentNode.getElementsByTagName("tr");
							for(var v=0;v<cand.length;v++){
								cand2 = cand[v].getElementsByTagName("a");
								if((help[1]==cand2[0].innerHTML)&&(help[2]==cand2[1].innerHTML)){
									cand[v].getElementsByTagName("input")[0].checked = help[0];
								}
							}
							cand=null;cand2=null;help=null;
						}
					},false);
				}
			}
		} else {
			cand = $("msgNavigation").getElementsByTagName("input");
			if(cand.length>1){ 
				// InMessage
				var help = keyMsgDelete.exec(cand[cand.length-2].getAttribute("onclick"));
				if(help){
					if (help[2]=="inbox"){
						var msgIdIn = explode(GM_getValue(lng+"_"+server+"_"+username+"msgIdIn","[]"));
						for(var c=0;c<msgIdIn.length;c++) if(msgIdIn[c]==help[1]) break;
						if(c>0) createElement("input",{"type":"button","value":"vorige Nachricht","onclick":"javascript:Messages.showMessage("+msgIdIn[c-1]+",'inbox');","class":"cursorclickable msg_input"},$("msgNavigation"));
						if(c<msgIdIn.length-1) createElement("input",{"type":"button","value":"n"+ae+"chste Nachricht","onclick":"javascript:Messages.showMessage("+msgIdIn[c+1]+",'inbox');","class":"cursorclickable msg_input"},$("msgNavigation"));
					}
				}
			}
			if($("deleteContact")){
				// contacts
				var contacts = new Array();
				cand = candtable[0].getElementsByTagName("tr");
				for(var tr=1;tr<cand.length-3;tr++){
					contacts.push(/(.*?)&nbsp;/.exec(cand[tr].getElementsByTagName("td")[0].innerHTML)[1]);
				}
				GM_setValue(lng+"_"+server+"_"+username+"_contacts",implode(contacts));
			}
		}
	}
	candtable=null;cand=null;
}

function laden( elemente, i) {

    /* loader-Objekt initialisieren */

    loader.onload = function() 
    {
        if(i < (elemente.length-1)) 
        {
           laden(elemente, i+1);
        } 
        else 
        {
            /* alle Elemente geladen */
        }
    }
}

function do_Notepad(){
	removeElement($("premiumicon"));
	$("msg_body").disabled = "";
	$("msg_body").value = GM_getValue(lng+"_"+server+"_"+username+"_notepad","");
	$("msg_body").addEventListener("keyup",function(){
		GM_setValue(lng+"_"+server+"_"+username+"_notepad",this.value);
	},false);
}

function do_Patientenboerse(){
	Log("do_Patientenboerse");
	
	createElement("div",{style:"z-index:0;position:absolute;top:0px;right:0px;height:500px;width:250px;background-image: url('http://pics.kapihospital.de/bg_exchange2.jpg');background-position:250px 0px;"},$("msgwindow"));
	$("msgwindow").style.width = "750px";
	$("ex_bubble").style.width="";
	$("ex_bubble").style.zIndex="1";
	
	/*var newdiv = createElement("div",{style:"position:absolute;bottom:-70px;left:20px;background-color: white;"},$("msgwindow"));*/
	var newtab = createElement("table",{border:"1px",cellspacing:"0px", cellpadding:"0px",style:"text-align:center;position:absolute;bottom:-120px;left:-100px;width:750px;background-color: white;"},$("msgwindow"));
	
	var valShowUncurable = GM_getValue(lng+"_"+server+"_"+username+"_valShowUncurable",false);
	var highlightBoerse=new Object;
	var highlightBoerse1=new Object;
	try{highlightBoerse = explode(GM_getValue(lng+"_"+server+"_"+username+"_highlightBoerse","{}"));}catch(err){}
	try{highlightBoerse1 = explode(GM_getValue(lng+"_"+server+"_"+username+"_highlightBoerse1","{}"));}catch(err){}
	
	var blockBoerse = explode(GM_getValue(lng+"_"+server+"_"+username+"_blockBoerse","{}"));
	//var newdiv1 = createElement("div",{style:"display:block;"},newdiv);
	var tabrow = createElement("tr","",newtab);
	var tabcell = createElement("td",{colspan:"20"},tabrow);
	
	var newinput = createElement("input",{"id":"valShowUncurable","type":"checkbox","checked":valShowUncurable},tabcell);
	newinput.addEventListener("click",function(){
		GM_setValue(lng+"_"+server+"_"+username+"_valShowUncurable",this.checked);
		click($("ex_navi").getElementsByTagName("div")[1]);
	},false);
	
	createElement("span",{},tabcell,texte["showUncurable"]);
	
	tabrow = createElement("tr","",newtab);
	tabcell = createElement("td","",tabrow );
	
	for(var r in Global.availableRooms){
		if(Global.availableRooms[r].diseases.length>0){
			tabcell = createElement("td","",tabrow, Global.availableRooms[r].name );
		}
	}
	
	/*var newdiv1 = createElement("div",{style:"display:block;background-color:green;"},newdiv);
	var newdiv2 = createElement("div",{style:"display:block;background-color:yellow;"},newdiv);
	var newdiv3 = createElement("div",{style:"display:block;background-color:#900;"},newdiv);
	*/
	var newrow1 = createElement("tr",{style:"background-color:green;"},newtab);
	var newrow2 = createElement("tr",{style:"background-color:yellow;"},newtab);
	var newrow3 = createElement("tr",{style:"background-color:#900;"},newtab);
	
	tabcell = createElement("td","",newrow1, "Hervorheben 1");
	tabcell = createElement("td","",newrow2, "Hervorheben 2");
	tabcell = createElement("td","",newrow3, "Verberge");
	
	for(var r in Global.availableRooms) if(Global.availableRooms[r].diseases.length>0){
		
		tabcell = createElement("td","",newrow1);
		newinput = createElement("input",{"id":"hl"+r,"type":"checkbox","checked":highlightBoerse[r],"title":Global.availableRooms[r].name,"style":"margin-right:0px;margin-left:1px;"},tabcell);
		newinput.addEventListener("click",function(){
			highlightBoerse[this.id.replace("hl","")] = this.checked;
			GM_setValue(lng+"_"+server+"_"+username+"_highlightBoerse",implode(highlightBoerse));
			click($("ex_navi").getElementsByTagName("div")[1]);
		},false);	
			
		tabcell = createElement("td","",newrow2);
		newinput = createElement("input",{"id":"hl1"+r,"type":"checkbox","checked":highlightBoerse1[r],"title":Global.availableRooms[r].name,"style":"margin-right:0px;margin-left:1px;"},tabcell);
		newinput.addEventListener("click",function(){
			highlightBoerse1[this.id.replace("hl1","")] = this.checked;
			GM_setValue(lng+"_"+server+"_"+username+"_highlightBoerse1",implode(highlightBoerse1));
			click($("ex_navi").getElementsByTagName("div")[1]);
		},false);	
			
		tabcell = createElement("td","",newrow3);
		newinput = createElement("input",{"id":"bl"+r,"type":"checkbox","checked":blockBoerse[r],"title":Global.availableRooms[r].name,"style":"margin-right:0px;margin-left:1px;"},tabcell);
		newinput.addEventListener("click",function(){
			blockBoerse[this.id.replace("bl","")] = this.checked;
			GM_setValue(lng+"_"+server+"_"+username+"_blockBoerse",implode(blockBoerse));
			click($("ex_navi").getElementsByTagName("div")[1]);
		},false);		
	}
	var candtable = $("msgwindow").getElementsByTagName("table");
	candtable[0].style.width="650px";
	candtable[0].setAttribute("class","hoveryellow");
	var candtr = candtable[0].getElementsByTagName("tr");
	var candtd = candtr[0].getElementsByTagName("td");
	candtd[5].innerHTML = "Kaufen";
	createElement("td",{style:"text-align:right;"},candtr[0],"Differenz");
	createElement("td",{style:"text-align:right;"},candtr[0],"Restzeit");
	createElement("td","",candtr[0],"");
	for(var tr=1;tr<candtr.length;tr++){
		candtr[tr].setAttribute("onmouseover","");
		candtr[tr].setAttribute("onmouseout","");
		candtd = candtr[tr].getElementsByTagName("td");
		var restlicheZeit = 0;
		var help = null;
		var uncurable = false;
		var buyable = false;
		var unwanted = false;
		var mark1 = false;
		for(var c=0;c<candtd[2].childNodes.length;c++){
			var disease = Global.availableDiseases[0][(/d_(\d+?)_15/).exec(candtd[2].childNodes[c].getAttribute("class"))[1]];
			help = candtd[2].childNodes[c].firstChild.getAttribute("class").slice(-1);
			if(help!="1"){
				restlicheZeit += disease["basetime"];
				if(help=="2"){ uncurable = true; }
				else if(help=="0"){
					buyable = true;
					if(highlightBoerse[disease["room"][0]]){ candtd[2].style.backgroundColor="green"; }
					if(highlightBoerse1[disease["room"][0]]){ mark1 = true; }
					if(blockBoerse[disease["room"][0]]){ unwanted = true; }
				}
			}
		}
		if(uncurable){
			candtd[2].style.backgroundColor="red"; 
			if(unwanted||!buyable||!valShowUncurable){ candtr[tr].style.display="none"; }
		} else {
			if(unwanted||!buyable){ candtr[tr].style.display="none"; }
			else if( mark1 ){ candtd[2].style.backgroundColor="yellow"; }
		}
		var priceMax = parseFloat(candtd[3].innerHTML.replace(regDelimThou,"").replace(regDelimDeci,"."),10)
		candtd[3].innerHTML = "&nbsp;"+number_format(priceMax,2);
		candtd[3].style.textAlign="right";
		candtd[4].style.textAlign="right";
		candtd[5].style.textAlign="right";
		var price = parseFloat(candtd[4].innerHTML.replace(regDelimThou,"").replace(regDelimDeci,"."),10)
		candtd[4].innerHTML = "&nbsp;"+number_format(price,2);
		candtd[5].getElementsByTagName("a")[0].innerHTML = "&nbsp;"+number_format(100*price/priceMax)+"%";
		candtd[5].getElementsByTagName("a")[0].addEventListener("click",function(){
			clickYes = window.setInterval(function(){
				if(($("dlg_message").style.display!="none") && ($("btn_yes"))){
					click($("btn_yes"));
					clearInterval(clickYes);
				}
			},50);
		},false);
		createElement("td",{style:"text-align:right;"},candtr[tr],"&nbsp;"+(price>priceMax?"+":"")+number_format(price-priceMax,2));
		createElement("td",{style:"text-align:right;"},candtr[tr],"&nbsp;"+time2str(restlicheZeit,1)+"h");
		createElement("td",{style:"text-align:right;"},candtr[tr],"&nbsp;"+(price>priceMax?"---":number_format((priceMax-price)*3600/restlicheZeit)));
	}

	var canddiv = $("ex_navi").getElementsByTagName("div");
	canddiv[1].addEventListener("mouseover",function(){
		this.style.backgroundColor="blue";
		click(this);
	},false);
	newdiv=null;newselect=null;newselect1=null;candtable=null;candtr=null;candtd=null;canddiv=null;
}

function do_Shop(){
	var cand = $("dropzonesource").getElementsByTagName("div");
	for(var v in cand)
	{
		if( cand[v].addEventListener )
		{
			cand[v].addEventListener("mousedown",function(){
				$("dropzonetarget").style.border = "2px solid red";
			},false);
			
			cand[v].addEventListener("mouseup",function(){
				$("dropzonetarget").style.border = "";
			},false);
		}
	}
	
	cand=null;
}

//***********************************************************************************************************

function do_login() {
	var loc = reg2.exec(document.location.href);
	
	if (loc[2].search("logout")!=-1) {
		window.setTimeout(function(){ document.location.href="http://www"+gamepage; },100);//auf login-seite leiten
	} 
	else {
		//login
		try{ 
				var logindata = explode(GM_getValue("logindata","[]")); 
		}		
		catch(err){ 
			var logindata= new Array; 
		}
			
		unsafeWindow.showDiv("login_div");
		$("login_div").style.zIndex = "20";
		$("login_div").getElementsByClassName("kh_btn")[0].addEventListener("click",function(){
			var currServer = $("l_server").value;
			var currUser = $("l_loginname").value.toLowerCase();
			GM_setValue(lng+"_"+currServer+"_username",currUser);
		},false);

		function submit_login(currUserNr){
			$("l_server").value=logindata[currUserNr][1];
			$("l_loginname").value=logindata[currUserNr][2];
			$("l_password").value=logindata[currUserNr][3];
			$("login_div").getElementsByClassName("kh_btn")[0].click();
		} 
		
		var newdiv = createElement("div",{style:"position:absolute;top:0px;left:0px;width:412px;padding:10px;background-color:#999;-moz-border-radius:10px;"},$("login_div"));
		var newbutton;
		for (var v=0;v<logindata.length;v++) if (logindata[v][1]!="0") {
			newbutton=createElement("button",{type:"button",class:"cursorclickable",id:"autologin"+v,style:"width:200px;height:20px;margin:3px;"},newdiv,texte["server"]+" "+logindata[v][1]+"."+logindata[v][0]+": "+logindata[v][2]);
			newbutton.addEventListener("click",function(){
				submit_login(this.id.replace("autologin",""));
			},false);
		}
		newdiv=null;
		newbutton=null;
	}
}
/*************************** end function declarations **************************/

},false);

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址