var SpeakerFlash = new Class({
	initialize: function(movieName){
    	this.movieName = movieName;
    	this.initplayer();
	},
	
	initplayer: function(){
		if(this.getMovie() != null)
			return;

		var playHtml = '';
		playHtml += '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="165" height="37" id="' + this.movieName + '" align="">';
		playHtml += '	 <param name=movie value="http://www.guavatalk.com/image/speaker.swf?file=/image/voice/ai1.mp3?a=0">';
		playHtml += '	 <param name=quality value=high>';
		playHtml += '	 <param name=bgcolor value=#FFFFFF>';
		playHtml += '	 <param name="allowScriptAccess" value="always" />';
		playHtml += '	 <embed src="http://www.guavatalk.com/image/speaker.swf?file=/image/voice/ai1.mp3?a=0" quality=high bgcolor=#FFFFFF width="165" height="37" name="' + this.movieName + '" align="" type="application/x-shockwave-flash" swLiveConnect="true" allowScriptAccess="always" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>';
		playHtml +=	'</object>';
					
		var container = new Element('div', {
			'styles':{
				position	: 'absolute', 
				'left'		: '-1000px',
				'top'		: '-1000px',
				'opacity'	: 100
			}
		});
		container.innerHTML = playHtml;
		container.injectInside(document.body);
		this.movie = this.getMovie();
	},
	
	movieIsLoaded : function (){
		if (typeof(this.movie) != "undefined")
			return this.movie.PercentLoaded() == 100;
		else return
			false;
	},

	getMovie : function (){
		if (navigator.appName.indexOf ("Microsoft") !=-1){
			this.movie = window[this.movieName];
		}
		else{
			this.movie = document[this.movieName];
		}
		return this.movie;
	},
	
	play : function () {
		this.movie.TCallLabel('/','play');
	},

	stop : function () {
		this.movie.TCallLabel('/','stop');
	},

	pause : function () {
		this.movie.TCallLabel('/','pause');
	},

	playToggle : function () {
		this.movie.TCallLabel('/','playToggle');
	},

	reset : function () {
		this.movie.TCallLabel('/','reset');
	},

	load : function (url) {
		this.movie.SetVariable('currentSong', url);
		this.movie.TCallLabel('/','load');
	},

	loadAndPlay : function (url) {
		this.load(url);
		this.play();
	},

	getState : function () {
		var ps = this.movie.GetVariable('playingState');
		var ls = this.movie.GetVariable('loadingState');

		if (ps == 'playing')
			if (ls == 'loaded') return ps;
			else return ls;

		if (ps == 'stopped')
			if (ls == 'empty') return ls;
			if (ls == 'error') return ls;
			else return ps;

		return ps;	
	},

	getPlayingState : function () {
		return this.movie.GetVariable('playingState');
	},

	getLoadingState : function () {
		return this.movie.GetVariable('loadingState');
	},

	registerEvent : function (eventName, action) {
		this.movie.SetVariable(eventName, action);
	},

	splitpinyin : function(input){
		var begin = 0, pos = 0;
		var arrUrl = '';
		var i = 0;
		while (begin < input.length) {
			var pos_1 = input.indexOf("1", begin);
			var pos_2 = input.indexOf("2", begin);
			var pos_3 = input.indexOf("3", begin);
			var pos_4 = input.indexOf("4", begin);
			var pos_5 = input.indexOf("5", begin);
			pos = pos_1;
			if ((pos_2 < pos || pos == -1) && pos_2 > -1)
				pos = pos_2;
			if ((pos_3 < pos || pos == -1) && pos_3 > -1)
				pos = pos_3;
			if ((pos_4 < pos || pos == -1) && pos_4 > -1)
				pos = pos_4;
			if ((pos_5 < pos || pos == -1) && pos_5 > -1)
				pos = pos_5;

			if (pos < 0)
				break;

			if(arrUrl != '')
				arrUrl += ',';
			arrUrl += 'http://www.guavatalk.com/image/voice/' + input.substring(begin, pos + 1) + '.mp3';
			begin = pos + 1;
		}
		return arrUrl;
	},
	
	loadVocalbePinyin : function(pinyin){
		var arrUrl = this.splitpinyin(pinyin);
		this.loadArrayUrl(arrUrl);
	},
	
	loadArrayUrl : function(arrUrl){
		if(!$chk(arrUrl)){
			return;
		}
		
		if(arrUrl.indexOf(',') == -1){
			this.loadAndPlay(arrUrl);
			this.registerEvent('onSongOver', 'OuterSpeaker("", "' + this.movieName + '")');
		}else{
			var url = arrUrl.substring(0, arrUrl.indexOf(','));
			this.loadAndPlay(url);
			var nextArrUrl = arrUrl.substring(arrUrl.indexOf(',') + 1);
			if(nextArrUrl != ''){
				this.registerEvent('onSongOver', 'OuterSpeaker("' + nextArrUrl + '", "' + this.movieName + '")');
				this.registerEvent('onError', 'OuterSpeaker("' + nextArrUrl + '", "' + this.movieName + '")');
			}
		}
	}
});

function OuterSpeaker(arrUrl, movieName){
	var speaker = new SpeakerFlash(movieName);
	if(arrUrl == ''){
		speaker.stop();
	}else{
		speaker.loadArrayUrl(arrUrl);
	}
}
