<?php
/*=======================================================================
 *
 * locating_D2.php
 *
 * Autor: Marc Vollmann
 *
 =======================================================================*/

include_once ("../include/mcglobal.inc.php");
include_once ("../include/auth.inc.php");
include_once ("../include/ranking.inc.php");


// Check HTTP-Parameters
getSecHttpVars("1",array("f_act", "customerId", "cscIdRoot", "cscIdActual", "f_cr_sid", "useRemoteDB"));


$locatingURL = "../locating/locating_D2.php";

// Check for authentication access and granted rights
$usrAccessArray["hq"] = "1";
authCheckForAccess($hq_id, $usr_id, $emp_id, "1", $customerId, $cscIdRoot, $cscIdActual);
authCheckEmployeeRights($emp_id, "4", "1");

// ******************************************************
// Very special treatment for access to remote database
include_once ("../include/bwv.inc.php");
echo $useRemoteDB . "<br>";
$remoteDBisActive = false;
if (BWV2_checkEmpRemoteDBAccess($useRemoteDB, $emp_id)) :
   $remoteDBisActive = BWV2_setRemoteDBAccessParameter();
endif;
// ******************************************************

/*
FLOW:
- General definitions
- Get courier-id from http-request
- Search MSISDN from courier-id
- Generate request
- Send request
- Parse response
- Search x,y-coordinates in cells to be valid
- Compute longitude and latitude (transformation)
- Get zipcode from coordinates
- Update zipcode of the courier
- Write to log-file|log-db (employee, datetime, courier-id, msisdn, [zipcode, x_y_of_cell])
- Output zipcode
*/


// ***********************
// * General definitions *
// ***********************


// Proxy und Port fuer HTTPS
$proxy = "";

// $port = ":9883";  // D2 LBS-Testsystem
$port = ":705";   // D2 LBS-Live
$constPort = getParameterValue("0", "LOCATING_LBS_PORT", "0");
if ($constPort != "") : $port = $constPort; endif;

// $server = "213.148.156.83";     // D2 LBS-Testsystem
$server = "139.7.25.166";     // D2 LBS-Live
$constServer = getParameterValue("0", "LOCATING_LBS_SERVER", "0");
if ($constServer != "") : $server = $constServer; endif;

// Access to a special remote file
// $file = "ats/receiver";     // D2 LBS-Testsystem
$file = "LocationQueryService";     // D2 LBS-Live

// Request id
// $requestID = "1";
$requestID = rand(1,30000);

// User and password
$vaspID = "mi2ju GmbH";     // D2 Live
$constVaspID = getParameterValue("0", "LOCATING_LBS_VASP_ID", "0");
if ($constVaspID != "") : $vaspID = $constVaspID; endif;

$password = "mi2ju03#";     // D2 Live
$constPassword = getParameterValue("0", "LOCATING_LBS_PASSWORD", "0");
if ($constPassword != "") : $password = $constPassword; endif;

// Service ID
// $serviceId = "mi2juTest";   // D2 Testsystem
$serviceId = "mi2ju";       // D2 Live
$constServiceId = getParameterValue("0", "LOCATING_LBS_SERVICE_ID", "0");
if ($constServiceId != "") : $serviceId = $constServiceId; endif;

// Maximum of age of locating info
$maxAgeOfLocatingInfoInSeconds = "300";

// Minimum of the granularity
$minOfGranularityInMeter = "99999";

// Client Certificate and Private Key
$clientcertkey = '-cert cacert.pem -key privkey.pem';

// Path to openssl
$openssl = 'openssl';

// Port of openssl
$opensslPort = "9213";

// Only for output
$status_message = "";

// Logging enabled
$loggingEnabled = TRUE;
$logFile = "../log/COM_LOG";

// Echo enabled
$echoEnabled = FALSE;


// *************
// * Functions *
// *************

function writeLocatingLog($file, $value) {
   global $loggingEnabled;
   if ($loggingEnabled) :
      writeToFile($file, $value);
   endif;
}

function connectD2($completeReq) {
	 global $server, $port;
   $response = "";
   $errno = "";
   $errstr = "";
   $fp = fsockopen ($server, substr($port, 1), $errno, $errstr, 10);
   if (!$fp) {
       $response = "$errstr ($errno)<br>\n";
   } else {
       fputs ($fp, $completeReq);
       if (fflush($fp)) :

          // Read header
          $httpHeader = "";
          $httpBodyLength = 0;
          if (!feof($fp)) :
             $line = trim(fgets ($fp,1024));
             $httpHeader .= trim($line);
             while (!feof($fp) && $line != "") {
          	     $line = trim(fgets ($fp,1024));
          	     $httpHeader .= $line;
          	     if (!(strpos($line, "Content-Length: ") === FALSE)) :
          	        $httpBodyLength = trim(substr($line, 16));
          	     endif;
             }
          endif;
          // writeLocatingLog($logFile, "::: " . $httpHeader . "\r\n");
          // writeLocatingLog($logFile, "::: " . $httpBodyLength . "\r\n");

/*
          // while (!feof($fp) && $line != "</SLIA>") {
          while (!feof($fp) && strlen($response) < ($httpBodyLength - 7)) {
          	 $line = trim(fgets ($fp,1024));
             $response .= $line;
          }
*/
          $count = 0;
          while (!feof($fp) && $count < $httpBodyLength) {
          	 $line = trim(fgets ($fp,2));
             $response .= $line;
             $count++;
          }
          // writeLocatingLog($logFile, ":# Loops: " . $count . "\r\n");          
          
       else :
          $response = "ERR: " . $errno . " " . $errstr;
       endif;
       
       fclose ($fp);
   }
   return $response;
}


// *********************************
// * Search MSISDN from courier-id *
// *********************************

// Get courier-id from the courier-sid (e.g. SIDs: 1013, 1019, etc.)
$cr_id = getFieldValueFromId("courier","cr_sid",$f_cr_sid,"cr_id");
$msisdn = getFieldValueFromId("courier","cr_id",$cr_id,"cr_mobile_pda");
$imei = getFieldValueFromId("courier","cr_id",$cr_id,"cr_imei");
$serialno = getFieldValueFromId("courier","cr_id",$cr_id,"cr_serialno");


// Remove blanks in MSISDN and check beginning with "49" 
// (IMPORTANT: No check for other chars because checked in javascript !!!)
$msisdn = ereg_replace (" ", "", $msisdn);
$msisdn = str_replace("+", "", $msisdn);
if (!ereg("^" . COUNTRY_FON_PREFIX, $msisdn)) : 
   if (ereg("^0", $msisdn)) :
      $msisdn = substr($msisdn, 1);
   endif;
   $msisdn = COUNTRY_FON_PREFIX . $msisdn;
endif;


// Check necessity of new locating process
$locatingStateArray = checkLocatingState($cr_id);
//echo $locatingStateArray[0] . "\n";

// ********************************************************
// * Generate request if broker service will be contacted *
// ********************************************************
/*
if ($locatingStateArray[0] == "1") :

   writeLocatingLog($logFile, json_encode($locatingStateArray) . "\r\n");

   // Define header request
   $requestheaderOrg = "POST /" . $file . " HTTP/1.1\r\n" .
   "Host: $server$port\r\n" .
   "Content-Type: application/x-www-form-urlencoded\r\n" .
   "Content-Length: LENGTH\r\n\r\n";


   // Connection request
   $requestContext = "<?xml version='1.0'?><!DOCTYPE HDR SYSTEM 'MLEP_HDR.DTD'><HDR ver='1.0'><CLIENT><ID>$vaspID</ID><PWD>$password</PWD><SERVICEID>$serviceId</SERVICEID><SERVICE_TYPE service_type_type='PASSIVE'/></CLIENT></HDR>";
   $requestMethod = "SLIR";
   $requestBody = "<?xml version='1.0'?><!DOCTYPE SLIR SYSTEM 'MLEP_SLIR.DTD'><SLIR ver='1.0'><MSIDS><MSID>" . $msisdn . "</MSID></MSIDS></SLIR>";
   
   $requestContext = urlencode($requestContext);
   $requestBody = urlencode($requestBody);


   // Merge "Context", "Method" and "Body"
   $requestContext = "Context=" . $requestContext . "&Method=" . $requestMethod . "&Body=" . $requestBody;
   
   $laenge = strlen($requestContext);
   
   $requestheader = $requestheaderOrg;
   $requestheader = str_replace ("LENGTH", $laenge, $requestheader);
   
   if ($echoEnabled) : echo $requestheader . $requestContext . "\n\n\n"; endif;
   writeLocatingLog($logFile, $requestheader . $requestContext . "\r\n");
   
   $currentTime = getDateTime("0");
   writeLocatingLog($logFile, "Time begin: " . $currentTime . "\r\n");
   
//   $response = connectD2($requestheader.$requestContext."\r\n");
   $response = "dummy";
   
   $currentTime = getDateTime("0");
   writeLocatingLog($logFile, "Time end: " . $currentTime . "\r\n");
   
   if ($echoEnabled) : echo $response . "\n\n\n"; endif;
   writeLocatingLog($logFile, $response . "\r\n");
else :
*/
   $longitude = $locatingStateArray[1];
   $latitude  = $locatingStateArray[2];
   $gpsTime   = $locatingStateArray[4];

   // Generate a faked response to be parsed correctly
   $response = "";
   $response .= "<POINT>";
   $response .= "  <LL_POINT>";
   $response .= "    <LAT>" . $locatingStateArray[2] . "</LAT>";
   $response .= "    <LONG>" . $locatingStateArray[1] . "</LONG>";
   $response .= "  </LL_POINT>";
   $response .= "</POINT>";
   $response .= "<RAD>XXXX</RAD>";

//endif;


// Evaluation of the response
if ($response == "") :

   // Error occurred, response is empty ...
   $status_message = "Es wurde keine Antwort geliefert!";
else :

   if ((FALSE && !(strpos($response, "<POSERR>") === FALSE)) || ($longitude == 0 && $latitude == 0))  :
   
      // Error occurred, ...
      $status_message = "Die Nummer konnte nicht geortet werden!";
   else :

      if ((strpos($response, "<POINT>") === FALSE)) :

         $status_message = "Die Lokalisierung war nicht möglich!";
      else :

         // GET LOCATING INFOS OF THE RESPONSE
        
         // Get latitude
         /*
         $beginPos = strpos($response, "<LAT>") + 5;
         $endPos = strpos($response, "</LAT>");
         $latitude = substr($response, $beginPos, $endPos - $beginPos);
         $latitude =  substr($latitude, 0, -4) . "." . substr($latitude, -4);     // Insert char "."
         */
         
         // Get longitude
         /*
         $beginPos = strpos($response, "<LONG>") + 6;
         $endPos = strpos($response, "</LONG>");
         $longitude = substr($response, $beginPos, $endPos - $beginPos);
         $longitude = substr($longitude, 0, -4) . "." . substr($longitude, -4);     // Insert char "."
         */
/*
<SLIA ver="1.0">
  <POS>
    <MSID>491736281211</MSID>
    <PD>
      <TIME>
        <LOCAL_TIME>20070424163805</LOCAL_TIME>
        <GMT_OFF>+0200</GMT_OFF>
      </TIME><SHAPE>
      <CIRCLE>
        <POINT>
          <LL_POINT>
            <LAT>523011.999</LAT>
            <LONG>132424.001</LONG>
          </LL_POINT>
        </POINT>
        <RAD>293</RAD>
      </CIRCLE>
      </SHAPE>
    </PD>
  </POS>
  
  <GMT_OFF>+0200</GMT_OFF>
  <RESULT resid="0">OK</RESULT>
  <SESSIONID>AAADswAAARIkPfYcZByzGh+MVoO8Dt2Uevwx</SESSIONID>
</SLIA>
*/
/*
         // GET LOCATING INFOS OF THE RESPONSE
         // If no request has to be send to the server the current longitude and latitude are defined
         if ($locatingStateArray[0] == "1") :
            // Get latitude from connection request
            $beginPos = strpos($response, "<LAT>") + 5;
            $endPos = strpos($response, "</LAT>");
            $latitudeRaw = substr($response, $beginPos, $endPos - $beginPos);
            if ($echoEnabled) : echo "CoordPair: " . $coordPair . "<br>"; endif;
            
            // Get longitude from connection request
            $beginPos = strpos($response, "<LONG>") + 6;
            $endPos = strpos($response, "</LONG>");
            $longitudeRaw = substr($response, $beginPos, $endPos - $beginPos);
            if ($echoEnabled) : echo "CoordPair: " . $coordPair . "<br>"; endif;
            
            // Get radius from connection request
            $beginPos = strpos($response, "<RAD>") + 5;
            $endPos = strpos($response, "</RAD>");
            $radius = substr($response, $beginPos, $endPos - $beginPos);
            if ($echoEnabled) : echo "CoordPair: " . $coordPair . "<br>"; endif;
            
            // Transform data
            // Example: $coordPair = "555555,133333"
            //          $coordPairArray[0] = "555555" | $coordPairArray[0] = "133333"
            //          $x_coord_array[0] = "55" (Stellen 0 und 1) | $x_coord_array[1] = "55" (Stellen 2 und 3) | $x_coord_array[2] = "55" (Stellen 4 und 5)
            //          $y_coord_array[0] = "13" (Stellen 0 und 1) | $y_coord_array[1] = "33" (Stellen 2 und 3) | $y_coord_array[2] = "33" (Stellen 4 und 5)
            
            $latitudeRawArray = array();
            $tmpPos = strpos($latitudeRaw, ".");
            if (!($tmpPos === FALSE)) :
               $latitudeRawArray[0] = substr($latitudeRaw, 0, $tmpPos);
               $latitudeRawArray[1] = substr($latitudeRaw, $tmpPos);
            else :
               $latitudeRawArray[0] = $latitudeRaw;
               $latitudeRawArray[1] = "0";
            endif;
            $longitudeRawArray = array();
            $tmpPos = strpos($longitudeRaw, ".");
            if (!($tmpPos === FALSE)) :
               $longitudeRawArray[0] = substr($longitudeRaw, 0, $tmpPos);
               $longitudeRawArray[1] = substr($longitudeRaw, $tmpPos);
            else :
               $longitudeRawArray[0] = $longitudeRaw;
               $longitudeRawArray[1] = "0";
            endif;
            
            $latitudeRawArray[0] = pad($latitudeRawArray[0], 6, "0");    // if less than 6 chars
            $longitudeRawArray[0] = pad($longitudeRawArray[0], 6, "0");  // if less than 6 chars
            
            if ($latitudeRawArray[1] == "") : $latitudeRawArray[1] = "0"; endif;
            if ($longitudeRawArray[1] == "") : $longitudeRawArray[1] = "0"; endif;
            
            $x_coord_array[0] = substr($latitudeRawArray[0], 0, 2);
            $x_coord_array[1] = substr($latitudeRawArray[0], 2, 2);
            $x_coord_array[2] = substr($latitudeRawArray[0], 4);
            
            $y_coord_array[0] = substr($longitudeRawArray[0], 0, 2);
            $y_coord_array[1] = substr($longitudeRawArray[0], 2, 2);
            $y_coord_array[2] = substr($longitudeRawArray[0], 4);
            
            
            // ***************************************************
            // * Compute longitude and latitude (transformation) *
            // ***************************************************        
            
            $longitude = $y_coord_array[0] + $y_coord_array[1] / 60 + ($y_coord_array[2] + $longitudeRawArray[1]) / 3600;
            $latitude  = $x_coord_array[0] + $x_coord_array[1] / 60 + ($x_coord_array[2] + $latitudeRawArray[1]) / 3600;
            
            writeLocatingLog($logFile, "-->" . $latitude . " " . $longitude . "<-- \r\n");
         endif;
*/

         // ********************************
         // * Get zipcode from coordinates *
         // ********************************
      
         $constLocatingMode = LOCATING_MODE;
      
         if ($constLocatingMode == "0") :
         
            $zipcode = findZipcodeArea($longitude, $latitude);
            if (trim($zipcode) == "") :
               $constLocatingMode = "1";
            endif;
         endif;
         
         if ($constLocatingMode == "1") :
         
            // Get nearest coordinates
            $sqlquery = "SELECT srvp.srvp_id, srvp.srvp_plz, srvp.srvp_latitude, srvp.srvp_longitude, "
                        .      "SQRT(POW(ABS(srvp.srvp_latitude - $latitude),2) + POW(ABS(srvp.srvp_longitude - $longitude),2)) AS nb"
                        . " FROM serviceplz AS srvp"
                        . " ORDER BY nb"
                        . " LIMIT 0,1";
      
            $result = $db->query($sqlquery);
            if (DB::isError($result)) die ("$PHP_SELF: " . $result->getMessage());
            // all defined db-fields an titles shall become content of the following arrays
            while ($row = $result->fetch_assoc()):   
               $f_srvp_plz		= $row["srvp_plz"];         // Zipcode to be displayed
            endwhile;
            $result->free();    
         
            $zipcode = $f_srvp_plz;
         endif;

         $status_message = "<b>Letzte erfolgreiche Ortung: " . $zipcode . "</b></br></br>" 
                         . "(" . $longitude . " / " . $latitude . " um " . formatOutput($gpsTime,"datetime","4") . " " . formatOutput($gpsTime,"datetime","10") . ")</br></br>"
                         . "<a href=\"../locating/map_courier.php?cr_sid=" . $f_cr_sid . "\" target=\"_blank\">[Kartendarstellung]</a><br><br></br>";


         // *********************************
         // * Update zipcode of the courier *
         // *********************************

         $updateRankingTime = TRUE;
      
         // Get current zipcode of the courier out of the table "courier" (cr_locationzipcode) to compare with locating zipcode
         $crLocationZipcode = getFieldValueFromId("courier","cr_id",$cr_id,"cr_locationzipcode");
      
         $status_message .= "<b>(Freimeldung des Kuriers: " . $crLocationZipcode . ")</b><br><br>";
      
         if ($zipcode != "" && $crLocationZipcode != "" && is_numeric($crLocationZipcode)) :
      
            // Check current zipcode with locating zipcode
            if ($zipcode == $crLocationZipcode) :
      
               $updateRankingTime = FALSE;
            else :
               // Check locating zipcode is in neighbourhood
               // If true then ok => do not update ranking time
      
               // Get the general mediation mode for the headquarter
               $mediationMode = MODE_INTERMEDIATION;
               if ($mediationMode == "") :
                  $mediationMode = getFieldValueFromId("headquarters", "hq_id", "$hq_id", "hq_invmode");
               endif;
      
               // Get all neighbours for the current zipcode(area)
               if ($mediationMode == "1") :
                  $zicodeArray = getCourierByRanking($crLocationZipcode, "0000010000", "", "");
                  $zicodeArray = $zicodeArray[5];
               else :
                  $areaIdArray = getCourierByRanking($crLocationZipcode, "0000010000", "", "");
                  $areaIdArray = $areaIdArray[5];

                  // Add ID of the main mediation area
                  $srvpIdZipcode = getFieldValueFromId("serviceplz","srvp_plz",$crLocationZipcode,"srvp_id");
                  // $srvpaIdMain = getFieldValueFromId("serviceplzareamapping","srvp_id",$srvpIdZipcode,"srvpa_id");
                  $srvpaIdMain = $db->getOne("SELECT srvpam.srvpa_id FROM serviceplzarea AS srvpa, serviceplzareamapping AS srvpam" .
                                             "  WHERE srvpam.srvp_id = '" . $srvpIdZipcode . "' AND srvpa.srvpa_id = srvpam.srvpa_id AND srvpa.hq_id = '" . $hq_id . "'");

                  if ($areaIdArray == "") : $areaIdArray = array(); endif;
                  array_push($areaIdArray, $srvpaIdMain);
                  
                  $areaIdArrayLen = count($areaIdArray);
      
                  $outputOfAllValidMainZipcodes = "<b>GÜLTIGE BEREICHE:</b><br>";
                  $outputOfAllValidMainZipcodes .= "_________________ <br><br>";
                  $outputOfAllValidMainZipcodes .= "<b>Hauptbereich:</b><br>";
                  
                  $outputOfAllValidNeighbourZipcodes = "";
                  
      
                  $zicodeArray = array();
                  for ($i = 0; $i < $areaIdArrayLen; $i++) :

                     if ($i < $areaIdArrayLen - 1) :
                        $outputOfAllValidNeighbourZipcodes .= "<b>Nachbarbereich " . ($i + 1) . "</b><br>";
                     endif;

                     $sqlquery = "SELECT srvp.srvp_plz"
                               . " FROM serviceplzareamapping AS srvpam, serviceplz AS srvp"
                               . " WHERE srvpam.srvp_id = srvp.srvp_id AND srvpam.srvpa_id = '" . $areaIdArray[$i] . "'";
                      
                     $result = $db->query($sqlquery);
                     if (DB::isError($result)) die ("$PHP_SELF: " . $result->getMessage());
                                              
                         while ($row = $result->fetch_assoc()):
                        $zicodeArray[] = $row[srvp_plz];
                                  
                         if ($i < $areaIdArrayLen - 1) :
                           $outputOfAllValidNeighbourZipcodes .= $row[srvp_plz] . "<br>";
                        else :
                           $outputOfAllValidMainZipcodes .= $row[srvp_plz] . "<br>";
                        endif;
                     endwhile;

                     $result->free();

                      if ($i < $areaIdArrayLen - 1) :
                        $outputOfAllValidNeighbourZipcodes .= "----------------- <br><br>";
                     else :
                        $outputOfAllValidMainZipcodes .= "----------------- <br><br>";
                     endif;
                  endfor;
                  $outputOfAllValidZipcodes = $outputOfAllValidMainZipcodes . $outputOfAllValidNeighbourZipcodes;
               endif;
      
               $zicodeArrayLen = count($zicodeArray);
               for ($i = 0; $i < $zicodeArrayLen; $i++) :
                   if ($zipcode == $zicodeArray[$i]) :
                      $updateRankingTime = FALSE;
                   endif;
               endfor;
            endif;

            $currentTime = getDateTime("0");
            if ($updateRankingTime) :               
               if (locatingIsPlausible($cr_id, $locatingStateArray[1], $locatingStateArray[2], $locatingStateArray[3], $locatingStateArray[4], $locatingStateArray[5]) && $locatingStateArray[0] == "0") :
                   updateStmt("courier", "cr_id", $cr_id, array("cr_locationzipcode", $zipcode, "cr_availabletime", $currentTime));
                   $status_message .= "Die Rankingposition ging verloren! <br><br>";
               else:
                   $status_message .= "Die Rankingposition bleibt erhalten! <br><br>";
                   $updateRankingTime = false; // wg. Logging s.u.
               endif;
            else :
               // updateStmt("courier", "cr_id", $cr_id, array("cr_locationzipcode", $zipcode));
               $status_message .= "Die Rankingposition bleibt erhalten! <br><br>";
            endif;
            if ($locatingStateArray[0] == "1"):
              $status_message .= "<span style=\"color:red\"><b>Diese Positionsangabe ist veraltet, es sind keine aktuellen Ortungsdaten verf&uuml;gbar.<b></span><br><br>";
            endif;
         else :
            $currentTime = getDateTime("0");
            // 07.06.2024 CA: Kein Update wenn $locatingStateArray[0] != "0"
            if ($zipcode != "" && $locatingStateArray[0] == "0") :
               updateStmt("courier", "cr_id", $cr_id, array("cr_locationzipcode", $zipcode, "cr_availabletime", $currentTime));
            endif;
         endif;

         // Update current position to courier with timestamp
         /*
         if ($longitude != "" && $latitude != "" && 
             substr($longitude , 0, 1) != "0" && substr($latitude , 0, 1) != "0" &&
             is_numeric($longitude) && is_numeric($latitude)) :

             // updateStmt("courier", "cr_id", $cr_id, array("cr_gps_long", $longitude, "cr_gps_lat", $latitude, "cr_gps_time", $currentTime));
             // Changed because of "cr_modify" has not to be changed by update and "cr_gps_type" has to be set!
             if ($locatingStateArray[0] == "1") :
                $sqlStmt = "UPDATE courier SET cr_gps_long = '" . $longitude . "', cr_gps_lat = '" . $latitude . "', cr_gps_time = '" . $currentTime . "', cr_gps_type = '1', cr_modify = cr_modify WHERE cr_id = '" . $cr_id . "'";
                $res = $db->query($sqlStmt);
                if (DB::isError($res)) die ("$PHP_SELF: <br>$sqlStmt<br>" . $res->getMessage());
             endif;
         endif;
         */


         // ***********
         // * LOGGING *
         // ***********
         
         // Get usr_id of the current employee (session)
         $currentSessionUsrId = getFieldValueFromId("employee", "emp_id", $emp_id, "usr_id");
      
         // Loose Ranking yes/no
         $looseRanking = "NO";
         // 07.06.2024 CA: Kein "Ranking verloren" wen alte PLZ leer war!"
         if ($updateRankingTime && $crLocationZipcode != "" && is_numeric($crLocationZipcode)) : $looseRanking = "YES"; endif;
               
         // Write logdata into log database
         writeToLogDB("27",$hq_id,"0",$currentSessionUsrId,$cr_id,$f_cr_sid,"","LONG=".$longitude."|LAT=".$latitude."|ZIP_REAL=".$zipcode."|ZIP_FREE=".$crLocationZipcode."|NO=".$msisdn."|LRANK=".$looseRanking."|LMODE=".$constLocatingMode."|LOCOLD=".($locatingStateArray[0] == "0" ? "NO" : "YES"));


         // ********************
         // * Close connection *
         // ********************

         $requestID++;
         $requestConnectionRelease = "<MESSAGE_TYPE=3><REQUEST_ID=" . $requestID . "><SESSION_HANDLE=" . $sessionHandle . ">";

         $laenge = strlen($requestConnectionRelease);
         $requestheader = $requestheaderOrg;
         $requestheader = str_replace ("LENGTH", $laenge, $requestheader);
         if ($echoEnabled) : echo $requestheader.$requestConnectionRelease . "<br><br><br>"; endif;

         // Connect Release
         // $response = connectD2($requestheader.$requestConnectionRelease."\r\n");
         
      endif;
   endif;
endif;
?>


<html lang="de">

<head>
<title>ORTUNG</title>
<link rel="stylesheet" type="text/css" href="../css/phoenix.css"> 
</head>


<body onLoad="this.moveTo((screen.width * 0.5)-(document.body.offsetWidth * 0.5),(screen.height * 0.5)-(document.body.offsetHeight * 0.5));">

  <form action="<?php echo $locatingURL ?>" method="post">
  <input type="hidden" name="f_cr_sid" value="<?php echo $f_cr_sid ?>">
  <input type="hidden" name="useRemoteDB" value="<?php echo $useRemoteDB ?>">

  <div valign="center" align="center">  
    <table cellspacing="0" cellpadding="0" vspace="0" hspace="0">	  	  	  	  	  
	 <tr>
     <td align="center" valign="center">
       <br><h2><b>Kurier: <?php echo $f_cr_sid?></b></h2><br>
	     <?php echo $status_message ?>
	     <br><br>
	     <?php echo ($outputOfAllValidZipcodes != "" ? $outputOfAllValidZipcodes . "<br><br>" : "") ?>
       <input type="submit" value="Wiederholen">
       <!-- <br><br>
	     <input type="button" value="Schließen" onClick="javascript:window.close();"> -->
	  </td>
	</tr>
    </table>
  </div>

  </form>

</body>

</html>
