/**
* oft genutzte Objekte in DHTML:
* Coord
* Canvas
* oft genutzt Funktionen in DHTML
* @return LayerReference getLayerRef(String ID)
* @return void setPosition(LayerReference objLayer, Coord coords)
* @return void setVisibility(LayerReference objLayer, boolean visible)
* @return Coord getMouseXY(evt)
* @return void setVisibility4DivByPrefix(prefix, visible)
*/
// Objekte
function Coord(x, y){
this.x = (!x)?0:x;
this.y = (!y)?0:y;
this.toString = objToString;
this.equals = equalsCoord;
}
function Canvas(x, y, width, height){
this.width = (!width) ? 0 : parseInt(width, 10);
this.height = (!height)? 0 : parseInt(height, 10);
this.Coord = Coord;
this.Coord(x, y);
this.equalsCoord = this.equals;
this.equals = equalsCanvas;
}
function objToString(obj){
var o=obj || this;
var ret = "{";
for(p in o ){
if (typeof o[p] == "function" || typeof o[p] == "object") continue;
if(ret.length > 1)
ret += ",";
ret += p + ":" + o[p];
}
return ret + "}";
}
function equalsCoord(/*Coord*/ c){
return (this.x == c.x && this.y == c.y);
}
function equalsCanvas(/*Canvas*/ c){
return ( this.equalsCoord == c.equalsCoord && this.width == c.width && this.height == c.height);
}
Canvas.prototype.isCoordInside = /*boolean*/ function(/* Coord */ coord){
if(coord.x > this.x && (coord.x < this.x + this.width)
&& coord.y > this.y && (coord.y < this.y + this.height) ){
return true;
}
return false;
}
// Funktionen
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);
}
}
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.top = 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 setVisibility4DivByPrefix(prefix, visible, d){
if (!d)
d = window.document;
if(document.layers){
for (var l = 0; l < d.layers.length; l++){
if(d.layers[l].id.substr(0, prefix.length ) == prefix)
setVisibility(d.layers[l], visible);
setVisibility4DivByPrefix(prefix,
visible,
d.layers[l].document);
}
} else if(document.all) {
var layers = document.all.tags("div");
for(i=0; i < layers.length; i++) {
if(layers[i].id.substr(0, prefix.length ) == prefix )
setVisibility(document.all.tags("div")[i], visible);
}
} else if(document.getElementsByTagName) {
var layers = document.getElementsByTagName("div");
for(i=0; i < layers.length; i++){
if(layers[i].id.substr(0, prefix.length ) == prefix)
setVisibility(layers[i], visible);
}
}
}
/*
function getMouseXY(evt) {
e = evt || window.event;
if(!e) return null;
if(document.layers) {
return new Coord(e.pageX, e.pageY);
}else if(window.opera){
return new Coord(e.clientX, e.clientY);
}else if(document.all ) {
return new Coord(e.clientX + document.body.scrollLeft, e.clientY + document.body.scrollTop);
}else if(document.getElementById) {
return new Coord(e.pageX , e.pageY );
}
}
*/
function getMouseXY(ev) {
var pos = new Coord();
if(ev.pageX){
pos.x = ev.pageX;
pos.y = ev.pageY;
} else if(window.event && window.event.clientX) {
var isStrictMode = document.compatMode && document.compatMode != 'BackCompat' ? true : false;
var scrollX = isStrictMode ? document.documentElement.scrollLeft : document.body.scrollLeft;
var scrollY = isStrictMode ? document.documentElement.scrollTop : document.body.scrollTop;
pos.x = window.event.clientX + scrollX;
pos.y = window.event.clientY + scrollY;
}
return pos;
}
function getPageCoords (element) {
var coords = new Coord();
while (element) {
coords.x += element.offsetLeft;
coords.y += element.offsetTop;
element = element.offsetParent;
}
return coords;
}
Function.prototype.bind = function(object) {
var __method = this;
return function() {
__method.apply(object, arguments);
};
};
function registerNodeListener(obj, evType, fn ) {
try {
if( obj.addEventListener ) {
obj.addEventListener(evType, fn, false);
} else if( obj.attachEvent ) {
obj.attachEvent( "on"+evType, fn );
} else {
throw "Unsupported browser!";
}
} catch(e) {
alert('exception ' + e.message + ' while trying to add a listener to ' + obj + ', event: ' + evType + ', function: ' + fn);
}
return {'owner' : obj, 'type' : evType, 'func' : fn };
}
function removeNodeListener( nodeInfo ) {
if(!nodeInfo){
return;
}
if( nodeInfo.owner.removeEventListener ) {
nodeInfo.owner.removeEventListener(nodeInfo.type, nodeInfo.func, false);
} else if( nodeInfo.owner.detachEvent ) {
nodeInfo.owner.detachEvent("on" + nodeInfo.type, nodeInfo.func);
} else {
throw "Unsupported browser!";
}
}