﻿me =
{
	control: null,
	
	start: function()
	{
		if (para.level == 0)
			me.selectLevel();
		else
			me.goLevel(para.level);
	},

	pop: function()
	{
		if (me.control)
		{
			me.control.Stop();
			me.control = null;
		}

		var pxml;
		var pobj;
		$.ajax(
		{
			url: "ProblemValue.ashx",
			success: function(r)
			{
				pxml = r;
				pobj = xml2json(r);
				pobj.wav = pobj.wav.replace(/\.wav$/ig, ".mp3");
				// files
				var path = _appClient.strDataRelative+"/"+pobj.path+"/";
				var file_list = [];
				var gif_nodes = pxml.selectNodes("//@gif");
				for (var i=0; i<gif_nodes.length; i++)
					file_list.push(path+gif_nodes[i].text);
				var wav_nodes = pxml.selectNodes("//@wav");
				for (var i=0; i<wav_nodes.length; i++)
					file_list.push(path+wav_nodes[i].text.replace(/\.wav$/ig, ".mp3"));
				file_list = file_list.join(",");
	            var file_time_list = VCOnline1.GetFileTimeList(file_list);
				$.ajax(
				{
					url: "Download.ashx?file_list="+file_list+"&file_time_list="+file_time_list,
					success: function(r)
					{
						if (r == "")
							return;
						var data_list = r.split("&");
						for (var i=0; i<data_list.length; i+=3)
							VCOnline1.SaveToDisk(data_list[i], data_list[i+1], data_list[i+2], 0);
					}
				});
			}
		});
		$("#echo_box").ajaxStop(function()
		{
			$(this).unbind("ajaxStop");
			if (typeof pobj.answer == "undefined")
			{
				pobj.answer = pobj.eng;
				pobj.eng = pobj.eng.replace(/ /g,"&");
			}
			var gif = mediaFilePath(pxml.documentElement, "gif");
			var data_root = _appClient.strDataRelative+"/";
			var data_path = _appClient.strDataRelative+"/"+pobj.path+"/";
			me.control = new HFollowreading(this, data_root, data_path,
				pobj.answer, pobj.chn, pobj.wav, pobj.phon, gif, 1);
			me.control.onCompareDone = function()
			{
				var level_rates = [1.0, 1.2, 1.5, 1.8, 2.0, 2.5];
				var score = parseInt(me.control.score()*level_rates[para.level-1]);
				//score = 417; // debug
				if (me.scoredLevel() > para.level)
					return;
				para.session_ts.score += score;
				para.total_ts.score += score;
				me.update();
				me.showOverTip(score);
				$.post("Save.ashx", {para:para.toJSONString()});
			};
			me.control.Start();
			$(this).show();
			me.timer.start();
		});
	},
	
	selectLevel: function()
	{
		var content = '<div style="width:320px;height:100px;margin-bottom:20px;padding:10px;'
			+'border:dotted 1px black;text-align:center;background-color:white;">';
		for (var i=1; i<=6; i++)
			content += '<img style="cursor:hand" '
			+'src ="img/s'+i+'-'+(i==para.level?2:1)+'.gif" '
			+'src2="img/s'+i+'-'+(i==para.level?1:2)+'.gif"/>';
		content += '<div id="tip" style="margin-top:10px;"></div></div><div align="right">'
			+'<button id="accept"><b>Enter</b>确定</button>'
			+'<button id="reject"><b>Esc</b>取消</button></div>';
		$.thickbox.show(
		{
			caption: "请选择级别",
			url: "#TB_inline?width=350&height=180",
			content: content,
			ajax_callback: function()
			{
				var id = para.level-1;
				var imgs = $.thickbox.$("img");
				imgs.click(function()
				{
					if (id >= 0)
					{
						var img = imgs[id];
						var src2 = img.src2;
						img.src2 = img.src;
						img.src = src2;
					}
					var src2 = this.src2;
					this.src2 = this.src;
					this.src = src2;
					id = imgs.index(this);
				});
				$.thickbox.$("#accept").click(function()
				{
					if (id < 0)
					{
						var style = "background-color:#fde;color:red;font-size:14px;padding:5px;";
						$.thickbox.$("#tip").html('<div style="'+style+'">请选择级别</tip>');
						return;
					}
					$.thickbox.remove();
					me.goLevel(id+1);
				});
				$.thickbox.$("#reject").click($.thickbox.remove);
			}
		});
	},
	
	goLevel: function(level)
	{
		var scored_level = me.scoredLevel();
		if (scored_level > level)
			alert("您的第"+(scored_level-1)+"级以前的得分已经足够, 再做第"+level+"级的题将不再计分。");

		var form = $("form");
		para.level = level;
		$("#para", form).val(para.toJSONString());
		form[0].submit();
	},
	
	scoredLevel: function(over_score_mode)
	{
		var scored_level = 6; // 当前能得分的最低级别
		var over_score = 0; // 升级所需最少分数
		//var over_scores = [500, 700, 800, 900, 1000, 1100]; // debug
		var over_scores = [50000, 70000, 80000, 90000, 100000, 110000];
		
		var level_total = 0;
		for (var i=0; i<6; i++)
			level_total += para.level_scores[i];

		var over_total = 0;
		for (var i=0; i<6; i++)
		{
			over_total += over_scores[i];
			if (over_score < over_total - level_total)
			{
				scored_level = i+1;
				over_score = over_total - level_total;
				break;
			}
		}
		
		return over_score_mode?{scored_level:scored_level, over_score:over_score}:scored_level;
	},

	showOverTip: function(score)
	{
		var r = me.scoredLevel(true);
		para.level_scores[para.level-1] += score;

		// 升级所需分数为零（已到达最高分）
		// 或者得分小于升级所需分数
		// 或者可以得分的最小级别小于当前级别
		if (r.over_score == 0 || score < r.over_score || r.scored_level < para.level)
			return;
		
		if (para.level < 6)
		{
			if (confirm("第"+para.level+"级的练习已初见成效, 建议您升到第"+(para.level+1)+"级!"))
				me.goLevel(me.scoredLevel());
			else
				alert("您的第"+para.level+"级以前的得分已经足够, 再做第"+para.level+"级的题将不再计分。");
		}
		else
		{
			if (para.turn < 3)
			{
				alert("第"+para.turn+"轮的练习已初见成效, 恭喜您升到第"+(para.turn+1)+"轮!");
				para.turn++;

				// 将上一轮最后一级多余的分数加到新一轮的第一级
				para.level_scores = [score-r.over_score,0,0,0,0,0];
				me.goLevel(me.scoredLevel());
			}
			else
			{
				alert("您已经得到最高分!");
			}
		}
	},
	
	// timer
	timer:
	{
		interval: null,
		update: function()
		{
			para.session_ts.time ++;
			para.total_ts  .time ++;
			me.update();
		},
		start: function()
		{
			if (me.timer.interval == null)
				me.timer.interval = window.setInterval(me.timer.update, 1000);
		},
		stop: function()
		{
			if (me.timer.interval)
			{
				window.clearInterval(me.timer.interval);
				me.timer.interval = null;
			}
		}
	},

	TSBox: function(a)
	{
		var box = $(a);
		box.update = function(ts)
		{	
			var sec = ts.time;
			var hour = parseInt(sec / 3600);
			sec -= hour * 3600;
			var min = parseInt(sec / 60);
			sec -= min * 60;
			var	f = function(n)
			{
				var s = "0"+n;
				return s.substr(s.length-2, 2);
			};
			box.html(f(hour)+":"+f(min)+":"+f(sec)+" / "+ts.score);
		}
		return box;
	},
	session_box: null,
	total_box: null,
	update: function()
	{
		me.session_box = me.session_box||me.TSBox("#info_box .box2:eq(2)");
		me.total_box   = me.total_box  ||me.TSBox("#info_box .box2:eq(3)");
		me.session_box.update(para.session_ts);
		me.total_box  .update(para.total_ts  );
	}
};

$(function()
{
	$("#exer_box #showCompare_Image").width("390px");

	me.update();
	
	var key_server = new $.keyServer();
	key_server.start();

	var start_button = $("#start_button");
	var continue_button = $("#continue_button");
	var select_level_button = $("#select_level_button");

	if (start_button.is(":hidden"))
	{
		me.pop();
		continue_button.show();
		select_level_button.show();
	}

	start_button.click(me.start);
	continue_button.click(me.pop);
	select_level_button.click(me.selectLevel);

	$("#reject_button").click(function()
	{
		window.close();
	});
});

function wmp1_PlayStateChange(state)
{
	try { me.control.PlayStateChange(state); } catch(e) {}
}

function VCOnline1_RecordFileSaved(id)
{
	try { me.control.RecordFileSaved(id); } catch(e) {}
}
