var init,total_whole_songs,initialized_song,init_total_songs,curplaypos,curplayduration,current_request_uri,startcount;
var playlist = new Array();
//
// MAIN JS
//
function pl_init()
{
	// // console.log('initializing start ... ');
	if(!init)
	{
		for(var pos = startcount; pos <= startcount+init_total_songs-1; pos++)
		{
			// // console.log('init #'+pos);
			pl_init_song(pos);
		}
	}
}

function pl_init_song(pos)
{
	var song = playlist[pos];
	if(!song.init)
	{
		//
		$('plduration_'+pos).innerHTML = 'initializing ...';
		// initialize song
		var url = '/ajax/get_yt_info_json';
		var params = 'artist_name='+encodeURIComponent(song.js_artist_name)+'&song_name='+encodeURIComponent(song.js_song_name)+'&pos='+pos+'&T_ID='+song.T_ID;
		new Ajax.Request(url, {
		  method: 'post',
		  parameters: params,
		  onSuccess: pl_init_song_complete
		});
	}
	else
	{
		$('plduration_'+pos).innerHTML = convert_second_to_minsec(song.yt_duration);
	}

}

// initialize and play the song
function init_play_song(pos)
{
	curplaypos = pos;
	// console.log("init_play_song: "+pos);
	var song = playlist[pos];
	if(!song.init)
	{
		//
		$('plduration_'+pos).innerHTML = 'initializing ...';
		// initialize song
		var url = '/ajax/get_yt_info_json';
		var params = 'artist_name='+encodeURIComponent(song.js_artist_name)+'&song_name='+encodeURIComponent(song.js_song_name)+'&pos='+pos+'&T_ID='+song.T_ID;
		new Ajax.Request(url, {
		  method: 'post',
		  parameters: params,
		  onSuccess: pl_init_play_song_complete
		});
	}
	else
	{
		$('plduration_'+pos).innerHTML = convert_second_to_minsec(song.yt_duration);
		curplaypos = pos;
		// we do not need to play the current song
		var tr = $('plrow_'+pos);
		tr.className = trim(tr.className) + ' playing';
	
		// play_song(pos);
		
		// we just need to run the timer
		autoplay_timer(startcount);
		
	}
}

function pl_init_play_song_complete(transport) 
{
	// // console.log(transport.responseText);
	// convert the response to obj
	var response = transport.responseText;
	var obj = response.evalJSON(true);
	
	var song = playlist[obj.pos];
	if(!song.init)
	{
		// populate the playlist js array
		song.yt_duration = obj.yt_duration;
		song.yt_title = obj.yt_title;
		song.yt_flash_url = obj.yt_flash_url;
		song.init = true;
		// reconstruct the playlist row
		if(parseInt(obj.yt_duration) > 0)
		{
			$('plduration_'+obj.pos).innerHTML = convert_second_to_minsec(obj.yt_duration);
		}
		else
		{
			$('plduration_'+obj.pos).innerHTML = convert_second_to_minsec(obj.yt_duration);
		}
		initialized_song++;
		if(initialized_song >= init_total_songs) 
		{
			$('autoplay_link').className = 'inline';
			init = true;
		}
	}
	// console.log("pl_init_play_song_complete: "+obj.pos);
	
	// to fix ie bugs and other bugs, we just need to reload this page as the original information has been set
	curplaypos = obj.pos;
	
	// play_song(obj.pos);
	// autoplay_timer(startcount);
	var tr = $('plrow_'+obj.pos);
	tr.className = trim(tr.className) + ' playing';
	if(parseInt(obj.yt_duration) == 0) location.href=up_nextplayurl; 
	else 
	{
		location.href=current_request_uri;
	}
}

function pl_init_song_complete(transport) 
{
	// // console.log(transport.responseText);
	// convert the response to obj
	var response = transport.responseText;
	var obj = response.evalJSON(true);
	
	var song = playlist[obj.pos];
	if(!song.init)
	{
		// populate the playlist js array
		song.yt_duration = obj.yt_duration;
		song.yt_title = obj.yt_title;
		song.yt_flash_url = obj.yt_flash_url;
		song.init = true;
		// reconstruct the playlist row
		if(parseInt(obj.yt_duration) > 0)
		{
			$('plduration_'+obj.pos).innerHTML = convert_second_to_minsec(obj.yt_duration);
		}
		else
		{
			$('plduration_'+obj.pos).innerHTML = "N/A";
		}
		initialized_song++;
		if(initialized_song >= init_total_songs) 
		{
			$('autoplay_link').className = 'inline';
			init = true;
		}
	}
}

//
// major function
//
function play_song(pos)
{
	// // console.log('playing song #'+pos);
	
	var song = playlist[pos];
	
	if(!song.init)
	{
		alert('please wait awhile as we initialize this song');
		
	}
	else
	{
		// console.log("play_song: "+pos);
		reset_playlist_color();
		var tr = $('plrow_'+pos);
		tr.className = trim(tr.className) + ' playing';
		curplaypos = pos;
		if(song.yt_duration == 0)
		{
			set_empty_youtube();
			set_scroller(song.T_ID);
		}
		else
		{
			set_youtube(song.yt_flash_url,song.yt_title);	
			set_scroller(song.T_ID);
		}
	}
}

function stop_song()
{	
	// // console.log('stop all songs');
	if(autoplay_timeout != null) clearTimeout(autoplay_timeout);
	$('youtube_box').innerHTML = '<p style="padding-top:20px;">Please select a song from the left</p>';
	$('youtube_box').className = 'novideo';
	reset_playlist_color();
}

function autoplay()
{
	stop_song();
	curplayduration = -1;
	// // console.log('autoplay begin ...');
	autoplay_timer(startcount);
}

function autoplay_timer(startcount)
{
	// console.log("autoplay_timer: "+curplaypos);
	if(curplaypos == 0) curplaypos = startcount;
	if(curplaypos > init_total_songs+startcount-1) { curplaypos = startcount; }
	// // console.log('getting song #'+curplaypos+" (out of "+init_total_songs+")");
	var tmp = playlist[curplaypos];
	curplayduration = tmp.yt_duration;
	if(parseInt(curplayduration) <= 30) 
	{
		// // console.log('Will not play song #'+curplaypos);
		curplaypos++;
		curplayduration = 240;
		playlist_timer = autoplay_timeout = setTimeout("pl_gotonextsong()",(parseInt(curplayduration)+3)*1000);
	}
	else
	{
		// // console.log('playing song #'+curplaypos+' for '+curplayduration+' seconds');
		
		// timer job is currently just to reload the page
		// play_song(curplaypos);
		curplaypos++;
		playlist_timer = autoplay_timeout = setTimeout("pl_gotonextsong()",(parseInt(curplayduration)+3)*1000);
	}
}

function pl_gotonextsong()
{
	location.href=up_nextplayurl;
}
//
// END OF MAIN JS
//


//
// subscribers display
//
var displaylistener = displaysubscriber = false;
function displayListeners(uid)
{
	if(displaylistener)
	{
		$('plstat_details').className = 'hide';
		$('plstat_details').innerHTML = '';
		if($('display_listeners'))
		{
			$('display_listeners').innerHTML = "<img src='/images/right-arr.gif' border='0' />";
		}
		displaylistener = false;
	}
	else
	{
		$('plstat_details').className = 'show';
		var url = '/ajax/playlist/display_listeners/'+uid;
		$('plstat_details').innerHTML = "<img src='/images/ajax-loader.gif' />Loading ...";
		if($('display_listeners'))
		{
			$('display_listeners').innerHTML = "<img src='/images/down-arr.gif' border='0' />";
		}
		if($('display_subscribers'))
		{
			$('display_subscribers').innerHTML = "<img src='/images/right-arr.gif' border='0' />";
		}
		displaylistener = true; 
		displaysubscriber = false; 
		new Ajax.Updater('plstat_details',url, { method: 'post' });
	}
}
function displaySubscribers(uid,splid)
{ 
	if(displaysubscriber)
	{
		$('plstat_details').className = 'hide';
		$('display_subscribers').innerHTML = "<img src='/images/right-arr.gif' border='0' />";
		displaysubscriber = false;
	}
	else
	{
		$('plstat_details').className = 'show';
		var url = '/ajax/playlist/display_subscribers/'+uid+'/'+splid;
		$('plstat_details').innerHTML = "<img src='/images/ajax-loader.gif' />Loading ...";
		if($('display_listeners')) $('display_listeners').innerHTML = "<img src='/images/right-arr.gif' border='0' />";
		if($('display_subscribers')) $('display_subscribers').innerHTML = "<img src='/images/down-arr.gif' border='0' />";
		displaylistener = false;
		displaysubscriber = true;
		new Ajax.Updater('plstat_details',url, { method: 'post' });
	}
}




//
// helper function
//

// reset the playlist color
function reset_playlist_color()
{
	var trs = $$('table#pltable tr'); 
	trs.each( function (elm) {
		var classname = elm.className;
		elm.className = trim(classname.replace(/playing/,"")); 
	});
}

// set youtube
function set_youtube(url,title)
{
	$('youtube_box').innerHTML = '<object width="300" height="240"><param name="movie" value="'+url+'&autoplay=1"></param><embed src="'+url+'&autoplay=1" type="application/x-shockwave-flash" width="300" height="240"></embed></object><!--<br /><strong>'+title+'</strong>-->';	
	$('youtube_box').className = "video";
}
// set empty youtube
function set_empty_youtube(url,title)
{
	$('youtube_box').innerHTML = '<p style="padding-top:20px;">No video for this song.</p>';	
	$('youtube_box').className = "novideo";
}
 
// set scroller
function set_scroller(T_ID)
{
	$('scroller_box').innerHTML = '<object width="300" height="200"><embed src="/ScrollerWidget/LyricsScroller2.swf?lyricid='+T_ID+'&" width="300" height="185" type="application/x-shockwave-flash"/></embed></object>';
	var copycode = $('youtube_box').innerHTML+'<br />'+$('scroller_box').innerHTML;
	$('scroller_box').innerHTML += '<input type="textfield" name="copycode" id="copycode" onclick="copytext(this);" style="width:280px;" readonly="readonly" value="'+htmlEncode(copycode)+'"><span id="copycodetext"></span>';
	$('scroller_box').className = 'scroller';
}

// convert seconds to mm:ss display
function convert_second_to_minsec(seconds)
{
	var minute = Math.floor(seconds/60.0);
	var sec = seconds % 60;
	var sec_disp = '00';
	if(sec < 10) sec_disp = '0'+sec;
	else sec_disp = sec;
	return minute+':'+sec_disp;
}
