/**
 * add onmouseover behavior to required elements
 * (freely adapted from http://www.quirksmode.org/)
 *
 * RollOver behavior is attached to an IMG or to a
 * related node (parent/sibling) of type A or BUTTON
 * when a class 'rollover' is found
 *
 * Another rollover behavior can be attached if a ID
 * name of 'app_preview' is found (see code)
 * in such a case, a child node of type IMG is created inside
 * the app_preview tag, and parent/sibling node of IMG tags are
 * also scanned for a 'preview' class
 *
 * (c)2005, didier Belot <dib@idee-informatique.com>
 *
 */
 
var W3CDOM = document.getElementById && document.createElement;

var mouseOvers = new Array();
var mouseOuts = new Array();
var imgIndex=0;
// preview
var appPreview = null;
var previewImg = new Array();
var previewIndex = 0;

function setPreview() {
	if(!W3CDOM) return;
	if(appPreview != null) return;
	p = getNodeById('app_preview');
	if(!p) return;
    // place it ??
    var hover = getNodeById('app_preview_hover');
    if (hover ){
        var top ;//= pageLocation(hover,'Top');
        top = hover.offsetTop;
        p.style.top = top + 'px';
    }
	img = document.createElement('img');
	p.appendChild(img);
	appPreview = img;
	appPreview.style.visibility = 'hidden';
	appPreview.parentNode.style.visibility = 'hidden';
}
	
function setOver() {
	if(this.im) {
		this.im.src = mouseOvers[this.number].src;
	} else {
		this.src = mouseOvers[this.number].src;
	}
	if( typeof this.preview != 'undefined' && appPreview) {
		appPreview.src = previewImg[this.preview].src;
		appPreview.style.visibility = 'visible';
		appPreview.parentNode.style.visibility = 'visible';
	}
}

function setOut() {
	if(this.im) {
		this.im.src = mouseOuts[this.number].src;
	} else if(this.number) {
		this.src = mouseOuts[this.number].src;
	}
	if(typeof this.preview != 'undefined'  && appPreview) {
		appPreview.style.visibility = 'hidden';
		appPreview.parentNode.style.visibility = 'hidden';
	}
}

function allowedParent(obj) {
	var tagName = obj.tagName.toLowerCase();
	return ( tagName == 'a' || tagName == 'button' ) && 
		obj.className.indexOf('rollover') != -1;
}
function allowedSibling(obj) {
	var tagName = obj.tagName.toLowerCase();
	return tagName == 'a' && obj.className.indexOf('rollover') != -1;
}

function allowedPreview(obj) {
	var tagName = obj.tagName.toLowerCase();
	return tagName == 'a' && obj.className.indexOf('preview') != -1;
}

/* must be called for each container where we want 
 * rollover behavior for link/buttons/img
 */
function setRollOver(id) {
	if(!W3CDOM) return;
	var p = document.getElementById(id);
	if(!p) return;
	var imgs = p.getElementsByTagName('img');
	var x, lp = imgs.length, r = null;
	for(x=0; x < lp; x++) {
		im = imgs[x];
		if(im.parentNode && im.parentNode.nodeType == 1 && allowedParent( im.parentNode ) ) {
			r = im.parentNode;
			r.onmouseover = setOver;
			r.onmouseout = setOut;
			r.im = im;
			r.number = imgIndex;
			//alert('rollover on parent node!');
		}else if(im.nextSibling && im.nextSibling.nodeType == 1 && allowedSibling( im.nextSibling ) ) {
			r = im.nextSibling;
			r.onmouseover = setOver;
			r.onmouseout = setOut;
			r.im = im;
			r.number = imgIndex;
			//alert('rollover on sibling node!\n num =' + imgIndex);
		}else if ( im.className.indexOf('rollover') != -1 ) {
			imgs[x].onmouseover = setOver;
			imgs[x].onmouseout = setOut;
			imgs[x].number = imgIndex;
		}
		// detect image suffix
		var suffix = imgs[x].src.substring( imgs[x].src.lastIndexOf('.'));
		mouseOuts[imgIndex] = new Image();
		mouseOuts[imgIndex].src = imgs[x].src;
		mouseOvers[imgIndex] = new Image();
		mouseOvers[imgIndex].src = imgs[x].src.substring(0,imgs[x].src.lastIndexOf('.')) + '_ov' + suffix;
		imgIndex++;
		// detect links with preview
		// Note: preview are supposed to be JPEG images !!
		if(r && allowedPreview(r) ) {
			previewImg[previewIndex] = new Image();
			previewImg[previewIndex].src = imgs[x].src.substring(0,imgs[x].src.lastIndexOf('.')) + '_pr.jpg';
			r.preview = previewIndex;
			previewIndex++;
		}
	}
}

/*exame call:
function bluelineInit() {
	setBoxes();
	setPreview();
	setRollOver('rightcontent');
	setRollOver('members_sections');
}

addLoadEvent(bluelineInit);
*/

