<?php

/**
 *
 */

define('CONTROLLER_FILE', 'bootstrap.php');
define('DB_MINIMALE_LAENGE_EINZELELEMENTE', 10);
define('DB_MAXIMALE_LAENGE_EINZELELEMENTE', 255);
define('DB_MINIMALE_LAENGE_SEOURL', 10);
define('DB_MAXIMALE_LAENGE_SEOURL', 510);

define('SEOURL_TYPE_KATEGORIE', '1');
define('SEOURL_TYPE_ARTIKEL', '2');
define('SEOURL_TYPE_HERSTELLER', '3');
define('SEOURL_TYPE_MENUE', '4');
define('SEOURL_TYPE_CMS_KATEGORIE', '5');
define('SEOURL_TYPE_AKTION', '6');

function ActionTruncateDatabase($ActionID) {

    // Sicherheitszähler zurück setzten
    SaveKeyValueEinstellungen('seo', 'sprechende_urls_sicherheitszahl', 1);

    // SEO URL Tabele leeren
    TruncateSEOURLTable();
    
    // SEO Name für alle Kategorien zurücksetzen
    UnsetAllKategorieSEOName();
    
    // SEO Name für alle Artikel zurücksetzen
    UnsetAllArtikelSEOName();
    
    // SEO Name für alle Hersteller zurücksetzen
    UnsetAllHerstellerSEOName();

    // SEO Name für alle Menüpunkte zurücksetzen
    UnsetAllMenueSEOName();
    
    // SEO Name für alle CMS Kategorien zurücksetzen
    UnsetAllCMSKategorieSEOName();
    
    // SEO Name für alle Aktionen zurücksetzen
    UnsetAllAktionenSEOName();
    
    $ReturnValue['action_status'] = 'success';
    $ReturnValue['action_message'] = 'Es wurden alle Informationen zu den sprechenden URLs aus der Datenbank entfernt';
    
    return $ReturnValue;
    
}

function ActionSetSEOName($ActionID) {
	
    // SEO Name für alle Kategorien setzen
    SetAllKategorieSEOName();

    // SEO Name für alle Artikel setzen
    SetAllArtikelSEOName();

    // SEO Name für alle Hersteller setzen
    SetAllHerstellerSEOName();

    // SEO Name für alle eigenen Menüpunkte setzen
    SetAllMenueSEOName();

    // SEO Name für alle CMS Kategorien setzen
    SetAllCMSKategorieSEOName();

    // SEO Name für alle Aktionen setzen
    SetAllAktionenSEOName();

    $ReturnValue['action_status'] = 'success';
    $ReturnValue['action_message'] = 'Es wurden alle Namen für die sprechenden URLs definiert';
    
    return $ReturnValue;
	
}

function ActionSetAllKategorieSEOURL($ActionID, $ActionDataLimit) {

	// alle Kategorien suchen und in der Session ablegen
	if (!$_SESSION['action'][$ActionID]['action_data_max']) {

		$KategorieIDArray = ActionGetAllKategorieIDArray();
        $LanguageIDArray = ActionGetAllLanguageIDArray();
        
        foreach ($LanguageIDArray as $LanguageID) {
        	
        	foreach ($KategorieIDArray as $KategorieID) {

                $KategorieArrayElement['kategorie_id'] = $KategorieID; 		        		  
                $KategorieArrayElement['language_id'] = $LanguageID;

                $KategorieArray[] = $KategorieArrayElement;
                
        	}
        	
        }
		
        $_SESSION['action'][$ActionID]['action_data_max'] = count($KategorieArray);
        $_SESSION['action'][$ActionID]['kategorie_array'] = $KategorieArray;
        $_SESSION['action'][$ActionID]['action_data_counter'] = 0;
        
	}
	
	$KategorieArray = $_SESSION['action'][$ActionID]['kategorie_array'];
	
	// der Limierung entsprechend die Kategorien setzen
	for ($Counter = ($_SESSION['action'][$ActionID]['action_data_counter'] + 1); $Counter <= ($_SESSION['action'][$ActionID]['action_data_counter'] + $ActionDataLimit); $Counter++) {
        if ($KategorieArray[$Counter - 1]) {
            SetKategorieSEOURLs($KategorieArray[$Counter - 1]['kategorie_id'], $KategorieArray[$Counter - 1]['language_id'], false);
        }
	}
	
	// Limitierung erhöhen
	$_SESSION['action'][$ActionID]['action_data_counter'] += $ActionDataLimit;
	
	$ActionDataMax = $_SESSION['action'][$ActionID]['action_data_max'];
	$ActionDataAct = $_SESSION['action'][$ActionID]['action_data_counter'];
	
	if ($ActionDataAct >= $ActionDataMax) {
		$ActionStatus = 'success';
	} else {
        $ActionStatus = 'proceed';
    }
	
    $ReturnValue['action_status'] = $ActionStatus;
    $ReturnValue['action_data_max'] = $ActionDataMax;
    $ReturnValue['action_data_act'] = $ActionDataAct;
    
    return $ReturnValue;
	
}

function ActionGetAllLanguageIDArray() {
	
	$LanguageIDArray = array();
	
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_LANGUAGE . '.language_id ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_LANGUAGE . ' ';
    $SQLString .= 'WHERE ';
    $SQLString .= "(";
    $SQLString .= '(' . TABLE_LANGUAGE . '.language_active = 1) AND ';
    $SQLString .= " 1)";
	    
    $MySQLQueryReference = errorlogged_mysql_query($SQLString);
    
    while ($LanguageRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {

        $LanguageIDArray[] = $LanguageRow['language_id'];
        
    }
    
    
    return $LanguageIDArray;

}

function ActionGetAllKategorieIDArray() {

	$KategorieIDArray = array();
	
	$SQLString = 'SELECT ';
    $SQLString .= TABLE_KATEGORIE . '.id ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_KATEGORIE . ' ';
    
	$MySQLQueryReference = errorlogged_mysql_query($SQLString);
	
	while ($KategorieRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {

        $KategorieIDArray[] = $KategorieRow['id'];
		
	}
    
    
	return $KategorieIDArray;
	
}

function ActionSetAllArtikelSEOURL($ActionID, $ActionDataLimit) {

    // alle Artikel suchen und in der Session ablegen
    if (!$_SESSION['action'][$ActionID]['action_data_max']) {

        $ArtikelIDArray = ActionGetAllArtikelIDArray();
        $LanguageIDArray = ActionGetAllLanguageIDArray();
        
        foreach ($LanguageIDArray as $LanguageID) {
            
            foreach ($ArtikelIDArray as $ArtikelID) {

                $ArtikelArrayElement['artikel_id'] = $ArtikelID;                        
                $ArtikelArrayElement['language_id'] = $LanguageID;

                $ArtikelArray[] = $ArtikelArrayElement;
                
            }
            
        }
        
        $_SESSION['action'][$ActionID]['action_data_max'] = count($ArtikelArray);
        $_SESSION['action'][$ActionID]['artikel_array'] = $ArtikelArray;
        $_SESSION['action'][$ActionID]['action_data_counter'] = 0;
        
    }
    
    $ArtikelArray = $_SESSION['action'][$ActionID]['artikel_array'];
    
    // der Limierung entsprechend die Artikel setzen
    for ($Counter = ($_SESSION['action'][$ActionID]['action_data_counter'] + 1); $Counter <= ($_SESSION['action'][$ActionID]['action_data_counter'] + $ActionDataLimit); $Counter++) {
    	if ($ArtikelArray[$Counter - 1]) {
    	   SetArtikelSEOURLs($ArtikelArray[$Counter - 1]['artikel_id'], $ArtikelArray[$Counter - 1]['language_id'], false);
        }	    	   
    }
    
    // Limitierung erhöhen
    $_SESSION['action'][$ActionID]['action_data_counter'] += $ActionDataLimit;
    
    $ActionDataMax = $_SESSION['action'][$ActionID]['action_data_max'];
    $ActionDataAct = $_SESSION['action'][$ActionID]['action_data_counter'];
    
    if ($ActionDataAct > $ActionDataMax) {
        $ActionStatus = 'success';
    } else {
        $ActionStatus = 'proceed';
    }
    
    $ReturnValue['action_status'] = $ActionStatus;
    $ReturnValue['action_data_max'] = $ActionDataMax;
    $ReturnValue['action_data_act'] = $ActionDataAct;
    
    return $ReturnValue;
    
}

function ActionSetAllHerstellerSEOURL($ActionID, $ActionDataLimit) {

    // alle Hersteller suchen und in der Session ablegen
    if (!$_SESSION['action'][$ActionID]['action_data_max']) {

        $HerstellerIDArray = ActionGetAllHerstellerIDArray();
        $LanguageIDArray = ActionGetAllLanguageIDArray();
        
        foreach ($LanguageIDArray as $LanguageID) {
        
	        foreach ($HerstellerIDArray as $HerstellerID) {
	
	            $HerstellerArrayElement['hersteller_id'] = $HerstellerID;                        
                $HerstellerArrayElement['language_id'] = $LanguageID;                        
	            
	            $HerstellerArray[] = $HerstellerArrayElement;
	                
	        }
	        
        }
        
        $_SESSION['action'][$ActionID]['action_data_max'] = count($HerstellerArray);
        $_SESSION['action'][$ActionID]['hersteller_array'] = $HerstellerArray;
        $_SESSION['action'][$ActionID]['action_data_counter'] = 0;
        
    }
    
    $HerstellerArray = $_SESSION['action'][$ActionID]['hersteller_array'];
    
    // der Limierung entsprechend die Hersteller setzen
    for ($Counter = ($_SESSION['action'][$ActionID]['action_data_counter'] + 1); $Counter <= ($_SESSION['action'][$ActionID]['action_data_counter'] + $ActionDataLimit); $Counter++) {
        if ($HerstellerArray[$Counter - 1]) {
            SetHerstellerSEOURLs($HerstellerArray[$Counter - 1]['hersteller_id'], $HerstellerArray[$Counter - 1]['language_id'], false);
        }
    }
    
    // Limitierung erhöhen
    $_SESSION['action'][$ActionID]['action_data_counter'] += $ActionDataLimit;
    
    $ActionDataMax = $_SESSION['action'][$ActionID]['action_data_max'];
    $ActionDataAct = $_SESSION['action'][$ActionID]['action_data_counter'];
    
    if ($ActionDataAct >= $ActionDataMax) {
        $ActionStatus = 'success';
    } else {
        $ActionStatus = 'proceed';
    }
    
    $ReturnValue['action_status'] = $ActionStatus;
    $ReturnValue['action_data_max'] = $ActionDataMax;
    $ReturnValue['action_data_act'] = $ActionDataAct;
    
    return $ReturnValue;
    
}

function ActionGetAllHerstellerIDArray() {

	$HerstellerIDArray = array();
	
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_HERSTELLER . '.id ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_HERSTELLER . ' ';
    
    $MySQLQueryReference = errorlogged_mysql_query($SQLString);
    
    while ($HerstellerRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {

        $HerstellerIDArray[] = $HerstellerRow['id'];
        
    }
    
    
    return $HerstellerIDArray;
    
}

function ActionSetAllAktionenSEOURL($ActionID, $ActionDataLimit) {

    // alle Aktionen suchen und in der Session ablegen
    if (!$_SESSION['action'][$ActionID]['action_data_max']) {

        $AktionenIDArray = ActionGetAllAktionenIDArray();
        $LanguageIDArray = ActionGetAllLanguageIDArray();
        
        foreach ($LanguageIDArray as $LanguageID) {
        
            foreach ($AktionenIDArray as $AktionenID) {
    
                $AktionenArrayElement['aktionen_id'] = $AktionenID;                        
                $AktionenArrayElement['language_id'] = $LanguageID;                        
                
                $AktionenArray[] = $AktionenArrayElement;
                    
            }
            
        }
        
        $_SESSION['action'][$ActionID]['action_data_max'] = count($AktionenArray);
        $_SESSION['action'][$ActionID]['aktionen_array'] = $AktionenArray;
        $_SESSION['action'][$ActionID]['action_data_counter'] = 0;
        
    }
    
    $AktionenArray = $_SESSION['action'][$ActionID]['aktionen_array'];
    
    // der Limierung entsprechend die Hersteller setzen
    for ($Counter = ($_SESSION['action'][$ActionID]['action_data_counter'] + 1); $Counter <= ($_SESSION['action'][$ActionID]['action_data_counter'] + $ActionDataLimit); $Counter++) {
        if ($AktionenArray[$Counter - 1]) {
            SetAktionsSEOURLs($AktionenArray[$Counter - 1]['aktionen_id'], $AktionenArray[$Counter - 1]['language_id'], false);
        }
    }
    
    // Limitierung erhöhen
    $_SESSION['action'][$ActionID]['action_data_counter'] += $ActionDataLimit;
    
    $ActionDataMax = $_SESSION['action'][$ActionID]['action_data_max'];
    $ActionDataAct = $_SESSION['action'][$ActionID]['action_data_counter'];
    
    if ($ActionDataAct >= $ActionDataMax) {
        $ActionStatus = 'success';
    } else {
        $ActionStatus = 'proceed';
    }
    
    $ReturnValue['action_status'] = $ActionStatus;
    $ReturnValue['action_data_max'] = $ActionDataMax;
    $ReturnValue['action_data_act'] = $ActionDataAct;
    
    return $ReturnValue;
    
}

function ActionGetAllAktionenIDArray() {

	$AktionenIDArray = array();
	
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_AKTION . '.id ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_AKTION . ' ';
    
    $MySQLQueryReference = errorlogged_mysql_query($SQLString);
    
    while ($AktionenRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {

        $AktionenIDArray[] = $AktionenRow['id'];
        
    }
    
    
    return $AktionenIDArray;
    
}

function ActionSetAllMenueSEOURL($ActionID, $ActionDataLimit) {

    // alle Menüpunkte suchen und in der Session ablegen
    if (!$_SESSION['action'][$ActionID]['action_data_max']) {

        $MenueIDArray = ActionGetAllMenueIDArray();
        $LanguageIDArray = ActionGetAllLanguageIDArray();
        
        foreach ($LanguageIDArray as $LanguageID) {
        
            foreach ($MenueIDArray as $MenueID) {
    
                $MenueArrayElement['menue_id'] = $MenueID;                        
                $MenueArrayElement['language_id'] = $LanguageID;                        
                
                $MenueArray[] = $MenueArrayElement;
                    
            }
            
        }
        
        $_SESSION['action'][$ActionID]['action_data_max'] = count($MenueArray);
        $_SESSION['action'][$ActionID]['menue_array'] = $MenueArray;
        $_SESSION['action'][$ActionID]['action_data_counter'] = 0;
        
    }
    
    $MenueArray = $_SESSION['action'][$ActionID]['menue_array'];
    
    // der Limierung entsprechend die Hersteller setzen
    for ($Counter = ($_SESSION['action'][$ActionID]['action_data_counter'] + 1); $Counter <= ($_SESSION['action'][$ActionID]['action_data_counter'] + $ActionDataLimit); $Counter++) {
        if ($MenueArray[$Counter - 1]) {
            SetMenueSEOURLs($MenueArray[$Counter - 1]['menue_id'], $MenueArray[$Counter - 1]['language_id'], false);
        }
    }
    
    // Limitierung erhöhen
    $_SESSION['action'][$ActionID]['action_data_counter'] += $ActionDataLimit;
    
    $ActionDataMax = $_SESSION['action'][$ActionID]['action_data_max'];
    $ActionDataAct = $_SESSION['action'][$ActionID]['action_data_counter'];
    
    if ($ActionDataAct >= $ActionDataMax) {
        $ActionStatus = 'success';
    } else {
        $ActionStatus = 'proceed';
    }
    
    $ReturnValue['action_status'] = $ActionStatus;
    $ReturnValue['action_data_max'] = $ActionDataMax;
    $ReturnValue['action_data_act'] = $ActionDataAct;
    
    return $ReturnValue;
    
}

function ActionGetAllMenueIDArray() {

	$MenueIDArray = array();
	
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_NAVI . '.id ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_NAVI . ' ';
    
    $MySQLQueryReference = errorlogged_mysql_query($SQLString);
    
    while ($MenueRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {

        $MenueIDArray[] = $MenueRow['id'];
        
    }
    
    
    return $MenueIDArray;
    
}

function ActionSetAllCMSKategorieSEOURL($ActionID, $ActionDataLimit) {

    // alle CMS Kategorien suchen und in der Session ablegen
    if (!$_SESSION['action'][$ActionID]['action_data_max']) {

        $CMSKategorieIDArray = ActionGetAllCMSKategorieIDArray();
        $LanguageIDArray = ActionGetAllLanguageIDArray();
        
        foreach ($LanguageIDArray as $LanguageID) {
        
            foreach ($CMSKategorieIDArray as $CMSKategorieID) {
    
                $CMSKategorieArrayElement['cms_kategorie_id'] = $CMSKategorieID;                        
                $CMSKategorieArrayElement['language_id'] = $LanguageID;                        
                
                $CMSKategorieArray[] = $CMSKategorieArrayElement;
                    
            }
            
        }
        
        $_SESSION['action'][$ActionID]['action_data_max'] = count($CMSKategorieArray);
        $_SESSION['action'][$ActionID]['cms_kategorie_array'] = $CMSKategorieArray;
        $_SESSION['action'][$ActionID]['action_data_counter'] = 0;
        
    }
    
    $CMSKategorieArray = $_SESSION['action'][$ActionID]['cms_kategorie_array'];
    
    // der Limierung entsprechend die Hersteller setzen
    for ($Counter = ($_SESSION['action'][$ActionID]['action_data_counter'] + 1); $Counter <= ($_SESSION['action'][$ActionID]['action_data_counter'] + $ActionDataLimit); $Counter++) {
        if ($CMSKategorieArray[$Counter - 1]) {
            SetCMSKategorieSEOURLs($CMSKategorieArray[$Counter - 1]['cms_kategorie_id'], $CMSKategorieArray[$Counter - 1]['language_id'], false);
        }
    }
    
    // Limitierung erhöhen
    $_SESSION['action'][$ActionID]['action_data_counter'] += $ActionDataLimit;
    
    $ActionDataMax = $_SESSION['action'][$ActionID]['action_data_max'];
    $ActionDataAct = $_SESSION['action'][$ActionID]['action_data_counter'];
    
    if ($ActionDataAct >= $ActionDataMax) {
        $ActionStatus = 'success';
    } else {
        $ActionStatus = 'proceed';
    }
    
    $ReturnValue['action_status'] = $ActionStatus;
    $ReturnValue['action_data_max'] = $ActionDataMax;
    $ReturnValue['action_data_act'] = $ActionDataAct;
    
    return $ReturnValue;
    
}

function ActionGetAllCMSKategorieIDArray() {

	$CMSKategorieIDArray = array();
	
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_CMS_KATEGORIE . '.id ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_CMS_KATEGORIE . ' ';
    
    $MySQLQueryReference = errorlogged_mysql_query($SQLString);
    
    while ($CMSKategorieRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {

        $CMSKategorieIDArray[] = $CMSKategorieRow['id'];
        
    }
    
    
    return $CMSKategorieIDArray;
    
}

function ActionGetAllArtikelIDArray() {

	$ArtikelIDArray = array();
	
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_ARTIKEL . '.id ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_ARTIKEL . ' ';
    $SQLString .= 'WHERE ';
    $SQLString .= TABLE_ARTIKEL . '.merkmalkombinationparentid = 0 ';
    
    $MySQLQueryReference = errorlogged_mysql_query($SQLString);
    
    while ($ArtikelRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {

        $ArtikelIDArray[] = $ArtikelRow['id'];
        
    }
    
    
    return $ArtikelIDArray;
    
}

function ActivateSEOURL() {
    
    return ResetSEOURLs();
    
}

function DeactivateSEOURL() {
    
    // alle Einträge der Sprache aus den SEO URL Tabellen entfernen

    $SQLString = 'DELETE FROM ' . TABLE_SEOURLS . ' ';
    
    $MySQLQueryReference = errorlogged_mysql_query($SQLString);
        
    $SQLString = 'DELETE FROM ' . TABLE_SEOURLS_ELEMENTS . ' ';
    
    $MySQLQueryReference = errorlogged_mysql_query($SQLString);

    // alle URL Namen aus den CMS Kategorien entfernen
    $SQLString = 'UPDATE ' . TABLE_CMS_KATEGORIE_LANGU . ' SET ';
    $SQLString .= TABLE_CMS_KATEGORIE_LANGU . '.url_name = \'\'';

    $MySQLQueryReference = errorlogged_mysql_query($SQLString);

    // alle URL Namen aus den eigenen Menüpunkten entfernen
    $SQLString = 'UPDATE ' . TABLE_NAVI_LANGU . ' SET ';
    $SQLString .= TABLE_NAVI_LANGU . '.url_name = \'\'';

    $MySQLQueryReference = errorlogged_mysql_query($SQLString);
    
    // alle URL Namen von den Herstellern entfernen
    $SQLString = 'UPDATE ' . TABLE_HERSTELLER . ' SET ';
    $SQLString .= TABLE_HERSTELLER . '.url_name = \'\'';

    $MySQLQueryReference = errorlogged_mysql_query($SQLString);

    // alle URL Namen von den Kategorien entfernen
    $SQLString = 'UPDATE ' . TABLE_KATEGORIE_LANGU . ' SET ';
    $SQLString .= TABLE_KATEGORIE_LANGU . '.url_name = \'\'';

    $MySQLQueryReference = errorlogged_mysql_query($SQLString);

    // alle URL Artikel Namen von den Artikeln entfernen
    $SQLString = 'UPDATE ' . TABLE_ARTIKEL_LANGU . ' SET ';
    $SQLString .= TABLE_ARTIKEL_LANGU . '.url_artikel_name = \'\'';

    $MySQLQueryReference = errorlogged_mysql_query($SQLString);

    // alle URL Namen von den Aktionen entfernen
    $SQLString = 'UPDATE ' . TABLE_AKTION_LANGU . ' SET ';
    $SQLString .= TABLE_AKTION_LANGU . '.url_name = \'\'';

    $MySQLQueryReference = errorlogged_mysql_query($SQLString);

}

function ActivateLanguageSEOURL($LanguageID) {
    
    // SEO Name für alle Kategorien der Sprache setzen
    SetAllKategorieSEOName($LanguageID);
    
    // SEO URLs der Kategorien der Sprache erzeugen
    SetAllKategorieSEOURL($LanguageID);
    
    // SEO Name für alle Artikel setzen
    SetAllArtikelSEOName($LanguageID);

    // SEO URLs der Artikel erzeugen
    SetAllArtikelSEOURL($LanguageID);
    
    // SEO Name für alle Hersteller setzen
    SetAllHerstellerSEOName();

    // SEO URLs der Hersteller erzeugen
    SetAllHerstellerSEOURL($LanguageID);
    
    // SEO Name für alle eigenen Menüpunkte setzen
    SetAllMenueSEOName($LanguageID);

    // SEO URLs der eignen Menüpunkte erzeugen
    SetAllMenueSEOURL($LanguageID);
    
    // SEO Name für alle CMS Kategorien setzen
    SetAllCMSKategorieSEOName($LanguageID);

    // SEO URLs der CMS Kategorien erzeugen
    SetAllCMSKategorieSEOURL($LanguageID);
    
    // SEO Name für alle Aktionen setzen
    SetAllAktionenSEOName();

    // SEO URLs der Aktionen erzeugen
    SetAllAktionenSEOURL();
    
}

function DeactivateLanguageSEOURL($LanguageID) {
    
    // alle Einträge der Sprache aus den SEO URL Tabellen entfernen

    $SQLString = 'DELETE FROM ' . TABLE_SEOURLS . ' ';
    $SQLString .= 'WHERE ';
    $SQLString .= TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\' ';
    
    $MySQLQueryReference = errorlogged_mysql_query($SQLString);
        
    $SQLString = 'DELETE FROM ' . TABLE_SEOURLS_ELEMENTS . ' ';
    $SQLString .= 'WHERE ';
    $SQLString .= TABLE_SEOURLS_ELEMENTS . '.language_id = \'' . $LanguageID . '\' ';
    
    $MySQLQueryReference = errorlogged_mysql_query($SQLString);

}


/**
 * Setzt die SEO URLs neu 
 * 
 * Hier wird zuerst die SEO URL Tabelle geleert, dann die SEO Names der Elemente neu gesetzt und
 * anschließend die SEO URLs neu gesetzt und in die Datenbank geschrieben.  
 *
 */
function ResetSEOURLs() {

    // Sicherheitszähler zurück setzten
    SaveKeyValueEinstellungen('seo', 'sprechende_urls_sicherheitszahl', 1);

    // SEO URL Tabele leeren
    TruncateSEOURLTable();
    
    // SEO Name für alle Kategorien zurücksetzen
    UnsetAllKategorieSEOName();
    
    // SEO Name für alle Kategorien setzen
    SetAllKategorieSEOName();

    // SEO URLs der Kategorien erzeugen
    SetAllKategorieSEOURL();

    // SEO Name für alle Artikel zurücksetzen
    UnsetAllArtikelSEOName();
    
    // SEO Name für alle Artikel setzen
    SetAllArtikelSEOName();

    // SEO URLs der Artikel erzeugen
    SetAllArtikelSEOURL();

    // SEO Name für alle Hersteller zurücksetzen
    UnsetAllHerstellerSEOName();
    
    // SEO Name für alle Hersteller setzen
    SetAllHerstellerSEOName();

    // SEO URLs der Hersteller erzeugen
    SetAllHerstellerSEOURL();

    // SEO Name für alle Menüpunkte zurücksetzen
    UnsetAllMenueSEOName();
    
    // SEO Name für alle eigenen Menüpunkte setzen
    SetAllMenueSEOName();

    // SEO URLs der eignen Menüpunkte erzeugen
    SetAllMenueSEOURL();
    
    // SEO Name für alle CMS Kategorien zurücksetzen
    UnsetAllCMSKategorieSEOName();
    
    // SEO Name für alle CMS Kategorien setzen
    SetAllCMSKategorieSEOName();

    // SEO URLs der CMS Kategorien erzeugen
    SetAllCMSKategorieSEOURL();

    // SEO Name für alle Aktionen zurücksetzen
    UnsetAllAktionenSEOName();
    
    // SEO Name für alle Aktionen setzen
    SetAllAktionenSEOName();

    // SEO URLs der Aktionen erzeugen
    SetAllAktionenSEOURL();
    
    // Anzahl der SEO URLs einlesen
    $SEOURLCount = GetSEOURLCount();
    
    return $SEOURLCount;

}

/**
 * SEO URL Tabelle leeren
 * 
 * Ueber diese Funktion wird die Tabelle mit den SEO URLs geleert. 
 *
 */
function TruncateSEOURLTable() {

    $SQLString = 'TRUNCATE ' . TABLE_SEOURLS . ' ';

    $MySQLQueryReference = errorlogged_mysql_query($SQLString);

    $SQLString = 'TRUNCATE ' . TABLE_SEOURLS_ELEMENTS . ' ';

    $MySQLQueryReference = errorlogged_mysql_query($SQLString);

}

/**
 * Ermittlung der Anzahl der SEO URLS
 *
 * Hier wird lediglich die Anzahl der DB Einträge in der Tabelle randshop_seourls ermittelt und somit
 * die Anzahl der SEO URLs, die als Ausgabe nach einem Reset angezeigt wird.
 */
function GetSEOURLCount() {
    
    $SQLString = 'SELECT ';
    $SQLString .= 'COUNT(' . TABLE_SEOURLS . '.seourl_id) AS seourl_count '; 
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_SEOURLS . ' ';
    
    $SEOURLCountObject = mysql_fetch_object(errorlogged_mysql_query($SQLString));
    
    return $SEOURLCountObject->seourl_count;
    
}

/**
 * Löschen aller Umleitungen
 *
 * Über diese Funktion werden alte Umleitungen gelöscht. Entweder wird die Funktion direk über das
 * Admintool in den SEO Einstellungen aufgerufen, dann werden alle Umletungen gelöscht oder sie wird
 * mit der Startseite des Admintools aufgerufen und es werden nur alle Einträge gelöscht die alter sind
 * als sprechende_urls_umleitungen_loeschen_nach_monaten sind. 
 */
function DeleteUmleitungen($DeleteAll = false) {
        
    // SEO Einstellungen einlesen
    $Einstellungen = GetEinstellungen('', 'seo');
    
    $UmleitungsCounter = 0;
    
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_SEOURLS . '.seourl_id ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_SEOURLS . ' ';
    $SQLString .= 'WHERE ';
    $SQLString .= '(';
    $SQLString .= '(' . TABLE_SEOURLS . '.http_status = \'301\') AND ';

    if (!$DeleteAll) {
        $SQLString .= '(DATE_ADD(' . TABLE_SEOURLS . '.delete_date, INTERVAL ' . $Einstellungen->seo->sprechende_urls_umleitungen_loeschen_nach_monaten . ' MONTH) < NOW()) AND ';
    }
    
    $SQLString .= '1)';
    
    $MySQLQueryReference = errorlogged_mysql_query($SQLString);

    while ($SEOURLRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {
        
        $SQLString = 'DELETE FROM ' . TABLE_SEOURLS .  ' ';
        $SQLString .= 'WHERE ';
        $SQLString .= TABLE_SEOURLS . '.seourl_id = \'' . $SEOURLRow['seourl_id'] . '\' ';
        
        $MySQLDeleteQueryReference = errorlogged_mysql_query($SQLString);
    
        $SQLString = 'DELETE FROM ' . TABLE_SEOURLS_ELEMENTS .  ' ';
        $SQLString .= 'WHERE ';
        $SQLString .= TABLE_SEOURLS_ELEMENTS . '.seourl_id = \'' . $SEOURLRow['seourl_id'] . '\' ';
        
        $MySQLDeleteQueryReference = errorlogged_mysql_query($SQLString);
        
        $UmleitungsCounter++;
        
    }
    
    return $UmleitungsCounter;
    
}

/**
 * SEO Name der Aktionen zurücksetzen
 * 
 * Hier wird der SEO Name der Aktionen zurückgesetzt.
 *
 */
function UnsetAllAktionenSEOName($LanguageID = 0) {
    
    // SEO Name sichern
    $SQLString = 'UPDATE ' . TABLE_AKTION_LANGU . ' SET ';
    $SQLString .= TABLE_AKTION_LANGU . '.url_name = \'\' ';
    $SQLString .= 'WHERE ';
    $SQLString .= '( ';

    if ($LanguageID) {
        $SQLString .= '(' . TABLE_AKTION_LANGU . '.language_id = \'' . $LanguageID . '\') AND ';
    }
    
    $SQLString .= ' 1)';
    
    $MySQLQueryReference = errorlogged_mysql_query($SQLString);
    
}


/**
 * SEO Name der Aktionen setzen
 * 
 * Hier wird der SEO Name der Aktionen gesetzt. Ist eine Vorgabe zu der Aktion hinterlegt, wird
 * diese als Grundlage herangezogen. Ansonsten wird der Name der Aktion verwendet. Die Umwandlung
 * findet dann über die Funktion DecodeAktionsSEOName() statt.
 *
 */
function SetAllAktionenSEOName() {

    // alle eingetragenen Daten aller Aktionen einlesen
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_AKTION_LANGU . '.aktions_id, ';
    $SQLString .= TABLE_AKTION_LANGU . '.language_id, ';
    $SQLString .= TABLE_AKTION_LANGU . '.aktions_titel, ';
    $SQLString .= TABLE_AKTION_LANGU . '.url_name_vorgabe ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_AKTION_LANGU . ' ';
    $SQLString .= 'WHERE ';
    $SQLString .= '(';
    $SQLString .= ' 1)';
    
    $MySQLQueryReference = errorlogged_mysql_query($SQLString);

    while ($AktionsRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {

        // wenn es eine Vorgabe gibt, dann diese als Grundlage für den SEO Name nehmen
        if ($AktionsRow['url_name_vorgabe']) {
            $URLName = DecodeAktionsSEOName($AktionsRow['url_name_vorgabe']);
            
        // sonst den Namen der Aktion als Grundlage für den SEO Name nehmen
        } else {
            $URLName = DecodeAktionsSEOName($AktionsRow['aktions_titel']);
        }

        // SEO Name sichern
        $SQLString = 'UPDATE ' . TABLE_AKTION_LANGU . ' SET ';
        $SQLString .= TABLE_AKTION_LANGU . '.url_name = \'' . $URLName . '\' ';
        $SQLString .= 'WHERE ';
        $SQLString .= TABLE_AKTION_LANGU . '.aktions_id = \'' . $AktionsRow['aktions_id'] . '\' AND ';
        $SQLString .= TABLE_AKTION_LANGU . '.language_id = \'' . $AktionsRow['language_id'] . '\' ';
        
        $MySQLUpdateQueryReference = errorlogged_mysql_query($SQLString);

    }

}

/**
 * alle SEO URLs der Aktionen setzen
 * 
 * Hier werden alle Aktionen eingelesen. Über die Funktion SetAktionenSEOURLs() wird die benötigte
 * SEO URL genriert und gesichert.
 *
 */
function SetAllAktionenSEOURL($LanguageID = 0) {

    // alle aktiven Sprachen einlesen
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_LANGUAGE . '.language_id ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_LANGUAGE . ' ';
    $SQLString .= 'WHERE ';
    $SQLString .= "(";
    
    if ($LanguageID) {
        $SQLString .= '(' . TABLE_LANGUAGE . '.language_id = \'' . $LanguageID . '\') AND ';
    } else {
        $SQLString .= '(' . TABLE_LANGUAGE . '.language_active = 1) AND ';
    }

    $SQLString .= " 1)";
    
    $MySQLQueryReference = errorlogged_mysql_query($SQLString);
    
    while ($LanguageRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {
        
        // Alle Aktionen einlesen
        $SQLString = 'SELECT ';
        $SQLString .= TABLE_AKTION . '.id AS aktions_id ';
        $SQLString .= 'FROM ';
        $SQLString .= TABLE_AKTION . " ";
        
        $MySQLArtikelQueryReference = errorlogged_mysql_query($SQLString);
    
        while ($AktionsRow = mysql_fetch_array($MySQLArtikelQueryReference, MYSQL_ASSOC)) {
    
            SetAktionsSEOURLs($AktionsRow['aktions_id'], $LanguageRow['language_id']);
    
        }
    
    }
    
}

/**
 * SEO URLs einer Aktion setzen
 * 
 * Hier wird die eigentlich SEO URL einer Aktion gesetzt
 *
 */
function SetAktionsSEOURLs($AktionsID, $LanguageID, $Redirect = true) {

    // SEO Einstellungen einlesen
    $Einstellungen = GetEinstellungen('', 'seo');

    // SEO URL Name der Sprache
    $SEOURLLanguageName = GetLanguageSEOName($LanguageID);
    
    // Aktions SEO URL zusammensetzen
    $AktionsSEONameArray = GetAktionsSEONameArray($AktionsID, $LanguageID);
    $AktionsSEOURL = $SEOURLLanguageName . $AktionsSEONameArray['url_name'];
    
    // Pruefen, ob für den Aktion ein Eintrag mit dem gleichen SEO Pfad schon vorhanden ist.
    if (ExistsAktionsSEOURL($AktionsID, $LanguageID, $AktionsSEOURL)) {
        return;
    }
    
    // SEO URL auf eindeutigkeit pruefen und ggf. eine Nummer anhaengen
    $AktionsSEOURL = GetUniqueURL($AktionsSEOURL);
    
    // SEO URL sichern
    $SEOURLID = SaveAktionsSEOURL($AktionsID, $LanguageID, $AktionsSEOURL);
    
    // alte SEO URLs zu dieser Aktion löschen bzw. umleiten
    if ($Redirect) {
        DeleteAktionsSEOURLElement($AktionsID, $LanguageID, $SEOURLID, false);
    }
    
}

/**
 * Löschen bzw. Umleiten alter SEO URLs einer Aktion
 *
 * Hier wird in Abhängigkeit der SEO Einstellungen entweder alle alten SEO URLs der Aktion und der
 * Sprache gelöscht oder es wird eine Umleitung eingetragen und auf die neue SEO URL verwiesen.
 * 
 */
function DeleteAktionsSEOURLElement($AktionsID, $LanguageID, $SEOURLID, $DeleteEntry) {
    
    // SEO Einstellungen einlesen
    $Einstellungen = GetEinstellungen('', 'seo');
    
    // Entsprechende Einstellung benutzen wenn das Elemetn gelöscht oder umbenannt wurde
    if ($DeleteEntry) {
        $Umleitung = $Einstellungen->seo->sprechende_urls_umleitung_loeschen;
    } else {
        $Umleitung = $Einstellungen->seo->sprechende_urls_umleitung_umbenennen;
    }
        
    // alte Eintraege loeschen bzw. umleiten (Einstellungen)
    if (!$Umleitung) {

        $SQLString = 'SELECT ';
        $SQLString .= TABLE_SEOURLS . '.seourl_id ';
        $SQLString .= 'FROM ';
        $SQLString .= TABLE_SEOURLS . ' ';
        $SQLString .= 'WHERE ';
        $SQLString .= TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_AKTION . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.aktions_id = \'' . $AktionsID . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.seourl_id != \'' . $SEOURLID . '\' ';
        
        $MySQLQueryReference = errorlogged_mysql_query($SQLString);
        
        while ($SEOURLRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {
            
            $SQLString = 'DELETE FROM ' . TABLE_SEOURLS .  ' ';
            $SQLString .= 'WHERE ';
            $SQLString .= TABLE_SEOURLS . '.seourl_id = \'' . $SEOURLRow['seourl_id'] . '\' ';
            
            $MySQLQueryDeleteReference = errorlogged_mysql_query($SQLString);
        
        }
    
    }

    // ggf. Umleitung der alten URL (Einstellungen)
    if ($Umleitung) {

        $SQLString = 'UPDATE ' . TABLE_SEOURLS .  ' SET ';
        $SQLString .= TABLE_SEOURLS . '.http_status = \'301\', ';
        $SQLString .= TABLE_SEOURLS . '.redirect_seourl_id = \'' . $SEOURLID . '\', ';
        $SQLString .= TABLE_SEOURLS . '.delete_date = NOW() ';
        $SQLString .= 'WHERE ';
        $SQLString .= TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_AKTION . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.aktions_id = \'' . $AktionsID . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.seourl_id != \'' . $SEOURLID . '\' AND ';
        $SQLString .= '(';
        $SQLString .= TABLE_SEOURLS . '.http_status = \'\' ';
        $SQLString .= ')';
        
        $MySQLUpdateQueryReference = errorlogged_mysql_query($SQLString);
        
        $SQLString = 'UPDATE ' . TABLE_SEOURLS .  ' SET ';
        $SQLString .= TABLE_SEOURLS . '.redirect_seourl_id = \'' . $SEOURLID . '\' ';
        $SQLString .= 'WHERE ';
        $SQLString .= TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_AKTION . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.aktions_id = \'' . $AktionsID . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.seourl_id != \'' . $SEOURLID . '\' AND ';
        $SQLString .= '(';
        $SQLString .= TABLE_SEOURLS . '.http_status = \'301\' ';
        $SQLString .= ')';
        
        $MySQLUpdateQueryReference = errorlogged_mysql_query($SQLString);
    
    }

}

/**
 * Prüft ob zu einer Aktion schon eine URL hinterlegt ist
 * 
 * Hier wird geprüft, ob zu einem übergebenen Aktion die ebenfalls übergebene SEO URL
 * schon hinterlegt ist.
 * 
 */
function ExistsAktionsSEOURL($AktionsID, $LanguageID, $AktionsSEOURL) {
    
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_SEOURLS . '.seourl_id ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_SEOURLS . ' ';
    $SQLString .= 'WHERE ';
    $SQLString .= TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_HERSTELLER . '\' AND ';
    $SQLString .= TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\' AND ';
    $SQLString .= TABLE_SEOURLS . '.aktions_id = \'' . $AktionsID . '\' AND ';
    $SQLString .= TABLE_SEOURLS . '.url = \'' . $AktionsSEOURL . '\' AND ';
    $SQLString .= TABLE_SEOURLS . '.http_status = \'0\' ';
    
    $AktionsObject = mysql_fetch_object(errorlogged_mysql_query($SQLString));
    
    if ($AktionsObject) {
        return true;
    } else {
        return false;
    }
    
}

function GetAktionsSEONameArray($AktionsID, $LanguageID) {

    // den Artikel einlesen
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_AKTION_LANGU . '.aktions_id, ';
    $SQLString .= TABLE_AKTION_LANGU . '.url_name ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_AKTION_LANGU . ' ';
    $SQLString .= 'WHERE ';
    $SQLString .= '(';
    $SQLString .= '(' . TABLE_AKTION_LANGU . '.aktions_id = \'' . $AktionsID . '\') AND ';
    $SQLString .= '(' . TABLE_AKTION_LANGU . '.language_id = \'' . $LanguageID . '\') AND ';
    $SQLString .= '1)';

    $MySQLQueryReference = errorlogged_mysql_query($SQLString);

    while ($AktionsRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {

        $AktionsSEONameArray['aktions_id'] = $AktionsRow['aktions_id']; 
        $AktionsSEONameArray['url_name'] = $AktionsRow['url_name']; 
        
    }

    return $AktionsSEONameArray;

}

/**
 * SEO URLs der einer Aktion zugeordneten Artikel prüfen
 * 
 * Nachdem einer Aktion umbenannt wurde, werden hier aller SEO URLs der Artikel, die dieser Aktion
 * zugeordnet sind neu geschrieben.
 */
function SetArtikelAktionsSEOURLs($AktionsID, $LanguageID) {

    // alle möglichen Artikel einer Ation einlesen
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_SEOURLS . '.seourl_id, ';
    $SQLString .= TABLE_SEOURLS . '.artikel_id, ';
    $SQLString .= TABLE_SEOURLS . '.aktions_id ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_SEOURLS . ' ';
    $SQLString .= 'WHERE ';
    $SQLString .= TABLE_SEOURLS . '.aktions_id = \'' . $AktionsID . '\' AND ';
    $SQLString .= TABLE_SEOURLS . '.artikel_id != 0 AND ';
    $SQLString .= TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\' AND ';
    $SQLString .= TABLE_SEOURLS . '.http_status = \'0\' ';
    
    $MySQLQueryReference = errorlogged_mysql_query($SQLString);
    
    while ($ArtikelRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {

        $ArtikelSEONameArray = GetArtikelSEONameArray($ArtikelRow['artikel_id'], $LanguageID);
        $AktionsSEONameArray = GetAktionsSEONameArray($AktionsID, $LanguageID);
            
        $ArtikelSEOURL = $SEOURLLanguageName . $AktionsSEONameArray['url_name'] . '/' . $ArtikelSEONameArray['url_artikel_name'];

        // Pruefen, ob für den Artikel ein Eintrag mit dem gleichen SEO Pfad schon vorhanden ist.
        if (ExistsArtikelSEOURL($ArtikelRow['artikel_id'], 0, 0, $AktionsID, $LanguageID, $ArtikelSEOURL)) {
            continue;
        }
        
        // SEO URL auf eindeutigkeit pruefen und ggf. eine Nummer anhaengen
        $ArtikelSEOURL = GetUniqueURL($ArtikelSEOURL);
        
        // SEO URL sichern
        $SEOURLID = SaveArtikelSEOURL($ArtikelRow['artikel_id'], 0, 0, $ArtikelRow['aktions_id'], $LanguageID, $ArtikelSEOURL, array());
        
        // alte SEO URLs zu diesem Hersteller löschen bzw. umleiten
        DeleteArtikelSEOURLElement($ArtikelRow['artikel_id'], 0, 0, $ArtikelRow['aktions_id'], $LanguageID, $SEOURLID, false);
        
    }
    
}

/**
 * Sichert die SEO URL einer Aktion
 *
 * Hier wird der SEO URL einer Aktion in der Datenbank abgelegt.
 * 
 */
function SaveAktionsSEOURL($AktionsID, $LanguageID, $AktionsSEOURL) {

    $SQLString = 'INSERT INTO ' . TABLE_SEOURLS . ' SET ';
    $SQLString .= TABLE_SEOURLS . '.url = \'' . $AktionsSEOURL . '\', ';
    $SQLString .= TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_AKTION . '\', ';
    $SQLString .= TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\', ';
    $SQLString .= TABLE_SEOURLS . '.aktions_id = \'' . $AktionsID . '\' ';
    
    $MySQLQueryReference = errorlogged_mysql_query($SQLString);
    
    $SEOURLID = mysql_insert_id();
    
    return $SEOURLID;
    
}

/**
 * Dekodiert einen Aktionsname für die SEO URLs
 * 
 * Hier wird lediglich der Aktionsname bzw. die manuelle Vorgabe weiter an die Funktion
 * DecodeSEOName() gegeben, die dann wiederum die Umwandlung für die sprechenden URLs vornimmt.
 *
 */
function DecodeAktionsSEOName($AktionsName) {

    // SEO Namen setzen
    $SEOAktionsName = DecodeSEOName($AktionsName);

    return $SEOAktionsName;

}

/**
 * SEO Name der CMS Kategorien zurücksetzen
 * 
 * Hier wird der SEO Name der CMS Kategorien zurückgesetzt.
 *
 */
function UnsetAllCMSKategorieSEOName($LanguageID = 0) {
    
    // SEO Name sichern
    $SQLString = 'UPDATE ' . TABLE_CMS_KATEGORIE_LANGU . ' SET ';
    $SQLString .= TABLE_CMS_KATEGORIE_LANGU . '.url_name = \'\' ';
    $SQLString .= 'WHERE ';
    $SQLString .= '( ';

    if ($LanguageID) {
        $SQLString .= '(' . TABLE_CMS_KATEGORIE_LANGU . '.language_id = \'' . $LanguageID . '\') AND ';
    }
    
    $SQLString .= ' 1)';
    
    $MySQLQueryReference = errorlogged_mysql_query($SQLString);
    
}


/**
 * SEO Name der CMS Kategorien setzen
 * 
 * Hier wird der SEO Name der CMS Kategorien gesetzt. Ist eine Vorgabe zu der CMS Kategorie hinterlegt, 
 * wird diese als Grundlage herangezogen. Ansonsten wird der Name der CMS Kategorie verwendet. Die 
 * Umwandlung findet dann über die Funktion DecodeCMSKategorieSEOName() statt.
 *
 */
function SetAllCMSKategorieSEOName($LanguageID = 0) {

    // alle eingetragenen Sprachdaten aller Kategorien einlesen
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_CMS_KATEGORIE_LANGU . '.kategorie_id, ';
    $SQLString .= TABLE_CMS_KATEGORIE_LANGU . '.language_id, ';
    $SQLString .= TABLE_CMS_KATEGORIE_LANGU . '.name, ';
    $SQLString .= TABLE_CMS_KATEGORIE_LANGU . '.url_name_vorgabe ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_CMS_KATEGORIE_LANGU . ' ';
    $SQLString .= 'WHERE ';
    $SQLString .= '(';
    
    if ($LanguageID) {
        $SQLString .= '(' . TABLE_CMS_KATEGORIE_LANGU . '.language_id = \'' . $LanguageID . '\') AND ';
    }

    $SQLString .= ' 1)';
    
    $MySQLQueryReference = errorlogged_mysql_query($SQLString);

    while ($CMSKategorieRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {

        // wenn es eine Vorgabe gibt, dann diese als Grundlage für den SEO Name nehmen
        if ($CMSKategorieRow['url_name_vorgabe']) {
            $URLName = DecodeCMSKategorieSEOName($CMSKategorieRow['url_name_vorgabe']);
            
        // sonst den Namen der CMS Kategorie als grundlage für den SEO Name nehmen
        } else {
            $URLName = DecodeCMSKategorieSEOName($CMSKategorieRow['name']);
        }

        // SEO Name sichern
        $SQLString = 'UPDATE ' . TABLE_CMS_KATEGORIE_LANGU . ' SET ';
        $SQLString .= TABLE_CMS_KATEGORIE_LANGU . '.url_name = \'' . $URLName . '\' ';
        $SQLString .= 'WHERE ';
        $SQLString .= TABLE_CMS_KATEGORIE_LANGU . '.kategorie_id = \'' . $CMSKategorieRow['kategorie_id'] . '\' AND ';
        $SQLString .= TABLE_CMS_KATEGORIE_LANGU . '.language_id = \'' . $CMSKategorieRow['language_id'] . '\' ';

        $MySQLUpdateQueryReference = errorlogged_mysql_query($SQLString);

    }

}

/**
 * alle SEO URLs der CMS Kategorien setzen
 * 
 * Hier werden alle CMS Hauptkategorien eingelesen. In Kombination mit allen aktiven Sprachen wird dann
 * über die Funktion SetCMSKategorieSEOURLs() zu jeder einzelnen CMS Kategorie die benötigte SEO URL
 * generiert und gesichert. Es kann aber auch gezielt nur eine Sprache übergeben werden, wenn die 
 * entsprechende Sprache aktiviert wird
 *
 */
function SetAllCMSKategorieSEOURL($LanguageID = 0) {

    // Standardsprache einlesen
    $StandardLanguageID = GetDefaultLanguageID();
    
    // alle aktiven Sprachen einlesen
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_LANGUAGE . '.language_id ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_LANGUAGE . ' ';
    $SQLString .= 'WHERE ';
    $SQLString .= "(";
    
    if ($LanguageID) {
        $SQLString .= '(' . TABLE_LANGUAGE . '.language_id = \'' . $LanguageID . '\') AND ';
    } else {
        $SQLString .= '(' . TABLE_LANGUAGE . '.language_active = 1) AND ';
    }

    $SQLString .= " 1)";
    
    
    $MySQLQueryReference = errorlogged_mysql_query($SQLString);
    
    while ($LanguageRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {
        
        // Alle Hauptkategorien einlesen
        $SQLString = 'SELECT ';
        $SQLString .= TABLE_CMS_KATEGORIE . '.id AS kategorie_id ';
        $SQLString .= 'FROM ';
        $SQLString .= TABLE_CMS_KATEGORIE . " ";
        $SQLString .= 'WHERE ';
        $SQLString .= TABLE_CMS_KATEGORIE . '.parentid = 0 ';
//        $SQLString .= 'AND ' . TABLE_KATEGORIE . '.id = 21 ';
//        $SQLString .= 'AND ' . TABLE_KATEGORIE . '.id = 21 OR ';
//        $SQLString .= TABLE_KATEGORIE . '.id = 23 ';
        
        $MySQLKategorieQueryReference = errorlogged_mysql_query($SQLString);
    
        while ($CMSKategorieRow = mysql_fetch_array($MySQLKategorieQueryReference, MYSQL_ASSOC)) {
    
            SetCMSKategorieSEOURLs($CMSKategorieRow['kategorie_id'], $LanguageRow['language_id']);
    
        }
    
    }

}

/**
 * SEO URLs einer CMS Kategorien setzen
 * 
 * Hier wird die eigentlich SEO URL einer CMS Kategorie in einer Sprache gesetzt. Zuerst wird die URL
 * zusammengesetzt.
 *
 */
function SetCMSKategorieSEOURLs($KategorieID, $LanguageID, $Rekursiv = true) {

    // SEO Einstellungen einlesen
    $Einstellungen = GetEinstellungen('', 'seo');

    // SEO URL Name der Sprache
    $SEOURLLanguageName = GetLanguageSEOName($LanguageID);
    
    // SEO Pfad zu der Kategorie in der entsprechende Sprach einlesen
    $CMSKategorieSEOPathArray = GetCMSKategorieSEOPathArray($KategorieID, $LanguageID, array());
    
    // SEO Pfad zusammensetzen
    foreach ($CMSKategorieSEOPathArray as $CMSKategorieSEOPathElement) {
        $CMSKategorieSEOURL .= $CMSKategorieSEOPathElement['url_name'] . '/';
    }
    
    $CMSKategorieSEOURL = $SEOURLLanguageName . substr($CMSKategorieSEOURL, 0, strlen($CMSKategorieSEOURL) - 1);
    
    // Pruefen, ob für die CMS Kategorie ein Eintrag mit dem gleichen SEO Pfad schon vorhanden ist.
    if (ExistsCMSKategorieSEOURL($KategorieID, $LanguageID, $CMSKategorieSEOURL)) {
        return;
    }
    
    // SEO URL auf eindeutigkeit pruefen und ggf. eine Nummer anhaengen
    $CMSKategorieSEOURL = GetUniqueURL($CMSKategorieSEOURL);
    
    // SEO URL sichern
    $SEOURLID = SaveCMSKategorieSEOURL($KategorieID, $LanguageID, $CMSKategorieSEOURL, $CMSKategorieSEOPathArray);

    // alte SEO URLs zu dieser CMS Kategorie löschen bzw. umleiten
    DeleteCMSKategorieSEOURLElement($KategorieID, $LanguageID, $SEOURLID, false);
    
    // rekursiver Aufruf um SEO URLs der CMS Unterkategorien ebenfalls zu setzen
    if ($Rekursiv) {

    	$SQLString = 'SELECT '; 
	    $SQLString .= TABLE_CMS_KATEGORIE . '.id '; 
	    $SQLString .= 'FROM '; 
	    $SQLString .= TABLE_CMS_KATEGORIE . ' '; 
	    $SQLString .= 'WHERE '; 
	    $SQLString .= TABLE_CMS_KATEGORIE . '.parentid = \'' . $KategorieID . '\' '; 
	    
	    $MySQLQueryReference = errorlogged_mysql_query($SQLString);
	    
	    while ($CMSKategorieRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {
	        SetCMSKategorieSEOURLs($CMSKategorieRow['id'], $LanguageID);
	    }
	    
    }
    
}

function GetCMSKategorieSEOPathArray($KategorieID, $LanguageID, $CMSKategorieSEOPathArray) {

    $StandardLanguageID = GetDefaultLanguageID();

    // die Kategorie einlesen
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_CMS_KATEGORIE . '.id, ';
    $SQLString .= TABLE_CMS_KATEGORIE . '.parentid, ';
    $SQLString .= TABLE_CMS_KATEGORIE_LANGU . '.language_id, ';
    $SQLString .= 'IF(' . TABLE_CMS_KATEGORIE_LANGU . '.url_name != \'\', ' . TABLE_CMS_KATEGORIE_LANGU . '.url_name, table_cms_kategorie_langu_standard.url_name) AS url_name, ';
    $SQLString .= 'IF(' . TABLE_CMS_KATEGORIE_LANGU . '.url_name != \'\', 1, 0) AS translated ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_CMS_KATEGORIE . ' ';
    $SQLString .= 'LEFT JOIN ' . TABLE_CMS_KATEGORIE_LANGU . ' ON ((' . TABLE_CMS_KATEGORIE . '.id = ' . TABLE_CMS_KATEGORIE_LANGU . '.kategorie_id) AND (' . TABLE_CMS_KATEGORIE_LANGU . '.language_id = ' . $LanguageID . ')) ';
    $SQLString .= "LEFT JOIN " . TABLE_CMS_KATEGORIE_LANGU . " table_cms_kategorie_langu_standard ON ((" . TABLE_CMS_KATEGORIE . ".id = table_cms_kategorie_langu_standard.kategorie_id) AND (table_cms_kategorie_langu_standard.language_id = " . $StandardLanguageID . ")) ";
    $SQLString .= 'WHERE ';
    $SQLString .= '(';
    $SQLString .= '(' . TABLE_CMS_KATEGORIE . '.id = \'' . $KategorieID . '\') AND ';
    $SQLString .= '1)';

//    echo '$SQLString: ' . $SQLString . '<br>';

    $MySQLQueryReference = errorlogged_mysql_query($SQLString);

    while ($CMSKategorieRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {

        $CMSKategorieSEOPathElement['kategorie_id'] = $CMSKategorieRow['id']; 
        $CMSKategorieSEOPathElement['language_id'] = $CMSKategorieRow['language_id']; 
        $CMSKategorieSEOPathElement['url_name'] = $CMSKategorieRow['url_name']; 
        $CMSKategorieSEOPathElement['translated'] = $CMSKategorieRow['translated']; 
        
        array_unshift($CMSKategorieSEOPathArray, $CMSKategorieSEOPathElement);

        if ($CMSKategorieRow['parentid'] != 0) {
            $CMSKategorieSEOPathArray = GetCMSKategorieSEOPathArray($CMSKategorieRow['parentid'], $LanguageID, $CMSKategorieSEOPathArray);
        }

    }

    return $CMSKategorieSEOPathArray;

}

/**
 * Prüft ob zu einer CMS Kategorie schon eine URL hinterlegt ist
 * 
 * Hier wird geprüft, ob zu einer übergebenen CMS Kategorie und Sprache die ebenfalls übergebene SEO URL
 * schon hinterlegt ist.
 * 
 */
function ExistsCMSKategorieSEOURL($KategorieID, $LanguageID, $CMSKategorieSEOURL) {
    
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_SEOURLS . '.seourl_id ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_SEOURLS . ' ';
    $SQLString .= 'WHERE ';
    $SQLString .= TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_CMS_KATEGORIE . '\' AND ';
    $SQLString .= TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\' AND ';
    $SQLString .= TABLE_SEOURLS . '.kategorie_id = \'' . $KategorieID . '\' AND ';
    $SQLString .= TABLE_SEOURLS . '.url = \'' . $KategorieSEOURL . '\' AND ';
    $SQLString .= TABLE_SEOURLS . '.http_status = \'0\' ';
    
    $CMSKategorieObject = mysql_fetch_object(errorlogged_mysql_query($SQLString));
    
    if ($CMSKategorieObject) {
        return true;
    } else {
        return false;
    }
    
}

/**
 * Sichert die SEO URL einer CMS Kategorie
 *
 * Hier wird der SEO URL einer CMS Kategorie in der Datenbank abgelegt und alle einzelnen Element der
 * URL.
 * 
 */
function SaveCMSKategorieSEOURL($KategorieID, $LanguageID, $CMSKategorieSEOURL, $CMSKategorieSEOPathArray) {

    $SQLString = 'INSERT INTO ' . TABLE_SEOURLS . ' SET ';
    $SQLString .= TABLE_SEOURLS . '.url = \'' . $CMSKategorieSEOURL . '\', ';
    $SQLString .= TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_CMS_KATEGORIE . '\', ';
    $SQLString .= TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\', ';
    $SQLString .= TABLE_SEOURLS . '.kategorie_id = \'' . $KategorieID . '\' ';

    $MySQLQueryReference = errorlogged_mysql_query($SQLString);
    
    $SEOURLID = mysql_insert_id();
    
    // SEO Element sichern
    foreach ($CMSKategorieSEOPathArray as $CMSKategorieSEOPathElement) {

        $SQLString = 'INSERT INTO ' . TABLE_SEOURLS_ELEMENTS . ' SET ';
        $SQLString .= TABLE_SEOURLS_ELEMENTS . '.seourl_id = \'' . $SEOURLID . '\', ';
        $SQLString .= TABLE_SEOURLS_ELEMENTS . '.kategorie_id = \'' . $CMSKategorieSEOPathElement['kategorie_id'] . '\', ';
        $SQLString .= TABLE_SEOURLS_ELEMENTS . '.language_id = \'' . $LanguageID . '\', ';
        $SQLString .= TABLE_SEOURLS_ELEMENTS . '.translated = \'' . $CMSKategorieSEOPathElement['translated'] . '\', ';
        $SQLString .= TABLE_SEOURLS_ELEMENTS . '.seo_name = \'' . $CMSKategorieSEOPathElement['url_name'] . '\' ';
        
        $MySQLQueryReference = errorlogged_mysql_query($SQLString);
        
    }
    
    return $SEOURLID;
    
}

/**
 * Löscht alle Einträge einer CMS Kategorie
 *
 * Es werden alle Sprachen eingelesen und über die Funktion DeleteCMSKategorieSEOURLElement() die
 * entsprechenden Einträge gelöscht.
 */
function DeleteCMSKategorieSEOURL($KategorieID) {
    
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_LANGUAGE . '.language_id ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_LANGUAGE . ' ';
    $SQLString .= 'WHERE ';
    $SQLString .= "(";
    $SQLString .= '(' . TABLE_LANGUAGE . '.language_active = 1) AND ';
    $SQLString .= " 1)";
    
    $MySQLQueryReference = errorlogged_mysql_query($SQLString);
    
    while ($LanguageRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {
        DeleteCMSKategorieSEOURLElement($KategorieID, $LanguageRow['language_id'], 0, true);
    }
    
}

/**
 * Löschen bzw. Umleiten alter SEO URLs einer CMS Kategorie
 *
 * Hier wird in Abhängigkeit der SEO Einstellungen entweder alle alten SEO URLs der CMS Kategorie und der
 * Sprache gelöscht oder es wird eine Umleitung eingetragen und auf die neue SEO URL verwiesen.
 * 
 */
function DeleteCMSKategorieSEOURLElement($KategorieID, $LanguageID, $SEOURLID, $DeleteEntry) {
    
    // SEO Einstellungen einlesen
    $Einstellungen = GetEinstellungen('', 'seo');
    
    // Entsprechende Einstellung benutzen wenn das Elemetn gelöscht oder umbenannt wurde
    if ($DeleteEntry) {
        $Umleitung = $Einstellungen->seo->sprechende_urls_umleitung_loeschen;
    } else {
        $Umleitung = $Einstellungen->seo->sprechende_urls_umleitung_umbenennen;
    }
    
    // alte Eintraege loeschen bzw. umleiten (Einstellungen)
    if (!$Umleitung) {

        $SQLString = 'SELECT ';
        $SQLString .= TABLE_SEOURLS . '.seourl_id ';
        $SQLString .= 'FROM ';
        $SQLString .= TABLE_SEOURLS . ' ';
        $SQLString .= 'WHERE ';
        $SQLString .= TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_CMS_KATEGORIE . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.kategorie_id = \'' . $KategorieID . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.seourl_id != \'' . $SEOURLID . '\' ';
        
        $MySQLQueryReference = errorlogged_mysql_query($SQLString);
        
        while ($SEOURLRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {
            
            
            $SQLString = 'DELETE FROM ' . TABLE_SEOURLS .  ' ';
            $SQLString .= 'WHERE ';
            $SQLString .= TABLE_SEOURLS . '.seourl_id = \'' . $SEOURLRow['seourl_id'] . '\' ';
            
            $MySQLDeleteQueryReference = errorlogged_mysql_query($SQLString);
        
            $SQLString = 'DELETE FROM ' . TABLE_SEOURLS_ELEMENTS .  ' ';
            $SQLString .= 'WHERE ';
            $SQLString .= TABLE_SEOURLS_ELEMENTS . '.seourl_id = \'' . $SEOURLRow['seourl_id'] . '\' ';
            
            $MySQLDeleteQueryReference = errorlogged_mysql_query($SQLString);
        
        }
    
    }

    // ggf. Umleitung der alten URL  (EInstellungen)
    if ($Umleitung) {

        $SQLString = 'UPDATE ' . TABLE_SEOURLS .  ' SET ';
        $SQLString .= TABLE_SEOURLS . '.http_status = \'301\', ';
        $SQLString .= TABLE_SEOURLS . '.redirect_seourl_id = \'' . $SEOURLID . '\', ';
        $SQLString .= TABLE_SEOURLS . '.delete_date = NOW() ';
        $SQLString .= 'WHERE ';
        $SQLString .= TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_CMS_KATEGORIE . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.kategorie_id = \'' . $KategorieID . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.seourl_id != \'' . $SEOURLID . '\' AND ';
        $SQLString .= '(';
        $SQLString .= TABLE_SEOURLS . '.http_status = \'\' ';
        $SQLString .= ')';
        
        $MySQLUpdateQueryReference = errorlogged_mysql_query($SQLString);
        
        $SQLString = 'UPDATE ' . TABLE_SEOURLS .  ' SET ';
        $SQLString .= TABLE_SEOURLS . '.redirect_seourl_id = \'' . $SEOURLID . '\' ';
        $SQLString .= 'WHERE ';
        $SQLString .= TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_CMS_KATEGORIE . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.kategorie_id = \'' . $KategorieID . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.seourl_id != \'' . $SEOURLID . '\' AND ';
        $SQLString .= '(';
        $SQLString .= TABLE_SEOURLS . '.http_status = \'301\' ';
        $SQLString .= ')';
        
        $MySQLUpdateQueryReference = errorlogged_mysql_query($SQLString);
    
    }

}

/**
 * Dekodiert einen CMS Kategoriename für die SEO URLs
 * 
 * Hier wird lediglich der CMS Kategoriename bzw. die manuelle Vorgabe weiter an die Funktion
 * DecodeSEOName() gegeben, die dann wiederum die Umwandlung für die sprechenden URLs vornimmt.
 *
 */
function DecodeCMSKategorieSEOName($CMSKategorieName) {

    // SEO Namen setzen
    $SEOCMSKategorieName = DecodeSEOName($CMSKategorieName);

    return $SEOCMSKategorieName;

}

/**
 * SEO Name der Menüpunkte zurücksetzen
 * 
 * Hier wird der SEO Name der Menüpunkte zurückgesetzt.
 *
 */
function UnsetAllMenueSEOName($LanguageID = 0) {
    
    // SEO Name sichern
    $SQLString = 'UPDATE ' . TABLE_NAVI_LANGU . ' SET ';
    $SQLString .= TABLE_NAVI_LANGU . '.url_name = \'\' ';
    $SQLString .= 'WHERE ';
    $SQLString .= '( ';

    if ($LanguageID) {
        $SQLString .= '(' . TABLE_NAVI_LANGU . '.language_id = \'' . $LanguageID . '\') AND ';
    }
    
    $SQLString .= ' 1)';
    
    $MySQLQueryReference = errorlogged_mysql_query($SQLString);
    
}


/**
 * SEO Name der eigenen Menüpunket setzen
 * 
 * Hier wird der SEO Name der eigenen Menüpunkte gesetzt. Ist eine Vorgabe zu dem Menüpunkt hinterlegt, 
 * wird diese als Grundlage herangezogen. Ansonsten wird die Überschrift des Menüpunktes verwendet. 
 * Die Umwandlung findet dann über die Funktion DecodeMenueSEOName() statt.
 *
 */
function SetAllMenueSEOName($LanguageID = 0) {

    // alle eingetragenen Sprachdaten aller Artikel einlesen
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_NAVI_LANGU . '.menue_id, ';
    $SQLString .= TABLE_NAVI_LANGU . '.language_id, ';
    $SQLString .= TABLE_NAVI_LANGU . '.headline, ';
    $SQLString .= TABLE_NAVI_LANGU . '.url_name_vorgabe ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_NAVI_LANGU . ' ';
    $SQLString .= 'WHERE ';
    $SQLString .= '(';
    
    if ($LanguageID) {
        $SQLString .= '(' . TABLE_NAVI_LANGU . '.language_id = \'' . $LanguageID . '\') AND ';
    }

    $SQLString .= ' 1)';
    
    $MySQLQueryReference = errorlogged_mysql_query($SQLString);

    while ($MenueRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {

        // wenn es eine Vorgabe gibt, dann diese als Grundlage für den SEO Name nehmen
        if ($MenueRow['url_name_vorgabe']) {
            $URLMenueName = DecodeMenueSEOName($MenueRow['url_name_vorgabe']);
            
        // sonst die Überschrift des Menüpunktes als Grundlage für den SEO Name nehmen
        } else {
            $URLMenueName = DecodeMenueSEOName($MenueRow['headline']);
        }

        // SEO Name sichern
        $SQLString = 'UPDATE ' . TABLE_NAVI_LANGU . ' SET ';
        $SQLString .= TABLE_NAVI_LANGU . '.url_name = \'' . $URLMenueName . '\' ';
        $SQLString .= 'WHERE ';
        $SQLString .= TABLE_NAVI_LANGU . '.menue_id = \'' . $MenueRow['menue_id'] . '\' AND ';
        $SQLString .= TABLE_NAVI_LANGU . '.language_id = \'' . $MenueRow['language_id'] . '\' ';

        $MySQLUpdateQueryReference = errorlogged_mysql_query($SQLString);

    }

}

/**
 * alle SEO URLs der eigenen Menüpunkte setzen
 * 
 * Hier werden alle Menüpunkte eingelesen. In Kombination mit allen aktiven Sprachen wird dann
 * über die Funktion SetMenueSEOURLs() zu jedem einzelnen Menüpunkt die benötigte SEO URL generiert
 * und gesichert. Es kann aber auch gezielt nur eine Sprach übergeben werden, wenn die entsprechende
 * Sprache aktiviert wird
 *
 */
function SetAllMenueSEOURL($LanguageID = 0) {

    // Standardsprache einlesen
    $StandardLanguageID = GetDefaultLanguageID();
    
    // alle aktiven Sprachen einlesen
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_LANGUAGE . '.language_id ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_LANGUAGE . ' ';
    $SQLString .= 'WHERE ';
    $SQLString .= "(";
    
    if ($LanguageID) {
        $SQLString .= '(' . TABLE_LANGUAGE . '.language_id = \'' . $LanguageID . '\') AND ';
    } else {
        $SQLString .= '(' . TABLE_LANGUAGE . '.language_active = 1) AND ';
    }

    $SQLString .= " 1)";
    
    $MySQLQueryReference = errorlogged_mysql_query($SQLString);
    
    while ($LanguageRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {
        
        // Alle Artikel einlesen
        $SQLString = 'SELECT ';
        $SQLString .= TABLE_NAVI . '.id AS menue_id ';
        $SQLString .= 'FROM ';
        $SQLString .= TABLE_NAVI . " ";
        
        $MySQLArtikelQueryReference = errorlogged_mysql_query($SQLString);
    
        while ($MenueRow = mysql_fetch_array($MySQLArtikelQueryReference, MYSQL_ASSOC)) {
    
            SetMenueSEOURLs($MenueRow['menue_id'], $LanguageRow['language_id']);
    
        }
    
    }

}

/**
 * SEO URLs eines Menüpunktes setzen
 * 
 * Hier wird die eigentlich SEO URL eines Menüpunktes in einer Sprache gesetzt. Zuerst wird die URL
 * zusammengesetzt.
 *
 */
function SetMenueSEOURLs($MenueID, $LanguageID, $Redirect = true) {

    // SEO Einstellungen einlesen
    $Einstellungen = GetEinstellungen('', 'seo');

    // SEO URL Name der Sprache
    $SEOURLLanguageName = GetLanguageSEOName($LanguageID);

    // SEO URL des Menüpunktes
    $MenueSEONameArray = GetMenueSEONameArray($MenueID, $LanguageID);
    
    $MenueSEOURL = $SEOURLLanguageName . $MenueSEONameArray['url_name'];
    
    // Pruefen, ob für den Menüpunkt ein Eintrag mit dem gleichen SEO Pfad schon vorhanden ist.
    if (ExistsMenueSEOURL($MenueID, $LanguageID, $MenueSEOURL)) {
        return;
    }
    
    // SEO URL auf eindeutigkeit pruefen und ggf. eine Nummer anhaengen
    $MenueSEOURL = GetUniqueURL($MenueSEOURL);
    
    // SEO URL sichern
    $SEOURLID = SaveMenueSEOURL($MenueID, $LanguageID, $MenueSEOURL);
    
    // alte SEO URLs zu diesem Menüpunkt löschen bzw. umleiten
    if ($Redirect) {
        DeleteMenueSEOURLElement($MenueID, $LanguageID, $SEOURLID, false);
    }

}

function GetMenueSEONameArray($MenueID, $LanguageID) {

    $StandardLanguageID = GetDefaultLanguageID();

    // den Artikel einlesen
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_NAVI . '.id, ';
    $SQLString .= TABLE_NAVI_LANGU . '.language_id, ';
    $SQLString .= 'IF(' . TABLE_NAVI_LANGU . '.url_name != \'\', ' . TABLE_NAVI_LANGU . '.url_name, table_navi_langu_standard.url_name) AS url_name, ';
    $SQLString .= 'IF(' . TABLE_NAVI_LANGU . '.url_name != \'\', 1, 0) AS translated ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_NAVI . ' ';
    $SQLString .= 'LEFT JOIN ' . TABLE_NAVI_LANGU . ' ON ((' . TABLE_NAVI . '.id = ' . TABLE_NAVI_LANGU . '.menue_id) AND (' . TABLE_NAVI_LANGU . '.language_id = ' . $LanguageID . ')) ';
    $SQLString .= "LEFT JOIN " . TABLE_NAVI_LANGU . " table_navi_langu_standard ON ((" . TABLE_NAVI . ".id = table_navi_langu_standard.menue_id) AND (table_navi_langu_standard.language_id = " . $StandardLanguageID . ")) ";
    $SQLString .= 'WHERE ';
    $SQLString .= '(';
    $SQLString .= '(' . TABLE_NAVI . '.id = \'' . $MenueID . '\') AND ';
    $SQLString .= '1)';

    $MySQLQueryReference = errorlogged_mysql_query($SQLString);

    while ($MenueRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {

        $MenueSEONameArray['menue_id'] = $MenueRow['id']; 
        $MenueSEONameArray['language_id'] = $MenueRow['language_id']; 
        $MenueSEONameArray['url_name'] = $MenueRow['url_name']; 
        $MenueSEONameArray['translated'] = $MenueRow['translated']; 
        
    }

    return $MenueSEONameArray;

}

/**
 * Prüft ob zu einem Menüpunkt schon eine URL hinterlegt ist
 * 
 * Hier wird geprüft, ob zu einem übergebenen Menüpunkt und Sprache die ebenfalls übergebene SEO URL
 * schon hinterlegt ist.
 * 
 */
function ExistsMenueSEOURL($MenueID, $LanguageID, $MenueSEOURL) {
    
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_SEOURLS . '.seourl_id ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_SEOURLS . ' ';
    $SQLString .= 'WHERE ';
    $SQLString .= TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_MENUE . '\' AND ';
    $SQLString .= TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\' AND ';
    $SQLString .= TABLE_SEOURLS . '.menue_id = \'' . $MenueID . '\' AND ';
    $SQLString .= TABLE_SEOURLS . '.url = \'' . $MenueSEOURL . '\' AND ';
    $SQLString .= TABLE_SEOURLS . '.http_status = \'0\' ';
    
    $MenueObject = mysql_fetch_object(errorlogged_mysql_query($SQLString));
    
    if ($MenueObject) {
        return true;
    } else {
        return false;
    }
    
}

/**
 * Sichert die SEO URL eines Menüpunktes
 *
 * Hier wird der SEO URL eines Menüpunktes in der Datenbank abgelegt und alle einzelnen Element der
 * URL.
 * 
 */
function SaveMenueSEOURL($MenueID, $LanguageID, $MenueSEOURL) {

    $SQLString = 'INSERT INTO ' . TABLE_SEOURLS . ' SET ';
    $SQLString .= TABLE_SEOURLS . '.url = \'' . $MenueSEOURL . '\', ';
    $SQLString .= TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_MENUE . '\', ';
    $SQLString .= TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\', ';
    $SQLString .= TABLE_SEOURLS . '.menue_id = \'' . $MenueID . '\' ';
    
    $MySQLQueryReference = errorlogged_mysql_query($SQLString);
    
    $SEOURLID = mysql_insert_id();
    
    return $SEOURLID;
    
}

/**
 * Löscht alle Einträge eines Menüpunktes
 *
 * Es werden alle Sprachen eingelesen und über die Funktion DeleteMenueSEOURLElement() die
 * entsprechenden Einträge gelöscht.
 */
function DeleteMenueSEOURL($MenueID) {
    
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_LANGUAGE . '.language_id ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_LANGUAGE . ' ';
    $SQLString .= 'WHERE ';
    $SQLString .= "(";
    $SQLString .= '(' . TABLE_LANGUAGE . '.language_active = 1) AND ';
    $SQLString .= " 1)";
    
    $MySQLQueryReference = errorlogged_mysql_query($SQLString);
    
    while ($LanguageRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {
        DeleteMenueSEOURLElement($MenueID, $LanguageRow['language_id'], 0, true);
    }
    
}


/**
 * Löschen bzw. Umleiten alter SEO URLs eines Menüpunktes
 *
 * Hier wird in Abhängigkeit der SEO Einstellungen entweder alle alten SEO URLs des Menüpunktes und der
 * Sprache gelöscht oder es wird eine Umleitung eingetragen und auf die neue SEO URL verwiesen.
 * 
 */
function DeleteMenueSEOURLElement($MenueID, $LanguageID, $SEOURLID, $DeleteEntry) {
    
    // SEO Einstellungen einlesen
    $Einstellungen = GetEinstellungen('', 'seo');
    
    // Entsprechende Einstellung benutzen wenn das Elemetn gelöscht oder umbenannt wurde
    if ($DeleteEntry) {
        $Umleitung = $Einstellungen->seo->sprechende_urls_umleitung_loeschen;
    } else {
        $Umleitung = $Einstellungen->seo->sprechende_urls_umleitung_umbenennen;
    }
    
    // alte Eintraege loeschen bzw. umleiten (Einstellungen)
    if (!$Umleitung) {

        $SQLString = 'SELECT ';
        $SQLString .= TABLE_SEOURLS . '.seourl_id ';
        $SQLString .= 'FROM ';
        $SQLString .= TABLE_SEOURLS . ' ';
        $SQLString .= 'WHERE ';
        $SQLString .= TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_MENUE . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.menue_id = \'' . $MenueID . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.seourl_id != \'' . $SEOURLID . '\' ';
        
        $MySQLQueryReference = errorlogged_mysql_query($SQLString);
        
        while ($SEOURLRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {
            
            $SQLString = 'DELETE FROM ' . TABLE_SEOURLS .  ' ';
            $SQLString .= 'WHERE ';
            $SQLString .= TABLE_SEOURLS . '.seourl_id = \'' . $SEOURLRow['seourl_id'] . '\' ';
            
            $MySQLQueryDeleteReference = errorlogged_mysql_query($SQLString);
        
        }
    
    }

    // ggf. Umleitung der alten URL  (Einstellungen)
    if ($Umleitung) {

        $SQLString = 'UPDATE ' . TABLE_SEOURLS .  ' SET ';
        $SQLString .= TABLE_SEOURLS . '.http_status = \'301\', ';
        $SQLString .= TABLE_SEOURLS . '.redirect_seourl_id = \'' . $SEOURLID . '\', ';
        $SQLString .= TABLE_SEOURLS . '.delete_date = NOW() ';
        $SQLString .= 'WHERE ';
        $SQLString .= TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_MENUE . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.menue_id = \'' . $MenueID . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.seourl_id != \'' . $SEOURLID . '\' AND ';
        $SQLString .= '(';
        $SQLString .= TABLE_SEOURLS . '.http_status = \'\' ';
        $SQLString .= ')';
        
        $MySQLUpdateQueryReference = errorlogged_mysql_query($SQLString);
        
        $SQLString = 'UPDATE ' . TABLE_SEOURLS .  ' SET ';
        $SQLString .= TABLE_SEOURLS . '.redirect_seourl_id = \'' . $SEOURLID . '\' ';
        $SQLString .= 'WHERE ';
        $SQLString .= TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_MENUE . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.menue_id = \'' . $MenueID . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.seourl_id != \'' . $SEOURLID . '\' AND ';
        $SQLString .= '(';
        $SQLString .= TABLE_SEOURLS . '.http_status = \'301\' ';
        $SQLString .= ')';
        
        $MySQLUpdateQueryReference = errorlogged_mysql_query($SQLString);
    
    }

}


/**
 * Dekodiert einen eigenen Menüpunkt für die SEO URLs
 * 
 * Hier wird lediglich die Überschrift des eigene Menüpunkts bzw. die manuelle Vorgabe weiter an die 
 * Funktion DecodeSEOName() gegeben, die dann wiederum die Umwandlung für die sprechenden URLs vornimmt.
 *
 */
function DecodeMenueSEOName($MenueName) {

    // SEO Namen setzen
    $SEOMenueName = DecodeSEOName($MenueName);

    return $SEOMenueName;

}

/**
 * SEO Name der Hersteller zurücksetzen
 * 
 * Hier wird der SEO Name der Hersteller zurückgesetzt.
 *
 */
function UnsetAllHerstellerSEOName() {
    
    // SEO Name sichern
    $SQLString = 'UPDATE ' . TABLE_HERSTELLER . ' SET ';
    $SQLString .= TABLE_HERSTELLER . '.url_name = \'\' ';
    $SQLString .= 'WHERE ';
    $SQLString .= '( ';
    $SQLString .= ' 1)';
    
    $MySQLQueryReference = errorlogged_mysql_query($SQLString);
    
}

/**
 * SEO Name der Hersteller setzen
 * 
 * Hier wird der SEO Name der Hersteller gesetzt. Ist eine Vorgabe zu dem hersteller hinterlegt, wird
 * diese als Grundlage herangezogen. Ansonsten wird der Name des Herstellers verwendet. Die Umwandlung
 * findet dann über die Funktion DecodeHerstellerSEOName() statt.
 *
 */
function SetAllHerstellerSEOName() {

    // alle eingetragenen Daten aller Hersteller einlesen
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_HERSTELLER . '.id, ';
    $SQLString .= TABLE_HERSTELLER . '.name, ';
    $SQLString .= TABLE_HERSTELLER . '.url_name_vorgabe ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_HERSTELLER . ' ';
    $SQLString .= 'WHERE ';
    $SQLString .= '(';
    $SQLString .= ' 1)';
    
    $MySQLQueryReference = errorlogged_mysql_query($SQLString);

    while ($HerstellerRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {

        // wenn es eine Vorgabe gibt, dann diese als Grundlage für den SEO Name nehmen
        if ($HerstellerRow['url_name_vorgabe']) {
            $URLName = DecodeHerstellerSEOName($HerstellerRow['url_name_vorgabe']);
            
        // sonst den Namen des Herstellers als Grundlage für den SEO Name nehmen
        } else {
            $URLName = DecodeHerstellerSEOName($HerstellerRow['name']);
        }

        // SEO Name sichern
        $SQLString = 'UPDATE ' . TABLE_HERSTELLER . ' SET ';
        $SQLString .= TABLE_HERSTELLER . '.url_name = \'' . $URLName . '\' ';
        $SQLString .= 'WHERE ';
        $SQLString .= TABLE_HERSTELLER . '.id = \'' . $HerstellerRow['id'] . '\' ';

        $MySQLUpdateQueryReference = errorlogged_mysql_query($SQLString);

    }

}

/**
 * alle SEO URLs der Hersteller setzen
 * 
 * Hier werden alle Hersteller eingelesen. Über die Funktion SetHerstellerSEOURLs() wird die benötigte
 * SEO URL genriert und gesichert.
 *
 */
function SetAllHerstellerSEOURL($LanguageID = 0) {

    // alle aktiven Sprachen einlesen
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_LANGUAGE . '.language_id ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_LANGUAGE . ' ';
    $SQLString .= 'WHERE ';
    $SQLString .= "(";
    
    if ($LanguageID) {
        $SQLString .= '(' . TABLE_LANGUAGE . '.language_id = \'' . $LanguageID . '\') AND ';
    } else {
        $SQLString .= '(' . TABLE_LANGUAGE . '.language_active = 1) AND ';
    }

    $SQLString .= " 1)";
    
    $MySQLQueryReference = errorlogged_mysql_query($SQLString);
    
    while ($LanguageRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {
        
        // Alle Hersteller einlesen
        $SQLString = 'SELECT ';
        $SQLString .= TABLE_HERSTELLER . '.id AS hersteller_id ';
        $SQLString .= 'FROM ';
        $SQLString .= TABLE_HERSTELLER . " ";
        
        $MySQLArtikelQueryReference = errorlogged_mysql_query($SQLString);
    
        while ($HerstellerRow = mysql_fetch_array($MySQLArtikelQueryReference, MYSQL_ASSOC)) {
    
            SetHerstellerSEOURLs($HerstellerRow['hersteller_id'], $LanguageRow['language_id']);
    
        }
    
    }
    
}

/**
 * SEO URLs eines Herstellers setzen
 * 
 * Hier wird die eigentlich SEO URL eines Hersteller gesetzt
 *
 */
function SetHerstellerSEOURLs($HerstellerID, $LanguageID, $Redirect = true) {

    // SEO Einstellungen einlesen
    $Einstellungen = GetEinstellungen('', 'seo');

    // SEO URL Name der Sprache
    $SEOURLLanguageName = GetLanguageSEOName($LanguageID);
    
    // Hersteller SWO URL zusammensetzen
    $HerstellerSEONameArray = GetHerstellerSEONameArray($HerstellerID);
    $HerstellerSEOURL = $SEOURLLanguageName . $HerstellerSEONameArray['url_name'];
    
    // Pruefen, ob für den Hersteller ein Eintrag mit dem gleichen SEO Pfad schon vorhanden ist.
    if (ExistsHerstellerSEOURL($HerstellerID, $LanguageID, $HerstellerSEOURL)) {
        return;
    }
    
    // SEO URL auf eindeutigkeit pruefen und ggf. eine Nummer anhaengen
    $HerstellerSEOURL = GetUniqueURL($HerstellerSEOURL);
    
    // SEO URL sichern
    $SEOURLID = SaveHerstellerSEOURL($HerstellerID, $LanguageID, $HerstellerSEOURL);
    
    // alte SEO URLs zu diesem Hersteller löschen bzw. umleiten
    if ($Redirect) {
        DeleteHerstellerSEOURLElement($HerstellerID, $LanguageID, $SEOURLID, false);
    }
        
}

function GetHerstellerSEONameArray($HerstellerID) {

    // den Artikel einlesen
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_HERSTELLER . '.id, ';
    $SQLString .= TABLE_HERSTELLER . '.url_name ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_HERSTELLER . ' ';
    $SQLString .= 'WHERE ';
    $SQLString .= '(';
    $SQLString .= '(' . TABLE_HERSTELLER . '.id = \'' . $HerstellerID . '\') AND ';
    $SQLString .= '1)';

    $MySQLQueryReference = errorlogged_mysql_query($SQLString);

    while ($HerstellerRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {

        $HerstellerSEONameArray['hersteller_id'] = $HerstellerRow['id']; 
        $HerstellerSEONameArray['url_name'] = $HerstellerRow['url_name']; 
        
    }

    return $HerstellerSEONameArray;

}

/**
 * Prüft ob zu einem Hersteller schon eine URL hinterlegt ist
 * 
 * Hier wird geprüft, ob zu einem übergebenen Hersteller die ebenfalls übergebene SEO URL
 * schon hinterlegt ist.
 * 
 */
function ExistsHerstellerSEOURL($HerstellerID, $LanguageID, $HerstellerSEOURL) {
    
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_SEOURLS . '.seourl_id ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_SEOURLS . ' ';
    $SQLString .= 'WHERE ';
    $SQLString .= TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_HERSTELLER . '\' AND ';
    $SQLString .= TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\' AND ';
    $SQLString .= TABLE_SEOURLS . '.hersteller_id = \'' . $HerstellerID . '\' AND ';
    $SQLString .= TABLE_SEOURLS . '.url = \'' . $HerstellerSEOURL . '\' AND ';
    $SQLString .= TABLE_SEOURLS . '.http_status = \'0\' ';
    
    $HerstellerObject = mysql_fetch_object(errorlogged_mysql_query($SQLString));
    
    if ($HerstellerObject) {
        return true;
    } else {
        return false;
    }
    
}

/**
 * Sichert die SEO URL eines Herstellers
 *
 * Hier wird der SEO URL eines Herstellers in der Datenbank abgelegt.
 * 
 */
function SaveHerstellerSEOURL($HerstellerID, $LanguageID, $HerstellerSEOURL) {

    $SQLString = 'INSERT INTO ' . TABLE_SEOURLS . ' SET ';
    $SQLString .= TABLE_SEOURLS . '.url = \'' . $HerstellerSEOURL . '\', ';
    $SQLString .= TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_HERSTELLER . '\', ';
    $SQLString .= TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\', ';
    $SQLString .= TABLE_SEOURLS . '.hersteller_id = \'' . $HerstellerID . '\' ';
    
    $MySQLQueryReference = errorlogged_mysql_query($SQLString);
    
    $SEOURLID = mysql_insert_id();
    
    return $SEOURLID;
    
}

/**
 * Löscht alle Einträge eines Herstellers
 *
 * Es werden alle Sprachen eingelesen und über die Funktion DeleteHerstellerSEOURLElement() die
 * entsprechenden Einträge gelöscht.
 */
function DeleteHerstellerSEOURL($HerstellerID) {
    
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_LANGUAGE . '.language_id ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_LANGUAGE . ' ';
    $SQLString .= 'WHERE ';
    $SQLString .= "(";
    $SQLString .= '(' . TABLE_LANGUAGE . '.language_active = 1) AND ';
    $SQLString .= " 1)";
    
    $MySQLQueryReference = errorlogged_mysql_query($SQLString);
    
    while ($LanguageRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {
        DeleteHerstellerSEOURLElement($HerstellerID, $LanguageRow['language_id'], 0, true);
    }
    
}


/**
 * Löschen bzw. Umleiten alter SEO URLs eines Herstellers
 *
 * Hier wird in Abhängigkeit der SEO Einstellungen entweder alle alten SEO URLs des Herstellers und der
 * Sprache gelöscht oder es wird eine Umleitung eingetragen und auf die neue SEO URL verwiesen.
 * 
 */
function DeleteHerstellerSEOURLElement($HerstellerID, $LanguageID, $SEOURLID, $DeleteEntry) {
    
    // SEO Einstellungen einlesen
    $Einstellungen = GetEinstellungen('', 'seo');
    
    // Entsprechende Einstellung benutzen wenn das Elemetn gelöscht oder umbenannt wurde
    if ($DeleteEntry) {
        $Umleitung = $Einstellungen->seo->sprechende_urls_umleitung_loeschen;
    } else {
        $Umleitung = $Einstellungen->seo->sprechende_urls_umleitung_umbenennen;
    }
        
    // alte Eintraege loeschen bzw. umleiten (Einstellungen)
    if (!$Umleitung) {

        $SQLString = 'SELECT ';
        $SQLString .= TABLE_SEOURLS . '.seourl_id ';
        $SQLString .= 'FROM ';
        $SQLString .= TABLE_SEOURLS . ' ';
        $SQLString .= 'WHERE ';
        $SQLString .= TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_HERSTELLER . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.hersteller_id = \'' . $HerstellerID . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.seourl_id != \'' . $SEOURLID . '\' ';
        
        $MySQLQueryReference = errorlogged_mysql_query($SQLString);
        
        while ($SEOURLRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {
            
            $SQLString = 'DELETE FROM ' . TABLE_SEOURLS .  ' ';
            $SQLString .= 'WHERE ';
            $SQLString .= TABLE_SEOURLS . '.seourl_id = \'' . $SEOURLRow['seourl_id'] . '\' ';
            
            $MySQLQueryDeleteReference = errorlogged_mysql_query($SQLString);
        
        }
    
    }

    // ggf. Umleitung der alten URL (Einstellungen)
    if ($Umleitung) {

        $SQLString = 'UPDATE ' . TABLE_SEOURLS .  ' SET ';
        $SQLString .= TABLE_SEOURLS . '.http_status = \'301\', ';
        $SQLString .= TABLE_SEOURLS . '.redirect_seourl_id = \'' . $SEOURLID . '\', ';
        $SQLString .= TABLE_SEOURLS . '.delete_date = NOW() ';
        $SQLString .= 'WHERE ';
        $SQLString .= TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_HERSTELLER . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.hersteller_id = \'' . $HerstellerID . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.seourl_id != \'' . $SEOURLID . '\' AND ';
        $SQLString .= '(';
        $SQLString .= TABLE_SEOURLS . '.http_status = \'\' ';
        $SQLString .= ')';
        
        $MySQLUpdateQueryReference = errorlogged_mysql_query($SQLString);
        
        $SQLString = 'UPDATE ' . TABLE_SEOURLS .  ' SET ';
        $SQLString .= TABLE_SEOURLS . '.redirect_seourl_id = \'' . $SEOURLID . '\' ';
        $SQLString .= 'WHERE ';
        $SQLString .= TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_HERSTELLER . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.hersteller_id = \'' . $HerstellerID . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.seourl_id != \'' . $SEOURLID . '\' AND ';
        $SQLString .= '(';
        $SQLString .= TABLE_SEOURLS . '.http_status = \'301\' ';
        $SQLString .= ')';
        
        $MySQLUpdateQueryReference = errorlogged_mysql_query($SQLString);
    
    }

}

/**
 * SEO URLs der eines Herstellers zugeordneten Artikel prüfen
 * 
 * Nachdem ein Hersteller umbenannt wurde, werden hier aller SEO URLs der Artikel, die dieser Kategorie
 * zugeordnet sind neu geschrieben.
 */
function SetArtikelHerstellerSEOURLs($HerstellerID, $LanguageID) {

    // alle möglichen Artikel eines Herstellers einlesen
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_SEOURLS . '.seourl_id, ';
    $SQLString .= TABLE_SEOURLS . '.artikel_id, ';
    $SQLString .= TABLE_SEOURLS . '.hersteller_id ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_SEOURLS . ' ';
    $SQLString .= 'WHERE ';
    $SQLString .= TABLE_SEOURLS . '.hersteller_id = \'' . $HerstellerID . '\' AND ';
    $SQLString .= TABLE_SEOURLS . '.artikel_id != 0 AND ';
    $SQLString .= TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\' AND ';
    $SQLString .= TABLE_SEOURLS . '.http_status = \'0\' ';
    
    $MySQLQueryReference = errorlogged_mysql_query($SQLString);
    
    while ($ArtikelRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {

        $ArtikelSEONameArray = GetArtikelSEONameArray($ArtikelRow['artikel_id'], $LanguageID);
        $HerstellerSEONameArray = GetHerstellerSEONameArray($HerstellerID);
            
        $ArtikelSEOURL = $SEOURLLanguageName . $HerstellerSEONameArray['url_name'] . '/' . $ArtikelSEONameArray['url_artikel_name'];

        // Pruefen, ob für den Artikel ein Eintrag mit dem gleichen SEO Pfad schon vorhanden ist.
        if (ExistsArtikelSEOURL($ArtikelRow['artikel_id'], 0, $HerstellerID, 0, $LanguageID, $ArtikelSEOURL)) {
            continue;
        }
        
        // SEO URL auf eindeutigkeit pruefen und ggf. eine Nummer anhaengen
        $ArtikelSEOURL = GetUniqueURL($ArtikelSEOURL);
        
        // SEO URL sichern
        $SEOURLID = SaveArtikelSEOURL($ArtikelRow['artikel_id'], 0, $ArtikelRow['hersteller_id'], 0, $LanguageID, $ArtikelSEOURL, $KategorieSEOPathArray);
        
        // alte SEO URLs zu diesem Hersteller löschen bzw. umleiten
        DeleteArtikelSEOURLElement($ArtikelRow['artikel_id'], 0, $ArtikelRow['hersteller_id'], 0, $LanguageID, $SEOURLID, false);
        
    }
    
}

/**
 * SEO Name der Artikel zurücksetzen
 * 
 * Hier wird der SEO Name der Artikel zurückgesetzt.
 *
 */
function UnsetAllArtikelSEOName($LanguageID = 0) {
    
    // SEO Name sichern
    $SQLString = 'UPDATE ' . TABLE_ARTIKEL_LANGU . ' SET ';
    $SQLString .= TABLE_ARTIKEL_LANGU . '.url_artikel_name = \'\' ';
    $SQLString .= 'WHERE ';
    $SQLString .= '( ';

    if ($LanguageID) {
        $SQLString .= '(' . TABLE_ARTIKEL_LANGU . '.language_id = \'' . $LanguageID . '\') AND ';
    }
    
    $SQLString .= ' 1)';
    
    $MySQLQueryReference = errorlogged_mysql_query($SQLString);
    
}


/**
 * SEO Name der Artikel setzen
 * 
 * Hier wird der SEO Name der Artikel gesetzt. Ist eine Vorgabe zu dem Artikel hinterlegt, wird
 * diese als Grundlage herangezogen. Ansonsten wird der Name des Artikels verwendet. Die Umwandlung
 * findet dann über die Funktion DecodeArtikelSEOName() statt.
 *
 */
function SetAllArtikelSEOName($LanguageID = 0) {

    // alle eingetragenen Sprachdaten aller Artikel einlesen
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_ARTIKEL_LANGU . '.artikel_id, ';
    $SQLString .= TABLE_ARTIKEL_LANGU . '.language_id, ';
    $SQLString .= TABLE_ARTIKEL_LANGU . '.artikel_name, ';
    $SQLString .= TABLE_ARTIKEL_LANGU . '.url_artikel_name_vorgabe ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_ARTIKEL_LANGU . ' ';
    $SQLString .= 'WHERE ';
    $SQLString .= '(';
    
    if ($LanguageID) {
        $SQLString .= '(' . TABLE_ARTIKEL_LANGU . '.language_id = \'' . $LanguageID . '\') AND ';
    }

    $SQLString .= ' 1)';
    
    $MySQLQueryReference = errorlogged_mysql_query($SQLString);

    while ($ArtikelRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {

        // wenn es eine Vorgabe gibt, dann diese als Grundlage für den SEO Name nehmen
        if ($ArtikelRow['url_artikel_name_vorgabe']) {
            $URLArtikelName = DecodeArtikelSEOName($ArtikelRow['url_artikel_name_vorgabe']);
            
        // sonst den Namen des Artikels als Grundlage für den SEO Name nehmen
        } else {
            $URLArtikelName = DecodeArtikelSEOName($ArtikelRow['artikel_name']);
        }

        // SEO Name sichern
        $SQLString = 'UPDATE ' . TABLE_ARTIKEL_LANGU . ' SET ';
        $SQLString .= TABLE_ARTIKEL_LANGU . '.url_artikel_name = \'' . $URLArtikelName . '\' ';
        $SQLString .= 'WHERE ';
        $SQLString .= TABLE_ARTIKEL_LANGU . '.artikel_id = \'' . $ArtikelRow['artikel_id'] . '\' AND ';
        $SQLString .= TABLE_ARTIKEL_LANGU . '.language_id = \'' . $ArtikelRow['language_id'] . '\' ';

        $MySQLUpdateQueryReference = errorlogged_mysql_query($SQLString);

    }

}

/**
 * alle SEO URLs der Artikel setzen
 * 
 * Hier werden alle Artikel eingelesen. In Kombination mit allen aktiven Sprachen wird dann
 * über die Funktion SetArtikelSEOURLs() zu jedem einzelnen Artikel die benötigte SEO URL genriert
 * und gesichert. Es kann aber auch gezielt nur eine Sprach übergeben werden, wenn die entsprechende
 * Sprache aktiviert wird
 *
 */
function SetAllArtikelSEOURL($LanguageID = 0) {

    // Standardsprache einlesen
    $StandardLanguageID = GetDefaultLanguageID();
    
    // alle aktiven Sprachen einlesen
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_LANGUAGE . '.language_id ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_LANGUAGE . ' ';
    $SQLString .= 'WHERE ';
    $SQLString .= "(";
    
    if ($LanguageID) {
        $SQLString .= '(' . TABLE_LANGUAGE . '.language_id = \'' . $LanguageID . '\') AND ';
    } else {
        $SQLString .= '(' . TABLE_LANGUAGE . '.language_active = 1) AND ';
    }

    $SQLString .= " 1)";
    
    $MySQLQueryReference = errorlogged_mysql_query($SQLString);
    
    while ($LanguageRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {
        
        // Alle Artikel einlesen
        $SQLString = 'SELECT ';
        $SQLString .= TABLE_ARTIKEL . '.id AS artikel_id ';
        $SQLString .= 'FROM ';
        $SQLString .= TABLE_ARTIKEL . " ";
        
        $MySQLArtikelQueryReference = errorlogged_mysql_query($SQLString);
    
        while ($ArtikelRow = mysql_fetch_array($MySQLArtikelQueryReference, MYSQL_ASSOC)) {
    
            SetArtikelSEOURLs($ArtikelRow['artikel_id'], $LanguageRow['language_id']);
    
        }
    
    }

}

/**
 * SEO URLs der einer Kategorie zugeordneten Artikel prüfen
 * 
 * Nachdem eine Kategorie umbenannt wurde, werden hier aller SEO URLs der Artikel, die dieser Kategorie
 * zugeordnet sind neu geschrieben.
 */
function SetArtikelKategorieSEOURLs($KategorieID, $LanguageID) {

    // alle möglichen Artikel einlesen, die der Kategorie zugeordnet sein kann
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_SEOURLS_ELEMENTS . '.seourl_id, ';
    $SQLString .= TABLE_SEOURLS_ELEMENTS . '.artikel_id, ';
    $SQLString .= TABLE_SEOURLS . '.kategorie_id ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_SEOURLS_ELEMENTS . ' ';
    $SQLString .= 'LEFT JOIN ' . TABLE_SEOURLS . ' ON ' . TABLE_SEOURLS . '.seourl_id = ' . TABLE_SEOURLS_ELEMENTS . '.seourl_id ';
    $SQLString .= 'WHERE ';
    $SQLString .= TABLE_SEOURLS_ELEMENTS . '.kategorie_id = \'' . $KategorieID . '\' AND ';
    $SQLString .= TABLE_SEOURLS_ELEMENTS . '.artikel_id != 0 AND ';
    $SQLString .= TABLE_SEOURLS_ELEMENTS . '.language_id = \'' . $LanguageID . '\' AND ';
    $SQLString .= TABLE_SEOURLS . '.http_status = \'0\' ';
    
//    echo '$SQLString: ' . $SQLString . '<br>';
//    exit;
    
    $MySQLQueryReference = errorlogged_mysql_query($SQLString);
    
    while ($ArtikelRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {

        unset($KategorieSEOPathArray);
        
        $KategorieSEOPathArray = GetKategorieSEOPathArray($ArtikelRow['kategorie_id'], $LanguageID, array());
    
        // SEO Kategorie Pfad zusammensetzen
        $KategorieSEOURL = '';
        foreach ($KategorieSEOPathArray as $KategorieSEOPathElement) {
            $KategorieSEOURL .= $KategorieSEOPathElement['url_name'] . '/';
        }
        
        $ArtikelSEONameArray = GetArtikelSEONameArray($ArtikelRow['artikel_id'], $LanguageID);
        $ArtikelSEOURL = $SEOURLLanguageName . substr($KategorieSEOURL, 0, strlen($KategorieSEOURL) - 1) . '/' . $ArtikelSEONameArray['url_artikel_name'];

//        echo '$ArtikelSEOURL: ' . $ArtikelSEOURL . '<br>';
        
        // Pruefen, ob für den Artikel ein Eintrag mit dem gleichen SEO Pfad schon vorhanden ist.
        if (ExistsArtikelSEOURL($ArtikelRow['artikel_id'], $ArtikelRow['kategorie_id'], 0, 0, $LanguageID, $ArtikelSEOURL)) {
            continue;
        }
        
        // SEO URL auf eindeutigkeit pruefen und ggf. eine Nummer anhaengen
        $ArtikelSEOURL = GetUniqueURL($ArtikelSEOURL);
        
        // SEO URL sichern
        $SEOURLID = SaveArtikelSEOURL($ArtikelRow['artikel_id'], $ArtikelRow['kategorie_id'], 0, 0, $LanguageID, $ArtikelSEOURL, $KategorieSEOPathArray);
        
        // alte SEO URLs zu dieser Kategorie löschen bzw. umleiten
        DeleteArtikelSEOURLElement($ArtikelRow['artikel_id'], $ArtikelRow['kategorie_id'], 0, 0, $LanguageID, $SEOURLID, false);
        
    }
    
}

/**
 * SEO URLs eines Artikels setzen
 * 
 * Hier wird die eigentlich SEO URL eines Artikels in einer Sprache gesetzt. Zuerst wird die URL
 * zusammengesetzt.
 *
 */
function SetArtikelSEOURLs($ArtikelID, $LanguageID, $Redirect = true) {

	global $Einstellungen;
	global $SEOURLLanguageName;
	
    // SEO Einstellungen einlesen
	if (!$Einstellungen) {
        $Einstellungen = GetEinstellungen('', 'seo');
	}

    // SEO URL Name der Sprache
	$SEOURLLanguageName = GetLanguageSEOName($LanguageID);
    
    // ********************************************************************************
    // ** Nur den Artikelnamen als URL ablegen
    // ********************************************************************************

    $ArtikelSEONameArray = GetArtikelSEONameArray($ArtikelID, $LanguageID);
    $ArtikelSEOURL = $SEOURLLanguageName . $ArtikelSEONameArray['url_artikel_name'];

    // Pruefen, ob für den Artikel ein Eintrag mit dem gleichen SEO Pfad schon vorhanden ist.
    if (!ExistsArtikelSEOURL($ArtikelID, 0, 0, 0, $LanguageID, $ArtikelSEOURL)) {

        // SEO URL auf eindeutigkeit pruefen und ggf. eine Nummer anhaengen
        $ArtikelSEOURL = GetUniqueURL($ArtikelSEOURL);
        
        // SEO URL sichern
        $SEOURLID = SaveArtikelSEOURL($ArtikelID, 0, 0, 0, $LanguageID, $ArtikelSEOURL, array());
        
        // alte SEO URLs zu dieser Kategorie löschen bzw. umleiten
        if ($Redirect) {
            DeleteArtikelSEOURLElement($ArtikelID, 0, 0, 0, $LanguageID, $SEOURLID, false);
        }
    
    }
    
    unset($SEOURLID);

    // ********************************************************************************
    // ** mit dem Hersteller die SEO URL bilden
    // ********************************************************************************
    if ($Einstellungen->seo->sprechende_urls_artikel_mit_hersteller) {

        // Hersteller des Artikels einlesen
        $HerstellerID = GetArtikelHersteller($ArtikelID);
        
        if ($HerstellerID) {
        
            // SEO URL zusammensetzen
            $ArtikelSEONameArray = GetArtikelSEONameArray($ArtikelID, $LanguageID);
            $HerstellerSEONameArray = GetHerstellerSEONameArray($HerstellerID);
            
            $ArtikelHerstellerSEOURL = $SEOURLLanguageName . $HerstellerSEONameArray['url_name'] . '/' . $ArtikelSEONameArray['url_artikel_name'];
            
            // Pruefen, ob für den Artikel ein Eintrag mit dem gleichen SEO Pfad schon vorhanden ist.
            if (!ExistsArtikelSEOURL($ArtikelID, 0, $HerstellerID, 0, $LanguageID, $ArtikelHerstellerSEOURL)) {

                // SEO URL auf eindeutigkeit pruefen und ggf. eine Nummer anhaengen
                $ArtikelHerstellerSEOURL = GetUniqueURL($ArtikelHerstellerSEOURL);
                
                // SEO URL sichern
                $SEOURLID = SaveArtikelSEOURL($ArtikelID, 0, $HerstellerID, 0, $LanguageID, $ArtikelHerstellerSEOURL, array());
                
                // alte SEO URLs zu diesem Hersteller löschen bzw. umleiten
                if ($Redirect) {
                    DeleteArtikelSEOURLElement($ArtikelID, 0, $HerstellerID, 0, $LanguageID, $SEOURLID, false);
                }
                    
            }
            
        }
        
        // nach alten Herstellern des Artikel suchen
        $SQLString = 'SELECT ';
        $SQLString .= TABLE_SEOURLS . '.hersteller_id ';
        $SQLString .= 'FROM ';
        $SQLString .= TABLE_SEOURLS . ' ';
        $SQLString .= 'WHERE ';
        $SQLString .= '(' . TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_ARTIKEL . '\') AND ';
        $SQLString .= '(' . TABLE_SEOURLS . '.http_status = \'0\') AND ';
        $SQLString .= '(' . TABLE_SEOURLS . '.artikel_id = \'' . $ArtikelID . '\') AND ';
        $SQLString .= '(' . TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\') AND ';
        $SQLString .= '(' . TABLE_SEOURLS . '.hersteller_id != \'' . $HerstellerID . '\') AND ';
        $SQLString .= '(' . TABLE_SEOURLS . '.hersteller_id != \'0\') AND ';
        $SQLString .= '(' . TABLE_SEOURLS . '.seourl_id != \'' . $SEOURLID . '\') ';

        $OldHerstellerObject = mysql_fetch_object(errorlogged_mysql_query($SQLString));

        if ($OldHerstellerObject) {
            
            if (!$SEOURLID) {
                $SEOURLID = GetArtikelSEOURL($ArtikelID, $LanguageID);
            }
            
            if ($Redirect) {
                DeleteArtikelSEOURLElement($ArtikelID, 0, $OldHerstellerObject->hersteller_id, 0, $LanguageID, $SEOURLID, false);
            }
                
        }
        
    } 
    
    // ********************************************************************************
    // ** mit der Aktion die SEO URL bilden
    // ********************************************************************************
    if ($Einstellungen->seo->sprechende_urls_artikel_mit_aktionen) {

        // Aktion des Artikels einlesen
        $AktionsID = GetArtikelAktion($ArtikelID);
        
        if ($AktionsID) {
        
            // SEO URL zusammensetzen
            $ArtikelSEONameArray = GetArtikelSEONameArray($ArtikelID, $LanguageID);
            $AktionsSEONameArray = GetAktionsSEONameArray($AktionsID, $LanguageID);
            
            $ArtikelAktionsSEOURL = $SEOURLLanguageName . $AktionsSEONameArray['url_name'] . '/' . $ArtikelSEONameArray['url_artikel_name'];
            
            // Pruefen, ob für den Artikel ein Eintrag mit dem gleichen SEO Pfad schon vorhanden ist.
            if (!ExistsArtikelSEOURL($ArtikelID, 0, 0, $AktionsID, $LanguageID, $ArtikelHerstellerSEOURL)) {

                // SEO URL auf eindeutigkeit pruefen und ggf. eine Nummer anhaengen
                $ArtikelAktionsSEOURL = GetUniqueURL($ArtikelAktionsSEOURL);
                
                // SEO URL sichern
                $SEOURLID = SaveArtikelSEOURL($ArtikelID, 0, 0, $AktionsID, $LanguageID, $ArtikelAktionsSEOURL, array());
                
                // alte SEO URLs zu dieser Aktion löschen bzw. umleiten
                if ($Redirect) {
                    DeleteArtikelSEOURLElement($ArtikelID, 0, 0, $AktionsID, $LanguageID, $SEOURLID, false);
                }
                    
            }
            
        }
        
        // nach alten Herstellern des Artikel suchen
        $SQLString = 'SELECT ';
        $SQLString .= TABLE_SEOURLS . '.aktions_id ';
        $SQLString .= 'FROM ';
        $SQLString .= TABLE_SEOURLS . ' ';
        $SQLString .= 'WHERE ';
        $SQLString .= '(' . TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_ARTIKEL . '\') AND ';
        $SQLString .= '(' . TABLE_SEOURLS . '.http_status = \'0\') AND ';
        $SQLString .= '(' . TABLE_SEOURLS . '.artikel_id = \'' . $ArtikelID . '\') AND ';
        $SQLString .= '(' . TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\') AND ';
        $SQLString .= '(' . TABLE_SEOURLS . '.aktions_id != \'' . $AktionsID . '\') AND ';
        $SQLString .= '(' . TABLE_SEOURLS . '.aktions_id != \'0\') AND ';
        $SQLString .= '(' . TABLE_SEOURLS . '.seourl_id != \'' . $SEOURLID . '\') ';

        $OldAktionsObject = mysql_fetch_object(errorlogged_mysql_query($SQLString));

        if ($OldAktionsObject) {
            
            if (!$SEOURLID) {
                $SEOURLID = GetArtikelSEOURL($ArtikelID, $LanguageID);
            }

            if ($Redirect) {
                DeleteArtikelSEOURLElement($ArtikelID, 0, 0, $OldAktionsObject->aktions_id, $LanguageID, $SEOURLID, false);
            }
                    
        }
        
    } 
    
    // ********************************************************************************
    // ** Alle Kategoriezuordnungen einlesen und ggf. die SEO URLS bilden
    // ********************************************************************************
    if ($Einstellungen->seo->sprechende_urls_artikel_mit_kategorie) {
    
        $SQLString = 'SELECT ';
        $SQLString .= TABLE_KATEGORIERELATION . '.kategorieid ';
        $SQLString .= 'FROM ';
        $SQLString .= TABLE_KATEGORIERELATION . ' ';
        $SQLString .= 'WHERE ';
        $SQLString .= TABLE_KATEGORIERELATION . '.artikelid = \'' . $ArtikelID . '\' ';
        
        $MySQLQueryReference = errorlogged_mysql_query($SQLString);
        
        while ($KategorieRelationRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {
            
            unset($KategorieSEOURL);
            
            $KategorieSEOPathArray = GetKategorieSEOPathArray($KategorieRelationRow['kategorieid'], $LanguageID, array());
            
            // SEO Kategorie Pfad zusammensetzen
            foreach ($KategorieSEOPathArray as $KategorieSEOPathElement) {
                $KategorieSEOURL .= $KategorieSEOPathElement['url_name'] . '/';
            }
            
            $ArtikelSEOURL = $SEOURLLanguageName . substr($KategorieSEOURL, 0, strlen($KategorieSEOURL) - 1) . '/' . $ArtikelSEONameArray['url_artikel_name'];

            // Pruefen, ob für den Artikel ein Eintrag mit dem gleichen SEO Pfad schon vorhanden ist.
            if (ExistsArtikelSEOURL($ArtikelID, $KategorieRelationRow['kategorieid'], 0, 0, $LanguageID, $ArtikelSEOURL)) {
                continue;
            }
            
            // SEO URL auf eindeutigkeit pruefen und ggf. eine Nummer anhaengen
            $ArtikelSEOURL = GetUniqueURL($ArtikelSEOURL);
            
            // SEO URL sichern
            $SEOURLID = SaveArtikelSEOURL($ArtikelID, $KategorieRelationRow['kategorieid'], 0, 0, $LanguageID, $ArtikelSEOURL, $KategorieSEOPathArray);
            
            // alte SEO URLs zu dieser Kategorie löschen bzw. umleiten
            if ($Redirect) {
                DeleteArtikelSEOURLElement($ArtikelID, $KategorieRelationRow['kategorieid'], 0, 0, $LanguageID, $SEOURLID, false);
            }
            
        }
        
    }

}

function GetArtikelSEONameArray($ArtikelID, $LanguageID) {

    $StandardLanguageID = GetDefaultLanguageID();

    // den Artikel einlesen
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_ARTIKEL . '.id, ';
    $SQLString .= TABLE_ARTIKEL_LANGU . '.language_id, ';
    $SQLString .= 'IF(' . TABLE_ARTIKEL_LANGU . '.url_artikel_name != \'\', ' . TABLE_ARTIKEL_LANGU . '.url_artikel_name, table_artikel_langu_standard.url_artikel_name) AS url_artikel_name, ';
    $SQLString .= 'IF(' . TABLE_ARTIKEL_LANGU . '.url_artikel_name != \'\', 1, 0) AS translated ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_ARTIKEL . ' ';
    $SQLString .= 'LEFT JOIN ' . TABLE_ARTIKEL_LANGU . ' ON ((' . TABLE_ARTIKEL . '.id = ' . TABLE_ARTIKEL_LANGU . '.artikel_id) AND (' . TABLE_ARTIKEL_LANGU . '.language_id = ' . $LanguageID . ')) ';
    $SQLString .= "LEFT JOIN " . TABLE_ARTIKEL_LANGU . " table_artikel_langu_standard ON ((" . TABLE_ARTIKEL . ".id = table_artikel_langu_standard.artikel_id) AND (table_artikel_langu_standard.language_id = " . $StandardLanguageID . ")) ";
    $SQLString .= 'WHERE ';
    $SQLString .= '(';
    $SQLString .= '(' . TABLE_ARTIKEL . '.id = \'' . $ArtikelID . '\') AND ';
    $SQLString .= '1)';

    $MySQLQueryReference = errorlogged_mysql_query($SQLString);

    while ($ArtikelRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {

        $ArtikelSEONameArray['artikel_id'] = $ArtikelRow['id']; 
        $ArtikelSEONameArray['language_id'] = $ArtikelRow['language_id']; 
        $ArtikelSEONameArray['url_artikel_name'] = $ArtikelRow['url_artikel_name']; 
        $ArtikelSEONameArray['translated'] = $ArtikelRow['translated']; 
        
    }

    return $ArtikelSEONameArray;

}

/**
 * Prüft ob zu einem Artikel schon eine URL hinterlegt ist
 * 
 * Hier wird geprüft, ob zu einem übergebenen Artikel und Sprache die ebenfalls übergebene SEO URL
 * schon hinterlegt ist.
 * 
 */
function ExistsArtikelSEOURL($ArtikelID, $KategorieID, $HerstellerID, $AktionsID, $LanguageID, $ArtikelSEOURL) {
    
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_SEOURLS . '.seourl_id ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_SEOURLS . ' ';
    $SQLString .= 'WHERE ';
    $SQLString .= TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_ARTIKEL . '\' AND ';
    $SQLString .= TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\' AND ';
    $SQLString .= TABLE_SEOURLS . '.artikel_id = \'' . $ArtikelID . '\' AND ';
    $SQLString .= TABLE_SEOURLS . '.kategorie_id = \'' . $KategorieID . '\' AND ';
    $SQLString .= TABLE_SEOURLS . '.hersteller_id = \'' . $HerstellerID . '\' AND ';
    $SQLString .= TABLE_SEOURLS . '.aktions_id = \'' . $AktionsID . '\' AND ';
    $SQLString .= TABLE_SEOURLS . '.url = \'' . $ArtikelSEOURL . '\' AND ';
    $SQLString .= TABLE_SEOURLS . '.http_status = \'0\' ';
    
    $ArtikelObject = mysql_fetch_object(errorlogged_mysql_query($SQLString));
    
    if ($ArtikelObject) {
        return true;
    } else {
        return false;
    }
    
}

/**
 * Gibt zu einem Artikel die hinterlegt URL zurück
 * 
 * 
 */
function GetArtikelSEOURL($ArtikelID, $LanguageID) {
    
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_SEOURLS . '.seourl_id ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_SEOURLS . ' ';
    $SQLString .= 'WHERE ';
    $SQLString .= TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_ARTIKEL . '\' AND ';
    $SQLString .= TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\' AND ';
    $SQLString .= TABLE_SEOURLS . '.artikel_id = \'' . $ArtikelID . '\' AND ';
    $SQLString .= TABLE_SEOURLS . '.kategorie_id = \'0\' AND ';
    $SQLString .= TABLE_SEOURLS . '.hersteller_id = \'0\' AND ';
    $SQLString .= TABLE_SEOURLS . '.artikel_id = \'' . $ArtikelID . '\' AND ';
    $SQLString .= TABLE_SEOURLS . '.http_status = \'0\' ';
    
    $ArtikelObject = mysql_fetch_object(errorlogged_mysql_query($SQLString));
    
    return $ArtikelObject->seourl_id;
    
}


/**
 * Sichert die SEO URL eines Artikels
 *
 * Hier wird der SEO URL eines Artikels in der Datenbank abgelegt und alle einzelnen Element der
 * URL.
 * 
 */
function SaveArtikelSEOURL($ArtikelID, $KategorieID, $HerstellerID, $AktionsID, $LanguageID, $ArtikelSEOURL, $KategorieSEOPathArray) {

    $SQLString = 'INSERT INTO ' . TABLE_SEOURLS . ' SET ';
    $SQLString .= TABLE_SEOURLS . '.url = \'' . $ArtikelSEOURL . '\', ';
    $SQLString .= TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_ARTIKEL . '\', ';
    $SQLString .= TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\', ';
    $SQLString .= TABLE_SEOURLS . '.artikel_id = \'' . $ArtikelID . '\', ';
    $SQLString .= TABLE_SEOURLS . '.kategorie_id = \'' . $KategorieID . '\', ';
    $SQLString .= TABLE_SEOURLS . '.hersteller_id = \'' . $HerstellerID . '\', ';
    $SQLString .= TABLE_SEOURLS . '.aktions_id = \'' . $AktionsID . '\' ';

    $MySQLQueryReference = errorlogged_mysql_query($SQLString);
    
    $SEOURLID = mysql_insert_id();
    
    // SEO Element sichern
    if ($KategorieSEOPathArray) {
    
	    foreach ($KategorieSEOPathArray as $KategorieSEOPathElement) {
	
	        $SQLString = 'INSERT INTO ' . TABLE_SEOURLS_ELEMENTS . ' SET ';
	        $SQLString .= TABLE_SEOURLS_ELEMENTS . '.seourl_id = \'' . $SEOURLID . '\', ';
	        $SQLString .= TABLE_SEOURLS_ELEMENTS . '.kategorie_id = \'' . $KategorieSEOPathElement['kategorie_id'] . '\', ';
	        $SQLString .= TABLE_SEOURLS_ELEMENTS . '.artikel_id = \'' . $ArtikelID . '\', ';
	        $SQLString .= TABLE_SEOURLS_ELEMENTS . '.language_id = \'' . $LanguageID . '\', ';
	        $SQLString .= TABLE_SEOURLS_ELEMENTS . '.translated = \'' . $KategorieSEOPathElement['translated'] . '\', ';
	        $SQLString .= TABLE_SEOURLS_ELEMENTS . '.seo_name = \'' . $KategorieSEOPathElement['url_name'] . '\' ';
	        
	        $MySQLQueryReference = errorlogged_mysql_query($SQLString);
	        
	    }

    }
	    
    return $SEOURLID;
    
}

/**
 * Löscht alle Einträge eines Artikels
 *
 * Es werden alle Sprachen eingelesen und über die Funktion DeleteCMSKategorieSEOURLElement() die
 * entsprechenden Einträge gelöscht.
 */
function DeleteArtikelSEOURL($ArtikelID) {
    
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_LANGUAGE . '.language_id ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_LANGUAGE . ' ';
    $SQLString .= 'WHERE ';
    $SQLString .= "(";
    $SQLString .= '(' . TABLE_LANGUAGE . '.language_active = 1) AND ';
    $SQLString .= " 1)";
    
    $MySQLQueryReference = errorlogged_mysql_query($SQLString);
    
    while ($LanguageRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {
        DeleteArtikelSEOURLElement($ArtikelID, 0, 0, 0, $LanguageRow['language_id'], 0, true);
    }
    
}

/**
 * Löschen bzw. Umleiten alter SEO URLs eines Artikels
 *
 * Hier wird in Abhängigkeit der SEO Einstellungen entweder alle alten SEO URLs des Artikels und der
 * Sprache gelöscht oder es wird eine Umleitung eingetragen und auf die neue SEO URL verwiesen.
 * 
 */
function DeleteArtikelSEOURLElement($ArtikelID, $KategorieID, $HerstellerID, $AktionsID, $LanguageID, $SEOURLID, $DeleteEntry) {
    
    // SEO Einstellungen einlesen
    $Einstellungen = GetEinstellungen('', 'seo');
    
    // Entsprechende Einstellung benutzen wenn das Elemetn gelöscht oder umbenannt wurde
    if ($DeleteEntry) {
        $Umleitung = $Einstellungen->seo->sprechende_urls_umleitung_loeschen;
    } else {
        $Umleitung = $Einstellungen->seo->sprechende_urls_umleitung_umbenennen;
    }
    
    // alte Eintraege loeschen bzw. umleiten (Einstellungen)
    if (!$Umleitung) {

        $SQLString = 'SELECT ';
        $SQLString .= TABLE_SEOURLS . '.seourl_id ';
        $SQLString .= 'FROM ';
        $SQLString .= TABLE_SEOURLS . ' ';
        $SQLString .= 'WHERE ';
        $SQLString .= TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_ARTIKEL . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.artikel_id = \'' . $ArtikelID . '\' AND ';
        $SQLString .= '(IF(' . $KategorieID . ', ' . TABLE_SEOURLS . '.kategorie_id = \'' . $KategorieID . '\', true)) AND ';
        $SQLString .= '(IF(' . $HerstellerID . ', ' . TABLE_SEOURLS . '.hersteller_id = \'' . $HerstellerID . '\', true)) AND ';
        $SQLString .= '(IF(' . $AktionsID . ', ' . TABLE_SEOURLS . '.aktions_id = \'' . $AktionsID . '\', true)) AND ';
        $SQLString .= TABLE_SEOURLS . '.seourl_id != \'' . $SEOURLID . '\' ';
        
        $MySQLQueryReference = errorlogged_mysql_query($SQLString);
        
        while ($SEOURLRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {
            
            $SQLString = 'DELETE FROM ' . TABLE_SEOURLS .  ' ';
            $SQLString .= 'WHERE ';
            $SQLString .= TABLE_SEOURLS . '.seourl_id = \'' . $SEOURLRow['seourl_id'] . '\' ';
            
            $MySQLDeleteQueryReference = errorlogged_mysql_query($SQLString);
        
            $SQLString = 'DELETE FROM ' . TABLE_SEOURLS_ELEMENTS .  ' ';
            $SQLString .= 'WHERE ';
            $SQLString .= TABLE_SEOURLS_ELEMENTS . '.seourl_id = \'' . $SEOURLRow['seourl_id'] . '\' ';
            
            $MySQLDeleteQueryReference = errorlogged_mysql_query($SQLString);
        
        }
    
    }

    // ggf. Umleitung der alten URL  (EInstellungen)
    if ($Umleitung) {

        $SQLString = 'UPDATE ' . TABLE_SEOURLS .  ' SET ';
        $SQLString .= TABLE_SEOURLS . '.http_status = \'301\', ';
        $SQLString .= TABLE_SEOURLS . '.redirect_seourl_id = \'' . $SEOURLID . '\', ';
        $SQLString .= TABLE_SEOURLS . '.delete_date = NOW() ';
        $SQLString .= 'WHERE ';
        $SQLString .= TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_ARTIKEL . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.artikel_id = \'' . $ArtikelID . '\' AND ';
        $SQLString .= '(IF(' . $KategorieID . ', ' . TABLE_SEOURLS . '.kategorie_id = \'' . $KategorieID . '\', true)) AND ';
        $SQLString .= '(IF(' . $HerstellerID . ', ' . TABLE_SEOURLS . '.hersteller_id = \'' . $HerstellerID . '\', true)) AND ';
        $SQLString .= '(IF(' . $AktionsID . ', ' . TABLE_SEOURLS . '.aktions_id = \'' . $AktionsID . '\', true)) AND ';
        $SQLString .= TABLE_SEOURLS . '.seourl_id != \'' . $SEOURLID . '\' AND ';
        $SQLString .= '(';
        $SQLString .= TABLE_SEOURLS . '.http_status = \'\' ';
        $SQLString .= ')';
        
        $MySQLUpdateQueryReference = errorlogged_mysql_query($SQLString);
        
        $SQLString = 'UPDATE ' . TABLE_SEOURLS .  ' SET ';
        $SQLString .= TABLE_SEOURLS . '.redirect_seourl_id = \'' . $SEOURLID . '\' ';
        $SQLString .= 'WHERE ';
        $SQLString .= TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_ARTIKEL . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.artikel_id = \'' . $ArtikelID . '\' AND ';
        $SQLString .= '(IF(' . $KategorieID . ', ' . TABLE_SEOURLS . '.kategorie_id = \'' . $KategorieID . '\', true)) AND ';
        $SQLString .= '(IF(' . $HerstellerID . ', ' . TABLE_SEOURLS . '.hersteller_id = \'' . $HerstellerID . '\', true)) AND ';
        $SQLString .= '(IF(' . $AktionsID . ', ' . TABLE_SEOURLS . '.aktions_id = \'' . $AktionsID . '\', true)) AND ';
        $SQLString .= TABLE_SEOURLS . '.seourl_id != \'' . $SEOURLID . '\' AND ';
        $SQLString .= '(';
        $SQLString .= TABLE_SEOURLS . '.http_status = \'301\' ';
        $SQLString .= ')';
        
        $MySQLUpdateQueryReference = errorlogged_mysql_query($SQLString);
    
    }

}

/**
 * Dekodiert einen Artikelname für die SEO URLs
 * 
 * Hier wird lediglich der Artikelname bzw. die manuelle Vorgabe weiter an die Funktion
 * DecodeSEOName() gegeben, die dann wiederum die Umwandlung für die sprechenden URLs vornimmt.
 *
 */
function DecodeArtikelSEOName($ArtikelName) {

    // SEO Namen setzen
    $SEOArtikelName = DecodeSEOName($ArtikelName);

    return $SEOArtikelName;

}

function GetArtikelHersteller($ArtikelID) {
    
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_ARTIKEL . '.hersteller_id ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_ARTIKEL . ' ';
    $SQLString .= 'WHERE ';
    $SQLString .= TABLE_ARTIKEL . '.id = \'' . $ArtikelID . '\' ';
    
    $ArtikelHerstellerObject = mysql_fetch_object(errorlogged_mysql_query($SQLString));
    
    return $ArtikelHerstellerObject->hersteller_id;
    
}

function GetArtikelAktion($ArtikelID) {
    
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_ARTIKEL . '.angebote AS aktions_id ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_ARTIKEL . ' ';
    $SQLString .= 'WHERE ';
    $SQLString .= TABLE_ARTIKEL . '.id = \'' . $ArtikelID . '\' ';
    
    $ArtikelAktionsObject = mysql_fetch_object(errorlogged_mysql_query($SQLString));
    
    return $ArtikelAktionsObject->aktions_id;
    
}

/**
 * SEO Name der Kategorien zurücksetzen
 * 
 * Hier wird der SEO Name der Kategorien zurückgesetzt.
 *
 */
function UnsetAllKategorieSEOName($LanguageID = 0) {
	
    // SEO Name sichern
    $SQLString = 'UPDATE ' . TABLE_KATEGORIE_LANGU . ' SET ';
    $SQLString .= TABLE_KATEGORIE_LANGU . '.url_name = \'\' ';
    $SQLString .= 'WHERE ';
    $SQLString .= '( ';

    if ($LanguageID) {
        $SQLString .= '(' . TABLE_KATEGORIE_LANGU . '.language_id = \'' . $LanguageID . '\') AND ';
    }
    
    $SQLString .= ' 1)';
    
    $MySQLQueryReference = errorlogged_mysql_query($SQLString);
	
}

/**
 * SEO Name der Kategorien setzen
 * 
 * Hier wird der SEO Name der Kategorien gesetzt. Ist eine Vorgabe zu der Kategorie hinterlegt, wird
 * diese als Grundlage herangezigen. Ansonsten wird der Name der Kategorie verwendet. Die Umwandlung
 * findet dann über die Funktion DecodeKategorieSEOName() statt.
 *
 */
function SetAllKategorieSEOName($LanguageID = 0) {

    // alle eingetragenen Sprachdaten aller Kategorien einlesen
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_KATEGORIE_LANGU . '.kategorie_id, ';
    $SQLString .= TABLE_KATEGORIE_LANGU . '.language_id, ';
    $SQLString .= TABLE_KATEGORIE_LANGU . '.name, ';
    $SQLString .= TABLE_KATEGORIE_LANGU . '.url_name_vorgabe ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_KATEGORIE_LANGU . ' ';
    $SQLString .= 'WHERE ';
    $SQLString .= '(';
    
    if ($LanguageID) {
        $SQLString .= '(' . TABLE_KATEGORIE_LANGU . '.language_id = \'' . $LanguageID . '\') AND ';
    }

    $SQLString .= ' 1)';
    
    $MySQLQueryReference = errorlogged_mysql_query($SQLString);

    while ($KategorieRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {

        // wenn es eine Vorgabe gibt, dann diese als Grundlage für den SEO Name nehmen
        if ($KategorieRow['url_name_vorgabe']) {
            $URLName = DecodeKategorieSEOName($KategorieRow['url_name_vorgabe']);
            
        // sonst den Namen der Kategorie als grundlage fpr den SEO Name nehmen
        } else {
            $URLName = DecodeKategorieSEOName($KategorieRow['name']);
        }

        // SEO Name sichern
        $SQLString = 'UPDATE ' . TABLE_KATEGORIE_LANGU . ' SET ';
        $SQLString .= TABLE_KATEGORIE_LANGU . '.url_name = \'' . $URLName . '\' ';
        $SQLString .= 'WHERE ';
        $SQLString .= TABLE_KATEGORIE_LANGU . '.kategorie_id = \'' . $KategorieRow['kategorie_id'] . '\' AND ';
        $SQLString .= TABLE_KATEGORIE_LANGU . '.language_id = \'' . $KategorieRow['language_id'] . '\' ';

        $MySQLUpdateQueryReference = errorlogged_mysql_query($SQLString);

    }

}

/**
 * alle SEO URLs der Kategorien setzen
 * 
 * Hier werden alle Hauptkategorien eingelesen. In Kombination mit allen aktiven Sprachen wird dann
 * über die Funktion SetKategorieSEOURLs() zu jeder einzelnen Kategorie die benötigte SEO URL genriert
 * und gesichert. Es kann aber auch gezielt nur eine Sprach übergeben werden, wenn die entsprechende
 * Sprache aktiviert wird
 *
 */
function SetAllKategorieSEOURL($LanguageID = 0) {

    // Standardsprache einlesen
    $StandardLanguageID = GetDefaultLanguageID();
    
    // alle aktiven Sprachen einlesen
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_LANGUAGE . '.language_id ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_LANGUAGE . ' ';
    $SQLString .= 'WHERE ';
    $SQLString .= "(";
    
    if ($LanguageID) {
        $SQLString .= '(' . TABLE_LANGUAGE . '.language_id = \'' . $LanguageID . '\') AND ';
    } else {
        $SQLString .= '(' . TABLE_LANGUAGE . '.language_active = 1) AND ';
    }

    $SQLString .= " 1)";
    
    
    $MySQLQueryReference = errorlogged_mysql_query($SQLString);
    
    while ($LanguageRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {
        
        // Alle Hauptkategorien einlesen
        $SQLString = 'SELECT ';
        $SQLString .= TABLE_KATEGORIE . '.id AS kategorie_id ';
        $SQLString .= 'FROM ';
        $SQLString .= TABLE_KATEGORIE . " ";
        $SQLString .= 'WHERE ';
        $SQLString .= TABLE_KATEGORIE . '.parentid = 0 ';

        $MySQLKategorieQueryReference = errorlogged_mysql_query($SQLString);
    
        while ($KategorieRow = mysql_fetch_array($MySQLKategorieQueryReference, MYSQL_ASSOC)) {
    
            SetKategorieSEOURLs($KategorieRow['kategorie_id'], $LanguageRow['language_id']);
    
        }
    
    }

}


/**
 * SEO URLs einer Kategorien setzen
 * 
 * Hier wird die eigentlich SEO URL einer Kategorie in einer Sprache gesetzt. Zuerst wird die URL
 * zusammengesetzt.
 * 
 * Hierfür wird zuerst  
 *
 */
function SetKategorieSEOURLs($KategorieID, $LanguageID, $Rekursiv = true) {

    // SEO Einstellungen einlesen
    $Einstellungen = GetEinstellungen('', 'seo');

    // SEO URL Name der Sprache
    $SEOURLLanguageName = GetLanguageSEOName($LanguageID);
    
    // SEO Pfad zu der Kategorie in der entsprechende Sprach einlesen
    $KategorieSEOPathArray = GetKategorieSEOPathArray($KategorieID, $LanguageID, array());
    
    // SEO Pfad zusammensetzen
    foreach ($KategorieSEOPathArray as $KategorieSEOPathElement) {
        $KategorieSEOURL .= $KategorieSEOPathElement['url_name'] . '/';
    }
    
    $KategorieSEOURL = $SEOURLLanguageName . substr($KategorieSEOURL, 0, strlen($KategorieSEOURL) - 1);
    
    // Pruefen, ob für die Kategorie ein Eintrag mit dem gleichen SEO Pfad schon vorhanden ist.
    if (ExistsKategorieSEOURL($KategorieID, $LanguageID, $KategorieSEOURL)) {
        return;
    }
    
    // SEO URL auf eindeutigkeit pruefen und ggf. eine Nummer anhaengen
    $KategorieSEOURL = GetUniqueURL($KategorieSEOURL);
    
    // SEO URL sichern
    $SEOURLID = SaveKategorieSEOURL($KategorieID, $LanguageID, $KategorieSEOURL, $KategorieSEOPathArray);

    // alte SEO URLs zu dieser Kategorie löschen bzw. umleiten
    DeleteKategorieSEOURLElement($KategorieID, $LanguageID, $SEOURLID, false);
    
    // rekursiver Aufruf um SEO URLs der Unterkategorien ebenfalls zu setzen
    if ($Rekursiv) {
    
	    $SQLString = 'SELECT '; 
	    $SQLString .= TABLE_KATEGORIE . '.id '; 
	    $SQLString .= 'FROM '; 
	    $SQLString .= TABLE_KATEGORIE . ' '; 
	    $SQLString .= 'WHERE '; 
	    $SQLString .= TABLE_KATEGORIE . '.parentid = \'' . $KategorieID . '\' '; 
	    
	    $MySQLQueryReference = errorlogged_mysql_query($SQLString);
	    
	    while ($KategorieRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {
	        SetKategorieSEOURLs($KategorieRow['id'], $LanguageID);
	    }
	    
    }
    
}

function GetKategorieSEOPathArray($KategorieID, $LanguageID, $KategorieSEOPathArray) {

    $StandardLanguageID = GetDefaultLanguageID();

    // die Kategorie einlesen
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_KATEGORIE . '.id, ';
    $SQLString .= TABLE_KATEGORIE . '.parentid, ';
    $SQLString .= TABLE_KATEGORIE_LANGU . '.language_id, ';
    $SQLString .= 'IF(' . TABLE_KATEGORIE_LANGU . '.url_name != \'\', ' . TABLE_KATEGORIE_LANGU . '.url_name, table_kategorie_langu_standard.url_name) AS url_name, ';
    $SQLString .= 'IF(' . TABLE_KATEGORIE_LANGU . '.url_name != \'\', 1, 0) AS translated ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_KATEGORIE . ' ';
    $SQLString .= 'LEFT JOIN ' . TABLE_KATEGORIE_LANGU . ' ON ((' . TABLE_KATEGORIE . '.id = ' . TABLE_KATEGORIE_LANGU . '.kategorie_id) AND (' . TABLE_KATEGORIE_LANGU . '.language_id = ' . $LanguageID . ')) ';
    $SQLString .= "LEFT JOIN " . TABLE_KATEGORIE_LANGU . " table_kategorie_langu_standard ON ((" . TABLE_KATEGORIE . ".id = table_kategorie_langu_standard.kategorie_id) AND (table_kategorie_langu_standard.language_id = " . $StandardLanguageID . ")) ";
    $SQLString .= 'WHERE ';
    $SQLString .= '(';
    $SQLString .= '(' . TABLE_KATEGORIE . '.id = \'' . $KategorieID . '\') AND ';
    $SQLString .= '1)';

//    echo '$SQLString: ' . $SQLString . '<br>';

    $MySQLQueryReference = errorlogged_mysql_query($SQLString);

    while ($KategorieRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {

        $KategorieSEOPathElement['kategorie_id'] = $KategorieRow['id']; 
        $KategorieSEOPathElement['language_id'] = $KategorieRow['language_id']; 
        $KategorieSEOPathElement['url_name'] = $KategorieRow['url_name']; 
        $KategorieSEOPathElement['translated'] = $KategorieRow['translated']; 
        
        array_unshift($KategorieSEOPathArray, $KategorieSEOPathElement);

        if ($KategorieRow['parentid'] != 0) {
            $KategorieSEOPathArray = GetKategorieSEOPathArray($KategorieRow['parentid'], $LanguageID, $KategorieSEOPathArray);
        }

    }

    return $KategorieSEOPathArray;

}

/**
 * Sichert die SEO URL einer Kategorie
 *
 * Hier wird der SEO URL einer Kategorie in der Datenbank abgelegt und alle einzelnen Element der
 * URL.
 * 
 */
function SaveKategorieSEOURL($KategorieID, $LanguageID, $KategorieSEOURL, $KategorieSEOPathArray) {

    $SQLString = 'INSERT INTO ' . TABLE_SEOURLS . ' SET ';
    $SQLString .= TABLE_SEOURLS . '.url = \'' . $KategorieSEOURL . '\', ';
    $SQLString .= TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_KATEGORIE . '\', ';
    $SQLString .= TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\', ';
    $SQLString .= TABLE_SEOURLS . '.kategorie_id = \'' . $KategorieID . '\' ';

    $MySQLQueryReference = errorlogged_mysql_query($SQLString);
    
    $SEOURLID = mysql_insert_id();
    
    // SEO Element sichern
    foreach ($KategorieSEOPathArray as $KategorieSEOPathElement) {

        $SQLString = 'INSERT INTO ' . TABLE_SEOURLS_ELEMENTS . ' SET ';
        $SQLString .= TABLE_SEOURLS_ELEMENTS . '.seourl_id = \'' . $SEOURLID . '\', ';
        $SQLString .= TABLE_SEOURLS_ELEMENTS . '.kategorie_id = \'' . $KategorieSEOPathElement['kategorie_id'] . '\', ';
        $SQLString .= TABLE_SEOURLS_ELEMENTS . '.language_id = \'' . $LanguageID . '\', ';
        $SQLString .= TABLE_SEOURLS_ELEMENTS . '.translated = \'' . $KategorieSEOPathElement['translated'] . '\', ';
        $SQLString .= TABLE_SEOURLS_ELEMENTS . '.seo_name = \'' . $KategorieSEOPathElement['url_name'] . '\' ';
        
        $MySQLQueryReference = errorlogged_mysql_query($SQLString);
        
    }
    
    return $SEOURLID;
    
}

/**
 * Löscht alle Einträge einer Kategorie
 *
 * Es werden alle Sprachen eingelesen und über die Funktion DeleteKategorieSEOURLElement() die
 * entsprechenden Einträge gelöscht.
 */
function DeleteKategorieSEOURL($KategorieID) {
    
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_LANGUAGE . '.language_id ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_LANGUAGE . ' ';
    $SQLString .= 'WHERE ';
    $SQLString .= "(";
    $SQLString .= '(' . TABLE_LANGUAGE . '.language_active = 1) AND ';
    $SQLString .= " 1)";
    
    $MySQLQueryReference = errorlogged_mysql_query($SQLString);
    
    while ($LanguageRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {
        
        DeleteKategorieSEOURLElement($KategorieID, $LanguageRow['language_id'], 0, true);
        
    }
    
}

/**
 * Löschen bzw. Umleiten alter SEO URLs einer Kategorie
 *
 * Hier wird in Abhängigkeit der SEO Einstellungen entweder alle alten SEO URLs der Kategorie und der
 * Sprache gelöscht oder es wird eine Umleitung eingetragen und auf die neue SEO URL verwiesen.
 * 
 */
function DeleteKategorieSEOURLElement($KategorieID, $LanguageID, $SEOURLID, $DeleteEntry) {
    
    // SEO Einstellungen einlesen
    $Einstellungen = GetEinstellungen('', 'seo');
    
    // Entsprechende Einstellung benutzen wenn das Element gelöscht oder umbenannt wurde
    if ($DeleteEntry) {
        $Umleitung = $Einstellungen->seo->sprechende_urls_umleitung_loeschen;
    } else {
        $Umleitung = $Einstellungen->seo->sprechende_urls_umleitung_umbenennen;
    }
    
    // alte Eintraege loeschen bzw. umleiten (Einstellungen)
    if (!$Umleitung) {

        $SQLString = 'SELECT ';
        $SQLString .= TABLE_SEOURLS . '.seourl_id ';
        $SQLString .= 'FROM ';
        $SQLString .= TABLE_SEOURLS . ' ';
        $SQLString .= 'WHERE ';
        $SQLString .= '(';
        $SQLString .= '(' . TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_ARTIKEL . '\') OR ';
        $SQLString .= '(' . TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_KATEGORIE . '\') ';
        $SQLString .= ') AND ';
        $SQLString .= TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.kategorie_id = \'' . $KategorieID . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.seourl_id != \'' . $SEOURLID . '\' ';
        
        $MySQLQueryReference = errorlogged_mysql_query($SQLString);
        
        while ($SEOURLRow = mysql_fetch_array($MySQLQueryReference, MYSQL_ASSOC)) {
            
            $SQLString = 'DELETE FROM ' . TABLE_SEOURLS .  ' ';
            $SQLString .= 'WHERE ';
            $SQLString .= TABLE_SEOURLS . '.seourl_id = \'' . $SEOURLRow['seourl_id'] . '\' ';
            
            $MySQLQueryDeleteReference = errorlogged_mysql_query($SQLString);
        
            $SQLString = 'DELETE FROM ' . TABLE_SEOURLS_ELEMENTS .  ' ';
            $SQLString .= 'WHERE ';
            $SQLString .= TABLE_SEOURLS_ELEMENTS . '.seourl_id = \'' . $SEOURLRow['seourl_id'] . '\' ';
            
            $MySQLQueryDeleteReference = errorlogged_mysql_query($SQLString);
        
        }
    
    }

    // ggf. Umleitung der alten URL  (EInstellungen)
    if ($Umleitung) {

        $SQLString = 'UPDATE ' . TABLE_SEOURLS .  ' SET ';
        $SQLString .= TABLE_SEOURLS . '.http_status = \'301\', ';
        $SQLString .= TABLE_SEOURLS . '.redirect_seourl_id = \'' . $SEOURLID . '\', ';
        $SQLString .= TABLE_SEOURLS . '.delete_date = NOW() ';
        $SQLString .= 'WHERE ';
        $SQLString .= '(';
        
        if ($DeleteEntry) {
            $SQLString .= '(' . TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_ARTIKEL . '\') OR ';
        }
        
        $SQLString .= '(' . TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_KATEGORIE . '\') ';
        $SQLString .= ') AND ';
        $SQLString .= TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.kategorie_id = \'' . $KategorieID . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.seourl_id != \'' . $SEOURLID . '\' AND ';
        $SQLString .= '(';
        $SQLString .= TABLE_SEOURLS . '.http_status = \'\' ';
        $SQLString .= ')';
        
        $MySQLUpdateQueryReference = errorlogged_mysql_query($SQLString);
        
        $SQLString = 'UPDATE ' . TABLE_SEOURLS .  ' SET ';
        $SQLString .= TABLE_SEOURLS . '.redirect_seourl_id = \'' . $SEOURLID . '\' ';
        $SQLString .= 'WHERE ';
        $SQLString .= '(';
        
        if ($DeleteEntry) {
            $SQLString .= '(' . TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_ARTIKEL . '\') OR ';
        }
        
        $SQLString .= '(' . TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_KATEGORIE . '\') ';
        $SQLString .= ') AND ';
        $SQLString .= TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.kategorie_id = \'' . $KategorieID . '\' AND ';
        $SQLString .= TABLE_SEOURLS . '.seourl_id != \'' . $SEOURLID . '\' AND ';
        $SQLString .= '(';
        $SQLString .= TABLE_SEOURLS . '.http_status = \'301\' ';
        $SQLString .= ')';
        
        $MySQLUpdateQueryReference = errorlogged_mysql_query($SQLString);
    
    }

}

/**
 * Dekodiert einen Kategoriename für die SEO URLs
 * 
 * Hier wird lediglich der Kategoriename bzw. die manuelle Vorgabe weiter an die Funktion
 * DecodeSEOName() gegeben, die dann wiederum die Umwandlung für die sprechenden URLs vornimmt.
 *
 */
function DecodeKategorieSEOName($KategorieName) {

    // SEO Namen setzen
    $SEOKategorieName = DecodeSEOName($KategorieName);

    return $SEOKategorieName;

}

/**
 * Dekodiert einen Herstellernamen für die SEO URLs
 * 
 * Hier wird lediglich der Herstellername bzw. die manuelle Vorgabe weiter an die Funktion
 * DecodeSEOName() gegeben, die dann wiederum die Umwandlung für die sprechenden URLs vornimmt.
 *
 */
function DecodeHerstellerSEOName($HerstellerName) {

    // SEO Namen setzen
    $SEOHerstellerName = DecodeSEOName($HerstellerName);

    return $SEOHerstellerName;

}


/**
 * Prüfung der Notwendigkeit einer Decodierung des URL Namens des Landes für die SEO URL 
 * 
 * Hier wird in Ahängigkeit der Einstellungen geprüft, ob der URL Name des Landes Teil der SEO URL
 * sein muss oder nicht. Ist die Einstellung sprechende_urls_kein_sprachname_bei_standardsprache aktiviert
 * und es handelt sich um die Standardsprache, wird der SEO Name nicht Teil der SEO URL.
 *
 */

function GetLanguageSEOName($LanguageID) {

    // SEO Einstellungen einlesen
    $Einstellungen = GetEinstellungen('', 'seo');

    // SEO Name Code der Sprache ermitteln
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_LANGUAGE . '.url_name, ';
    $SQLString .= TABLE_LANGUAGE . '.language_standard ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_LANGUAGE . ' ';
    $SQLString .= 'WHERE ';
    $SQLString .= TABLE_LANGUAGE . '.language_id = \'' . $LanguageID . '\' ';

    $LanguageObject = mysql_fetch_object(errorlogged_mysql_query($SQLString));

    if ($Einstellungen->seo->sprechende_urls_kein_sprachname_bei_standardsprache && $LanguageObject->language_standard) {

        return '';

    } else {

        $SEOURLLanguageName = DecodeLanguageName($LanguageObject->url_name) . '/';

        return $SEOURLLanguageName;

    }
    
}

/**
 * Dekodiert den Namen eines Landes für die SEO URLs
 * 
 * Hier wird lediglich der Name bzw. die manuelle Vorgabe weiter an die Funktion
 * DecodeSEOName() gegeben, die dann wiederum die Umwandlung für die sprechenden URLs vornimmt.
 *
 */

function DecodeLanguageName($LanguageSEOName) {

    // URL Namen setzen
    $SEOLanguageName = DecodeSEOName($LanguageSEOName);

    return $SEOLanguageName;

}


/**
 * Dekodiert einen String für die SEO URLs
 *
 * Hier werden gezielt einzelnen Zeichen umgewandelt, um ein optimales Ergebnis für für die sprechenden
 * URLs zu erzielen. Am Ende wird dann noch zu sicherung der komplette String per urlencode() umgewandelt.
 *
 */
function DecodeSEOName($Name, $ID = false, $ForceID = false) {

//    $Name = strip_tags($Name);

    // SEO Einstellungen einlesen
    $Einstellungen = GetEinstellungen('', 'seo');
    
    if (mb_strlen(trim($Name)) > $Einstellungen->seo->sprechende_urls_maximale_laenge_einzelelemente) {
        $Name = mb_substr(trim($Name), 0, $Einstellungen->seo->sprechende_urls_maximale_laenge_einzelelemente);
//    } elseif ($ForceID) {
//        $Name = trim($Name) . "_" . $ID;
    }

    $SEOName = str_replace('ä', 'ae', trim($Name));
    $SEOName = str_replace('Ä', 'Ae', trim($SEOName));
    $SEOName = str_replace('ü', 'ue', trim($SEOName));
    $SEOName = str_replace('Ü', 'Ue', trim($SEOName));
    $SEOName = str_replace('ö', 'oe', trim($SEOName));
    $SEOName = str_replace('Ö', 'Oe', trim($SEOName));
    $SEOName = str_replace('ß', 'ss', trim($SEOName));
    $SEOName = str_replace(' ', '-', $SEOName);
    $SEOName = str_replace('/', '', $SEOName);
    $SEOName = str_replace('?', '', $SEOName);
    $SEOName = str_replace('(', '', $SEOName);
    $SEOName = str_replace(')', '', $SEOName);
    $SEOName = str_replace(',', '', $SEOName);
    $SEOName = str_replace(':', '', $SEOName);
    $SEOName = str_replace('!', '', $SEOName);
    $SEOName = str_replace('.', '', $SEOName);
    $SEOName = str_replace('&quot;', '', $SEOName);
    
    //    $SEOName = str_replace("-", "+", trim($Name));
    //    $SEOName = str_replace(":", "", trim($SEOName));
    //    $SEOName = str_replace("/", "", trim($SEOName));
    //    $SEOName = str_replace("!", "", trim($SEOName));
    $SEOName = urlencode($SEOName);

    return $SEOName;

}

/**
 * Erzeugen einer eindeutigen URL
 * 
 * Hier wird zuvor geprüft, ob die erzeugte URL eindeutig ist. SIe also noch nicht im System hinterlegt
 * ist. Wenn es sie schon gibt, wird eine SIcherheitszahl verwendet, um die die SEO URL zu erweitern um
 * sie somit eindeutig zum machen. Die Sicherheitszahl wird ist bei den Einstellungen hinterlegt und wird
 * bei jeder Verwendung um 1 erhöht.
 * 
 * Es sollte aber nicht oft vorkommen, dass es zwei gleiche URL gibt. Dies würde bedeuten, dass der Kunde
 * mindestens zwei gleiche Kategoriebäume hat oder mindestens zwei gleichen Kategoriebaum mit zwei 
 * gleichen Artikelnamen oder zwei Artikel mit dem gleichen Namen.
 * 
 */
function GetUniqueURL($SEOURL) {

    $Einstellungen = GetEinstellungen('', 'seo');

    // URL pruefen
    $OrgSEOURL = $SEOURL;
    $UniqueURL = false;
    $SicherheitsCounter = 0;

    while (!$UniqueURL) {

        $SQLString = 'SELECT ';
        $SQLString .= TABLE_SEOURLS . '.url, ';
        $SQLString .= TABLE_SEOURLS . '.http_status ';
        $SQLString .= 'FROM ';
        $SQLString .= TABLE_SEOURLS . ' ';
        $SQLString .= 'WHERE ';
        $SQLString .= TABLE_SEOURLS . '.url = \'' . $SEOURL . '\' ';

        $SEOURLCheckObject = mysql_fetch_object(errorlogged_mysql_query($SQLString));

        if (!$SEOURLCheckObject) {
            $UniqueURL = true;
        } else {

            if ($SEOURLCheckObject->http_status == 0) {

                $SEOURL = $OrgSEOURL . '-' . $Einstellungen->seo->sprechende_urls_sicherheitszahl;
                $Einstellungen->seo->sprechende_urls_sicherheitszahl++;
                SaveKeyValueEinstellungen('seo', 'sprechende_urls_sicherheitszahl', $Einstellungen->seo->sprechende_urls_sicherheitszahl);

            } else {

                $SQLString = 'DELETE FROM ' . TABLE_SEOURLS . ' ';
                $SQLString .= 'WHERE ';
                $SQLString .= TABLE_SEOURLS . '.url = \'' . $SEOURL . '\' ';

                $MySQLDeleteQueryReference = errorlogged_mysql_query($SQLString);

                $UniqueURL = true;

            }

        }

        $SicherheitsCounter++;

        if ($SicherheitsCounter > 10000) {
            echo "Fehler beim ermitteln einer eindeutigen URLSEOURL!";
            exit;
        }

    }

    return $SEOURL;

}

/**
 * Prüft ob zu einer Kategorie schon eine URL hinterlegt ist
 * 
 * Hier wird geprüft, ob zu einer übergebenen Kategorie und Sprache die ebenfalls übergebene SEO URL
 * schon hinterlegt ist.
 * 
 */
function ExistsKategorieSEOURL($KategorieID, $LanguageID, $KategorieSEOURL) {
    
    $SQLString = 'SELECT ';
    $SQLString .= TABLE_SEOURLS . '.seourl_id ';
    $SQLString .= 'FROM ';
    $SQLString .= TABLE_SEOURLS . ' ';
    $SQLString .= 'WHERE ';
    $SQLString .= TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_KATEGORIE . '\' AND ';
    $SQLString .= TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\' AND ';
    $SQLString .= TABLE_SEOURLS . '.kategorie_id = \'' . $KategorieID . '\' AND ';
    $SQLString .= TABLE_SEOURLS . '.url = \'' . $KategorieSEOURL . '\' AND ';
    $SQLString .= TABLE_SEOURLS . '.http_status = \'0\' ';
    
    $KategorieObject = mysql_fetch_object(errorlogged_mysql_query($SQLString));
    
    if ($KategorieObject) {
        return true;
    } else {
        return false;
    }
    
}
                    
function GetCMSKategorieLink($CMSKategoieID = '', $CMSKategoieSEOURL = '') {
    
    global $Einstellungen;

    if (!$Einstellungen) {
        
        // Einstellungen einlesen
        $Einstellungen = GetEinstellungen();
        
    }
    
    if ($Einstellungen->seo->sprechende_urls_aktiv) {
        
        $CMSKategoieLink = URLPFAD_NOSSL  . $CMSKategoieSEOURL;
    
    } else {
        
        $CMSKategoieLink = URLPFAD_NOSSL  . 'cms/kategorie/index.php?kategorieid=' . $CMSKategoieID;
        
    }
    
    return $CMSKategoieLink;
    
}
            

function GetMenueLink($MenueID = '', $MenueSEOURL = '') {
    
    global $Einstellungen;

    if (!$Einstellungen) {
        
        // Einstellungen einlesen
        $Einstellungen = GetEinstellungen();
        
    }
    
    if ($Einstellungen->seo->sprechende_urls_aktiv) {
        
        $MenueLink = URLPFAD_NOSSL  . $MenueSEOURL;
    
    } else {
        
        $MenueLink = URLPFAD_NOSSL  . 'themes/topnavi/index.php?id=' . $MenueID;
        
    }
    
    return $MenueLink;
    
}

function GetAktionsLink($AktionsID = '', $AktionsSEOURL = '') {
    
    global $Einstellungen;

    if (!$Einstellungen) {
        
        // Einstellungen einlesen
        $Einstellungen = GetEinstellungen();
        
    }
    
    if ($Einstellungen->seo->sprechende_urls_aktiv) {
        
        $AktionsLink = URLPFAD_NOSSL  . $AktionsSEOURL;
    
    } else {
        
        $AktionsLink = URLPFAD_NOSSL  . 'themes/kategorie/aktion.php?aktionsid=' . $AktionsID;
        
    }
    
    return $AktionsLink;
    
}

function GetHerstellerLink($HerstellerID = '', $HerstellerSEOURL = '') {
    
    global $Einstellungen;

    if (!$Einstellungen) {
        
        // Einstellungen einlesen
        $Einstellungen = GetEinstellungen();
        
    }
    
    if ($Einstellungen->seo->sprechende_urls_aktiv) {
        
        $HerstellerLink = URLPFAD_NOSSL  . $HerstellerSEOURL;
    
    } else {
        
        $HerstellerLink = URLPFAD_NOSSL  . 'themes/kategorie/hersteller.php?unsetDataOffset=1&amp;herstellerid=' . $HerstellerID;
        
    }
    
    return $HerstellerLink;
    
}

function GetKategorieLink($KategorieID = '', $KategorieSEOURL = '') {
    
    global $Einstellungen;

    if (!$Einstellungen) {
        
        // Einstellungen einlesen
        $Einstellungen = GetEinstellungen();
        
    }
    
    if ($Einstellungen->seo->sprechende_urls_aktiv) {
        
        $KategorieLink = URLPFAD_NOSSL  . $KategorieSEOURL;
    
    } else {
        
        $KategorieLink = URLPFAD_NOSSL  . 'themes/kategorie/index.php?kategorieid=' . $KategorieID;
        
    }
    
    return $KategorieLink;
    
}

function GetArtikelLink($ArtikelID = '', $KategorieID = '', $HerstellerID = '', $AktionsID = '', $Source = '', $ReferType = '', $ReferID = '', $SEOURLArray = '') {
    
    global $Einstellungen;

    if (!$Einstellungen) {
        
        // Einstellungen einlesen
        $Einstellungen = GetEinstellungen();
        
    }
    
    if ($Einstellungen->seo->sprechende_urls_aktiv) {
        
        if ($Source) { $ArtikelLinkParameterArray[] = 'source=' . $Source; }            
        if ($ReferType) { $ArtikelLinkParameterArray[] = 'refertype=' . $ReferType; }            
        if ($ReferID) { $ArtikelLinkParameterArray[] = 'referid=' . $ReferID; }

        if (count($ArtikelLinkParameterArray)) {
            $ArtikelLinkParameterString = '?' . implode('&amp;', $ArtikelLinkParameterArray); 
        }
        
        if ($Einstellungen->seo->sprechende_urls_artikel_mit_aktionen && $AktionsID) {
        
            $ArtikelLink = URLPFAD_NOSSL  . $SEOURLArray['aktions_artikel'][$AktionsID . '-' . $ArtikelID] . $ArtikelLinkParameterString;
        
        } elseif ($Einstellungen->seo->sprechende_urls_artikel_mit_hersteller && $HerstellerID) {
        
            $ArtikelLink = URLPFAD_NOSSL  . $SEOURLArray['hersteller_artikel'][$HerstellerID . '-' . $ArtikelID] . $ArtikelLinkParameterString;
        
        } elseif ($Einstellungen->seo->sprechende_urls_artikel_mit_kategorie && $KategorieID) {

            $ArtikelLink = URLPFAD_NOSSL  . $SEOURLArray['kategorie_artikel'][$KategorieID . '-' . $ArtikelID] . $ArtikelLinkParameterString;
            
        } else {

            $ArtikelLink = URLPFAD_NOSSL  . $SEOURLArray['artikel'][$ArtikelID] . $ArtikelLinkParameterString;
            
        }
    
    } else {
        
        $ArtikelLinkParameterArray[] = 'artikelid=' . $ArtikelID;
        
        if ($KategorieID) {
            $ArtikelLinkParameterArray[] = 'kategorieid=' . $KategorieID;
        }            
        
        if ($Source) {
            $ArtikelLinkParameterArray[] = 'source=' . $Source;
        }            
        
        if ($ReferType) {
            $ArtikelLinkParameterArray[] = 'refertype=' . $ReferType;
        }            
        
        if ($ReferID) {
            $ArtikelLinkParameterArray[] = 'referid=' . $ReferID;
        }            
        
        $ArtikelLink = URLPFAD_NOSSL  . 'themes/kategorie/detail.php?' . implode('&amp;', $ArtikelLinkParameterArray);
        
    }
    
    return $ArtikelLink;
    
}

function GetSEOURLArray($IDArray, $Type, $LanguageID, $SEOURLArray) {

    if (!count($IDArray)) {
        return $SEOURLArray;
    }
    
    global $Einstellungen;
    
    if (!$Einstellungen) {
        
        // Einstellungen einlesen
        $Einstellungen = GetEinstellungen();
        
    }
    
    switch ($Type) {
        
        case SEOURL_TYPE_ARTIKEL:
            
            if ((!$Einstellungen->seo->sprechende_urls_artikel_mit_kategorie) && (!$Einstellungen->seo->sprechende_urls_artikel_mit_hersteller)) {

                $SQLString = 'SELECT ';
                $SQLString .= TABLE_SEOURLS . '.url, ';
                $SQLString .= TABLE_SEOURLS . '.artikel_id ';
                $SQLString .= 'FROM ';
                $SQLString .= TABLE_SEOURLS . ' ';
                $SQLString .= 'WHERE ';
                $SQLString .= TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_ARTIKEL . '\' AND ';
                $SQLString .= TABLE_SEOURLS . '.http_status = \'0\' AND ';
                $SQLString .= TABLE_SEOURLS . '.artikel_id IN (' . implode(',', $IDArray) . ') AND ';
                $SQLString .= TABLE_SEOURLS . '.kategorie_id = 0 AND ';
                $SQLString .= TABLE_SEOURLS . '.hersteller_id = 0 AND ';
                $SQLString .= TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\' ';

                $MySQLQueryReference = errorlogged_mysql_query($SQLString);
                
                while ($SEOURLRow = mysql_fetch_array($MySQLQueryReference)) {
                    
                    $SEOURLArray['artikel'][$SEOURLRow['artikel_id']] = $SEOURLRow['url'];
                    
                }
                
                if ($SEOURLArray['artikel']) {
                    $SEOURLArray['artikel'] = array_unique($SEOURLArray['artikel']);
                }
                
            } else {
                
                $SQLString = 'SELECT ';
                $SQLString .= TABLE_SEOURLS . '.url, ';
                $SQLString .= TABLE_SEOURLS . '.kategorie_id, ';
                $SQLString .= TABLE_SEOURLS . '.hersteller_id, ';
                $SQLString .= TABLE_SEOURLS . '.aktions_id, ';
                $SQLString .= TABLE_SEOURLS . '.artikel_id ';
                $SQLString .= 'FROM ';
                $SQLString .= TABLE_SEOURLS . ' ';
                $SQLString .= 'WHERE ';
                $SQLString .= TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_ARTIKEL . '\' AND ';
                $SQLString .= TABLE_SEOURLS . '.http_status = \'0\' AND ';
                $SQLString .= TABLE_SEOURLS . '.artikel_id IN (' . implode(',', $IDArray) . ') AND ';
                $SQLString .= TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\' ';
                
                $MySQLQueryReference = errorlogged_mysql_query($SQLString);
                
                while ($SEOURLRow = mysql_fetch_array($MySQLQueryReference)) {
                    
                    if ($SEOURLRow['kategorie_id'] != 0) {
                        $SEOURLArray['kategorie_artikel'][$SEOURLRow['kategorie_id'] . '-' . $SEOURLRow['artikel_id']] = $SEOURLRow['url'];
                    } elseif ($SEOURLRow['hersteller_id'] != 0) {
                        $SEOURLArray['hersteller_artikel'][$SEOURLRow['hersteller_id'] . '-' . $SEOURLRow['artikel_id']] = $SEOURLRow['url'];
                    } elseif ($SEOURLRow['aktions_id'] != 0) {
                        $SEOURLArray['aktions_artikel'][$SEOURLRow['aktions_id'] . '-' . $SEOURLRow['artikel_id']] = $SEOURLRow['url'];
                    } else {
                        $SEOURLArray['artikel'][$SEOURLRow['artikel_id']] = $SEOURLRow['url'];
                    }
                    
                }
                
                if ($SEOURLArray['kategorie_artikel']) {
                    $SEOURLArray['kategorie_artikel'] = array_unique($SEOURLArray['kategorie_artikel']);
                }                    
                
                if ($SEOURLArray['hersteller_artikel']) {
                    $SEOURLArray['hersteller_artikel'] = array_unique($SEOURLArray['hersteller_artikel']);
                }
                                    
                if ($SEOURLArray['artikel']) {
                    $SEOURLArray['artikel'] = array_unique($SEOURLArray['artikel']);
                }
                
            }
            
        break;
        
        case SEOURL_TYPE_KATEGORIE:
            
            $SQLString = 'SELECT ';
            $SQLString .= TABLE_SEOURLS . '.url, ';
            $SQLString .= TABLE_SEOURLS . '.kategorie_id ';
            $SQLString .= 'FROM ';
            $SQLString .= TABLE_SEOURLS . ' ';
            $SQLString .= 'WHERE ';
            $SQLString .= TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_KATEGORIE . '\' AND ';
            $SQLString .= TABLE_SEOURLS . '.http_status = \'0\' AND ';
            $SQLString .= TABLE_SEOURLS . '.kategorie_id IN (' . implode(',', $IDArray) . ') AND ';
            $SQLString .= TABLE_SEOURLS . '.artikel_id = \'0\' AND ';
            $SQLString .= TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\' ';

            $MySQLQueryReference = errorlogged_mysql_query($SQLString);
            
            while ($SEOURLRow = mysql_fetch_array($MySQLQueryReference)) {
                
                $SEOURLArray['kategorie'][$SEOURLRow['kategorie_id']] = $SEOURLRow['url'];
                
            }
                        
            if ($SEOURLArray['kategorie']) {
                $SEOURLArray['kategorie'] = array_unique($SEOURLArray['kategorie']);
            }
            
        break;
    
        case SEOURL_TYPE_HERSTELLER:
            
            $SQLString = 'SELECT ';
            $SQLString .= TABLE_SEOURLS . '.url, ';
            $SQLString .= TABLE_SEOURLS . '.hersteller_id ';
            $SQLString .= 'FROM ';
            $SQLString .= TABLE_SEOURLS . ' ';
            $SQLString .= 'WHERE ';
            $SQLString .= TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_HERSTELLER . '\' AND ';
            $SQLString .= TABLE_SEOURLS . '.http_status = \'0\' AND ';
            $SQLString .= TABLE_SEOURLS . '.hersteller_id IN (' . implode(',', $IDArray) . ') AND ';
            $SQLString .= TABLE_SEOURLS . '.artikel_id = \'0\' AND ';
            $SQLString .= TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\' ';
            
            $MySQLQueryReference = errorlogged_mysql_query($SQLString);
            
            while ($SEOURLRow = mysql_fetch_array($MySQLQueryReference)) {
                
                $SEOURLArray['hersteller'][$SEOURLRow['hersteller_id']] = $SEOURLRow['url'];
                
            }
                        
            if ($SEOURLArray['hersteller']) {
                $SEOURLArray['hersteller'] = array_unique($SEOURLArray['hersteller']);
            }
            
        break;
    
        case SEOURL_TYPE_AKTION:
            
            $SQLString = 'SELECT ';
            $SQLString .= TABLE_SEOURLS . '.url, ';
            $SQLString .= TABLE_SEOURLS . '.aktions_id ';
            $SQLString .= 'FROM ';
            $SQLString .= TABLE_SEOURLS . ' ';
            $SQLString .= 'WHERE ';
            $SQLString .= TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_AKTION . '\' AND ';
            $SQLString .= TABLE_SEOURLS . '.http_status = \'0\' AND ';
            $SQLString .= TABLE_SEOURLS . '.aktions_id IN (' . implode(',', $IDArray) . ') AND ';
            $SQLString .= TABLE_SEOURLS . '.artikel_id = \'0\' AND ';
            $SQLString .= TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\' ';
            
            $MySQLQueryReference = errorlogged_mysql_query($SQLString);
            
            while ($SEOURLRow = mysql_fetch_array($MySQLQueryReference)) {
                
                $SEOURLArray['aktion'][$SEOURLRow['aktions_id']] = $SEOURLRow['url'];
                
            }
                        
            if ($SEOURLArray['aktion']) {
                $SEOURLArray['aktion'] = array_unique($SEOURLArray['aktion']);
            }
            
        break;
    
        case SEOURL_TYPE_MENUE:
            
            $SQLString = 'SELECT ';
            $SQLString .= TABLE_SEOURLS . '.url, ';
            $SQLString .= TABLE_SEOURLS . '.menue_id ';
            $SQLString .= 'FROM ';
            $SQLString .= TABLE_SEOURLS . ' ';
            $SQLString .= 'WHERE ';
            $SQLString .= TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_MENUE . '\' AND ';
            $SQLString .= TABLE_SEOURLS . '.http_status = \'0\' AND ';
            $SQLString .= TABLE_SEOURLS . '.menue_id IN (' . implode(',', $IDArray) . ') AND ';
            $SQLString .= TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\' ';
            
            $MySQLQueryReference = errorlogged_mysql_query($SQLString);
            
            while ($SEOURLRow = mysql_fetch_array($MySQLQueryReference)) {
                
                $SEOURLArray['menue'][$SEOURLRow['menue_id']] = $SEOURLRow['url'];
                
            }
                        
            if ($SEOURLArray['menue']) {
                $SEOURLArray['menue'] = array_unique($SEOURLArray['menue']);
            }
            
        break;
    
        case SEOURL_TYPE_CMS_KATEGORIE:
            
            $SQLString = 'SELECT ';
            $SQLString .= TABLE_SEOURLS . '.url, ';
            $SQLString .= TABLE_SEOURLS . '.kategorie_id ';
            $SQLString .= 'FROM ';
            $SQLString .= TABLE_SEOURLS . ' ';
            $SQLString .= 'WHERE ';
            $SQLString .= TABLE_SEOURLS . '.type = \'' . SEOURL_TYPE_CMS_KATEGORIE . '\' AND ';
            $SQLString .= TABLE_SEOURLS . '.http_status = \'0\' AND ';
            $SQLString .= TABLE_SEOURLS . '.kategorie_id IN (' . implode(',', $IDArray) . ') AND ';
            $SQLString .= TABLE_SEOURLS . '.language_id = \'' . $LanguageID . '\' ';
            
            $MySQLQueryReference = errorlogged_mysql_query($SQLString);
            
            while ($SEOURLRow = mysql_fetch_array($MySQLQueryReference)) {
                
                $SEOURLArray['cms_kategorie'][$SEOURLRow['kategorie_id']] = $SEOURLRow['url'];
                
            }
                        
            if ($SEOURLArray['cms_kategorie']) {
                $SEOURLArray['cms_kategorie'] = array_unique($SEOURLArray['cms_kategorie']);
            }
            
        break;
    
    }
    
    return $SEOURLArray;
    
}




