﻿// @written by solo
var gJsonTable=null;     //服务端传回的JSON
var gCellCount=25;  //音节表格单元格数
var gIndex=0;       //JSON数组索引
var gSyllableList=null; //当前选取的首字母音节列表
var cssmlEngine=null;
var gPacthList=null;      //修订的音节列表
var gSex=2;//默认女声
var gState=true;//下面播放器是否在读
window.onload=function()
{
    GetPacthList();
   if(!Prototype.Browser.IE) 
   {
        //修正某些IE能使用在FF下不能使用的方法
      HTMLElement.prototype.click = function() 
       {
        var evt = this.ownerDocument.createEvent('MouseEvents');
        evt.initMouseEvent('click', true, true, this.ownerDocument.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
        this.dispatchEvent(evt);
       }
        HTMLElement.prototype.contains=function(Node){// 是否包含某节点 
        do if(Node==this)return true; 
        while(Node=Node.parentNode); 
        return false; 
        }  
   }
    gJsonTable=PYJson;
   var hTable=$('syllableHeadTable'); 
    var syTable=$('syllableTable');
   for(var i=0;i<hTable.rows.length;i++)
   {
        for(var j=0;j<hTable.rows[i].cells.length;j++)
        {
            var td=hTable.rows[i].cells[j];
            Event.observe(td, 'click', this.ABC_OnClick.bindAsEventListener(td), false);
        }
   } 
     for(var i=0;i<syTable.rows.length;i++)
   {
        for(var j=0;j<syTable.rows[i].cells.length;j++)
        {
            var td=syTable.rows[i].cells[j];
            Event.observe(td, 'mouseover', this.Syllable_OnMouseOver.bindAsEventListener(td), false);
            Event.observe(td, 'click', this.Syllable_OnClick.bindAsEventListener(td), false);
            Event.observe(td, 'mouseout', this.Syllable_OnmouseOut.bindAsEventListener(td), false); 
        }
   } 
 //  var temp=window.frames["HtmlEditor"];
   cssmlEngine=$('HtmlEditor'); 
   cssmlEngine.focus();
   hTable.rows[0].cells[0].click();
   IsShowPrevious();
   IsShowNext();
}
GetPacthList=function()
{
    var patchList=["bei2","bao0","ban0","ban2","ben0","ben2","bang0","bang2","beng0","bi0","bie0","biao0","biao2","bian0","bian2","bin0","bin2","bin3","bing0","bing2","bu0","pa0","pa3","pai0","pei0","pei3","pao0","pou0","pou4","pan0","pan3","pen0","pen3","pang0","peng0","pi0","pie0","pie2","pie4","piao0","pian0","pin0","ping0","ping3","ping4","pu0","mo0","me1","me2","me3","me4","mai0","mai1","mei0","mei1","mao0","mou0","mou4","man0","men3","mang0","mang1","mang4","meng0","mi0","mie0","mie2","mie3","miao0","miu0","miu1","miu2","miu3","mian0","mian1","min0","min1","min4","ming0","ming1","mu0","mu1","fo0","fo1","fo3","fo4","fei0","fou0","fou1","fou2","fou4","fan0","fen0","fang0","feng0","de3","de4","dai0","dai2","dei0","dei1","dei2","dei4","dao0","dou0","dou2","dan0","dan2","den0","den1","den2","den3","dang0","dang2","deng0","deng2","dong0","dong2","di0","dia0","dia1","dia2","dia4","die0","die3","die4","diao0","diao2","diu0","diu2","diu3","diu4","dian0","dian2","ding0","ding2","du0","duo0","dui0","dui2","dui3","duan0","duan2","dun0","dun2","ta0","ta2","te0","te1","te2","te3","tai0","tei0","tei2","tei3","tei4","tao0","tou0","tan0","tang0","teng0","teng3","teng4","tong0","ti0","tie0","tie2","tiao0","tian0","ting0","tu0","tuo0","tui0","tuan0","tun0","ne1","ne3","nai0","nai1","nai2","nei0","nei1","nei2","nao0","nou0","nou1","nou2","nou3","nou4","nan0","nen0","nen1","nen2","nen3","nang0","neng0","neng1","neng3","neng4","nong0","nong1","nong3","ni0","nie0","nie3","niao0","niao1","niao2","niu0","nian0","nin0","nin1","nin3","nin4","niang0","niang1","niang3","ning0","ning1","nu0","nu1","nuo0","nuo1","nuo3","nuan0","nuan1","nuan2","nuan4","nv0","nv1","nv2","nve0","nve1","nve2","nve3","lo0","lo1","lo2","lo3","lo4","le2","le3","lai0","lai1","lai3","lao0","lan0","lan1","lang0","leng0","long0","lia0","lia1","lia2","lia4","lie0","lie2","liao0","liu0","lian0","lian1","lin0","liang0","liang1","ling0","ling1","luo0","luan0","luan1","lun0","lun3","lv0","lv1","lve0","lve1","lve2","lve3","ga0","ge0","gai0","gai2","gei0","gei1","gei2","gei4","gao0","gao2","gou0","gou2","gan0","gan2","gen0","gang0","gang2","geng0","geng2","gong0","gong2","gu0","gu2","gua0","gua2","guo0","guai0","guai2","gui0","gui2","guan0","guan2","gun0","gun1","gun2","guang0","guang2","ka0","ka2","ka4","ke0","kai0","kai2","kei0","kei1","kei2","kei3","kei4","kao0","kao2","kou0","kou2","kan0","kan2","ken0","ken1","ken2","kang0","kang3","keng0","keng2","keng3","keng4","kong0","kong2","ku0","ku2","kua0","kua2","kuo0","kuo1","kuo2","kuo3","kuai0","kuai1","kuai2","kui0","kuan0","kuan2","kuan4","kun0","kun2","kuang0","ha0","he0","he3","hai0","hei0","hei2","hei3","hei4","hao0","hou0","han0","hen0","hen1","hang0","hang3","heng0","heng3","hong0","hu0","hua0","hua3","huo0","huai0","huai1","huai3","hui0","huan0","hun0","hun3","huang0","ji0","jia0","jiao0","jiu2","jian0","jian2","jin0","jin2","jiang0","jiang2","jing0","jing2","jiong0","jiong2","jiong4","ju0","jue0","juan0","juan2","jun0","jun2","jun3","qi0","qia0","qie0","qiao0","qiu0","qiu4","qian0","qin0","qiang0","qing0","qiong0","qiong1","qiong3","qiong4","que0","que3","quan0","qun0","qun3","qun4","xi0","xia0","xia3","xie0","xiao0","xiu0","xiu2","xian0","xin0","xin3","xiang0","xing0","xiong0","xiong3","xiong4","xue0","xuan0","xun0","xun3","zhi0","zhai0","zhei0","zhei1","zhei2","zhei3","zhao0","zhou0","zhan0","zhan2","zhen0","zhen2","zhang0","zhang2","zheng0","zheng2","zhong0","zhong2","zhu0","zhua0","zhua2","zhua4","zhuo0","zhuo3","zhuo4","zhuai0","zhuai2","zhui0","zhui2","zhui3","zhuan0","zhuan2","zhun0","zhun2","zhun4","zhuang0","zhuang2","cha0","che0","che2","chi0","chai0","chai3","chao0","chou0","chan0","chang0","cheng0","chong0","chu0","chuo0","chuo2","chuo3","chuai0","chui0","chui3","chui4","chuan0","chun0","chun4","chuang0","sha0","she0","shai0","shai2","shei0","shei1","shei3","shei4","shao0","shou0","shan0","shan2","shen0","shang2","sheng0","shu0","shua0","shua2","shuo0","shuo2","shuo3","shuai0","shuai2","shui0","shui1","shuan0","shuan2","shuan3","shun0","shun1","shun2","shuang0","shuang2","shuang4","re0","re1","re2","ri0","ri1","ri2","ri3","rao0","rao1","rou0","rou1","rou3","ran0","ran1","ran4","ren0","ren1","rang0","reng0","reng3","reng4","rong0","rong1","rong4","ru0","ru1","rua0","rua1","rua2","rua3","rua4","ruo0","ruo1","ruo3","rui0","rui1","ruan0","ruan1","ruan4","run0","run1","run2","run3","za0","za4","ze0","ze1","ze3","zi0","zi2","zai0","zai2","zei0","zei1","zei3","zei4","zao0","zou0","zou2","zan0","zen0","zen1","zen2","zang0","zang2","zeng0","zeng2","zeng3","zong0","zong2","zu0","zu4","zuo0","zui0","zui2","zuan0","zuan2","zun0","zun2","zun4","ca0","ca2","ca4","ce0","ce1","ce2","ce3","ci0","cai0","cao0","cao4","cou0","cou1","cou2","cou3","can0","cen0","cen3","cen4","cang0","cang3","cang4","ceng3","ceng0","cong0","cong3","cong4","cu0","cu3","cuo0","cui0","cui2","cuan0","cuan3","cun0","sa0","sa2","se0","se1","se2","se3","si0","si2","sai0","sai2","sai3","sao0","sao2","sou0","sou2","san0","san2","sen0","sen2","sen3","sen4","sang0","sang2","seng0","seng2","seng3","seng4","song0","su0","su3","suo0","suo2","suo4","sui0","suan0","suan2","suan3","sun0","sun2","sun4","o0","o3","er0","er1","ai0","ei0","ei1","ei2","ei3","ei4","ao0","ou0","ou2","an0","an2","en0","en2","en3","ang0","ang3","eng0","eng2","eng3","eng4","yi0","ye0","yao0","you0","yan0","yin0","yang0","ying0","yong0","wu0","wo0","wo2","wai0","wai2","wei0","wan0","wen0","wang0","weng0","weng2","yu0","yue0","yue2","yue3","yuan0","yun0","yo2","yo3","yo4"];
     patchList.push("nue0");
     patchList.push("nue1");
     patchList.push("nue2");
     patchList.push("nue3"); 
     patchList.push("lue0");
     patchList.push("lue1");
     patchList.push("lue2");
     patchList.push("lue3"); 
     
     gPatchList=patchList;
}
HasValue=function(value)
{
    var patchList=gPatchList;
   if(patchList.indexOf(value)<0)
        return true; 
    else
        return false;     
}
function ABC_OnClick()
{
    var c=this.innerHTML.replace('\n','').trim();
   var tr=this.parentNode;
   for(var i=0;i<tr.cells.length;i++)
   {
        tr.cells[i].removeClassName('headSelected');
   }
   this.addClassName('headSelected'); 
   var syllableList=GetSyllableByABC(c);
   gSyllableList=syllableList;
    var cellList=GetCellList();
   for(var i=0;i<gCellCount;i++)
   {
        if(syllableList[i]!=null)
        {
            cellList[i].innerHTML=BuildCellHTML(syllableList[i]);
            gIndex=i;
         }
         else
         {
            cellList[i].innerHTML="&nbsp;";
         }   
   } 
      IsShowPrevious();
       IsShowNext();
}
GetCellList=function()
{
   var table=$('syllableTable');
   var cellList=new Array();
    for(var j=0;j<table.rows[0].cells.length;j++)
    {
       for(var i=0;i<table.rows.length;i++)
       {
                cellList.push(table.rows[i].cells[j]); 
       }
    }
   return cellList;
}
Syllable_OnMouseOver=function()
{
   // alert(gState);
   if(!gState)
   return; 
   if(this.innerHTML.indexOf('syFirst')<0)
   return; 

    var horn=this.getElementsByClassName('hornClass')[0];
   horn.show(); 
   var span= this.getElementsByClassName('insert')[0];
   span.show();
   this.addClassName('syhover');
}
//just for firefox
Syllable_OnmouseOut=function()
{
 if(this.innerHTML.indexOf('syFirst')<0)
  return; 
      var horn=this.getElementsByClassName('hornClass')[0];
   horn.hide(); 
      var span= this.getElementsByClassName('insert')[0];
     span.hide();
     this.removeClassName('syhover');
}
Horn_OnMouseOver=function(span)
{
   var td=span.parentNode; 
   sy=td.getElementsByClassName('sySecond')[0].innerHTML; 
   var regExp=/\d/;
    var toneNum=regExp.exec(sy);
    ChangeTone(toneNum);
   var img=span.descendants()[0];
   CallTTS(sy);
   img.src='./@images/horn2.gif';
}
Horn_OnClick=function(span)
{
      var td=span.parentNode;
   sy=td.getElementsByClassName('sySecond')[0].innerHTML; 
   var regExp=/\d/;
    var toneNum=regExp.exec(sy);
    ChangeTone(toneNum);
   CallTTS(sy);
}
Horn_OnMouseOut=function(span)
{
       var img=span.descendants()[0];
        img.src='./@images/horn.gif';
}
ChangeTone=function(toneNum)
{
   var imgUrl='./@images/tone'+toneNum+'.gif';
  // alert(imgUrl);
    $('tonePic').src=imgUrl;
}
Syllable_OnClick=function()
{
}

GetSyllableByABC=function(c)
{
    c=c.toLowerCase();
   gIndex=0; 
    return gJsonTable[c];
}
btnStart_Onclick=function(sex)
{
    if(sex=='0')
         gSex=2; 
   else
          gSex=4;
    if($('HtmlEditor').value.length<1)
    return;       
   var str=$('HtmlEditor').value.substr(0,200);
   str=ToCSSML(str); 
   if(str.length>0)
        CallTTS(str,1);
}
CallTTSResponse = function(req){
	try{
		var backStr = req.responseText;
		//alert(backStr);
		var temp=eval('('+backStr+')');
		temp.MediaUrl = temp.MediaUrl.replace(/http\:\/\/[^/]+/i,"http://"+location.host);
		$('PlayerPy').URL = temp.MediaUrl;
	}catch(exc){
		alert(backStr);
	}
};
CallTTSResponse2 = function(req){
	try{
		var backStr = req.responseText;
		//alert(backStr);
		var temp=eval('('+backStr+')');
		temp.MediaUrl = temp.MediaUrl.replace(/http\:\/\/[^/]+/i,"http://"+location.host);
		$('Player1').URL = temp.MediaUrl;
	}catch(exc){
		alert(backStr);
	}
};
//type=="0"拼音表
//type=="1"输入框
CallTTS=function(str,type)
{
    var response=CallTTSResponse;
    var pars='isdebug=true&vid=8&category=freelearning&speed=-100&&pinyin='+encodeURIComponent(str);
    if(type=="1")
   { 
     pars='isdebug=true&vid='+gSex+'&category=freelearning&speed=-100&usecssml=true&text='+encodeURIComponent(str);
     response=CallTTSResponse2;
   }
	                var myRequest=new Ajax.Request(
		                'textospeech.aspx?rnd='+((new Date()).valueOf()),
		                {
			                parameters: pars,
			                onSuccess:response,
			                onFailure:CallTTSErr
		                }
	                );
}
CallTTSErr = function(req)
{
};
IsShowPrevious=function()
{
    if(gSyllableList[gIndex-gCellCount])
   { 
        $('preBtn').show();
        return true; 
   }
   else
   {
        $('preBtn').hide();
        return false;
   } 
}
IsShowNext=function()
{
     if(gSyllableList[gIndex+1])
     {
        $('nextBtn').show();
        return true;
     }
     else
     {
        $('nextBtn').hide();
        return false;
     }
}
Previous=function()
{
    if(IsShowPrevious())
   {
            var cellList=GetCellList();
            var index=0;
            var pageIndex=Math.ceil(gIndex/gCellCount);
            if(pageIndex>0)
            {
                index=(pageIndex-2)*gCellCount;
            }
          //  alert("pageIndex:"+pageIndex+"  index:"+index);
            var j=0;
         for(var i=index;i<index+gCellCount;i++)
        {
            if(gSyllableList[i]!=null)
            {
               cellList[j].innerHTML=BuildCellHTML(gSyllableList[i]);
                gIndex=i;
             }
            else
            {
                  cellList[j].innerHTML="&nbsp;";
            }    
            j++;
        }   
        IsShowPrevious();
        IsShowNext();      
   } 
}
Next=function()
{
    if(IsShowNext())
   {
         var cellList=GetCellList();
         var count=gCellCount+gIndex+1;
     //    alert("gIndex+1"+eval(gIndex+1)+"   count:"+count);
          var j=0;
         for(var i=gIndex+1;i<count;i++)
        {
            if(gSyllableList[i]!=null)
            {
                cellList[j].innerHTML=BuildCellHTML(gSyllableList[i]);
                 gIndex=i;
             }
            else
            {
                cellList[j].innerHTML="&nbsp;";
            }    
            j++; 
        }   
     IsShowPrevious();
     IsShowNext();     
   } 
}
Insert=function(span)
{
   var td=span.parentNode;
   sy=td.getElementsByClassName('sySecond')[0].innerHTML; 
  $('HtmlEditor').innerHTML+=sy+" "; 
  $('HtmlEditor').focus();
}
BuildCellHTML=function(syllable)
{
    var syText=syllable.First;
    var sy=syllable.Second;
    var htmlStr="";
   if(HasValue(syllable.Second))
   { 
        htmlStr+="<span class='syFirst'>"+syllable.First+"<\/span>" ;
        htmlStr+="<span class='insert' style='display:none' onclick='Insert(this)'><img onmouseover='Insert_OnMouseOver(this)' onmouseout='Insert_OnMouseOut(this)' src= './@images/add.gif' alt="+PageResx1.getResx("insertImgTip","插入")+"><\/span>";
        htmlStr+="<span class='sySecond' style='display:none'>"+syllable.Second+"<\/span>" ;
        htmlStr+="<span class='hornClass' style='display:none' onmouseover='Horn_OnMouseOver(this)' onmouseout='Horn_OnMouseOut(this)' onclick='Horn_OnClick(this)' ><img src= './@images/horn.gif' alt="+PageResx1.getResx('playImgTip','播放')+">";
   }
   else
   {
        htmlStr="&nbsp;";
   }
   return htmlStr;
}
Insert_OnMouseOver=function(img)
{

    //待实现
   img.src="./@images/add2.gif";
}
Insert_OnMouseOut=function(img)
{
    //待实现
   img.src="./@images/add.gif";
}
//计算鼠标是否在TD里面了
Contains=function(e,o)
{
    var x = e.clientX + document.body.scrollLeft;  
    var y = e.clientY + document.body.scrollTop ;  
    var w = o.offsetWidth;    
    var h = o.offsetHeight;
    var p=getCurrentPostion(o);
   if(x>(p.x+w) || x<p.x || y>(p.y+h) || y<p.y) 
            return false   ;   
   else
            return true;
    
}
//绝对位置
function getCurrentPostion(element)
{
  var   rect   =   {x:0,y:0}   
  do
  {   
    rect.x   +=   element.offsetLeft   ;
    rect.y   +=   element.offsetTop   ;
    element   =   element.offsetParent;   
  }  
   while(element)   
  return   rect ;     
}
CreatePhoneme=function(str)
{
   str=str.trim().replace('\n','').replace(/&nbsp;/ig,'');
   str=str.replace(/(([a-z]+?\d){1,})/g, "<phoneme lang=\"zh-cn\">$1<\/phoneme>");
    return str;
}
ToCSSML=function(str)
{
    var str=CreatePhoneme(str);
    var s="";
     s+=" <?xml version=\"1.0\" encoding=\"utf-8\"?>";
     s+= "<speak xml:lang=\"cn\">";
     s+=    "<sentence>";
     s+= str;
     s+= "<\/sentence> ";
     s+= "<\/speak>"; 
   return s; 
}
  function onmouseover_swoman_bt(img)
    {
         img.src="@images/woman-in-02.gif";
    }
    function onmouseout_swoman_bt(img)
    {
        img.src="@images/woman-in-01.gif";
    }
    function onmouseover_sman_bt(img)
    {
        img.src="@images/man-in-02.gif";
    }
    function onmouseout_sman_bt(img)
    {
        img.src="@images/man-in-01.gif";
    }

