var browserType = "I";
var isArrowPressed = false;
var isClearKey = false;
var inputBox = null;
var outputBox = null;
var romanFontFace = "Arial";
var banglaFontFace = "Tripura";
var romanFontSize = 2;
var banglaFontSize = 3;

function setup(i, o) {
    if(parseInt(navigator.appVersion.charAt(0)) >= 4) {
        if (navigator.appName == "Netscape") {
            browserType = "N";
        }
    }
    inputBox = i;
    outputBox = o;
}

function Paragraph(txtPlain) {
    this.PlainText = txtPlain;
    this.CipherText = "";
    this.StartOfChange = false;
}

var container = new Array();
var paraEndsWith = new Array(); 

function processSpecialKey(e) {
    var keyValue = 0;
    var txtBenglish = inputBox.value;
    var txtOut = "";

	if (browserType == "I")
			keyValue = window.event.keyCode;
	else
			keyValue = e.which;

    if (((keyValue == 0 || keyValue == 37 || keyValue == 38 || keyValue == 39 || keyValue == 40) 
    && (!isArrowPressed)) || keyValue == 46 || keyValue == 8 || isClearKey) {

		rebuildContainer();
		dumpContainer();
				
		if (keyValue == 46 || keyValue == 8) 
			isClearKey = true;
		else
			isClearKey = false;	
    }
    
    if (keyValue == 37 || keyValue == 38 || keyValue == 39 || keyValue == 40 || keyValue == 0)
		isArrowPressed = true;
	else
		isArrowPressed = false;
}

function processNormalKey(e){
    var keyValue = 0;
    var txtBenglish = inputBox.value;
    var txtOut = "";
    var endLocation = -1;
    var tmpLocation = -1;
    var strInputLastWord = "";
    var separator = "";

	if (browserType == "I")
		keyValue = window.event.keyCode;
	else
		keyValue = e.which;
	
	var strChar = String.fromCharCode(keyValue);

    if (32 == keyValue) {
		rebuildContainer();
		dumpContainer();
    }
    else if (13 == keyValue) {
		
		rebuildContainer();
		dumpContainer();
    }
}

function rebuildContainer() {
    var txtInput = inputBox.value;
    var paragraphs = txtInput.split("\n");
    var collector = new Array();
    var endsWith = new Array();
    var ePos = -1;
    var doneFlag = pendingFlag = 0;
    var startOfChangeFlag = false;
    for (i = 0; i < paragraphs.length; i++) {
        searchFlag = false;
        for (j = ePos + 1; j < container.length; j++) {
            if (container[j].PlainText == paragraphs[i]) {
                ePos = j;
                searchFlag = true;
                collector[i] = container[j];
                endsWith[i] = paraEndsWith[j];
                collector[i].StartOfChange = false;
                doneFlag++;
                break;
            }
        }
        if (!searchFlag) {
            collector[i] = new Paragraph(paragraphs[i]);
            endsWith[i] = "";
            if (!startOfChangeFlag) {
				collector[i].StartOfChange = true;
				startOfChangeFlag = true;
            }
            pendingFlag++;
        }    
    }
    container = collector;
    paraEndsWith = endsWith;
}
 
function dumpContainer() {
	var iNumberOfParagraphs = container.length;
	var strCheck = "";
	var outputString = "";
	var modifierSearchFlag = false;
	
	if ("I" == browserType)
		strCheck = "<span id=divEnd></span>";
	else
		strCheck = "<layer name=divEnd></layer>";
	

	for (i = 0; i < iNumberOfParagraphs; i++) {
		var theParagraph = container[i];

		if ("" == theParagraph.CipherText) {
		    var strWillEndWith = "B";
		    
		    if (i > 0)
		        strWillEndWith = paraEndsWith[i - 1];
		        
		    var txtContent = theParagraph.PlainText;
		    var iNextAt = -1;
		    var separator = "";
		    var strTranslet = "";
		    var strCipher = "";
		    
		    while ("" != txtContent) {
		        iNextAt = txtContent.search("[<>]");
		        if (iNextAt == -1){
		        	strTranslet = txtContent;
		        	separator = "";
		        	txtContent = "";
		        }
		        else {
		        	strTranslet = txtContent.substr(0, iNextAt);
		        	separator = txtContent.charAt(iNextAt);
		        	txtContent = txtContent.substr(iNextAt + 1);
		        }

		        if (strWillEndWith == "E") {
		        	strCipher = strCipher + "<font face=\"" + romanFontFace + "\" size=" + romanFontSize + ">" + strTranslet;
		        }
		        else {
		        	strCipher = strCipher + "<font face=\"" + banglaFontFace + "\" size=" + banglaFontSize + ">" +  document.applets[0].transcript(strTranslet);
		        }

		        if (separator == "<"){
		        	if (strWillEndWith == "B"){ 
		        		strWillEndWith = "E";
		        		separator = "";
		        	}
		        	else {
		        		separator = "&lt;"
		        	}	
		        }
		        else if (separator == ">"){
		        	if (strWillEndWith == "E"){ 
		        		strWillEndWith = "B";
		        		separator = "";
		        	}
		        	else {
		        		separator = "&gt;"
		        	}	
		        }
		        strCipher = strCipher + separator;
		    } /* end of while */
		    
		    theParagraph.CipherText = strCipher;
		    
		    if (strWillEndWith != paraEndsWith[i]) {
				paraEndsWith[i] = strWillEndWith;
		        if (i < iNumberOfParagraphs - 1) {
		            container[i+1].CipherText = "";
		            paraEndsWith[i+1] = "";
		        }
		    }
		        
		} // if ciphertext = ""
		
		
		if (theParagraph.StartOfChange) {
			outputString = outputString + strCheck + theParagraph.CipherText + "<br>";
			modifierSearchFlag = true;
		}
		else {
			outputString = outputString + theParagraph.CipherText + "<br>";
		}
	}
	
	if (!modifierSearchFlag)
		outputString = outputString + strCheck;
	
	if ("I" == browserType) {
		var myIFrame = outputBox;
		myIFrame.document.all("divContent").innerHTML = outputString;
		myIFrame.scrollTo(0, myIFrame.document.all("divEnd").offsetTop);
	}
	else {
    outputBox.document.open("text/html", "replace");
		outputBox.document.writeln("<html><head><META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=user-defined\"></head><body>");
		outputBox.document.writeln(outputString);
		outputBox.document.writeln("</body></html>");
		outputBox.document.close();
		outputBox.scrollTo(0, outputBox.document.divEnd.top);
	}
	
}
