// ------------------------------------------------------------------------------------------ Config
var config = {
	'player_title'				: '°o.O [_justdoit_] O.o°',
	'player_width'				: 700,
	'player_height'				: 334,
	'player_minimize'			: false,
	'player_autoStart'		: true,
	'player_contextMenu'	: false,
	'player_selectText'		: false,
	'player_autoScroll'		: false,
	'player_next_onError'	: true,
	'playlist_autoScroll'	: true,
	'playlist_control'		: 'DblClick',									// Click, DblClick
	'list_title_length'		: 265,
	'list_opt_width'			: 16,
	'list_prefix_name'		: 'Track',
	'favour_enable'				: true,
	'download_enable'			: true,
	'timer_autoStart'			: 500,
	'timer_status'				: 200,
	'timer_new'						: 500,
	'opt_random'					: 'on',												// on, off
	'opt_repeat'					: 'off',											// all, track, off
	'home_URL'						: [false, 'chjpz.vn', 'chipz.vn'],
	'media_URL'						: 'http://localhost/null.php',
	'clear_URL'						: 'images/bbCode/clear.png',
	'media_Volume'				: 100,												// 0 ~> 100
	'media_contextMenu'		: false,
	'media_stretchToFit'	: true,
	'embed_width'					: 300,
	'embed_height'				: 42,
	'embed_loop'					: 1,
	'embed_autoStart'			: true,
	'embed_contextMenu'		: true,
	'embed_default_str'		: 'No media loaded',
	'bbCode_Name'					: 'MEDIA',
	'bbCode_Forum'				: 'MUSIC',
	'download_support'		: ['Hội Quán Tin Học', 'http://hoiquantinhoc.com/forum/showthread.php?p=130395'],	// Không sửa mục này
	'main_tabs'						: ['Playlist', 'Embed', 'Help', 'About'],
	'main_tabs_control'		: 'Click'	// Click, MouseOver
}
// ---------------------------------------------------------------------------- Javascript Functions
var curMedia = -1;
var mediaList = new Array();
var errorList = new Array();
var favourList = new Array();
var sRandom = new Array();
var sRepeat = new Array();
var sMinimize = new Array();

function echo(str) {
	return document.writeln(str);
}
function obj(id) {
	return document.getElementById(id);
}
function randomNum(min, max) {
	if (!max) { var max = min; var min = 0 }
	if (max < min) { var temp = min; var max = min; var min = temp }
	var ranNum = Math.random() * (max-min);
	return (Math.round(ranNum) + min);
}
function objW(id) {
	if (obj(id)) return obj(id).offsetWidth;
	else return false;
}
function objH(id) {
	if (obj(id)) return obj(id).offsetHeight;
	else return false;
}
function number(str) {
	return parseFloat(str);
}
function isNumber(str) {
	if (str.constructor.toString().indexOf('Number') == -1) return false;
	else return true;
}
function trim(str) {
	return str.replace(/^s*(S*(s+S+)*)s*$/, '');
}
function urlDecode(url) {
	return url.replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&quot;/g, '"').replace(/&amp;/g, '&');
}
document.writeln('<div id="transporter" style="position: absolute; top: -9511px"></div>');
function stringCut(string, width, font, size) {
	if (font) obj('transporter').style.fontFamily = font;
	if (size) obj('transporter').style.fontSize = size;

	obj('transporter').innerHTML = string;
	if (obj('transporter').offsetWidth > width) {
		while (obj('transporter').offsetWidth > width) {
			var wSpace = string.lastIndexOf(' ');
			if (wSpace > 0) {
				string = string.substr(0, wSpace);
				if (string.lastIndexOf('..') < string.length - 2) string += '...';
				obj('transporter').innerHTML = string;
			} else {
				break;
			}
		}
	}
	return string;
}
// -------------------------------------------------------------------------- Prefix Array Functions
if (!Array.prototype.indexOf) {
  Array.prototype.indexOf = function(elt) {
    var len = this.length;

    var from = Number(arguments[1]) || 0;
    from = (from < 0) ? Math.ceil(from) : Math.floor(from);
    if (from < 0) from += len;

    for (; from < len; from++) {
      if (from in this && this[from] === elt) return from;
    }
    return -1;
  }
}
// -------------------------------------------------------------------------- Media Player Functions
function mediaRandom(randID) {
	var value = sRandom[randID]; var title;
	switch (value) {
		case 'on' : sRandom[randID] = 'off'; title = 'Random: Off'; break;
		case 'off' : sRandom[randID] = 'on'; title = 'Random: On'; break;
	}
	optHLight('random-' + randID, randID, 'up', 'random');
	obj('random-' + randID).title = title;
}
function mediaRepeat(randID) {
	var value = sRepeat[randID]; var title;
	switch (value) {
		case 'all' : sRepeat[randID] = 'track'; title = 'Repeat: Track'; break;
		case 'track' : sRepeat[randID] = 'off'; title = 'Repeat: Off'; break;
		case 'off' : sRepeat[randID] = 'all'; title = 'Repeat: All'; break;
	}
	optHLight('repeat-' + randID, randID, 'up', 'repeat');
	obj('repeat-' + randID).title = title;
}
function mediaPlay(songID, scroll) {
	if (errorList.indexOf(songID) != -1) {
		if (config.player_next_onError && scroll && errorList.length < mediaList.length) setTimeout(mediaNext, 50);
		return;
	}
	var randID = mediaList[songID][1];
	var title = mediaList[songID][2];
	
	if (curMedia != songID && curMedia != -1) mediaClear(curMedia);
	mediaLoad(songID);
	if (config.playlist_autoScroll) mediaScroll(songID);
	if (config.player_autoScroll && scroll) {
		var curURL = window.location.toString().split('#');
		window.location = curURL[0] + '#main-player-' + randID;
	}
	curMedia = songID;
	timer_status = setInterval('mediaTime(' + songID + ')', config.timer_status);
}
function mediaLoad(songID) {
	var randID = mediaList[songID][1];
	var fileURL = urlDecode(mediaList[songID][3]);

	obj('song-' + songID + '-' + randID + '-status').className = 'playlist-status-playing';
	obj('song-' + songID + '-' + randID + '-string').className = 'playlist-string-playing';
	obj('embed-page-' + randID).value = window.location;
	obj('embed-file-' + randID).value = fileURL;
	obj('embed-forum-' + randID).value = '[' + config.bbCode_Forum + ']' + fileURL + '[/' + config.bbCode_Forum + ']';
	obj('embed-blog-' + randID).value = getTemplate('media-embed').replace('{url}', fileURL);
	obj('media-player-' + randID).URL = fileURL;
}
function mediaClear(songID) {
	clearInterval(timer_status);
	var randID = mediaList[songID][1];
	if (obj('song-' + songID + '-' + randID + '-status').className == 'playlist-status-playing') obj('song-' + songID + '-' + randID + '-status').className = '';
	if (obj('song-' + songID + '-' + randID + '-string').className == 'playlist-string-playing') obj('song-' + songID + '-' + randID + '-string').className = 'playlist-string';
	obj('status-content-' + randID).innerHTML = 'Ready';
	obj('status-content-' + randID).style.backgroundPosition = '4px 0px';
	obj('embed-page-' + randID).value = config.embed_default_str;
	obj('embed-file-' + randID).value = config.embed_default_str;
	obj('embed-forum-' + randID).value = config.embed_default_str;
	obj('embed-blog-' + randID).value = config.embed_default_str;
	obj('media-player-' + randID).URL = config.media_URL;
}
function mediaNext() {
	if (curMedia == -1) var randID = 0;
	else var randID = mediaList[curMedia][1];

	var tMedia = mediaList.length - 1;
	var newMedia = curMedia; var getRandID;
	if (sRepeat[randID] == 'track') {
		newMedia = curMedia;
	} else if (favourList.length > 0) {
		newMedia = favourList.shift();
		getRandID = mediaList[newMedia][1];
		var display = obj('main-player-' + getRandID).style.display;
		obj('playlist-favour-' + newMedia).title = ' Add to favour list ';
		obj('playlist-favour-' + newMedia).className = 'playlist-favour';
		while ((sMinimize[getRandID] || display == 'none') && favourList.length > 0) {
			newMedia = favourList.shift();
			getRandID = mediaList[newMedia][1];
			var display = obj('main-player-' + getRandID).style.display;
			obj('playlist-favour-' + newMedia).title = ' Add to favour list ';
			obj('playlist-favour-' + newMedia).className = 'playlist-favour';
		}
		if (favourList.length == 0 && (sMinimize[getRandID] || display == 'none')) { setTimeout(mediaNext, 10); return; }
	} else if (sRepeat[randID] == 'all') {
		if (sRandom[randID] == 'on') {
			newMedia = randomNum(0, tMedia);
			getRandID = mediaList[newMedia][1];
			var display = obj('main-player-' + getRandID).style.display;
			while (sMinimize[getRandID] || display == 'none') {
				newMedia = randomNum(0, tMedia);
				getRandID = mediaList[newMedia][1];
				var display = obj('main-player-' + getRandID).style.display;
			}
		} else if (sRandom[randID] == 'off') {
			newMedia++;
			if (newMedia > tMedia) newMedia = 0;
			getRandID = mediaList[newMedia][1];
			var display = obj('main-player-' + getRandID).style.display;
			while (sMinimize[getRandID] || display == 'none') {
				newMedia++;
				if (newMedia > tMedia) newMedia = 0;
				getRandID = mediaList[newMedia][1];
				var display = obj('main-player-' + getRandID).style.display;
			}
		}
	} else if (sRepeat[randID] == 'off') {
		if (sRandom[randID] == 'on') {
			newMedia = randomNum(0, tMedia);
			getRandID = mediaList[newMedia][1];
			while (randID != getRandID) {
				newMedia = randomNum(0, tMedia);
				getRandID = mediaList[newMedia][1];
			}
		} else if (sRandom[randID] == 'off') {
			newMedia++;
			if (newMedia > tMedia) newMedia = 0;
			getRandID = mediaList[newMedia][1];
			while (randID != getRandID) {
				newMedia++;
				if (newMedia > tMedia) newMedia = 0;
				getRandID = mediaList[newMedia][1];
			}
		}
	}
	mediaPlay(newMedia, true);
}
function mediaDownload(songID) {
	window.open(urlDecode(mediaList[songID][3]));
}
function mediaTime(songID) {
	var randID = mediaList[songID][1];
	var pState = obj('media-player-' + randID).playState;
	var cTime = obj('media-player-' + randID).controls.currentPositionString;
	var tTime = obj('media-player-' + randID).currentMedia.durationString;
	var nTime = obj('media-player-' + randID).controls.currentPosition;
	var aTime = obj('media-player-' + randID).currentMedia.duration;
	var song_info = obj('media-player-' + randID).status;
	var posX = '-20px';
	if (song_info == '') song_info = '&nbsp;'

	switch (pState) {
		case 1 : posX = '-20px'; break;
		case 2 : posX = '-10px'; break;
		case 3 : posX = '0px'; if (nTime >= 4) song_info = mediaList[songID][2] + ' (' + cTime + ' / ' + tTime + ')'; break;
		case 4 : posX = '-30px'; break;
		case 9 : posX = '-40px'; break;
		case 10 : posX = '-50px'; clearInterval(timer_status); errorList.push(songID); obj('song-' + songID + '-' + randID + '-status').className = 'playlist-status-error'; obj('song-' + songID + '-' + randID + '-string').className = 'playlist-string-error'; if (config.player_next_onError) mediaNext(); break;
	}
	var getStatus = stringCut(song_info, objW('status-content-' + randID) - 3, 'Arial', '11px');
	if (getStatus != song_info) obj('status-content-' + randID).title = song_info;
	else obj('status-content-' + randID).title = '';

	obj('status-content-' + randID).innerHTML = getStatus;
	obj('status-icon-' + randID).style.backgroundPosition = posX + ' -16px';

	if (nTime > aTime - (config.timer_new / 1000) && nTime != 0) {
		clearInterval(timer_status);
		if (window.timer_next) clearTimeout(timer_next);
		timer_next = setTimeout(mediaNext, config.timer_new);
	}
}
function mediaScroll(songID) {
	var itemID = mediaList[songID][0];
	var randID = mediaList[songID][1];
	var iHeight = objH('song-' + songID + '-' + randID + '-string');
	var lHeight = objH('content-0-' + randID);
	var curScroll = obj('content-0-' + randID).scrollTop;
	var newScroll = itemID * iHeight;

	if (newScroll > curScroll && newScroll < curScroll + (lHeight - iHeight)) return;
	if (newScroll > curScroll) newScroll -= lHeight - iHeight;
	if (newScroll < 0) newScroll = 0;
	obj('content-0-' + randID).scrollTop = newScroll;
}
// ------------------------------------------------------------------------------- Operate Functions
function changeTab(tabID, randID) {
	for (var i = 0; i < config.main_tabs.length; i++) {
		if (i == tabID) {
			var className = 'current';
			var display = 'block';
		} else {
			var className = '';
			var display = 'none';
		}
		obj('tab-' + i + '-' + randID).className = className;
		obj('content-' + i + '-' + randID).style.display = display;
	}
}
function addFavour(songID) {
	var className; var title;
	var added = favourList.indexOf(songID);
	if (added > -1) {
		className = 'playlist-favour';
		title = ' Add to favour list ';
		favourList.splice(added, 1);
	} else {
		className = 'playlist-favoured';
		title = ' Remove from favour list ';
		favourList.push(songID);
	}
	obj('playlist-favour-' + songID).title = title;
	obj('playlist-favour-' + songID).className = className;
}
function btnHLight(btnID, state, posX) {
	var posY = 0;
	switch (state) {
		case 'over' : posY = -13; break;
		case 'out'	: posY = 0; break;
		case 'down'	: posY = -26; break;
		case 'up'		: posY = -13; break;
	}
	obj(btnID).style.backgroundPosition = posX + 'px ' + posY + 'px';
}
function optHLight(btnID, randID, state, opt) {
	var posX; var posY;
	if (opt == 'random') var value = sRandom[randID];
	else if (opt == 'repeat') var value = sRepeat[randID];
	switch (value) {
		case 'all' : posX = '-102px'; break;
		case 'track' : posX = '-132px'; break;
		case 'on' : posX = '-36px'; break;
		case 'off' : if (opt == 'repeat') posX = '-72px'; else posX = '0px'; break;
	}
	switch (state) {
		case 'over' : posY = '-14px'; break;
		case 'out' : posY = '0px'; break;
		case 'down' : posY = '-28px'; break;
		case 'up' : posY = '-14px'; break;
	}
	obj(btnID).style.backgroundPosition = posX + ' ' + posY;
}
function _minimize(randID) {
	sMinimize[randID] = !sMinimize[randID];
	if (sMinimize[randID]) {
		var title = 'Restore';
		var display = 'none';
	} else {
		var title = 'Minimize';
		var display = 'block';
	}

	if (curMedia != -1) {
		var getRandID = mediaList[curMedia][1];
		if (randID == getRandID) mediaClear(curMedia);
	}
	obj('main-center-content-' + randID).style.display = display;
	obj('minimize-' + randID).title = title;
}
function _close(randID) {
	if (curMedia != -1) {
		var getRandID = mediaList[curMedia][1];
		if (randID == getRandID) {
			clearInterval(timer_status);
			mediaClear(curMedia);
		}
	}
	obj('main-player-' + randID).style.display = 'none';
//	document.getElementsByTagName('body')[0].removeChild(obj('main-player-' + randID));
}
// ----------------------------------------------------------------------------- Templates Functions
function getTemplate(tplName, randID) {
	if (!tplName) return;
	var html = '';
	switch (tplName) {
		case 'tpl-hacking' : html += '<div class="hacking-content" onClick="window.open(\'http://\' + config.home_URL[1])">Hacking attempt!</div>';
		case 'media-player' :
						if (document.all)	var mCode = 'classid="clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6"';
						else var mCode = 'type="application/x-ms-wmp"';
						html +=
						 '<object id="media-player-' + randID + '" class="media-player" ' + mCode + '>'
						+'	<param name="url" value="' + config.media_URL + '">'
						+'	<param name="autoStart" value="true">'
						+'	<param name="Volume" value="' + config.media_Volume + '">'
						+'	<param name="stretchToFit" value="' + config.media_stretchToFit + '">'
						+'	<param name="EnableContextMenu" value="' + config.media_contextMenu + '">'
						+'</object>'; break;
		case 'media-embed' : html +=
						 '<embed loop="' + config.embed_loop + '" width="' + config.embed_width + '" height="' + config.embed_height + '" src="{url}" volume="-1" autostart="' + config.embed_autoStart + '" enablecontextmenu="' + config.embed_contextMenu + '" />'; break;
		case 'main-layout' : html +=
						 '<table id="main-player-' + randID + '" class="winamp" cellpadding="0" cellspacing="0" onContextMenu="return ' + config.player_contextMenu + '" onSelectStart="return ' + config.player_selectText + '" onDragStart="return false">'
						+'	<tr>'
						+'		<td class="main-top-left"></td>'
						+'		<td class="main-top-center">'
						+'			<table class="main-top-content" cellpadding="0" cellspacing="0">'
						+'				<tr>'
						+'					<td class="player-icon"></td>'
						+'					<td class="player-title">' + config.player_title + '</td>'
						+'					<td><img id="minimize-' + randID + '" src="' + config.clear_URL + '" class="minimize" onMouseOver="btnHLight(this.id, \'over\', 0)" onMouseOut="btnHLight(this.id, \'out\', 0)" onMouseDown="btnHLight(this.id, \'down\', 0); return false" onMouseUp="btnHLight(this.id, \'up\', 0)" onClick="_minimize(' + randID + ')" /></td>'
						+'					<td><img id="exit-' + randID + '" src="' + config.clear_URL + '" title=" Close " class="exit" onMouseOver="btnHLight(this.id, \'over\', -17)" onMouseOut="btnHLight(this.id, \'out\', -17)" onMouseDown="btnHLight(this.id, \'down\', -17); return false" onMouseUp="btnHLight(this.id, \'up\', -17)" onClick="_close(' + randID + ')" /></td>'
						+'				</tr>'
						+'			</table>'
						+'		</td>'
						+'		<td class="main-top-right"></td>'
						+'	</tr>'
						+'	<tr>'
						+'		<td class="main-left"></td>'
						+'		<td class="main-center">'
						+'			<table id="main-center-content-' + randID + '" width="100%" cellpadding="0" cellspacing="0">'
						+'				<tr>'
						+'					<td class="left-content">'
						+'						<table width="100%" height="100%" cellpadding="0" cellspacing="0">'
						+'							<tr>'
						+'								<td id="player-content-' + randID + '" colspan="3" class="player-content">' + getTemplate('media-player', randID) + '</td>'
						+'							</tr>'
						+'							<tr><td colspan="3" class="separator_"></td></tr>'
						+'							<tr>'
						+'								<td class="icon-content"><img id="status-icon-' + randID + '" src="' + config.clear_URL + '" /></td>'
						+'								<td id="status-content-' + randID + '" class="status-content">Ready</td>'
						+'								<td class="controls-content" nowrap><image id="random-' + randID + '" src="' + config.clear_URL + '" class="random" onMouseOver="optHLight(this.id, ' + randID + ', \'over\', \'random\')" onMouseOut="optHLight(this.id, ' + randID + ', \'out\', \'random\')" onMouseDown="optHLight(this.id, ' + randID + ', \'down\', \'random\')" onClick="mediaRandom(' + randID + ')" /><image id="repeat-' + randID + '" src="' + config.clear_URL + '" class="repeat" onMouseOver="optHLight(this.id, ' + randID + ', \'over\', \'repeat\')" onMouseOut="optHLight(this.id, ' + randID + ', \'out\', \'repeat\')" onMouseDown="optHLight(this.id, ' + randID + ', \'down\', \'repeat\')" onClick="mediaRepeat(' + randID + ')" /></td>'
						+'							</tr>'
						+'						</table>'
						+'					</td>'
						+'					<td class="separator"></td>'
						+'					<td class="right-content">'
						+'						<table width="100%" height="100%" cellpadding="0" cellspacing="0">'
						+'							<tr>'
						+'								<td class="playlist-tabs">'
						+'									<ul>';
					for (var i = 0; i < config.main_tabs.length; i++) {
						html += '										<li id="tab-' + i + '-' + randID + '"><a href="javascript: void(0)" on' + trim(config.main_tabs_control) + '="changeTab(' + i + ', ' + randID + ')" onMouseDown="return false"><span>' + config.main_tabs[i] + '</span></a></li>';
					}
					html +=
						 '									</ul>'
						+'								</td>'
						+'							</tr>'
						+'							<tr>'
						+'								<td height="100%">';
					for (var i = 0; i < config.main_tabs.length; i++) {
						html += '									<div id="content-' + i + '-' + randID + '" class="playlist-content">';
						switch(i) {
							case 1 : html += getTemplate('tpl-embed', randID); break;
							case 2 : html += getTemplate('tpl-help', randID); break;
							case 3 : html += getTemplate('tpl-about', randID); break;
						}
						html += '</div>';
					}
					html += '								</td>'
						+'							</tr>'
						+'						</table>'
						+'					</td>'
						+'				</tr>'
						+'			</table>'
						+'		</td>'
						+'		<td class="main-right"></td>'
						+'	</tr>'
						+'	<tr>'
						+'		<td class="main-bottom-left"></td>'
						+'		<td class="main-bottom-center"></td>'
						+'		<td class="main-bottom-right"></td>'
						+'	</tr>'
						+'</table>'; break;
		case 'tpl-embed' : html +=
						 '<div class="embed-content">'
						+'	<span class="embed-left"></span><span class="embed-icon"><img src="' + config.clear_URL + '" class="icon-page" /></span><span class="embed-string">Link to this page</span>'
						+'	<input id="embed-page-' + randID + '" class="embed-input" value="' + config.embed_default_str + '" onClick="this.select()" />'
						+'	<span class="embed-left"></span><span class="embed-icon"><img src="' + config.clear_URL + '" class="icon-file" /></span><span class="embed-string">Link to media file</span>'
						+'	<input id="embed-file-' + randID + '" class="embed-input" value="' + config.embed_default_str + '" onClick="this.select()" />'
						+'	<span class="embed-left"></span><span class="embed-icon"><img src="' + config.clear_URL + '" class="icon-forum" /></span><span class="embed-string">Embed to forum</span>'
						+'	<input id="embed-forum-' + randID + '" class="embed-input" value="' + config.embed_default_str + '" onClick="this.select()" />'
						+'	<span class="embed-left"></span><span class="embed-icon"><img src="' + config.clear_URL + '" class="icon-blog" /></span><span class="embed-string">Embed to blog</span>'
						+'	<textarea id="embed-blog-' + randID + '" rows="4" class="embed-textarea" onClick="this.select()">' + config.embed_default_str + '</textarea>'
						+'</div>'; break;
		case 'tpl-help' : html +=
						 '<div class="help-content">'
						+'	<span class="help-title">Hướng dẫn cách post album trên diễn đàn:</span>'
						+'	<span class="help-head-content">'
						+'		<span class="help-head">1. Giới thiệu:</span>'
						+'		- Post album trên diễn đàn là cách post nhiều bài hát trong một danh sách như bạn đã thấy.<br />'
						+'		- Sử dụng thẻ <span class="bbCode-tag">[' + config.bbCode_Name + ']</span> & <span class="bbCode-tag">[/' + config.bbCode_Name + ']</span> để post.<br />'
						+'		- Bài hát và link được cách nhau bởi dấu "<span class="bbCode-separator">|</span>". Hai bài hát được cách nhau bởi dấu "<span class="bbCode-separator_">||</span>".<br />'
						+'		<span class="help-head">2. Ví dụ:</span>'
						+'		- Bạn có <strong><u>n</u></strong> bài hát với <span class="song-name">tên</span> và <span class="song-url">URL</span> như sau: (<i>trong đó <span class="song-name">song-1</span> ứng với <span class="song-url">url-1</span> và <span class="song-name">song-n</span> ứng với <span class="song-url">url-n</span></i>)<br />'
						+'		<span class="song-content">+ Tên: <span class="song-name">song-1</span>, <span class="song-name">song-2</span>, <span class="song-name">song-3</span>,... <span class="song-name">song-n</span></span>'
						+'		<span class="song-content">+ URL: <span class="song-url">url-1</span>, <span class="song-url">url-2</span>, <span class="song-url">url-3</span>,... <span class="song-url">url-n</span></span>'
						+'		- Trong khung soạn thảo, bạn viết như sau:'
						+'		<span class="bbCode-code">'
						+'			<span class="bbCode-tag">[' + config.bbCode_Name + ']</span>'
						+'				<span class="song-name">song-1</span><span class="bbCode-separator">|</span><span class="song-url">url-1</span><span class="bbCode-separator_">||</span>'
						+'				<span class="song-name">song-2</span><span class="bbCode-separator">|</span><span class="song-url">url-2</span><span class="bbCode-separator_">||</span>'
						+'				<span class="song-name">song-3</span><span class="bbCode-separator">|</span><span class="song-url">url-3</span><span class="bbCode-separator_">||</span>...'
						+'				<span class="song-name">song-n</span><span class="bbCode-separator">|</span><span class="song-url">url-n</span><span class="bbCode-separator_">||</span>'
						+'			<span class="bbCode-tag">[/' + config.bbCode_Name + ']</span>'
						+'		</span>'
						+'	</span>'
						+'	<span class="help-title">Các chức năng chính:</span>'
						+'	<span class="help-head-content">'
						+'		- Post nhiều bài hát trong một danh sách để tăng tính tiện lợi.<br />'
						+'		- Tự động chuyển sang bài khác khi kết thúc một bài hát.<br />'
						+'		- Tự động chuyển sang bài khác khi link bị hỏng.<br />'
						+'		- Tự động scroll đến bài đang hát khi chuyển sang bài mới.<br />'
						+'		- Tự động scroll đến album đang hát khi chuyển sang bài mới.<br />'
						+'		- Có thể chuyển bài hát từ album này qua album khác nếu có nhiều album được post trong cùng một trang.<br />'
						+'		- Chức năng "Favour" cho phép chọn trước những ca khúc bạn yêu thích.<br />'
						+'		- Chức năng "Random" & "Repeat" cho nhiều lựa chọn.'
						+'	</span>'
						+'	<span class="help-title">Một số lưu ý:</span>'
						+'	<span class="help-head-content">'
						+'		- Những bài hát trong album được "Thu nhỏ" hoặc đã đóng album thì không thể play được.<br />'
						+'		- Khi chủ động chuyển bài hát trong lúc một bài hát khác đang play thì bài hát đó tự động dừng.<br />'
						+'		- Post sai cấu trúc được hướng dẫn trên có thể phát sinh lỗi.'
						+'	</span>'
						+'	<span class="help-title">Chú thích:</span>'
						+'	<span class="help-head-content">'
						+'		<span class="help-head">1. Random: (Ngẫu nhiên)</span>'
						+'		- <u>On</u>: Chức năng chọn bài hát ngẫu nhiên được mở.<br />'
						+'		- <u>Off</u>: Chức năng chọn bài hát ngẫu nhiên đã tắt.'
						+'		<span class="help-head">2. Repeat: (Lặp lại)</span>'
						+'		- <u>All</u>: Chức năng lặp lại được mở với trạng thái tất cả. Khi mở chức năng này, toàn bộ bài hát trong trang đó để có thể được chọn tự động kể cả khác album.<br />'
						+'		- <u>Track</u>: Chức năng lặp lại được mở với trạng thái duy nhất. Khi mở chức năng này, bài hát đang hát sẽ được lặp lại mãi mãi.<br />'
						+'		- <u>Off</u>: Chức năng lặp lại đã tắt. Khi tắt chức năng này, chỉ có thể tự động chọn những bài trong cùng album đó.'
						+'	</span>'
						+'</div>'; break;
		case 'tpl-about' : html +=
						 '<div class="about-content">'
						+'	<span class="about-title">°o.O [_just_] O.o° Album Player</span>'
						+'	<span class="about-head-content">'
						+'		Version: 2.0.2 - Date: 01/07/2009 - 24/07/2009<br />'
						+'		Copyright © 2009 by <a href="ymsgr:sendIM?chjpz.2009" onMouseDown="return false">_chjpz_</a> - All rights reserved.'
						+'	</span>'
						+'	<span class="about-author">'
						+'		Author: Trịnh Quang Vinh<br />'
						+'		E-mail: chjpz.doit@gmail.com<br />'
						+'		Skin modified from <a href="http://winamp.com" target="_blank" onMouseDown="return false">Winamp</a>'
//						+'		Dedicated to my wife ... o_0'
						+'	</span>'
						+'	<span class="about-title">Download & Support</span>'
						+'	<span class="about-head-content">'
						+'		- Mã nguồn được cung cấp và hỗ trợ tại diễn đàn <a href="' + config.download_support[1] + '" target="_blank" onMouseDown="return false" style="white-space: nowrap;">' + config.download_support[0] + '</a><br />'
						+'		- Bạn có thể download, sửa chữa mọi thứ cho phù hợp theo ý thích của mình. <span class="about-alert">Tuy nhiên, xin vui lòng giữ nguyên nội dung trang <strong><u>' + config.main_tabs[3] + '</u></strong> này.</span><br />'
						+'		- Mọi ý kiến thắc mắc cũng như đóng góp, bạn vui lòng truy cập diễn đàn  <a href="' + config.download_support[1] + '" target="_blank" onMouseDown="return false" style="white-space: nowrap;">' + config.download_support[0] + '</a> để mọi người cùng thảo luận.'
						+'	</span>'
						+'</div>'; break;
	}
	return html;
}
function createPlayer(mList, playerW, playerH) {
	if (!playerW) var playerW = config.player_width;
	if (!playerH) var playerH = number(config.player_height);
	if (config.home_URL[0]) {
		var curLocation = window.location.toString();
		curLocation = curLocation.split('?');
		curLocation = curLocation[0].split('#');
		curLocation = curLocation[0];
		for (var i = 1; i < config.home_URL.length; i++) {
			var getURL = config.home_URL[i];
			if (curLocation.indexOf(getURL) == -1) { var trueLocation = false; } else { var trueLocation = true; break; }
		}
		if (!trueLocation) { return echo(getTemplate('tpl-hacking'));}
	}

	var randID = 0; var trackNum = 0; itemID = 0;
	while (obj('main-player-' + randID)) randID++;
	while (mList.lastIndexOf('|') == mList.length - 1) mList = mList.substr(0, mList.length - 1);
	echo(getTemplate('main-layout', randID));

	if (config.opt_random == 'on') obj('random-' + randID).title = 'Random: On';
	else obj('random-' + randID).title = 'Random: Off';
	if (config.opt_repeat == 'all') obj('repeat-' + randID).title = 'Repeat: All';
	else if (config.opt_repeat == 'track') obj('repeat-' + randID).title = 'Repeat: Track';
	else obj('repeat-' + randID).title = 'Repeat: Off';

	var tplPlaylist = '';
	mList = mList.split('||');
	if (config.favour_enable) config.list_title_length -= config.list_opt_width;
	if (config.download_enable) config.list_title_length -= config.list_opt_width;

	for (var i = 0; i < mList.length; i++) {
		var getMedia = mList[i].split('|');
		if (!getMedia[0]) continue;
		itemID++;
		if (!getMedia[1]) {
			trackNum++;
			if (trackNum < 10) trackNum = '0' + trackNum;
			getMedia[1] = getMedia[0];
			getMedia[0] = trim(config.list_prefix_name) + ' ' + trackNum;
		}
		mediaList.push([itemID - 1, randID, getMedia[0], getMedia[1]]);
		var songID = mediaList.length - 1;
		var titleCut = stringCut(itemID + '. ' + getMedia[0], config.list_title_length, 'Arial', '12px');
		if (titleCut != itemID + '. ' + getMedia[0]) var title = ' title="' + getMedia[0] + '"';
		else var title = '';
		tplPlaylist +=
			 '<a href="javascript: void(0)" onMouseDown="return false"' + title + '>'
			+'<table cellpadding="0" cellspacing="0">'
			+'	<tr>'
			+'		<td><img id="song-' + songID + '-' + randID + '-status" src="' + config.clear_URL + '" width="0" height="0" /></td>'
			+'		<td id="song-' + songID + '-' + randID + '-string" class="playlist-string" on' + trim(config.playlist_control) + '="mediaPlay(' + songID + ', ' + randID + ')">' + titleCut + '</td>';
		if (config.favour_enable) tplPlaylist += '		<td onClick="addFavour(' + songID + ')" style="cursor: pointer;"><img title=" Add to favour list " src="' + config.clear_URL + '" id="playlist-favour-' + songID + '" class="playlist-favour" /></td>';
		if (config.download_enable) tplPlaylist += '		<td title=" Download song: ' + getMedia[0] + ' " onClick="mediaDownload(' + songID + ')" style="cursor: pointer;"><img src="' + config.clear_URL + '" class="playlist-download" /></td>';
		tplPlaylist += '	</tr>'
			+'</table>'
			+'</a>';
	}

	var mediaH = playerH - 57 + 'px';
	var listH = playerH - 68 + 'px';
	if (isNumber(playerW)) playerW += 'px';
	else if (playerW.indexOf('%') == -1) playerW = number(playerW) + 'px';
	obj('main-player-' + randID).style.width = playerW;
	obj('player-content-' + randID).style.height = mediaH;
	for (var i = 0; i < config.main_tabs.length; i++) { obj('content-' + i + '-' + randID).style.height = listH; }

	obj('content-0-' + randID).innerHTML = tplPlaylist;
	changeTab(0, randID);
	sRandom[randID] = config.opt_random;
	sRepeat[randID] = config.opt_repeat;
	optHLight('random-' + randID, randID, 'out', 'random');
	optHLight('repeat-' + randID, randID, 'out', 'repeat');
	sMinimize[randID] = !config.player_minimize;
	_minimize(randID);
	if (config.player_autoStart && !config.player_minimize && randID == 0) setTimeout(mediaNext, config.timer_autoStart);
}
