/* Copyright (c) 1998-2010, FUNIX.NL. All rights reserved
 * $Id: mouseover_info_driver.js,v 1.1 2010/06/03 10:02:16 amrit Exp $
 */

function ExtraHoverInfo(){
	this.thumbDisplay = null;
	this.uniqueID     = '';
	this.activatorID  = '';
	var pThis         = this;
	
	this.init = function (activatorID, displayWidth) {
		if (!displayWidth) displayWidth = 400  ; else displayWidth = parseInt(displayWidth);
		this.activatorID = activatorID;
		var thumbSink = this.getListElementsByClassName('thumbSink');
		if (thumbSink.length == 0)  {
			this.thumbDisplay = document.createElement('div');

			Element.extend(this.thumbDisplay);
			this.thumbDisplay.addClassName('pending').hide();
			this.thumbDisplay.style.position = 'absolute';
			this.thumbDisplay.style.overflow = 'hidden';
			this.thumbDisplay.style.padding = '5px';
			this.thumbDisplay.style.border   = '1px solid white';
			this.thumbDisplay.setAttribute('uniqueID','empty');
			this.thumbDisplay.className = 'thumbSink';
			this.thumbDisplay.style.width = displayWidth+'px';
			this.thumbDisplay.style.height = 'auto';
			this.thumbDisplay.style.backgroundColor = "#99c1f4";
			var navi = navigator.appVersion;
			if(navi.indexOf("MSIE")>-1){
				this.thumbDisplay.style.filter = 'alpha(opacity=90)';
			} else {
				this.thumbDisplay.style.opacity =  0.9;
			}
			this.thumbDisplay.innerHTML = 'Test Data';
			
			// insert it in the document
			document.body.appendChild(this.thumbDisplay);
		}
		
		
		//------infoActivators only-----------------------------------------
		var infoActivator = this.getListElementsByClassName(this.activatorID);
		
		for (var i=0; i < infoActivator.length; i++) {
			var thumbFireElement = infoActivator[i];
			thumbFireElement.style.cursor = 'pointer';
			var showMoving       = thumbFireElement.getAttribute('showMoving');

			thumbFireElement.onmouseout = function(e) {
				pThis.thumbDisplay.hide();
			};
			
			if (showMoving == 'true')  {
				thumbFireElement.onmousemove = function(e) {
					pThis.updateThumb(e);
				}
			} else {
				thumbFireElement.onmouseover = function(e) {
					pThis.updateThumb(e);
				}
			}
		}
	}
	
	this.mouseX = function(evt) {
		if (evt.pageX) return evt.pageX;
		else if (evt.clientX)
		   return evt.clientX + (document.documentElement.scrollLeft ?
		   document.documentElement.scrollLeft :
		   document.body.scrollLeft);
		else return null;
	}
	
	
	this.mouseY = function(evt) {
		if (evt.pageY) return evt.pageY;
		else if (evt.clientY)
		   return evt.clientY + (document.documentElement.scrollTop ?
		   document.documentElement.scrollTop :
		   document.body.scrollTop);
		else return null;
	}


	this.updateThumb = function (e) {
		var evt = e ? e : window.event;
		var src = evt.srcElement ?  evt.srcElement : evt.target;
		
		while (!src.getAttribute('uniqueID')) {
			src = src.parentNode;
			if (src.tagName=='body') break;
		}
		var uniqueID            = src.getAttribute('uniqueID');
		
		if (uniqueID) {
			var lThumbElement = pThis.thumbDisplay;
			var lastUniqueID  = lThumbElement.getAttribute('uniqueID');
			if (lastUniqueID != uniqueID) {
				lThumbElement.setAttribute('uniqueID',uniqueID);
				//update content  class=popupInfo
				
				var popupInfolist = this.getListElementsByClassName('popupInfo',src);
				if(popupInfolist.length > 0) {
					var newInfoHolder = popupInfolist[0];
					lThumbElement.innerHTML = newInfoHolder.innerHTML;
				}
				
			}
			var thumbWidth = (parseInt(lThumbElement.style.width));
			var useX = this.mouseX(evt) - Math.floor(thumbWidth/2)
			
			
			var useY = this.mouseY(evt) + 8;
			lThumbElement.style.left = useX + 'px';
			lThumbElement.style.top = useY + 'px';
			lThumbElement.show();
		}
	}


	this.getListElementsByClassName = function (searchClass,node,tag) {
	 	var classElements = new Array();
		if ( node == null )
			node = document;
			if ( tag == null )
				tag = '*';
			var els = node.getElementsByTagName(tag);
			var elsLen = els.length;
			var pattern = new RegExp('(^|\\s)'+searchClass+'(\\s|$)');
			for (i = 0, j = 0; i < elsLen; i++) {
				if ( pattern.test(els[i].className) ) {
					classElements[j] = els[i];
						j++;
				}
			}
			return classElements;
	}
}






