function dxurl(url) {
  var dx = screen.width-20;
  var dy = screen.height-100;
  if (url.indexOf('?')>=0) url += "&";
  else 			   url += "?";
  url += "dx="+parseInt(dx/8)+"&dy="+parseInt(dy/19);
  return url;
}
function new_window(url,name,dx,dy,par) {
  var top = 5;
  var left = 5;
  dx = screen.width-20;
  dy = screen.height-70;
  var s = (par) ? ","+par : "";
  var w = open(dxurl(url),name,"resizable=yes,scrollbars=yes,width="+dx+",height="+dy+",top="+top+",left="+left+s);
  w.focus();
}
function new_window1(url,name,dx,dy,par) {
  var top = Math.round((screen.height-dy)/2);
  var left = Math.round((screen.width-70-dx)/2);
  var s = (par) ? ","+par : "";
  var w = open(dxurl(url),name,"width="+dx+",height="+dy+",top="+top+",left="+left+s);
  w.focus();
}
function checkDat(datzahl,min) {
	// Check, ob datzahl größer als heute+min ist
	var heute = new Date();
	heute = dat2zahl(heute.getDate()+"."+(heute.getMonth()+1)+"."+
			heute.getFullYear(),min,true);
	//alert("datzahl="+datzahl+", heute="+heute);
	if (datzahl <= (heute+min)) {
	  if (document.data.nosubmit) document.data.nosubmit = true;
	  var d = zahl2dat(heute+min+1);
	  alert("Fehler: Das Datum darf nicht kleiner als "+d+" sein.");
	  return heute+1+min;
	}
	else {
	  if (document.data.nosubmit) document.data.nosubmit = false;
	  return datzahl;
	}
}
function dat2zahl(dat) {
	var expr = /(\d+)\.(\d+)\.(\d+)/;
	expr.exec(dat);
	var tag = RegExp.$1*1;
	var monat = RegExp.$2*1;
	var jahr = RegExp.$3*1;
	if (tag == 0 && monat == 0 && jahr == 0) {
	  expr = /(\d+)-(\d+)-(\d+)/;
	  expr.exec(dat);
	  jahr = RegExp.$1*1;
	  monat = RegExp.$2*1;
	  tag = RegExp.$3*1;
	}
	if (jahr < 100) jahr += 2000;
	if (monat < 3) { jahr--; monat += 12; }
	var zahl = Math.floor(jahr*365.25)*1+
	     	   Math.floor((monat+1)*30.6)*1+
	           tag*1+5;
	return zahl;
}
function zahl2dat(zahl) {
	zahl -= 127.25;
	var jahr = Math.floor(zahl/365.25)*1;
	var t= Math.floor((zahl/365.25-jahr)*365.25+0.000001)*1;
	var monat = Math.floor((t+0.4)/30.6+0.000001)*1;
	var tag = ((t+0.4)/30.6-monat)*30.6+1+0.0000001;
	var tag = Math.floor(tag)*1;
	monat = (monat + 2) % 12 + 1;
	if (monat < 3) jahr++;
	if (monat < 10) monat = "0"+monat;
	if (tag < 10) tag = "0"+tag;
	var x = tag+"."+monat+"."+jahr;
	//alert(x);
	return x;
}
function addvon(von,tage,bis,add,min,nocheck) {
	// Addiere zum von-Feld und schreibe Ergebnis in "von" und
	// berechne Tagesanzahl und korrigiere "bis", wenn tage < min
	var zahl = dat2zahl(von.value);
	//alert(zahl);
	zahl += add;
	if (nocheck != 1) zahl = checkDat(zahl,0);
	var datum = zahl2dat(zahl);
	von.value = datum;
	var d = dat2zahl(bis.value)-zahl;
	if (d < min) { d = min; bis.value = zahl2dat(zahl+min); }
	tage.value = d;
	if (document.data.needPrice) document.data.needPrice.value = 1;
}
function addbis(von,tage,bis,add,min,nocheck) {
	// Addiere zum bis-Feld und schreibe Ergebnis in "bis" und
	// berechne Tagesanzahl und korrigiere "von", wenn tage < min
	var zahl = dat2zahl(bis.value);
	zahl += add;
	if (nocheck != 1) zahl = checkDat(zahl,min);
	var datum = zahl2dat(zahl);
	bis.value = datum;
	var d = zahl-dat2zahl(von.value);
	if (d < min) { d = min; von.value = zahl2dat(zahl-min); }
	tage.value = d;
	if (document.data.needPrice) document.data.needPrice.value = 1;
}
function diff(von,tage,bis,min) {
	// Addiere Tage zum von-Feld und schreibe Ergebnis ins bis-Feld
	if (tage.value >= min) {
	  var zahl = dat2zahl(von.value)*1+tage.value*1;
	  var datum = zahl2dat(zahl);
	  bis.value = datum;
	}
	else {
	  tage.value = min;
	  var datum = zahl2dat(dat2zahl(von.value)*1+min*1);
	  bis.value = datum;
	}
	if (document.data.needPrice) document.data.needPrice.value = 1;
}

function getLeft(elem) {	// Absolute Position ermitteln (Left)
	var left = elem.offsetLeft;
	if (elem.offsetParent) left += getLeft(elem.offsetParent);
	return left;
}
function getTop(elem) {		// Absolute Position ermitteln (Top)
	var top = elem.offsetTop;
	if (elem.offsetParent) top += getTop(elem.offsetParent);
	return top;
}
var _oldbig = null;
function showFromThumb(thumb,id,image,s) {
	// Anzeige eines großen Bildes zum Thumbnail
	//   thumb - Image-Element (Thumbnail)
	//   id    - ID des anzuzeigenden großen Bildes
	//   image - URL zum großen Bild
	//   s     - true: Anzeigen, false: Verstecken
	//alert(s);
	if (s) {
	        var big  = document.getElementById(id); 
		// big.src ist nicht gefüllt (soll erst bei Anzeige geladen werden)
		if (_oldbig) {
		  _oldbig.style.visibility = "hidden";
		}
		//alert(big.src);
		//big.src = image;
		//var t = getTop(thumb)+(thumb.offsetHeight/3)*2;
		//var t = getTop(thumb)-Math.round(thumb.offsetHeight/3)*2;
		var t = getTop(thumb)-Math.round(big.height/2);
		//var l = getLeft(thumb)+Math.round(thumb.offsetWidth/3)*2;
		//alert(big.width);
		var l = getLeft(thumb)-big.width;
		var d = (window.innerHeight) ? window.innerHeight : document.body.offsetHeight; // Fenster
		//alert("top="+t+", body="+document.body.offsetHeight+", window="+window.innerHeight);
		// In FireFox ist offsetheight die Gesamtgröße des Docs (u.U. größer als Anzeigebereich)
		if (false) {
		  // Firefox kennt kein window.event??
		  var m = (window.event.screenY) ? window.event.screenY : window.event.clientY;	  // Maus im Fenster
		  var o = (window.event.layerY) ? window.event.layerY : window.event.offsetY;	  // Maus im Element
		  //alert("Fenster="+m+", Element="+o);
		  var f = m - o;	// Element Oberkante
		  //if (t + big.height > d) t = d - big.height;
		  if (f + big.height > d) t -= ((f+big.height)-d)/2;
		}
		//if (big.height + t > d) t = d - big.height;
		big.style.top = t;
		big.style.left = l;
		big.style.visibility = "visible";
		_oldbig = big;
	}
	else {
		_oldbig.style.visibility = "hidden";
	}
}

// ************* Input-Box-Stuff ********************
var noClose = false;
function boxClick(frameId,name,id,wert,text) {
	wert = wert.replace(/&nl;/g,"\n");
	eval("document.data."+name+".value=wert");
	var f = document.getElementById(frameId);
	f.style.visibility = 'hidden';
}
function boxPos(elem,typ) {
	var pos = 0;
	var s = "";
	while (elem) {
	        s += elem.nodeName+"("+elem[typ]+") ";
		pos += elem[typ];
	        elem = elem.offsetParent;
	}
	//alert(typ+": "+s);
	return pos;
}	
function boxShow(elem,f,s) {
	// elem = Eingabefeld, f = Box-Frame
	window.status = f.src+", noClose="+noClose;
	if (s) {
	  //alert("show");
	  //var u = encodeURIComponent(elem.value);  // Codiert Unicode
	  //alert(escape(elem.value));
	  var u = escape(elem.value);
	  if (f.src.match(/&t=.+/))
	    f.src=f.src.replace(/&t=.+/,"&t="+u);
	  else
	    f.src += "&t="+u;
	  f.src += "&flag="+Math.random();
	  //alert("src="+f.src);
	  var top  = boxPos(elem,'offsetTop');
	  var left = boxPos(elem,'offsetLeft');
	  //alert("top="+top+", left="+left);
	  // Im I-Frame ist die Position aus boxPos 
	  // 1Px zu tief und 2Px zu weit rechts
	  // parent = window wenn kein Parentfenster existiert
	  //alert(parent == window);
	  var offs = (parent == window) ? 1 : 0;
	  top += elem.offsetHeight+offs;
	  f.style.top = top;
	  f.style.left = left+offs*2;
	  f.style.width = elem.offsetWidth-2;
	  // Debugging:
	  //f.style.visibility = 'visible';
	  //Visible wird erst nach Ermittlung der
	  //Anzahl Zeilen in box.php gesetzt
	}
	else if (!noClose) {
	  //alert("hide");
	  f.style.top = -10000;
	  f.style.left = -10000;
	  f.style.visibility = 'hidden';
	}
}
function boxKey(elem,f,onfocus) {
	// elem = Eingabefeld, f = Box-Frame
	//alert("boxkey");
	noClose = false;
	if (onfocus != "") eval(onfocus+"(elem)");
	boxShow(elem,f,elem.value.match(/.*\w.*/)!=null);
}
function boxBlur(elem,f) {
	//alert("boxblur");
	blurelem = elem;
	blurf = f;
	setTimeout('boxShow(blurelem,blurf,false)',200);
}
// End of box stuff

function home() {
	if (parent != null) {
		try {
			parent.gohome();
		}
		catch (e) {
			alert(e);
		}
	}
}

function findPos(obj) {
  var pos = new Object;
  pos.left = 0;
  pos.top = 0;
  if (obj.offsetParent)	{
	while (obj.offsetParent) {
	  pos.left += obj.offsetLeft;
		pos.top  += obj.offsetTop;
		obj = obj.offsetParent;
	}
  }	
  else if (obj.x) {
  	pos.left = obj.x;
	pos.top = obj.y;
  }
  return pos;
}

function showkalender(client,lang,name,edit) {
  var pos = findPos(edit);
  var f = document.getElementById(name);
  f.src = "minikalender.cgi?name="+edit.name+"&default="+edit.value+"&client="+client+"&lang="+lang;
  f.style.display='inline';
  f.style.top = pos.top + 22;
  f.style.left = pos.left;
}

// End of functions.js //

