/****************************************************
* Spell Checker Client JavaScript Code
****************************************************/
// spell checker constants
var spellURL = "SpellCheck.aspx";
var showCompleteAlert = true;


var tagGroup = new Array("INPUT", "TEXTAREA", "DIV", "SPAN");
// global elements to check
var checkElements = new Array();
var checkEditors = new Array();

var oElement = null;
var oEditor = null;

function allowSpellCheck(elementId)
{
    if ( window.spellCheckFields == null )
    {
        return true;
    }
    
    for ( var i = 0; i < spellCheckFields.length; i++ )
    {
        if ( spellCheckFields[i] == elementId )
        {
            return true;
        }
    }
    return false;
}

function getText(index)
{
    var sText = "";

    // Editors
    if ( index >= checkElements.length )
    {
        oEditor = checkEditors[index - checkElements.length];
        if ( allowSpellCheck(oEditor.Name) )
        {
            sText = oEditor.GetXHTML();
        }
    }
    else // Regular fields
    {
        if ( allowSpellCheck(checkElements[index]) )
        {
            oElement = document.getElementById(checkElements[index]);
            
            switch (oElement.tagName)
	        {
		        case "INPUT" :
                case "TEXTAREA" :
			        sText = oElement.value;
			        break;
		        case "DIV" :
		        case "SPAN" :
                case "BODY" :
			        sText = oElement.innerHTML;
			        break;
                case "IFRAME" :
                    if (document.all) // IE
                    {
                        var oFrame = eval(oElement.id);
                        sText = oFrame.document.body.innerHTML;
                    }
                    else
                    {
                        sText = parent.frames[0].document.body.innerHTML;
                    }
                    break;
            }
        }
    }

    return sText;
}

function setText(index, text)
{
    // Editors
    if ( index >= checkElements.length )
    {
        oEditor = checkEditors[index - checkElements.length];
        sText = oEditor.SetHTML(text);
    }
    else // Regular fields
    {
        oElement = document.getElementById(checkElements[index]);

        switch (oElement.tagName)
	    {
		    case "INPUT" :
            case "TEXTAREA" :
			    oElement.value = text;
			    break;
		    case "DIV" :
		    case "SPAN" :
			    oElement.innerHTML = text;
			    break;
            case "IFRAME" :
                if (document.all) // IE
                {
                    var oFrame = eval(oElement.id);
                    oFrame.document.body.innerHTML = text;
                }
                else
                {
                    parent.frames[0].document.body.innerHTML = text;
                }
                break;
        }
    }
}

function checkSpelling()
{
    checkElements = new Array();
    checkEditors = new Array();
    
    //loop through all tag groups
    for (var i = 0; i < tagGroup.length; i++)
    {
        var sTagName = tagGroup[i];
        var oElements = document.getElementsByTagName(sTagName);
        //loop through all elements
        for(var x = 0; x < oElements.length; x++)
        {
            if ((sTagName == "INPUT" && oElements[x].type == "text") || sTagName == "TEXTAREA")
                checkElements[checkElements.length] = oElements[x].id;
            else if ((sTagName == "DIV" || sTagName == "SPAN") && oElements[x].isContentEditable)
                checkElements[checkElements.length] = oElements[x].id;
        }
    }

    // loop through all editors
    try
    {
        for (var name in FCKeditorAPI.__Instances)
        {
            if ( (checkEditors.length > 0) && (checkEditors[0] == FCKeditorAPI.__Instances[name]) )
            {
                break;
            }
            checkEditors[checkEditors.length] = FCKeditorAPI.__Instances[name];
        }
    }
    catch (ex)
    {
    }
    
    openSpellChecker();
}

function checkSpellingById(id)
{
    checkElements = new Array();
    checkElements[checkElements.length] = id;
    openSpellChecker();
}

function checkElementSpelling(element)
{
    checkElements = new Array();
    checkElements[checkElements.length] = element.id;
    openSpellChecker();
}

function openSpellChecker()
{
    var dHeight = 410;
    if ( ( document.all ) && (navigator.appName != 'Opera') ) 
    { 
        if ( parseInt(navigator.appVersion.substr(22, 1)) < 7 ) { dHeight += 58; }; 
    }

    if (window.showModalDialog)
        var result = window.showModalDialog(spellURL + "?Modal=true", window, "dialogHeight:" + dHeight + "px; dialogWidth:380px; edge:Raised; center:Yes; help:No; resizable:No; status:No; scroll:No");
    else
        var newWindow = window.open(spellURL, "newWindow", "height=" + dHeight + ",width=380,scrollbars=no,resizable=no,toolbars=no,status=no,menubar=no,location=no");
        
    //modalDialog(spellURL, "spellcheck", 380, 380);
}


/****************************************************
* Spell Checker Suggestion Window JavaScript Code
****************************************************/
var iElementIndex = -1;
var parentWindow;
var iFCKIndex = -1;

function initialize()
{
    iElementIndex = parseInt(document.getElementById("ElementIndex").value);

    if (parent.window.dialogArguments)
        parentWindow = parent.window.dialogArguments;
    else if (window.opener)
        parentWindow = window.opener;

    var spellMode = document.getElementById("SpellMode").value;

    switch (spellMode)
    {
        case "start" :
            //do nothing client side
            break;
        case "suggest" :
            //update text from parent document
            updateText();
            //wait for input
            break;
        case "end" :
            //update text from parent document
            updateText();
            //fall through to default
        default :
            //get text block from parent document
            if(loadText())
                document.forms['SpellingForm'].submit();
            else
                endCheck()

            break;
    }
}

function loadText()
{
    if (!parentWindow.document)
        return false;

    // check if there is any text to spell check
    for (++iElementIndex; iElementIndex < parentWindow.checkElements.length + parentWindow.checkEditors.length; iElementIndex++)
    {
        var newText = parentWindow.getText(iElementIndex);
        if ((newText != null) && (newText.length > 0))
        {
            updateSettings(newText, 0, iElementIndex, "start");
			document.getElementById("StatusText").innerText = "Spell Checking Text ...";
			return true;
        }
    }

    return false;
}

function updateSettings(currentText, wordIndex, elementIndex, mode)
{
    document.getElementById("CurrentText").value = currentText;
    document.getElementById("WordIndex").value = wordIndex;
    document.getElementById("ElementIndex").value = elementIndex;
    document.getElementById("SpellMode").value = mode;
}

function updateText()
{
    if (!parentWindow.document)
        return false;

	var newText = document.getElementById("CurrentText").value;
    parentWindow.setText(iElementIndex, newText);
}

function endCheck()
{
    if (showCompleteAlert)
    {
    	alert("Spell Check Complete");
    }
    	
    closeWindow();
}

function closeWindow()
{
    if (top.opener || parent.window.dialogArguments)
    {
	   top.window.close();
	}
}

function changeWord(element)
{
    var k = element.selectedIndex;
    element.form.ReplacementWord.value = element.options[k].value;
}
