function Coord(x, y){
  this.x = (!x)?0:x;
  this.y = (!y)?0:y;

  //this.toString = objToString;
  //this.equals = equalsCoord;
}

function getLayerRef (id, document) {
  if (!document)
    document = window.document;
  if (document.layers) {
    for (var l = 0; l < document.layers.length; l++)
      if (document.layers[l].id == id)
        return document.layers[l];
    for (var l = 0; l < document.layers.length; l++) {
      var result = getLayerRef(id, document.layers[l].document);
      if (result)
        return result;
    }
    return null;
  }
  else if (document.all) {
    return document.all[id];
  }
  else if (document.getElementById) {
    return document.getElementById(id);
  } else {
    return null;
  }
}

function setPosition(objLayer, coords){
    if (document.layers) {
      objLayer.top = coords.y;
      objLayer.left = coords.x;
    } else if (window.opera) {
      objLayer.style.top = coords.y;
      objLayer.style.left = coords.x;
    } else if (document.all) {
      objLayer.style.pixelTop = coords.y;
      objLayer.style.pixelLeft = coords.x;
    } else if (document.getElementById) {
      objLayer.style.top = coords.y + 'px';
      objLayer.style.left = coords.x + 'px';
    }
}

function setPositionById(id, coords){
  var objLayer = getLayerRef(id);
  if(typeof objLayer == undefined) return;

	if (document.layers) {
    objLayer.top = coords.y;
    objLayer.left = coords.x;
  } else if (window.opera) {
    objLayer.style.top = coords.y;
    objLayer.style.left = coords.x;
  } else if (document.all) {
    objLayer.style.pixelTop = coords.y;
    objLayer.style.pixelLeft = coords.x;
  } else if (document.getElementById) {
    objLayer.style.top = coords.y + 'px';
    objLayer.style.left = coords.x + 'px';
  }
}

function setVisibility(objLayer, visible) {
	if(document.layers){
    objLayer.visibility  =
        (visible == true) ? 'show' : 'hide';
  } else {
    objLayer.style.visibility =
        (visible == true) ? 'visible' : 'hidden';
  }
}

function setVisibilityById(id, visible) {
	var objLayer = getLayerRef( id, document );
	setVisibility( objLayer, visible );
}

function getLayerCoords( objLayer ){
  var coords = new Coord();

  if (document.layers) {
    coords.y = objLayer.top;
    coords.x = objLayer.left;
  } else if ( window.opera ) {
    coords.y = objLayer.style.top;
    coords.x = objLayer.style.left;
  } else if (document.all) {
    o = objLayer;
    while(o.offsetParent) {
      coords.y += parseInt(o.offsetTop);
      coords.x += parseInt(o.offsetLeft);
      o = o.offsetParent;
    }
  } else if (document.getElementById) {
    coords.y = parseInt( document.defaultView.getComputedStyle(objLayer, '').getPropertyValue('top') );
    coords.x = parseInt( document.defaultView.getComputedStyle(objLayer, '').getPropertyValue("left") );
  }

  return coords;
}

function getLayerCoordsById( id ){
  var objLayer = getLayerRef(id);
  var coords = new Coord();

  if (document.layers) {
    coords.y = objLayer.top;
    coords.x = objLayer.left;
  } else if ( window.opera ) {
    coords.y = objLayer.style.top;
    coords.x = objLayer.style.left;
  } else if (document.all) {
    o = objLayer;
    while(o.offsetParent) {
      coords.y += parseInt(o.offsetTop);
      coords.x += parseInt(o.offsetLeft);
      o = o.offsetParent;
    }
  } else if (document.getElementById) {
    coords.y = parseInt( document.defaultView.getComputedStyle(objLayer, '').getPropertyValue('top') );
    coords.x = parseInt( document.defaultView.getComputedStyle(objLayer, '').getPropertyValue("left") );
  }

  return coords;
}

function writeLayer(id, text, frame){
	// schreibt...
	// 'text' in den Layer...
	// 'id' in dem Frame...
	// 'frame'(optional)
         var d = (frame) ? eval("window.parent.frames['"+frame+"'].document."+idName) : getLayerRef(id);
	if(document.layers){ // Ns4: *schreibe in Layer - Special*
		d.document.open();
		d.document.write(text);
		d.document.close();
	}
         else{ // das Gleiche für alle andren Browser
	eval(d).innerHTML = text;}
	return d;
}


function writeError(id, errorMesg, buttons){
	// Schreibt eine Fehlermeldung,  schickt sie an die Funktion writeLayer() und blendet den ErrorLayer ein
	// (string)	id = Name des Layers
	// (string) 	errorMesg = Fehlermeldung(Text)
	// (array) 	buttons = Array mit den Namen der Buttons und deren Links(new Array('abbrechen', 'window.close()'))
         var mesg = "<table class=\"error\"><tr><td class=\"errorStyle\"><br />"+errorMesg+"<form name=\"errorForm\" style=\"text-align: center;\" onclick=\"return false;\">";
	for(i = 0; i < buttons.length; i++ ){
		mesg += "<input type=\"submit\" onclick=\""+buttons[i+1]+"\" class=\"button\" value=\""+buttons[i]+"\" />\n";
		i++;
	}
         mesg += "<br /><br /></td></tr></table>";
	if(d = writeLayer(id, mesg)){
         	setVisibility(d, 1)
		return true;
	}
	else{
         	return false;
	}
}