﻿/****************************************************
* Spell Checker Client JavaScript Code
****************************************************/
// spell checker constants
var spellURL = "SpellCheck.aspx";
var showCompleteAlert = false;

var tagGroup = new Array("INPUT", "TEXTAREA", "DIV", "SPAN");

// global elements to check
var checkElements = new Array();
var buttonElements = new Array();//Save Assigment Button
var winElements = new Array();

// More IAP data:
var partElements = new Array();
var assElements = new Array();

function getText(index)
{
    var oElement = document.getElementById(checkElements[index]);
    var sText = "";

    switch (oElement.tagName)
      {
            case "INPUT" :
        case "TEXTAREA" :
                  sText = oElement.value;
                  break;
            case "DIV" :
            case "SPAN" :
        case "BODY" :
                  sText = oElement.innerHTML;
                  break;
        case "IFRAME" :
            var oFrame = eval(oElement.id);
            sText = oFrame.document.body.innerHTML;
    }

    return sText;
}

function setText(index, text, mode)
{
    var oElement = document.getElementById(checkElements[index]);
    switch (oElement.tagName)
      {
            case "INPUT" :
        case "TEXTAREA" :
                  oElement.value = text;
                  break;
            case "DIV" :
            case "SPAN" :
            setinnerText(oElement, text);
                  break;
        case "IFRAME" :
            var oFrame = eval(oElement.id);
            oFrame.document.body.innerHTML = text;
            break;
    }
    if (window.focus) {
        var popWin=winElements[0];
        popWin.focus();
    }
}

function checkSpelling()
{
    checkElements = 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;
        }
    }
    openSpellChecker();
}

function checkSpellingIAP(buttonID)
{
    checkElements = new Array();
    var oElements = document.getElementsByTagName("TEXTAREA");
    //loop through all elements
    for(var i = 0; i < oElements.length; i++)
    {
        var fieldId=oElements[i].id;
        if (fieldId.indexOf("txtBoxInstruction") != -1 )
            checkElements[checkElements.length] = oElements[i].id;
    }
    buttonElements = new Array();//Save Assigment Button
    buttonElements[buttonElements.length] = buttonID;//Save Assigment Button

    oElements = document.getElementsByTagName("span");
    partElements = new Array();
    assElements = new Array();
    //loop through all elements
    for(var i = 0; i < oElements.length; i++)
    {
        var fieldId=oElements[i].id;
        if (fieldId.indexOf("lblPart") != -1 )
            partElements[partElements.length] = oElements[i].id;
        else if (fieldId.indexOf("lblAssignmentName") != -1 )
            assElements[assElements.length] = oElements[i].id;
    }
  
    openSpellChecker();
}

function checkSpellingById(id, buttonID)
{
    checkElements = new Array();
    checkElements[checkElements.length] = id;
    buttonElements = new Array();//Save Assigment Button
    buttonElements[buttonElements.length] = buttonID;//Save Assigment Button
    openSpellChecker();
}

function checkElementSpelling(oElement)
{
    checkElements = new Array();
    checkElements[checkElements.length] = oElement.id;
    openSpellChecker();
}

function openSpellChecker()
{
     var width  = 400;
     var height = 450;
     var left   = (screen.width  - width)/2;
     var top    = (screen.height - height)/2;
     var params = 'width='+width+', height='+height;
     params += ', top='+top+', left='+left;
     params += ', directories=no';
     params += ', location=no';
     params += ', menubar=no';
     params += ', resizable=no';
     params += ', scrollbars=no';
     params += ', status=no';
     params += ', toolbar=no';
     var popWin=window.open(spellURL,'popupWinAssignmentSpellChecker', params);
     winElements = new Array();
     winElements[winElements.length] = popWin;
     if (window.focus) {popWin.focus()}
     return false;
}

/****************************************************
* Spell Checker Suggestion Window JavaScript Code
****************************************************/
var iElementIndex = -1;
var parentWindow;

function initialize()
{
    iElementIndex = parseInt(document.getElementById("ElementIndex").value);

    parentWindow = top.opener;

    var spellMode = document.getElementById("SpellMode").value;

    //if (iElementIndex==14 && iElementIndex==7)//For debug only
       //alert("initialize(), iElementIndex="+iElementIndex+"\tspellMode="+spellMode);//For debug only
    switch (spellMode)
    {
        case "start" :
            //do nothing client side
            break;
        case "suggest" :
            //update text from parent document
            var text = parentWindow.getPartAssignment(iElementIndex);
            var spanTag=document.getElementById("lblPartAssign");
            setinnerText(spanTag, text);
            updateText("suggest");
            //wait for input
            break;
        case "end" :
            //update text from parent document
            updateText("end");
            //fall through to default
        default :
            //get text block from parent document
            if(loadText())
                document.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; iElementIndex++)
    {
        var text = parentWindow.getPartAssignment(iElementIndex);
        var spanTag=document.getElementById("lblPartAssign");
        setinnerText(spanTag, text);
        var text = "Spell Checking Text ...";
        var spanTag=document.getElementById("StatusText");
        setinnerText(spanTag, text);
        var newText = parentWindow.getText(iElementIndex);
        //if (iElementIndex==14 && iElementIndex==7)//For debug only
            //alert("loadText(), iElementIndex="+iElementIndex);//For debug only
        if (newText.length > 0)
        {
                  updateSettings(newText, 0, iElementIndex, "start");
            text = "Spell Checking Text ...";
            spanTag=document.getElementById("StatusText");
                  return true;
        }
    }
    return false;
}

function getPartAssignment(index)
{
    var lblPart = document.getElementById(partElements[index]);
    var lblAssignmentName = document.getElementById(assElements[index]);
    var sText = "Spelling check on "+getInnerText(lblPart)+" - "+getInnerText(lblAssignmentName)+" instruction ...";
//    alert('getPartAssignment('+index+'), sText="'+sText+'"\n' //For debug only
//        );//For debug only
    return sText;
}

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(mode)
{
    //if (iElementIndex>=16)//For debug only
        //alert("updateText("+mode+"), iElementIndex="+iElementIndex);//For debug only
    if (!parentWindow.document)
        return false;

      var newText = document.getElementById("CurrentText").value;
    parentWindow.setText(iElementIndex, newText, mode);            
}

function endCheck()
{
   //alert("endCheck(), iElementIndex="+iElementIndex);//For debug only
   if (showCompleteAlert)
      alert("Spell Check Complete");
    
    parentWindow.triggerSaveAllAssignment();            

    closeWindow();
    
}
function triggerSaveAllAssignment()
{

    //Save All Assigments Button 
    var oButton = document.getElementById(buttonElements[0]);
    //alert("triggerSaveAllAssignment(), Save All Assigments Button, oButton="+oButton+"\tbuttonElements[0]="+buttonElements[0]+", iElementIndex="+iElementIndex);//For debug only
    if (oButton!=undefined && oButton!=null)//Save Assigment Button
    {
       //alert("triggerSaveAllAssignment(), before oButton.click(), iElementIndex="+iElementIndex);//For debug only
       oButton.click();//Trigger a postback in Entries.aspx
    }
}

function closeWindow()
{
   //alert("closeWindow(), iElementIndex="+iElementIndex);//For debug only
    if (top.opener || parent.window.dialogArguments)
         self.close();
}

function changeWord(oElement)
{
    var k = oElement.selectedIndex;
    oElement.form.ReplacementWord.value = oElement.options[k].value;
}

