2         header("content-type: text/html; charset=UTF-8");
 
   6         <title>OpenStreetMap Nominatim: Search</title>
 
   8         <base href="<?php echo CONST_Website_BaseURL;?>" />
 
   9         <link href="nominatim.xml" rel="search" title="Nominatim Search" type="application/opensearchdescription+xml" />
 
  11         <script src="js/OpenLayers.js"></script>
 
  12         <script src="js/tiles.js"></script>
 
  13         <script src="js/prototype-1.6.0.3.js"></script>
 
  16 * {-moz-box-sizing: border-box;}
 
  23   font: normal 12px/15px arial,sans-serif;
 
  33   border-bottom: 2px solid #75ADFF;
 
  38 #seachheaderfade1, #seachheaderfade2, #seachheaderfade3, #seachheaderfade4{
 
  45   filter: alpha(opacity = 15);
 
  47   border: 1px solid #000000;
 
  61 #searchresultsfade1, #searchresultsfade2, #searchresultsfade3, #searchresultsfade4 {
 
  68   filter: alpha(opacity = 20);
 
  70   border: 1px solid #ffffff;
 
  92   border: 1px solid #ffffff;
 
 112   font: normal 12px/15px arial,sans-serif;
 
 132   -moz-border-radius: 5px;
 
 133   -webkit-border-radius: 5px;
 
 135   border: 2px solid #D7E7FF;
 
 136   font: normal 12px/15px arial,sans-serif;
 
 151   font: normal 9px/10px arial,sans-serif;
 
 154 .result .details, .result .details a{
 
 157   font: normal 9px/10px arial,sans-serif;
 
 163   font: normal 12px arial,sans-serif;
 
 174   font: normal 9px/10px arial,sans-serif;
 
 183         <script type="text/javascript">
 
 187                 function handleResize()
 
 189                         if ($('searchresults'))
 
 191                                 $('map').style.width = (document.documentElement.clientWidth > 0?document.documentElement.clientWidth:document.documentElement.offsetWidth) - 200;
 
 192                                 $('report').style.width = (document.documentElement.clientWidth > 0?document.documentElement.clientWidth:document.documentElement.offsetWidth) - 200;
 
 196                                 $('map').style.width = (document.documentElement.clientWidth > 0?document.documentElement.clientWidth:document.documentElement.offsetWidth) - 0;
 
 197                                 $('map').style.left = 0;
 
 200                         if ($('map')) $('map').style.height = (document.documentElement.clientHeight > 0?document.documentElement.clientHeight:document.documentElement.offsetHeight) - 38;
 
 201                         if ($('searchresults')) $('searchresults').style.height = (document.documentElement.clientHeight > 0?document.documentElement.clientHeight:document.documentElement.offsetHeight) - 38;
 
 202                         if ($('report')) $('report').style.height = (document.documentElement.clientHeight > 0?document.documentElement.clientHeight:document.documentElement.offsetHeight) - 38;
 
 204                 window.onresize = handleResize;
 
 206                 function panToLatLon(lat,lon) {
 
 207                         var lonLat = new OpenLayers.LonLat(lon, lat).transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());
 
 208                         map.panTo(lonLat, <?php echo $iZoom ?>);
 
 211                 function panToLatLonZoom(lat, lon, zoom) {
 
 212                         var lonLat = new OpenLayers.LonLat(lon, lat).transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());
 
 213                         if (zoom != map.getZoom())
 
 214                                 map.setCenter(lonLat, zoom);
 
 216                                 map.panTo(lonLat, 10);
 
 219                 function panToLatLonBoundingBox(lat,lon,minlat,maxlat,minlon,maxlon,points) {
 
 220                         var proj_EPSG4326 = new OpenLayers.Projection("EPSG:4326");
 
 221                         var proj_map = map.getProjectionObject();
 
 222                         map.zoomToExtent(new OpenLayers.Bounds(minlon,minlat,maxlon,maxlat).transform(proj_EPSG4326, proj_map));
 
 223                         var lonLat = new OpenLayers.LonLat(lon, lat).transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());
 
 224                         map.panTo(lonLat, <?php echo $iZoom ?>);
 
 228                                 strokeColor: "#75ADFF",
 
 229                                 fillColor: "#F0F7FF",
 
 234                         var proj_EPSG4326 = new OpenLayers.Projection("EPSG:4326");
 
 235                         var proj_map = map.getProjectionObject();
 
 238                                 points.each(function(p){
 
 239                                         pointList.push(new OpenLayers.Geometry.Point(p[0],p[1]));
 
 241                                 var linearRing = new OpenLayers.Geometry.LinearRing(pointList).transform(proj_EPSG4326, proj_map);;
 
 242                                 var polygonFeature = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Polygon([linearRing]),null,style);
 
 243                                 vectorLayer.destroyFeatures();
 
 244                                 vectorLayer.addFeatures([polygonFeature]);
 
 248                                 var lonLat = new OpenLayers.LonLat(lon, lat).transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());
 
 249                                 var point = new OpenLayers.Geometry.Point(lonLat.lon, lonLat.lat);
 
 250                                 var pointFeature = new OpenLayers.Feature.Vector(point,null,style);
 
 251                                 vectorLayer.destroyFeatures();
 
 252                                 vectorLayer.addFeatures([pointFeature]);
 
 259                         return Math.round(v*n)/n;
 
 264                         return Math.floor(v*n)/n;
 
 269                         return Math.ceil(v*n)/n;
 
 272                 function mapEventMove() {
 
 273                         var proj = new OpenLayers.Projection("EPSG:4326");
 
 274                         var bounds = map.getExtent();
 
 275                         bounds = bounds.transform(map.getProjectionObject(), proj);
 
 276                         $('viewbox').value = floor(bounds.left,2)+','+ceil(bounds.top,2)+','+ceil(bounds.right,2)+','+floor(bounds.bottom,2);
 
 281                         map = new OpenLayers.Map ("map", {
 
 283                                                                                 new OpenLayers.Control.Navigation(),
 
 284                                                                                 new OpenLayers.Control.PanZoomBar(),
 
 285                                                                                 new OpenLayers.Control.MouseDefaults(),
 
 286                                                                                 new OpenLayers.Control.MousePosition(),
 
 287                                                                                 new OpenLayers.Control.Attribution()],
 
 288                 maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
 
 289                 maxResolution: 156543.0399,
 
 292                 projection: new OpenLayers.Projection("EPSG:900913"),
 
 293                 displayProjection: new OpenLayers.Projection("EPSG:4326"),
 
 295                                                                         "moveend": mapEventMove
 
 298                         map.addLayer(new OpenLayers.Layer.OSM.<?php echo CONST_Tile_Default;?>("Default"));
 
 300                         var layer_style = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']);
 
 301                         layer_style.fillOpacity = 0.2;
 
 302                         layer_style.graphicOpacity = 1;
 
 303                         vectorLayer = new OpenLayers.Layer.Vector("Points", {style: layer_style});
 
 304                         map.addLayer(vectorLayer);
 
 306 //                      var lonLat = new OpenLayers.LonLat(<?php echo $fLon ?>, <?php echo $fLat ?>).transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());
 
 307 //                      map.setCenter (lonLat, <?php echo $iZoom ?>);
 
 310                 function setfocus(field_id) { 
 
 317 <body onload="setfocus('q');">
 
 319         <div id="seachheaderfade1"></div><div id="seachheaderfade2"></div><div id="seachheaderfade3"></div><div id="seachheaderfade4"></div>
 
 321         <div id="seachheader">
 
 322                 <form accept-charset="UTF-8" action="<?php echo CONST_Website_BaseURL; ?>search.php" method="get">
 
 323                         <table border="0" width="100%">
 
 325                                         <td valign="center" style="width:30px;"><img src="images/logo.gif"></td>
 
 326                                         <td valign="center" style="width:400px;"><input id="q" name="q" value="<?php echo htmlspecialchars($sQuery); 
 
 327 ?>" style="width:270px;"><input type="text" id="viewbox" style="width:130px;" name="viewbox"></td>
 
 328                                         <td style="width:80px;"><input type="submit" value="Search"></td>
 
 329 <?php if (CONST_Search_AreaPolygons) { ?>                                       <td style="width:100px;"><input type="checkbox" value="1" name="polygon" <?php if ($bShowPolygons) echo "checked"; ?>> Highlight</td>
 
 330 <td style="text-align:right;">Data: <?php echo $sDataDate; ?></td>
 
 331 <td style="text-align:right;">
 
 332 <a href="http://wiki.openstreetmap.org/wiki/Nominatim" target="_blank">Documentation</a> | <a href="http://wiki.openstreetmap.org/wiki/Nominatim/FAQ" 
 
 333 target="_blank">FAQ</a></td>
 
 335 <?php } ?>                                      <td style="text-align:right;"><?php if ($sQuery) { if ($sReportDescription) {?><div style="text-align:center;"><b>Thank you for your problem report</b></div><?php } else { ?><input type="button" value="Report Problem With Results" onclick="$('report').style.visibility=($('report').style.visibility=='hidden'?'visible':'hidden')"><?php }} ?></td>
 
 342         if ($sQuery || sizeof($aSearchResults))
 
 345         <div id="searchresultsfade1"></div><div id="searchresultsfade2"></div><div id="searchresultsfade3"></div><div id="searchresultsfade4"></div>
 
 346         <div id="searchresults">
 
 350                 echo '<div class="more"><b>Suggest: </b><a href="'.$sSuggestionURL.'"><b>'.$sSuggestion.'</b></a></div>';
 
 352         foreach($aSearchResults as $iResNum => $aResult)
 
 354                 if ($aResult['aBoundingBox'])
 
 356                         echo '<div class="result" onClick=\'panToLatLonBoundingBox('.$aResult['lat'].', '.$aResult['lon'];
 
 357                         echo ', '.$aResult['aBoundingBox'][0];
 
 358                         echo ', '.$aResult['aBoundingBox'][1];
 
 359                         echo ', '.$aResult['aBoundingBox'][2];
 
 360                         echo ', '.$aResult['aBoundingBox'][3];
 
 361                         echo ', '.javascript_renderData($aResult['aPolyPoints']);
 
 364                 elseif (isset($aResult['zoom']))
 
 366                         echo '<div class="result" onClick="panToLatLonZoom('.$aResult['lat'].', '.$aResult['lon'].', '.$aResult['zoom'].');">';
 
 370                         echo '<div class="result" onClick="panToLatLon('.$aResult['lat'].', '.$aResult['lon'].');">';
 
 373                 echo ($aResult['icon']?'<img src="'.$aResult['icon'].'">':'');
 
 374                 echo ' <span class="name">'.$aResult['name'].'</span>';
 
 375                 echo ' <span class="latlon">'.round($aResult['lat'],3).','.round($aResult['lat'],3).'</span>';
 
 376                 echo ' <span class="place_id">'.$aResult['place_id'].'</span>';
 
 377                 if (isset($aResult['label']))
 
 378                         echo ' <span class="type">('.$aResult['label'].')</span>';
 
 380                         echo ' <span class="type">('.ucwords(str_replace('_',' ',$aResult['type'])).')</span>';
 
 381                 echo ' <span class="details">(<a href="details.php?place_id='.$aResult['place_id'].'">details</a>)</span>';
 
 384         if (sizeof($aSearchResults))
 
 388                         echo '<div class="more"><a href="'.$sMoreURL.'">Search for more results</a></div>';
 
 393                 echo '<div class="noresults">No search results found</div>';
 
 397                 <div class="disclaimer">Addresses and postcodes are approximate
 
 398                         <input type="button" value="Report Problem" onclick="$('report').style.visibility=($('report').style.visibility=='hidden'?'visible':'hidden')">
 
 406         <div id="report" style="visibility:hidden;"><div style="width:600px;margin:auto;margin-top:60px;">
 
 407                 <h2>Report a problem</h2>
 
 408                 <p>Before reporting problems please read the <a href="http://wiki.openstreetmap.org/wiki/Nominatim">user documentation</a> and <a 
 
 409 href="http://wiki.openstreetmap.org/wiki/Nominatim/FAQ">FAQ</a>.  If your problem relates to the address of a particular search result please use the 'details' link 
 
 410 to check how the address was generated before reporting a problem.</p>
 
 411                 <p>Please use <a href="http://trac.openstreetmap.org/newticket?component=nominatim">trac.openstreetmap.org</a> to report problems 
 
 413 the component to 'nominatim'.  You can search for existing bug reports <a href="http://trac.openstreetmap.org/query?status=new&status=assigned&status=reopened&component=nominatim&order=priority">here</a>.</p>
 
 414                 <p>Please ensure that you include a full description of the problem, including the search query that you used, the problem with the result and, if 
 
 415 the problem relates to missing data, the osm id of the item that is missing.  Problems that contain enough detail are likely to get looked at before ones that 
 
 416 require significant research!</p>
 
 420                 <p>Please use this form to report problems with the search results.  Of particular interest are items missing, but please also use this form to 
 
 421 report any other problems.</p>
 
 422                 <p>If your problem relates to the address of a particular search result please use the 'details' link to check how the address was generated before 
 
 423 reporting a problem.</p>
 
 424                 <p>If you are reporting a missing result please (if possible) include the OSM ID of the item you where expecting (i.e. node 422162)</p>
 
 427                 <tr><th>Your Query:</th><td><input type="hidden" name="report:query" value="<?php echo htmlspecialchars($sQuery); ?>" style="width:500px;"><?php echo htmlspecialchars($sQuery); ?></td></tr>
 
 428                 <tr><th>Your Email Address(opt):</th><td><input type="text" name="report:email" value="" style="width:500px;"></td></tr>
 
 429                 <tr><th>Description of Problem:</th><td><textarea name="report:description" style="width:500px;height:200px;"></textarea></td></tr>
 
 430                 <tr><td colspan="2" class="button"><input type="button" value="Cancel" onclick="$('report').style.visibility='hidden'"><input type="submit" value="Report"></td></tr>
 
 433                 <h2>Known Problems</h2>
 
 435                 <li>Countries where missed out of the index</li>
 
 436                 <li>Area Polygons relate to the search area - not the address area which would make more sense</li>
 
 441         <script type="text/javascript">
 
 444         foreach($aSearchResults as $iResNum => $aResult)
 
 446                 if ($aResult['aBoundingBox'])
 
 448                         echo 'panToLatLonBoundingBox('.$aResult['lat'].', '.$aResult['lon'];
 
 449                         echo ', '.$aResult['aBoundingBox'][0];
 
 450                         echo ', '.$aResult['aBoundingBox'][1];
 
 451                         echo ', '.$aResult['aBoundingBox'][2];
 
 452                         echo ', '.$aResult['aBoundingBox'][3];
 
 453                         echo ', '.javascript_renderData($aResult['aPolyPoints']);
 
 458                         echo 'panToLatLonZoom('.$fLat.', '.$fLon.', '.$iZoom.');'."\n";
 
 462         if (!sizeof($aSearchResults))
 
 464                 echo 'panToLatLonZoom('.$fLat.', '.$fLon.', '.$iZoom.');'."\n";