<?xml version = "1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"DTD/xhtml1-strict.dtd">
<html xmlns = "http://www.w3.org/1999/xhtml">

<head>
	<title>NDN Decode Face Instance</title>
	
	<script type="text/javascript" src="../Helper.js"></script>

	<script type="text/javascript">

		function decode(){

			var input = document.getElementById('result').innerHTML;

			
			var faceInstance = decodeHexFaceInstance(input);
			
			if(LOG>3)console.log('FACE INSTANCE DECODED');
			if(LOG>3)console.log(faceInstance);

			///////////////////////////////////////
			
			var output ="";
			
			if(faceInstance.publisherPublicKeyDigest!=null ){
				output+= "PublisherPublicKeyDigest: ";
				
					output+=  DataUtils.toHex(faceInstance.publisherPublicKeyDigest.publisherPublicKeyDigest);
					
					//output+= "PUBLISHER ID TYPE: ";
					//output+=  faceInstance.publisherPublicKeyDigest.PublisherPublicKeyDigest;
					
				output+= "<br />";
				output+= "<br />";

			}
			
			if(faceInstance.faceID!=null){
				output+= "FaceID: ";
				
				output+= faceInstance.faceID;
				output+= "<br />";
			}
			
			if(faceInstance.ipProto!=null){
				output+= "IPProto: ";
				
				output+= faceInstance.ipProto;
				output+= "<br />";
			}
			
			if(faceInstance.host!=null){
				output+= "Host: ";
				
				output+= faceInstance.host;
				output+= "<br />";
			}
			
			if(faceInstance.Port!=null){
				output+= "Port: ";
				
				output+= faceInstance.Port;
				output+= "<br />";
			}
			if(faceInstance.freshnessSeconds!=null){
				output+= "FreshnessSeconds: ";
				
				output+= faceInstance.freshnessSeconds;
				output+= "<br />";
			}
			
			/*if(interest.name!=null && interest.name.components!=null){
				output+= "NAME: ";
				
				for(var i=0;i<interest.Name.Components.length;i++){
					output+= "/"+ DataUtils.toString(interest.Name.Components[i]);
				}
				output+= "<br />";
				output+= "<br />";
			}*/
	
			document.getElementById('result').innerHTML = output;
			
		}

	</script>

</head>
<body >
	<form>
		
		Please Press Decode:<br />
		
		<!--  input id="faceInstance" type="text" name="FACEINSTANCE" value="/PARC/abc" /--> 
		
	</form>
	<button onclick="decode()">Decode</button>
	
	

		<p id="result">058203e20285e0a01e093968f9740ce7f4361babf5bb05a4e55aaca5e58f73eddeb8e013aa8f0004d29632310004da9631370004e2c631302e312e312e310004eaa6393639350003d2d6323134373438333634370000</p>

</body>
</html>
