//var $ = function (id) {return document.getElementById(id);}
initPlayer();
// 容错 代码太乱 图片不能被点击 拖动什么的应该是歌曲开始播放才可以进行的操作
if (!$("player").controls) alert("浏览器不支持！目前仅支持 IE 内核浏览器");
var mlist = []; // 播放列表
var mode  = 1; // 播放顺序 1顺序播放 2随机播放 3单曲循环
var mkey  = 0; // 当前播放列表 key
var stats = 0; // 播放器状态 0停止播放 1正在播放 2暂停播放
var elapsed = loadId = null; // 播放进度id, 加载进度id
var loadBuf = 0; // 加载百分比 (int)
var ismove = false; // 是否正在拖动操作

// 根据播放模式准备下一首歌
function fitout(flag, specify) {
	var flag = flag || false;
	var specify = specify || false;

	stop();
	if (specify) { // 指定播放哪首歌
		mkey = specify;
	} else {
		if (mode == 2) {
			noRepeatRand();
		} else if (mode == 1) {
			if (flag) {// 前进后退
				mkey = mkey + flag;
			} else {
				++mkey;
			}
		} else { // 单曲
			mkey;
		}
	}

	play();
}

// 随机出和上一首歌曲不重复的歌曲
function noRepeatRand() {
	if (mlist.length == 1) return 0;

	var rand = Math.floor(mlist.length * Math.random());
	if (rand == mkey) {
		noRepeatRand();
	} else {
		mkey = rand;
	}
}

function choseMusicPlay(mid) {
	// 郁闷...得到当前播放歌曲 mkey
	for (var ks in mlist) {
		var k = mlist[ks].split("|");
		if (k[0] == mid) break;
	}

	fitout('', parseInt(ks));
}


// 歌曲播放, 暂停
function play() {
	if (1 != stats) { // 播放
		stats = 1;
		_clear();

		setCurrInfo(mkey);
		elapsed = setInterval("getElapsed()", 100);
		$("player").controls.play();
	} else { // 暂停
		stats = 2;
		_clear();
		$("player").controls.pause();
	}

	changeStats();
}

// 停止播放
function stop() {
	stats = 0;

	$("player").controls.stop();
	changeStats();
}

// 指定位置播放
function toPosition() {
	if (!$("player").currentMedia) return ;
	var percent = parseInt($("phasesCursor").style.left) / moveMax;
	$("player").controls.currentPosition = percent * $("player").currentMedia.duration;
}

// 设置当前播放歌曲信息
function setCurrInfo(key) {
	max = mlist.length - 1;

	// 循环修正
	if (key < 0) {
		mkey = max;
	} else if (key > max) {
		mkey = 0;
	}

	var music = mlist[mkey].split("|");

	if (!music[4]) {
		// 加载歌曲未找到, 播放下一曲
		return setCurrInfo(++mkey);
	}

	// 操这个玩死我了, 不判断的话重新请求歌曲, 暂停也用不了, 直接从头开始
	$("mid_" +music[0]).className = "on";
	$("musicPic").src = music[3] ? music[3] : '/public_html/images/music.gif';
	$("song").innerHTML = music[1];
	$("singer").innerHTML = music[2];
	if (!$("player").url) $("player").url = music[4];
}

// 获取歌曲播放进度
function getElapsed() {
	// 播放一段时候后刷新 setInterval 如果执行到这里 会出现 $("player").controls 丢失
	if(!$("player").controls || !$("player").controls.currentPositionString) {
		return false;
	}

	// loadBuf 如果加载完成, 设置 loadId = null; 所以这里需要
	if (loadId == null && loadBuf < 100) loadId = setInterval("getLoadBuffer()", 1000);
	var timeStr = $("player").controls.currentPositionString;

	var cp = $("player").controls.currentPosition;
	var cm = $("player").currentMedia.duration; // 每次都得到...
	if (!ismove) {// 如果不在拖动进度条控制进度
		$("elapsed").innerHTML = timeStr + " / " + $("player").currentMedia.durationString;
		setPosition("phasesCursor", cp / cm);
	}

	// 获取时间判断下一曲(感觉时间有误差), 确实有...郁闷
	if (parseInt(cp) == parseInt(cm)) {
		clearInterval(elapsed);
		fitout();
	}
}

// 获取歌曲加载进度
function getLoadBuffer() {
	loadBuf = player.network.downloadProgress;
	if (100 == loadBuf) {
		clearInterval(loadId);
		loadId = null;
	}

	$("loadBuf").style.width = loadBuf+ "%";
}

// 设置播放模式
function setPlayMode(mid) {
	$("playOrder").className = "dqxh";
	$("playShuffle").className = "ajbf";
	$("playOnly").className = "allxh";

	switch (mid) {
		case 2:
			mode = mid;
			$("playShuffle").className = "ajbfH";
			break;
		case 3:
			mode = mid;
			$("playOnly").className = "allxhH";
			break;
		default :
			mode = 1;
			$("playOrder").className = "dqxhH";
			break;
	}

	return false;
}

function changeStats() {
	if (0 == stats) {
		setPosition("phasesCursor", 0);
		$("elapsed").innerHTML = "00:00 / 00:00";
		$("song").innerHTML = $("singer").innerHTML = $("player").url = "";

		$("play").title = "播放";
		$("play").className = "start";

		loadBuf = 0;
		clearInterval(loadId);
		loadId = null;
		$("loadBuf").style.width = "0%";

		// 重置播放列表
		var as = $("playerData").getElementsByTagName("a");
		for (var i=0; i<as.length; i++) {
			as[i].className = "";
		}
	} else if (1 == stats) {
		//$("stats").innerHTML = "状态：正在播放";
		$("play").title = "暂停";
		$("play").className = "pause";
	} else if (2 == stats) {
		//$("stats").innerHTML = "状态：暂停";
		$("play").title = "播放";
		$("play").className = "start";
	}
}

// 设置播放列表
function addMusicList(str) {
	if (!str) return false;
	changeLab(3);
	var temp = [];
	var list = str.split(",");

	for (var key in list) {
		var arr = list[key].split("|");
		if (document.getElementById("mid_" +arr[0])) {
			continue;
		}

		temp.push(list[key]);
		$("playerData").innerHTML +=
			'<li onclick="choseMusicPlay(' +arr[0]+ '); return false;">'+
				'<a href="javascript:void(0);" id="mid_' +arr[0]+ '"><span>' +arr[1]+ '</span><b>' +arr[2]+ '</b></a>'+
				'<div class="c"></div>'+
			'</li>';
	}

	mlist = mlist.concat(temp);
}

// 临时用于清除 setInterval 设置的 已播放函数
function _clear() {
	if (elapsed) {
		clearInterval(elapsed);
		elapsed = null;
	}
}


// ==================================
// 控制条操作部分


// 滑块拖动
var defX = currX = moveMax = dx = 0; // 默认值, 当前滑块坐标, 右边界最大值, 进度条到左侧差值
var cursor = null; // 当前滑块

$("phasesCursor").onmousedown = initPhases;
$("controlStrip").onclick = setClickPosition;

function initPhases(e) {
	var e = e || window.event;
	cursor = (e.target) ? e.target : e.srcElement;
	moveMax  = cursor.parentNode.clientWidth - cursor.clientWidth; // 右边界
	dx = e.clientX - cursor.offsetLeft;

	ismove = true;
	cursor.pos = parseInt(cursor.style.left);
	cursor.setCapture();
	cursor.onmousemove = cursorMove;
	cursor.onmouseup   = cursorEnd;
}

function cursorMove(e) {
	if (!cursor) return ;
	var e = e || window.event;

	cursor.pos = revise(e.clientX - dx);
	cursor.style.left = cursor.pos+ "px";
	$("elapsedBuf").style.width = cursor.pos+ "px";
}

function cursorEnd(e) {
	if (!cursor) return; // 解决快速点击 cursor 对象丢失问题

	cursor.releaseCapture();
	cursor = ismove = null;
	toPosition();
}

// 设置位置坐标
function setPosition(id, v, flag) {
	var flag = flag || false;
	// 其实这里和上面一样, 但是怕播放器调用时候上面的 init 没执行, 以后再改吧...
	moveMax = $(id).parentNode.clientWidth - $(id).clientWidth;
	$(id).pos = revise(moveMax * v);
	$(id).style.left = $(id).pos+ "px";

	if (id == "phasesCursor") $("elapsedBuf").style.width = $(id).pos+ "px";
	// 是否在当前播放
	if (flag) toPosition();
}

// 设置点击后滑块坐标
function setClickPosition(e) {
	if (!moveMax) return;

	var e = e || window.event;
	var x = (e.x || e.layerX);
	setPosition("phasesCursor", x/moveMax, true);
}

// ==========================================
// 声音
var vCursor = null;
$("volumeCursor").onmousedown = initVolume;

function initVolume(e) {
	var e = e || window.event;
	vCursor     = $("volumeCursor");
//	vCursor.pos = parseInt(vCursor.style.left);
	vCursor.dx  = e.clientX - vCursor.offsetLeft;
	vCursor.max = vCursor.parentNode.clientWidth - vCursor.clientWidth;
	

	vCursor.setCapture();
	vCursor.onmousemove = volumeCursorMove;
	vCursor.onmouseup   = volumeCursorEnd;
}

function volumeCursorMove(e) {
	if (!vCursor) return false;

	var e = e || window.event;
	vCursor.pos = revise(e.clientX - vCursor.dx, vCursor.max);
	vCursor.style.left = vCursor.pos+ "px";
	$("volumeShow").style.width = vCursor.pos+ "px"; // 先这么写
	$("mute").className = "laba";

	var percent = vCursor.pos / vCursor.max;
	$("player").settings.volume = 100 * percent;
}

function volumeCursorEnd() {
	if (!vCursor) return;
	vCursor.releaseCapture();
	vCursor = null;
}


// 静音控制
function mute() {
	var mute = !$("player").settings.mute;
	$("player").settings.mute = mute;
	$("mute").className = mute ? "labaH" : "laba";

	return false;
}

// 修正
function revise(px, _max) {
	var _max = _max || moveMax;
//$("song").innerHTML = _max;
	if (px < 0) {
		px = 0;
	} else if (px > _max) {
		px = _max;
	}

	return Math.round(px);
}

function initPlayer() {
	var playerParamStr = 
		'<object id="player" height="0" width="0" classid="clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6">'+
		'<param name="autoStart" value="-1">'+ // 是否自动播放
		'<param name="balance" value="0">'+ // 调整左右声道平衡
		'<param name="enabled" value="-1">'+ // 播放器是否可人为控制
		'<param name="enableContextMenu" value="-1">'+ // 是否启用上下文菜单
		'<param name="url" value="">'+ // 播放的文件地址
		'<param name="playCount" value="1">'+ // 播放次数控制,为整数
		'<param name="rate" value="1">'+ // 播放速率控制,1为正常,允许小数,1.0-2.0
		'<param name="currentPosition" value="0">'+ // 控件设置:当前位置
		'<param name="currentMarker" value="0">'+ // 控件设置:当前标记
		'<param name="defaultFrame" value="">'+ // 显示默认框架
		'<param name="invokeURLs" value="0">'+ // 脚本命令设置:是否调用URL
		'<param name="baseURL" value="">'+ // 脚本命令设置:被调用的URL
		'<param name="stretchToFit" value="0">'+ // 是否按比例伸展
		'<param name="volume" value="50">'+ // 默认声音大小0%-100%,50则为50%
		'<param name="mute" value="0">'+ // 是否静音
		'<param name="uiMode" value="mini">'+ // 播放器显示模式:Full显示全部;mini最简化;None不显示播放控制,只显示视频窗口;invisible全部不显示
		'<param name="windowlessVideo" value="0">' //如果是0可以允许全屏,否则只能在窗口中查看
		'<param name="fullScreen" value="0">'+ //开始播放是否自动全屏
		'<param name="enableErrorDialogs" value="-1">'+ // 是否启用错误提示报告
		'<param name="SAMIStyle" value="">'+ //SAMI样式
		'<param name="SAMILang" value="">'+ //SAMI语言
		'<param name="SAMIFilename" value="">'; //字幕ID
		'</object>';

	//$("playerContrlos").innerHTML += playerParamStr;
	//$("playerContrlos").parentNode.insertBefore($("player"), $("playerContrlos")); // 操, 居然界面出来了..
	$("playerParam").innerHTML += playerParamStr;
}
