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

        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

        this.tooltipDiv = false,
        this.tooltipText = false;
        this.imagePath = 'images/';
        this.arrowImageFile = 'green-arrow.gif';
        this.arrowImageFileRight = 'green-arrow-right.gif';
        this.tooltipWidth = 200;
        this.tooltipBgColor = '#C0C0C0';
        this.closeMessage = 'Schliessen';
        this.disableTooltipMessage = 'Diese Message nicht noch einmal zeigen';
        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 = true;
        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].onfocus = this.__displayTooltip;
                }
        }

        // }}}
        ,
        // {{{ 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';

                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()
        {
                DHTMLgoodies_globalTooltipObj.tooltipDiv.style.display='none';

        }
        // }}}
        ,
        // {{{ __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 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');
        }
        // }}}
        ,
        // {{{ __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;
        }
        // }}}


}
