﻿window.cache = [];
function registerInit() {
	var r = ['email', 'nick', 'pwd', 'pwd1', 'code'];
	$("#email").blur(function() {//检查email
		var email = this.value;
		$("#email_exists,#email_invalid").hide();
		if (!/^([a-z0-9]+[-_.]*[a-z0-9]*)+@([a-z0-9]*[-_]?[a-z0-9]+)+[\.][a-z]{2,3}([\.][a-z]{2})?$/i.test(email)) {
			showErrMsg("email_invalid");
			return;
		}
		ajax("IsEmailExists", { email: email }, function(result) {
			if (result) {
				showErrMsg("email_exists");
			}
		}, defaultFailed);
	});
	$("#nick").blur(function() {
		var nick = $.trim(this.value);
		$("#nick_exists,#nick_invalid").hide();
		if (nick.length<2) {
			showErrMsg("nick_invalid");
			return;
		}
		ajax("IsNickExists", { nick: nick }, function(result) {
			if (result) {
				showErrMsg("nick_exists");
			}
		}, defaultFailed);
	});
	$("#pwd").blur(function() {
		var pwd = this.value;
		$("#password_invalid,#password_confirm").hide();
		if (pwd.length < 6) {
			showErrMsg("password_invalid");
			return;
		}
		if (pwd != $("#pwd1").val()) {
			showErrMsg("password_confirm");
			return;
		}
	});
	$("#pwd1").blur(function() {
		var pwd = this.value;
		if (pwd != $("#pwd").val()) {
			showErrMsg("password_confirm");
			return;
		}
		$("#password_confirm").hide();
	});
	$("#code").blur(function() {
		var code = this.value;
		if (!/^[0-9a-zA-Z]+$/i.test(code)) {
			showErrMsg("code_invalid");
			return;
		}
		$("#code_invalid").hide();
	});
	$("#FUAvatar").blur(function() {
		var v = this.value.toLowerCase();
		if (v.length > 0) {
			var ext = v.lastIndexOf(".") > 0 ? v.substr(v.lastIndexOf(".") + 1) : "";
			if (ext != "jpg" && ext != "png") {
				showErrMsg("avatar_invalid");
				return;
			}
		}
		$("#avatar_invalid").hide();
	});
	return r;
}

function findPwdInit() {
	var r = ['email', 'code', 'pwd', 'pwd1'];
	$("#email").blur(function() {//检查email
		var email = this.value;
		$("#email_no,#email_invalid").hide();
		if (!/^([a-z0-9]+[-_.]?[a-z0-9]+)+@([a-z0-9]*[-_]?[a-z0-9]+)+[\.][a-z]{2,3}([\.][a-z]{2})?$/i.test(email)) {
			showErrMsg("email_invalid");
			return;
		}
	});
	$("#code").blur(function() {
		var code = this.value;
		if (!/^[0-9a-zA-Z]+$/i.test(code)) {
			showErrMsg("code_invalid");
			return;
		}
		$("#code_invalid").hide();
	});
	$("#pwd").blur(function() {
		var pwd = this.value;
		$("#password_invalid,#password_confirm").hide();
		if (pwd.length < 6) {
			showErrMsg("password_invalid");
			return;
		}
		if (pwd != $("#pwd1").val()) {
			showErrMsg("password_confirm");
			return;
		}
	});
	$("#pwd1").blur(function() {
		var pwd = this.value;
		if (pwd != $("#pwd").val()) {
			showErrMsg("password_confirm");
			return;
		}
		$("#password_confirm").hide();
	});
	return r;
}

function showErrMsg(id) {//显示错误信息
	$("#" + id).show();
}

function showSinger(link, singerID, blogUrl) {//显示歌手下拉菜单
	var html = "<div>"
			+ '<div><a href="singer.aspx?id=' + singerID + '">简介</a></div>'
			+ '<div><a href="origin.aspx?SingerID=' + singerID + '">文章</a></div>'
			+ (blogUrl && blogUrl.length>0 ? '<div><a href="' + blogUrl + '">博客</a></div>' : '')
		+ "</div>";
	showMenu(link, html);
}

function showAccompaniment(link, songID, type) {
	var show = function() {
		var key = songID + "_" + type;
		var data = window.cache[key];
		var html = "";
		if (data == null || data.length == 0) {
			html = '<div style="white-space:nowrap;">暂时没有这个调的伴奏</div>';
		}
		else {
			var min = typeof (_minTimes) == "undefined" ? 100 : _minTimes;
			html += '<table class="acc_download" border="0">';
			html += '<tr><td>伴奏名称</td><td class="times_column">请求次数</td><td class="left_column">距离可下载</td><td class="progress_column">请求进度</td><td>&nbsp;</td></tr>';
			for (var i = 0; i < data.length; i++) {
				var fixed = data[i].RequestTimes < 0 || data[i].RequestTimes > min ? min : data[i].RequestTimes;
				html += '<tr>';
				html += '<td>' + data[i].Name + '</td>';
				html += '<td class="times_column"><span class="times">' + fixed + '</span></td>';
				html += '<td class="left_column"><span class="left">' + Math.max(min - fixed, 0) + '</span></td>';
				html += '<td class="progress_column progress_box">' + getProgressHtml(fixed) + '</td>';
				if (fixed < min) {
					html += '<td class="acc_link"><a href="javascript:;" onclick="requestAccompaniment(this,\'' + data[i].AccompanimentID + '\',\'' + key + '\');return false;">请求下载</a></td>';
				}
				else if (fixed == min && data[i].RequestTimes == -2) {
					html += '<td class="acc_link"><a href="download.aspx?AccompanimentID=' + data[i].AccompanimentID + '">下载</a></td>';
				}
				else {
					html += '<td class="acc_link">已在制作中，请稍候</td>';
				}
				html += '</tr>';
			}
			html += '</table>';
			if (min > 0) {
				html += '<div class="clear info">提示：每种伴奏音调，达到' + min + '人需要才可开始下载。</div>';
			}
		}

		showMenu(link, html);
	};
	if (window.cache[songID + "_" + type]) {
		show();
	}
	else {
		ajax("GetAccompaniment", { songID: songID, type: type }, function(result) {
			window.cache[songID + "_" + type] = result;
			show();
		}, defaultFailed);
	}
}

function requestAccompaniment(link, accompanimentID, key) {//请求下载伴奏
	if (window.cache["accompaniment_" + accompanimentID]) {
		alert("您已经请求过了");
		return;
	}
	var loadingIcon = new loading(link);
	loadingIcon.show();
	ajax("RequestAccompaniment", { accompanimentID: accompanimentID }, function(result) {
		if (result > 0 || result == -2 || result == -3) {
			var min = typeof (_minTimes) == "undefined" ? 100 : _minTimes;
			var fixed = result < 0 || result > min ? min : result;
			var parent = $(link).parent().parent();
			parent.find(".times").text(fixed);
			parent.find(".left").text(min - fixed);
			parent.find(".progress_box").html(getProgressHtml(fixed));
			if (fixed == min && result == -2) {
				parent.find(".acc_link").html('<a href="download.aspx?AccompanimentID=' + accompanimentID + '">下载</a>');
			}
			else if (fixed == min && result == -3) {
				parent.find(".acc_link").html('已在制作中，请稍候');
			}
			var data = window.cache[key];
			if (data != null && data.length > 0) {
				for (var i = 0; i < data.length; i++) {
					if (data[i].AccompanimentID == accompanimentID) {
						data[i].RequestTimes = result;
						break;
					}
				}
			}
		}
		else if (result == -1) {
			alert("请求出现错误，请重试");
		}
		else {
			alert("您已经请求过了");
		}
		loadingIcon.hide();
	}, function(err) {
		loadingIcon.hide();
		defaultFailed(err);
	});

	window.cache["accompaniment_" + accompanimentID] = 1;
}
function getProgressHtml(current) {

	var min = typeof (_minTimes) == "undefined" ? 100 : _minTimes;
	var width = 0;
	if (current >= min || min <= 0) {
		width = 100;
	}
	else {
		width = (current * 100 / min) + '%';
	}
	return '<div title="进度" class="acc_progress"><div style="width:' + width + ';"></div></div>';
}

function setHome(obj, url) {
	try {
		obj.style.behavior = 'url(#default#homepage)'; obj.setHomePage(url);
	}
	catch (e) {
		if (window.netscape) {
			try {
				netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
			}
			catch (e) {
				alert("抱歉！您的浏览器不支持直接设为首页。您可以：\r\n  ◎ 在浏览器地址栏输入“about:config”并回车然后将[signed.applets.codebase_principal_support]设置为“true”，点击“加入收藏”后忽略安全提示，即可设置成功；\r\n  ◎ 打开浏览器的选项设置将当前站点设为首页。");
			}
			var prefs = Components.classes['@mozilla.org/preferences-service;1'].getService(Components.interfaces.nsIPrefBranch);
			prefs.setCharPref('browser.startup.homepage', vrl);
		}
	}

	return false;
}

function setFocus() {
	var url = document.location.href;
	var menu = $("#nav .item");
	$("#menu .focus").removeClass("focus");
	if (/store\.aspx/i.test(url) || /play\.aspx/i.test(url)) {
		menu.eq(0).addClass("focus");
	}
	else if (/accompaniment\.aspx/i.test(url)) {
		menu.eq(1).addClass("focus");
	}
	else if (/origin\.aspx/i.test(url)) {
		menu.eq(2).addClass("focus");
	}
	else if (/^http\:\/\/bbs\.alayaso\.com/i.test(url)) {
		menu.eq(3).addClass("focus");
	}
}

function loading(link) {
	var o = $(link);
	var icon = $("#" + o.attr("_loading"));
	if (icon.length == 0) {
		var id = "loading_" + Math.random();
		var icon = $('<div id="' + id + '" class="loading" style="display:none;"></div>');
		o.attr("_loading", id);
		$(document.body).append(icon);
		var offset = o.offset();
		icon.css({ left: offset.left + o.width(), top: offset.top });
	}
	this.show = function() {
		icon.show();
	};
	this.hide = function() {
		icon.hide();
	};
}

function rotator(box,data) {
	window.cache["rotator_current"] = box.find("#rotator_big a").length;
	var imageHtml="", thumbHtml="";
	for (var i = 0; i < data.length - 1; i++) {
		imageHtml += ' <a' + (data[i].url == '' ? "" : ' href="' + data[i].url + '"') + (i == 0 ? ' class="focus"' : '') + '><img src="' + data[i].image + '" alt="' + data[i].title + '" /></a>';
		if (data.length > 2) {
			thumbHtml += ' <a' + (data[i].url == '' ? "" : ' href="' + data[i].url + '"') + (i == 0 ? ' class="focus"' : '') + ' title="' + data[i].title + '" >' + (i + 1) + '</a>';
		}
	}
	box.find("#rotator_big").html(imageHtml);
	box.find("#list").html(thumbHtml).css("left" ,420 - data.length * 25);
	box.find("#list a").each(function(index) {
		$(this).hover(function() {
			window.clearInterval(window.cache["rotator_timer"]);
			focus(index);
		}, function() {
			window.cache["rotator_timer"] = window.setInterval(next, 2000);
		});
	});
	var focus = function(index) {
		window.cache["rotator_current"] = index;
		box.find(".focus").removeClass("focus");
		box.find("#rotator_big a").eq(index).addClass("focus");
		box.find("#list a").eq(index).addClass("focus");
	};
	var next = function() {
		var current = window.cache["rotator_current"];
		current++;
		current = (current % box.find("#rotator_big a").length);
		focus(current);
	};
	if (data.length > 2) {
		window.cache["rotator_timer"] = window.setInterval(next, 2000);
	}
}

function showMenu(obj, menuHtml, autoHide) {
	var popup = $("#popup");
	if (popup.length == 0) {
		popup = $('<div id="popup"><div class="popup_inner"></div></div>');
		$("#inner").append(popup);
		popup.hover(function() {
			if (window.cache["popup"]) {
				window.clearTimeout(window.cache["popup"]);
			}
		}, hideMenu);
	}

	if (autoHide) {
		if (popup.attr("_id") == obj.id && obj.id != null && obj.id != "" && popup.height()>0) {
			popup.removeAttr("_id");
			hideMenu();
			return;
		}
	}

	if (obj.id == null || obj.id == "") {
		obj.id = "tmp" + Math.random().valueOf();
	}

	popup.find(".popup_inner").html(menuHtml);
	popup.css({ left: 0, top: 0 });
	popup.attr("_id", obj.id).show();

	var o = $(obj);
	var offset = o.offset();
	var left = offset.left, top = offset.top;
	if (left + popup.width() > $(document).scrollLeft() + Math.max(document.body.clientWidth, document.documentElement.clientWidth)) {
		left = left - popup.width() + o.width();
	}
	if (top + popup.height() > $(document).scrollTop() + document.documentElement.clientHeight) {
		top = top - popup.height() - o.height() - 2;
	}

	if (left < 10) {
		left = 10;
	}
	if (top < 10) {
		top = 10;
	}
	
	popup.css({ left: left, top: top + o.height() });

	if (window.cache["popup"]) {
		window.clearTimeout(window.cache["popup"]);
	}
}

function hideMenu() {
	window.cache["popup"] = window.setTimeout(function() {
		$("#popup").hide();
		$("#popup .popup_inner").html("");
		window.cache["popup"] = null;
	}, 10);
}

function defaultFailed(err) {
	//alert("出现错误：" + (err.description ? err.description : (err.message ? err.message : err)));
}

function redirect(box, url) {
	var counter = 10;
	box.html('<span id="counter">' + counter + '</span>秒钟之后将自动转向，如果没有自动转向请点击<a href="' + url + '">这里</a>。');
	window.setInterval(function() {
		counter--;
		if (counter == 0) {
			document.location.href = url;
		}
		$("#counter").text(counter);
	}, 1000);
}

function ping() {
	if (document.getElementById("ping") == null) {
		$(document.body).append('<div id="ping" style="visibility:hidden;position:absolute;left:0;top:0;"></div>');
	}
	$("#ping").html('<script type="text/javascript" src="/ping.aspx?r=' + Math.random() + '" ></scr' + 'ipt>');
}

window.cache["ping"] = window.setInterval(ping, 3000);

function setWatermark(obj, text) {
	if (obj.val() == "") {
		obj.val(text).attr("_w", "1").css("font-style", "italic");
	}
	obj.focus(function() {
		if (obj.attr("_w")) {
			obj.removeAttr("_w").val("").css("font-style", "");
		}
	});
	obj.blur(function() {
		if (obj.val()=="") {
			obj.val(text).attr("_w", "1").css("font-style", "italic");
		}
	});
}

function query(url, name) {//querystring
	if (url.indexOf("#") > -1) url = url.substr(0, url.indexOf("#"));
	var result = "", lastIndex = -1;
	var reg = new RegExp("(&amp;|&|\\?)" + name + "=([^&]*)", "ig");
	var arr = reg.exec(url);
	if (arr != null)
		return RegExp.$2;

	return "";
};

function sign(input) {//生成input签名
	if (input == null || input == "") {
		return 0;
	}
	var key = 1, length = input.length;
	for (var i = 0; i < length; i++) {
		key += (key | input.charCodeAt(i) | length);
		if (key > 1073741824) {
			key = key % 1073741824;
		}
	}
	return key;
};

function ajax(url, data, callback, failed, context) {//ajax
	var key = url, r = Math.random();
	for (var i in data) {
		if (key != "") {
			key += "_";
		}
		key += i + "=" + encodeURIComponent(data[i]);
	}
	var code = sign(key) + "_" + r;
	var signResult = sign(code + "");

	data.k = code;
	data.sign = signResult;
	data.unused = r;
	$.ajaxDotNet("/AjaxData.svc/" + url, {
		verb: "GET",
		data: data,
		success: function(obj) {
			var result;
			if (typeof obj.d == "string") {
				eval("result=" + obj.d);
			}
			else {
				result = obj.d;
			}
			try {
				callback(result, context); //
			}
			catch (err) {
				if (failed) {
					failed(err, context);
				}
				else {
					//alert("出现错误(" + err.message + ")", "错误", "Error");
				}
			}
		},
		error: function(e) {
			if (failed) {
				failed(e);
			}
		}
	});
};
