<?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="../java_socket_bridge.js"></script>
	
	<script type="text/javascript" src="../util/CCNProtocolDTags.js"></script>
	
	<script type="text/javascript" src="../util/CCNTime.js"></script>
	
	<script type="text/javascript" src="../Name.js"></script>
	
	<script type="text/javascript" src="../ContentObject.js"></script>
	
	<script type="text/javascript" src="../encoding/DateFormat.js"></script>
	
	<script type="text/javascript" src="../Interest.js"></script>
	
	<script type="text/javascript" src="../Key.js"></script>
	
	<script type="text/javascript" src="../PublisherID.js"></script>
	
	<script type="text/javascript" src="../PublisherPublicKeyDigest.js"></script>
	
	<script type="text/javascript" src="../FaceInstance.js"></script>

	<script type="text/javascript" src="../ForwardingEntry.js"></script>
	
	<script type="text/javascript" src="../encoding/BinaryXMLEncoder.js"></script>
	
	<script type="text/javascript" src="../encoding/BinaryXMLDecoder.js"></script>
	
	<script type="text/javascript" src="../encoding/DataUtils.js"></script>
	
	<script type="text/javascript" src="../encoding/EncodingUtils.js"></script>
	
	<script language="JavaScript" type="text/javascript" src="../security/KeyManager.js"></script>
	
	<script language="JavaScript" type="text/javascript" src="../securityLib/jsbn.js"></script>
	<script language="JavaScript" type="text/javascript" src="../securityLib/jsbn2.js"></script>
	<script language="JavaScript" type="text/javascript" src="../securityLib/rsa.js"></script>
	<script language="JavaScript" type="text/javascript" src="../securityLib/rsa2.js"></script>
	
	<script language="JavaScript" type="text/javascript" src="../securityLib/sha1.js"></script>
	<script language="JavaScript" type="text/javascript" src="../securityLib/sha256.js"></script>
	<script language="JavaScript" type="text/javascript" src="../securityLib/sha512.js"></script>
	<script language="JavaScript" type="text/javascript" src="../securityLib/md5.js"></script>
	<script language="JavaScript" type="text/javascript" src="../securityLib/ripemd160.js"></script>
	<script language="JavaScript" type="text/javascript" src="../securityLib/base64.js"></script>
	
	<script language="JavaScript" type="text/javascript" src="../securityLib/rsapem-1.1.js"></script>
	<script language="JavaScript" type="text/javascript" src="../securityLib/rsasign-1.2.js"></script>
	<script language="JavaScript" type="text/javascript" src="../securityLib/asn1hex-1.1.js"></script>
	<script language="JavaScript" type="text/javascript" src="../securityLib/x509-1.1.js"></script>

	<script type="text/javascript">
	
		function encode(){
			var interest = new Interest( new Name(document.getElementById('interest').value ) );

			interest.scope = 1;
			
			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();
				
				/*for(var i=0;i<interest.name.components.length;i++){
					output+= "/"+ DataUtils.toString(interest.name.Components[i]);
				}*/
				
				output+= "<br />";
				output+= "<br />";
			}
	
			
			if(interest.scope!=null ){
				output+= "SCOPE: ";
				
					output+=  interest.scope;
				
				output+= "<br />";
				output+= "<br />";
			}
	
			if(interest.publisherID!=null ){
				output+= "PUBLISHER ID: ";
				
					output+=  interest.publisherID.publisherID;
					
					output+= "PUBLISHER ID TYPE: ";
					output+=  interest.publisherID.publisherType;
				output+= "<br />";
				output+= "<br />";
			}
			
			if(interest.maxSuffixComponents!=null ){
				output+= "MaxSuffixComponents : ";
				
				output+=  interest.maxSuffixComponents;

				output+= "<br />";
				output+= "<br />";
			}
			
			if(interest.minSuffixComponents!=null ){
				output+= "MinSuffixComponents : ";
				
				output+=  interest.minSuffixComponents;

				output+= "<br />";
				output+= "<br />";
			}
			
			document.getElementById('result').innerHTML = output;
			
		}

	</script>

</head>
<body >
	<form>
		
		Please Enter an Interest:<br />
		
		<input id="interest" type="text" name="INTEREST" value="/PARC/abc" /> 
		
	</form>
	<button onclick="encode()">Encode</button>
	<button onclick="decode()">Decode</button>
	
			<p id="result"></p>
	
	

		<!--  p id="result">01d2f2fafdc12e4d2e532e6c6f63616c686f737400fabdc12e4d2e53525600faa563636e6400fa9d4b4559000002d28e310000</p-->

</body>
</html>
