﻿// Globals

var g_divAlternatesMenu = null;
var g_alternatesMenuAffordance = null;
var g_wordTileWithAlternatesMenu = null;


// Move alternates menu and associated controls to correct position and populate list
// Returns false if there are no alternates, true if there are
function setUpAlternatesMenu( divWordTile )
{
    removeChildren( g_divAlternatesMenu, "div" );
    g_wordTileWithAlternatesMenu = divWordTile;
    
    // figure out the capitalization alternate
    var firstChar = divWordTile.innerHTML.substring( 0, 1 );
    var capitalizationAlternate = divWordTile.innerHTML;
    var capitalizeAlternates = false;
    var alternatesMenuHasAtLeastOneItem = false;
    
    if ( ( firstChar >= 'a' ) && ( firstChar <= 'z' ) )
    {
        capitalizationAlternate = capitalizationAlternate.toInitialCap();
    }
    else if ( ( firstChar >= 'A' ) && ( firstChar <= 'Z' ) )
    {
        capitalizationAlternate = firstChar.toLowerCase() + capitalizationAlternate.substring( 1 );
        capitalizeAlternates = true;
    }
    else // not an alphabetic first character
    {
        capitalizationAlternate = "";
    }
    
    // add the capitalization alternate to the menu
    if ( capitalizationAlternate != "" ) addNewAlternateMenuItem( "alternateCap", capitalizationAlternate, "case-switch" );

    // add the root form to the menu if an alternate form is chosen
    if ( g_poem.wordsInPoem[divWordTile.getAttribute( "root-form" )].alternateIndex != ALTERNATE_INDEX_ROOT_FORM )
    {
        if ( !capitalizeAlternates )
            addNewAlternateMenuItem( "alternateRoot", divWordTile.getAttribute( "root-form" ), ALTERNATE_INDEX_ROOT_FORM )
        else
            addNewAlternateMenuItem( "alternateRoot", divWordTile.getAttribute( "root-form" ).toInitialCap(), ALTERNATE_INDEX_ROOT_FORM );
    }
    
    var alternatesArray = g_poem.alternates[divWordTile.getAttribute( "root-form" )];
    if ( alternatesArray )
    {
        var divNewAlternate = null;
        for ( var i = 0; i < alternatesArray.length ; i++ )
        {
            if ( g_poem.wordsInPoem[divWordTile.getAttribute( "root-form" )].alternateIndex != i )
            {
                if ( !capitalizeAlternates )
                    addNewAlternateMenuItem( "alternate" + i, alternatesArray[i], i )
                else
                    addNewAlternateMenuItem( "alternate" + i, alternatesArray[i].toInitialCap(), i )
            }
        }
    }

    g_divAlternatesMenu.style.top = divWordTile.offsetTop + divWordTile.parentNode.offsetTop + divWordTile.offsetHeight + "px";
    g_divAlternatesMenu.style.left = divWordTile.offsetLeft + divWordTile.parentNode.offsetLeft - 7 + "px";

    g_alternatesMenuAffordance.style.top = divWordTile.offsetTop + 2 + "px"; // 2 is margin
    g_alternatesMenuAffordance.style.left = divWordTile.offsetLeft + divWordTile.offsetWidth + 2 + "px"; // 9 is width of dropdown arrow + 4 margin
    
    return alternatesMenuHasAtLeastOneItem;
    
    function addNewAlternateMenuItem ( id, text, index )
    {
        var divNewAlternate = document.createElement( "div" );
        divNewAlternate.id = id;
        divNewAlternate.className = "alternatesMenuItem";
        divNewAlternate.innerHTML = text;
        divNewAlternate.setAttribute( "alternate-index", index );
        attachEventToElement( divNewAlternate, "mouseover", alternateMenuItem_onMouseOver, false  );
        attachEventToElement( divNewAlternate, "mouseout", alternateMenuItem_onMouseOut, false  );
        attachEventToElement( divNewAlternate, "click", alternateMenuItem_onClick, false );
        g_divAlternatesMenu.appendChild( divNewAlternate );
    
        alternatesMenuHasAtLeastOneItem = true;
        
        return divNewAlternate;
    }
}

// Change the on-screen and in-memory representation of a word to the given alternate
// alternateIndex can be "case-switch", which means the reverse cap menu item was chosen, not an alternate
function applyAlternate( divWordTile, alternateIndex )
{
    if ( alternateIndex == "case-switch" )
    {
        if ( g_poem.wordsInPoem[divWordTile.getAttribute( "root-form" )].capitalization == "none" )
        {
            g_poem.wordsInPoem[divWordTile.getAttribute( "root-form" )].capitalization = "initial";
            divWordTile.innerHTML = divWordTile.innerHTML.toInitialCap();
        }
        else
        {
            g_poem.wordsInPoem[divWordTile.getAttribute( "root-form" )].capitalization = "none";
            divWordTile.innerHTML = divWordTile.innerHTML.substring( 0, 1 ).toLowerCase() + divWordTile.innerHTML.substring( 1 );
        }
    }
    else
    {
        g_poem.wordsInPoem[divWordTile.getAttribute( "root-form" )].alternateIndex = alternateIndex;
        if ( alternateIndex == ALTERNATE_INDEX_ROOT_FORM )
        {
            var newText = divWordTile.getAttribute( "root-form" );
        }
        else
        {
            var newText = g_poem.alternates[divWordTile.getAttribute( "root-form" )][alternateIndex];
        }
        
        if ( g_poem.wordsInPoem[divWordTile.getAttribute( "root-form" )].capitalization == "none" )
        {
            divWordTile.innerHTML = newText;
        }
        else
        {
            divWordTile.innerHTML = newText.toInitialCap();
        }
    }
    
    var outlineDiv = divWordTile.previousSibling;
    for ( var quadrant = 0; quadrant < 4; quadrant++ )
    {
        outlineDiv.innerHTML = divWordTile.innerHTML;
        outlineDiv = outlineDiv.previousSibling;
    }
    
    setUpAlternatesMenu( divWordTile );
}


function alternatesMenuTarget_onClick( e )
{
    if ( !e ) e = window.event;   // Earlier IE event model
    if ( g_divAlternatesMenu.style["visibility"] == "visible" ) { closeAlternatesMenu(); } else { openAlternatesMenu(); }
    if ( e.stopPropagation ) { e.stopPropagation(); } else { e.cancelBubble = true; }
}

// Show the alternates menu
function openAlternatesMenu()
{
    g_divAlternatesMenu.style["visibility"] = "visible";
    if ( document.getElementById( "resizableTooltip" ) ) hideTooltip();
}

// Close the alternates menu; does not apply any selected choice
function closeAlternatesMenu()
{
    g_divAlternatesMenu.style["visibility"] = "hidden";
}

function alternateMenuItem_onMouseOver( e )
{
    if ( !e ) e = window.event;   // Earlier IE event model
    if ( e.target ) { var alternateMenuItem = e.target; /* DOM */ }
    else { var alternateMenuItem = e.srcElement; /* IE */ }
    
    alternateMenuItem.style["backgroundColor"] = "#FAE8E4";
    alternateMenuItem.style["border"] = "solid 1px #F0AA8C";
    alternateMenuItem.style["margin"] = "-1px 1px";
}

function alternateMenuItem_onMouseOut( e )
{
    if ( !e ) e = window.event;   // Earlier IE event model
    if ( e.target ) { var alternateMenuItem = e.target; /* DOM */ }
    else { var alternateMenuItem = e.srcElement; /* IE */ }
    
    alternateMenuItem.style["backgroundColor"] = "transparent";
    alternateMenuItem.style["border"] = "none";
    alternateMenuItem.style["margin"] = "1px 2px";
}

function alternateMenuItem_onClick( e )
{
    if ( !e ) e = window.event;   // Earlier IE event model
    if ( e.target ) { var alternateMenuItem = e.target; /* DOM */ }
    else { var alternateMenuItem = e.srcElement; /* IE */ }
    
    closeAlternatesMenu();
    applyAlternate( g_wordTileWithAlternatesMenu, alternateMenuItem.getAttribute( "alternate-index" ) );
    if ( e.stopPropagation ) { e.stopPropagation(); } else { e.cancelBubble = true; }
}

function showAlternatesMenuAffordance( divWordTile )
{
    g_alternatesMenuAffordance.style.visibility = "visible";
}

function hideAlternatesMenuAffordance()
{
    g_alternatesMenuAffordance.style.visibility = "hidden";
    closeAlternatesMenu();
}

function showAlternatesMenuHoverFeedback( divWordTile )
{
    showAlternatesMenuAffordance();
}

function hideAlternatesMenuHoverFeedback()
{
}



