﻿// JScript 文件
// @author szsheng
var EditUtil = {};
var INIT_TEXT = "请输入需要伴读的内容。";

EditUtil.arrSpeedTxt = ["很快", "偏快", "中速", "偏慢", "很慢"];
EditUtil.arrReader = [{ "name": "xiaoyu", "category": "青年男声" }, { "name": "xiaoyan", "category": "青年女声"}];

EditUtil.eSetSpeed = function (speedLevel) {
    $("listSpeed").innerHTML = '&nbsp;&nbsp;&nbsp;' + EditUtil.arrSpeedTxt[speedLevel] + '&nbsp;&nbsp;&nbsp;<em class="submenuindicator"></em>';
    EditUtil.cssmlEngine.eSetSpeed(CSSMLEngine._arrSpeeds[speedLevel]);
};

EditUtil.eSetReader = function (readerIndex) {
    $("listReader").innerHTML = '&nbsp;&nbsp;' + EditUtil.arrReader[readerIndex].category + '&nbsp;<em class="submenuindicator"></em>';    
    EditUtil.cssmlEngine.eSetReader(EditUtil.arrReader[readerIndex].name);
};

YAHOO.util.Event.onContentReady("yToolbar", function () {
    function onMenuBarBeforeRender(p_sType, p_sArgs) {
        var oSubmenuData = {
            "readSpeed": [
                { text: EditUtil.arrSpeedTxt[0], url: "javascript:EditUtil.eSetSpeed(0);" },
                { text: EditUtil.arrSpeedTxt[1], url: "javascript:EditUtil.eSetSpeed(1);" },
                { text: EditUtil.arrSpeedTxt[2], url: "javascript:EditUtil.eSetSpeed(2);" },
                { text: EditUtil.arrSpeedTxt[3], url: "javascript:EditUtil.eSetSpeed(3);" },
                { text: EditUtil.arrSpeedTxt[4], url: "javascript:EditUtil.eSetSpeed(4);" }
            ],

            "readVoice": [
                { text: EditUtil.arrReader[0].category, url: "javascript:EditUtil.eSetReader(0);" },
                { text: EditUtil.arrReader[1].category, url: "javascript:EditUtil.eSetReader(1);" }                             
            ]
        };
        this.getItem(0).cfg.setProperty("submenu", { id: "readSpeed", itemdata: oSubmenuData["readSpeed"] });
        this.getItem(1).cfg.setProperty("submenu", { id: "readVoice", itemdata: oSubmenuData["readVoice"] });
    }
    var oMenuBar = new YAHOO.widget.MenuBar("yToolbar", { autosubmenudisplay: false, showdelay: 250, hidedelay:  750, lazyload: true });
    oMenuBar.beforeRenderEvent.subscribe(onMenuBarBeforeRender);
    oMenuBar.render();            
    EditUtil.oMenuBar = oMenuBar;
}); 

EditUtil.callFailure = function(msg){
    var errMsg = "An error occurred.";
    if(msg)
        errMsg = msg;
    alert(errMsg);
    AjaxCallEnd();
};
EditUtil.checkPinyin = function(html){
    var arrErr = CSSMLEngine.checkPinyin(html);
    if(arrErr.length > 0)
    {
        var sAlert = PageResx1.getResx("errPinyin","拼音标注错误：")+"\n\n";
        arrErr.each(function(obj){
            sAlert += "<"+obj.txt+" "+obj.py+">\n";
        });
        alert(sAlert);
        return false;
    }
    return true;
};
EditUtil.checkTextLength = function()
{
    var text = EditUtil.cssmlEngine._editor.document.body.innerText;
    if(!CSSMLEngine.checkCanRead(EditUtil.cssmlEngine._editor.document.body.innerHTML))
    {
        alert(PageResx1.getResx("InputStudyText", "请输入需要朗读的文本"));
        return false;
    }
    	    
    var bResult = true;
    var hzLength = text.replace(/[^\u4e00-\u9fa5]*/g,"").length;
    if(hzLength>30000)
    {
        alert(PageResx1.getResx("TextLengthLong","学习的汉字数不能多于30000个"));
        bResult = false;
    }
    return bResult;
};
EditUtil.getPyStr = function(py){
    try
    {
        if(py.length < 2)
            return "&nbsp;";
        return PinYinUtil.ConvertToPy(py);
    }catch(ex)
    {
        return "&nbsp;";
    }
};
EditUtil.getDetailView= function(sen){
	var div= document.createElement('div');
	div.setAttribute('nowrap','nowrap');
	var p= document.createElement('p');
	var str= document.createElement('strong');
	var span= document.createElement('span');
	var sps=sen.Phrases;
	try
	{
	    for(var i=0;i<sps.length;i++){
		    if(/^(?:\｜|\|)$/.test(sps[i].PT)&&(i+2<sps.length)){//del custom line break '｜｜。'
			    var tmPT=sps[i].PT+sps[i+1].PT+sps[i+2].PT;
			    if(/^(?:\｜|\|)(?:\｜|\|)。$/.test(tmPT)){i+=2;continue;}
		    }
		    var d=div.cloneNode(false);
		    $('tmp').appendChild(d);
		    var tp=p.cloneNode(false);
		    tp.innerHTML=EditUtil.getPyStr(sps[i].PY);
		    d.appendChild(tp);
		    var ts=str.cloneNode(false);
		    ts.innerHTML=sps[i].PT;
		    d.appendChild(ts)
		    var tsp=span.cloneNode(false);
		    tsp.innerHTML=sps[i].PY;
		    d.appendChild(tsp)
	    }
	    sen.PYHTML=$('tmp').innerHTML;
	    $('tmp').innerHTML='';
	}catch(ex){alert(ex.name +" :: "+ex.message);}
	return sen.PYHTML;
};

/*  ajax call Start */
EditUtil.callTTS = function() {
    var txtBreak = $F('txtBreak').trim();
    if (!/^\d+\.?$/.test(txtBreak)) {
        alert('文章末尾停顿时长输入有误！请输入整数。');
        return false;
    }

    var txtBlankBreak = $F('txtBlankBreak').trim();
    if (!/^\d+\.?$/.test(txtBlankBreak)) {
        alert('文中空格停顿时长输入有误！请输入整数。');
        return false;
    }

    var tmpObj = {};
	var savPrm = {}; //Define a param to save the settings;
    var intBreak = parseInt(txtBreak);
    if (intBreak != 0){
        tmpObj.ibreak = intBreak;
		savPrm.ibreak = intBreak;
	}
        
    var intBlankBreak = parseInt(txtBlankBreak);
    if (intBlankBreak != 0){
		tmpObj.iBlankBreak = intBlankBreak;
		savPrm.iBlankBreak = intBlankBreak;
	}

    if ($('chkPunctuation').checked){
		tmpObj.punctuation = 1;
		savPrm.punctuation = 1;
	}
	savPrm.repeat = GetRadioValue("repeat");
	savPrm.playCount = $F("dpPlayCount");
	        
    var userfields = Object.toJSON(tmpObj);
	var prmSettings = Object.toJSON(savPrm);

    AjaxCallInit("正在处理，请稍后...");
    var text = encodeURIComponent(EditUtil.cssmlEngine._editor.document.body.innerHTML);
    var pars = 'isHtml=true&speed=-100&text=' + text + "&userfields=" + encodeURIComponent(userfields) + "&prmSettings=" + encodeURIComponent(prmSettings);
    var myRequest = new Ajax.Request(
		'advancedView.do?category="freelearning"&rnd=' + ((new Date()).valueOf()),
		{
		    parameters: pars,
		    onSuccess: EditUtil.backTTS,
		    onFailure: function(req) { EditUtil.callFailure(req.responseText) }
		}
	);
};
/* ajax class End */

/* ajax back Start */
EditUtil.backTTS = function (req) {
    var backStr = req.responseText;
    if (/SUCCESS/i.test(backStr)) {
        var repeat = GetRadioValue("repeat");
        var playCount = $F("dpPlayCount");
        window.location = "readingView.jsp?rpt="+ repeat +"&pc="+ playCount +"&rnd=" + ((new Date()).valueOf());
    }
    else {
        EditUtil.callFailure(backStr);
    }
    AjaxCallEnd();
};
/* ajax back End */

window.onload = function() {
    EditUtil.cssmlEngine = new CSSMLEngine(window.frames["HtmlEditor"]);
    EditUtil.cssmlEngine.requireSelected = false;
    EditUtil.cssmlEngine._onload = function(editor) {
        var eBody = editor.document.body;
        eBody.style.border = "0px";
        eBody.focus();
        var cssmlHtml = $("cssmlTmp").innerHTML;
        if (cssmlHtml.length > 0) {
            if (!/<div>/i.test(cssmlHtml))
                cssmlHtml = "<div>" + cssmlHtml + "</div>";
            eBody.innerHTML = cssmlHtml;
        }
        else {
            eBody.innerHTML = "<div>" + INIT_TEXT + "</div>";
        }
    };
    EditUtil.cssmlEngine._editor.document.onclick = function() {
        var eBody = EditUtil.cssmlEngine._editor.document.body;
        var txt = CSSMLEngine.getEvalText(eBody.innerHTML);
        if (txt == INIT_TEXT)
            eBody.innerHTML = "<div></div>";
    };
    EditUtil.cssmlEngine._editor.document.onfocusout = function() {
        var eBody = EditUtil.cssmlEngine._editor.document.body;
        var txt = CSSMLEngine.getEvalText(eBody.innerHTML);
        txt = txt.trim();
        if (txt == "") {
            eBody.innerHTML = "<div>" + INIT_TEXT + "</div>";
        }
    };

    if (EditUtil.cssmlEngine.requireSelected) {
        EditUtil.btnState = false;
        EditUtil.cssmlEngine._onselecttext = function(bSelected) {
            var bDisabled = !bSelected;
            if (EditUtil.btnState == bDisabled) return;
            EditUtil.btnState = bDisabled;
            EditUtil.oMenuBar.getItem(0).cfg.setProperty("disabled", bDisabled);
            EditUtil.oMenuBar.getItem(1).cfg.setProperty("disabled", bDisabled);
            EditUtil.oMenuBar.getItem(2).cfg.setProperty("disabled", bDisabled);
            EditUtil.oMenuBar.getItem(3).cfg.setProperty("disabled", bDisabled);
            EditUtil.oMenuBar.getItem(4).cfg.setProperty("disabled", bDisabled);
            EditUtil.oMenuBar.getItem(5).cfg.setProperty("disabled", bDisabled);
        };
    }

    $("btnStart").onclick = function() {
        var html = EditUtil.cssmlEngine._editor.document.body.innerHTML;
        if (!CSSMLEngine.checkHTML(html)) {
            //alert(PageResx1.getResx("ErrNode", "节点不配对，请检查文本内容。"));
            return;
        }
        if (CSSMLEngine._useDisplayPinyin && !EditUtil.checkPinyin(html))
            return;
        if (EditUtil.checkTextLength())
            EditUtil.callTTS();
    };
    $("btnStart").onmouseover = function() {
        this.style.backgroundImage = "url(@images/advPlay2.gif)";
    };
    $("btnStart").onmouseout = function() {
        this.style.backgroundImage = "url(@images/advPlay.gif)";
    };
	$("btnDel").onclick = function(){
		var eBody =EditUtil.cssmlEngine._editor.document.body;
		eBody.innerHTML =  "<div>" + INIT_TEXT + "</div>";
		eBody.focus();
	};
};

/*	Set all params in pages;	*/
doPrmSettings = function(prmSettings){
	if(prmSettings != ""){
		var tmpObj = eval("("+ prmSettings +")");
		if(tmpObj.repeat != null){
			SelectRadioByValue("repeat", tmpObj.repeat);
		}
		if(tmpObj.playCount != null){
			$("dpPlayCount").value = tmpObj.playCount;
		}
		if(tmpObj.punctuation != null){
			$("chkPunctuation").checked = true;
		}
		if(tmpObj.ibreak != null){
			$("txtBreak").value = tmpObj.ibreak;
		}
		if(tmpObj.iBlankBreak != null){
			$("txtBlankBreak").value = tmpObj.iBlankBreak;
		}
	}
};

