PresolSpeaker = new function(){
	//PresolSpeakerのURL
	this.presolSpeakerUrl = "http://125.206.118.31/PresolQueryService/jsapi.aspx";
	this.playerUrl = "http://125.206.118.31/PresolQueryService/SamplePlayer.swf";

	this.langno = 0;
	this.EnableTTS = false;
	
	//翻訳結果を表示するために呼ばれる関数
	this.onShowText = null;
	
	this.init = function(){
	}

	this.timerId = 0;
	
	this.TTSDelay = function(str, misc){
		PresolSpeaker.setSelectionText(str);
		PresolSpeaker.timeId = setTimeout(function(){PresolSpeaker.TTSforSelectedText();}, misc);
	}
	
	this.TTSDelayCancel = function(){
		this.setSelectionText("");
	}
	
	this.ChangeLangSelect = function(lang){
		PresolSpeaker.langno = lang;
	}
	
	
	this.TTSforSelectedText = function(){
		this.TTS(this.getSelectionText());
	}
	
	this.TTS = function(str){
		if(str == ""){
			return;
		}

		var param = "ttsmode=" + this.langno + "&callback=PresolSpeaker.callback" + "&text=" + this.urlencode(str);
		var script_node = document.createElement('script');
		script_node.src = this.presolSpeakerUrl + "?" + param;
		document.body.appendChild(script_node);
	}
	
	this.callback = function(tuaisres){
		if(this.onShowText){
			this.onShowText(this.urldecode(tuaisres.Text));
		}
		this.playVoice(tuaisres.FileUrl);
	}
	
	this.playVoice = function(url){
		if(!this.EnableTTS){
			return;
		}
	
		var divcontainer = "presolSpeaker_flash_setvariables_tts";
		
		if(!document.getElementById(divcontainer)){
			var divholder = document.createElement("div");
			divholder.id = divcontainer;
			document.body.appendChild(divholder);
		}
	
		document.getElementById(divcontainer).innerHTML = "";
	
		var vars = "url=" + url;
	
	/*	var divinfo = '<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'
		+ ' codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0"'
		+ ' WIDTH="0" HEIGHT="0" id="tts" ALIGN="">'
		+ ' <PARAM NAME="Movie" VALUE="' + this.playerUrl + '">'
		+ ' <PARAM NAME="FlashVars" VALUE="' + vars + '">'
		+ ' <EMBED src="' + this.playerUrl + '" flashvars="' + vars + '" WIDTH="0" HEIGHT="0" NAME="tts" ALIGN=""'
		+ ' TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer">'
		+ ' </EMBED>'
		+ ' </OBJECT>';
	*/


var divinfo = "<object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' codebase='http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0' width='1' height='1' id='iSoundPlayer' align='middle'>"
+ " <param name='allowScriptAccess' value='sameDomain' />"
+ " <param name='flashvars' value='sound=" + url + "' />"
+ " <param name='movie' value='iSoundPlayer.swf' />"
+ " <param name='quality' value='high' />"
+ " <param name='bgcolor' value='#FFFFFF' />"
+ " <embed src='iSoundPlayer.swf' id='iSoundPlayer' flashvars='sound=" + url + "' swLiveConnect='true' quality='high' bgcolor='#FFFFFF' width='1' height='1' align='middle' allowScriptAccess='sameDomain' type='application/x-shockwave-flash' pluginspage='http://www.macromedia.com/go/getflashplayer' />"
+ " </object>";

	
		document.getElementById(divcontainer).innerHTML = divinfo;
	}
	
	this.StopVoice = function(){
			var divcontainer = "presolSpeaker_flash_setvariables_tts";
		
		if(!document.getElementById(divcontainer)){
			var divholder = document.createElement("div");
			divholder.id = divcontainer;
			document.body.appendChild(divholder);
		}
	
		document.getElementById(divcontainer).innerHTML = "";
	}
	

	//テキストコピー先
	this.___tts_text = "";
	
	this.getSelectionText = function(){
		return this.___tts_text;
	}
	
	this.setSelectionText = function(str){
		this.___tts_text = str;
	}
	
	this.copySelection = function()
	{
		setTimeout("PresolSpeaker.copySelectionTimeout()",10);
		return true;
	}
	
	this.copySelectionTimeout = function()
	{
		try{
			this.setSelectionText("");
			if (window.getSelection)
			{
				this.setSelectionText(window.getSelection());
			}
			else if (document.getSelection)
			{
				this.setSelectionText(document.getSelection());
			}
			else if (document.selection)
			{
				this.setSelectionText(document.selection.createRange().text);
			}
		}
		catch(e){
			null;
		}
	}
	
	this.urlencode = function(data){
		//return escape(_data);
	/*	var encdata = '';

		if(data!=""){
			//&と=で一旦分解しencode
			var encdata = '';
			var datas = data.split('&');
			for(i=1;i<datas.length;i++)
			{
				var dataq = datas[i].split('=');
				encdata += '&'+encodeURIComponent(dataq[0])+'='+encodeURIComponent(dataq[1]);
			}
		}
		else{
			encdata = "";
		}
		*/
		return encodeURIComponent(data);
		
	}
	
	
	this.urldecode = function(_data){
	    var dStr = "";
	    var mask  = new Array ( null, 0x1f, 0x0f, 0x07, 0x03, 0x01 );
	    var i, n, c, hNum, cn, bFlag;
	    
	    for (i=0; i<_data.length; i++)
	    {
	        c = _data.charAt(i);
	        
	        if (c == "\x2b") dStr += "\x20";
	        else if (c != "\x25") dStr += c;
	        else
	        {
	            hNum = parseInt( _data.substr(i+1, 2), 16 );
	            i += 2;
	            
	            if (hNum <= 0x7f) cn = hNum;
	            else
	            {
	                bFlag = 0x20;
	                n = 1;
	                while (hNum & bFlag && n++) bFlag >>= 1;
	                cn = hNum & mask[n];
	                
	                while (n--)
	                {
	                    i += 2;
	                    hNum = parseInt( _data.substr(i++, 2), 16 );
	                    cn <<= 6;
	                    cn ^= hNum & 0x3f;
	                }
	            }
	            dStr += String.fromCharCode(cn); 
	        }
	    }
	    return dStr;
	}
	
}

PresolSpeaker.init();

PresolSpeaker.onShowText = function(str){
	window.status = str;
}
