var PRintervalSpd = 40;

var PRtext;
var PRtestBox;
var PRtextBox;
var PRintervalTimer;
var PRlines;
var PRpreCount;
var PRcrrCount;
var PRbrArray;
var PRremoveCallBack;

function PRinit(_text, testBox, textBox, interval){
	PRtext = _text;
	if(testBox != undefined) PRtestBox = testBox;
	if(textBox != undefined) PRtextBox = textBox;
	if(interval != undefined) PRintervalSpd = interval;
	testBox.innerHTML = "";
	textBox.innerHTML = "";
	PRpreCount = 0;
	PRcrrCount = 0;
	PRlines = 0;
	PRbrArray = new Array();
}

function PRstartAction(){
	PRstop();
	PRpreRender();
	PRintervalTimer = setInterval(PRaddLetter, PRintervalSpd);
}

function PRremoveAction(callBack){
	PRstop();
    PRremoveCallBack = callBack;
	PRintervalTimer = setInterval(PRremoveLetter, PRintervalSpd);
}

function PRaddLetter(){
	if (PRcrrCount >= PRtext.length) {
		PRstop();
	}
	
	var newText = PRtextBox.innerHTML;
    if (PRisExist(PRcrrCount, PRbrArray)) {
		newText += "<br />";
    }else{
		newText += PRtext.charAt(PRcrrCount);
    }
	PRcrrCount++;
	PRtextBox.innerHTML = newText;
}

function PRremoveLetter(){
	if (PRcrrCount == 0) {
		PRstop();
        PRremoveCallBack();
	}
	
	var newText = "";
    for (var i = 0; i < PRcrrCount; i++){
        if (PRisExist(i, PRbrArray)) {
            newText += "<br />";
        }else{
            newText += PRtext.charAt(i);
        }
    }
	PRcrrCount--;
	PRtextBox.innerHTML = newText;
}

function PRstop(){
	clearInterval(PRintervalTimer);
}

function PRisExist(val, array){
    for (var i = 0; i < array.length; i++){
        if (array[i] == val) return true;
    }
    return false;
}

function PRpreRender(){
	var targetH = PRtestBox.clientHeight;

	while(PRpreCount < PRtext.length){
		var newText = PRtestBox.innerHTML;
		newText += PRtext.charAt(PRpreCount);
		PRtestBox.innerHTML = newText;
		if (targetH != PRtestBox.clientHeight) {
			PRlineAdded();
		}
		targetH = PRtestBox.clientHeight;
		PRpreCount++;
	}
	//alert(PRlines);
}

function PRlineAdded(){
	PRlines++;
	if (0 < PRlines) {
		//Record br point into PRbrArray
		var pos = PRtext.lastIndexOf(" ", PRpreCount);
		if (0 < pos){
			PRbrArray.push(pos);
		}
	}
}

