/************************************************************************************************************



	Form field tooltip

	(C) www.dhtmlgoodies.com, September 2006



	This is a script from www.dhtmlgoodies.com. You will find this and a lot of other scripts at our website.	

	

	Terms of use:

	Look at the terms of use at http://www.dhtmlgoodies.com/index.html?page=termsOfUse

	

	Thank you!

	

	www.dhtmlgoodies.com

	Alf Magne Kalleland



************************************************************************************************************/



var DHTMLgoodies_globalTooltipObj;





/** 

Constructor 

**/

function DHTMLgoodies_formTooltip()

{

	var tooltipDiv;
	var tooltipText;
	var tooltipContentDiv;				// Reference to inner div with tooltip content
	var imagePath;						// Relative path to images
	var arrowImageFile;					// Name of arrow image
	var arrowImageFileRight;			// Name of arrow image
	var arrowRightWidth;
	var arrowTopHeight;
	var tooltipWidth;					// Width of tooltip
	var roundedCornerObj;				// Reference to object of class DHTMLgoodies_roundedCorners
	var tooltipBgColor;
	var closeMessage;					// Close message
	var activeInput;					// Reference to currently active input
	var tooltipPosition;				// Tooltip position, possible values: "below" or "right"
	var tooltipCornerSize;				// Size of rounded corners
	var displayArrow;					// Display arrow above or at the left of the tooltip?
	var cookieName;						// Name of cookie
	var disableTooltipPossibility;		// Possibility of disabling tooltip
	var disableTooltipByCookie;			// If tooltip has been disabled, save the settings in cookie, i.e. for other pages with the same cookie name.
	var disableTooltipMessage;
	var tooltipDisabled;
	var isMSIE;
	var tooltipIframeObj;
	var pageBgColor;					// Color of background - used in ie when applying iframe which covers select boxes
	var currentTooltipObj;				// Reference to form field which tooltip is currently showing for

	

	this.currentTooltipObj = false,
	this.tooltipDiv = false,
	this.tooltipText = false;
	this.imagePath = 'images/';
	this.arrowImageFile = 'green-arrow.gif';
	this.arrowImageFileRight = 'green-arrow-right.gif';
	this.tooltipWidth = 150;
	this.tooltipBgColor = '#66b2df';
	this.closeMessage = '<font style="color:#FFFFFF;"><b><br>CHIUDI</b></font>';
	this.disableTooltipMessage = '';
	this.activeInput = false;
	this.tooltipPosition = 'right';
	this.arrowRightWidth = 16;			// Default width of arrow when the tooltip is on the right side of the inputs.
	this.arrowTopHeight = 13;			// Default height of arrow at the top of tooltip
	this.tooltipCornerSize = 10;
	this.displayArrow = true;
	this.cookieName = 'DHTMLgoodies_tooltipVisibility';
	this.disableTooltipByCookie = false;
	this.tooltipDisabled = false;
	this.disableTooltipPossibility = false;
	this.tooltipIframeObj = false;
	this.pageBgColor = '#FFFFFF';
	
	DHTMLgoodies_globalTooltipObj = this;



	if(navigator.userAgent.indexOf('MSIE')>=0)this.isMSIE = true; else this.isMSIE = false;

}





DHTMLgoodies_formTooltip.prototype = {

	// {{{ initFormFieldTooltip()

    /**

     *

	 *

     *  Initializes the tooltip script. Most set methods needs to be executed before you call this method.

     * 

     * @public

     */		

	initFormFieldTooltip : function()

	{

		var formElements = new Array();

		var inputs = document.getElementsByTagName('INPUT');

		for(var no=0;no<inputs.length;no++){

			var attr = inputs[no].getAttribute('tooltipText');

			if(!attr)attr = inputs[no].tooltipText;

			if(attr)formElements[formElements.length] = inputs[no];

		}

			

		var inputs = document.getElementsByTagName('TEXTAREA');

		for(var no=0;no<inputs.length;no++){

			var attr = inputs[no].getAttribute('tooltipText');

			if(!attr)attr = inputs[no].tooltipText;

			if(attr)formElements[formElements.length] = inputs[no];

		}

		var inputs = document.getElementsByTagName('SELECT');

		for(var no=0;no<inputs.length;no++){

			var attr = inputs[no].getAttribute('tooltipText');

			if(!attr)attr = inputs[no].tooltipText;

			if(attr)formElements[formElements.length] = inputs[no];

		}

			

		window.refToFormTooltip = this;

		

		for(var no=0;no<formElements.length;no++){

			formElements[no].onclick = this.__displayTooltip;

		}

		this.addEvent(window,'resize',function(){ window.refToFormTooltip.__positionCurrentToolTipObj(); });

		

		this.addEvent(document.documentElement,'click',function(e){ window.refToFormTooltip.__autoHideTooltip(e); });

	}

	

	// }}}

	,		

	// {{{ setTooltipPosition()

    /**

     *

	 *

     *  Specify position of tooltip(below or right)

     *	@param String newPosition (Possible values: "below" or "right") 

     * 

     * @public

     */	

	setTooltipPosition : function(newPosition)

	{

		this.tooltipPosition = newPosition;

	}

	// }}}

	,		

	// {{{ setCloseMessage()

    /**

     *

	 *

     *  Specify "Close" message

     *	@param String closeMessage

     * 

     * @public

     */

	setCloseMessage : function(closeMessage)

	{

		this.closeMessage = closeMessage;

	}

	// }}}

	,	

	// {{{ setDisableTooltipMessage()

    /**

     *

	 *

     *  Specify disable tooltip message at the bottom of the tooltip

     *	@param String disableTooltipMessage

     * 

     * @public

     */

	setDisableTooltipMessage : function(disableTooltipMessage)

	{

		this.disableTooltipMessage = disableTooltipMessage;

	}

	// }}}

	,		

	// {{{ setTooltipDisablePossibility()

    /**

     *

	 *

     *  Specify whether you want the disable link to appear or not.

     *	@param Boolean disableTooltipPossibility

     * 

     * @public

     */

	setTooltipDisablePossibility : function(disableTooltipPossibility)

	{

		this.disableTooltipPossibility = disableTooltipPossibility;

	}

	// }}}

	,		

	// {{{ setCookieName()

    /**

     *

	 *

     *  Specify name of cookie. Useful if you're using this script on several pages. 

     *	@param String newCookieName

     * 

     * @public

     */

	setCookieName : function(newCookieName)

	{

		this.cookieName = newCookieName;

	}

	// }}}

	,		

	// {{{ setTooltipWidth()

    /**

     *

	 *

     *  Specify width of tooltip

     *	@param Int newWidth

     * 

     * @public

     */	

	setTooltipWidth : function(newWidth)

	{

		this.tooltipWidth = newWidth;

	}

	

	// }}}

	,		

	// {{{ setArrowVisibility()

    /**

     *

	 *

     *  Display arrow at the top or at the left of the tooltip?

     *	@param Boolean displayArrow

     * 

     * @public

     */	

	

	setArrowVisibility : function(displayArrow)

	{

		this.displayArrow = displayArrow;

	}

	

	// }}}

	,		

	// {{{ setTooltipBgColor()

    /**

     *

	 *

     *  Send true to this method if you want to be able to save tooltip visibility in cookie. If it's set to true,

     *	It means that when someone returns to the page, the tooltips won't show.

     * 

     *	@param Boolean disableTooltipByCookie

     * 

     * @public

     */	

	setDisableTooltipByCookie : function(disableTooltipByCookie)

	{

		this.disableTooltipByCookie = disableTooltipByCookie;

	}	

	// }}}

	,		

	// {{{ setTooltipBgColor()

    /**

     *

	 *

     *  This method specifies background color of tooltip

     *	@param String newBgColor

     * 

     * @public

     */	

	setTooltipBgColor : function(newBgColor)

	{

		this.tooltipBgColor = newBgColor;

	}

	

	// }}}

	,		

	// {{{ setTooltipCornerSize()

    /**

     *

	 *

     *  Size of rounded corners around tooltip

     *	@param Int newSize (0 = no rounded corners)

     * 

     * @public

     */	

	setTooltipCornerSize : function(tooltipCornerSize)

	{

		this.tooltipCornerSize = tooltipCornerSize;

	}

	

	// }}}

	,

	// {{{ setTopArrowHeight()

    /**

     *

	 *

     *  Size height of arrow at the top of tooltip

     *	@param Int arrowTopHeight

     * 

     * @public

     */	

	setTopArrowHeight : function(arrowTopHeight)

	{

		this.arrowTopHeight = arrowTopHeight;

	}

	

	// }}}

	,	

	// {{{ setRightArrowWidth()

    /**

     *

	 *

     *  Size width of arrow when the tooltip is on the right side of inputs

     *	@param Int arrowTopHeight

     * 

     * @public

     */	

	setRightArrowWidth : function(arrowRightWidth)

	{

		this.arrowRightWidth = arrowRightWidth;

	}

	

	// }}}

	,	

	// {{{ setPageBgColor()

    /**

     *

	 *

     *  Specify background color of page.

     *	@param String pageBgColor

     * 

     * @public

     */	

	setPageBgColor : function(pageBgColor)

	{

		this.pageBgColor = pageBgColor;

	}

	

	// }}}

	,		

	// {{{ __hideTooltip()

    /**

     *

	 *

     *  This method displays the tooltip

     *

     * 

     * @private

     */		

	__displayTooltip : function()

	{

		if(DHTMLgoodies_globalTooltipObj.disableTooltipByCookie){

			var cookieValue = DHTMLgoodies_globalTooltipObj.getCookie(DHTMLgoodies_globalTooltipObj.cookieName) + '';	

			if(cookieValue=='1')DHTMLgoodies_globalTooltipObj.tooltipDisabled = true;

		}	

		

		if(DHTMLgoodies_globalTooltipObj.tooltipDisabled)return;	// Tooltip disabled

		var tooltipText = this.getAttribute('tooltipText');

		DHTMLgoodies_globalTooltipObj.activeInput = this;

		

		if(!tooltipText)tooltipText = this.tooltipText;

		DHTMLgoodies_globalTooltipObj.tooltipText = tooltipText;



		

		if(!DHTMLgoodies_globalTooltipObj.tooltipDiv)DHTMLgoodies_globalTooltipObj.__createTooltip();

		

		DHTMLgoodies_globalTooltipObj.__positionTooltip(this);

		

		

		

	

		DHTMLgoodies_globalTooltipObj.tooltipContentDiv.innerHTML = tooltipText;

		DHTMLgoodies_globalTooltipObj.tooltipDiv.style.display='block';
		
		DHTMLgoodies_globalTooltipObj.tooltipDiv.style.color='#FFFFFF';
		DHTMLgoodies_globalTooltipObj.tooltipDiv.style.fontSize='10px';

		

		if(DHTMLgoodies_globalTooltipObj.isMSIE){

			if(DHTMLgoodies_globalTooltipObj.tooltipPosition == 'below'){

				DHTMLgoodies_globalTooltipObj.tooltipIframeObj.style.height = (DHTMLgoodies_globalTooltipObj.tooltipDiv.clientHeight - DHTMLgoodies_globalTooltipObj.arrowTopHeight);

			}else{

				DHTMLgoodies_globalTooltipObj.tooltipIframeObj.style.height = (DHTMLgoodies_globalTooltipObj.tooltipDiv.clientHeight);

			}

		}

		

	}

	// }}}

	,		

	// {{{ __hideTooltip()

    /**

     *

	 *

     *  This function hides the tooltip

     *

     * 

     * @private

     */		

	__hideTooltip : function()

	{

		try{

			DHTMLgoodies_globalTooltipObj.tooltipDiv.style.display='none';

		}catch(e){

		}

		

	}

	// }}}

	,

	// {{{ getSrcElement()

    /**

     *

	 *

     *  Return the source of an event.

     *

     * 

     * @private

     */		

    getSrcElement : function(e)

    {

    	var el;

		if (e.target) el = e.target;

			else if (e.srcElement) el = e.srcElement;

			if (el.nodeType == 3) // defeat Safari bug

				el = el.parentNode;

		return el;	

    }	

	// }}}

	,

	__autoHideTooltip : function(e)

	{

		if(document.all)e = event;	

		var src = this.getSrcElement(e);

		if(src.tagName.toLowerCase()!='input' && src.tagName.toLowerCase().toLowerCase()!='textarea' && src.tagName.toLowerCase().toLowerCase()!='select')this.__hideTooltip();



		var attr = src.getAttribute('tooltipText');

		if(!attr)attr = src.tooltipText;

		if(!attr){

			this.__hideTooltip();

		}	

		

	}

	// }}}

	,		

	// {{{ __hideTooltipFromLink()

    /**

     *

	 *

     *  This function hides the tooltip

     *

     * 

     * @private

     */	

	__hideTooltipFromLink : function()

	{

		

		this.activeInput.focus();

		window.refToThis = this;

		setTimeout('window.refToThis.__hideTooltip()',10);

	}

	// }}}

	,		

	// {{{ disableTooltip()

    /**

     *

	 *

     *  Hide tooltip and disable it

     *

     * 

     * @public

     */	

	disableTooltip : function()

	{

		this.__hideTooltipFromLink();

		if(this.disableTooltipByCookie)this.setCookie(this.cookieName,'1',500);	

		this.tooltipDisabled = true;	

	}	

	// }}}

	,		

	// {{{ __positionTooltip()

    /**

     *

	 *

     *  This function creates the tooltip elements

     *

     * 

     * @private

     */	

	__createTooltip : function()

	{

		this.tooltipDiv = document.createElement('DIV');

		this.tooltipDiv.style.position = 'absolute';

		

		if(this.displayArrow){

			var topDiv = document.createElement('DIV');

			

			if(this.tooltipPosition=='below'){

				

				topDiv.style.marginLeft = '20px';

				var arrowDiv = document.createElement('IMG');

				arrowDiv.src = this.imagePath + this.arrowImageFile + '?rand='+ Math.random();

				arrowDiv.style.display='block';

				topDiv.appendChild(arrowDiv);

					

			}else{

				topDiv.style.marginTop = '5px';

				var arrowDiv = document.createElement('IMG');

				arrowDiv.src = this.imagePath + this.arrowImageFileRight + '?rand='+ Math.random();	

				arrowDiv.style.display='block';

				topDiv.appendChild(arrowDiv);					

				topDiv.style.position = 'absolute';			

			}

			

			this.tooltipDiv.appendChild(topDiv);	

		}

		

		var outerDiv = document.createElement('DIV');

		outerDiv.style.position = 'relative';

		outerDiv.style.zIndex = 1000;

		if(this.tooltipPosition!='below' && this.displayArrow){			

			outerDiv.style.left = this.arrowRightWidth + 'px';

		}

				

		outerDiv.id = 'DHTMLgoodies_formTooltipDiv';

		outerDiv.className = 'DHTMLgoodies_formTooltipDiv';

		outerDiv.style.backgroundColor = this.tooltipBgColor;

		this.tooltipDiv.appendChild(outerDiv);



		if(this.isMSIE){

			this.tooltipIframeObj = document.createElement('<IFRAME name="tooltipIframeObj" width="' + this.tooltipWidth + '" frameborder="no" src="about:blank"></IFRAME>');

			this.tooltipIframeObj.style.position = 'absolute';

			this.tooltipIframeObj.style.top = '0px';

			this.tooltipIframeObj.style.left = '0px';

			this.tooltipIframeObj.style.width = (this.tooltipWidth) + 'px';

			this.tooltipIframeObj.style.zIndex = 100;

			this.tooltipIframeObj.background = this.pageBgColor;

			this.tooltipIframeObj.style.backgroundColor= this.pageBgColor;

			this.tooltipDiv.appendChild(this.tooltipIframeObj);	

			if(this.tooltipPosition!='below' && this.displayArrow){

				this.tooltipIframeObj.style.left = (this.arrowRightWidth) +  'px';	

			}else{

				this.tooltipIframeObj.style.top = this.arrowTopHeight + 'px';	

			}



			setTimeout("self.frames['tooltipIframeObj'].document.documentElement.style.backgroundColor='" + this.pageBgColor + "'",500);



		}

		

		this.tooltipContentDiv = document.createElement('DIV');	

		this.tooltipContentDiv.style.position = 'relative';	

		this.tooltipContentDiv.id = 'DHTMLgoodies_formTooltipContent';

		outerDiv.appendChild(this.tooltipContentDiv);			

		

		var closeDiv = document.createElement('DIV');

		closeDiv.style.textAlign = 'center';

	

		closeDiv.innerHTML = '<A style="text-decoration:none" class="DHTMLgoodies_formTooltip_closeMessage" href="#" onclick="DHTMLgoodies_globalTooltipObj.__hideTooltipFromLink();return false">' + this.closeMessage + '</A>';

		

		if(this.disableTooltipPossibility){

			var tmpHTML = closeDiv.innerHTML;

			tmpHTML = tmpHTML + ' | <A class="DHTMLgoodies_formTooltip_closeMessage" href="#" onclick="DHTMLgoodies_globalTooltipObj.disableTooltip();return false">' + this.disableTooltipMessage + '</A>';

			closeDiv.innerHTML = tmpHTML;

		} 

		

		outerDiv.appendChild(closeDiv);

		

		document.body.appendChild(this.tooltipDiv);

		

		

				

		if(this.tooltipCornerSize>0){

			this.roundedCornerObj = new DHTMLgoodies_roundedCorners();

			// (divId,xRadius,yRadius,color,backgroundColor,padding,heightOfContent,whichCorners)

			this.roundedCornerObj.addTarget('DHTMLgoodies_formTooltipDiv',this.tooltipCornerSize,this.tooltipCornerSize,this.tooltipBgColor,this.pageBgColor,5);

			this.roundedCornerObj.init();

		}

		



		this.tooltipContentDiv = document.getElementById('DHTMLgoodies_formTooltipContent');

	}

	// }}}

	,

	addEvent : function(whichObject,eventType,functionName)

	{ 

	  if(whichObject.attachEvent){ 

	    whichObject['e'+eventType+functionName] = functionName; 

	    whichObject[eventType+functionName] = function(){whichObject['e'+eventType+functionName]( window.event );} 

	    whichObject.attachEvent( 'on'+eventType, whichObject[eventType+functionName] ); 

	  } else 

	    whichObject.addEventListener(eventType,functionName,false); 	    

	} 	

	// }}}

	,

	__positionCurrentToolTipObj : function()

	{

		if(DHTMLgoodies_globalTooltipObj.activeInput)this.__positionTooltip(DHTMLgoodies_globalTooltipObj.activeInput);

		

	}

	// }}}

	,		

	// {{{ __positionTooltip()

    /**

     *

	 *

     *  This function positions the tooltip

     *

     * @param Obj inputObj = Reference to text input

     * 

     * @private

     */	

	__positionTooltip : function(inputObj)

	{	

		var offset = 0;

		if(!this.displayArrow)offset = 3;	

		if(this.tooltipPosition=='below'){

			this.tooltipDiv.style.left = this.getLeftPos(inputObj)+  'px';

			this.tooltipDiv.style.top = (this.getTopPos(inputObj) + inputObj.offsetHeight + offset) + 'px';

		}else{

		

			this.tooltipDiv.style.left = (this.getLeftPos(inputObj) + inputObj.offsetWidth + offset)+  'px';

			this.tooltipDiv.style.top = this.getTopPos(inputObj) + 'px';			

		}

		this.tooltipDiv.style.width=this.tooltipWidth + 'px';

		

	}

	,

	// {{{ getTopPos()

    /**

     * This method will return the top coordinate(pixel) of an object

     *

     * @param Object inputObj = Reference to HTML element

     * @public

     */	

	getTopPos : function(inputObj)

	{		

	  var returnValue = inputObj.offsetTop;

	  while((inputObj = inputObj.offsetParent) != null){

	  	if(inputObj.tagName!='HTML'){

	  		returnValue += inputObj.offsetTop;

	  		if(document.all)returnValue+=inputObj.clientTop;

	  	}

	  } 

	  return returnValue;

	}

	// }}}

	

	,

	// {{{ getLeftPos()

    /**

     * This method will return the left coordinate(pixel) of an object

     *

     * @param Object inputObj = Reference to HTML element

     * @public

     */	

	getLeftPos : function(inputObj)

	{	  

	  var returnValue = inputObj.offsetLeft;

	  while((inputObj = inputObj.offsetParent) != null){

	  	if(inputObj.tagName!='HTML'){

	  		returnValue += inputObj.offsetLeft;

	  		if(document.all)returnValue+=inputObj.clientLeft;

	  	}

	  }

	  return returnValue;

	}

	

	,

	

	// {{{ getCookie()

    /**

     *

     * 	These cookie functions are downloaded from 

	 * 	http://www.mach5.com/support/analyzer/manual/html/General/CookiesJavaScript.htm

	 *

     *  This function returns the value of a cookie

     *

     * @param String name = Name of cookie

     * @param Object inputObj = Reference to HTML element

     * @public

     */	

	getCookie : function(name) { 

	   var start = document.cookie.indexOf(name+"="); 

	   var len = start+name.length+1; 

	   if ((!start) && (name != document.cookie.substring(0,name.length))) return null; 

	   if (start == -1) return null; 

	   var end = document.cookie.indexOf(";",len); 

	   if (end == -1) end = document.cookie.length; 

	   return unescape(document.cookie.substring(len,end)); 

	} 	

	// }}}

	,	

	

	// {{{ setCookie()

    /**

     *

     * 	These cookie functions are downloaded from 

	 * 	http://www.mach5.com/support/analyzer/manual/html/General/CookiesJavaScript.htm

	 *

     *  This function creates a cookie. (This method has been slighhtly modified)

     *

     * @param String name = Name of cookie

     * @param String value = Value of cookie

     * @param Int expires = Timestamp - days

     * @param String path = Path for cookie (Usually left empty)

     * @param String domain = Cookie domain

     * @param Boolean secure = Secure cookie(SSL)

     * 

     * @public

     */	

	setCookie : function(name,value,expires,path,domain,secure) { 

		expires = expires * 60*60*24*1000;

		var today = new Date();

		var expires_date = new Date( today.getTime() + (expires) );

	    var cookieString = name + "=" +escape(value) + 

	       ( (expires) ? ";expires=" + expires_date.toGMTString() : "") + 

	       ( (path) ? ";path=" + path : "") + 

	       ( (domain) ? ";domain=" + domain : "") + 

	       ( (secure) ? ";secure" : ""); 

	    document.cookie = cookieString; 

	}

	// }}}

		

		

}
