// Oesterreichisches Filmservice: katalog tips
// (c) mass:werk 2005; www.masswerk.at

// globals

var tipPosX=20;
var tipPosY=20;
var tipLast=null;
var isIE5mac= ((navigator.appName=='Microsoft Internet Explorer') && (navigator.appVersion.indexOf("Mac") != -1) && (navigator.appVersion.indexOf('MSIE 5.0') != -1))? true:false;

// global conf to be defined elsewhere (just defaults)
var tips= {}
var tipMaxWidth= 220;
var tipXOffset= 0;
var tipYOffset= 12;
var tipRightPadding=16;
var tipHead='<table border="0" cellspacing="0" cellpadding="0" width="'+tipMaxWidth+'"><tr><td>';
var tipTrail='</td></tr></table>';


// functions & handlers

function tipShow(obj,tip) {
	if ((obj) && (tips[tip]) && (obj!=tipLast)) {
		tipGetElementPos(obj);
		var wd=tipGetWindowDims();
		var ed=tipWriteElement('tip',tipHead+tips[tip]+tipTrail);
		var x=Math.min(tipPosX+tipXOffset,wd.w+wd.x-ed.w-tipRightPadding);
		var y=tipPosY+tipYOffset;
		tipSetPos('tip',x,y);
		tipSetVisibility('tip',true)
	}
}

function tipHide() {
	tipSetVisibility('tip',false);
	tipLast=null
}

function tipGetElementPos(obj) {
	if (document.getElementById) {
		// dom
		var x=((obj.firstChild) && (obj.firstChild.offsetLeft))? obj.firstChild.offsetLeft:obj.offsetLeft;
		var y=((obj.firstChild) && (obj.firstChild.offsetTop))? obj.firstChild.offsetTop:obj.offsetTop;
		while (obj.offsetParent) {
			obj=obj.offsetParent;
			x+=obj.offsetLeft;
			y+=obj.offsetTop
		};
		// ms bugfix
		if (isIE5mac) {
			if (document.body.leftMargin) x+=parseInt(document.body.leftMargin);
			if (document.body.topMargin) y+=parseInt(document.body.topMargin);
		};
		tipPosX=x;
		tipPosY=y
	}
	else if (document.all) {
		// ie 4, ie 5.0 win
		var x=obj.offsetLeft;
		var y=obj.offsetTop;
		if ((obj.offsetParent) && ((obj.offsetParent.offsetTop) || (obj.offsetParent.offsetLeft))) {
			// IE 5 win
			while (obj.offsetParent) {
				obj=obj.offsetParent;
				x+=obj.offsetLeft;
				y+=obj.offsetTop
			}
		}
		else {
			// IE 4
			while (obj.parentElement) {
				obj=obj.parentElement;
				if (obj.offsetLeft) { x+=obj.offsetLeft; };
				if (obj.offsetTop) { y+=obj.offsetTop; };
			}
		};
		tipPosX=x;
		tipPosY=y
	}
	else if (document.layers) {
		tipPosX=obj.x;
		tipPosY=obj.y
		
	}
}

function tipGetWindowDims() {
	var w=0;
	var h=0;
	var x=0;
	var y=0;
	if (self.innerWidth) w=parseInt(self.innerWidth,10)
	else if ((document.body) && (document.body.clientWidth)) w=parseInt(document.body.clientWidth,10)
	else if (self.width) w=parseInt(self.width,10);
	if (self.innerHeight) h=parseInt(self.innerHeight,10)
	else if ((document.body) && (document.body.clientHeight)) h=parseInt(document.body.clientHeight,10)
	else if (self.height) h=parseInt(self.height,10);
	//self.document.body.scrollLeft:self.pageXOffset
	if (typeof self.pageXOffset != 'undefined') {
		x=self.pageXOffset;
		y=self.pageYOffset
	}
	else if ((document.body) && (typeof document.body.scrollLeft != 'undefined')) {
		x=document.body.scrollLeft;
		y=self.document.body.scrollTop
	};
	return {w:w,h:h,x:x,y:y}
}

function tipWriteElement(el,t) {
	if ((document.getElementById) || (document.all)) {
		var obj=(document.getElementById)? document.getElementById(el) : document.all[el];
		obj.innerHTML=t;
		var h=(obj.children)? obj.children[0].offsetHeight : obj.offsetHeight;
		var w=(obj.children)? obj.children[0].offsetWidth : obj.offsetWidth;
		return {w:parseInt(w,10), h:parseInt(h,10)}
	}
	else if (document.layers) {
		var obj=document.layers[el];
		obj.document.open();
		obj.document.write(t);
		obj.document.close();
		return {w:obj.clip.bottom, h:obj.clip.right}
	}
}

function tipSetPos(el,x,y) {
	if ((document.getElementById) || (document.all)) {
		var obj=(document.getElementById)? document.getElementById(el) : document.all[el];
		if (!obj) return;
		obj.style.pixelLeft=x;
		obj.style.pixelTop=y;
		// gecko
		obj.style.left=x+'px';
		obj.style.top=y+'px'
	}
	else if (document.layers) {
		if (!document.layers[el]) return;
		document.layers[el].moveTo(x,y)
	}
}

function tipSetVisibility(el,v) {
	if (document.getElementById) {
		var obj=document.getElementById(el);
		if (!obj) return;
		obj.style.visibility=(v)? 'visible' : 'hidden'
	}
	else if (document.all) {
		if (!document.all[el]) return;
		document.all[el].style.visibility=(v)? 'visible' : 'hidden'
	}
	else if (document.layers) {
		if (!document.layers[el]) return;
		document.layers[el].visibility=(v)? 'show' : 'hide'
	}
}

// eof
