<?php

/**
 * 
 * Copyright (C) Die Randgruppe GmbH
 * 
 * http://www.randshop.com
 * http://www.dierandgruppe.com
 * 
 * Unter der Lizenz von Die Randgruppe GmbH:
 * http://www.randshop.com/Lizenz
 *  
 * $Author$
 * $Date$
 * $Revision$
 * 
 */

function SaveVariante($VariantenID, $Name, $LanguageID) {
	
	// ********************************************************************************
	// ** Daten speichern
	// ********************************************************************************
	
	// Variante schon vorhanden
	if ($VariantenID) {
		
		$SQLString = "SELECT ";
		$SQLString .= TABLE_VARIANTE_LANGU . ".language_id ";
		$SQLString .= "FROM ";
		$SQLString .= TABLE_VARIANTE_LANGU . " ";
		$SQLString .= "WHERE ";
		$SQLString .= TABLE_VARIANTE_LANGU . ".variante_id = '" . $VariantenID . "' AND ";
		$SQLString .= TABLE_VARIANTE_LANGU . ".language_id = '" . $LanguageID . "' ";
		
		$LanguageObject = mysql_fetch_object(errorlogged_mysql_query($SQLString));

		if ($LanguageObject) {

			$SQLString = "UPDATE " . TABLE_VARIANTE_LANGU . " SET ";
			$SQLString .= TABLE_VARIANTE_LANGU . ".name = '" . $Name . "' ";
			$SQLString .= " WHERE " . TABLE_VARIANTE_LANGU . ".variante_id = '" . $VariantenID . "' AND ";
			$SQLString .= TABLE_VARIANTE_LANGU . ".language_id = " . $LanguageID . " ";
			
			$MySQLQueryReference = errorlogged_mysql_query($SQLString);
	
		} else {
			
			$SQLString = "INSERT INTO " . TABLE_VARIANTE_LANGU . " SET ";
			$SQLString .= TABLE_VARIANTE_LANGU . ".name = '" . $Name . "', ";
			$SQLString .= TABLE_VARIANTE_LANGU . ".variante_id = '" . $VariantenID . "', ";
			$SQLString .= TABLE_VARIANTE_LANGU . ".language_id = '" . $LanguageID . "' ";

			$MySQLQueryReference = errorlogged_mysql_query($SQLString);

		}
		
		
	// Variante neu anlegen
	} else {

		$SQLString = "INSERT INTO " . TABLE_VARIANTE . " SET ";
		$SQLString .= TABLE_VARIANTE . ".parent = '0', ";
		$SQLString .= TABLE_VARIANTE . ".root = '1' ";
		
		$MySQLQueryReference = errorlogged_mysql_query($SQLString);
		
		$VariantenID = mysql_insert_id();
		
		$SQLString = "INSERT INTO " . TABLE_VARIANTE_LANGU . " SET ";
		$SQLString .= TABLE_VARIANTE_LANGU . ".name = '" . $Name . "', ";
		$SQLString .= TABLE_VARIANTE_LANGU . ".variante_id = '" . $VariantenID . "', ";
		$SQLString .= TABLE_VARIANTE_LANGU . ".language_id = '" . $LanguageID . "' ";

		$MySQLQueryReference = errorlogged_mysql_query($SQLString);

	}	

	return $VariantenID;
	
}


function DeleteVariante($VariantenID) {
	
	// Variante löschen
	$SQLString = "DELETE FROM " . TABLE_VARIANTE . " WHERE id = '" . $VariantenID . "'";
	$MySQLQueryReference = errorlogged_mysql_query($SQLString);
	
	$SQLString = "DELETE FROM " . TABLE_VARIANTE_LANGU . " WHERE variante_id = '" . $VariantenID . "'";
	$MySQLQueryReference = errorlogged_mysql_query($SQLString);

	// Merkmale löschen
	$SQLString = "DELETE FROM " . TABLE_MERKMAL . " WHERE parent = '" . $VariantenID . "'";
	$MySQLQueryReference = errorlogged_mysql_query($SQLString);

	// Artikel aktualisieren
	$SQLString = "UPDATE " . TABLE_ARTIKEL . " SET variante1 = '' WHERE variante1 = '" . $VariantenID . "'";
	$MySQLQueryReference = errorlogged_mysql_query($SQLString);
	
	$SQLString = "UPDATE " . TABLE_ARTIKEL . " SET variante2 = '' WHERE variante2 = '" . $VariantenID . "'";
	$MySQLQueryReference = errorlogged_mysql_query($SQLString);

	$SQLString = "UPDATE " . TABLE_ARTIKEL . " SET variante3 = '' WHERE variante3 = '" . $VariantenID . "'";
	$MySQLQueryReference = errorlogged_mysql_query($SQLString);

	$SQLString = "UPDATE " . TABLE_ARTIKEL . " SET variante4 = '' WHERE variante4 = '" . $VariantenID . "'";
	$MySQLQueryReference = errorlogged_mysql_query($SQLString);
	
	$SQLString = "UPDATE " . TABLE_ARTIKEL . " SET merkmalauswahl = 0 WHERE ";
	$SQLString .= TABLE_ARTIKEL . ".variante1 = '0' AND ";
	$SQLString .= TABLE_ARTIKEL . ".variante2 = '0' AND ";
	$SQLString .= TABLE_ARTIKEL . ".variante3 = '0' AND ";
	$SQLString .= TABLE_ARTIKEL . ".variante4 = '0'";

	// Merkmalauswahl l�schen
	$SQLString = "DELETE FROM " . TABLE_MERKMALAUSWAHL . " WHERE " . TABLE_MERKMALAUSWAHL . ".variantenid =  '" . $VariantenID . "'";
	$MySQLQueryReference = errorlogged_mysql_query($SQLString);
	
	// Merkmalkombination l�schen 
	// XXX TODO XXX
	
}

function GetVariantenDetail($VariantenID, $LanguageID = 0) {

	// Sprache ermitteln
	if (!$LanguageID) {
		$LanguageID = GetDefaultLanguageID();
	}
	
	$StandardLanguageID = GetDefaultLanguageID();

	// SQL-String f�r die Variantenabfrage zusammensetzen
	$SQLString = "SELECT ";
	$SQLString .= TABLE_VARIANTE . ".id, ";
	$SQLString .= TABLE_VARIANTE_LANGU . ".name, ";
	$SQLString .= "table_variante_langu_standard.name AS standard_name ";
	$SQLString .= "FROM " . TABLE_VARIANTE . " ";
	$SQLString .= "LEFT JOIN " . TABLE_VARIANTE_LANGU . " ON ((" . TABLE_VARIANTE . ".id = " . TABLE_VARIANTE_LANGU . ".variante_id) AND (" . TABLE_VARIANTE_LANGU . ".language_id = " . $LanguageID . "))";
	$SQLString .= "LEFT JOIN " . TABLE_VARIANTE_LANGU . " table_variante_langu_standard ON ((" . TABLE_VARIANTE . ".id = table_variante_langu_standard.variante_id) AND (table_variante_langu_standard.language_id = " . $StandardLanguageID . ")) ";
	$SQLString .= " WHERE " . TABLE_VARIANTE . ".id = '" . $VariantenID . "'";
	
	// Variante abfragen
	$VariantenObject = mysql_fetch_object(errorlogged_mysql_query($SQLString));
	
	return $VariantenObject;

}

function GetVariantenLanguageDataArray($VarianteID) {
	
	// Sprachen Abfragen
	$SQLString = "SELECT ";
	$SQLString .= TABLE_LANGUAGE . ".language_id, ";
	$SQLString .= "IF(ISNULL(" . TABLE_VARIANTE_LANGU . ".name), " . TABLE_LANGUAGE . ".language_image_admintool_inactive, " . TABLE_LANGUAGE . ".language_image_admintool_active) AS language_image_admintool ";
	$SQLString .= "FROM ";
	$SQLString .= TABLE_LANGUAGE . " ";
	$SQLString .= "LEFT JOIN " . TABLE_VARIANTE_LANGU . " ON ((" . TABLE_LANGUAGE . ".language_id = " . TABLE_VARIANTE_LANGU . ".language_id) AND (" . TABLE_VARIANTE_LANGU . ".variante_id = '" . $VarianteID . "')) ";
	
	$MySQLQueryReference = errorlogged_mysql_query($SQLString);
	
	$LanguageCounter = 0;
	
	while ($VariantenLanguageRow = mysql_fetch_array($MySQLQueryReference)) {
		$VariantenLanguageDataArray[$LanguageCounter]["language_image_admintool_imagestring"] = "<img src=\"" . IMAGEPFAD . "dbimages/" . $VariantenLanguageRow["language_image_admintool"] . "\" border=\"0\">";
		$VariantenLanguageDataArray[$LanguageCounter]["language_id"] = $VariantenLanguageRow["language_id"];
		$LanguageCounter++;
	}
	
	return $VariantenLanguageDataArray;

}

function GetVariantenDataArray($SearchField = "", $SearchString = "", $SortField = "", $SortOrder = "", $LanguageID = 0) {

	global $a_va_nichtuebersetzt, $c_landnichtuebersetzt;

	// Sprache ermitteln
	if (!$LanguageID) {
		$LanguageID = GetDefaultLanguageID();
	}

	$StandardLanguageID = GetDefaultLanguageID();
	
	// ********************************************************************************
	// ** SQL-String zum einlesen der Varianten zusammensetzen
	// ********************************************************************************

	// Felder
	$SQLString = "SELECT ";
	$SQLString .= TABLE_VARIANTE . ".id, ";
	$SQLString .= "IFNULL(" . TABLE_VARIANTE_LANGU . ".name, table_variante_langu_standard.name) AS name, ";
	$SQLString .= "!ISNULL(" . TABLE_VARIANTE_LANGU . ".name) AS translate_name ";
	$SQLString .= "FROM " . TABLE_VARIANTE . " ";
	$SQLString .= "LEFT JOIN " . TABLE_VARIANTE_LANGU . " ON ((" . TABLE_VARIANTE . ".id = " . TABLE_VARIANTE_LANGU . ".variante_id) AND (" . TABLE_VARIANTE_LANGU . ".language_id = " . $LanguageID . ")) ";
	$SQLString .= "LEFT JOIN " . TABLE_VARIANTE_LANGU . " table_variante_langu_standard ON ((" . TABLE_VARIANTE . ".id = table_variante_langu_standard.variante_id) AND (table_variante_langu_standard.language_id = " . $StandardLanguageID . ")) ";

	// Suche
	$SQLString .= "WHERE (";
	
	if ($SearchField && $SearchString) {
		$SQLString .= "(" . $SearchField . " LIKE '%" . $SearchString . "%') AND "; 
	}

	$SQLString .= " (" . TABLE_VARIANTE . ".root = 1) AND ";

	$SQLString .= " 1) ";

	// Sortierung
	if ($SortField && $SortOrder) {
		$SQLString .= "ORDER BY " . $SortField . " " . $SortOrder . " "; 
	}
	
//	echo '$SQLString: ' . $SQLString . '<br>';
	
	$MySQLQueryReferenz = errorlogged_mysql_query($SQLString);

	// ********************************************************************************
	// ** die Variantendaten in ein Array ablegen
	// ********************************************************************************

	$VariantenCounter = 0;
	$VariantenDataArray = array();

	while ($VariantenRowArray = mysql_fetch_array($MySQLQueryReferenz, MYSQL_ASSOC)) {

		// �berpr�fen, ob auch Merkmale vorhanden sind
		$SQLString = "SELECT id FROM " . TABLE_MERKMAL . " WHERE parent = '" . $VariantenRowArray["id"] . "'";
		$MerkmalObject = mysql_fetch_object(errorlogged_mysql_query($SQLString));
		
		if ($MerkmalObject) {
			$Merkmale = true;
		} else {
			$Merkmale = false;
		}

		$VariantenDataArray[$VariantenCounter]["name"] = $VariantenRowArray["name"];
		$VariantenDataArray[$VariantenCounter]["translate_name"] = $VariantenRowArray["translate_name"];
		$VariantenDataArray[$VariantenCounter]["id"] = $VariantenRowArray["id"];
		$VariantenDataArray[$VariantenCounter]["merkmale"] = $Merkmale;
		$VariantenDataArray[$VariantenCounter]["languagearray"] = GetVariantenLanguageDataArray($VariantenRowArray["id"]);
		$VariantenCounter++;

	}

	return $VariantenDataArray;

}


function SetDefaultWerteKundengruppenPreis($ArtikelID) {

	// Artikeldaten einlesen
	$ArtikelDataArray = GetArtikelDataArray($ArtikelID);

	// f�r alle Kundengruppen einen Defaultpreis anlegen
	$KundengruppenDataArray = GetKundengruppenDataArray();

	foreach ($KundengruppenDataArray as $Kundengruppe) {
		$SQLString .= "(" . $ArtikelID . ", " . $Kundengruppe["id"] . ", " . $ArtikelDataArray["preis"] . "), ";
	}

	// SQL-String f�r das Einf�gen der Default-Kundegruppenpreise zusammen setzen und ausf�hren
	$SQLString = "INSERT INTO " . TABLE_KUNDENGRUPPENPREISE . " (artikelid, kundengruppenid, preis) VALUES " . substr($SQLString, 0, strlen($SQLString) - 2);
	$QuerryReferenz = errorlogged_mysql_query($SQLString);

}

function XDeleteKundengruppenPreise($ArtikelID) {

	// alle Kundengruppenpreise des Artikels l�schen
	$SQLString = "DELETE FROM " . TABLE_KUNDENGRUPPENPREISE . " WHERE artikelid = " . $ArtikelID;
	$QuerryReferenz = errorlogged_mysql_query($SQLString);

}


function GetMerkmalDefaultID($ArtikelID) {

	// Defaultkombination ermitteln
	$SQLString = "SELECT * FROM " . TABLE_MERKMALPREIS . " WHERE artikelid = " . $ArtikelID . " AND defaultselected = 1";
	$ResultObject = mysql_fetch_object(errorlogged_mysql_query($SQLString));

	return $ResultObject->id;

}

function GetMerkmalPreis($MerkmalKombination, $ArtikelID) {

	// alle Elemente eines Artikels aus der Merkmalpreis Tabelle l�schen
	$SQLString = "SELECT * FROM " . TABLE_MERKMALPREIS . " WHERE artikelid = " . $ArtikelID . " AND id = " . $MerkmalKombination;
	$ResultObject = mysql_fetch_object(errorlogged_mysql_query($SQLString));

	return $ResultObject;

}


function GetMerkmalKombination($MerkmalArray, $ArtikelID) {
	
	// Artikeldaten einlesen
	$ArtikelDataArray = GetArtikelDataArray($ArtikelID);

	// alle Kombinationen einlesen
	$MerkmalKombibationsArray = GetMerkmalKombinationen($ArtikelDataArray);
	
	// die Maximal Tiefe der einlesen
	$MaxSteps = GetMaxSteps($ArtikelDataArray);

	for ($KombinationsCounter = 1; $KombinationsCounter <= count($MerkmalKombibationsArray); $KombinationsCounter++) {

		$KombinationGefunden = true;

		for ($MerkmalCounter = 0; $MerkmalCounter <= count($MerkmalArray) - 1; $MerkmalCounter++) {
		
			if ($MerkmalArray[$MerkmalCounter]) {

				if ($MerkmalArray[$MerkmalCounter] != $MerkmalKombibationsArray[$KombinationsCounter][$MerkmalCounter + 1]) {
					
					$KombinationGefunden = false;
					
				}

			}
			
		}

		//echo "*****<br>";
		//echo "KombinationsCounter: " . $KombinationsCounter . "<br>";
		//echo $MerkmalKombibationsArray[$KombinationsCounter]["ID"] . ":<br>";
		//echo $MerkmalKombibationsArray[$KombinationsCounter]["1"] . "-" . $MerkmalKombibationsArray[$KombinationsCounter]["2"] . "-" . $MerkmalKombibationsArray[$KombinationsCounter]["3"] . "-" . $MerkmalKombibationsArray[$KombinationsCounter]["4"] . "<br>";
		//echo $MerkmalArray[0] . "-" . $MerkmalArray[1] . "-" . $MerkmalArray[2] . "-" . $MerkmalArray[3] . "<br>";
		
		if ($KombinationGefunden) {
		
			//echo "<b>Kombination gefunden</b>: " . $MerkmalKombibationsArray[$KombinationsCounter]["ID"] . "<br>";
			return $MerkmalKombibationsArray[$KombinationsCounter]["ID"];
			
		}

	}
	
	return false;
	
}


function DeleteMerkmalPreise($ArtikelID) {
	
	// alle Elemente eines Artikels aus der Merkmalpreis Tabelle l�schen
	$SQLString = "DELETE FROM " . TABLE_MERKMALPREIS . " WHERE artikelid = '" . $ArtikelID . "'";
	$QuerryReferenz = errorlogged_mysql_query($SQLString);

}

function SaveMerkmalPreis($ArtikelID, $PostArray) {

	// Artikeldaten einlesen
	$ArtikelDataArray = GetArtikelDataArray($ArtikelID);

	// alle Varianten des Artikels einlesen
	$ArtikelVariantenArray = GetArtikelVariantenArray($ArtikelDataArray);

	// alle Kombinationen einlesen
	$MerkmalKombibationsArray = GetMerkmalKombinationen($ArtikelDataArray);

	// alle Preise l�schen
	$SQLString = "DELETE FROM " . TABLE_MERKMALPREIS . " where artikelid = '" . $ArtikelID . "'";
	$QuerryReferenz = errorlogged_mysql_query($SQLString);

	// die neuen Preise speichern
	$SQLString = "INSERT INTO " . TABLE_MERKMALPREIS . " (id, artikelid, preis, artikel_nr, defaultselected) VALUES ";

	foreach ($MerkmalKombibationsArray as $MerkmalKombibationsElement) {

		if ($PostArray["merkmaldefaultselected"] == $MerkmalKombibationsElement["ID"]) {
			$DefaultPreis = $PostArray["merkmalpreis_" . $MerkmalKombibationsElement["ID"]];
            $DefaultArtikelnummer = $PostArray["merkmalartikelnr_" . $MerkmalKombibationsElement["ID"]];
			$SQLString .= "(" . $MerkmalKombibationsElement["ID"] . ", " . $ArtikelID . ", " . $PostArray["merkmalpreis_" . $MerkmalKombibationsElement["ID"]] . ", '" . $PostArray["merkmalartikelnr_" . $MerkmalKombibationsElement["ID"]] . "', 1), ";
		} else {
			$SQLString .= "(" . $MerkmalKombibationsElement["ID"] . ", " . $ArtikelID . ", " . $PostArray["merkmalpreis_" . $MerkmalKombibationsElement["ID"]] . ", '" . $PostArray["merkmalartikelnr_" . $MerkmalKombibationsElement["ID"]] . "', 0), ";
		}

	}

	$SQLString = substr($SQLString, 0, strlen($SQLString) - 2);

	$QuerryReferenz = errorlogged_mysql_query($SQLString);

	// den Preis des Artikels auf den Defaultpreis setzen
	$SQLString = "UPDATE " . TABLE_ARTIKEL . " SET preis = '" . $DefaultPreis . "', artikel_nr = '" . $DefaultArtikelnummer . "' WHERE id = '" . $ArtikelID . "'";
	$QuerryReferenz = errorlogged_mysql_query($SQLString);

	$DefaultArray["preis"] = $DefaultPreis;
    $DefaultArray["artikel_nr"] = $DefaultArtikelnummer;

	return $DefaultArray;

}

function CheckFormValuesPreis($ArtikelID, $PostArray) {
	
	// Artikeldaten einlesen
	$ArtikelDataArray = GetArtikelDataArray($ArtikelID);

	// alle Varianten des Artikels einlesen
	$ArtikelVariantenArray = GetArtikelVariantenArray($ArtikelDataArray);

	// alle Kombinationen einlesen
	$MerkmalKombibationsArray = GetMerkmalKombinationen($ArtikelDataArray);
	
	foreach ($MerkmalKombibationsArray as $MerkmalKombibationsElement) {

		if (!$PostArray["merkmalpreis_" . $MerkmalKombibationsElement["ID"]]) {
			return false;
		}

	}
	
	return true;

}

function GetSimpleMerkmal($ArtikelID, $VariantenMerkmalArray, $SQLStringArray) {

	for ($MerkmalCounter = 1; $MerkmalCounter <= count($VariantenMerkmalArray[1]) - 1; $MerkmalCounter++) {
	
		$SQLStringArray[] = "('" . $SQLStringArray[0] . "', '1', '" . $ArtikelID . "', '" . $VariantenMerkmalArray[1][0] . "', '" . $VariantenMerkmalArray[1][$MerkmalCounter] . "', '-1', '-1', '0'), ";
		$SQLStringArray[0]++;		
		
	}
	
	return $SQLStringArray;
	
}

function SetArtikelmerkmalzuordungsFlag($ArtikelID, $Value) {
	
	// SQL-String um das merkmalzuordnung Flag in der Artikel tabelle zu setzen
	$SQLString = "UPDATE " . TABLE_ARTIKEL . " SET merkmalzuordnung = " . $Value . " WHERE id = '" . $ArtikelID . "'";
	$QuerryReferenz = errorlogged_mysql_query($SQLString);

}

function SetArtikelmerkmalpreisFlag($ArtikelID, $Value) {
	
	// SQL-String um das merkmalzuordnung Flag in der Artikel tabelle zu setzen
	$SQLString = "UPDATE " . TABLE_ARTIKEL . " SET merkmalpreis = " . $Value . " WHERE id = '" . $ArtikelID . "'";
	$QuerryReferenz = errorlogged_mysql_query($SQLString);

}

function CheckVariantenCount($ArtikelID) {
	
	// Artikeldaten einlesen
	$ArtikelDataArray = GetArtikelDataArray($ArtikelID);

	// alle Varianten des Artikels einlesen
	$ArtikelVariantenArray = GetArtikelVariantenArray($ArtikelDataArray);
	
	if ($ArtikelVariantenArray) {
		return true;
	} else {
		return false;
	}

}


function CheckFormValuesEinfach($ArtikelID, $MerkmalZuordungsArray) {
	
	// Artikeldaten einlesen
	$ArtikelDataArray = GetArtikelDataArray($ArtikelID);

	// alle Varianten des Artikels einlesen
	$ArtikelVariantenArray = GetArtikelVariantenArray($ArtikelDataArray);

	// alle Merkmale in hierarchischer Form ([VariantenID][MerkmalID])
	$AdvancedVariantenArray = GetAdvancedVariantenArray($ArtikelVariantenArray);

	// alle Merkmale aus dem erweiterten VarinatenArray durchgehen und gegen die Daten aus dem Formular abgleichen
	for ($VariantenCounter = 0; $VariantenCounter <= count($AdvancedVariantenArray) - 1; $VariantenCounter++) {

		$MerkmalGefunden = false;	

		for ($MerkmalCounter = 1; $MerkmalCounter <= count($AdvancedVariantenArray[$VariantenCounter]) - 1; $MerkmalCounter++) {

			if (in_array($AdvancedVariantenArray[$VariantenCounter][$MerkmalCounter], $MerkmalZuordungsArray)) {
				$MerkmalGefunden = true;	
			}

		}
		
		if (!$MerkmalGefunden) {
			return false;
		}
		
		
	}

	return true;

}


function SetDefaultWerteEinfach($ArtikelID) {

	// �berpr�fen, ob Werte in der shop_merkmaleinfach Tabelle sind
	$SQLString = "SELECT * FROM " . TABLE_MERKMALEINFACH . " WHERE artikelid = '" . $ArtikelID . "'";
	$QuerryReferenz = errorlogged_mysql_query($SQLString);

	// Wenn keine Werte vorhanden sind, Werte einf�gen und alle aktivieren
	if (!mysql_fetch_array($QuerryReferenz, MYSQL_ASSOC)) {

		$ArtikelDataArray = GetArtikelDataArray($ArtikelID);
		$ArtikelVariantenArray = GetArtikelVariantenArray($ArtikelDataArray);

		foreach ($ArtikelVariantenArray as $ArtikelVariantenItem) {
			$SQLInString .= $ArtikelVariantenItem . ", ";
		}
		
		$SQLInString = substr($SQLInString, 0, strlen($SQLInString) - 2);
		
		// Alle IDs der Merkmale ermitteln, die bei der Auswahl der Varianten ben�tigt werden
		$SQLString = "SELECT * FROM " . TABLE_SCHEMA . " WHERE parent IN(" . $SQLInString . ")";
		$QuerryReferenz = errorlogged_mysql_query($SQLString);
		
		$SQLString = "";
		
		// Alle Merkmale durchgehen und den SQL-String zjm einf�gen der einfachn Auswahl vorbereiten
		while ($QuerryResult = mysql_fetch_array($QuerryReferenz, MYSQL_ASSOC)) {
			
			$SQLString .= "(" . $ArtikelID . ", " . $QuerryResult["parent"] . ", " . $QuerryResult["id"] . ", 1), ";
			
		}
		
		// Alle Defaultwerte in die shop_merkmaleinfach Tabelle einf�gen
		$SQLString = "INSERT INTO " . TABLE_MERKMALEINFACH . " (ArtikelID, VariantenID, MerkmalID, selected) VALUES " . substr($SQLString, 0, strlen($SQLString) - 2);
		$QuerryReferenz = errorlogged_mysql_query($SQLString);
		
	}
	
}


function VariantenGeaendert($PostArray) {

	$ArtikelDataArray = GetArtikelDataArray($PostArray["id"]);	
	
	for ($Counter = 0; $Counter <= 3; $Counter++) {
	
		if (!$PostArray["schemawahl" . $Counter]) {
			$PostArray["schemawahl" . $Counter] = 0;	
		}

		if ($Counter == 0) {

			if ($PostArray["schemawahl" . $Counter] != $ArtikelDataArray["schema"]) {
				$SchemaGeaendert = true;
			}

		} else {

			if ($PostArray["schemawahl" . $Counter] != $ArtikelDataArray["schema" . $Counter]) {
				$SchemaGeaendert = true;
			}

		}
		
	}
	
	return $SchemaGeaendert;
	
}

function DeleteMerkmalZuordnung($ArtikelID, $Complete) {
	
	// Artikeldaten einlesen
	$ArtikelDataArray = GetArtikelDataArray($ArtikelID);

	// alle Varianten des Artikels einlesen
	$ArtikelVariantenArray = GetArtikelVariantenArray($ArtikelDataArray);

	// alle Zuordnungen aus der shop_merkmalauswahl l�schen
	$SQLString = "DELETE FROM " . TABLE_MERKMALAUSWAHL . " WHERE artikelid = '" . $ArtikelID . "'";
	$QuerryReferenz = errorlogged_mysql_query($SQLString);

	// Wenn alle Zuordungen gel�scht werden sollen ...
	if ($Complete) {

		$SQLString = "DELETE FROM " . TABLE_MERKMALEINFACH . " WHERE artikelid = '" . $ArtikelID . "'";

	// wenn nur einzelne Zuordungen gel�scht werden sollen ...
	} else {

		for ($VariantenCounter = 0; $VariantenCounter <= count($ArtikelVariantenArray) - 1; $VariantenCounter++) {
			$SQLINString .=	$ArtikelVariantenArray[$VariantenCounter] . ", ";
		}
	
		$SQLINString = substr($SQLINString, 0, strlen($SQLINString) - 2);
	
		$SQLString = "DELETE FROM " . TABLE_MERKMALEINFACH . " WHERE artikelid = '" . $ArtikelID . "' AND VariantenID NOT IN (" . $SQLINString . ")";
	
	}
	
	$QuerryReferenz = errorlogged_mysql_query($SQLString);

}

function SaveMerkmalZuordnungKombiniert($ArtikelID, $MerkmalZuordungsArray) {

	// SQLIN String f�r die Zuordung der Auswahl erstellen
	foreach ($MerkmalZuordungsArray as $MerkmalZuordungsElement) {
		$SQLINString .= $MerkmalZuordungsElement . ", ";
	}
	
	$SQLINString = substr($SQLINString, 0, strlen($SQLINString) - 2);

	// alle ausgew�hlten aktivieren
	$SQLString = "UPDATE " . TABLE_MERKMALAUSWAHL . " SET selected = 1 WHERE id IN(" . $SQLINString . ")";
	$QuerryReferenz = errorlogged_mysql_query($SQLString);
	
	// den Rest deaktivieren
	$SQLString = "UPDATE " . TABLE_MERKMALAUSWAHL . " SET selected = 0 WHERE id NOT IN(" . $SQLINString . ")";
	$QuerryReferenz = errorlogged_mysql_query($SQLString);
	
	// SQL-String um das merkmalzuordnung Flag in der Artikel tabelle zu setzen
	$SQLString = "UPDATE " . TABLE_ARTIKEL . " SET merkmalzuordnung = 2 WHERE id = '" . $ArtikelID . "'";
	$QuerryReferenz = errorlogged_mysql_query($SQLString);

	// Alle Eintr�ge aus der shop_merkmaleinfach l�schen
	$SQLString = "DELETE FROM " . TABLE_MERKMALEINFACH . " WHERE ArtikelID = '" . $ArtikelID . "'";
	$QuerryReferenz = errorlogged_mysql_query($SQLString);

}

function GetMerkmalKombinationenSelection($ArtikelID) {
	
	// SQL-String zum auslesen aller relevanten Kombinationsauswahl Zeilen erstellen
	$SQLString = "SELECT * FROM " . TABLE_MERKMALAUSWAHL . " WHERE artikelid = '" . $ArtikelID . "'";
	$QuerryReferenz = errorlogged_mysql_query($SQLString);

	// Alle Daten in ein Array legen	
	while ($QuerryResult = mysql_fetch_array($QuerryReferenz, MYSQL_ASSOC)) {
		$ResultDataArray[$QuerryResult["id"]]["id"] = $QuerryResult["id"];
		$ResultDataArray[$QuerryResult["id"]]["artikelid"] = $QuerryResult["artikelid"];
		$ResultDataArray[$QuerryResult["id"]]["selected"] = $QuerryResult["selected"];
	}

	return $ResultDataArray;


}

function GetEinfachVariantenArray($ArtikelID) {
	
	// SQL-String zum auslesen aller relevanten Kombinationsauswahl Zeilen erstellen
	$SQLString = "SELECT * FROM " . TABLE_MERKMALEINFACH . " WHERE artikelid = '" . $ArtikelID . "'";
	$QuerryReferenz = errorlogged_mysql_query($SQLString);

	// Alle Daten in ein Array legen	
	while ($QuerryResult = mysql_fetch_array($QuerryReferenz, MYSQL_ASSOC)) {
		$ResultDataArray[$QuerryResult["MerkmalID"]]["ID"] = $QuerryResult["ID"];
		$ResultDataArray[$QuerryResult["MerkmalID"]]["ArtikelID"] = $QuerryResult["ArtikelID"];
		$ResultDataArray[$QuerryResult["MerkmalID"]]["VariantenID"] = $QuerryResult["VariantenID"];
		$ResultDataArray[$QuerryResult["MerkmalID"]]["MerkmalID"] = $QuerryResult["MerkmalID"];
		$ResultDataArray[$QuerryResult["MerkmalID"]]["selected"] = $QuerryResult["selected"];
	}

	return $ResultDataArray;
	
}

function XGetMerkmalKombibationsHTMLStringEinfach($ArtikelID) {

	// wenn ben�tigt, Defaultwerte setzen
	SetDefaultWerteEinfach($ArtikelID);

	// Artikeldaten einlesen
	$ArtikelDataArray = GetArtikelDataArray($ArtikelID);

	// alle Varianten des Artikels einlesen
	$ArtikelVariantenArray = GetArtikelVariantenArray($ArtikelDataArray);

	// alle Varianten und Merkmale, die dem Artikel zugeordnet werden k�nnen, in ein einfaches Array einlesen
	$VariantenArray = GetVariantenArray($ArtikelVariantenArray);

	// alle Merkmale in hierarchischer Form ([VariantenID][MerkmalID])
	$AdvancedVariantenArray = GetAdvancedVariantenArray($ArtikelVariantenArray);

	// alle Merkmale mit der zuweisung, ob sie selektiert sind, einlesen
	$EinfachVariantenArray = GetEinfachVariantenArray($ArtikelID);

	// Hilfsvariablen
	$Counter = 1;
	$ArrayComplete = true;

	// den String f�r die HTML-Ausgabe erstellen
	$HTMLString  .= "<table cellpadding=\"2\" cellspacing=\"2\" border=\"0\">\n";
	$HTMLString  .= "<tr>\n";

	for ($VariantenCounter = 0; $VariantenCounter <= count($ArtikelVariantenArray) - 1; $VariantenCounter++) {
		$HTMLString  .= "\t<td class=\"tdBackground1\">" . $VariantenArray[$ArtikelVariantenArray[$VariantenCounter]]["name"] . "</td>\n";
	}
	
	$HTMLString  .= "</tr>";

	// Schleife f�r die Merkmale
	while($ArrayComplete) { 

		$ArrayComplete = false;

		$RowHTMLString = "";

		// Alle Spalten der Varianten durchgehen und entsprechende Merkmale zuordnen
		for ($VariantenCounter = 0; $VariantenCounter <= count($AdvancedVariantenArray) - 1; $VariantenCounter++) {
			
			if ($AdvancedVariantenArray[$VariantenCounter][$Counter]) {

				// �berpr�fen, ob die Checkbox gechecked ist
				if ($EinfachVariantenArray[$AdvancedVariantenArray[$VariantenCounter][$Counter]]["selected"]) {
					$SelectedString = " checked";
				} else {
					$SelectedString = "";
				}
				
				// Zelle mit Checkbox und Merkmaltext erstellen
				$RowHTMLString .= "\t<td>";
				$RowHTMLString .= "<input type=\"checkbox\" name=\"merkmalzuordnung[]\" value=\"" . $VariantenArray[$AdvancedVariantenArray[$VariantenCounter][$Counter]]["id"] . "\"" . $SelectedString . ">&nbsp;&nbsp;" . $VariantenArray[$AdvancedVariantenArray[$VariantenCounter][$Counter]]["name"] . "&nbsp;&nbsp;";
				$RowHTMLString .= "</td>\n";

				$ArrayComplete = true;

			} else {

				$RowHTMLString .= "\t<td>&nbsp;</td>";

			}
			
		}
		
		$Counter++;

		// Wechsel der CSS-Klasse f�r das Zebrastreifenmuster
		if($RowClass == "tdBackground2") {
			$RowClass = "";
		} else {
			$RowClass = "tdBackground2";
		}

		// wenn es ein Merkmal f�r die Zeile gibt, diese an den HTML String anh�ngen
		if ($ArrayComplete) {
			
			$HTMLString  .= "<tr class=\"" . $RowClass . "\">";
			$HTMLString  .= $RowHTMLString;
			$HTMLString  .= "</tr>";

		}
				
	}

	$HTMLString  .= "</table>";

	return $HTMLString;
	
}

function CheckEinfachAuswahlCheckbox($MerkmalID, $MerkmalKombibationsArray, $MaxSteps) {
	
	for ($Counter = 0; $Counter <= count($MerkmalKombibationsArray); $Counter++) {

		$MerkmalGefunden = false;

		for ($MerkmalCounter = 1; $MerkmalCounter <= $MaxSteps; $MerkmalCounter++) {

			if ($MerkmalKombibationsArray[$Counter][$MerkmalCounter] == $MerkmalID) {
				
				$MerkmalGefunden = true;
								
			}

		}
		
		if ($MerkmalGefunden) {
			$KombinationenMitMerkmal[] = $MerkmalKombibationsArray[$Counter]["ID"];
		} else {
			$KombinationenOhneMerkmal[] = $MerkmalKombibationsArray[$Counter]["ID"];
		}
		
	}
	
	$SQLInString = "";
	
	for ($Counter = 0; $Counter <= count($KombinationenMitMerkmal) - 1; $Counter++) {
		$SQLInString .= $KombinationenMitMerkmal[$Counter] . ", ";
	}
	
	$SQLInString = substr($SQLInString, 0, strlen($SQLInString) - 2);
	
	// SQL-String zum auslesen aller relevanten Kombinationsauswahl Zeilen erstellen
	$SQLString = "SELECT * FROM " . TABLE_MERKMALAUSWAHL . " WHERE id IN(" . $SQLInString . ")";
	$QuerryReferenz = errorlogged_mysql_query($SQLString);
	
	$Counter = 0;
	
	while ($QuerryResult = mysql_fetch_array($QuerryReferenz, MYSQL_ASSOC)) {
		$Counter++;
		//echo $QuerryResult["id"] . "-" . $QuerryResult["selected"] . "<br>";
	}
	
	
	if ($Counter == count($KombinationenMitMerkmal)) {
		$CheckboxArray["CheckboxImageString"] = "../images/checkbox_activate.gif";
		$CheckboxArray["HiddenfieldValue"] = 1;
	} elseif ($Counter == 0) {
		$CheckboxArray["CheckboxImageString"] = "../images/checkbox_deactivate.gif";
		$CheckboxArray["HiddenfieldValue"] = 0;
	} else {
		$CheckboxArray["CheckboxImageString"] = "../images/checkbox_disabled.gif";
		$CheckboxArray["HiddenfieldValue"] = -1;
	}
	
	return $CheckboxArray;
	
}

function SetDefaultWerteKombiniert($ArtikelID) {

	// �berpr�fen, ob Werte in der shop_merkmalauswahl Tabelle sind
	$SQLString = "SELECT * FROM " . TABLE_MERKMALAUSWAHL . " WHERE artikelid = '" . $ArtikelID . "'";
	$QuerryReferenz = errorlogged_mysql_query($SQLString);

	// Wenn keine Werte vorhanden sind, Werte einf�gen und alle aktivieren
	if (!mysql_fetch_array($QuerryReferenz, MYSQL_ASSOC)) {

		// Artikeldaten einlesen
		$ArtikelDataArray = GetArtikelDataArray($ArtikelID);

		// alle Kombinationen einlesen
		$MerkmalKombinationsArray = GetMerkmalKombinationen($ArtikelDataArray);


		// SQL-String um alle Kombinationen in die Tabelle shop_merkmalauswahl zu legen und auf selected zu setzen erzeugen

		$SQLString = "INSERT INTO " . TABLE_MERKMALAUSWAHL . " (id, artikelid, selected) VALUES ";

		foreach ($MerkmalKombinationsArray as $MerkmalKombination) {
			$SQLString .= "(" . $MerkmalKombination["ID"] . ", " . $ArtikelID . ", 1), ";
		}

		$SQLString = substr($SQLString, 0, strlen($SQLString) - 2);

		$QuerryReferenz = errorlogged_mysql_query($SQLString);

	}

}

function XGetMerkmalKombibationsHTMLStringKombination($ArtikelID) {

	// wenn ben�tigt, Defaultwerte setzen
	SetDefaultWerteKombiniert($ArtikelID);

	// Artikeldaten einlesen
	$ArtikelDataArray = GetArtikelDataArray($ArtikelID);

	// alle Varianten des Artikels einlesen
	$ArtikelVariantenArray = GetArtikelVariantenArray($ArtikelDataArray);

	// alle Varianten und Merkmale, die dem Artikel zugeordnet werden k�nnen, in ein einfaches Array einlesen
	$VariantenArray = GetVariantenArray($ArtikelVariantenArray);

	// alle Kombinationen einlesen
	$MerkmalKombibationsArray = GetMerkmalKombinationen($ArtikelDataArray);
	
	// die Auswahl der Kombinationen einlesen
	$MerkmalKombibationsSelectionArray = GetMerkmalKombinationenSelection($ArtikelID);
	
	// die Maximal Tiefe der einlesen
	$MaxSteps = GetMaxSteps($ArtikelDataArray);

	// den String f�r die HTML-Ausgabe erstellen
	$HTMLString  .= "<table cellpadding=\"2\" cellspacing=\"2\" border=\"0\">\n";
	$HTMLString  .= "<tr>\n";

	$HTMLString  .= "\t<td class=\"tdBackground1\">&nbsp;</td>\n";

	for ($VariantenCounter = 0; $VariantenCounter <= count($ArtikelVariantenArray) - 1; $VariantenCounter++) {
		$HTMLString  .= "\t<td class=\"tdBackground1\">" . $VariantenArray[$ArtikelVariantenArray[$VariantenCounter]]["name"] . "</td>\n";
	}

	$HTMLString  .= "\t<td class=\"tdBackground1\">&nbsp;</td>\n";

	// Schleife f�r die Merkmale
	for ($MerkmalKombinationsCounter = 1; $MerkmalKombinationsCounter <= count($MerkmalKombibationsArray); $MerkmalKombinationsCounter++) {

		// Wechsel der CSS-Klasse f�r das Zebrastreifenmuster
		if($RowClass == "tdBackground2") {
			$RowClass = "";
		} else {
			$RowClass = "tdBackground2";
		}

		$HTMLString  .= "<tr>\n";
		$HTMLString  .= "\t<td class=\"" . $RowClass . "\">" . $MerkmalKombinationsCounter . "</td>\n";
	
		// alle Merkmale der Kombination anzeigen
		for ($VariantenCounter = 1; $VariantenCounter <= $MaxSteps; $VariantenCounter++) {
			$HTMLString  .= "\t<td class=\"" . $RowClass . "\">" . $VariantenArray[$MerkmalKombibationsArray[$MerkmalKombinationsCounter][$VariantenCounter]]["name"] . "</td>\n";
		}
		
		// �berpr�fen, ob die Checkbox gechecked ist
		if ($MerkmalKombibationsSelectionArray[$MerkmalKombibationsArray[$MerkmalKombinationsCounter]["ID"]]["selected"]) {
			$CheckedString = " checked";			
		} else {
			$CheckedString = "";			
		}
		
		// dei Checkbox anzeigen
		$HTMLString  .= "\t<td class=\"" . $RowClass . "\"><input type=\"checkbox\" name=\"merkmalzuordnung[]\" value=\"" . $MerkmalKombibationsArray[$MerkmalKombinationsCounter]["ID"] . "\"" . $CheckedString . "></td>\n";
		$HTMLString  .= "</tr>\n";
	
	}

	$HTMLString  .= "</tr>\n";
	$HTMLString  .= "</table>\n";

	return $HTMLString;
	
}


function XGetMySQLErrorString($ErrorNr, $Error) {

	$MySQLErrorString = "Fehlernummer: <b>" . $ErrorNr . "</b><br>";
	$MySQLErrorString .= "Fehlertext: <b>" . $Error . "</b><br>";
	
	return $MySQLErrorString;
	
}

function XGetArtikelDataArray($ArtikelID) {

	// SQL String zum auslesen der Artikeldaten zusammenstellen
	$SQLString = "SELECT * FROM " . TABLE_ARTIKEL . " WHERE " . TABLE_ARTIKEL . ".id = '" . $ArtikelID . "'";
	$ResultDataArray = mysql_fetch_array(errorlogged_mysql_query($SQLString), MYSQL_ASSOC);
	
	return $ResultDataArray;
	
}

function GetAdvancedVariantenArray($VariantenArray) {
	
	$VariantenCounter = 0;

	// alle Varianten durchgegen
	foreach ($VariantenArray as $VariantenID) {
	
		// und die entsprechenden Merkmale auslesen und in ein Array legen
		$SQLString = "SELECT * FROM " . TABLE_SCHEMA . " WHERE parent = " . $VariantenID . " ORDER BY name ASC";
		$QuerryReferenz = errorlogged_mysql_query($SQLString);

		$VariantenMerkmalArray[$VariantenCounter][0] = $VariantenID;

		$MerkmalCounter = 1;

		while ($QuerryResult = mysql_fetch_array($QuerryReferenz, MYSQL_ASSOC)) {
			$VariantenMerkmalArray[$VariantenCounter][$MerkmalCounter] = $QuerryResult["id"];
			$MerkmalCounter++;
		}

		$VariantenCounter++;

	}
	
	return $VariantenMerkmalArray;

}

function GetVariantenArray($ArtikelVariantenArray) {

	for ($CounterVarianten = 0; $CounterVarianten <= count($ArtikelVariantenArray) - 1; $CounterVarianten++) {

		$SQLInString .= $ArtikelVariantenArray[$CounterVarianten] . ", ";
		
	}
	
	$SQLInString = substr($SQLInString, 0, strlen($SQLInString) - 2);
	
	// SQL-String zum auslesen der Varinaten und Merkmale, die f�r den Artikel relevant sind
	$SQLString = "SELECT * FROM " . TABLE_SCHEMA . " WHERE " . TABLE_SCHEMA . ".id IN(" . $SQLInString . ") OR " . TABLE_SCHEMA . ".parent IN(" . $SQLInString . ")";
	$QuerryReferenz = errorlogged_mysql_query($SQLString);
	
	// Alle Daten in ein Array legen	
	while ($QuerryResult = mysql_fetch_array($QuerryReferenz, MYSQL_ASSOC)) {
		$ResultDataArray[$QuerryResult["id"]]["id"] = $QuerryResult["id"];
		$ResultDataArray[$QuerryResult["id"]]["root"] = $QuerryResult["root"];
		$ResultDataArray[$QuerryResult["id"]]["parent"] = $QuerryResult["parent"];
		$ResultDataArray[$QuerryResult["id"]]["name"] = $QuerryResult["name"];
		$ResultDataArray[$QuerryResult["id"]]["schema_preis"] = $QuerryResult["schema_preis"];
	}

	return $ResultDataArray;
	
}

function GetArtikelVariantenArray($ArtikelDataArray) {

	for ($CounterVarianten = 0; $CounterVarianten <= 3; $CounterVarianten++) {

		if ($CounterVarianten == 0) {
			$VariantenBezeichnung = "schema";
		} else {
			$VariantenBezeichnung = "schema" . $CounterVarianten;
		}

		if ($ArtikelDataArray[$VariantenBezeichnung]) {
		
			$ArtikelVariantenArray[] = $ArtikelDataArray[$VariantenBezeichnung];
			
		}
		
	}
	
	return $ArtikelVariantenArray;
	
}

function GetMaxSteps($ArtikelDataArray) {

	$MaxSteps = 0;

	for ($CounterVarianten = 0; $CounterVarianten <= 3; $CounterVarianten++) {

		if ($CounterVarianten == 0) {
			$VariantenBezeichnung = "schema";
		} else {
			$VariantenBezeichnung = "schema" . $CounterVarianten;
		}

		if ($ArtikelDataArray[$VariantenBezeichnung]) {
		
			$MaxSteps++;
			
		}
		
	}
	
	return $MaxSteps;
	
}

function GetMerkmalKombinationen($ArtikelDataArray) {

	// SQL-String zur ermittlung aller Root-Elemente
	$SQLString = "SELECT * FROM  " . TABLE_MERKMALKOMBINATIONEN . " WHERE ArtikelID = '" . $ArtikelDataArray["id"] . "' AND Root = '1'";
	$QuerryReferenz = errorlogged_mysql_query($SQLString);
	
	$Counter = 1;
	
	$MaxSteps = GetMaxSteps($ArtikelDataArray);

	while ($QuerryResult = mysql_fetch_array($QuerryReferenz, MYSQL_ASSOC)) {

		$MerkmalKombibationsArray[$Counter]["ID"] = $QuerryResult["ID"];
		$MerkmalKombibationsArray[$Counter]["1"] = $QuerryResult["MerkmalID_1"];
		$MerkmalKombibationsArray[$Counter]["2"] = $QuerryResult["MerkmalID_2"];

		if ($MaxSteps > 2) {
		
			$Step = 2;
		
			$RekursivMerkmalKombibationsArray = GetRekursivMerkmalKombination($ArtikelDataArray["id"], $MaxSteps, $Step, $QuerryResult["ID"], $RekursivMerkmalKombibationsArray);
			
			for ($RekursivMerkmalCounter = 0; $RekursivMerkmalCounter <= count($RekursivMerkmalKombibationsArray) - 1; $RekursivMerkmalCounter++) {
		
				$MerkmalKombibationsArray[$Counter][$Step + 1 + $RekursivMerkmalCounter] = $RekursivMerkmalKombibationsArray[$Step + 1 + $RekursivMerkmalCounter];
			
			}
			
		}
		
		$Counter++;
		
	}
	
	return $MerkmalKombibationsArray;

}

function GetRekursivMerkmalKombination($ArtikelID, $MaxSteps, $Step, $FortsetzungsID, $RekursivMerkmalKombibationsArray) {

	$Step++;

	// SQL-String zur ermittlung aller Root-Elemente
	$SQLString = "SELECT * FROM  " . TABLE_MERKMALKOMBINATIONEN . " WHERE ArtikelID = '" . $ArtikelID . "' AND Fortsetzung = '" . $FortsetzungsID . "'";
	$QuerryReferenz = errorlogged_mysql_query($SQLString);
	
	while ($QuerryResult = mysql_fetch_array($QuerryReferenz, MYSQL_ASSOC)) {

		$RekursivMerkmalKombibationsArray[$Step] = $QuerryResult["MerkmalID_2"];

		if ($Step < $MaxSteps) {
		
			$RekursivMerkmalKombibationsArray = GetRekursivMerkmalKombination($ArtikelID, $MaxSteps, $Step, $QuerryResult["ID"], $RekursivMerkmalKombibationsArray);
			
		}
		
	}
	
	return $RekursivMerkmalKombibationsArray;
	
}

function SaveMerkmalZuordnungEinfach($ArtikelID, $MerkmalZuordungsArray) {

	// Alle Merkmale aus dem POST-Array f�r die SQL IN Anweisung zusammensetzen
	for ($Counter = 0; $Counter <= count($MerkmalZuordungsArray) - 1; $Counter++) {
		$SQLInString .= $MerkmalZuordungsArray[$Counter] . ", ";
	}
	
	$SQLInString = substr($SQLInString, 0, strlen($SQLInString) - 2);

	// Alle ausgew�hlten Merkmale in der shop_merkmaleinfach Tabelle auf 1 setzen
	$SQLString = "UPDATE " . TABLE_MERKMALEINFACH . " SET selected = 1 WHERE ArtikelID = '" . $ArtikelID . "' AND MerkmalID IN (" . $SQLInString . ")";
	$QuerryReferenz = errorlogged_mysql_query($SQLString);

	// Alle anderen Merkmale in der shop_merkmaleinfach Tabelle auf 0 setzen
	$SQLString = "UPDATE " . TABLE_MERKMALEINFACH . " SET selected = 0 WHERE ArtikelID = '" . $ArtikelID . "' AND MerkmalID NOT IN (" . $SQLInString . ")";
	$QuerryReferenz = errorlogged_mysql_query($SQLString);

	// merkmalzuordnungs-Flag in der shop_artikel Tabelle setzen
	$SQLString = "UPDATE " . TABLE_ARTIKEL . " SET merkmalzuordnung = 1 WHERE id = '" . $ArtikelID . "'";
	$QuerryReferenz = errorlogged_mysql_query($SQLString);

	// Alle Kombinationsauswahl Eintr�ge aus der shop_merkmalauswahl l�schen
	$SQLString = "DELETE FROM " . TABLE_MERKMALAUSWAHL . " WHERE artikelid = '" . $ArtikelID . "'";
	$QuerryReferenz = errorlogged_mysql_query($SQLString);

}


function XSetMerkmalKombinationen($ArtikelID, $VariantenArray) {
	
	// Wenn Varianten angegeben sind
	if ($VariantenArray) {

		$VariantenCounter = 1;

		// alle Varianten durchgegen
		foreach ($VariantenArray as $VariantenID) {
		
			// und die entsprechenden Merkmale auslesen und in ein Array legen
			$SQLString = "SELECT * FROM " . TABLE_SCHEMA . " WHERE parent = " . $VariantenID . " ORDER BY name DESC";
			$QuerryReferenz = errorlogged_mysql_query($SQLString);
			
			$VariantenMerkmalArray[$VariantenCounter][0] = $VariantenID;

			$MerkmalCounter = 1;

			while ($QuerryResult = mysql_fetch_array($QuerryReferenz, MYSQL_ASSOC)) {
				$VariantenMerkmalArray[$VariantenCounter][$MerkmalCounter] = $QuerryResult["id"];
				$MerkmalCounter++;
			}

			$VariantenCounter++;

		}
		
		
		// die maximale ID aus der Kombinationstabelle ermitteln und in ein Array ablegen
		$MaxID = GetMaxMerkmalKombinationenID();
		$SQLStringArray[0] = $MaxID + 1;
		
		// wenn nur eine Variante vorhanden ist, diese speziell behandeln
		if (($VariantenCounter - 1) == 1) {
			
			$SQLStringArray = GetSimpleMerkmal($ArtikelID, $VariantenMerkmalArray, $SQLStringArray);
			
		} else {
		
			// die rekursive Funktion aufrufen, in der alle Kombinationen ermittelt werden
			// und die einzelnen SQL Seqmente in ein Arra gelegt werden
			$SQLStringArray = GetRekursivMerkmal($VariantenMerkmalArray, 1, -1, -1, $SaveIDArray, 0, $ArtikelID, $SQLStringArray);
			
		}
		
		// den SQL String zusammen bauen
		$SQLString = "INSERT INTO " . TABLE_MERKMALKOMBINATIONEN . " (ID, Root, ArtikelID, VariantenID_1, MerkmalID_1, VariantenID_2, MerkmalID_2, Fortsetzung) VALUES ";
		
		for ($Counter = 1; $Counter <= count($SQLStringArray); $Counter++) {
			$SQLString .= $SQLStringArray[$Counter];
		}
		
		$SQLString = substr($SQLString, 0, strlen($SQLString) - 2);
		
		//echo "SQLString: " . $SQLString . "<br>";
		
		// und ausf�hren
		$QuerryReferenz = errorlogged_mysql_query($SQLString);
		
	}
	
}

function GetRekursivMerkmal($VariantenMerkmalArray, $Step, $OldVariantID, $OldMerkmalID, $SaveIDArray, $SaveIDArrayCounter, $ArtikelID, $SQLStringArray) {

	// Alle Merkmale durchgehen
	for ($MerkmalCounter = 1; $MerkmalCounter <= count($VariantenMerkmalArray[$Step]) - 1; $MerkmalCounter++) {

		// wenn es kein Root-Element ist, die Wert f�r das SQL-Seqment sichern
		if ($OldVariantID != -1) {
			
			$SaveIDArray[$SaveIDArrayCounter]["VariantID_1"] = $OldVariantID;
			$SaveIDArray[$SaveIDArrayCounter]["MerkmalID_1"] = $OldMerkmalID;
			$SaveIDArray[$SaveIDArrayCounter]["VariantID_2"] = $VariantenMerkmalArray[$Step][0];
			$SaveIDArray[$SaveIDArrayCounter]["MerkmalID_2"] = $VariantenMerkmalArray[$Step][$MerkmalCounter];
			
			$SaveIDArrayCounter++;
			
		}

		//echo str_repeat ("*", $Step) . $VariantenMerkmalArray[$Step][0] . "/" . $VariantenMerkmalArray[$Step][$MerkmalCounter] . "<br>"; 

		// wenn das Ende in der Hierachie noch nicht erreicht ist, die Funktion nochmal aufrufen	
		if ($Step < count($VariantenMerkmalArray)) {

			$SQLStringArray = GetRekursivMerkmal($VariantenMerkmalArray, $Step + 1, $VariantenMerkmalArray[$Step][0], $VariantenMerkmalArray[$Step][$MerkmalCounter], $SaveIDArray, $SaveIDArrayCounter, $ArtikelID, $SQLStringArray);
			
			if ($Step > 1) {
			
				$SaveIDArrayCounter--;
				
			}

		// wenn das Ende erreicht ist, das SQL-Seqment zusammen setzen
		} else {

			for ($Counter = 0; $Counter <= $SaveIDArrayCounter - 1; $Counter++) {
				
				if ($Counter == 0) {
					$RootFlag = 1;
				} else {
					$RootFlag = 0;
				}
				
				if ($Counter == $SaveIDArrayCounter) {
					$FortsetzungFlag = 0;
				} else {
					$FortsetzungFlag = $OldTableID;
				}
								
				$SQLStringArray[] = "('" . $SQLStringArray[0] . "', '" . $RootFlag . "', '" . $ArtikelID . "', '" . $SaveIDArray[$Counter]["VariantID_1"] . "', '" . $SaveIDArray[$Counter]["MerkmalID_1"] . "', '" . $SaveIDArray[$Counter]["VariantID_2"] . "', '" . $SaveIDArray[$Counter]["MerkmalID_2"] . "', '" . $FortsetzungFlag . "'), ";
				//echo $SQLStringArray[count($SQLStringArray) - 1] . "<br>";
				
				$OldTableID = $SQLStringArray[0];
				$SQLStringArray[0]++;

			}
			
			unset($OldTableID);
			
			$SaveIDArrayCounter--;

		}

	}
	
	return $SQLStringArray;

}

function XDeleteMerkmalKombinationen($ArtikelID) {
	
	// alle Elemente eines Artikels aus der Kombinationstabelle entfernen
	$SQLString = "DELETE FROM " . TABLE_MERKMALKOMBINATIONEN . " WHERE ArtikelID = '" . $ArtikelID . "'";
	$QuerryReferenz = errorlogged_mysql_query($SQLString);

}

function GetMaxMerkmalKombinationenID() {
	
	// die maximale ID aus der Kombinationstabelle ermitteln
	$SQLString = "SELECT MAX(id) as maxid FROM " . TABLE_MERKMALKOMBINATIONEN . "";
	$ResultObject = mysql_fetch_object(errorlogged_mysql_query($SQLString));

	if ($ResultObject->maxid) {
		return $ResultObject->maxid;
	} else {
		return 1;	
	}
	
}

function XGetMerkmalKombinationsHTMLStringPreis($ArtikelID) {
	
	// wenn ben�tigt, Defaultwerte setzen
	SetDefaultWertePreis($ArtikelID);

	// Artikeldaten einlesen
	$ArtikelDataArray = GetArtikelDataArray($ArtikelID);

	// alle Varianten des Artikels einlesen
	$ArtikelVariantenArray = GetArtikelVariantenArray($ArtikelDataArray);
	
	// alle Varianten und Merkmale, die dem Artikel zugeordnet werden k�nnen, in ein einfaches Array einlesen
	$VariantenArray = GetVariantenArray($ArtikelVariantenArray);

	// alle Kombinationen einlesen
	$MerkmalKombibationsArray = GetMerkmalKombinationen($ArtikelDataArray);
	
	// die Preise der Kombinationen einlesen
	$MerkmalKombinationsPreisArray = GetMerkmalKombinationsPreis($ArtikelID);

	// die Maximal Tiefe der einlesen
	$MaxSteps = GetMaxSteps($ArtikelDataArray);

	// den String f�r die HTML-Ausgabe erstellen
	$HTMLString  .= "<table cellpadding=\"2\" cellspacing=\"2\" border=\"0\">\n";
	$HTMLString  .= "<tr>\n";

	$HTMLString  .= "\t<td class=\"tdBackground1\">&nbsp;</td>\n";
	$HTMLString  .= "\t<td class=\"tdBackground1\">Default</td>\n";

	for ($VariantenCounter = 0; $VariantenCounter <= count($ArtikelVariantenArray) - 1; $VariantenCounter++) {
		$HTMLString  .= "\t<td class=\"tdBackground1\">" . $VariantenArray[$ArtikelVariantenArray[$VariantenCounter]]["name"] . "</td>\n";
	}

    $HTMLString  .= "\t<td class=\"tdBackground1\">Artikelnummer</td>\n";

	$HTMLString  .= "\t<td class=\"tdBackground1\">Preis</td>\n";

	// Schleife f�r die Merkmale
	for ($MerkmalKombinationsCounter = 1; $MerkmalKombinationsCounter <= count($MerkmalKombibationsArray); $MerkmalKombinationsCounter++) {

		// Wechsel der CSS-Klasse f�r das Zebrastreifenmuster
		if($RowClass == "tdBackground2") {
			$RowClass = "";
		} else {
			$RowClass = "tdBackground2";
		}

		$HTMLString  .= "<tr>\n";
		$HTMLString  .= "\t<td class=\"" . $RowClass . "\">" . $MerkmalKombinationsCounter . "</td>\n";

		// �berpr�fen, ob der Radiobutton ausgew�hlt ist
		if ($MerkmalKombinationsPreisArray[$MerkmalKombibationsArray[$MerkmalKombinationsCounter]["ID"]]["defaultselected"]) {
			$CheckedString = " checked";			
		} else {
			$CheckedString = "";			
		}
		
		// die Radiobuttons anzeigen
		$HTMLString  .= "\t<td align=\"center\" class=\"" . $RowClass . "\"><input type=\"radio\" name=\"merkmaldefaultselected\" value=\"" . $MerkmalKombibationsArray[$MerkmalKombinationsCounter]["ID"] . "\"" . $CheckedString . "></td>\n";

		// alle Merkmale der Kombination anzeigen
		for ($VariantenCounter = 1; $VariantenCounter <= $MaxSteps; $VariantenCounter++) {
			$HTMLString  .= "\t<td class=\"" . $RowClass . "\">" . $VariantenArray[$MerkmalKombibationsArray[$MerkmalKombinationsCounter][$VariantenCounter]]["name"] . "</td>\n";
		}
		
        // die Artikelnummer der Kombination anzeigen
        $HTMLString  .= "\t<td class=\"" . $RowClass . "\">\n";
        $HTMLString  .= "<input type=\"text\" name=\"merkmalartikelnr_" . $MerkmalKombibationsArray[$MerkmalKombinationsCounter]["ID"] . "\" value=\"" . $MerkmalKombinationsPreisArray[$MerkmalKombibationsArray[$MerkmalKombinationsCounter]["ID"]]["artikel_nr"] . "\" size=\"10\">\n";
        $HTMLString  .= "</td>\n";

		// den Preis der Kombination anzeigen
		$HTMLString  .= "\t<td class=\"" . $RowClass . "\">\n";
		$HTMLString  .= "<input type=\"text\" name=\"merkmalpreis_" . $MerkmalKombibationsArray[$MerkmalKombinationsCounter]["ID"] . "\" value=\"" . $MerkmalKombinationsPreisArray[$MerkmalKombibationsArray[$MerkmalKombinationsCounter]["ID"]]["preis"] . "\" size=\"10\"> <span class=\"klein\">($a_format 0.00)</span>\n";
		
		$HTMLString  .= "</td>\n";

		$HTMLString  .= "</tr>\n";
	
	}

	$HTMLString  .= "</tr>\n";
	$HTMLString  .= "</table>\n";

	return $HTMLString;

	
}

function SetDefaultWertePreis($ArtikelID) {

	// �berpr�fen, ob Werte in der shop_merkmalauswahl Tabelle sind
	$SQLString = "SELECT * FROM " . TABLE_MERKMALPREIS . " WHERE artikelid = '" . $ArtikelID . "'";
	$QuerryReferenz = errorlogged_mysql_query($SQLString);

	// Wenn keine Werte vorhanden sind, Werte einf�gen und alle aktivieren
	if (!mysql_fetch_array($QuerryReferenz, MYSQL_ASSOC)) {

		// Artikeldaten einlesen
		$ArtikelDataArray = GetArtikelDataArray($ArtikelID);

		// alle Kombinationen einlesen
		$MerkmalKombinationsArray = GetMerkmalKombinationen($ArtikelDataArray);

		// SQL-String um allen Kombinationen den Artikelpreis zuzuordnen
		$SQLString = "INSERT INTO " . TABLE_MERKMALPREIS . " (id, artikelid, preis, artikel_nr, defaultselected) VALUES ";

		$DefaultCounter = 1;

		foreach ($MerkmalKombinationsArray as $MerkmalKombination) {

			if ($DefaultCounter == 1) {
				$SQLString .= "(" . $MerkmalKombination["ID"] . ", " . $ArtikelID . ", '" . $ArtikelDataArray["preis"] . "', '" . $ArtikelDataArray["artikel_nr"] . "', 1), ";
			} else {
				$SQLString .= "(" . $MerkmalKombination["ID"] . ", " . $ArtikelID . ", '" . $ArtikelDataArray["preis"] . "', '" . $ArtikelDataArray["artikel_nr"] . "', 0), ";
			}

			$DefaultCounter++;

		}

		$SQLString = substr($SQLString, 0, strlen($SQLString) - 2);

		$QuerryReferenz = errorlogged_mysql_query($SQLString);

	}


}

function XGetMerkmalKombinationsPreis($ArtikelID) {

	// SQL-String zum auslesen aller relevanten Kombinationsauswahl Zeilen erstellen
	$SQLString = "SELECT * FROM " . TABLE_MERKMALPREIS . " WHERE artikelid = '" . $ArtikelID . "'";
	$QuerryReferenz = errorlogged_mysql_query($SQLString);

	// Alle Daten in ein Array legen	
	while ($QuerryResult = mysql_fetch_array($QuerryReferenz, MYSQL_ASSOC)) {
		$ResultDataArray[$QuerryResult["id"]]["id"] = $QuerryResult["id"];
		$ResultDataArray[$QuerryResult["id"]]["artikelid"] = $QuerryResult["artikelid"];
		$ResultDataArray[$QuerryResult["id"]]["preis"] = $QuerryResult["preis"];
        $ResultDataArray[$QuerryResult["id"]]["artikel_nr"] = $QuerryResult["artikel_nr"];
		$ResultDataArray[$QuerryResult["id"]]["defaultselected"] = $QuerryResult["defaultselected"];
	}

	return $ResultDataArray;
	
}
