/* CONFIGURATIONS ************************************************************/

var domain_name = "http://truemusic.truelife.com/";

//var url ="http://twsvc.trueworld.net/StreamingPlaylistService/streammanager.aspx?streamtype=~streamtype~&scope=~scope~&contentgroup=~contentgroup~&streamguid=~guid~&wmcontentbitrate=~bitrate~&trueworldtoken=~trueworldtoken~&referer=~referer~&channel=~channel~";

//no have token
//var url ="http://twsvc.trueworld.net/StreamingPlaylistService/streammanager.aspx?streamtype=~streamtype~&scope=~scope~&contentgroup=~contentgroup~&streamguid=~guid~&wmcontentbitrate=~bitrate~&referer=~referer~&channel=~channel~&ext=~ext~&clientip=~clientip~";
//have token


//no have token
//var url ="http://test.trueworld.net/StreamingPlaylistService/streammanager.aspx?streamtype=~streamtype~&scope=~scope~&contentgroup=~contentgroup~&streamguid=~guid~&wmcontentbitrate=~bitrate~&referer=~referer~&channel=~channel~&ext=~ext~&clientip=~clientip~";
//have token



// for production
//var url ="http://twsvc.staging.truelife.com/StreamingPlaylistService/streammanager.aspx?streamtype=~streamtype~&scope=~scope~&contentgroup=~contentgroup~&streamguid=~guid~&wmcontentbitrate=~bitrate~&referer=~referer~&channel=~channel~&trueworldtoken=~trueworldtoken~&ext=~ext~&clientip=~clientip~";
var url ="http://twsvc.truelife.com/StreamingPlaylistService/streammanager.aspx?streamtype=~streamtype~&scope=~scope~&contentgroup=~contentgroup~&streamguid=~guid~&wmcontentbitrate=~bitrate~&referer=~referer~&channel=~channel~&ext=~ext~&clientip=~clientip~";
//var url ="http://twsvc.truelife.com/StreamingPlaylistService/streammanager.aspx?streamtype=~streamtype~&scope=~scope~&contentgroup=~contentgroup~&streamguid=~guid~&wmcontentbitrate=~bitrate~&referer=~referer~&channel=~channel~&trueworldtoken=~trueworldtoken~&ext=~ext~&clientip=~clientip~";
var url_jukebox ="http://services.truelife.com/StreamingPlaylistService2/streammanager.aspx?streamtype=~streamtype~&scope=~scope~&contentgroup=~contentgroup~&streamguid=~guid~&wmcontentbitrate=~bitrate~&referer=~referer~&channel=~channel~&ext=~ext~&clientip=~clientip~&file=1";



var url_concert = "http://twsvc.truelife.com/stream/stream.asp?guid=~streamguid~&ft=wmv&WMContentBitrate=~bitrate~";
var url_webboard = "mms://streaming.trueworld.net/ondemand/webboardod.wsx?f=~streamguid~&WMContentBitrate=~bitrate~";

//var stream_url = "http://test1.truemusic.com:8888/streaming/streamuri.aspx";
var slider_included = true;			// set to false if player does not provide slider
var volume_slider_included = true;	// set to false if player does not provide volume slider
var time_ticker_included = true;	// set to false if player does not provide time ticker


var song_title_text_name = "song_title_text";
var album_title_text_name = "album_title_text";
var artist_title_text_name = "artist_title_text";
var song_tick_text_name = "song_tick_text";
var song_duration_text_name = "song_duration_text";
var player_status_text_name = "player_status_text";
var volume_slider_name = "volume_bar";
var volume_slider_handle_name = "volume_handle";
var slider_name = "tracking_bar";
var slider_handle_name = "tracking_handle";
var play_next_item_callback = "";


var fixed_loop_max_default = 3;
var fixed_loop_max = fixed_loop_max_default;
var fixed_loop_count = 0;

var isFirstTime_loadVoteComment = true;

var loadVoteComment = false;

//var bitrate = {audio:{"23000", "65000", "93000"}, vdo:{"23000", "65000", "93000"}};
//var current_bitrate = 0;	// index
var vdo_quality = {narrow:56000,low:256000,med:512000,hi:1024000};
var audio_quality = {narrow:22000,low:220000,med:640000,hi:960000};






/* CONSTANTS ************************************************************/
var PBM_NO_LOOP = 0;
var PBM_REPEAT = 1;
var PBM_SELF_REPEAT = 2;
var PBM_RANDOM = 3;
var PBM_FIXLOOP = 4;







/* VARIABLES ************************************************************/
var w = null;
var last_guid = "";
var current_id = -1;
var ticker = null;
var meta_invalid = true;
var vol_slider = null;
var slider = null;
var play_ok = false;
var col = new $collection("guid");
var item_array = null;
var mute_state = false;
var playback_mode = PBM_NO_LOOP; // 0=no loop, 1=repeat, 2=random
var bitrate = null;

var stream_type = "";
var scope = "";
var content_group = "";
var current_bitrate = "";
var central_id = "";
var serverplaylist = false;
var trueworld_token = "";

var channel = "";
var isads = false;

var content_url = "";

var referer = "truemusic";
var ext = "";

var clientip = "";

/* INIT **************************************************************/
fixed_loop_count = 1;





/* RELEASE **************************************************************/
window.onunload = w_cleanup;

function w_cleanup()
{
	try
	{
		w.release();	
	}
	catch (e)
	{
	}
	
}



/* PREPARE STREAM URL ***************************************************/


/*function get_stream_url(streamGuid,streamType,scope,contentGroup,streamDomain,token,bitrate)
{
	url = stream_domain + "?token=" + token +"&streamtype=" + streamType + "&scope=" + scope + "&contentgroup="+contentGroup+"&streamguid="+streamGuid+"&&wmcontentbitrate="+bitrate;
	return url;
}

function get_stream_url(guid,streamtype,scope,contentgroup,bitreate)
{
	content_url  = url.replace("~streamtype~", streamtype).replace("~scope~", scope).replace("~contentgroup~", contentgroup).replace("~guid~", guid).replace("~bitrate~", bitreate);
	return content_url;
}*/






/* PLAYER CONTROL *******************************************************/
function w_play(id, by_user_action)
{	// we count play loop only when w_play is called by auto
	// you don't need to pass "by_user_action" in first time auto-call.
	
	if (by_user_action == null || typeof(by_user_action) == "undefined")
	{// user click any item or click next or prev
		by_user_action = true;
	}
	
	log("[NORMAL] w_play(" + id + "," + by_user_action + ")");
	if (w.ispause())
	{
			w.unpause();
	}
	else
	{
		if (id!=null)
		{
			log("  [INFO] id is not null");
			meta_invalid = true;
			current_id = id;
			var item = col.item(id);
			
			if (item!=null) last_guid = item.guid;
			
		}

		log("  [INFO] item to be play (" + last_guid + ")");

		if (last_guid!=null && typeof(last_guid)!="undefined" && last_guid!="")
		{
			if (guidtype=="songguid")
			{
				url  = url.replace("streamguid", "songguid");
			}
			//format 
			
			//older
			//get_trueworld_token();
			//content_url  = url.replace("~streamtype~", stream_type).replace("~scope~", scope).replace("~contentgroup~", content_group).replace("~guid~", last_guid).replace("~bitrate~", current_bitrate).replace("~trueworldtoken~", trueworld_token).replace("~referer~", "truemusic").replace("~channel~", channel);
			
			//before insert token
			//content_url  = url.replace("~streamtype~", stream_type).replace("~scope~", scope).replace("~contentgroup~", content_group).replace("~guid~", last_guid).replace("~bitrate~", current_bitrate).replace("~referer~", "truemusic").replace("~channel~", channel);
			
			//insert token
			get_trueworld_token();
			/*if (current_bitrate == "")
			{
				current_bitrate = "256000";
			}*/
			switch (content_group)
			{
				/*case 'concert':
					content_url = url_concert.replace("~streamguid~",guid).replace("~bitrate~", current_bitrate);
				break;*/
				case 'webboard':
					content_url = url_webboard.replace("~streamguid~",guid+".wmv").replace("~bitrate~", current_bitrate);
				break;
				default:
					if(channel=="jukebox"){
						content_url = url_jukebox.replace("~streamtype~", stream_type).replace("~scope~", scope).replace("~contentgroup~", content_group).replace("~guid~", last_guid).replace("~bitrate~", current_bitrate).replace("~trueworldtoken~", trueworld_token).replace("~referer~", referer).replace("~channel~", channel).replace("~ext~", ext).replace("~clientip~", clientip);
					}
					else{
					content_url = url.replace("~streamtype~", stream_type).replace("~scope~", scope).replace("~contentgroup~", content_group).replace("~guid~", last_guid).replace("~bitrate~", current_bitrate).replace("~trueworldtoken~", trueworld_token).replace("~referer~", referer).replace("~channel~", channel).replace("~ext~", ext).replace("~clientip~", clientip);
					}
				break;
			}
			try
			{
				if (isAlbumPlaylist ==1 )
				{
					content_url=content_url+"&isAlbumPlaylist=1";
				}
				
			}
			catch (e)
			{
			}
			

			//alert(content_url);
			//test
			//content_url  = "http://truemusic.truelife.com/home/player/stm.asx"
			
			//alert(content_url);
			//$("py_link").innerHTML = content_url;
			//alert(current_bitrate+" "+content_url);
			//content_url = get_stream_url(last_guid,streamtype,scope,contentgroup,current_bitrate);

			log("playing guid:" + last_guid);
			log("----------------------------------------------");
			log("state=" + w.status());
			log("  [INFO] url=" + content_url);
			
			//	w.release();
			if (by_user_action) fixed_loop_count = 1;
			log("fixed_loop_count:" + fixed_loop_count);
			//setTimeout("slideit()",9999)
			w.play(content_url);
			// Set button play ( red button )
			
			if ($("c_play") != null)
			{

				$hilight_button("c_play"); 
			}
			
		}
		else
			alert("กรุณาคลิกเลือกเพลงจาก Playlist ก่อนค่ะ");
	}

	log("  [INFO] current_id = " + current_id);
}

function w_stop()
{
	play_ok = false;
	fixed_loop_count = 0;
	w.stop();
	//alert("stop");
}

function w_pause()
{
	w.pause();
}

function w_unpause()
{
	w.unpause();
}

function w_playnext(by_user_action)
{	// we count play loop only when w_play is called by auto
	// you don't need to pass "by_user_action" in first time auto-call.
	if (serverplaylist)
	{
		w.next();
		return true;
	}
	if (by_user_action == null || typeof(by_user_action) == "undefined")
	{// user click any item or click next or prev
		by_user_action = true;
	}

	var pbm = eval(playback_mode);
	var dostop = false;

	log("[EVENT] w_playnext(" + by_user_action + ") is called");
	play_ok = false;
	var item_count = col.count();

	log("  [INFO] current_id = " + current_id);
	log("  [INFO] item_count = " + item_count);

	log("  [INFO] playback_mode = " + playback_mode);
	switch(pbm)
	{
		case PBM_REPEAT:	// repeat
			current_id++;
			current_id %= item_count;
			log("  [INFO] playnext(PBM_REPEAT) = " + current_id);
			break;
		case PBM_SELF_REPEAT:
			// do nothing
			log("  [INFO] playnext(PBM_SELF_REPEAT) = " + current_id);
			break;
		case PBM_RANDOM:	// random
			var new_id = -1;
			do
			{
				new_id = parseInt(Math.random() * 777777) % item_count;
			}
			while (new_id == current_id);
			current_id = new_id;
			log("  [INFO] playnext(PBM_RANDOM) = " + current_id);
			break;
		case PBM_FIXLOOP:
			if (fixed_loop_count<fixed_loop_max)
			{
				current_id++;
				if (current_id >= item_count)
					fixed_loop_count++;
				current_id %= item_count;
			}
			else
			{
				dostop = true;
				fixed_loop_count=0;
			}
			break;
		default:// no loop
			if (current_id < item_count - 1)
			{
				current_id++;
			}
			else
			{
				dostop = true;
			}
			log("  [INFO] playnext(PBM_NO_LOOP) = " + current_id);
			break;
	}
	log("  [INFO] current_id (new) = " + current_id);
	if (!dostop)
	{
		w_play(current_id, by_user_action);	// go next, or if end go first.
	}
	else
	{
		w_stop();
	}
}
function w_playservernext()
{
	//$('wmp').next();
	w.next();
	if ($("c_play") != null)
		{
			$hilight_button("c_play"); 
		}
}

function w_playserverprev()
{
	//$('wmp').next();
	w.previous();
	if ($("c_play") != null)
		{
			$hilight_button("c_play"); 
		}
}

function w_playprev()
{
	if (serverplaylist)
	{
		w.previous();
		return true;
	}
	play_ok = false;
	var item_count = col.count();
	current_id = (current_id - 1);
	if (current_id < 0) current_id = item_count - 1;
	w_play(current_id);	// go next, or if end go first.
}

function w_toggle_mute()
{
	if (mute_state)
		w_unmute();
	else
		w_mute();
	mute_state = w.ismute();
}

function w_mute()
{
	w.mute();
}
function w_unmute()
{
	w.unmute();
}

function w_positionto(percent)
{
	var newpos = parseInt(w.getduration() * percent / 100);
	w.setcurrentposition(newpos);
}

function w_volumeup(offset)
{
	w.volumeup(offset);
	if (volume_slider_included)
	{
		vol_slider.setDisabled();
		vol_slider.setValue(w.volume()/100);
		vol_slider.setEnabled();
	}
}
function w_volumedown(offset)
{
	w.volumedown(offset);
	if (volume_slider_included)
	{
		vol_slider.setDisabled();
		vol_slider.setValue(w.volume()/100);
		vol_slider.setEnabled();
	}
}
function w_volumeto(newvalue)
{
	w.volumeto(newvalue);
}

function w_positionchange()
{
	if (time_ticker_included) $(song_tick_text_name).innerHTML = w.getcurrentpositionstring();
}

function w_openstatechange(nstate)
{
	if (nstate == 13)	// media opened
	{	// show meta from media stream
		
		var content_meta = null;

		if ((slider_included || time_ticker_included) && nstate!=3 && ticker != null)
		{
			clearTimeout(ticker);
			ticker = null;
		}
		w.setcurrentposition(0);
		if (time_ticker_included)
		{
			$(song_duration_text_name).innerHTML = w.getdurationstring();
		}

		try
		{
			var asxTitleJsonEncoded = w.getmediaattribute("asxTitle");
			var asxTitleJson = asxTitleJsonEncoded.replace(/&quot;/img, "\"");

			content_meta = eval('(' + asxTitleJson +')');
		}
		catch (e)
		{
			//content_meta
			alert("w_openstatechange"+e);
		}
		if (content_meta != null)
		{
			$(song_title_text_name).innerHTML = content_meta.title;
			$(artist_title_text_name).innerHTML = "<a class=\"metalink\" href=\"http://truemusic.truelife.com/artist/artist.jsp?guid=" + content_meta.artistGUID +"\" target=\"_blank\">" + content_meta.artist  + "</a>" ;
			$(album_title_text_name).innerHTML = "<a class=\"metalink\" href=\"http://truemusic.truelife.com/artist/album.jsp?guid=" + content_meta.artistGUID +"&album_guid=" + content_meta.albumGUID +"\" target=\"_blank\">" + content_meta.album  + "</a>" ;
			$("thumb").src = content_meta.albumImageURL;
		}
	}
}



function w_playstatechange(nstate)
{
	if ((slider_included || time_ticker_included) && nstate!=3 && ticker != null)
	{
		clearTimeout(ticker);
		ticker = null;
	}
	var statustext = "";
	switch (nstate){
		case 1:
			statustext = "Stopped";
			play_ok = false;
//			last_success_play = last_guid;
			//cancel_playnext_bubbling = true;
			if (slider_included) slider.disabled = true;
			break;
		case 2:
			statustext = "Paused";
			//cancel_playnext_bubbling = true;
			if (slider_included) slider.disabled = false;
			break;
		case 3:
			statustext = "Playing";
			play_ok = true;
			if (time_ticker_included)
			{
				$(song_duration_text_name).innerHTML = w.getdurationstring();
			}
			if (slider_included || time_ticker_included) {
				ticker = setTimeout("update_ticker()", 1000);
				if (slider_included)
					slider.disabled = false;
			}

//			last_success_play = last_guid;
			//cancel_playnext_bubbling = false;
				
					if (loadVoteComment)
					{
						if (isFirstTime_loadVoteComment)
						{
								try
								{
									init_vote();
									init_comment();
									isFirstTime_loadVoteComment = false;
								}
								catch (e)
								{
									//alert("can't load vote, comment")
								}
						}
					}
					else
					{
						if ($("py_vote")!=null && $("py_vote")!= "undefined")
						{
							$("py_vote").className = "hide";
						}
						if ($("py_comment")!=null && $("py_comment")!= "undefined")
						{
							$("py_comment").className = "hide";
						}
					}
			break;
		case 4:
			statustext = "ScanForward";
			if (slider_included) slider.disabled = false;
			//cancel_playnext_bubbling = true;
			break;
		case 5:
			statustext = "ScanReverse";
			if (slider_included) slider.disabled = false;
			//cancel_playnext_bubbling = true;
			break;
		case 6:
			statustext = "Buffering";
			if (slider_included) slider.disabled = false;
			//cancel_playnext_bubbling = true;
			break;
		case 7:
			statustext = "Waiting";
			if (slider_included) slider.disabled = false;
			//cancel_playnext_bubbling = true;
			break;
		case 8:
			statustext = "MediaEnded";
			if (slider_included) slider.disabled = true;
			if (last_state == 9)
				if (play_next_item_callback != null && play_next_item_callback != "")
					eval(play_next_item_callback);
				else
					w_playnext(false);
			break;
		case 9:
			statustext = "Transitioning";
			if (slider_included) slider.disabled = false;
			//cancel_playnext_bubbling = true;
			break;
		case 10:
			statustext = "Ready";
			if (slider_included) slider.disabled = true;
			log("play_ok:" + (play_ok?"yes":"no"));
			log("----------------------------------");
			if (play_ok)
			{
				play_ok = false;
				if (play_next_item_callback != null && play_next_item_callback != "")
					eval(play_next_item_callback);
				else
					w_playnext(false);
			}

			if (loadVoteComment)
			{
				if (isFirstTime_loadVoteComment)
				{
						try
						{
							init_vote();
							init_comment();
							isFirstTime_loadVoteComment = false;
						}
						catch (e)
						{
							//alert("can't load vote, comment")
						}
				}
			}
			else
			{
				if ($("py_vote")!=null && $("py_vote")!= "undefined")
				{
					$("py_vote").className = "hide";
				}
				if ($("py_comment")!=null && $("py_comment")!= "undefined")
				{
					$("py_comment").className = "hide";
				}
			}
			break;
		case 11:
			statustext = "Reconnecting";
			if (slider_included) slider.disabled = true;
			//cancel_playnext_bubbling = true;
			break;
		default:
			//cancel_playnext_bubbling = true;
			statustext = "status:" + nstate;
			if (slider_included) slider.disabled = true;
			if (play_ok)	// retry playing if stopped by unknown reason
			{
				w_play(null);
			}
	}
	last_state = nstate;
	$(player_status_text_name).innerHTML = statustext;
	log("Status changed to: " + statustext);
}

function update_ticker()
{
	$(song_tick_text_name).innerHTML = w.getcurrentpositionstring();
	ticker = setTimeout("update_ticker()", 1000);
	if (slider_included)
	{
		slider.setDisabled();
		slider.setValue((w.getcurrentposition())/ w.getduration());
		slider.setEnabled();
	}
}

function slider_init()
{
	if (slider_included)
	{
		slider = new Control.Slider(slider_handle_name,slider_name,
			{minimum: 0, maximum:100, increment: 1, sliderValue:0.0,
			onSlide:function(v){
				w_positionto(parseInt(v * 100));
				$(song_tick_text_name).innerHTML = w.getcurrentpositionstring();
			}});
		if (slider_included) slider.disabled = true;
	}
	if (volume_slider_included)
	{
		vol_slider = new Control.Slider(volume_slider_handle_name,volume_slider_name,
			{minimum: 0, maximum:100, increment: 1, sliderValue:w.volume()/100,
			onSlide:function(v){
				w_volumeto(parseInt(v * 100));
			}});
	}
}

function get_trueworld_token()
{

	var URL = "http://truemusic.truelife.com/home/player/inc/inc_genTrueworldToken2.php";
		param = "r=" + Math.floor(Math.random()*100);
		URL = URL+"?"+param;
		//alert(URL);
	var xmlr = new clsAjaxMini(); 
	var xChild = xmlr.LoadSync("GET", URL,"",true);
	//	trueworld_token = escape(xChild);
		trueworld_token = xChild;
}

function get_livechat_meta(conId)
{
	
	var URL = "http://truemusic.truelife.com/home/player/inc/inc_call_meta_livechat.php";
		param = "conId="+conId+"&r=" + Math.floor(Math.random()*100);
		URL = URL+"?"+param;
		
	var xmlr = new clsAjaxMini(); 
	var xChild = xmlr.LoadSync("GET", URL,"",true);
		
	//	trueworld_token = escape(xChild);
		$("livechat_meta").innerHTML = xChild;
		
}
