/************************************************************************************************************

	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 = '/Assets/Images/Img/';
	this.arrowImageFile = 'green-arrow.gif';
	this.arrowImageFileRight = 'green-arrow-right.gif';
	this.tooltipWidth = 200;
	this.tooltipBgColor = '#317082';
	this.closeMessage = 'Close';
	this.disableTooltipMessage = 'Don\'t show this message again';
	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();
        // ANP 05-04-2010 :: Array para los elementos que no contienen el atributo 'tooltipText'
        var formNoElements = 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;
                formNoElements[formNoElements.length] = inputs[no]
            }
            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;
                formNoElements[formNoElements.length] = inputs[no]
            }
            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;
                formNoElements[formNoElements.length] = inputs[no]
            }
            if (attr) formElements[formElements.length] = inputs[no];
        }

        window.refToFormTooltip = this;

        for (var no = 0; no < formElements.length; no++) {
            formElements[no].onfocus = this.__displayTooltip;
        }
        // ANP 05-04-2010 :: Ocultamos Tooltip en el resto de elementos
        for (var no = 0; no < formNoElements.length; no++) {
            formNoElements[no].onfocus = this.__hideTooltip;
        }

        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';

        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';
                // ANP 05-04-2010 :: Bug para IE7
                if (navigator.userAgent.indexOf('MSIE 7') >= 0) topDiv.style.marginLeft = '-100px';
                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');
    }
    // }}}
	,
    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;
    }
    // }}}


}