<?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 Encode/Decode Interest</title>
	
	<script type="text/javascript" src="../Helper.js"></script>

	<script type="text/javascript">
	
		function encode() {
			var interest = new Interest( new Name(document.getElementById('interest').value ) );

            interest.minSuffixComponents = 2;
            interest.maxSuffixComponents = 4;
            interest.childSelector = 1;
            interest.answerOriginKind = 4;
            interest.scope = 2;
            interest.interestLifetime = 30;
            interest.nonce = new Uint8Array([0x61, 0x62, 0x61, 0x62, 0x61, 0x62]);
            var pkd = [];
            for (i = 0; i < 32; ++i)
                pkd.push(i);
			interest.publisherPublicKeyDigest = new PublisherPublicKeyDigest(new Uint8Array(pkd));
                
			var output = encodeToHexInterest(interest);
			
			document.getElementById('result').innerHTML = output;

		}
		
		function decode() {
			var input = document.getElementById('result').innerHTML;
			
			var interest = decodeHexInterest(input);
			
			if (LOG>3)console.log('INTEREST DECODED');
			if (LOG>3)console.log(interest);

			///////////////////////////////////////
			
			var output ="";
			
			if (interest.name != null && interest.name.components != null) {
				output += "Name: ";
				output += interest.name.getName();
				output += "<br/>";
			}
				
			if (interest.minSuffixComponents != null ) {
				output += "MinSuffixComponents : ";
				output +=  interest.minSuffixComponents;
				output += "<br/>";
			}
			
			if (interest.maxSuffixComponents != null ) {
				output += "MaxSuffixComponents : ";
				output +=  interest.maxSuffixComponents;
				output += "<br/>";
			}
	
			if (interest.publisherPublicKeyDigest != null ) {
				output += "PublisherPublicKeyDigest: ";
				output +=  DataUtils.toHex(interest.publisherPublicKeyDigest.publisherPublicKeyDigest);
				output += "<br/>";
			}
			
			if (interest.childSelector != null ) {
				output += "ChildSelector: ";
				output +=  interest.childSelector;
				output += "<br/>";
			}
			
			if (interest.answerOriginKind != null ) {
				output += "AnswerOriginKind: ";
				output +=  interest.answerOriginKind;
				output += "<br/>";
			}
			
			if (interest.scope != null ) {
				output += "Scope: ";
				output +=  interest.scope;
				output += "<br/>";
			}
			
			if (interest.interestLifetime != null ) {
				output += "InterestLifetime: ";
				output +=  interest.interestLifetime;
				output += "<br/>";
			}
	
			if (interest.nonce != null ) {
				output += "Nonce: ";
				output +=  DataUtils.toHex(interest.nonce);
				output += "<br/>";
			}
			
			document.getElementById('result').innerHTML = output;
		}

	</script>

</head>
<body >
	<form>
		
		Please Enter an Interest:<br />
		
		<input id="interest" type="text" name="INTEREST" value="/ndn/abc" /> 
		
	</form>
	<button onclick="encode()">Encode</button>
	<button onclick="decode()">Decode</button>
	
			<p id="result"></p>
	
	

		<!--  p id="result">01d2f2fafdc12e4d2e532e6c6f63616c686f737400fabdc12e4d2e53525600faa563636e6400fa9d4b4559000002d28e310000</p-->

</body>
</html>
