/**
 * ----------------------------------------------------------common start--------------------------------------------------------------
*/
//采集指纹次数
var FINGERPRINT_NUMBER = 3;
//胁迫指纹数--胁迫指纹时，在普通指纹上加的数
var DURESS_FINGER_NUM = 16;
//胁迫指纹标记
var duressFingerFlag = null;
//是否显示胁迫指纹(用户登记指纹时，不需要胁迫指纹)，默认显示胁迫指纹
var duressFingerShowFlag = true;
//手指标记数组
var fingerIdArray = new Array();//[]
//指纹模板数据数组
var templateDataArray = new Array();//[]
//定时器--关闭setTimeOut时用到
var timer = null;
//定时器--验证
var verifyTimer = null;
//判断当前手指是否正在采集中
var collectFlag = false;
//当前点击的手指标记
var fpIdNum = null;
//访问ISSOnline_server的ip
var serverIp = null;
//访问的ISSOnline_server端口
var serverPort = null;
//ISSOnline_server的url的公共部分:http://127.0.0.1:22001/ZKBIOOnline
//var issOnlineUrl = null;
var issOnlineUrl = "http://127.0.0.1:22001/ZKBIOOnline";
//是否是访客
var isVisPager = false;
//定义驱动的版本号
var fpDriverVersion="5.0.0.1";
//是否为比对功能
var isComp= false;

/**
 * 加载xml中ISSOnline_server的ip和port
 * @author wenxin
 * @create 2013-06-15 15:01:31 pm
 * @param url 加载xml的url
 */
function loadXml(url)
{
	$.ajax( {
		type : "GET",
		url : url,
		dataType : "xml",
		async: false,
		success : function(xml) 
		{
			$(xml).find('service').each(function(){
				var service = $(this);
				serverIp = service.find('ISSOnline_serverIp').text(); 
				serverPort = service.find('ISSOnline_serverPort').text();
			})
		},
		error : function(XMLHttpRequest, textStatus, errorThrown) 
		{
			//如果取配置文件出错，则设置默认
			serverIp = "127.0.0.1";
			serverPort = "22001";
	    }
	});
	//给issOnlineUrl赋值
	issOnlineUrl = "http://"+serverIp+":"+serverPort+"/ZKBIOOnline";
}

/**
 * 获取编辑时，查询的数据库的指纹标记和指纹模板
 * @author wenxin
 * @create 2013-04-22 10:18:31 am
 * @param fingerIdList 数据库查询的指纹标记
 * @param templateList 数据库查询的指纹模板
 */
function loadFPDataTemplate(fingerIdList, templateList)
{
	if(fingerIdList == "[]") 
	{
		$("#fingerId").val(" ");
	} 
	else 
	{
		$("#fingerId").val(fingerIdList);
	}
	if(templateList == "[]") 
	{
		$("#fingerTemplate10").val(" ");
	} 
	else 
	{
		$("#fingerTemplate10").val(templateList);
	}
}


/**
 * 获取浏览器类型
 * @author wenxin
 * @create 2013-08-09 17:24:31 pm
 */
function getBrowserType()
{
	var browserFlag = "";
	 //是否支持html5的cors跨域
    if (typeof(Worker) !== "undefined")
    {
        browserFlag = "html5";
    }
    //此处判断ie8、ie9
    else if(navigator.userAgent.indexOf("MSIE 8.0")>0 || navigator.userAgent.indexOf("MSIE 9.0")>0)
    {
        browserFlag = "simple";
    }
    else
	{
		browserFlag = "upgradeBrowser";//当前浏览器不支持该功能,请升级浏览器
	}
    return browserFlag;
}

/**
 * 判断是否安装指纹驱动
 * @author wenxin
 * @create 2013-04-22 20:18:31 pm
 * @param browserFlag 浏览器标记 simple:简易版本，表示是ie浏览器；html5:表示支持html5的浏览器
 * @param paramArray 存放国际化元素的数组
 * @param isFPLogin 是否是指纹登录 true:是；false:否
 */
function checkDriver(paramArray, browserFlag, isFPLogin)
{
	var hrefStr = "";
	if(browserFlag == "html5")
	{
		// 发送一个请求，检查是否安装驱动
		getWebServerInfo(paramArray, isFPLogin, "0");
	}
	else if(browserFlag == "simple")
	{
		//发送一个请求，检查是否安装驱动
		getWebServerInfoForSimple(paramArray, isFPLogin, "0");
	}
	else if(browserFlag == "upgradeBrowser")
	{
		if($("#userLoginForm [name='fingerLogin']").val() != undefined)
		{
			$("#userLoginForm [name='fingerLogin']").attr("onclick", "");
			$("#userLoginForm [name='fingerLogin']").attr("title", "当前浏览器不支持改功能,请升级浏览器!");
		}
		if($("#fpRegister").val() != undefined)
		{
			$("#fpRegister").attr("onclick", "");
			$("#fpRegister").attr("title", "当前浏览器不支持改功能,请升级浏览器!");
		}
	}
}

/**
 * 获取webserver的信息
 * @author wenxin
 * @param 
 * @param paramArray 存放国际化元素的数组
 * @param isFPLogin 是否是指纹登录 true:是；false:否
 * @param type 0 表示发送完请求后,还有别的操作。1 表示发送完请求后，没有其余的操作了
 * @create 2013-08-09 17:24:31 pm
 */
function getWebServerInfo(paramArray, isFPLogin, type)
{
	$.ajax( {
		type : "GET",
		url : issOnlineUrl+"/info",
		dataType : "json",
		async: true,
		//timeout:1000,
		success : function(result) 
		{
			//检查驱动
			if(type == "0")
			{
				getWebServerInfoCallBack(result, paramArray, isFPLogin);
			}
			//检查动态库连接
			else if(type == "1")
			{
				getDLLConnectCallBack(result,isComp);
			}
			
		},
		error : function(XMLHttpRequest, textStatus, errorThrown) 
		{
			
	    }
	});
}

/**
 * 获取webserver的信息
 * @author wenxin
 * @param paramArray 存放国际化元素的数组
 * @param isFPLogin 是否是指纹登录 true:是；false:否
 * @param type 0 表示发送完请求后,还有别的操作。1 表示发送完请求后，没有其余的操作了
 * @create 2013-08-09 17:24:31 pm
 */
function getWebServerInfoForSimple(paramArray, isFPLogin, type)
{
	//创建XDomainRequest实例，用于ie8和ie9跨域访问
	var xDomainRequest = new XDomainRequest();
	//如果xDomainRequest存在,则可以使用xDomainRequest函数，否则，说明不是ie浏览器
	if (xDomainRequest) 
	{  
		xDomainRequest.open('GET', issOnlineUrl+"/info?random="+getRandomNum());  
		xDomainRequest.onload = function()
		{
			//检查驱动
			if(type == "0")
			{
				getInfoForSimpleCallBack(xDomainRequest, paramArray, isFPLogin);
			}
			//检查动态库连接
			else if(type == "1")
			{
				getDLLConnectCallBack(xDomainRequest,isComp);
			}
		};  
		xDomainRequest.onerror = function()
		{
			//用完后，将对象置为空
			xDomainRequest = null;
		};
		xDomainRequest.send();  
	} 
}


/**
 * 获取webserver信息的回调函数
 * @author wenxin
 * @create 2013-08-09 17:24:31 pm
 */
function getWebServerInfoCallBack(result, paramArray, isFPLogin)
{
	//返回码
	var ret = null;
	ret = result.ret;
	//接口调用成功返回时
	if(ret == 0)
	{
		if(isFPLogin)
		{
			//显示指纹登录
			showFPVerify(paramArray);
		}
		else
		{
			//显示登记--可以点击采集指纹
			showRegister(paramArray);
			//计算指纹数量${pers_person_templateCount}:指纹数
			showFPCountInit(paramArray[5], paramArray[6]);
			//鼠标over事件
			//mouseOverEvent();
			// 对比指纹驱动
			if (result.data&&result.data.server_version){
			    compareFPDriver(result.data.server_version);
			}
		}
		
	}
}

/**
 * 显示指纹登录--点击进行指纹验证
 * @author wenxin
 * @create 2013-06-14 10:09:20 am
 * @param paramArray 存放国际化元素的数组
 */
function showFPVerify(paramArray)
{
	$("#userLoginForm .but_fing_disabled").hide();
	$("#userLoginForm .but_fing").show();
}

/**
 * 显示登记--点击采集指纹
 * @author wenxin
 * @create 2013-06-14 10:09:20 am
 * @param paramArray 存放国际化元素的数组
 */
function showRegister(paramArray)
{
	var hrefStr = "";
	var param = '"'+paramArray[0]+'", "'+paramArray[1]+'", "'+paramArray[2]+'", '+null+'';
	$("#fpRegister").remove();
	$("#downloadDriver").remove();
	//webservice接口调用成功，说明驱动已经安装
	hrefStr = "<a id='fpRegister' onclick='submitRegister("+param+", true"+")' title='"+paramArray[3]+"' class='linkStyle'>"+paramArray[3]+"</a>";
	$("#fpRegisterDiv").append(hrefStr);
}

/**
 * 在页面初始化时，计算指纹数量
 * @author wenxin
 * @create 2013-04-25 11:31:20 am
 * 
 */
function showFPCountInit(fingerIdCount, text)
{
	$("#fpCountMessage").text(text +" "+ fingerIdCount);
}

/**
 * 对比指纹驱动版本
 * @author gordon.zhang
 * @param oldVersion 旧驱动版本
 * @create 2015-01-28 17:24:31 pm
 */
function compareFPDriver(oldVersion)
{
    var existVersion = fpDriverVersion
	var curVersion = oldVersion;//3.5.2
	var existVersionArr = existVersion.split(".");
	var curVersionArr = curVersion.split(".");
	var isLast = true;
	var len = existVersionArr.length;
	for(var i=len;i>0;i--)
	{
		var existVersionTemp = parseInt(existVersionArr[i-1]);
		var curVersionTemp = parseInt(curVersionArr[i-1]);
		if(existVersionTemp<curVersionTemp)
		{
			isLast = false;
		}
		else if(existVersionTemp>curVersionTemp)
		{
			isLast = true;
		}
		else
		{
			//等于 忽略
		}
	}
}
/**
 * 显示发现新驱动
 * @author gordon.zhang
 * @create 2015-01-28 17:24:31 pm
 */
function showNewDriver(){
    var hrefStr = "<a id='downloadDriver' href='base/middleware/zkbioonline.exe' title='下载新驱动'>下载新驱动</a>";
    $("#driverDownload").append(hrefStr);
}

/**
 * 获取webserver的信息--简易版
 * @author wenxin
 * @param paramArray 存放国际化元素的数组
 * @param isFPLogin 是否是指纹登录 true:是；false:否
 * @create 2013-08-09 17:43:31 pm
 */
function getInfoForSimpleCallBack(xDomainRequest, paramArray, isFPLogin)
{
	//获取接口返回值
	var resultData = xDomainRequest.responseText;
	//转化为json对象
	var obj = jQuery.parseJSON(resultData);
	//返回码
	var ret = null;
	if(obj != null && obj.ret != undefined)
	{
		ret = obj.ret;
	}
	//接口调用成功返回时
	if(ret == 0)
	{
		if(isFPLogin)
		{
			//显示指纹比对
			showFPVerify(paramArray);
		}
		else
		{
			//显示登记--点击采集指纹
			showRegister(paramArray);
			//计算指纹数量${pers_person_templateCount}:指纹数
			
			showFPCountInit(paramArray[5], paramArray[6]);
			//鼠标over事件
			//mouseOverEvent();
		}
		//用完后，将对象置为空
		xDomainRequest = null;
	}
}
//------
/**
 * 点击登记，触发事件
 * @author wenxin
 * @create 2013-05-21 11:31:20 am
 * @param title 页面标题国际化内容
 * @param fpCount 指纹数国际化内容
 * @param saveText 提示:是否保存国际化内容
 * @param downloadText 驱动安装国际化内容
 * @param isDriverInstall 是否安装了驱动
 */
function submitRegister(title, fpCount, saveText, downloadText, isDriverInstall)
{
	//支持html5
	if (typeof(Worker) !== "undefined" && isDriverInstall)   
	{  
		var box=document.getElementById("box");
	    var bg=document.getElementById("bg");
	   	box.style.display="block";//显示内容层，显示覆盖层
	 	box.style.left=parseInt((document.documentElement.scrollWidth-box.offsetWidth)/2)+document.documentElement.scrollLeft+"px";
	 	box.style.top=Math.abs(parseInt((document.documentElement.clientHeight-box.offsetHeight)/2))+document.documentElement.scrollTop+"px"; //为内容层设置位置
	 	bg.style.display="block";
	 	bg.style.height=document.documentElement.scrollHeight+"px"; 
	 	isComp=false;
	 	dataInitReg();
	    //关闭页面时，提示保存数据
		//storeBeforeClose(fpCount, saveText);
	} 
	else if(typeof(Worker) == "undefined" && isDriverInstall)
	{  
	    //createWindow('base_baseFPRegisterSimple.action?random=' + getRandomNum() + '^0^0^465^460^' + title);//public/html/applet.html
	    showModalDialog('webapp/html/baseFPRegisterSimple.html',title,'dialogWidth:465px;dialogHeight:460px;dialogLeft:600px;dialogTop:150px;center:yes;resizable:no;status:yes');
	    //关闭页面时，提示保存数据
		//storeBeforeClose(fpCount, saveText);
	}  
	else if(!isDriverInstall)
	{
		alert("请安装指纹驱动或启动该服务!");
		//messageBox({messageType: "alert", title: "提示", text: "请安装指纹驱动或启动该服务!"});
		if(typeof($("#downloadDriver").val()) == "undefined")
		{
			var hrefStr = "<a id='downloadDriver' href='webapp/middleware/zkbioonline.exe' title='" + downloadText + "'>"+downloadText+"</a>";
			$("#driverDownload").append(hrefStr);
		}
	}
}


/**
 * 关闭页面时，如果有修改操作，则提示用户保存数据
 * @author wenxin
 * @create 2013-06-08 19:36:20 pm
 * @param fpCount 指纹数国际化内容
 * @param saveText 提示:是否保存国际化内容
 */
function storeBeforeClose(fpCount, saveText)
{
	 //关闭页面时，监听关闭的onclick事件
	getCurrentWindow().button("close").attachEvent("onClick", function(){
		//判断是否修改了数据(包括新增和删除)
		if ($("#whetherModify").val() != undefined && (fpModifyFlag != undefined && fpModifyFlag)) 
		{
			//获取指纹标记数据
			var fingerIdData = fingerIdArray;
			//获取指纹模板数据
			var fingerTemplateData = templateDataArray;
			var flag=confirm(saveText);
			saveFPData(flag, fpCount);
		}
		else
		{
			//取消采集 
			cancelRegister();
			//将定时器的递归调用关闭
			clearTimeout(timer);
			//closeWindow();
			close();
		}
	});
}

/**
 * 获取页面的指纹数据 
 * @author wenxin
 * @create 2013-05-13 10:18:31 am
 * @param 
 */
function getDataFromPage() 
{
    var fingerId = $("#fingerId").val();
    var fingerTemplate = $("#fingerTemplate10").val();
    //如果有数据
    if($.trim(fingerId) != "")
    {
	    fingerId = fingerId.substr(1, fingerId.length-2);
	    fingerTemplate = fingerTemplate.substr(1, fingerTemplate.length-2);
	    fingerIdArray = fingerId.split(",");
	    templateDataArray = fingerTemplate.split(",");
    }else{
    	fingerIdArray=new Array();
    	templateDataArray=new Array();
    }
}

/**
 * 初始化绘画手指、手掌、圆弧的起始坐标,并做成json格式
 * @author wenxin
 * @create 2013-06-15 15:40:31 pm
 */
function initCoordJson()
{
	var coordJson = [{"num" : 0, "coord" : {"x" : x + 3, "y" : y - 37}},
		             {"num" : 1, "coord" : {"x" : x + 25, "y" : y - 37}},
		             {"num" : 2, "coord" : {"x" : x + 47, "y" : y - 34}},
		             {"num" : 3, "coord" : {"x" : x + 67, "y" : y - 26}},
		             {"num" : 4, "coord" : {"x" : x + 77, "y" : y + 18}},
		             {"num" : 5, "coord" : {"x" : x + 153, "y" : y + 34}},
		             {"num" : 6, "coord" : {"x" : x + 159, "y" : y - 19}},
		             {"num" : 7, "coord" : {"x" : x + 177, "y" : y - 30}},
		             {"num" : 8, "coord" : {"x" : x + 198, "y" : y - 36}},
		             {"num" : 9, "coord" : {"x" : x + 220, "y" : y - 36}},
		             {"num" : 10, "coord" : {"x" : x, "y" : y}},
		             {"num" : 11, "coord" : {"x" : x + 170, "y" : y + 12}},
		             {"num" : 12, "coord" : {"x" : x + 210, "y" : y - 346}}];
	return coordJson;
}

/**
 * 将绘画的坐标点放入数组
 * @author wenxin
 * @create 2013-05-31 18:01:33 pm
 * @param coordArray 传入的数组，放入坐标后，返回
 * @param x, y 绘画手指的起点的坐标
 * @param num 手指、手掌编号0-9：手指编号；10：左手掌，11：右手掌,12:圆弧。
 */
function initCoordArray(coordArray, x, y, num)
{
	if(num == 0)
	{
		coordArray[0] = new Coord(x, y);
		coordArray[1] = new Coord(x + 2, y - 35);
		coordArray[2] = new Coord(x + 5, y - 40);
		coordArray[3] = new Coord(x + 11, y - 42);
		coordArray[4] = new Coord(x + 16, y - 40);
		coordArray[5] = new Coord(x + 18, y - 35);
		coordArray[6] = new Coord(x + 18, y + 1);
		coordArray[7] = new Coord(x + 15, y + 5);
		coordArray[8] = new Coord(x + 9, y + 7);
		coordArray[9] = new Coord(x + 3, y + 5);
		coordArray[10] = new Coord(x, y);
	}
	else if(num == 1)
	{
		coordArray[0] = new Coord(x, y);
		coordArray[1] = new Coord(x + 8, y - 50);
		coordArray[2] = new Coord(x + 12, y - 54);
		coordArray[3] = new Coord(x + 19, y - 55);
		coordArray[4] = new Coord(x + 22, y - 53);
		coordArray[5] = new Coord(x + 24, y - 49);
		coordArray[6] = new Coord(x + 18, y + 1);
		coordArray[7] = new Coord(x + 15, y + 6);
		coordArray[8] = new Coord(x + 8, y + 7);
		coordArray[9] = new Coord(x + 3, y + 4);
		coordArray[10] = new Coord(x, y);
	}
	else if(num == 2)
	{
		coordArray[0] = new Coord(x, y);
		coordArray[1] = new Coord(x + 14, y - 54);
		coordArray[2] = new Coord(x + 16, y - 57);
		coordArray[3] = new Coord(x + 23, y - 58);
		coordArray[4] = new Coord(x + 28, y - 55);
		coordArray[5] = new Coord(x + 29, y - 50);
		coordArray[6] = new Coord(x + 17, y + 4);
		coordArray[7] = new Coord(x + 13, y + 8);
		coordArray[8] = new Coord(x + 6, y + 9);
		coordArray[9] = new Coord(x + 1, y + 5);
		coordArray[10] = new Coord(x, y);
	}
	else if(num == 3)
	{
		coordArray[0] = new Coord(x, y);
		coordArray[1] = new Coord(x + 19, y - 37);
		coordArray[2] = new Coord(x + 21, y - 39);
		coordArray[3] = new Coord(x + 28, y - 39);
		coordArray[4] = new Coord(x + 32, y - 36);
		coordArray[5] = new Coord(x + 33, y - 31);
		coordArray[6] = new Coord(x + 17, y + 6);
		coordArray[7] = new Coord(x + 12, y + 10);
		coordArray[8] = new Coord(x + 6, y + 10);
		coordArray[9] = new Coord(x + 1, y + 6);
		coordArray[10] = new Coord(x, y);
	}
	else if(num == 4){
		coordArray[0] = new Coord(x, y);
		coordArray[1] = new Coord(x + 30, y - 18);
		coordArray[2] = new Coord(x + 34, y - 17);
		coordArray[3] = new Coord(x + 37, y - 14);
		coordArray[4] = new Coord(x + 39, y - 11);
		coordArray[5] = new Coord(x + 39, y - 8);
		coordArray[6] = new Coord(x + 38, y - 6);
		coordArray[7] = new Coord(x + 12, y + 15);
		coordArray[8] = new Coord(x + 8, y + 17);
		coordArray[9] = new Coord(x + 2, y + 14);
		coordArray[10] = new Coord(x - 2, y + 8);
		coordArray[11] = new Coord(x, y);
	}
	else if(num == 5)
	{
		coordArray[0] = new Coord(x, y);
		coordArray[1] = new Coord(x - 26, y - 21);
		coordArray[2] = new Coord(x - 27, y - 24);
		coordArray[3] = new Coord(x - 26, y - 30);
		coordArray[4] = new Coord(x - 21, y - 34);
		coordArray[5] = new Coord(x - 16, y - 34);
		coordArray[6] = new Coord(x + 12, y - 18);
		coordArray[7] = new Coord(x + 15, y - 10);
		coordArray[8] = new Coord(x + 13, y - 3);
		coordArray[9] = new Coord(x + 7, y + 1);
		coordArray[10] = new Coord(x, y);
	}
	else if(num == 6)
	{
		coordArray[0] = new Coord(x, y);
		coordArray[1] = new Coord(x - 17, y - 46);
		coordArray[2] = new Coord(x - 17, y - 50);
		coordArray[3] = new Coord(x - 13, y - 56);
		coordArray[4] = new Coord(x - 6, y - 56);
		coordArray[5] = new Coord(x - 3, y - 54);
		coordArray[6] = new Coord(x + 15, y - 11);
		coordArray[7] = new Coord(x + 15, y - 4);
		coordArray[8] = new Coord(x + 11, y + 2);
		coordArray[9] = new Coord(x + 4, y + 2);
		coordArray[10] = new Coord(x, y);
	}
	else if(num == 7)
	{
		coordArray[0] = new Coord(x, y);
		coordArray[1] = new Coord(x - 12, y - 54);
		coordArray[2] = new Coord(x - 10, y - 58);
		coordArray[3] = new Coord(x - 5, y - 62);
		coordArray[4] = new Coord(x + 1, y - 61);
		coordArray[5] = new Coord(x + 4, y - 58);
		coordArray[6] = new Coord(x + 18, y - 4);
		coordArray[7] = new Coord(x + 16, y + 1);
		coordArray[8] = new Coord(x + 11, y + 5);
		coordArray[9] = new Coord(x + 5, y + 4);
		coordArray[10] = new Coord(x, y);
	}
	else if(num == 8)
	{
		coordArray[0] = new Coord(x, y);
		coordArray[1] = new Coord(x - 5, y - 50);
		coordArray[2] = new Coord(x - 2, y - 54);
		coordArray[3] = new Coord(x + 3, y - 57);
		coordArray[4] = new Coord(x + 9, y - 55);
		coordArray[5] = new Coord(x + 11, y - 52);
		coordArray[6] = new Coord(x + 18, y - 1);
		coordArray[7] = new Coord(x + 14, y + 4);
		coordArray[8] = new Coord(x + 9, y + 6);
		coordArray[9] = new Coord(x + 4, y + 5);
		coordArray[10] = new Coord(x, y);
	}
	else if(num == 9)
	{
		coordArray[0] = new Coord(x, y);
		coordArray[1] = new Coord(x, y - 37);
		coordArray[2] = new Coord(x + 3, y - 41);
		coordArray[3] = new Coord(x + 7, y - 43);
		coordArray[4] = new Coord(x + 13, y - 41);
		coordArray[5] = new Coord(x + 15, y - 37);
		coordArray[6] = new Coord(x + 17, y + 1);
		coordArray[7] = new Coord(x + 15, y + 3);
		coordArray[8] = new Coord(x + 10, y + 6);
		coordArray[9] = new Coord(x + 3, y + 4);
		coordArray[10] = new Coord(x, y);
	}
	else if(num == 10)
	{
		coordArray[0] = new Coord(x, y);
		coordArray[1] = new Coord(x + 2, y - 8);
		coordArray[2] = new Coord(x + 6, y - 16);
		coordArray[3] = new Coord(x + 13, y - 23);
		coordArray[4] = new Coord(x + 27, y - 27);
		coordArray[5] = new Coord(x + 37, y - 25);
		coordArray[6] = new Coord(x + 43, y - 23);
		coordArray[7] = new Coord(x + 64, y - 16);
		coordArray[8] = new Coord(x + 69, y - 11);
		coordArray[9] = new Coord(x + 73, y - 3);
		
		coordArray[10] = new Coord(x + 73, y + 10);
		coordArray[11] = new Coord(x + 71, y + 18);
		coordArray[12] = new Coord(x + 57, y + 40);
		coordArray[13] = new Coord(x + 50, y + 46);
		coordArray[14] = new Coord(x + 41, y + 49);
		coordArray[15] = new Coord(x + 34, y + 49);
		coordArray[16] = new Coord(x + 14, y + 43);
		coordArray[17] = new Coord(x + 10, y + 41);
		coordArray[18] = new Coord(x + 6, y + 36);
		coordArray[19] = new Coord(x + 2, y + 29);
		coordArray[20] = new Coord(x, y);
	}
	else if(num == 11)
	{
		coordArray[0] = new Coord(x, y);
		coordArray[1] = new Coord(x - 2, y - 10);
		coordArray[2] = new Coord(x + 1, y - 20);
		coordArray[3] = new Coord(x + 14, y - 31);
		coordArray[4] = new Coord(x + 47, y - 39);
		coordArray[5] = new Coord(x + 55, y - 38);
		coordArray[6] = new Coord(x + 61, y - 34);
		coordArray[7] = new Coord(x + 68, y - 26);
		coordArray[8] = new Coord(x + 72, y - 16);
		coordArray[9] = new Coord(x + 72, y + 13);
		
		coordArray[10] = new Coord(x + 68, y + 22);
		coordArray[11] = new Coord(x + 62, y + 29);
		coordArray[12] = new Coord(x + 60, y + 30);
		coordArray[13] = new Coord(x + 39, y + 36);
		coordArray[14] = new Coord(x + 34, y + 36);
		coordArray[15] = new Coord(x + 20, y + 33);
		coordArray[16] = new Coord(x + 16, y + 29);
		coordArray[17] = new Coord(x, y);
	}
	else if(num == 12)
	{
		coordArray[0] = new Coord(x - 10, y);
		coordArray[1] = new Coord(x + 212, y);
		coordArray[2] = new Coord(x + 212, y + 129);
		coordArray[3] = new Coord(x + 201, y + 130);
		coordArray[4] = new Coord(x + 191, y + 131);
		coordArray[5] = new Coord(x + 174, y + 131);
		coordArray[6] = new Coord(x + 159, y + 129);
		coordArray[7] = new Coord(x + 142, y + 127);
		coordArray[8] = new Coord(x + 133, y + 125);
		coordArray[9] = new Coord(x + 114, y + 120);
		
		coordArray[10] = new Coord(x + 97, y + 113);
		coordArray[11] = new Coord(x + 86, y + 108);
		coordArray[12] = new Coord(x + 72, y + 100);
		coordArray[13] = new Coord(x + 52, y + 87);
		coordArray[14] = new Coord(x + 40, y + 76);
		coordArray[15] = new Coord(x + 29, y + 64);
		coordArray[16] = new Coord(x + 16, y + 48);
		coordArray[17] = new Coord(x + 5, y + 30);
		coordArray[18] = new Coord(x - 10, y);
	}
	return coordArray;
}

/**
 * 坐标点对象
 * @author wenxin
 * @create 2013-05-31 18:01:33 pm
 */
var Coord = function(x, y)
{
	this.x = x;
	this.y = y;
}

/**
 * 绘画手指
 * @author wenxin
 * @create 2013-05-31 18:01:33 pm
 * @param context 2d画布上下文
 * @param pointArray 坐标点数组
 * @param renderFlag 渲染标记 stroke:绘画边线；fill:填充
 * @param color 渲染颜色
 */
var renderFinger = function(context, pointArray) 
{
	this.context = context;
	this.pointArray = pointArray;
	this.isClick = false;
	this.drawFinger = function(renderFlag, color) 
	{
		if(renderFlag == "stroke")
		{
			this.context.strokeStyle = color;
		}
		else if(renderFlag == "fill")
		{
			this.context.fillStyle = color;
		}
		this.context.lineWidth = 1;
		this.context.beginPath();
		for(var i=0; i<this.pointArray.length; i++)
		{
			if(i == 0)
			{
				this.context.moveTo(this.pointArray[0].x, this.pointArray[0].y);
			}
			else
			{
				this.context.lineTo(this.pointArray[i].x, this.pointArray[i].y);
			}
		}
		if(renderFlag == "stroke")
		{
			this.context.stroke();
		}
		else if(renderFlag == "fill")
		{
			this.context.fill();
		}
	};
};

/**
 * 页面加载和重画时渲染手指
 * @author wenxin
 * @create 2013-05-13 15:26:31 pm
 * @param context 2d画布上下文
 * @param num 当前需要渲染的手指编号
 * @param browserFlag 浏览器标记 simple:简易版本，表示是ie浏览器；html5:表示支持html5的浏览器
 */
function renderInit(context, num, browserFlag)
{
	var fingerId;
	for(var i=0; i<fingerIdArray.length; i++)
	{
		fingerId = eval(fingerIdArray[i]);
		if(fingerId >= DURESS_FINGER_NUM)
		{
			fingerId = fingerId -DURESS_FINGER_NUM;
			if(browserFlag == "html5")
			{
				if(fingerId == num)
			    {
					context.fillStyle = "red";
					context.fill();
			    }
			}
		}
		else
		{
			if(browserFlag == "html5"){
				if(fingerId == num)
				{
					context.fillStyle = "rgb(122,193,66)";
					context.fill();
				}
			}
		}
		if(browserFlag == "simple")
		{
			document.getElementById("finger" + fingerId).checked = true;
		}
	}
}

/**
 * 显示指纹图像
 * @author wenxin
 * @create 2013-05-18 11:22:31 am
 * @param context 2d画布上下文
 * @param browserFlag 浏览器标记 simple:简易版本，表示是ie浏览器；html5:表示支持html5的浏览器
 */
function showImage(context, base64FPImg, browserFlag)
{
	var img;
	var imgSrc = "data:image/jpg;base64,"+base64FPImg;
	if(browserFlag == "html5"){
		img = new Image();
		//img.src = sysCfg.rootPath + "/public/html/bmpFile1.jpg";
		img.src = "";
		img.src = imgSrc;
		img.onload=function() {
			// 保存当前的绘图状态
			context.save();
			// 开始创建路径
			context.beginPath();
			// 画一个椭圆
			context.oval(125, 142, 112, 145);
			// 关闭路径
			context.closePath();
			// 剪切路径
			context.clip();
			//将图片画到画布上
	        context.drawImage(img, 70, 70, 112, 145);
			//调用restore最后一次存储的状态会被恢复
	        context.restore();
	    }
	}
	else if(browserFlag == "verification")
	{
		img = new Image();
		img.src = "";
		img.src = imgSrc;
		img.onload=function() {
			// 保存当前的绘图状态
			context.save();
			// 开始创建路径
			context.beginPath();
			// 画一个椭圆
			context.oval(92, 159, 100, 128);
			// 关闭路径
			context.closePath();
			// 剪切路径
			context.clip();
			//将图片画到画布上
	        context.drawImage(img, 37, 90, 112, 145);
			//调用restore最后一次存储的状态会被恢复
	        context.restore();
	    }
	}
	else if(browserFlag == "clearForVerify" || browserFlag == "clearForRegister")
	{
		img = new Image();
		img.src = "";
		img.src = base64FPImg;
		img.onload=function() {
			// 保存当前的绘图状态
			context.save();
			// 开始创建路径
			context.beginPath();
			// 画一个椭圆
			if(browserFlag == "clearForVerify")
			{
				context.oval(91, 160, 112, 145);
			}
			else if(browserFlag == "clearForRegister")
			{
				context.oval(125, 142, 132, 165);
			}
			// 关闭路径
			context.closePath();
			// 剪切路径
			context.clip();
			//将图片画到画布上
			if(browserFlag == "clearForVerify")
			{
				context.drawImage(img, 12, 54, 160, 213);
			}
	        else if(browserFlag == "clearForRegister")
	        {
	        	context.drawImage(img, 60, 60, 132, 165);
	        }
			//调用restore最后一次存储的状态会被恢复
	        context.restore();
	    }
	}
	else if(browserFlag == "simple")
	{
		$("#showFPImageDiv").html("<img src="+imgSrc+" width='112' height='145' />");
	}
	else if(browserFlag == "verifySimple")
	{
		$("#showSeachingDiv").show();
		$("#showSeachingDiv").html("&nbsp;&nbsp;<img src=\"/public/images/searching.gif\" width='20' height='20'/></br><label style='color:yellow;align:center;font-size: 14px;'>处理中...</label>");
	}
	else if(browserFlag == "clearForSimple")
	{
		$("#showFPImageDiv").html("");
	}
}

/**
 * 绘画手掌
 * @author wenxin
 * @create 2013-06-01 09:01:33 am
 * @param context 2d画布上下文
 * @param pointArray 坐标点数组
 * @param color 渲染颜色
 */
var renderHand = function(context, pointArray) 
{
	this.context = context;
	this.pointArray = pointArray;
	this.isClick = false;
	this.drawHand = function(color) 
	{
		this.context.strokeStyle = color;
		this.context.lineWidth = 1;
		this.context.beginPath();
		for(var i=0; i<this.pointArray.length; i++)
		{
			if(i == 0)
			{
				this.context.moveTo(this.pointArray[0].x, this.pointArray[0].y);
			}
			else
			{
				this.context.lineTo(this.pointArray[i].x, this.pointArray[i].y);
			}
		}
		this.context.stroke();
	};
};

/**
 * 检查指纹采集器
 * @author wenxin
 * @create 2013-06-17 20:18:31 pm
 * @param context 2d画布上下文
 * @param paramArray 存放国际化元素的数组
 * @param browserFlag 浏览器标记 simple:简易版本，表示是ie浏览器；html5:表示支持html5的浏览器
 */
function checkFPReader(context, paramArray, browserFlag)
{
	if(browserFlag == "html5")
	{
		$.ajax( {
			type : "GET",
			url : issOnlineUrl+"/fingerprint/beginCapture?type=1&FakeFunOn=0&random="+getRandomNum(),
			dataType : "json",
			async: false,
			//timeout:1000,
			success : function(result) 
			{
				//返回码
				var ret = null;
				ret = result.ret;
				//接口调用成功返回时
				if(ret == 0)
				{
					//显示框--采集提示
					collectTips(context, paramArray[0], "html5");
				}
				else if(ret == -2001)
				{
					//显示框--采集提示
					collectTips(context, paramArray[1], "html5");
				}
				else if(ret == -2002)
				{
					getWebServerInfo(null, null, "1");
				}
				else if(ret == -2005)
				{
					//显示框--采集提示
					collectTips(context, paramArray[3], "html5");
				}
				collectFlag = true;
				//取消采集
				cancelRegister();
			},
			error : function(XMLHttpRequest, textStatus, errorThrown) 
			{
				alert("请安装指纹驱动或启动该服务!");
				//messageBox({messageType: "alert", title: "${common_prompt_title}", text: "${base_fp_connectPrompt}"});
		    }
		});
	}
	else if(browserFlag == "simple")
	{
		//创建XDomainRequest实例，用于ie8和ie9跨域访问
		var xDomainRequest = new XDomainRequest();
		//如果xDomainRequest存在,则可以使用xDomainRequest函数，否则，说明不是ie浏览器
		if (xDomainRequest) 
		{  
			xDomainRequest.open('GET', issOnlineUrl+"/fingerprint/beginCapture?type=1&FakeFunOn=0&random="+getRandomNum());  
			xDomainRequest.onload = function()
			{
				//获取接口返回值
				var resultData = xDomainRequest.responseText;
				//转化为json对象
				var obj = jQuery.parseJSON(resultData);
				//返回码
				var ret = null;
				if(obj != null && obj.ret != undefined)
				{
					ret = obj.ret;
				}
				//接口调用成功返回时
				if(ret == 0)
				{
					//显示框--采集提示
					collectTips(null, paramArray[0], "simple");
				}
				else if(ret == -2001)
				{
					//显示框--采集提示
					collectTips(null, paramArray[1], "simple");
				}
				else if(ret == -2002)
				{
					getWebServerInfoForSimple(null, null, "1");
				}
				collectFlag = true;
				//取消采集
				cancelRegister();
			};  
			xDomainRequest.onerror = function()
			{
				//用完后，将对象置为空
				xDomainRequest = null;
			};
			xDomainRequest.send(); 
		} 
	}
}

/**
 * 显示框--显示采集次数、采集成功、失败等信息
 * @author wenxin
 * @create 2013-05-16 16:56:31 pm
 * @param context 2d画布上下文
 * @param text  显示信息内容
 * @param browserFlag 浏览器标记或比对验证标记 simple:简易版本，表示是ie浏览器；html5:表示支持html5的浏览器
 * --verification:指纹验证标记
 */
function collectTips(context, text, browserFlag)
{
	if(browserFlag == "simple")
	{
		$("#showCollInfoDiv").html("<span style='color:rgb(122,193,66); font-size: 12px;word-break: break-all; word-wrap: break-word;'>"+text+"</span>");
	}
	else if(browserFlag == "html5")
	{
		context.fillStyle = bgColor;//bgColor;
		context.fillRect(205, 18, 240, 16);
		
		//文字右对齐
		context.fillStyle = "rgb(122,193,66)";
		context.font ="12px Arial,微软雅黑"; 
		//context.shadowColor = 'white'; 
	    //context.shadowBlur = 10; 
	    //context.strokeText(text, 230, 30);
		context.textAlign = "end";
		context.fillText(text, 400, 30);
	}
	else if(browserFlag == "verification")
	{
		//#6BA5D7
		context.fillStyle = "#F3F5F0";//#6BA5D7
		context.fillRect(2, 8, 600, 30);
		//获取canvas对象
		var canvas ="";
		if(isComp){
			canvas = document.getElementById("canvasComp");
		}else{
			canvas = document.getElementById("canvas");
		}
//		canvas.width = canvas.width;
		//返回一个文本的度量信息对象metrics
		var metrics = context.measureText(text);
		//文本宽度
		var textWidth = metrics.width;
		//canvas宽度
		canvas != null?canvasWidth = canvas.width:canvasWidth = 450;
		//文本开始x坐标
		var x = textWidth/2 + (canvasWidth - textWidth)/2;
		
		
		//context.fillStyle = bgColor;
		//context.fillRect(0, 18, 445, 16);
		
		//文字右对齐
		context.fillStyle = "rgb(122,193,66)";
		context.font ="24px Arial,微软雅黑"; 
		context.textAlign = "center";
		//自动换行
		autoWordBreak(context,text,canvasWidth,x);
		context.restore();
	}
	else if(browserFlag == "verifyForSimple")
	{
		$("#showCollInfoDiv").html("<span style='color:yellow;align:center;font-size: 18px;word-break: break-all; word-wrap: break-word;'>"+text+"</span>");
	}
}

/**
 * 画进度条
 * @author wenxin
 * @create 2013-05-16 16:56:31 pm
 * @param context 2d画布上下文
 * @param x,y,width,height 进度条底框的坐标和宽度、高度
 */
function drawProgressBar(context, collCount)
{
	var x = 300;
	var y = 60;
	var width = 90;
	var height = 20;
	context.fillStyle = bgColor;
	context.fillRect(x, y, width, height);
	if(collCount == 0)
	{
		context.fillStyle = "rgb(175,181,185)";
		context.fillRect(x + 4, y + 2, width - 52, height - 4);
		context.fillRect(x + 46, y + 2, width -52, height - 4);
		context.fillRect(x + 86, y + 2, width - 52, height - 4);
	}
	else if(collCount == 1)
	{
		context.fillStyle = "rgb(122,193,66)";
		context.fillRect(x + 4, y + 2, width - 52, height - 4);
		context.fillStyle = "rgb(175,181,185)";
		context.fillRect(x + 46, y + 2, width - 52, height - 4);
		context.fillRect(x + 86, y + 2, width - 52, height - 4);
	}
	else if(collCount == 2)
	{
		context.fillStyle = "rgb(122,193,66)";
		context.fillRect(x + 4, y + 2, width - 52, height - 4);
		context.fillRect(x + 46, y + 2, width - 52, height - 4);
		context.fillStyle = "rgb(175,181,185)";
		context.fillRect(x + 86, y + 2, width - 52, height - 4);
	}
	else if(collCount == 3)
	{
		context.fillStyle = "rgb(122,193,66)";
		context.fillRect(x + 4, y + 2, width - 52, height - 4);
		context.fillRect(x + 46, y + 2, width - 52, height - 4);
		context.fillRect(x + 86, y + 2, width - 52, height - 4);
	}
}

/**
 * 判断当前手指是否在fingerIdArray中，如果在，则说明此手指已经采集指纹
 * @author wenxin
 * @create 2013-05-15 16:26:31 pm
 * @param num 手指编号
 * @param fingerIdArray 存放手指编号的数组
 * @return 返回boolean值 true:num包含在fingerIdArray中；false:没有包含
 */
function isContains(fingerIdArray, num)
{
	var fingerId;
	var isCollected = false;
	for(var j=0; j<fingerIdArray.length; j++)
	{
		fingerId = eval(fingerIdArray[j]);
		if(fingerId >= DURESS_FINGER_NUM)
		{
			fingerId = fingerId -DURESS_FINGER_NUM;
		}
		if(fingerId == num)
		{
			isCollected = true;
		}
	}
	return isCollected;
}

/**
 * 清空指纹图像
 * @author wenxin
 * @create 2013-09-05 15:15:11 pm
 */
function clearFPImage(context, browserFlag)
{
	if(browserFlag == "verification")
	{
//		showImage(context, "${base}/base/images/base_fpVerify_clearImage.png", "clearForVerify");
	}
	else if(browserFlag == "register")
	{
		showImage(context, "image/base_fpVerify_clearImage.png", "clearForRegister");
	}
	else if(browserFlag == "verifyForSimple" || browserFlag == "registerForSimple")
	{
		showImage(null, "", "clearForSimple");
	}
}

/**
 * 获取指纹模板
 * @author wenxin
 * @create 2013-05-22 19:51:31 pm
 * @param paramArray 存放国际化元素的数组
 * @param flag 判断是登记和验证标记 register:登记；verification:验证
 */
function getFPTemplate(paramArray, flag)
{
	var fpTemplate = "";
	var collectSuccessFlag = false;
	$.ajax( {
		type : "GET",
		url : issOnlineUrl+"/fingerprint/getTemplate?random="+getRandomNum(),
		dataType : "json",
		async: false,
		success : function(result) 
		{
			//返回码
			var ret = null;
			ret = result.ret;
			if(ret == 0)
			{
				fpTemplate = result.data.template;
			}
			//成功
			if(ret == 0)
			{
				collectSuccessFlag = true;
				if(flag == "register")
				{
					//判断手指是否已经采集指纹
					var compareRet = "";
					//如果前面已经录入指纹
					if(templateDataArray.length > 0)
					{
						//发送请求，进行后台指纹比对yls
						//compareRet = fpComparision(fpTemplate, templateDataArray, paramArray[3]);
					}
					if($.trim(compareRet) == "dllNotExist")
					{
						//采集完指纹，渲染手指
						renderAfterColl(globalContext, fpIdNum, bgColor, false);//bgColor判断
						//显示框--采集提示
						collectTips(globalContext, "动态库加载失败", "html5");
					}
					else
					{
						if(compareRet == "noFingerServer")
						{
							//采集完指纹，渲染手指
							renderAfterColl(globalContext, fpIdNum, bgColor, false);//bgColor判断
							//显示框--采集提示
							collectTips(globalContext, "未启动比对服务", "html5");
						}
						else
						{
							//此手指未采集指纹
							if(compareRet != "ok")
							{
								//采集完指纹，渲染手指
								renderAfterColl(globalContext, fpIdNum, bgColor, true);//bgColor判断
								//显示框--采集提示
								collectTips(globalContext, paramArray[0], "html5");
								//胁迫指纹
								if(duressFingerFlag)
								{
									//将手指标记保存到数组中
									fingerIdArray[fingerIdArray.length] = fpIdNum + DURESS_FINGER_NUM;
								}
								else
								{
									//将手指标记保存到数组中
									fingerIdArray[fingerIdArray.length] = fpIdNum;
								}
								//将指纹模板保存到数组中
								templateDataArray[templateDataArray.length] = fpTemplate;
							}
							else
							{
								//采集完指纹，渲染手指
								renderAfterColl(globalContext, fpIdNum, bgColor, false);//bgColor判断
								//Please don't repeat input fingerprint!
								//显示框--采集提示
								collectTips(globalContext, paramArray[2], "html5");
							}
						}
					}
				}
				else if(flag == "verification")
				{
					verifyFlag = false;
					//指纹比对
					fpComparison(fpTemplate);
				}
			}
			else if(ret == -2003)
			{
				//采集完指纹，渲染手指
				renderAfterColl(globalContext, fpIdNum, bgColor, false);
				//显示框--采集提示
				collectTips(globalContext, paramArray[1], "html5");
			}
		},
		error : function(XMLHttpRequest, textStatus, errorThrown) 
		{
			alert(paramArray[3]);
			//messageBox({messageType: "alert", title: "${common_prompt_title}", text: paramArray[3]});
	    }
	});
	return collectSuccessFlag;
}

/**
 * 发送请求到后台，进行比对
 * @author wenxin
 * @create 2013-08-05 16:20:31 pm
 * @param fpTemplate 指纹模板
 * @param templateArray 指纹模板数组
 * @param errorMsg ajax请求报错，错误信息
 */
function fpComparision(fpTemplate, templateArray, errorMsg)
{
	var ret = "";
	var templates = templateArray.toString();
	//特殊字符转义
	fpTemplate = transferredMeaning(fpTemplate);
	templates = transferredMeaning(templates);
	$.ajax( {
		type : "POST",
		url : "baseBioVerifyAction!fpComparison.action",
		contentType : "application/x-www-form-urlencoded;charset=UTF-8",
		data : "verifyTemplate="+fpTemplate+"&templates="+templates,
		dataType : "json",
		async: false,
		success : function(result) 
		{
			if(result.ret == "ok")
			{
				ret = "ok";
			}
			if(result.msg == "noFingerServer")
			{
				ret = "noFingerServer";
			}
			if(result.msg == "dllNotExist")
			{
				ret = "dllNotExist";
			}
		},
		error : function(XMLHttpRequest, textStatus, errorThrown) 
		{
			alert("服务器处理数据失败，请重试！错误码：");
			//messageBox({messageType: "alert", title: "${common_prompt_title}", text: "${common_prompt_serverError}"});
	    }
	});
	return ret;
}

/**
 * 采集完指纹后渲染手指
 * @author wenxin
 * @create 2013-05-18 11:33:31 am
 * @param context 2d画布上下文
 * @param num 当前需要渲染的手指编号
 * @param fillColor 采集完后填充颜色
 * @param successOrNot 采集是否成功--布尔值 true:采集成功；false:采集失败
 */
function renderAfterColl(context, num, fillColor, successOrNot)
{
	var canvas="";
	if(isComp){
		canvas = document.getElementById("canvasComp");
	}else{
		canvas = document.getElementById("canvas");
	}
	var localContext = canvas.getContext("2d");
	var coordArray = new Array();
	//初始化起始坐标,并返回json格式数据 
	var coordJson = initCoordJson();
	//进来页面，点击删除
	if(num == null)
	{
		num = fpIdNum;
	}
	//点击的手指编号和json中num相等
	if(coordJson[num].num == num)
	{
		//初始化坐标数组和绘画手指
		initCoordAndDrawFinger(context, coordArray, coordJson[num].coord.x, coordJson[num].coord.y, num);
	}
	
	//采集成功，填充颜色(红、绿)
	if(successOrNot)
	{
		if(duressFingerFlag)
		{
			localContext.fillStyle = "red";//fillColor
			localContext.fill();
			fpModifyFlag = true;
		}
		else
		{
			localContext.fillStyle = "rgb(122,193,66)";//fillColor
			localContext.fill();
			fpModifyFlag = true;
		}
	}
	else
	{
		//采集失败，填充背景色--消除颜色(黄)
		localContext.fillStyle = fillColor;
		localContext.fill();
	}
}

/**
 * 初始化坐标数组和绘画手指--获取当前的context
 * @author wenxin
 * @create 2013-05-31 18:01:33 pm
 * @param context 2d画布上下文
 * @param pointArray 坐标点数组
 * @param x,y 绘画当前手指的起始坐标
 * @param num 手指标记
 */
function initCoordAndDrawFinger(context, coordArray, x, y, num)
{
	coordArray = initCoordArray(coordArray, x, y, num);
	new renderFinger(context, coordArray).drawFinger(strokeStyle, fingerBorderColor);
}

/**
 * 点击取消按钮时，触发事件
 * @author wenxin
 * @create 2013-05-15 17:21:13 pm
 * @param "${base_fp_save}":确认保存当前修改吗?
 */
function cancelEvent(saveText, fpCountText)
{
	if(!fpModifyFlag)
	{
		if(collectFlag)
		{
			//取消采集
			cancelRegister();
			//将定时器的递归调用关闭
			clearTimeout(timer);
		}
		//closeWindow();
		close();
	}
	else
	{
		var flag=confirm(saveText);
		if(flag){
			saveFPData(flag, fpCountText);
		}else{
			close();
		}
		
	}
	
}

/**
 * 点击取消按钮和关闭页面时，弹出框保存数据
 * cancelEvent()和submitRegister()函数中回调用到
 * @author wenxin
 * @create 2013-05-14 15:11:31 pm
 * @param result 弹出框选择确定还是取消 
 * @param fpCount 指纹数国际化内容
 * @param ${pers_person_templateCount}:指纹数
 */
var saveFPData = function(result, fpCount)
{
	if(collectFlag)
	{
		//取消采集
		cancelRegister();
		//将定时器的递归调用关闭
		clearTimeout(timer);
	}
	if(result)
	{
		storeDataToHtml();
		showFPCount(fpCount);
		//closeWindow();
		close();
	}
	else
	{
		clearImageData();
		//closeWindow();
		close();
	}
}

/**
 * 判断指纹数量--页面加载时，没有计算。只是在采集完指纹后计算指纹数量
 * @author wenxin
 * @create 2013-04-22 21:26:31 pm
 */
function showFPCount(text)
{
	var fingerId = $("#fingerId").val();
	if($.trim(fingerId) == "")
	{
		$("#fpCountMessage").text(text + " " + 0);
	}
	else
	{
		fingerId = fingerId.substr(1, fingerId.length - 2);
		var fingerIdArray = new Array();
		fingerIdArray = fingerId.split(",");
		$("#fpCountMessage").text(text + " " + fingerIdArray.length);
	}
}

/**
 * 将指纹数据保存到页面
 * @author wenxin
 * @create 2013-05-24 16:12:21 pm
 */
function storeDataToHtml()
{
	//没有手指标记数据
	if(fingerIdArray.length == 0)
	{
		$("#fingerId").val(" ");
	}
	else
	{
		//将手指标记数据保存到页面
		$("#fingerId").val("["+fingerIdArray.toString()+"]");
	}
	//没有指纹模板数据
	if(templateDataArray.length == 0)
	{
		$("#fingerTemplate10").val(" ");
	}
	else
	{
		//将指纹模板数据保存到页面
		$("#fingerTemplate10").val("["+templateDataArray.toString()+"]");
	}
}

//关闭窗体
function close(){
	$("#bg").css("display", "none");
	$("#box").css("display", "none");
	$("#comparisonDiv").css("display", "none");
	globalContext="";
}

/**
 * 点击已经采集指纹的手指时，弹出框删除数据
 * 删除时的回调函数
 * @author wenxin
 * @create 2013-05-14 17:12:21 pm
 * @param result 弹出框选择确定还是取消 
 * @param context 2d画布上下文
 * @param browserFlag 浏览器标记 simple:简易版本，表示是ie浏览器；html5:表示支持html5的浏览器
 */
var delFPData = function(result, context, browserFlag)
{
	var fingerId;
	if(result)
	{
		//将数组中的指定元素删除
		for(var i=0; i<fingerIdArray.length; i++)
		{
			fingerId = eval(fingerIdArray[i]);
			if(fingerId >= DURESS_FINGER_NUM)
			{
				fingerId = fingerId - DURESS_FINGER_NUM;
				if(fingerId == fpIdNum)
				{
					//fingerIdArray.remove(i);
					//templateDataArray.remove(i);
					removeItem(fingerIdArray, i);
					removeItem(templateDataArray, i);
				}
			}
			else
			{
				if(fingerId == fpIdNum)
				{
					//fingerIdArray.remove(i);
					//templateDataArray.remove(i);
					removeItem(fingerIdArray, i);
					removeItem(templateDataArray, i);
				}
			}
		}
		if(browserFlag == "simple")
		{
			document.getElementById("finger" + fingerId).checked = false;
		}
		else if(browserFlag == "html5")
		{
			//将手指颜色改变--重画时也要判断
			context.fillStyle = bgColor;
			context.fill();
			if(lastFPIdNum != null && lastFPIdNum != lastFPIdNum)
			{
				//消除原来手指的颜色
				renderAfterColl(globalContext, lastFPIdNum, bgColor, false);
			}
			//消除需要删除的手指颜色
			renderAfterColl(globalContext, fpIdNum, bgColor, false);
		}
		fpModifyFlag = true;
		$("#duressFinger").attr("disabled", false);
		$("#submitButtonId").attr("disabled", false);
	}
	else
	{
		if(browserFlag == "simple")
		{
			document.getElementById("finger" + fpIdNum).checked = true
			collectFlag = true;
		}
		else if(browserFlag == "html5")
		{
			//消除原来手指的颜色--有问题，如果原来手指和现在的一样，有问题
			//renderAfterColl(globalContext, lastFPIdNum, bgColor, false);
		}
	}
}

/**
 * 删除数组元素 -- 从dx下标开始，删除一个元素
 * @author wenxin
 * @create 2013-05-15 11:11:31 am
 * @param dx 要删除元素的下标
 */
function removeItem(array, dx)
{  
   array.splice(dx, 1);
}

/**
 * 指纹验证
 * @author wenxin
 * @create 2013-06-21 11:09:20 am
 * @param title 页面标题国际化内容
 * @param isDriverInstall 是否安装了驱动
 * @param downloadPrompt 提示安装驱动国际化内容
 */
function fpVerification(title, downloadPrompt, isDriverInstall,context)
{
	//安装驱动
	if(isDriverInstall)
	{
		//支持html5
		if(typeof(Worker) != "undefined")
		{
			//createWindow('base_baseFPVerify.do?random=' + getRandomNum() + '^0^0^465^320^'+title);
			var comparisonDiv=document.getElementById("comparisonDiv");
		    var bg=document.getElementById("bg");
		    comparisonDiv.style.display="block";//显示内容层，显示覆盖层
		    comparisonDiv.style.left=parseInt((document.documentElement.scrollWidth-comparisonDiv.offsetWidth)/2)+document.documentElement.scrollLeft+"px";
		    comparisonDiv.style.top=Math.abs(parseInt((document.documentElement.clientHeight-comparisonDiv.offsetHeight)/2))+document.documentElement.scrollTop+"px"; //为内容层设置位置
		 	bg.style.display="block";
		 	bg.style.height=document.documentElement.scrollHeight+"px"; 
		 	isComp= true;
		 	//开始采集
		 	//beginCapture(context);
		 	dataInitComp();
		    //关闭页面前，取消采集
			//cancelCaptureBeforeClose("html5");
		}
		else
		{
			createWindow('base_baseFPVerifySimple.do?random=' + getRandomNum() + '^0^0^465^320^' + title);
		    //关闭页面前，取消采集
			//cancelCaptureBeforeClose("simple");
		}
	}
	else
	{
		alert(downloadPrompt);
		//messageBox({messageType: "alert", title: "提示", text: downloadPrompt});
	}
}

/**
 * 画布文本自动换行
 * @author chenpf
 * @create 2015-03-10 16:56:31 pm
 * @param context 2d画布上下文
 * @param text  显示信息内容
 * @param CWidth 画布宽度
 * @param x 文本X坐标值
 * 
 */
function autoWordBreak(context,text,CWidth,x){
	context.clear();
	var rownum = CWidth / 10;
	var len = strlen(text);
	if (rownum > len)
	{
		context.fillText(text, x, 30);
	}
	else
	{
		var endInd = rownum<text.length?rownum:text.length;
		var beginInd = 0;
		var endTemp=0;
		for (var i = 0; i <= text.length / rownum; i++)
		{
			endTemp = text.substr(beginInd, endInd).lastIndexOf(" ");
			if(endTemp!=-1)
				endInd=beginInd+endTemp;
			context.fillText(text.substr(beginInd, endInd), x, (i + 1) * 30);
			beginInd = endInd+1;
			if(beginInd>=text.length)
				break;
			endInd = beginInd + rownum;
		}
	}
}


//清除画布内容
CanvasRenderingContext2D.prototype.clear =
	  CanvasRenderingContext2D.prototype.clear || function (preserveTransform) {
	    if (preserveTransform) {
	      this.save();
	      this.setTransform(1, 0, 0, 1, 0, 0);
	    }
	 
	    this.clearRect(0, 0, this.canvas.width, this.canvas.height);
	 
	    if (preserveTransform) {
	      this.restore();
	    }          
	};
	
	/**
	 * 关闭页面前，如果正在进行验证，则先取消采集
	 * @author wenxin
	 * @create 2013-06-24 19:57:11 pm
	 * @param browserFlag 浏览器标记 simple:简易版本，表示是ie浏览器；html5:表示支持html5的浏览器
	 */
	function cancelCaptureBeforeClose(browserFlag)
	{
		 //关闭页面时，监听关闭的onclick事件
		getCurrentWindow().button("close").attachEvent("onClick", function()
		{
			clearTimeout(verifyTimer);
			if(browserFlag == "html5")
			{
				//正在进行验证，还没有关闭指纹采集
				if(verifyFlag)
				{
					//取消采集
					cancelCapture();
				}
				//关闭页面
				closeWindow();
			}
			else if(browserFlag == "simple")
			{
				//alert("cancel capture before close window!");
				//将定时器的递归调用关闭
				clearTimeout(timer);
				//取消采集 
				cancelRegister();
				//此处应该在取消结束后，再关闭窗口
				closeWindow();
			}
		});
	}
	
	/**
	 * 表单提交
	 * @author wenxin
	 * @create 2013-08-05 15:19:11 pm
	 */
	function formSubmit(id)
	{
		
		$('#'+id).serialize();
		$('#'+id).ajaxForm(function(data){
			callBackFormSubmit(data);
		});
		$('#'+id).submit(); //表单提交。
	}