var ErrSuccess = 0;
var ErrInvalidIdFormat = 1;
var ErrInvalidClientId = 2;
var ErrCreateDatabase = 3;
var ErrOpenDatabase = 4;
var ErrBadJsonFormat = 5;
var ErrDatabase = 6;
var ErrRequest = 7;
var ErrRequestNotFinished = 8;
var ErrRequestNoSuchNumber = 9;
var ErrRequestLineBusy = 10;
var ErrInvalidNumber = 11;
var ErrClientNotOnline = 12;
var ErrAuthCodeError = 13;

var RsNew = 0;
var RsRing = 1;
var RsPickup = 2;
var RsDial = 3;
var RsTalking = 4;	
var RsWaiting = 5;

var RrSuccessed = 100;
var RrCanceled = 101;	
var RrDialTimeout = 102;
var RrSystemBusy = 103;
var RrNotPresent = 104

var szNumber = "";
var hRefreshTimer;

var nTimer = 0;
var nTmSuccess = 0;
var bEnd = true;

var arrNumber = new Array();

var szHuihuwoUrl = "http://request.huihuwo.com/";

$(document).ready(function(){
	
	$("input[name^=HuihuwoNumber]:eq(0)").focus();
	
	if($("form[name^='HuihuwoForm']").length>0)
	{
		window.setInterval("RefreshState()", 2000);
	}
	
	$("a[id^='Huihuwo']").each(function(i){
		$(this).bind("click", function() {
			window.open($(this).attr("href"),"","toolbar=no,status=no,menubar=no,scrollbars=no,resizable=no,width=640,height=370,left=200,top=300");	
			return false;
		});
	});
	
	$("form[name^='HuihuwoForm']").each(function(i){
												
		arrNumber[i]="";
		
		$(this).bind("submit", function(){
			
			if($("input[name^='HuihuwoNumber']", this).length<=0)
			{
				window.open(szHuihuwoUrl+"huihuwo.php?"+GetBase64Param(i),"","toolbar=no,status=no,menubar=no,scrollbars=no,resizable=no,width=640,height=360,left=200,top=300");		
				return false;
			}
		
			EnableInput(i, false);
			
		
			arrNumber[i] = $("input[name^='HuihuwoNumber']", this).val();
			
			bEnd = false;
			
			$.getJSON(szHuihuwoUrl+"request.php?"+GetBase64Param(i)+"&jsoncallback=?", function(data){
				OnRefreshStateSuccess(i, data);	
			});
			
			$("img[id^='HuihuwoAuthImage']", $(this)).attr("src", szHuihuwoUrl+'auth/authimage.php?sid=' + Math.random());
			
			Msg(i, "正在提交回呼请求...");
			
			return false;
		});
	});
	
});

function OnRefreshStateSuccess(i, data)
{	
	nTmSuccess = nTimer;
	
	if(i<0)
	{
		$("form[name^='HuihuwoForm']").each(function(i){
			ShowState(i, data.Ret==0?data.Data[i]:data.Data);
		});
	}
	else
	{
		ShowState(i, data);
	}

	bEnd = true;
};

function RefreshState()
{	
	nTimer++;
	
	// 请求超时
	if(nTimer-nTmSuccess>10) 
	{
		EnableInput(-1, false);
		bEnd = true;
	}
	
	if(bEnd)
	{
		bEnd = false;
		
		nTmSuccess = nTimer;
		
		$.getJSON(szHuihuwoUrl+"request.php?"+GetBase64Param(-1)+"&jsoncallback=?", function(data){
	  		OnRefreshStateSuccess(-1, data);
		});
	}
}

function OnRefreshStateError()
{
	EnableInput(-1, false);
	Msg(-1, "请求出错");	
	bEnd = true;
};

function GetBase64Param(i)
{	
	var szUrl = "";
	
	if(i<0)
	{
		szUrl = "[";
		$("form[name^='HuihuwoForm']").each(function(j){ 
													
			if(j>0)
			{
				szUrl += ", ";
			}
			
			szUrl += "{\"Id\":\""+$(this).find("input[name^='HuihuwoId']").val()+"\", \"Line\":\""+$(this).find("input[name^='HuihuwoLine']").val()+"\", \"Code\":\""+$(this).find("input[name^='HuihuwoCode']").val()+"\", \"Number\":\""+arrNumber[j]+"\"}";					
		});
		
		szUrl += "]";
	}
	else
	{
		var o = $("form[name^='HuihuwoForm']:eq("+i+")");
		
		var szHuihuwoName = "";
		var szHuihuwoArea = "";	
			
		if($("input[name^='HuihuwoName']", o).length > 0)
		{
			szHuihuwoName = Base64.encode($("input[name^='HuihuwoName']", o).val());
		}
		
		if($("input[name^='HuihuwoArea']", o).length > 0)
		{
			szHuihuwoArea = Base64.encode($("input[name^='HuihuwoArea']", o).val());
		}		
		
		
		szUrl = "{\"Id\":\""+$("input[name^='HuihuwoId']", o).val()+"\", \"Line\":\""+$("input[name^='HuihuwoLine']", o).val()+"\", \"Code\":\""+$("input[name^='HuihuwoCode']", o).val()+"\", \"Name\":\""+szHuihuwoName+"\", \"Area\":\""+szHuihuwoArea+"\", \"Number\":\""+arrNumber[i]+"\"}";
		
	}
	
	return  "p="+Base64.encode(szUrl);
}

function Msg(i, szMsg)
{
	if($("form[name^='HuihuwoForm']:eq("+i+") span[id^='HuihuwoMsg']").text()!=szMsg)
		$("form[name^='HuihuwoForm']:eq("+i+") span[id^='HuihuwoMsg']").html(szMsg);
	
	$("form[name^='HuihuwoForm']:eq("+i+") input[name^='HuihuwoSubmit']").attr("alt", szMsg);
}

function ShowState(i, data)
{
	if(data.Ret==0)
	{
		if(typeof(data.Data)!="undefined" && data.Data.length>0)
			Msg(i, GetRequestProcess(data.Data));
		else
			Msg(i, "");
	}
	else
	{
		if(data.Ret==8)
			Msg(i, GetRequestProcess(data.Data));
		else
			Msg(i, GetErrInfo(data.Ret));
	}

	if(data.Ret==0)
		EnableInput(i, true);
	else
		EnableInput(i, false);	
}

function ExistId(id)
{
	return document.getElementById(id)!=null;
}

function EnableInput(i, bEnable)
{
	if(i<0)
	{
		if(bEnable)
		{
			$("form[name^='HuihuwoForm']").each(function(i){											
				$("input[name^='HuihuwoNumber']", $(this)).removeAttr("disabled");
				$("input[name^='HuihuwoSubmit']", $(this)).removeAttr("disabled");
				//$("img[name^='HuihuwoAuthImage']", $(this)).attr("src", 'auth/authimage.php?sid=' + Math.random());
				//$("input[name^='HuihuwoSubmit']", $(this)).css("opacity", 1);
				//$("input[name^='HuihuwoSubmit']", $(this)).css("-moz-opacity", 1);
			});
		}
		else
		{
			$("form[name^='HuihuwoForm']").each(function(i){
				$("input[name^='HuihuwoNumber']", $(this)).attr("disabled", true);
				$("input[name^='HuihuwoSubmit']", $(this)).attr("disabled", true);
				//$("input[name^='HuihuwoSubmit']", $(this)).css("opacity", 0.5);
				//$("input[name^='HuihuwoSubmit']", $(this)).css("-moz-opacity", 0.5);
			});
		}
	}
	else
	{
		if(bEnable)
		{																		   
			$("form[name^='HuihuwoForm']:eq("+i+") input[name^='HuihuwoSubmit']").removeAttr("disabled");
			$("form[name^='HuihuwoForm']:eq("+i+") input[name^='HuihuwoNumber']").removeAttr("disabled");
			
			//$("form[name^='HuihuwoForm']:eq("+i+") img[name^='HuihuwoAuthImage']").attr("src", 'auth/authimage.php?sid=' + Math.random());
			//$("form[name^='HuihuwoForm']:eq("+i+") input[name^='HuihuwoSubmit']").css("opacity", 1);
			//$("form[name^='HuihuwoForm']:eq("+i+") input[name^='HuihuwoNumber']").css("-moz-opacity", 1);		
		}
		else
		{
			$("form[name^='HuihuwoForm']:eq("+i+") input[name^='HuihuwoSubmit']").attr("disabled", true);
			$("form[name^='HuihuwoForm']:eq("+i+") input[name^='HuihuwoNumber']").attr("disabled", true);
			//$("form[name^='HuihuwoForm']:eq("+i+") input[name^='HuihuwoSubmit']").css("opacity", 0.5);
			//$("form[name^='HuihuwoForm']:eq("+i+") input[name^='HuihuwoNumber']").css("-moz-opacity", 0.5);
		}		
	}
}

function GetErrInfo(nErrCode)
{
	switch(parseInt(nErrCode))
	{
		case ErrInvalidIdFormat: return "客户端ID格式错误";
		case ErrInvalidClientId: return "无效客户端ID，回呼客户端还未连接到回呼服务器";
		case ErrCreateDatabase: return "连接数据库失败";
		case ErrOpenDatabase: return "打开数据库失败";
		case ErrBadJsonFormat: return "无效Json格式";
		case ErrDatabase: return "数据库错误";
		case ErrRequest: return "请求错误";
		case ErrRequestNotFinished: return "回呼请求处理中";
		case ErrRequestNoSuchNumber: return "无此回呼号码";
		case ErrRequestLineBusy: return "回呼线路忙";
		case ErrInvalidNumber: return "电话号码格式不对";
		case ErrClientNotOnline: return "客户端不在线";
		case ErrAuthCodeError: return "验证码错误";
		default: return "未知错误";
	}
}

function GetRequestProcess(nProcess)
{	
	switch(parseInt(nProcess))
	{
		case RsNew: return "请求已提交，等待处理...";
		case RsRing: return "服务人员电话振铃...";
		case RsPickup: return "服务人员摘机...";
		case RsDial: return "正在拨通您输入的号码...";
		case RsWaiting: return "等待线路空闲...";
		case RsTalking: return "通话中...";
		case RrSuccessed: return "回呼完成";
		case RrCanceled: return "回呼请求被取消";
		case RrDialTimeout: return "您输入的电话无人接听";
		case RrSystemBusy: return "系统忙，回呼请求失败";
		case RrNotPresent: return "服务人员电话无人接听";
		
		default: return "请求处理中...";
	}
}


/**
*
*  Base64 encode / decode
*  http://www.webtoolkit.info/
*
**/

var Base64 = {

	// private property
	_keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",

	// public method for encoding
	encode : function (input) {
		var output = "";
		var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
		var i = 0;

		input = Base64._utf8_encode(input);

		while (i < input.length) {

			chr1 = input.charCodeAt(i++);
			chr2 = input.charCodeAt(i++);
			chr3 = input.charCodeAt(i++);

			enc1 = chr1 >> 2;
			enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
			enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
			enc4 = chr3 & 63;

			if (isNaN(chr2)) {
				enc3 = enc4 = 64;
			} else if (isNaN(chr3)) {
				enc4 = 64;
			}

			output = output +
			this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
			this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);

		}

		return output;
	},

	// public method for decoding
	decode : function (input) {
		var output = "";
		var chr1, chr2, chr3;
		var enc1, enc2, enc3, enc4;
		var i = 0;

		input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");

		while (i < input.length) {

			enc1 = this._keyStr.indexOf(input.charAt(i++));
			enc2 = this._keyStr.indexOf(input.charAt(i++));
			enc3 = this._keyStr.indexOf(input.charAt(i++));
			enc4 = this._keyStr.indexOf(input.charAt(i++));

			chr1 = (enc1 << 2) | (enc2 >> 4);
			chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
			chr3 = ((enc3 & 3) << 6) | enc4;

			output = output + String.fromCharCode(chr1);

			if (enc3 != 64) {
				output = output + String.fromCharCode(chr2);
			}
			if (enc4 != 64) {
				output = output + String.fromCharCode(chr3);
			}

		}

		output = Base64._utf8_decode(output);

		return output;

	},

	// private method for UTF-8 encoding
	_utf8_encode : function (string) {
		string = string.replace(/\r\n/g,"\n");
		var utftext = "";

		for (var n = 0; n < string.length; n++) {

			var c = string.charCodeAt(n);

			if (c < 128) {
				utftext += String.fromCharCode(c);
			}
			else if((c > 127) && (c < 2048)) {
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			}
			else {
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}

		}

		return utftext;
	},

	// private method for UTF-8 decoding
	_utf8_decode : function (utftext) {
		var string = "";
		var i = 0;
		var c = c1 = c2 = 0;

		while ( i < utftext.length ) {

			c = utftext.charCodeAt(i);

			if (c < 128) {
				string += String.fromCharCode(c);
				i++;
			}
			else if((c > 191) && (c < 224)) {
				c2 = utftext.charCodeAt(i+1);
				string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
				i += 2;
			}
			else {
				c2 = utftext.charCodeAt(i+1);
				c3 = utftext.charCodeAt(i+2);
				string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
				i += 3;
			}

		}

		return string;
	}

}
