<?php

include_once(dirname(__FILE__).'/Database.php');
include_once(dirname(__FILE__).'/Base.php');
include_once(dirname(__FILE__).'/system.php');
include_once(dirname(__FILE__).'/Update.php');
include_once(dirname(__FILE__).'/Page.php');
if(file_exists(dirname(__FILE__).'/config.php')) 
  include_once(dirname(__FILE__).'/config.php');
include_once(dirname(__FILE__).'/Version.php');
include_once(dirname(__FILE__).'/AppModule.php');

// Include application modules
// TODO: Make modules configurable
include_once(dirname(__FILE__).'/../Modules/Error/Error.php');
include_once(dirname(__FILE__).'/../Modules/Log/Log.php');
include_once(dirname(__FILE__).'/../Modules/Translation/Translation.php');
include_once(dirname(__FILE__).'/../Modules/AoWoW/AoWoW.php');
include_once(dirname(__FILE__).'/../Modules/Referrer/Referrer.php');
include_once(dirname(__FILE__).'/../Modules/Team/Team.php');
include_once(dirname(__FILE__).'/../Modules/User/User.php');
include_once(dirname(__FILE__).'/../Modules/Dictionary/Dictionary.php');
include_once(dirname(__FILE__).'/../Modules/Import/Import.php');
include_once(dirname(__FILE__).'/../Modules/Export/Export.php');
include_once(dirname(__FILE__).'/../Modules/Server/Server.php');
include_once(dirname(__FILE__).'/../Modules/ClientVersion/ClientVersion.php');
include_once(dirname(__FILE__).'/../Modules/ShoutBox/ShoutBox.php');
include_once(dirname(__FILE__).'/../Modules/News/News.php');
include_once(dirname(__FILE__).'/../Modules/Wiki/Wiki.php');
include_once(dirname(__FILE__).'/../Modules/Search/Search.php');
include_once(dirname(__FILE__).'/../Modules/FrontPage/FrontPage.php');


// Back compatibility, will be removed
if(isset($InitSystem) and $InitSystem)
{
  $System = new System();
  $System->DoNotShowPage = true;
	$System->Run();
  $User = $System->User; // Back compatibility, will be removed
}

class TempPage extends Page
{
	function Show()
	{
		global $TempPageContent;
		return($TempPageContent);
	}
}
function ShowPage($Content)
{
	global $TempPageContent, $System;

	$TempPage = new TempPage($System);
	$System->Pages['temporary-page'] = 'TempPage';
	$_SERVER['REDIRECT_QUERY_STRING'] = 'temporary-page';
	$TempPageContent = $Content;
	$System->PathItems = ProcessURL();
	$System->ShowPage();
}


function GetMicrotime()
{
  list($Usec, $Sec) = explode(' ', microtime());
  return ((float)$Usec + (float)$Sec);
}

$UnitNames = array('B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB');
 
function HumanSize($Value)
{
  global $UnitNames;

  $UnitIndex = 0;
  while($Value > 1024)
  {
    $Value = round($Value / 1024, 3);
    $UnitIndex++;
  }
  return($Value.' '.$UnitNames[$UnitIndex]);
}

function GetQueryStringArray($QueryString)
{
  $Result = array();
  $Parts = explode('&', $QueryString);
  foreach($Parts as $Part)
  {
    if($Part != '')
    {
      if(!strpos($Part, '=')) $Part .= '=';
      $Item = explode('=', $Part);
      $Result[$Item[0]] = $Item[1];
    }
  }
  return($Result);
}

function SetQueryStringArray($QueryStringArray)
{
  $Parts = array();
  foreach($QueryStringArray as $Index => $Item)
  {
    $Parts[] = $Index.'='.$Item;
  }
  return(implode('&', $Parts));
}

function utf2ascii($text)
{
  $return = Str_Replace(
    Array("á","č","ď","é","ě","í","ľ","ň","ó","ř","š","ť","ú","ů","ý","ž","Á","Č","Ď","É","Ě","Í","Ľ","Ň","Ó","Ř","Š","Ť","Ú","Ů","Ý","Ž") ,
    Array("a","c","d","e","e","i","l","n","o","r","s","t","u","u","y","z","A","C","D","E","E","I","L","N","O","R","S","T","U","U","Y","Z") ,
    $text);
  //$return = Str_Replace(Array(" ", "_"), "-", $return); //nahradí mezery a podtržítka pomlčkami
  //$return = Str_Replace(Array("(",")",".","!",",","\"","'"), "", $return); //odstraní ().!,"'
  //$return = StrToLower($return); // velká písmena nahradí malými.
  return($return);
}

function getmonthyears($Days) 
{
  $month = floor($Days / 30);
  $year = floor($month / 12);
  $Days = floor($Days - $month * 30);
  $month = $month - $year * 12; 
  return($year.'r '.$month.'m '.$Days.'d');
}

function GetPageList($TotalCount)
{
  global $System;
    
  $QueryItems = GetQueryStringArray($_SERVER['QUERY_STRING']);
  
  $ItemPerPage = $System->Config['Web']['ItemsPerPage'];
  $Around = round($System->Config['Web']['VisiblePagingItems'] / 2);
  $Result = '';
  $PageCount = floor($TotalCount / $ItemPerPage) + 1;
  
  if(!array_key_exists('Page', $_SESSION)) $_SESSION['Page'] = 0;
  if(array_key_exists('page', $_GET)) $_SESSION['Page'] = $_GET['page'] * 1;
  if($_SESSION['Page'] < 0) $_SESSION['Page'] = 0;
  if($_SESSION['Page'] >= $PageCount) $_SESSION['Page'] = $PageCount - 1;
  $CurrentPage = $_SESSION['Page'];
  
        
  $Result .= 'Počet položek: <strong>'.$TotalCount.'</strong> &nbsp; Stránky: ';

  $Result = '';
  if($PageCount > 1)
  {
    if($CurrentPage > 0) 
    {
      $QueryItems['page'] = 0;      
      $Result.= '<a href="?'.SetQueryStringArray($QueryItems).'">&lt;&lt;</a> ';
      $QueryItems['page'] = ($CurrentPage - 1);
      $Result.= '<a href="?'.SetQueryStringArray($QueryItems).'">&lt;</a> ';
    }
    $PagesMax = $PageCount - 1;
    $PagesMin = 0;
    if($PagesMax > ($CurrentPage + $Around)) $PagesMax = $CurrentPage + $Around;
    if($PagesMin < ($CurrentPage - $Around))
    {
      $Result.= ' ... ';
      $PagesMin = $CurrentPage - $Around;
    }
    for($i = $PagesMin; $i <= $PagesMax; $i++)
    {
      if($i == $CurrentPage) $Result.= '<strong>'.($i + 1).'</strong> ';
      else {
       $QueryItems['page'] = $i;
       $Result .= '<a href="?'.SetQueryStringArray($QueryItems).'">'.($i + 1).'</a> ';
      }
    } 
    if($PagesMax < ($PageCount - 1)) $Result .= ' ... ';
    if($CurrentPage < ($PageCount - 1)) 
    {
      $QueryItems['page'] = ($CurrentPage + 1);
      $Result.= '<a href="?'.SetQueryStringArray($QueryItems).'">&gt;</a> ';
      $QueryItems['page'] = ($PageCount - 1);
      $Result.= '<a href="?'.SetQueryStringArray($QueryItems).'">&gt;&gt;</a>';
    }
  }
  $Result = '<div style="text-align: center">'.$Result.'</div>';
  return(array('SQLLimit' => ' LIMIT '.$CurrentPage * $ItemPerPage.', '.$ItemPerPage, 
    'Page' => $CurrentPage,
    'Output' => $Result,
  ));
}

$OrderDirSQL = array('ASC', 'DESC');
$OrderArrowImage = array('sort_asc.png', 'sort_desc.png');

function GetOrderTableHeader($Columns, $DefaultColumn, $DefaultOrder = 0)
{
  global $OrderDirSQL, $OrderArrowImage, $Config, $System;
  
  if(array_key_exists('OrderCol', $_GET)) $_SESSION['OrderCol'] = $_GET['OrderCol'];
  if(array_key_exists('OrderDir', $_GET) and (array_key_exists($_GET['OrderDir'], $OrderArrowImage))) 
  	$_SESSION['OrderDir'] = $_GET['OrderDir'];
  if(!array_key_exists('OrderCol', $_SESSION)) $_SESSION['OrderCol'] = $DefaultColumn;
  if(!array_key_exists('OrderDir', $_SESSION)) $_SESSION['OrderDir'] = $DefaultOrder;  
  
  // Check OrderCol
  $Found = false;
  foreach($Columns as $Column)
  {
    if($Column['Name'] == $_SESSION['OrderCol'])
    {
      $Found = true;    
      break;
    }
  }
  if($Found == false)
  {
    $_SESSION['OrderCol'] = $DefaultColumn;
    $_SESSION['OrderDir'] = $DefaultOrder;
  }
  // Check OrderDir
  if(($_SESSION['OrderDir'] != 0) and ($_SESSION['OrderDir'] != 1)) $_SESSION['OrderDir'] = 0;
  
  $Result = '';
  $QueryItems = GetQueryStringArray($_SERVER['QUERY_STRING']);
  foreach($Columns as $Index => $Column)
  {
    $QueryItems['OrderCol'] = $Column['Name'];
    $QueryItems['OrderDir'] = 1 - $_SESSION['OrderDir'];
    if($Column['Name'] == $_SESSION['OrderCol']) $ArrowImage = '<img  style="vertical-align: middle; border: 0px;" src="'.
      $System->Link('/images/'.$OrderArrowImage[$_SESSION['OrderDir']]).'" alt="order arrow">';
      else $ArrowImage = '';
    if($Column['Name'] == '') $Result .= '<th>'.$Column['Title'].'</th>';
      else $Result .= '<th><a href="?'.SetQueryStringArray($QueryItems).'">'.$Column['Title'].$ArrowImage.'</a></th>';
  }
  return(array(
    'SQL' => ' ORDER BY `'.$_SESSION['OrderCol'].'` '.$OrderDirSQL[$_SESSION['OrderDir']],
    'Output' => '<tr>'.$Result.'</tr>',
    'Column' => $_SESSION['OrderCol'],
    'Direction' => $_SESSION['OrderDir'],
  ));
}

function ClientVersionSelection($Selected)
{
  global $System;
  
  $Output = '<select name="ClientVersion">';
  $DbResult = $System->Database->select('ClientVersion', '`Id`, `Version`', '`Imported` = 1');
  $Output .= '<option value=""'; 
  if($Selected == '') 
    $Output .= ' selected="selected"';
  $Output .= '>Žádná</option>';
  while($ClientVersion = $DbResult->fetch_assoc())
  {
    $Output .= '<option value="'.$ClientVersion['Id'].'"'; 
    if($Selected == $ClientVersion['Id']) 
      $Output .= ' selected="selected"';
    $Output .= '>'.$ClientVersion['Version'].'</option>';
  }    
  $Output .= '</select>';
  return($Output);    
}

function GetLanguageList()
{ 
  global $System;
  
  $Result = array();
  $DbResult = $System->Database->query('SELECT * FROM `Language` WHERE `Enabled` = 1');
  while($DbRow = $DbResult->fetch_assoc())
    $Result[$DbRow['Id']] = $DbRow;
  return($Result);
}

function GetTranslationTree()
{ 
  global $System;
  
  $Result = array();
  $DbResult = $System->Database->query('SELECT *, UNIX_TIMESTAMP(`LastImport`) AS `LastImportTime` FROM `Group` ORDER BY `Name`');
  while($DbRow = $DbResult->fetch_assoc())
  {
    $DbRow['Items'] = array();
    $Result[$DbRow['Id']] = $DbRow;
  }
  $DbResult = $System->Database->query('SELECT * FROM `GroupItem` ORDER BY `Group`, `Sequence`');
  while($DbRow = $DbResult->fetch_assoc())
  {
    $Result[$DbRow['Group']]['Items'][] = $DbRow;
  }
  return($Result);
}

$Moderators = array('Překladatel', 'Moderátor', 'Administrátor');

function HumanDate($SQLDateTime)
{
  $DateTimeParts = explode(' ', $SQLDateTime);
  if($DateTimeParts[0] != '0000-00-00')
  {
    $DateParts = explode('-', $DateTimeParts[0]);
    return(($DateParts[2] * 1).'.'.($DateParts[1] * 1).'.'.($DateParts[0] * 1));
  } else return('&nbsp;');
}

function HumanDateTime($SQLDateTime)
{
  $DateTimeParts = explode(' ', $SQLDateTime);
  if($DateTimeParts[0] != '0000-00-00')
  {
    $DateParts = explode('-', $DateTimeParts[0]);
    $Output = ($DateParts[2] * 1).'.'.($DateParts[1] * 1).'.'.($DateParts[0] * 1);
  } else $Output = '&nbsp;';
  if(count($DateTimeParts) > 1)
  if($DateTimeParts[1] != '00:00:00')
  {
    $TimeParts = explode(':', $DateTimeParts[1]);
    $Output .= ' '.($TimeParts[0] * 1).':'.($TimeParts[1] * 1).':'.($TimeParts[2] * 1);
  };
  return($Output);
}

function FollowingTran($TextID, $Table, $GroupId, $Prev = false) 
{ 
  global $System, $Config;
  
  if($Prev)
    $sql = 'SELECT `ID` FROM `'.$Table.'` AS `item` WHERE '.
      '(`Language` = '.$Config['OriginalLanguage'].') AND NOT EXISTS(SELECT `entry` '.
      'FROM `'.$Table.'` AS `sub` WHERE (`sub`.`Language` <> '.$Config['OriginalLanguage'].') '.
      'AND (`sub`.`entry` = `item`.`entry`)) AND (`ID` < '.$TextID.') ORDER BY `ID` DESC LIMIT 1';
    else $sql = 'SELECT `ID` FROM `'.$Table.'` AS `item` WHERE '.
      '(`Language` = '.$Config['OriginalLanguage'].') AND NOT EXISTS(SELECT `entry` '.
      'FROM `'.$Table.'` AS `sub` WHERE (`sub`.`Language` <> '.$Config['OriginalLanguage'].') '.
      'AND (`sub`.`entry` = `item`.`entry`)) AND `ID` > '.$TextID.' ORDER BY `ID` LIMIT 1';
  
  $DbResult = $System->Database->query($sql);
  $Next = $DbResult->fetch_assoc();
  if($Next) 
  {
    if($Prev) $Output = '<a href="form.php?group='.$GroupId.'&amp;ID='.$Next['ID'].'">Předcházející '.$Next['ID'].'</a> ';
    else $Output = '<a href="form.php?group='.$GroupId.'&amp;ID='.$Next['ID'].'">Následující '.$Next['ID'].'</a> ';
      return('form.php?group='.$GroupId.'&amp;ID='.$Next['ID']);
  }
}

function GetBuildNumber($Version)
{
  global $System, $BuildNumbers;
  
  if(isset($BuildNumbers[$Version]) == false) 
  {
    $sql = 'SELECT `BuildNumber` FROM `ClientVersion` WHERE `Version` = "'.$Version.'"';
    $DbResult = $System->Database->query($sql);
    $DbRow = $DbResult->fetch_assoc();
    $BuildNumbers[$Version] = $DbRow['BuildNumber'];
  }
  return($BuildNumbers[$Version]);
}

function GetVersionWOW($BuildNumber)
{
  global $System, $VersionsWOW;
  
  if(isset($VersionsWOW[$BuildNumber]) == false) 
  {
    $sql = 'SELECT `Version` FROM `ClientVersion` WHERE `BuildNumber` = "'.$BuildNumber.'"';
    $DbResult = $System->Database->query($sql);
    $Version = $DbResult->fetch_assoc();
    $VersionsWOW[$BuildNumber] = $Version['Version'];
  }
  return($VersionsWOW[$BuildNumber]);
}

function LoadGroupIdParameter()
{
  global $TranslationTree;
  
  if(array_key_exists('group', $_GET)) $GroupId = $_GET['group'] * 1; 
    else $GroupId = 1;
  
  if(isset($TranslationTree[$GroupId]) == false) ErrorMessage('Překladová skupina dle zadaného Id neexistuje.');
  return($GroupId);
}

function LoadCommandLineParameters()
{
  if(!array_key_exists('REMOTE_ADDR', $_SERVER))
  {
    foreach($_SERVER['argv'] as $Parameter)
    {
      if(strpos($Parameter, '=') !== false)
      {
        $Index = substr($Parameter, 0, strpos($Parameter, '='));
        $Parameter = substr($Parameter, strpos($Parameter, '=') + 1);
        //echo($Index.'  ----  '.$Parameter);
        $_GET[$Index] = $Parameter;
      }
    } 
  }
}

function ShowTabs($Tabs)
{
  $QueryItems = GetQueryStringArray($_SERVER['QUERY_STRING']);
  
  if(array_key_exists('Tab', $_GET)) $_SESSION['Tab'] = $_GET['Tab'];
  if(!array_key_exists('Tab', $_SESSION)) $_SESSION['Tab'] = 0;
  if(($_SESSION['Tab'] < 0) or ($_SESSION['Tab'] > (count($Tabs) - 1))) $_SESSION['Tab'] = 0;
  $Output = '<div id="header">'.
    '<ul>';
  foreach($Tabs as $Index => $Tab)
  {
    $QueryItems['Tab'] = $Index;
    if($Index == $_SESSION['Tab']) $Selected = ' id="selected"'; 
      else $Selected = '';
    $Output .= '<li'.$Selected.'><a href="?'.SetQueryStringArray($QueryItems).'">'.$Tab.'</a></li>';
  }
  $Output .= '</ul></div>';
  return($Output);
}

function CheckBox($Name, $Checked = false, $Id = '', $Class = '', $Disabled = false)
{
  if($Id) $Id = ' id="'.$Id.'"'; else $Id = '';
  if($Class) $Class = ' class="'.$Class.'"'; else $Class = '';
  if($Checked) $Checked = ' checked="checked"'; else $Checked = '';
  if($Disabled) $Disabled = ' disabled="disabled"'; else $Disabled = '';
  return('<input type="checkbox" value="checked" name="'.$Name.'"'.$Checked.$Disabled.$Id.$Class.' />');
}

function RadioButton($Name, $Value, $Checked = false, $OnClick = '', $Disabled = false)
{
  if($Checked) $Checked = ' checked="checked"'; else $Checked = '';
  if($OnClick != '') $OnClick = ' onclick="'.$OnClick.'"'; else $OnClick = '';
  if($Disabled) $Disabled = ' disabled="disabled"'; else $Disabled = '';
  return('<input type="radio" name="'.$Name.'" value="'.$Value.'"'.$Checked.$Disabled.$OnClick.'/>');
}

function SelectOption($Name, $Text, $Selected = false)
{
  if($Selected) $Selected = ' selected="selected"'; else $Selected = '';
  return('<option value="'.$Name.'"'.$Selected.'>'.$Text.'</option>');
}

function DeleteDirectory($dirname) 
{
  if(is_dir($dirname))
  {
    $dir_handle = opendir($dirname);
    if(!$dir_handle) return(false);
    while($file = readdir($dir_handle)) 
    {
      if(($file != '.') and ($file != '..'))
      {
        if(!is_dir($dirname.'/'.$file)) unlink($dirname.'/'.$file);
          else DeleteDirectory($dirname.'/'.$file);    
      }
    }
    closedir($dir_handle);
    rmdir($dirname);
  }
  return(true);
}

function ErrorMessage($Text)
{
  ShowPage($Text);
  die();
}

function GetIDbyName($Table) 
{
  global $TranslationTree;
  
  foreach($TranslationTree as $TableID => $Value) 
  {
    if($Value['TablePrefix'] == $Table) return $TableID;
  }
}

function GetTranslatNames($Text,$mode,$TablesColumn) 
{
  global $System, $Config;
  
 /* $TablesID = array('gameobject' => 5,
  'creature' => 6,
  'item' => 4,
  'transports' => 'Name',
  'areatrigger_teleport' => 'Name',
  'areatrigger_tavern' => 'Name',); */
    $buff = array();
  
  foreach($TablesColumn as $Table => $Column) 
  {  
    $sql = 'SELECT `ID`,`'.$Column.'`, (SELECT `'.$Column.'` FROM `'.$Table.'` AS `T` WHERE '.
      '(`O`.`Entry` = `T`.`Entry`) AND (`Language` <> '.$Config['OriginalLanguage'].') LIMIT 1) AS `Tran` FROM `'.$Table.'` AS `O` WHERE ';
    $groupby = ' GROUP BY `'.$Column.'`';
  
    $ArrStr = explode(' ', $Text);
    $where = '(`Language` = '.$Config['OriginalLanguage'].') ';
    if ($mode == 1) $where .= ' AND EXISTS(SELECT 1 FROM `'.$Table.'` AS `Sub` WHERE (`Sub`.`Language` <> '.$Config['OriginalLanguage'].') AND (`Sub`.`Entry` = `O`.`Entry`))';
    if ($mode == 2) $where .= ' AND NOT EXISTS(SELECT 1 FROM `'.$Table.'` AS `Sub` WHERE (`Sub`.`Language` <> '.$Config['OriginalLanguage'].') AND (`Sub`.`Entry` = `O`.`Entry`))';
    $where .= ' AND ('; 
    
    $SqlOK = false;
    if (count($ArrStr) > 0) {
      for($i = 0; $i < count($ArrStr); $i++)
      {
        if (strpos($ArrStr[$i],"'s") > 0)
       $ArrStr[$i] = substr($ArrStr[$i],0,strlen($ArrStr[$i])-2);
        if (strpos($ArrStr[$i],',') > 0) $ArrStr[$i] = substr($ArrStr[$i],0,strlen($ArrStr[$i])-1);
        if (strpos($ArrStr[$i],'.') > 0) $ArrStr[$i] = substr($ArrStr[$i],0,strlen($ArrStr[$i])-1);
        if (strpos($ArrStr[$i],'!') > 0) $ArrStr[$i] = substr($ArrStr[$i],0,strlen($ArrStr[$i])-1);
        if (strpos($ArrStr[$i],'?') > 0) $ArrStr[$i] = substr($ArrStr[$i],0,strlen($ArrStr[$i])-1);

        if (strlen($ArrStr[$i]) > 4) {
          $where .= '(`O`.`'.$Column.'` LIKE "%'.addslashes($ArrStr[$i]).'%") OR ';
          $SqlOK = true;
      }
      }
      $where = substr($where, 0, strlen($where) - 4);
      $where .= ')';
      if ($SqlOK) {
        $DbResult = $System->Database->query($sql.$where.$groupby);
    //  echo ($sql.'|'.$where.'|'.$groupby);
        while($Line = $DbResult->fetch_assoc()) 
        {
          $buff[] = array($Line['ID'], GetIDbyName($Table), $Line[$Column], $Line['Tran']);
        }
    }
    }
  }
    return $buff;
}

function ProgressBar($Width, $Percent, $Text = '')
{
  $Pixels = $Width * ($Percent / 100);
  if($Pixels > $Width) $Pixels = $Width;
  if($Text == '') $Text = $Percent;
  
  return('<div class="progressbar" style="width: '.$Width.'px">'.
    '<div class="bar" style="width: '.$Pixels.'px;"></div>'.  
    '<div class="text" style="width: '.$Width.'px">'.$Text.'</div>'.  
    '</div>');
}

function GetLevelMinMax($XP)
{
  $IndexLevel = 100;
  
  if($XP > 0) $Level = floor(sqrt($XP / $IndexLevel));
    else $Level = 0;
  $MinXP = $Level * $Level * $IndexLevel;
  $MaxXP = ($Level + 1) * ($Level + 1) * $IndexLevel;
  $MaxXP = $MaxXP - $MinXP;
  $XP = $XP - $MinXP;
  return(array('Level' => $Level, 'XP' => $XP, 'MaxXP' => $MaxXP));
}

function GetParameter($Name, $Default = '', $Numeric = false, $Session = false)
{
  $Result = $Default;
  if(array_key_exists($Name, $_GET)) $Result = $_GET[$Name];
  else if(array_key_exists($Name, $_POST)) $Result = $_POST[$Name];
  else if($Session and array_key_exists($Name, $_SESSION)) $Result = $_SESSION[$Name];
  if($Numeric and !is_numeric($Result)) $Result = $Default;
  if($Session) $_SESSION[$Name] = $Result;
  return($Result);
}

function MakeActiveLinks($Content)
{
  $Content = htmlspecialchars($Content);
  $Content = str_replace("\n", ' <br/>', $Content);
  $Content = str_replace("\r", '', $Content);
  
  $Result = '';  
  $I = 0;
  while(strpos($Content, 'http://') !== false)
  {
    $I = strpos($Content, 'http://');
    $Result .= substr($Content, 0, $I);
    $Content = substr($Content, $I);
    $SpacePos = strpos($Content, ' ');
    if($SpacePos !== false) $URL = substr($Content, 0, strpos($Content, ' '));
      else $URL = substr($Content, 0);
    
    $Result .= '<a href="'.$URL.'">'.$URL.'</a>';
    $Content = substr($Content, strlen($URL));
  }
  $Result .= $Content;
  return($Result);
}

define('MESSAGE_WARNING', 0);
define('MESSAGE_CRITICAL', 1);
define('MESSAGE_INFORMATION', 2);

function ShowMessage($Text, $Type = MESSAGE_INFORMATION)
{
  global $System;
  
  $IconName = array(
	  MESSAGE_INFORMATION => 'information', 
    MESSAGE_WARNING => 'warning', 
    MESSAGE_CRITICAL => 'critical'
  );
  $BackgroundColor = array(
  	MESSAGE_INFORMATION => '#e0e0ff', 
    MESSAGE_WARNING => '#ffffe0', 
  	MESSAGE_CRITICAL => '#ffe0e0'
  );
  
  return('<div class="message" style="background-color: '.$BackgroundColor[$Type].
  	';"><table><tr><td class="icon"><img src="'.
  	$System->Link('/images/message/'.$IconName[$Type].'.png').'" alt="'.
  	$IconName[$Type].'"><td>'.$Text.'</td></tr></table></div>');
}

function ProcessURL()
{
	if(array_key_exists('REDIRECT_QUERY_STRING', $_SERVER))
		$PathString = $_SERVER['REDIRECT_QUERY_STRING'];
	else $PathString = '';
	if(substr($PathString, -1, 1) == '/') $PathString = substr($PathString, 0, -1);
	$PathItems = explode('/', $PathString);
	if(strpos($_SERVER['REQUEST_URI'], '?') !== false)
		$_SERVER['QUERY_STRING'] = substr($_SERVER['REQUEST_URI'], strpos($_SERVER['REQUEST_URI'], '?') + 1);
	else $_SERVER['QUERY_STRING'] = '';
	parse_str($_SERVER['QUERY_STRING'], $_GET);
	return($PathItems);
}

function WriteLanguages($Selected)
{
	global $System;

	$Output = '<select name="Language">';
	$DbResult = $System->Database->select('Language', '`Id`, `Name`', '`Enabled` = 1');
	while($Language = $DbResult->fetch_assoc())
	{
		$Output .= '<option value="'.$Language['Id'].'"';
		if($Selected == $Language['Id'])
			$Output .= ' selected="selected"';
		$Output .= '>'.$Language['Name'].'</option>';
	}
	$Output .= '</select>';
	return($Output);
}
