//SigWebTablet JavaScript File for SigWeb
//
//Version - 1.0.4.0
//
//Last updated by Topaz Systems Inc. - 1/5/2021
//

var getBlobURL = (window.URL && URL.createObjectURL.bind(URL)) || (window.webkitURL && webkitURL.createObjectURL.bind(webkitURL)) || window.createObjectURL;
var revokeBlobURL = (window.URL && URL.revokeObjectURL.bind(URL)) || (window.webkitURL && webkitURL.revokeObjectURL.bind(webkitURL)) || window.revokeObjectURL;

var baseUri = makeUri();
var	ctx;

function IsSigWebInstalled(){
	var xhr = new XMLHttpRequest();
	try{
		xhr.onreadystatechange = function() {
			if (xhr.readyState == 4 && xhr.status == 0) {
				console.log("Unknown Error Occured. SigWeb Service response not received.");
				return false;
			}
		};
		xhr.open("GET", baseUri+"TabletState"+"?noCache="+generateUUID(), false);
		xhr.send();
	}catch(e){
		console.log('catch', e);
	}

	return (xhr.status != 404 && xhr.status != 0);
}

function isIE() {

	return ((navigator.appName == 'Microsoft Internet Explorer') || ((navigator.appName == 'Netscape') && (new RegExp("Trident/.*rv:([0-9]{1,}[\.0-9]{0,})").exec
	(navigator.userAgent) != null)));
}

function isChrome() {
	var ua = navigator.userAgent;
	var chrome = false;

	//Javascript Browser Detection - Chrome
	if (ua.lastIndexOf('Chrome/') > 0) {
		//var version = ua.substr(ua.lastIndexOf('Chrome/') + 7, 2);
		return true;
	}
	else {
		return false;
	}
}

function makeUri() {
	var prot = location.protocol;
	if(prot == "file:")
	{
		prot = 'http:';
	}

	if (isIE()) {
		if (prot == 'https:') {
			return (prot + "//tablet.sigwebtablet.com:47290/SigWeb/");
		}
		else {
			return (prot + "//tablet.sigwebtablet.com:47289/SigWeb/");
		}
	}

	if (isChrome()) {
		if (prot == 'https:') {
			return (prot + "//tablet.sigwebtablet.com:47290/SigWeb/");
		}
		else {
			return (prot + "//tablet.sigwebtablet.com:47289/SigWeb/");
		}
	}

	else {
		//FIREFOX
		if (prot == 'https:') {
			return (prot + "//tablet.sigwebtablet.com:47290/SigWeb/");
		}
		else {
			return (prot + "//tablet.sigwebtablet.com:47289/SigWeb/");
		}
	}
}

function SigWebcreateXHR() {
	try { return new XMLHttpRequest(); } catch (e) { }
	try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); } catch (e) { }
	try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); } catch (e) { }
	try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { }
	try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { }

	alert("XMLHttpRequest not supported");
	return null;
}

var Count = false;



function SigWebSetProperty(prop) {
	var xhr = SigWebcreateXHR();

	if (xhr) {
		xhr.open("POST", baseUri + prop, true);
		xhr.send(null);
		if (xhr.readyState == 4 && xhr.status == 200) {
			return xhr.responseText;
		}
	}
	return "";
}

function SigWebSetPropertySync(prop) {
	var xhr = SigWebcreateXHR();

	if (xhr) {
		xhr.open("POST", baseUri + prop, false);
		xhr.send();
		if (xhr.readyState == 4 && xhr.status == 200) {
			return xhr.responseText;
		}
	}
	return "";
}

function SigWebSetStreamProperty(prop, strm) {
	var xhr = SigWebcreateXHR();

	if (xhr) {
		xhr.open("POST", baseUri + prop );
		xhr.setRequestHeader("Content-Type", "text/plain");
		xhr.send(strm);
		//			if (xhr.readyState == 4 && xhr.status == 200) {
		//				return xhr.responseText;
		//			}
	}
	return "";
}

function SigWebSyncSetStreamProperty(prop, strm) {
	var xhr = SigWebcreateXHR();

	if (xhr) {
		xhr.open("POST", baseUri + prop , false);
		xhr.setRequestHeader("Content-Type", "text/plain");
		xhr.send(strm);
		if (xhr.readyState == 4 && xhr.status == 200) {
			return xhr.responseText;
		}
	}
	return "";
}

function SigWebSetImageStreamProperty(prop, strm) {
	var xhr = SigWebcreateXHR();

	if (xhr) {
		xhr.open("POST", baseUri + prop, false);
		xhr.setRequestHeader("Content-Type", "image/png");
		xhr.send(strm);
		if (xhr.readyState == 4 && xhr.status == 200) {
			return xhr.responseText;
		}
	}
	return "";
}

function SigWebSetImageBlobProperty(prop, strm) {
	var xhr = SigWebcreateXHR();

	//			var bb = new BlobBuilder();
	//			bb.append( strm );
	//			bb.append( "\0" );
	//			var blob = bb.getBlob( );

	if (xhr) {
		xhr.open("POST", baseUri + prop, false);
		xhr.setRequestHeader("Content-Type", "blob");
		xhr.send(strm);
		if (xhr.readyState == 4 && xhr.status == 200) {
			return xhr.responseText;
		}
	}
	return "";
}

function SigWebGetProperty(prop) {
	var xhr = SigWebcreateXHR();

	if (xhr) {
		xhr.open("GET", baseUri + prop + "?noCache=" + generateUUID(), false );
		xhr.send(null);
		if (xhr.readyState == 4 && xhr.status == 200) {
			return xhr.responseText;
		}
	}
	return "";
}



var SigImageB64;


//	function GetSigImageB64(callback)
//		{
//		var cvs = document.createElement('canvas');
//		cvs.width = GetImageXSize();
//		cvs.height = GetImageYSize();
//
//		var xhr2 = new XMLHttpRequest();
//		xhr2.open("GET", baseUri + "SigImage/1", false);
//		xhr2.responseType = "blob";
//		xhr2.send(null);
//		if (xhr2.readyState == 4 && xhr.status == 200)
//			{
//			var cntx = cvs.getContext('2d');
//			var img = new Image();
//			img.src = window.URL.createObjectURL(xhr2.response);
//			img.onload = function ()
//				{
//				cntx.drawImage(img, 0, 0);
//				var b64String = cvs.toDataURL("image/png");
//				var loc = b64String.search("base64,");
//				var retstring = b64String.slice(loc + 7, b64String.length);
//				if (callback)
//					{
//					callback(retstring);
//					}
//				}
//			}
//		}


function GetSigImageB64(callback )
{
	var cvs = document.createElement('canvas');
	cvs.width = GetImageXSize();
	cvs.height = GetImageYSize();

	var xhr2 = new XMLHttpRequest();
	xhr2.open("GET", baseUri + "SigImage/1"  + "?noCache=" + generateUUID(), true);
	xhr2.responseType = "blob";
	xhr2.send(null);
	xhr2.onload = function ()
	{
		var cntx = cvs.getContext('2d');
		var img = new Image();
		//			img.src = window.URL.createObjectURL(xhr2.response);
		img.src = getBlobURL(xhr2.response);
		img.onload = function ()
		{
			cntx.drawImage(img, 0, 0);
			var b64String = cvs.toDataURL("image/png");
			var loc = b64String.search("base64,");
			var retstring = b64String.slice(loc + 7, b64String.length);
			if (callback)
			{
				callback(retstring);
			}
		}
	}
}




function SigWebWaitForPenDown(callback) {
	var xhr = SigWebcreateXHR();

	if (xhr) {
		xhr.open("GET", baseUri + "WaitForPenDown" + "?noCache=" + generateUUID());
		xhr.timeout = 10000;
		xhr.onreadystatechange = function () {
			if (xhr.readyState != 4)
			return;
			if (xhr.status == 200)
			callback();
		}
		xhr.send(null);
	}
}


function GetSigImage(ctx) {
	var xhr2 = new XMLHttpRequest();
	xhr2.open("GET", baseUri + "SigImage/1" + "?noCache=" + generateUUID(), true);
	xhr2.responseType = "blob";
	xhr2.send(null);
	xhr2.onload = function () {
		var img = new Image();
		img.src = getBlobURL(xhr2.response);
		img.onload = function () {
			ctx.drawImage(img, 0, 0);
			revokeBlobURL(this.src);
			img = null;
		}
	}
}

var EvStatus;
var onSigPenDown;
var onSigPenUp;

function SigWebSetDisplayTarget(obj) {
	ctx = obj;
}




var		NumPointsLastTime = 0;

function SigWebRefresh() {
	var NumPoints = NumberOfTabletPoints();
	if ( NumPoints == NumPointsLastTime )
	{
		return;
	}
	NumPointsLastTime = NumPoints;

	var xhr2 = new XMLHttpRequest();
	xhr2.open("GET", baseUri + "SigImage/0" + "?noCache=" + generateUUID(), true);
	xhr2.responseType = "blob"
	xhr2.onload = function () {
		var img = new Image();
		img.src = getBlobURL(xhr2.response);
		//				img.src = window.URL.createObjectURL(xhr2.response);
		img.onload = function () {
			ctx.drawImage(img, 0, 0);
			revokeBlobURL(this.src);
			img = null;
		}
	}
	xhr2.send(null);
}


function SigWebEvent() {
	var OldEvStatus = EvStatus;

	var xhr = SigWebcreateXHR();

	if (xhr) {
		xhr.open("GET", baseUri + "EventStatus" + "?noCache=" + generateUUID(), true);
		xhr.onload = function () {
			EvStatus = xhr.responseText
			if ((OldEvStatus & 0x01) && (EvStatus & 0x02)) {
				if (onSigPenDown) {
					onSigPenDown();
				}
			}

			if ((OldEvStatus & 0x02) && (EvStatus & 0x01)) {
				if (onSigPenUp) {
					onSigPenUp();
				}
			}
		}
		xhr.send(null);
	}
}

function generateUUID() {
	var d = new Date().getTime();
	if (typeof performance !== 'undefined' && typeof performance.now === 'function'){
		d += performance.now(); //use high-precision timer if available
	}
	return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
		var r = (d + Math.random() * 16) % 16 | 0;
		d = Math.floor(d / 16);
		return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);
	});
}


var SigWebFontThreshold = 155;

function setSigWebFontThreshold(v) {
	SigWebFontThreshold = v;
}



function createLcdBitmapFromCanvas(ourCanvas, xp, yp, width, height) {
	var canvasCtx = ourCanvas.getContext('2d');
	var imgData = canvasCtx.getImageData(0, 0, width, height);
	var j = 0;
	var sVal = 0;
	var outData = "";
	var outIdx = 0;
	var data = imgData.data;

	for (var y = 0; y < height; y++)
	for (var x = 0; x < width; x++) {
		var tmp1 = data[j];
		var tmp2 = data[j + 1];
		var tmp3 = data[j + 2];
		var tmp4 = data[j + 3];

		//					sVal = tmp1 + (tmp2 << 8 ) + ( tmp3 << 16 ) + (tmp4 << 24 );
		j = j + 4;
		if (tmp1 < SigWebFontThreshold) {
			outData += "B";
		}
		else {
			outData += "W";
		}
	}

	return outData;
}


function toHex(NibVal) {
	switch (NibVal) {
		case 0:
		return "0";
		case 1:
		return "1";
		case 2:
		return "2";
		case 3:
		return "3";
		case 4:
		return "4";
		case 5:
		return "5";
		case 6:
		return "6";
		case 7:
		return "7";
		case 8:
		return "8";
		case 9:
		return "9";
		case 10:
		return "A";
		case 11:
		return "B";
		case 12:
		return "C";
		case 13:
		return "D";
		case 14:
		return "E";
		case 15:
		return "F";
	}
}

function ToHexString(ByteVal) {
	var Str = "";
	Str += toHex((ByteVal >> 4) & 0x0f);
	Str += toHex(ByteVal & 0x0F);
	return Str
}





function textToTablet(x, y, height, str, fnt) {
	var c = document.createElement('canvas');
	var cntx = c.getContext('2d');
	cntx.font = fnt;
	var txt = str;
	var xs = Math.round(cntx.measureText(txt).width);
	var ys = height;
	c.width = xs;
	c.height = ys;

	cntx.font = fnt;
	cntx.fillStyle = '#FFFFFF'
	cntx.rect(0, 0, xs, ys);
	cntx.fill();


	cntx.fillStyle = '#000000'
	cntx.textBaseline = "top";
	cntx.fillText(txt, 0, 0);

	cntx.drawImage(cntx.canvas, 0, 0, xs, ys);

	var Gstr = createLcdBitmapFromCanvas(c, 0, 0, xs, ys)

	LcdWriteImageStream(0, 2, x, y, xs, ys, Gstr);
}

function LcdWriteImage(Dst, Mode, Xp, Yp, Url) {
	var Prop = "LcdWriteImage/";
	var NewUrl = Url.replace(/\//g, "_");

		Prop = Prop + Dst + "," + Mode + "," + Xp + "," + Yp + "," + NewUrl;
		SigWebSetPropertySync(Prop);
	}

	function LcdWriteLocalImage(Dst, Mode, Xp, Yp, Url) {
		var Prop = "LcdWriteImage/";

		Prop = Prop + Dst + "," + Mode + "," + Xp + "," + Yp + "," + Url;
		SigWebSetProperty(Prop);
	}

	function LcdWriteImageStream(Dst, Mode, Xp, Yp, Xs, Ys, Url) {
		var Prop1 = "LcdWriteImageStreamParams/" + Dst + "," + Mode + "," + Xp + "," + Yp + "," + Xs + "," + Ys;
		var Prop2 = "LcdWriteImageStream/";

		SigWebSetPropertySync(Prop1);
		SigWebSetImageStreamProperty(Prop2, Url);
	}

	function LcdWriteImageBlob(Dst, Mode, Xp, Yp, Xs, Ys, Url) {
		var Prop = "LcdWriteImageStream/";

		Prop = Prop + Dst + "," + Mode + "," + Xp + "," + Yp + "," + Xs + "," + Ys;
		SigWebSetImageBlobProperty(Prop, Url);
	}



	function measureText(pText, pFontSize, pStyle) {
		var lDiv = document.createElement('lDiv');

		document.body.appendChild(lDiv);

		if (pStyle != null) {
			lDiv.style = pStyle;
		}
		lDiv.style.fontSize = "" + pFontSize + "px";
		lDiv.style.position = "absolute";
		lDiv.style.left = -1000;
		lDiv.style.top = -1000;

		lDiv.innerHTML = pText;

		var lResult =
		{
			width: lDiv.clientWidth,
			height: lDiv.clientHeight
		};

		document.body.removeChild(lDiv);
		lDiv = null;

		return lResult;
	}

	function GetSigWebVersion(){
		var prop = "SigWebVersion";

		var xhr = SigWebcreateXHR();

		if (xhr) {
			xhr.open("GET", baseUri + prop + "?noCache=" + generateUUID(), false );
			xhr.send(null);
			if (xhr.readyState == 4 && xhr.status == 200) {
				return xhr.responseText.slice(1, xhr.responseText.length - 1);
			} else{
				return "1.5"; //the currentversion of the SigWeb service is not installed
			}
		}
		return "";
	}

	//
	//
	//
	//
	//
	//
	//			Start of dll method wrappers
	//
	//
	//			SigPlusNET.cs
	//
	function GetVersionString() {
		var Prop = "Version";

		Prop = Prop;
		var Str = SigWebGetProperty(Prop);
		var trimStr = Str.slice(1, Str.length - 2);
		return trimStr;
	}


	function IsPenDown() {
		return EvStatus & 0x01;
	}

	function GetDaysUntilCertificateExpires() {
		var Prop = "DaysUntilCertificateExpires";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	//
	//			SigPlusNETSig.cs
	//
	function ClearTablet() {
		var Prop = "ClearSignature";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function NumberOfTabletPoints() {
		var Prop = "TotalPoints";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	//		function  ExportSigFile(  FileName ) {}
	//		function  ImportSigFile(  FileName ) {}

	function SetSigString(sigStr, ctx)
	{
		var Prop = "SigString";

		Prop = Prop;
		var xhr = SigWebcreateXHR();

		if (xhr)
		{
			xhr.open("POST", baseUri + Prop );
			xhr.setRequestHeader("Content-Type", "text/plain");
			xhr.send(sigStr);
			xhr.onload = function ()
			{
				if (ctx)
				{
					var can = ctx.canvas;
					SetImageXSize( can.width );
					SetImageYSize( can.height );
					GetSigImage(ctx);
				}
			}
		}
		return "";
	}



	function GetSigString() {
		var Prop = "SigString";

		Prop = Prop;
		var Str = SigWebGetProperty(Prop);

		return Str.slice(1, Str.length - 1);
	}



	function SetSigCompressionMode(v) {
		var Prop = "CompressionMode/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}


	function GetSigCompressionMode() {
		var Prop = "CompressionMode";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}


	function SetEncryptionMode(v) {
		var Prop = "EncryptionMode/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}


	function GetEncryptionMode() {
		var Prop = "EncryptionMode";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	//		function  SetKey( Keydata ) {}
	//		function  GetKey( ) {}

	function SetKeyString(keyString) {
		var Prop = "KeyString";

		Prop = Prop;
		SigWebSetStreamProperty(Prop, keyString);
	}


	function GetKeyString() {
		var Prop = "KeyString";

		Prop = Prop;
		var Str = SigWebGetProperty(Prop);

		return Str.slice(1, Str.length - 1);
	}



	function AutoKeyStart() {
		var Prop = "AutoKeyStart";

		Prop = Prop;
		SigWebSetPropertySync(Prop);
	}


	function AutoKeyFinish() {
		var Prop = "AutoKeyFinish";

		Prop = Prop;
		SigWebSetPropertySync(Prop);
	}

	function SetAutoKeyData(keyData) {
		var Prop = "SetAutoKeyData";

		Prop = Prop;
		SigWebSetStreamProperty(Prop, keyData);
	}


	function AutoKeyAddData(keyData) {
		var Prop = "AutoKeyAddData";

		Prop = Prop;
		SigWebSetStreamProperty(Prop, keyData);
		return GetKeyString();
	}

	function AutoKeyAddANSIData(keyData) {
		var Prop = "AutoKeyAddANSIData";

		Prop = Prop;
		var isASCII = SigWebSyncSetStreamProperty(Prop, keyData);
		return isASCII;
	}

	//		function  GetKeyReceipt( ) {}

	function GetKeyReceiptAscii() {
		var Prop = "KeyReceiptAscii";

		Prop = Prop;
		var Str = SigWebGetProperty(Prop);

		return Str.slice(1, Str.length - 1);
	}


	//		function  GetSigReceipt( ) {}

	function GetSigReceiptAscii() {
		var Prop = "SigReceiptAscii";

		Prop = Prop;
		var Str = SigWebGetProperty(Prop);

		return Str.slice(1, Str.length - 1);
	}


	function SetTimeStamp(timeStamp) {
		var Prop = "TimeStamp";

		Prop = Prop;
		SigWebSetStreamProperty(Prop, timeStamp);
	}

	function GetTimeStamp() {
		var Prop = "TimeStamp";

		Prop = Prop;
		var Str = SigWebGetProperty(Prop);

		return Str.slice(1, Str.length - 1);
	}

	function SetAnnotate(annotate) {
		var Prop = "Annotate";

		Prop = Prop;
		SigWebSetStreamProperty(Prop, annotate);
	}


	function GetAnnotate() {
		var Prop = "Annotate";

		Prop = Prop;
		var Str = SigWebGetProperty(Prop);

		return Str.slice(1, Str.length - 1);
	}


	function SetSaveSigInfo(v) {
		var Prop = "SaveSigInfo/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetSaveSigInfo() {
		var Prop = "SaveSigInfo";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function SetSavePressureData(v) {
		var Prop = "SavePressureData/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetSavePressureData() {
		var Prop = "SavePressureData";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function SetSaveTimeData(v) {
		var Prop = "SaveTimeData/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetSaveTimeData() {
		var Prop = "SaveTimeData";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function SetAntiAliasSpotSize(v) {
		var Prop = "AntiAliasSpotSize/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetAntiAliasSpotSize() {
		var Prop = "AntiAliasSpotSize";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function SetAntiAliasLineScale(v) {
		var Prop = "AntiAliasLineScale/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetAntiAliasLineScale() {
		var Prop = "AntiAliasLineScale";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function GetNumberOfStrokes() {
		var Prop = "NumberOfStrokes";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function GetNumPointsForStroke(v) {
		var Prop = "NumberOfPointsInStroke/";

		Prop = Prop + v;
		return SigWebGetProperty(Prop);
	}

	function GetPointXValue(v1, v2) {
		var Prop = "PointXValue/";

		Prop = Prop + v1 + "/" + v2;
		return SigWebGetProperty(Prop);
	}

	function GetPointYValue(v1, v2) {
		var Prop = "PointYValue/";

		Prop = Prop + v1 + "/" + v2;
		return SigWebGetProperty(Prop);
	}


	function SetAntiAliasEnable(v) {
		var Prop = "AntiAliasEnable/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetAntiAliasEnable() {
		var Prop = "AntiAliasEnable";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function SetUseAmbientColors(v) {
		var Prop = "UseAmbientColors/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	//
	//		SigPlusNETDisplay.cs
	//
	function SetDisplayXSize(v) {
		var Prop = "DisplayXSize/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetDisplayXSize() {
		var Prop = "DisplayXSize";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function SetDisplayYSize(v) {
		var Prop = "DisplayYSize/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetDisplayYSize() {
		var Prop = "DisplayYSize";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}
	function SetDisplayPenWidth(v) {
		var Prop = "DisplayPenWidth/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}


	function GetDisplayPenWidth() {
		var Prop = "DisplayPenWidth";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function SetDisplayTimeStamp(v) {
		var Prop = "DisplayTimeStamp/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetDisplayTimeStamp() {
		var Prop = "DisplayTimeStamp";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function SetDisplayTimeStampPosX(v) {
		var Prop = "DisplayTimeStampPosX/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetDisplayTimeStampPosX() {
		var Prop = "DisplayTimeStampPosX";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function SetDisplayTimeStampPosY(v) {
		var Prop = "DisplayTimeStampPosY/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetDisplayTimeStampPosY() {
		var Prop = "DisplayTimeStampPosY";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function SetDisplayTimeStampSize(v) {
		var Prop = "DisplayTimeStampSize/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetDisplayTimeStampSize() {
		var Prop = "DisplayTimeStampSize";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function SetDisplayAnnotate(v) {
		var Prop = "DisplayAnnotate/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetDisplayAnnotate() {
		var Prop = "DisplayAnnotate";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function SetDisplayAnnotatePosX(v) {
		var Prop = "DisplayAnnotatePosX/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetDisplayAnnotatePosX() {
		var Prop = "DisplayAnnotatePosX";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function SetDisplayAnnotatePosY(v) {
		var Prop = "DisplayAnnotatePosY/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetDisplayAnnotatePosY() {
		var Prop = "DisplayAnnotatePosY";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function SetDisplayAnnotateSize(v) {
		var Prop = "DisplayAnnotateSize/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetDisplayAnnotateSize() {
		var Prop = "DisplayAnnotateSize";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	//
	//		SigPlusNETImage.cs
	//
	//		function  GetSigImageB64( )
	//			{
	//			var xhr2 = new XMLHttpRequest();
	//			xhr2.open("GET", baseUri + "SigImage/1", false );
	//			xhr2.responseType = "blob"
	//			xhr2.send(null);
	//			if (xhr2.readyState == 4 && xhr.status == 200)
	//				{
	//				return window.URL.createObjectURL(xhr2.response);
	//				}
	//			return null;
	//			}

	function SetImageXSize(v) {
		var Prop = "ImageXSize/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetImageXSize() {
		var Prop = "ImageXSize";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function SetImageYSize(v) {
		var Prop = "ImageYSize/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetImageYSize() {
		var Prop = "ImageYSize";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function SetImagePenWidth(v) {
		var Prop = "ImagePenWidth/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetImagePenWidth() {
		var Prop = "ImagePenWidth";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function SetImageTimeStamp(v) {
		var Prop = "ImageTimeStamp/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetImageTimeStamp() {
		var Prop = "ImageTimeStamp";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function SetImageTimeStampPosX(v) {
		var Prop = "ImageTimeStampPosX/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetImageTimeStampPosX() {
		var Prop = "ImageTimeStampPosX";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function SetImageTimeStampPosY(v) {
		var Prop = "ImageTimeStampPosY/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetImageTimeStampPosY() {
		var Prop = "ImageTimeStampPosY";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function SetImageTimeStampSize(v) {
		var Prop = "ImageTimeStampSize/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetImageTimeStampSize() {
		var Prop = "ImageTimeStampSize";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function SetImageAnnotate(v) {
		var Prop = "ImageAnnotate/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetImageAnnotate() {
		var Prop = "ImageAnnotate";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function SetImageAnnotatePosX(v) {
		var Prop = "ImageAnnotatePosX/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetImageAnnotatePosX() {
		var Prop = "ImageAnnotatePosX";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function SetImageAnnotatePosY(v) {
		var Prop = "ImageAnnotatePosY/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetImageAnnotatePosY() {
		var Prop = "ImageAnnotatePosY";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function SetImageAnnotateSize(v) {
		var Prop = "ImageAnnotateSize/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetImageAnnotateSize() {
		var Prop = "ImageAnnotateSize";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function SetJustifyX(v) {
		var Prop = "JustifyX/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetJustifyX() {
		var Prop = "JustifyX";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function SetJustifyY(v) {
		var Prop = "JustifyY/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetJustifyY() {
		var Prop = "JustifyY";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function SetJustifyMode(v) {
		var Prop = "JustifyMode/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetJustifyMode() {
		var Prop = "JustifyMode";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	//
	//		SigPlusNETKeyPad.cs
	//
	function KeyPadAddHotSpot(key, coord, xp, yp, xs, ys) {
		var Prop = "KeyPadAddHotSpot/";
		Prop = Prop + key + "," + coord + "," + xp + "," + yp + "," + xs + "," + ys;
		SigWebSetPropertySync(Prop);
	}

	function KeyPadMarkHotSpot(key, coord, xp, yp, xs, ys) {
		LCDWriteString(0, 2, xp, yp, "16pt sans-serif", 32, "+")
		LCDWriteString(0, 2, xp + xs, yp, "16pt sans-serif", 32, "+")
		LCDWriteString(0, 2, xp, yp + ys, "16pt sans-serif", 32, "+")
		LCDWriteString(0, 2, xp + xs, yp + ys, "16pt sans-serif", 32, "+")
	}

	function KeyPadQueryHotSpot(key) {
		var Prop = "KeyPadQueryHotSpot/";
		Prop = Prop + key;
		return SigWebGetProperty(Prop);
	}

	function KeyPadClearHotSpotList() {
		var Prop = "KeyPadClearHotSpotList";
		SigWebSetPropertySync(Prop);
	}

	function SetSigWindow(coords, xp, yp, xs, ys) {
		var Prop = "SigWindow/";

		Prop = Prop + coords + "," + xp + "," + yp + "," + xs + "," + ys;
		SigWebSetPropertySync(Prop);
	}

	function ClearSigWindow(inside) {
		var Prop = "ClearSigWindow/";
		Prop = Prop + inside;
		SigWebSetPropertySync(Prop);
	}
	//
	//		SigPlusNETLCD.cs
	//
	function SetLCDCaptureMode(v) {
		var Prop = "CaptureMode/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}


	function GetLCDCaptureMode() {
		var Prop = "CaptureMode";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function LCDSetWindow(xP, yP, xS, yS) {
		var Prop = "LCDSetWindow/";
		Prop = Prop + xP + "," + yP + "," + xS + "," + yS;
		SigWebSetPropertySync(Prop);
	}


	function LCDWriteString(dest, mode, x, y, fnt, size, str) {
		var c = document.createElement('canvas');
		var cntx = c.getContext('2d');
		cntx.font = fnt;
		var txt = str;
		var xs = Math.round(cntx.measureText(txt).width);
		var ys = size;
		c.width = xs;
		c.height = ys;

		if ( xs == 0 )
		{
			return;
		}

		cntx.font = fnt;
		cntx.fillStyle = '#FFFFFF'
		cntx.rect(0, 0, xs, ys);
		cntx.fill();


		cntx.fillStyle = '#000000'
		cntx.textBaseline = "top";
		cntx.fillText(txt, 0, 0);

		cntx.drawImage(cntx.canvas, 0, 0, xs, ys);

		var Gstr = createLcdBitmapFromCanvas(c, x, y, xs, ys);

		LcdWriteImageStream(dest, mode, x, y, xs, ys, Gstr);
	}


	function LCDDrawRectangle(dest, mode, x, y, xs, ys, fill) {
		var c = document.createElement('canvas');
		var cntx = c.getContext('2d');

		c.width = xs;
		c.height = ys;


		cntx.fillStyle = fill
		cntx.rect(0, 0, xs, ys);
		cntx.fill();

		cntx.drawImage(cntx.canvas, 0, 0, xs, ys);
		var Gstr = createLcdBitmapFromCanvas(c, x, y, xs, ys);
		LcdWriteImageBlob(dest, mode, x, y, xs, ys, Gstr);
	}


	function LCDDrawButton(dest, mode, x, y, xs, ys, strys, fill, fnt, str) {
		var c = document.createElement('canvas');
		var cntx = c.getContext('2d');
		cntx.font = fnt;
		var txt = str;
		var sxs = Math.round(cntx.measureText(txt).width);
		var sys = strys;
		c.width = xs;
		c.height = ys;

		cntx.font = fnt;
		cntx.fillStyle = fill
		cntx.rect(0, 0, xs, ys);
		cntx.fill();


		cntx.fillStyle = '#FFFFFF'
		cntx.textBaseline = "top";
		cntx.fillText(txt, ((xs - sxs) / 2), ((ys - sys) / 2));

		cntx.drawImage(cntx.canvas, 0, 0, xs, ys);

		var Gstr = createLcdBitmapFromCanvas(c, x, y, xs, ys);

		LcdWriteImageBlob(dest, mode, x, y, xs, ys, Gstr);
	}



	function LCDWriteStringWindow(dest, mode, x, y, fnt, xsize, ysize, str) {
		var c = document.createElement('canvas');
		var cntx = c.getContext('2d');
		cntx.font = fnt;
		var txt = str;
		var xs = xsize;
		var ys = ysize;
		c.width = xs;
		c.height = ys;

		cntx.font = fnt;
		cntx.fillStyle = '#FFFFFF'
		cntx.rect(0, 0, xs, ys);
		cntx.fill();


		cntx.fillStyle = '#000000'
		cntx.textBaseline = "top";
		cntx.fillText(txt, 0, 0);

		cntx.drawImage(cntx.canvas, 0, 0, xs, ys);

		var Gstr = createLcdBitmapFromCanvas(c, x, y, xs, ys);

		LcdWriteImageBlob(dest, mode, x, y, xs, ys, Gstr);
	}


	function LCDStringWidth(fnt, str) {
		var c = document.createElement('canvas');
		var cntx = c.getContext('2d');
		cntx.font = fnt;
		var txt = str;
		var xs = Math.round(cntx.measureText(txt).width);

		return xs;
	}


	function LCDStringHeight(fnt, str) {
		return 16;
	}

	function LcdRefresh(Mode, Xp, Yp, Xs, Ys) {
		var Prop = "LcdRefresh/";

		Prop = Prop + Mode + "," + Xp + "," + Yp + "," + Xs + "," + Ys;
		SigWebSetPropertySync(Prop);
	}

	function LCDSendCmdString(CmdStr, ReturnCount, Result, TimeOut) {
		var Prop = "LcdSendCmdString/";

		Prop = Prop + ReturnCount + "," + TimeOut;
		Result = SigWebSetStreamProperty(Prop, CmdStr);
	}

	function LCDSendCmdData(CmdStr, ReturnCount, Result, TimeOut) {
		var Prop = "LcdSendCmdData/";

		Prop = Prop + ReturnCount + "," + TimeOut;
		Result = SigWebSetStreamProperty(Prop, CmdStr);
	}


	function LCDSendGraphicCanvas(dest, mode, x, y, canvas) {
		var Gstr = createLcdBitmapFromCanvas(canvas, 0, 0, xs, ys)
		LcdWriteImageStream(dest, mode, x, y, canvas.width, canvas.height, Gstr);
	}


	//		function  LCDSendWindowedGraphicCanvas(  dest, mode,  x,  y, canvas )
	//			 {
	//			 }


	//		function  LCDSendWindowedGraphicCanvas(  dest, mode,  x,  y,  xs,  ys, canvas )
	//			{
	//			var Gstr = createLcdBitmapFromCanvas( canvas, 0, 0, xs, ys)
	//			LcdWriteImageStream( dest, mode, x, y, xs, ys, Gstr );
	//			}


	function LCDSendWindowedGraphicCanvas(dest, mode, x, y, xs, ys, c, xps, yps) {
		var Gstr = createLcdBitmapFromCanvas(canvas, xps, yps, xs, ys)
		LcdWriteImageStream(dest, mode, x, y, xs, ys, Gstr);
	}



	function LCDSendGraphicUrl(dest, mode, x, y, url) {
		LcdWriteImage(dest, mode, x, y, url)
	}

	//		function  LCDSendWindowedGraphicUrl(  dest, mode,  X,  Y, url )
	//			{
	//			}

	//		function  LCDSendWindowedGraphicUrl(  dest, mode,  x,  y,  xs,  ys, url )
	//			{
	//			LcdWriteImageStream(dest, mode, x, y, xs, ys, url);
	//			}

	function LCDSendWindowedGraphicUrl(dest, mode, x, y, xse, yse, url, xps, yps) {
		LcdWriteImageStream(dest, mode, x, y, xs, ys, url);
	}


	//		function  LCDSendGraphic(  Dest,  Mode,  XPos,  YPos,  ImageFileName ) {}
	//		function  LCDSendGraphicURL(  Dest,  Mode,  XPos,  YPos,  URL ) {}

	function LCDClear() {
		var Prop = "LcdClear";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function LCDSetTabletMap(LCDType, LCDXSize, LCDYSize, LCDXStart, LCDYStart, LCDXStop, LCDYStop) {
	}


	function LCDSetPixelDepth(v) {
		var Prop = "LcdSetPixelDepth/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function LCDGetLCDSize() {
		var Prop = "LcdGetLcdSize";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function LCDSetCompressionMode(NewMode) {
		var Prop = "LcdCompressionMode/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}


	function LCDGetCompressionMode() {
		var Prop = "LcdCompressionMode";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function LCDSetZCompressionMode(NewMode) {
		var Prop = "LcdZCompressionMode/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}


	function LCDGetZCompressionMode() {
		var Prop = "LcdZCompressionMode";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}
	//
	//		SigPlusNETLCD.cs
	//


	function SetRealTabletState(v) {
		var Prop = "TabletState/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetTabletState() {
		var Prop = "TabletState";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}



	function SetTabletLogicalXSize(v) {
		var Prop = "TabletLogicalXSize/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetTabletLogicalXSize() {
		var Prop = "TabletLogicalXSize";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function GetTabletLogicalYSize() {
		var Prop = "TabletLogicalYSize";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function SetTabletLogicalYSize(v) {
		var Prop = "TabletLogicalYSize/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function SetTabletXStart(v) {
		var Prop = "TabletXStart/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetTabletXStart() {
		var Prop = "TabletXStart";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function SetTabletYStart(v) {
		var Prop = "TabletYStart/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetTabletYStart() {
		var Prop = "TabletYStart";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function SetTabletXStop(v) {
		var Prop = "TabletXStop/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetTabletXStop() {
		var Prop = "TabletXStop";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function SetTabletYStop(v) {
		var Prop = "TabletYStop/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetTabletYStop() {
		var Prop = "TabletYStop";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function SetTabletFilterPoints(v) {
		var Prop = "TabletFilterPoints/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetTabletFilterPoints() {
		var Prop = "TabletFilterPoints";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function SetTabletTimingAdvance(v) {
		var Prop = "TabletTimingAdvance/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetTabletTimingAdvance() {
		var Prop = "TabletTimingAdvance";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function SetTabletComPort(v) {
		var Prop = "TabletComPort/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetTabletComPort() {
		var Prop = "TabletComPort";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function SetTabletBaudRate(v) {
		var Prop = "TabletBaudRate/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetTabletBaudRate() {
		var Prop = "TabletBaudRate";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function SetTabletRotation(v) {
		var Prop = "TabletRotation/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetTabletRotation() {
		var Prop = "TabletRotation";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function SetTabletType(v) {
		var Prop = "TabletType/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}


	function GetTabletType() {
		var Prop = "TabletType";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function SetServerTabletType(v) {
		var Prop = "ServerTabletType/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetServerTabletType() {
		var Prop = "ServerTabletType";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function SetTabletComTest(v) {
		var Prop = "TabletComTest/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetTabletComTest() {
		var Prop = "TabletComTest";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function SetTabletResolution(v) {
		var Prop = "TabletResolution/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetTabletResolution() {
		var Prop = "TabletResolution";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function TabletConnectQuery() {
		var Prop = "TabletConnectQuery";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function TabletModelNumber() {
		var Prop = "TabletModelNumber";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function TabletSerialNumber() {
		var Prop = "TabletSerialNumber";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function SetTabletPortPath(v) {
		var Prop = "TabletPortPath/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function SetTabletLocalIniFilePath(v) {
		var Prop = "TabletLocalIniFilePath/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function SetTabletModel(v) {
		var Prop = "TabletModel/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function SetSerialPortCloseDelay(v) {
		var Prop = "SerialPortCloseDelay/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetSerialPortCloseDelay() {
		var Prop = "SerialPortCloseDelay";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function EnableTabletEncryption() {
		var Prop = "EnableTabletEncryption";

		Prop = Prop;
		SigWebSetPropertySync(Prop);
	}

	function SetTabletEncryptionMode(hmode, tmode) {
		var Prop = "TabletEncryptionMode/";

		Prop = Prop + hmode + "," + tmode;
		SigWebSetPropertySync(Prop);
	}

	function SetMaxLogFileSize(v) {
		var Prop = "MaxLogFileSize/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetSigSockServerPath() {
		var Prop = "SigSockServerPath";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function GetSigSockClientName() {
		var Prop = "SigSockClientName";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function GetSigSockPortNumber() {
		var Prop = "SigSockPortNumber";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}

	function SetSigSockServerPath(v) {
		var Prop = "SigSockServerPath/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function SetSigSockClientName(v) {
		var Prop = "SigSockClientName/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function SetPortNumber(v) {
		var Prop = "PortNumber/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function SetSigSockPortNumber(v) {
		var Prop = "SigSockPortNumber/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function GetFirmwareRevision() {
		var Prop = "FirmwareRevision";

		Prop = Prop;
		return SigWebGetProperty(Prop);
	}


	function SetTabletData(sigStr) {
		var Prop = "TabletData";

		Prop = Prop;
		SigWebSetStreamProperty(Prop, sigStr);
	}



	function GetTabletData() {
		var Prop = "TabletData";

		Prop = Prop;
		var Str = SigWebGetProperty(Prop);

		return Str.slice(1, Str.length - 1);
	}


	function OpenTablet(v) {
		var Prop = "OpenTablet/";

		Prop = Prop + v;
		SigWebSetPropertySync(Prop);
	}

	function CloseTablet() {
		var Prop = "CloseTablet";

		Prop = Prop;
		SigWebSetProperty(Prop);
	}


	function ResetParameters() {
		var Prop = "ResetParameters";

		Prop = Prop;
		SigWebSetPropertySync(Prop);
	}


	function testRawData() {
		OpenTablet(1);
		var Str1 = GetTabletData();
		CloseTablet();
	}

	function Reset() {
		var Prop = "Reset";
		SigWebSetProperty(Prop);
	}

	function SetTabletState(v, ctx, tv)
	{
		var delay;


		if (tv)
		{
			delay = tv;
		}
		else
		{
			delay = 100;
		}

		if (GetTabletState() != v)
		{
			if (v == 1)
			{
				if (ctx)
				{
					var can = ctx.canvas;
					SetDisplayXSize( can.width );
					SetDisplayYSize( can.height );
					SigWebSetDisplayTarget(ctx);
				}
				SetRealTabletState(v);
				if ( ctx && (GetTabletState() != 0) )
				{
					var tmr = setInterval(SigWebRefresh, delay);
				}
				else
				{
					var tmr = null;
				}

				return tmr;
			}
			else
			{
				if (ctx)
				{
					clearInterval(ctx);
				}
				SigWebSetDisplayTarget(null);
				SetRealTabletState(v);
			}
		}
		return null;
	}

