(function($) {
	$.fn.disabled = function(options)
	{
		this.attr("disabled", "disabled");	
		if(options) this.css(options);
	},
	$.fn.enabled = function(options)
	{
		$(this).removeAttr("disabled");	
		if(options) this.css(options);
	}
}) (jQuery);


String.prototype.format = function() {
	var arg = arguments;
	return this.replace(/\{(\d+)\}/g, function(i, m) {
	return arg[m];
	});
}

String.prototype.StringToUnicode = function() {
	var a = [],
	i = 0;
	for (; i < this.length;) a[i] = ("00" + this.charCodeAt(i++).toString(16)).slice( - 4);
	return "\\u" + a.join("\\u")
}

String.prototype.UnicodeToString = function() {
	return unescape(this.replace(/\\/g, "%"))
}

Number.prototype.format = function(digits)
{
	return this.toString().replace("/(\d+\.\d{0," + digits + "})\d+/", "$1");
}


//json转换为字符，发布的时候需要删除这个函数
jsonToString = function(obj) {
    var THIS = this;
    switch (typeof (obj)) {
        case 'string':
            return '"' + obj.replace(/(["\\])/g, '\\$1') + '"';
        case 'array':
            return '[' + obj.map(THIS.jsonToString).join(',') + ']';
        case 'object':
            if (obj instanceof Array) {
                var strArr = [];
                var len = obj.length;
                for (var i = 0; i < len; i++) {
                    strArr.push(THIS.jsonToString(obj[i]));
                }
                return '[' + strArr.join(',') + ']';
            } else if (obj == null) {
                return 'null';

            } else {
                var string = [];
                for (var property in obj) string.push(THIS.jsonToString(property) + ':' + THIS.jsonToString(obj[property]));
                return '{' + string.join(',') + '}';
            }
        case 'number':
            return obj;
        case false:
            return obj;
    }
}

//获取当前选中的内容
function getChecked(expr)
{
	var values = [];
	var text = [];
	var color = [];
	$(expr + " input:checked").each(function(){
		var obj = $(this);
		var lbl = $("+label",obj);
		text[text.length] = lbl.text();
		color[color.length] = lbl.attr("color");
		values[values.length] = obj.val();
	});	
	return {
		values: values,
		text: text,
		color: color
	};
}

//设置PastRank
function setPastRank(options)
{	
	var obj;
	if(options.event){
		obj = $(options.event);
		options.curEvent = obj;
	}else 
		obj = options.curEvent;
	
	var showType = obj.attr("showType");
	var searchType = obj.attr("searchType");
	var search = getChecked("#searchMenu");
	var alexa = getChecked("#alexaMenu");
	var linkIn = getChecked("#linkInMenu");
	var subcaption = search.text;
	var curMenu = "#searchMenu";
	switch(showType)
	{
		case "linkin":
			subcaption = linkIn.text;
			curMenu = "#linkInMenu";
			break;
		case "alexa":
			subcaption = alexa.text;
			curMenu = "#alexaMenu";
			break;
	}
	if(options.showMenu)
	{
		$("#chartMenu li.chartMenu").hide();
		$(curMenu).show();
	}
	var op = 
	{
		fusionChartsJS: "/api/FusionCharts.js",
		lineSWF: "/api/MSLine.swf",
		inverseLineSWF: "/api/InverseMSLine.swf",
		showType: showType,
		searchType: searchType,
		search: search.values,
		alexa: alexa.values,
		linkIn: linkIn.values,
		searchText: search.text,
		linkInText: linkIn.text,
		alexaText: alexa.text,
		searchColor: search.color,
		alexaColor: alexa.color,
		linkInColor: linkIn.color,
		showValues: 1,
		sites: options.site,
		container: "chart",
		dateFormat: i18n.chartDateFmt,
		timeSpan: 1,
		caption:options.site,
		limit: 20,
		subcaption : obj.text(),
		onError: function(data){
			var error = "<p class='error'>" + data.description + "</p>";
			$("#chart").html(error);
		}
	};
	
	if(!options.gpr)
	{
		options.gpr = new getPastRank(op);
	}else
	{
		options.gpr.updateChart(op);
	}
	return options;
}

//获取搜索引擎列表
getSearchEngine = function(o){
	doAjax({
		url: "/api/api.php?action=search",
		callback: function(data){
			if(typeof(o) == "function")
				o(data);
			else{
				var html = "";
				for(var i = 0; i < data.length; i ++){
					var item = data[i];
					var checked = (item.s == 1) ? ' checked="checked"' : '';
					html += '<input type="checkbox" value="' + item.c + '|' + item.n + '"' + checked + ' />' + item.n;
				};
			}		//end if
			$(o).append(html);
			}		//end callback
		});
}

//执行Ajax操作
function doAjax(options)
{
	options.type = options.type || "GET";
	options.dataType = options.dataType || "json";
	options.url = options.url || "/remote.php";
	$.ajax(
	   {
			data: options.data,
			url: options.url,
			type: options.type,
			dataType: options.dataType,
			success: function(data)
			{
				if(options.callback) 
					options.callback(data);
				else
					alert(data);
			},
			error: function(rep)
			{
				alert(i18n.ajaxError + '\n' + rep.responseText);
			}
	   }
	);	
}

//删除监控
function deleteMonitor(monitorID, monitorName)
{
	if(confirm(i18n.delMonitorCfm.format(monitorName)))
	{
		doAjax({
			data: {action: "delMonitor", monitorID: monitorID},
			dataType: "html",
			callback: function(rep){
				if(rep == "true")
					window.location.reload(true);
			}
		});
	}
}


//添加监控
function addMonitor()
{
	var name = $("#txtMonitorName").val();
	var url = $("#txtMonitorUrl").val();
	
	if(name == "")
	{
		alert(i18n.addMonitorNameErr);
		return;
	}

	var pattern = /^[a-z0-9]([a-z0-9-]+\.){1,4}[a-z]{2,4}$/gi;
	var reg = new RegExp(pattern);
	if(url == "" || !reg.test(url)){
		alert(i18n.addMonitorUrlErr);
		return;
	}

	var data = {action: "addMonitor", monitorName: name, monitorUrl: url};
	doAjax({
		callback: function(data){
			if(data == "true")
				window.location.reload(true);
			else
				alert(data);	
		},
		data: data,
		dataType: "html"
	});
}


//用户登陆
function signin()
{
	var btn = $("#btnSignin");
	var mail = $.trim($("#txtSigninMail").val());
	var password = $.trim($("#txtSigninPWD").val());

	if(mail == "" || password == "")
	{
		alert(i18n.signinErr);
		return;
	}
	var data = 
	{
		mail: mail,
		password: password,
		action: "signin"
	};
	//btn.disabled();
	doAjax({
		callback: function(rep){
			//校验成功
			if(rep == "true")
				location.href = "mytrack.php";
			else
				alert(rep);
			btn.enabled();
		},
		data: data,
		type: "POST",
		dataType: "html"
	});
}

//注册
function signup()
{
	var btn = $("#btnSignup");
	var mail = $.trim($("#txtSignupMail").val());
	var password = $.trim($("#txtSignupPWD").val());
	var rptPassword = $.trim($("#txtSignupRepeatPWD").val());
	var pattern = /[a-za-z0-9_.]{1,}@[a-za-z0-9_]{1,}.[a-za-z0-9_]{1,}/;
	if(mail.match(pattern) == null)
	{
		alert(i18n.signupMailErr);
		return;
	}
				  
	if(mail == "" || password == "")
	{
		alert(i18n.signupEmptyErr);
		return;
	}
	if(password != rptPassword)
	{
		alert(i18n.signupPwdErr);
		return;
	}
	
	var data = 
	{
		mail: mail,
		password: password,
		action: "signup"
	};

	btn.disabled();
	doAjax({
		callback: function(rep)
		{
			if(rep == "true"){
				alert(i18n.signupSuccess);
				$("#txtSigninMail").val(mail);
				$("#txtSigninPWD").val(password);
				signin();		//为用户登陆
			}
			else
				alert(rep);	
			btn.enabled();
		},
		data: data,
		type: "POST",
		dataType: "html"
	});
}

//退出
signout = function()
{
	doAjax({
		data: {action: "signOut"},
		callback: function(data){
		location.href = "/";},
		dataType: "html"
	});
}
