<!--
   Licensed to the Apache Software Foundation (ASF) under one
   or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
   regarding copyright ownership.  The ASF licenses this file
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
   with the License.  You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.    
-->

<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.js"></script>
<script type="text/javascript" src="annotation-editor.js"></script>
<script type="text/javascript" src="opennlp-demo.js"></script>
<style>
  .token {PADDING-LEFT: 3px; PADDING-RIGHT: 3px; float: left;}
  .person {color:brown;}
  .location {color: green;}
  
  #opennlp-demo {
  	min-height: 12.1em;
  }
  
  #opennlp-demo-language {
  	position: relative;
  	top: 0;
  }
  
  #opennlp-demo-input {
  	width: 49.999%;
  	height: 100px;
  	float: left;
  	position: relative;
  	resize: none;
  }
  
  #opennlp-demo-result {
  	width: 49.999%;
  	height: 100px;
	float: left;
  	background: whiteSmoke;
  }
</style>
  
<script type="text/javascript">                                         
	$(document).ready(function() {
		$("div#opennlp-demo").opennlpDemo('namefinder');
	});
</script>
</head>
<body>
	<div id="opennlp-demo"></div>
</body>
</html>
