var status;
var browserIE = (navigator.userAgent.indexOf("MSIE") != -1);

function makeStringParam(a) {
	var str = new String();
	var len;
	len = a.length;
	str = "";
	for (i =0; i < len; i++) {
		str1 = Number(a[i]).toString(16);
		if (str1.length == 1) str = str + "0";
		str = str + str1;
	}
	return str;
}

function createResponseArray(r) {
	var len;
	var i;
	var a;
	if (browserIE)
		len = r.length;
	else
		len = r.length();
	len = len/2;
	a = new Array(len);
	for (i=0; i<len; i++) {
		str = String(r).substring(i*2,(i+1)*2);
		a[i] = parseInt(str, 16);
	}  
	return a;
}

function openSession() {
	var response;
	var atr;
	var error;
	var len = 0;
	window.status="Open Session";
	if (document.applets[0].libraryLoaded() == false) {
//		alert("Libreria non caricata");
		return false;
	}
	response = document.applets[0].connect();
	if (response != null) {
		if (browserIE) 
			len = response.length;
		else
			len = response.length();
	}
	if (len == 0) {
//		error = document.applets[0].getError();
//	    alert("ERROR: atr " + error);
		return false;
  } else {
		atr = response;
//		atr = createResponseArray(response);
		return atr;
	}
}

function callAPDU(buffer) 
{
  var response;
  var error;
	var sendBuffer;
	if (document.applets[0].libraryLoaded() == false) {
//		alert("Libreria non caricata");
		return 0;
	}
  response = document.applets[0].callAPDU(buffer);
  if (response < 0) {
		error = document.applets[0].getError();
		alert ("ERROR " + error);
		status  = document.applets[0].getStatus();
		alert("Status : " + status.toString());
    return false;
  } else {
		status = document.applets[0].getStatus();
		if (status == -1) {
			alert ("Errore nella lettura dello stato");
			response = false;
		} else {
			response = true;
		}
	}
	return response;
}

function getResponse() 
{
  var response = false;
  var error;
	var len;
	var recvBuffer;
	if (document.applets[0].libraryLoaded() == false) {
//		alert("Libreria non caricata");
		return 0;
	}
	recvBuffer = document.applets[0].getResponse();
	if (recvBuffer != null) {
		if (browserIE) {
			len = recvBuffer.length;
		} else {
			len = recvBuffer.length();
		}
	} else 
		len = 0;
	if (len > 0) {
		response = createResponseArray(recvBuffer);
	}
	return response;
}

function closeSession() 
{
	var response = false;
	var error;
	window.status="Close Session";
	if (document.applets[0].libraryLoaded() == true) {
		response = document.applets[0].disconnect();
//		if (response != 0) {
//			error = document.applets[0].getError();
//			alert("ERROR: disconnect " + error);
//		} else {
//			response = true;
//		}
	}
	return response;
}

function readCode(hk) {
	var response;
	var sendBuffer;
	var atr;
	var response1=new Array();
	var response2=new Array();
	var mom='';
	window.status="ReadCode";
	sendBuffer = '80a40000023A01';
	if (callAPDU(sendBuffer)) {
		sendBuffer = '80a40000022A02';
		if (callAPDU(sendBuffer)) {
			sendBuffer = '80b0000020';
			if (callAPDU(sendBuffer)) {
				var recvBuffer = getResponse();
				if (recvBuffer != false) {
					var vuoto=true;
					for (var i=0;i<15;i++){
					  response1[i]=recvBuffer[i];
					  if(recvBuffer[i]!=0) vuoto=false;
					}
					for (var i=17;i<32;i++){
					  response2[i-17]=recvBuffer[i];
					  if(recvBuffer[i]!=0) vuoto=false;
					}
					if (!vuoto){
						mom = response1.join('.');
						mom = mom + hk + response2.join('.');
						mom = mom + hk;
					}
					return mom;
				}
			}
		} 
	}
}

function writeCode(p1, p2) {
	var response;
	var sendBuffer;
	var atr;
	window.status="WriteCode";
	sendBuffer = '80a40000023A01';
	if (callAPDU(sendBuffer)) {
		sendBuffer = '80a40000022A02';
		if (callAPDU(sendBuffer)) {
			sendBuffer = '80d6000020';
			sendBuffer+=p1;
			sendBuffer+='0000';
			sendBuffer+=p2;
			return callAPDU(sendBuffer);
		}
	}
}

