﻿/* ----------------------------------------------------------------------------
 * Module.....:	DropdownToolTip.js
 * Created on.: December 22, 2007
 * Created by.: Johny Varghese
 * Desc.......: Dropdownlist tooltips functionality created based on 
                QC$4046
 * ----------------------------------------------------------------------------
 * Modification History:
 * TCS(Karthikeyan. R.) : Modified for defect 6146 (02-Sep-08)
 * QC Description       : Need to increase the amount of viewable data in a drop down with 
 *      "..." from 40 to ??? of characters in capital structure and management structure.
 * ----------------------------------------------------------------------------
 */
// JScript File
var MAX_WORD_LENGTH_IN_DROPDOWN = 40;
var MAX_WORD_LENGTH_IN_TOOLTIP = 100;
var clientStore = new Array();
var toolTip = window.createPopup();
var WORD_LENGTH_IN_DROPDOWN = 0; // Added for 6146

function trimLengthyText(dropdownlistItem)
{   
    if (WORD_LENGTH_IN_DROPDOWN == 0 ) // Added for 6146
    {
        if(dropdownlistItem.innerText.length > MAX_WORD_LENGTH_IN_DROPDOWN)
            dropdownlistItem.innerText = dropdownlistItem.innerText.substring(0, MAX_WORD_LENGTH_IN_DROPDOWN) + '...';
    }
    else // Added for 6146
    {
        if(dropdownlistItem.innerText.length > WORD_LENGTH_IN_DROPDOWN)
            dropdownlistItem.innerText = dropdownlistItem.innerText.substring(0, WORD_LENGTH_IN_DROPDOWN) + '...';
    }    
}

function getFullTextFromClientStore(dropdownlist)
{   
    var strFullText = '';
    if(dropdownlist.selectedIndex == -1) return strFullText;
    for(var i=0; i<clientStore.length; i=i+2)
    {   
        if(clientStore[i] == dropdownlist.id)
        {
            var arrElements = clientStore[i+1];
            strFullText = arrElements[dropdownlist.selectedIndex];
            break;
        }
    }
    if(strFullText == null)strFullText = '';
    return strFullText;
}

function clientStoreIndexById(Id)
{
    var index = -1;
    for(var i=0; i<clientStore.length; i=i+2)
    {   
        if(clientStore[i] == Id)
        {   
            index = i;
            break;
        }
    }
    return index;
}
        
function resizeDropdownAndGetOptionsInAnArray(dropdownlist)
{
    var arrElements = new Array();
    var maxWidth = 0;
    for(var i=0; i<dropdownlist.options.length; i++)
    {
        arrElements[arrElements.length] = dropdownlist.options[i].innerText;                
        trimLengthyText(dropdownlist.options[i]);
    }
    if(dropdownlist.style.width == null || dropdownlist.style.width == "")
    {
        dropdownlist.style.width = 100;
        dropdownlist.style.width = '';
    }
    return arrElements;
}

function AttachToolTip(length)
{       
    // Added for 6146 - Begin
    if (length != 0) {    
        WORD_LENGTH_IN_DROPDOWN = length;
    }    
    // End - 6146
    dropdownlists = getAllDropDownLists();    
    for(var i=0;i<dropdownlists.length;i++)
        ResizeAndStoreFullTextInClientStore(dropdownlists[i]);
    appendLoadEvent(Attach);
}

function appendLoadEvent(newFunc)
{	
  var oldonload = window.onload;
  if (typeof window.onload != 'function'){
    window.onload = newFunc;
  } else {
    window.onload = function(){
    oldonload();
    newFunc();
    }
  }
}

function Attach()
{
    for(var i=0;i<dropdownlists.length;i++)
        AttachToolTipToADropdown(dropdownlists[i]);
}

function ResizeAndStoreFullTextInClientStore(dropdownlist)
{   
    var clientStoreIndex = clientStoreIndexById(dropdownlist.id);
    if(clientStoreIndex == -1)
    {
        clientStore[clientStore.length] = dropdownlist.id;                    
        clientStore[clientStore.length] = resizeDropdownAndGetOptionsInAnArray(dropdownlist);
    }
    else
    {   
        clientStore[clientStoreIndex+1] = resizeDropdownAndGetOptionsInAnArray(dropdownlist);
    }
}

function AttachToolTipToADropdown(dropdownlist)
{
    if(!dropdownlist.onmouseover)
        dropdownlist.onmouseover = new Function("OnMouseOver", "ToolTip('" + dropdownlist.id + "', '" + true + "');");
    if(!dropdownlist.onmouseout)
        dropdownlist.onmouseout = new Function("OnMouseOut", "ToolTip('" + dropdownlist.id + "', '" + false + "');");
}

function ToolTip(controlId, show)
{   
var control = document.getElementById(controlId);
if(control == null)
return;
if(toolTip != null)
{   
    if(show == "true")
    {   
        var toolTipText = getFullTextFromClientStore(control);
        toolTipText = splitTextForToolTip(toolTipText, MAX_WORD_LENGTH_IN_TOOLTIP);
        if(toolTipText == '')return;        
        var divHeightCalc = document.getElementById('divHeightCalc');
        if(divHeightCalc == null)
        {
            divHeightCalc = document.createElement('div');
            divHeightCalc.id = "divHeightCalc";
            document.body.appendChild(divHeightCalc);
        }
        var spanHeightCalc = document.getElementById('spanHeightCalc');
        if(spanHeightCalc == null)
        {
            spanHeightCalc = document.createElement('span');            
            spanHeightCalc.id = "spanHeightCalc";
            spanHeightCalc.style.font = "messagebox";
            divHeightCalc.appendChild(spanHeightCalc);
        }
        divHeightCalc.style.display = 'inline';
        var toolTipBody = toolTip.document.body;
        toolTipBody.style.paddingLeft = '2px';
        toolTipBody.style.backgroundColor = "lightyellow";
        toolTipBody.style.border = "solid black 1px";
        spanHeightCalc.innerHTML = toolTipText;
        toolTipBody.innerHTML = "<div>" + spanHeightCalc.outerHTML + "</div>";        
        var toolTipX = window.event.clientX + 10;
        var toolTipY = window.event.clientY + 10;
        var toolTipHeight = spanHeightCalc.offsetHeight;                
        var toolTipWidth = spanHeightCalc.offsetWidth;
        toolTip.show(toolTipX, toolTipY , toolTipWidth + 10, toolTipHeight + 5, document.body);
        divHeightCalc.style.display = 'none';
    }
    else
    {   
        toolTip.hide();
    }
}
}
        
function splitTextForToolTip(toolTipText, maxwordlength)
{
    var ToolTipWords = new Array();
    do
    {
        temp = toolTipText.substring(0, maxwordlength);
        toolTipText = toolTipText.substring(temp.length, toolTipText.length);
        ToolTipWords[ToolTipWords.length] = temp;
    }
    while(toolTipText != '')
    var FinaltoolTipText = new String();
    for(var ToolTipWord in ToolTipWords)
    {   
        FinaltoolTipText += ToolTipWords[ToolTipWord];
        if(ToolTipWord != ToolTipWords.length - 1)
        FinaltoolTipText += ' ';
    }    
    return FinaltoolTipText;
}

function getAllDropDownLists()
{
    var dropdownlists = new Array();    
    var dropdownlistCollection = document.getElementsByTagName('select');
    for(var i=0;i<dropdownlistCollection.length;i++)
    {   
        var dropdownlist = dropdownlistCollection[i];
        if(dropdownlist.id == '')continue;
        if(dropdownlist.size >1 )continue;
        dropdownlists[dropdownlists.length] = dropdownlist;
    }
    return dropdownlists;
}
