Index: ds/wpsg_mod_varianten.class.php
===================================================================
--- /mods/wpsg_mod_varianten.class.php	(revision 5986)
+++ 	(revision )
@@ -1,1784 +1,0 @@
-<?php
-
-	/**
-	 * Dieses Modul erlaubt verschiedene Produktvariationen
-	 */
-	class wpsg_mod_varianten extends wpsg_mod_basic
-	{
-		
-		var $cache_variData;
-		
-		var $lizenz = 1;
-		var $id = 98;
-		var $hilfeURL = 'http://wpshopgermany.de/?p=1057';
-						
-		/**
-		 * Costructor
-		 */
-		public function __construct()
-		{
-			
-			parent::__construct();
-			
-			$this->name = __('Varianten', 'wpsg');
-			$this->group = __('Produkte', 'wpsg');
-			$this->desc = __('ErmÃ¶glicht verschiedene Produktvariationen.', 'wpsg');
-
-			$this->cache_variData = array();
-			
-		} // public function __construct()
-		
-		public function install()
-		{
-			
-			require_once(WPSG_PATH_WP.'/wp-admin/includes/upgrade.php');
-
-			/**
-			 * Produkttabelle erweitern
-			 */
-			$sql = "CREATE TABLE ".WPSG_TBL_PRODUCTS." (
-			  	mod_varianten mediumtext NOT NULL
-			) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;";
-			
-			dbDelta($sql);
-			
-			$this->shop->checkDefault('wpsg_vp_imageselect_width', 25);
-			$this->shop->checkDefault('wpsg_vp_imageselect_height', 25);
-			$this->shop->checkDefault('wpsg_vp_imageselect_mode', 'cz');
-			
-		} // public function install()
-		
-		public function template_redirect()
-		{
-			
-			if (wpsg_isSizedString($_REQUEST['action'], 'wpsg_varianten_switch'))
-			{
-				
-				if (wpsg_isSizedInt($_REQUEST['wpsg_post_id']))
-				{
-					
-					global $post;
-					$post = get_post($_REQUEST['wpsg_post_id']);
-										
-				}
-				
-				$product_key = $_REQUEST['product_key'];
-				$product_id = $this->shop->getProduktId($product_key);
-				
-				$product_data = $this->shop->loadProduktArray($product_id, array(
-					'id' => $product_key, 
-					'menge' => $_REQUEST['quantity'],
-					'referer' => $_REQUEST['referer']
-				));				
-				 
-				// Damit das Div die gleiche Index Id bekommt
-				$GLOBALS['wpsg_produkt_index'] = $_REQUEST['product_index'] - 1;
-				
-				$this->shop->noReleatedProducts = true;
-								
-				if (wpsg_isSizedString($_REQUEST['template'])) $template = $_REQUEST['template'];
-				else $template = false;
-				
-				die($this->shop->renderProdukt($product_data, $template));
-								
-			}
-			
-		} // public function template_redirect()
-		
-		public function loadProduktArray(&$produkt_data) 
-		{
-	 
-			if (!$this->isVariantsProductKey($produkt_data['id'])) return;
-			 
-			$arVari = $this->loadVarianten($this->shop->getProduktId($produkt_data['id']));
-			$product_id = $this->shop->getProduktId($produkt_data['id']);
-			
-			$produkt_data['preis_original'] = $produkt_data['preis'];
-			
-			$mwst_value = $this->shop->getCalcTaxValue($produkt_data['mwst_key']); 
-			 
-			/* Gesamtpreis */
-			if ($this->shop->get_option('wpsg_preisangaben') == WPSG_NETTO) $preis = $produkt_data['preis_defaultLand_netto'];
-			else $preis = $produkt_data['preis_defaultLand_brutto']; 
-				
-			$arVarSelected = $this->getSetVariArray($produkt_data['id']);
-			$arVarDatabase = $this->loadVarianten($this->shop->getProduktId($produkt_data['id']), true);
-					
-			foreach ($arVarSelected as $var => $vari)
-			{
-					
-				
-				if ($arVarDatabase[$var]['typ'] == 'checkbox' && $vari == '1')
-				{
-		
-					// Aktivierte Checkbox
-					$preis += wpsg_tf($arVarDatabase[$var]['preis']);
-								
-				}
-				else
-				{
-		 
-					// Select, Radio
-					$preis += wpsg_tf($arVarDatabase[$var]['vari'][$vari]['preis']);
-		
-				}
-					
-			}
-			
-			// Preis umrechnen fÃŒr Standardland
-			if ($this->shop->get_option('wpsg_preisangaben') == WPSG_NETTO)
-			{
-				
-				// Preisangaben im Backend in Netto -> Brutto berechnen
-				$produkt_data['preis_brutto'] = wpsg_calculatePreis($preis, WPSG_BRUTTO, $mwst_value);
-				$produkt_data['preis_netto'] = $preis;
-				
-			}
-			else
-			{
-				
-				// Preis im Backend ist in Brutto
-				$produkt_data['preis_brutto'] = $preis;
-				$produkt_data['preis_netto'] = wpsg_calculatePreis($preis, WPSG_NETTO, $mwst_value);
-				
-			}
-
-			$produkt_data['preis_defaultLand_brutto'] = $produkt_data['preis_brutto'];
-			$produkt_data['preis_defaultLand_netto'] = $produkt_data['preis_netto'];
-			
-			// Jetzt habe ich Netto/Brutto Werte im Standardland
-			// Wenn es jetzt ein Leistungsort Produkt ist, dann muss ich die Steuer des Ziellandes bestimmen
-			if (wpsg_isSizedInt($produkt_data['euleistungsortregel']) && $this->shop->getDefaultCountry(true) != $this->shop->getFrontendCountry(true))
-			{
-			
-				$oFrontendCountry = $this->shop->getFrontendCountry();
-			
-				$produkt_data['mwst_value'] = $oFrontendCountry->getTax($produkt_data['mwst_key']);
-				$produkt_data['preis_brutto'] = wpsg_calculatePreis($produkt_data['preis_netto'], WPSG_BRUTTO, $produkt_data['mwst_value']);
-			
-			}
-			 
-			if ($this->shop->getFrontendTaxview() == WPSG_BRUTTO) $produkt_data['preis'] = $produkt_data['preis_brutto'];
-			else $produkt_data['preis'] = $produkt_data['preis_netto'];
-						
-			// Mindest- und Maximalpreis hinzufÃŒgen			
-			$bMinPrice = wpsg_tf($produkt_data['preis_original']);
-			$bMaxPrice = wpsg_tf($produkt_data['preis_original']);
-			 
-			if ($this->shop->hasMod('wpsg_mod_weight'))
-			{
-				
-				$bMinWeight = wpsg_tf($produkt_data['weight']);
-				$bMaxWeight = wpsg_tf($produkt_data['weight']);
-				
-			}
-			
-			foreach ($arVari as $k => $v)
-			{
-
-				if ($v['aktiv'] == '1')
-				{
-				 
-					if ($v['typ'] == 'checkbox')
-					{
-						
-						// Hier muss ich beim Min Preis nix tun, wenn nicht angehakt dann wird nix addiert
-						$bMaxPrice += wpsg_tf($v['preis']);
-						
-						if ($this->shop->hasMod('wpsg_mod_weight'))
-						{
-							
-							!isset ($v['weight']) or $bMaxWeight += wpsg_tf($v['weight']);
-							
-						}
-						
-						// Preis der Variante an die Ausgabe im Frontend anpassen
-						// if ($this->shop->getFrontendTaxview() == WPSG_NETTO && $this->shop->getBackendTaxview() == WPSG_BRUTTO) $arVari[$k]['preis'] = wpsg_calculatePreis($v['preis'], WPSG_NETTO, $mwst_value);
-						
-					}
-					else
-					{	
-							
-						$bMinPriceVari = false;
-						$bMaxPriceVari = false;
-						
-						if ($this->shop->hasMod('wpsg_mod_weight'))
-						{
-							
-							$bMinWeightVari = false;
-							$bMaxWeightVari = false;
-							
-						}
-						
-						foreach ($v['vari'] as $k2 => $v2)
-						{
-							
-							if ($v2['aktiv'] == '1')
-							{
-								
-								if ($bMinPriceVari === false || wpsg_tf($v2['preis']) < $bMinPriceVari) $bMinPriceVari = wpsg_tf($v2['preis']);
-								if ($bMaxPriceVari === false || wpsg_tf($v2['preis']) > $bMaxPriceVari) $bMaxPriceVari = wpsg_tf($v2['preis']);
-								
-								if ($this->shop->hasMod('wpsg_mod_weight'))
-								{
-									
-									if ($bMinWeightVari === false || !isset ($v['weight']) or wpsg_tf($v2['weight']) < $bMinWeightVari) $bMinWeightVari = !isset ($v['weight']) or wpsg_tf($v2['weight']);
-									if ($bMaxWeightVari === false || !isset ($v['weight']) or wpsg_tf($v2['weight']) > $bMaxWeightVari) $bMaxWeightVari = !isset ($v['weight']) or wpsg_tf($v2['weight']);
-									
-								}
-								
-							}
-							
-							// Preis der Variante an die Ausgabe im Frontend anpassen
-							// if ($this->shop->getFrontendTaxview() == WPSG_NETTO && $this->shop->getBackendTaxview() == WPSG_BRUTTO) $arVari[$k]['vari'][$k2]['preis'] = wpsg_calculatePreis($v2['preis'], WPSG_NETTO, $mwst_value);
-														
-						}
-
-						if ($bMinPriceVari !== false) $bMinPrice += $bMinPriceVari;
-						if ($bMaxPriceVari !== false) $bMaxPrice += $bMaxPriceVari;
-						
-						if ($this->shop->hasMod('wpsg_mod_weight'))
-						{
-							
-							if ($bMinWeightVari !== false) $bMinWeight += $bMinWeightVari;
-							if ($bMaxWeightVari !== false) $bMaxWeight += $bMaxWeightVari;
-							
-						}						
-						
-					}
-					
-				}
-				
-			}
-			 
-			$produkt_data['min_preis'] = wpsg_tf($bMinPrice);
-			$produkt_data['max_preis'] = wpsg_tf($bMaxPrice);
-			
-			if ($this->shop->hasMod('wpsg_mod_weight'))
-			{
-				
-				$produkt_data['min_weight'] = wpsg_tf($bMinWeight);
-				$produkt_data['max_weight'] = wpsg_tf($bMaxWeight);
-				
-			}
-			
-			/* Eventuell Variantenbild */
-			if ($this->shop->hasMod('wpsg_mod_produktbilder'))
-			{
-				
-				$arImages = $this->getKombiVariImages($produkt_data['id']);
-				
-				if (wpsg_isSizedArray($arImages))
-				{
-					
-					$image = $arImages[array_rand($arImages)];
-					
-					$produkt_data['varianten_image'] = $image;
-					
-				}
-				
-			}
-			
-		} // public function loadProduktArray(&$produkt_data) 
-		
-		public function produkt_ajax()
-		{
-			
-			//error_reporting(E_ALL);
-			
-			if (isset($_REQUEST['cmd']) && $_REQUEST['cmd'] == 'wpsg_vp_add')
-			{
-				 
-				$vp_data = $this->loadVarianten($_REQUEST['edit_id']);
-				
-				$data = array(
-					"name" => $_REQUEST['name'],
-					"typ" => $_REQUEST['typ'],
-					"aktiv" => "1"
-				);
-				
-				if ($_REQUEST['typ'] == "checkbox")
-				{
-					$data['preis'] = "0";
-				}
-				else
-				{
-					$data['vari'] = array();
-				}
-				
-				$vp_data[] = $data;
-				
-				$this->saveVarianten($_REQUEST['edit_id'], $vp_data);
-				
-				$this->shop->view['message'] = array(0, __("Variante erfolgreich angelegt.", "wpsg"));
-				
-				die($this->drawVarianten($_REQUEST['edit_id']));
-				
-			}
-			else if ($_REQUEST['cmd'] == 'wpsg_var_reorder')
-			{
-				
-				parse_str($_REQUEST['wpsg_reorder'], $wpsg_reorder);
-				
-				$vp_data = $this->loadVarianten($_REQUEST['edit_id']);
-				$vp_data_neu = array();
-				 				
-				foreach ($wpsg_reorder['variante'] as $order)
-				{
-					
-					if (array_key_exists($order, $vp_data))
-					{
-						
-						$vp_data_neu[] = $vp_data[$order];
-						unset($vp_data[$order]);
-						
-					}
-					else
-					{
-						
-						$this->shop->throwErrorCode('98_1');
-						
-					}
-					
-				}
-				
-				if (wpsg_isSizedArray($vp_data))
-				{
-						
-					$this->shop->throwErrorCode('98_2');
-						
-				}
-				
-				$this->saveVarianten($_REQUEST['edit_id'], $vp_data_neu);
-												
-				$this->shop->view['message'] = array(0, __('Variantenreihenfolge gespeichert.', 'wpsg'));
-				
-				die($this->drawVarianten($_REQUEST['edit_id']));
-				
-			}
-			else if ($_REQUEST['cmd'] == 'wpsg_vari_reorder')
-			{
-				
-				parse_str($_REQUEST['wpsg_reorder'], $wpsg_reorder);
-				
-				$vp_data = $this->loadVarianten($_REQUEST['edit_id']);
-				 
-				foreach ($wpsg_reorder as $var_key => $order)
-				{
-					
-					$var_id = preg_replace('/^variorder\_/', '', $var_key);
-					   
-					wpsg_array_reorder($vp_data[$var_id]['vari'], $order);
-					
-					if (wpsg_isSizedArray($vp_data[$var_id]['lang']))
-					{
-						
-						foreach ($vp_data[$var_id]['lang'] as $lang_key => $lang_vari)
-						{
-							
-							wpsg_array_reorder($vp_data[$var_id]['lang'][$lang_key]['vari'], $order);
-							
-						}
-						
-					}
-					
-				}
-
-				$this->saveVarianten($_REQUEST['edit_id'], $vp_data);
-				
-				$this->shop->view['message'] = array(0, __("Variationenreihenfolge gespeichert.", "wpsg"));
-				
-				die($this->drawVarianten($_REQUEST['edit_id']));
-				
-			}
-			else if ($_REQUEST['cmd'] == 'wpsg_vp_refreh')
-			{
-				
-				die($this->drawVarianten($_REQUEST['edit_id']));
-				
-			}
-			else if ($_REQUEST['cmd'] == "wpsg_vp_del")
-			{
-				
-				$vp_data = $this->loadVarianten($_REQUEST['edit_id']);
-				
-				unset($vp_data[$_REQUEST['var_id']]);
-				
-				$this->saveVarianten($_REQUEST['edit_id'], $vp_data);
-				
-				$this->shop->view['message'] = array(0, __("Variante wurde erfolgreich gelÃ¶scht.", "wpsg"));				
-				die($this->drawVarianten($_REQUEST['edit_id']));
-				
-			}
-			else if ($_REQUEST['cmd'] == "wpsg_vp_deaktiv")
-			{
- 	
-				$vp_data = $this->loadVarianten($_REQUEST['edit_id']);
-				
-				if ($_REQUEST['status'] == "1")
-				{
-					
-					$vp_data[$_REQUEST['var_id']]['aktiv'] = 1;
-					$this->shop->view['message'] = array(0, __("Variante wurde erfolgreich aktiviert.", "wpsg"));
-						
-				}
-				else
-				{
-					
-					$vp_data[$_REQUEST['var_id']]['aktiv'] = 0;
-					$this->shop->view['message'] = array(0, __("Variante wurde erfolgreich deaktiviert.", "wpsg"));
-					
-				}
-				
-				$this->saveVarianten($_REQUEST['edit_id'], $vp_data); 				
-				die($this->drawVarianten($_REQUEST['edit_id']));				
-				
-			}
-			else if ($_REQUEST['cmd'] == "wpsg_vp_addVariation")
-			{
-				
-				$vp_data = $this->loadVarianten($_REQUEST['edit_id']);
-				
-				$vp_data[$_REQUEST['var_id']]['vari'][] = array(
-					"name" => $_REQUEST['vari_name'],
-					"preis" => wpsg_tf($_REQUEST['vari_preis']),
-					"aktiv" => "1"
-				);
-				
-				$this->shop->view['message'] = array(0, __("Variation wurde erfolgreich angelegt.", "wpsg"));
-				
-				$this->saveVarianten($_REQUEST['edit_id'], $vp_data);
-				die($this->drawVarianten($_REQUEST['edit_id']));
-				
-			}
-			else if ($_REQUEST['cmd'] == "wpsg_vp_vari_del")
-			{
-				
-				$vp_data = $this->loadVarianten($_REQUEST['edit_id']);
-				
-				unset($vp_data[$_REQUEST['var_id']]['vari'][$_REQUEST['vari_id']]);				
-				
-				if (wpsg_isSizedArray($vp_data[$_REQUEST['var_id']]['lang']))
-				{
-						
-					foreach ($vp_data[$_REQUEST['var_id']]['lang'] as $lang_key => $lang_vari)						
-					{
-						
-						unset($vp_data[$_REQUEST['var_id']]['lang'][$lang_key]['vari'][$_REQUEST['vari_id']]);
-						
-					}
-			
-				}
-				
-				$this->shop->view['message'] = array(0, __("Variation wurde erfolgreich gelÃ¶scht.", "wpsg"));
-				
-				$this->saveVarianten($_REQUEST['edit_id'], $vp_data);
-				die($this->drawVarianten($_REQUEST['edit_id']));
-				
-			}
-			else if ($_REQUEST['cmd'] == "wpsg_vp_vari_deaktiv")
-			{
-				
-				$vp_data = $this->loadVarianten($_REQUEST['edit_id']);
-				
-				if ($_REQUEST['status'] == "1")
-				{
-					
-					$vp_data[$_REQUEST['var_id']]['vari'][$_REQUEST['vari_id']]['aktiv'] = 1;
-					$this->shop->view['message'] = array(0, __("Variation wurde erfolgreich aktiviert.", "wpsg"));
-						
-				}
-				else
-				{
-					
-					$vp_data[$_REQUEST['var_id']]['vari'][$_REQUEST['vari_id']]['aktiv'] = 0;
-					$this->shop->view['message'] = array(0, __("Variation wurde erfolgreich deaktiviert.", "wpsg"));
-					
-				}
-				
-				$this->saveVarianten($_REQUEST['edit_id'], $vp_data);
-				die($this->drawVarianten($_REQUEST['edit_id']));
-				
-			}
-			else if ($_REQUEST['cmd'] == 'wpsg_var_setImageOrder')
-			{
-				
-				$vp_data = $this->loadVarianten($_REQUEST['edit_id']);
-				
-				if ($_REQUEST['vari_id'] == -1)
-				{
-					
-					$vp_data[$_REQUEST['var_id']]['picOrder'] = $_REQUEST['wpsg_reorder'];
-					
-				}
-				else 
-				{
-				
-					$vp_data[$_REQUEST['var_id']]['vari'][$_REQUEST['vari_id']]['picOrder'] = $_REQUEST['wpsg_reorder'];
-					
-				}
-				 
-				$this->saveVarianten($_REQUEST['edit_id'], $vp_data);
-				
-				die("1");
-				
-			}
-			else if ($_REQUEST['cmd'] == 'wpsg_vp_vari_setPic')
-			{
-								
-				$vp_data = $this->loadVarianten($_REQUEST['edit_id']);
-				
-				if ($_REQUEST['vari_id'] >= 0)
-				{
-					
-					$arPic = explode(",", $vp_data[$_REQUEST['var_id']]['vari'][$_REQUEST['vari_id']]['pic']);
-					
-					if (in_array($_REQUEST['pic'], $arPic))
-					{
-						unset($arPic[array_search($_REQUEST['pic'], $arPic)]);
-					}
-					else
-					{
-						$arPic[] = $_REQUEST['pic'];
-					}
-					
-					$vp_data[$_REQUEST['var_id']]['vari'][$_REQUEST['vari_id']]['pic'] = implode(",", $arPic);
-					
-				}
-				else
-				{
-					
-					$arPic = explode(",", $vp_data[$_REQUEST['var_id']]['pic']);
-					
-					if (in_array($_REQUEST['pic'], $arPic))
-					{
-						unset($arPic[array_search($_REQUEST['pic'], $arPic)]);
-					}
-					else
-					{
-						$arPic[] = $_REQUEST['pic'];
-					}
-					
-					$vp_data[$_REQUEST['var_id']]['pic'] = implode(",", $arPic);
-						
-				}
-				
-				$this->saveVarianten($_REQUEST['edit_id'], $vp_data);
-				
-				die("1");
-				
-			}
-			else if ($_REQUEST['cmd'] == 'wpsg_vp_vari_inlineEdit')
-			{
-				
-								
-				$vp_data = $this->loadVarianten($_REQUEST['edit_id']);
-				$product_data = $this->shop->cache->loadProduct($_REQUEST['edit_id']);
-				 
-				if ($_REQUEST['typ'] == "vari_name") 
-				{
-					
-					if (wpsg_isSizedString($_REQUEST['wpsg_lang']))
-					{
-						$vp_data[$_REQUEST['var_id']]['lang'][$_REQUEST['wpsg_lang']]['vari'][$_REQUEST['vari_id']]['name'] = wpsg_q($_REQUEST['value']);	
-					}
-					else
-					{					
-						$vp_data[$_REQUEST['var_id']]['vari'][$_REQUEST['vari_id']]['name'] = wpsg_q($_REQUEST['value']);
-					}
-					
-				}				
-				else if ($_REQUEST['typ'] == "vari_artnr") 
-				{
-					
-					if (wpsg_isSizedString($_REQUEST['wpsg_lang']))
-					{
-						$vp_data[$_REQUEST['var_id']]['lang'][$_REQUEST['wpsg_lang']]['vari'][$_REQUEST['vari_id']]['artnr'] = wpsg_q($_REQUEST['value']);	
-					}
-					else
-					{
-						$vp_data[$_REQUEST['var_id']]['vari'][$_REQUEST['vari_id']]['artnr'] = wpsg_q($_REQUEST['value']);
-					}
-					
-				}
-				else if ($_REQUEST['typ'] == "vari_preis")
-				{
-					
-					$_REQUEST['value'] = wpsg_tf($_REQUEST['value']);
-					$vp_data[$_REQUEST['var_id']]['vari'][$_REQUEST['vari_id']]['preis'] = $_REQUEST['value'];
-					$_REQUEST['value'] = wpsg_ff($_REQUEST['value'], $this->shop->get_option('wpsg_currency'));
-					
-				}
-				else if ($_REQUEST['typ'] == "vari_fmenge")
-				{
-						
-					$arFeinheiten = explode(',', $this->shop->get_option('wpsg_mod_fuellmenge_einheit'));
-					
-					$_REQUEST['value'] = wpsg_ff(wpsg_tf($_REQUEST['value']), $arFeinheiten[$product_data['feinheit']]);
-					$vp_data[$_REQUEST['var_id']]['vari'][$_REQUEST['vari_id']]['fmenge'] = wpsg_tf($_REQUEST['value']);
-						
-				}
-				else if ($_REQUEST['typ'] == "vari_weight")
-				{
-					
-					$_REQUEST['value'] = wpsg_tf($_REQUEST['value']);
-					$vp_data[$_REQUEST['var_id']]['vari'][$_REQUEST['vari_id']]['weight'] = $_REQUEST['value'];
-										
-				}
-				else if ($_REQUEST['typ'] == "vari_stock")
-				{
-		 
-					$_REQUEST['value'] = intval($_REQUEST['value']);
-					$vp_data[$_REQUEST['var_id']]['vari'][$_REQUEST['vari_id']]['stock'] = $_REQUEST['value'];
-		 			
-				}
-				else if ($_REQUEST['typ'] == "var_name")
-				{
-					
-					if (wpsg_isSizedString($_REQUEST['wpsg_lang']))
-					{
-						$vp_data[$_REQUEST['var_id']]['lang'][$_REQUEST['wpsg_lang']]['name'] = $_REQUEST['value'];	
-					}
-					else
-					{
-						$vp_data[$_REQUEST['var_id']]['name'] = $_REQUEST['value'];
-					}
-						
-				}
-				else if ($_REQUEST['typ'] == "var_preis")
-				{
-					
-					$_REQUEST['value'] = wpsg_tf($_REQUEST['value']);
-					$vp_data[$_REQUEST['var_id']]['preis'] = $_REQUEST['value'];
-					$_REQUEST['value'] = wpsg_ff($_REQUEST['value'], $this->shop->get_option('wpsg_currency'));
-					
-				}
-				else if ($_REQUEST['typ'] == "var_weight")
-				{
-					 
-					$_REQUEST['value'] = wpsg_tf($_REQUEST['value']);
-					$vp_data[$_REQUEST['var_id']]['weight'] = $_REQUEST['value'];
-					
-				}
-				else if ($_REQUEST['typ'] == "var_fmenge")
-				{
-					
-					$arFeinheiten = explode(',', $this->shop->get_option('wpsg_mod_fuellmenge_einheit'));
-						
-					$_REQUEST['value'] = wpsg_ff(wpsg_tf($_REQUEST['value']), $arFeinheiten[$product_data['feinheit']]);
-					$vp_data[$_REQUEST['var_id']]['fmenge'] = wpsg_tf($_REQUEST['value']);
-					
-				}
-				else if ($_REQUEST['typ'] == "var_artnr")
-				{
-					
-					if (wpsg_isSizedString($_REQUEST['wpsg_lang']))
-					{
-						$vp_data[$_REQUEST['var_id']]['lang'][$_REQUEST['wpsg_lang']]['artnr'] = wpsg_q($_REQUEST['value']);	
-					}
-					else
-					{
-						$vp_data[$_REQUEST['var_id']]['artnr'] = wpsg_q($_REQUEST['value']);
-					}
-					
-				}
-				else if ($_REQUEST['typ'] == "var_stock")
-				{
-	 
-					$_REQUEST['value'] = intval($_REQUEST['value']);
-					$vp_data[$_REQUEST['var_id']]['stock'] = $_REQUEST['value'];
-					
-				}
-				
-				$this->saveVarianten($_REQUEST['edit_id'], $vp_data);
-				
-				die(strval($_REQUEST['value']));
-				
-			}
-			
-		} // public function produkt_ajax()
-		
-		public function settings_save()
-		{
-			
-			$this->shop->update_option('wpsg_vp_showpic', $_REQUEST['wpsg_vp_showpic']);
-			$this->shop->update_option('wpsg_vp_detailview', $_REQUEST['wpsg_vp_detailview']);
-			$this->shop->update_option('wpsg_vp_showpic_width', $_REQUEST['wpsg_vp_showpic_width']);
-			$this->shop->update_option('wpsg_vp_showpic_height', $_REQUEST['wpsg_vp_showpic_height']);
-			$this->shop->update_option('wpsg_vp_replaceanr', $_REQUEST['wpsg_vp_replaceanr']);
-			$this->shop->update_option('wpsg_vp_imageselect_width', $_REQUEST['wpsg_vp_imageselect_width']);
-			$this->shop->update_option('wpsg_vp_imageselect_height', $_REQUEST['wpsg_vp_imageselect_height']);
-			$this->shop->update_option('wpsg_mod_vp_showProduct', $_REQUEST['wpsg_mod_vp_showProduct']);
-			$this->shop->update_option('wpsg_vp_imageselect_mode', $_REQUEST['wpsg_vp_imageselect_mode']);
-			
-		} // public function settings_save()
-		
-		public function settings_edit()
-		{
-			
-			return $this->shop->render(WPSG_PATH_VIEW.'/mods/mod_varianten/settings_edit.phtml');
-			
-		} // public function settings_edit()
-		
-		public function product_addedit_content(&$product_content, &$product_data)
-		{
-				
-			/*
-			// FÃŒr die Varianten brauche ich immer das original Array ...
-			$product_data['id'] = $this->db->fetchOne("SELECT `lang_parent` FROM `".WPSG_TBL_PRODUCTS."` WHERE `id` = '".wpsg_q($product_data['id'])."'");
-									
-			$this->shop->view['wpsg_mod_varianten']['data'] = $product_data;
-				
-			$product_content['wpsg_mod_varianten'] = array(
-					'title' => __('Varianten', 'wpsg'),
-					'content' => $this->shop->render(WPSG_PATH_VIEW.'/mods/mod_varianten/produkt_addedit_content.phtml', false)
-			);
-			*/
-				
-		}
-
-		/*
-		public function produkt_edit_content(&$produkt_data) 
-		{ 
-			
-			if (wpsg_isSizedString($_REQUEST['wpsg_lang']))
-			{
-				
-				// FÃŒr die Varianten brauche ich immer das original Array ...
-				$produkt_data['id'] = $this->db->fetchOne("SELECT `lang_parent` FROM `".WPSG_TBL_PRODUCTS."` WHERE `id` = '".wpsg_q($produkt_data['id'])."'");				
-				
-			}
-			
-			$this->shop->view['wpsg_mod_varianten']['data'] = $produkt_data;
-			 			
-			$this->shop->render(WPSG_PATH_VIEW.'/mods/mod_varianten/produkt_edit_content.phtml');	
-			
-		} // public function produkt_edit_content(&$produkt_data)
-		
-		*/
-		
-		public function produkt_edit_afterForm(&$product_id) { }
-		
-		public function wpsg_enqueue_scripts()
-		{
-			
-			if (!is_admin())
-			{
-							
-				wp_enqueue_script('wpsg_mod_varianten_js', $this->shop->getRessourceURL('mods/mod_varianten/varianten.js'));
-				
-				wp_localize_script('wpsg_mod_varianten_js', 'wpsg_vp_showpic', array('wpsg_vp_showpic' => $this->shop->get_option('wpsg_vp_showpic')));
-				
-			}
-			
-		} // public function wpsg_enqueue_scripts()
-		
-		public function basket_preInsert()
-		{
-
-			if (is_array($_REQUEST['wpsg_vp']) && sizeof($_REQUEST['wpsg_vp']) > 0)
-			{
-								
-				$var_key = 'vp_'.$_REQUEST['wpsg']['produkt_id'].'/';
-				
-				foreach ($_REQUEST['wpsg_vp'] as $var => $var_value)
-				{
-					
-					$var_key .= $var."_".$var_value.":";
-					
-				}
-				
-				$var_key = substr($var_key, 0, -1);
-
-				$_REQUEST['wpsg']['produkt_id'] = $var_key;
-				
-			}
-			
-		} // public function basket_preInsert()
-				 		
-		public function getProductAnr($product_key, &$anr) 
-		{ 
-
-			if ($this->isVariantsProductKey($product_key) && wpsg_isSizedInt($this->shop->get_option('wpsg_vp_replaceanr')))
-			{
-
-				$arVariantenInfo = $this->getVariantenInfoArray($product_key);
-				
-				if (wpsg_isSizedString($arVariantenInfo['akey'])) $anr = $arVariantenInfo['akey'];
-				
-				// Artikelnummer gebildet, keine weiteren Module betrachten
-				return -2;
-				
-			}
-			
-		} // public function getProductAnr($product_key, &$anr)
-				
-		public function basket_row(&$p, $i) 
-		{ 
-			
-			if (!preg_match('/vp_(.*)/', $p['id'])) return;
-			
-			$this->shop->view['variante'] = $this->getVariantenInfoArray($p['id']);
-			
-			$this->shop->view['i'] = $i;
-			
-			$this->shop->render(WPSG_PATH_VIEW.'/mods/mod_varianten/basket_row.phtml');
-			
-		} // public function basket_row(&$p)
-		
-		public function overview_row(&$p, $i)
-		{
-			
-			if (!preg_match('/vp_(.*)/', $p['id'])) return;
-			
-			$this->shop->view['variante'] = $this->getVariantenInfoArray($p['id']);
-			$this->shop->view['i'] = $i;
-			
-			return $this->shop->render(WPSG_PATH_VIEW.'/mods/mod_varianten/overview_row.phtml');
-			
-		} // public function overview_row(&$p, $i)
-		
-		public function order_view_row(&$p, $i) 
-		{ 
-			
-			if (!preg_match('/vp_(.*)/', $p['id'])) return;
-			
-			$this->shop->view['variante'] = $this->getVariantenInfoArray($p['id']);
-			$this->shop->view['i'] = $i;
-			
-			return $this->shop->render(WPSG_PATH_VIEW.'/mods/mod_varianten/order_view_row.phtml');
-			
-		} // public function order_view_row(&$p)
-				
-		public function mail_row($index, $produkt)
-		{
-			
-			if (preg_match('/vp_(.*)/', $produkt['id']))
-			{
-			
-				$this->shop->view['produkt'] = $produkt;
-				$this->shop->view['variante'] = $this->getVariantenInfoArray($produkt['id']);
-			
-				if ($this->shop->htmlMail === true)
-				{
-				
-					$this->shop->render(WPSG_PATH_VIEW.'/mods/mod_varianten/mail_row_html.phtml');
-					
-				}
-				else
-				{
-					
-					$this->shop->render(WPSG_PATH_VIEW.'/mods/mod_varianten/mail_row.phtml');
-				
-				}
-			
-			}
-			
-		} // public function mail_row($index, $produkt)
-		
-		public function admin_presentation() 
-		{ 
-			
-			echo wpsg_drawForm_Select('wpsg_mod_varianten_showvariprice', __('Variantenpreis im Produkttemplate anzeigen', 'wpsg'), array(
-				'0' => __('immer anzeigen', 'wpsg'),
-				'1' => __('nur wenn grÃ¶Ãer 0', 'wpsg'),
-				'2' => __('nie anzeigen', 'wpsg')
-			), $this->shop->get_option('wpsg_mod_varianten_showvariprice'));
-			
-		} // public function admin_presentation()
-		
-		public function admin_presentation_submit() 
-		{ 
-			
-			$this->shop->update_option('wpsg_mod_varianten_showvariprice', $_REQUEST['wpsg_mod_varianten_showvariprice']);	
-			
-		} // public function admin_presentation_submit()
-		
-		public function wpsg_mod_export_loadFields(&$arFields) 
-		{ 
-
-			$arFields[20]['fields']['product_vname'] = __('Name der Variante', 'wpsg');
-			$arFields[20]['fields']['product_vanr'] = __('Artikelnummer der Variante', 'wpsg');
-			
-		} // public function wpsg_mod_export_loadFields(&$arFields) 
-		
-		public function wpsg_mod_export_getValue(&$return, $field_value, $o_id, $p_id, $productkey, $product_index, $profil_separator) 
-		{ 
-
-			if ($this->isVariantsProductKey($productkey))
-			{
-
-				$var_info = $this->getVariantenInfoArray($productkey);
-				
-				$var_vname = $var_info['key'];
-				$var_vanr = $var_info['akey'];
-				
-			}
-			else
-			{
-				
-				// Damit das nicht definiert nicht im Export erscheint, fÃŒr Produkte die keine Variante sind 
-				
-				$var_vname = '';
-				$var_vanr = '';
-				
-			}
-			
-			switch ($field_value)
-			{
-			
-				case 'product_vname': $return = $var_vname; break;
-				case 'product_vanr': $return = $var_vanr; break;
-			
-			}
-			
-		} // public function wpsg_mod_export_getValue(&$return, $field_value, $o_id, $p_id, $productkey, $product_index, $profil_separator) 
-		
-		/* Modulfunktionen */ 
-		
-		/**
-		 * Gibt die MÃ¶glichken Bilder einer Variantenkombination zurÃŒck
-		 */
-		public function getKombiVariImages($var_key, $var_id = false)
-		{
-			
-			if (!$this->shop->hasMod('wpsg_mod_produktbilder')) return false;
-					
-			$arVarSelected = $this->getSetVariArray($var_key);			
-			$product_id = $this->shop->getProduktID($var_key);
-			$arVari = $this->loadVarianten($product_id);
-		
-			$handle = opendir($this->shop->callMod('wpsg_mod_produktbilder', 'getPicPath', array($product_id)));
-				
-			// Bilder des Produktes laden
-			$arBilder = array(); $i = 1;
-			while($filename = readdir($handle))
-			{
-		
-				$file = $this->shop->callMod('wpsg_mod_produktbilder', 'getPicPath', array($product_id)).'/'.$filename;
-		
-				if (is_file($file) && $file != "." && $file != "..") $arBilder[] = $filename; $i ++;
-		
-			}
-		
-			// Schauen ob ein Bild nach dem Dateinamen dabei ist
-			foreach ($arBilder as $bild)
-			{
-				
-				$image = false;
-				$filename = preg_replace("/\.([^\.]*)/", "", $bild);
-				if ($filename == "vp_".str_replace(":", "-", $var_key)) $image = $bild;
-					
-				if ($image !== false) return array($image);
-				
-			}
-		
-			foreach ($arVari as $var_key => $var)
-			{
-	
-				if (array_key_exists($var_key, $arVarSelected))
-				{
-
-					if ($var_id === $var_key) continue;
-					
-					if ($var['typ'] == "checkbox")
-					{
-							
-						if ($arVarSelected[$var_key] == "1")
-						{
-							$arBilder = array_intersect($arBilder, explode(",", $var['pic']));
-						}
-						else
-						{
-							$arBilder = array_diff($arBilder, explode(",", $var['pic']));
-						}
-							
-					}
-					else
-					{
-												
-						$arBilder = array_intersect($arBilder, explode(",", wpsg_getStr($var['vari'][$arVarSelected[$var_key]]['pic'])));
-							
-					}
-						
-				}
-					
-			}
-				
-			$arBilder = $this->checkPics($arBilder, $product_id);
-				
-			if (wpsg_isSizedArray($arBilder))
-			{
-	
-				return $arBilder;
-					
-			}
-			else
-			{
-				
-				return array();
-				
-			}
-		
-		}
-				
-		/**
-		 * Gibt das Bild fÃŒr die Grafikauswahl zurÃŒck
-		 * @param int $product_id
-		 * @param int $var_id
-		 * @param int $vari_id
-		 */
-		public function getImageSelectImage($product_id, $var_id, $vari_id, $vari_key)
-		{
-
-			$arVariBilder = $this->getVariImages($product_id, $var_id, $vari_id);			
-			$arVariPossibleBilder = $this->getKombiVariImages($vari_key, $var_id);
-			
-			$arBilderIntersect = array_intersect($arVariBilder, $arVariPossibleBilder);			
-			if (wpsg_isSizedArray($arBilderIntersect)) $arVariBilder = $arBilderIntersect;
-			
-			return array_shift($arVariBilder);
-			
-		} // public function getImageSelectImage($product_id, $var_id, $vari_id)
-		
-		/**
-		 * Gibt die Bilder als Array fÃŒr die Variation zurÃŒck
-		 * Beachtet die Reihenfolge die im Backend ÃŒber Drag&Drop definiert ist
-		 * @param int $var_id Key der Variante
-		 * @param int $vari_id Key der Variation
-		 */
-		public function getVariImages($product_id, $var_id, $vari_id)
-		{
-			
-			$vp_data = $this->loadVarianten($product_id);
-			
-			$arProductBilder = $this->shop->callMod('wpsg_mod_produktbilder', 'getProduktBilder', array($product_id));
-			 
-			$arReturn = array();
-			 
-			// Bilder in Reihenfolge
-			if ($vp_data[$var_id]['typ'] == 'checkbox' && wpsg_isSizedArray($vp_data[$var_id]['picOrder'])) $arReturn = $vp_data[$var_id]['picOrder']; 
-			else if (wpsg_isSizedArray($vp_data[$var_id]['vari'][$vari_id]['picOrder'])) $arReturn = $vp_data[$var_id]['vari'][$vari_id]['picOrder'];
-			
-			// PrÃŒfen ob die Bilder noch in Produktbilder Array drin sind
-			foreach ($arReturn as $k => $v)
-			{
-				
-				if (!in_array($v, $arProductBilder)) unset($arReturn[$k]);
-				else unset($arProductBilder[array_search($v, $arProductBilder)]);
-				
-			}
-			
-			// Bilder aus dem ProduktArray noch hinzufÃŒgen, die eventuell nicht im sortierten Array enthalten sind
-			foreach ($arProductBilder as $k => $v)
-			{
-				
-				$arReturn[] = $v;
-				
-			}
-			
-			$arImageSelect = array();
-			
-			// Sind die Bilder in der Variante ausgewÃ€hlt?
-			if (!is_admin())
-			{
-			
-				if ($vp_data[$var_id]['typ'] == 'checkbox' && wpsg_isSizedString($vp_data[$var_id]['pic'])) $arImageSelect = explode(',', $vp_data[$var_id]['pic']);
-				else if (wpsg_isSizedString($vp_data[$var_id]['vari'][$vari_id]['pic'])) $arImageSelect = explode(',', $vp_data[$var_id]['vari'][$vari_id]['pic']);
-			
-				foreach ($arReturn as $k => $v)
-				{
-				
-					if (!in_array($v, $arImageSelect)) unset($arReturn[$k]);
-				
-				}
-				
-			}
-						
-			return $arReturn;
-									
-		} // public function getVariImages($product_id, $var_id, $vari_id)
-				
-		/**
-		 * Gibt einen Array zurÃŒck, bei denen die SchlÃŒssel die Varianten sind und die Werte die gewÃ€hlten Variationen
-		 */
-		private function getSetVariArray($product_key)
-		{
-
-			if (!$this->isVariantsProductKey($product_key)) return array();
-			
-			$arVariSet = explode(':', preg_replace('/^vp_\d*\//', '', $product_key));
-			$arReturn = array();
-			
-			foreach ($arVariSet as $var_combi)
-			{
-				
-				$var_combi = explode('_', $var_combi);
-				$var = $var_combi[0];
-				$vari = $var_combi[1];
-				
-				$arReturn[$var] = $vari;
-				
-			}
-			
-			return $arReturn;
-			
-		}
-		
-		/**
-		 * Gibt true zurÃŒck, wenn der ÃŒbergebene Produktkey ein Varianten Produktkey ist. Sonst false.
-		 * @param \String $productkey
-		 */
-		public function isVariantsProductKey($productkey)
-		{
-			
-			if (preg_match('/^vp_\d+/', $productkey))
-			{
-				
-				return true;
-				
-			}
-			else 
-			{
-
-				return false;
-				
-			}
-			
-		} // public function isVariantsProductKey($productkey)
-		
-		/**
-		 * Ãbernimmt die Auswahl der Variante im Produkttemplate
-		 */
-		public function renderTemplate($product_key)
-		{
-			 
-			$produkt_id = $this->shop->getProduktId($product_key);
-			$produkt_data = $this->shop->cache->loadProduct($produkt_id);
-			$tax_value = $this->shop->getCalcTaxValue($produkt_data['mwst_key']);
-												
-			if ($this->shop->isOtherLang())
-			{
-			
-				$produkt_trans_id = $this->db->fetchOne("SELECT `id` FROM `".WPSG_TBL_PRODUCTS."` WHERE `lang_parent` = '".wpsg_q($produkt_id)."' AND `lang_code` = '".wpsg_q($this->shop->getCurrentLanguageCode())."'");
-					
-				if (wpsg_isSizedInt($produkt_trans_id)) $produkt_id = $produkt_trans_id;
-				
-			}
-	 
-			$vp_data = $this->loadVarianten($produkt_id);
-									
-			if (is_array($vp_data) && sizeof($vp_data) > 0)
-			{
-				
-				$this->shop->view['data']['vp_data'] = $vp_data;
-				$this->shop->view['wpsg_mod_varianten']['set'] = $this->getSetVariArray($product_key);
-				
-				// Rabattpreise vorkalkulieren
-				//$this->shop->callMod('wpsg_mod_discount', 'addDiscountToVari', array(&$produkt_id, &$this->shop->view['data']['vp_data']));
-				 
-				foreach ($this->shop->view['data']['vp_data'] as $k => $v)
-				{
-					
-					if ($v['typ'] == "checkbox")
-					{
-						
-						if (get_option("wpsg_vp_showpic") == "1" && wpsg_isSizedString($v['pic']))
-						{
-							
-							$this->shop->view['data']['vp_data'][$k]['showpic'] = $this->getImageSelectImage($produkt_id, $k, $k2, $product_key);
-						 							
-						}
-						
-						// Preis an Ausgabe im Frontend anpassen
-						if ($this->shop->getFrontendTaxview() == WPSG_NETTO && $this->shop->getBackendTaxview() == WPSG_BRUTTO) $this->shop->view['data']['vp_data'][$k]['preis'] = wpsg_calculatePreis($v['preis'], WPSG_NETTO, $tax_value);
-						 
-					}
-					else
-					{ 
-						
-						foreach ($v['vari'] as $k2 => $v2)
-						{
-
-							if (get_option("wpsg_vp_showpic") == "1" && wpsg_isSizedString($v2['pic']))
-							{
-							 								
-								$this->shop->view['data']['vp_data'][$k]['vari'][$k2]['showpic'] = $this->getImageSelectImage($produkt_id, $k, $k2, $product_key);
-								
-							}
-							
-							// Preis an Ausgabe im Frontend anpassen
-							if ($this->shop->getFrontendTaxview() == WPSG_NETTO && $this->shop->getBackendTaxview() == WPSG_BRUTTO) $this->shop->view['data']['vp_data'][$k]['vari'][$k2]['preis'] = wpsg_calculatePreis($v2['preis'], WPSG_NETTO, $tax_value);
-							
-						}
-						
-					}
-					
-				}
-					 
-								
-				return $this->shop->render(WPSG_PATH_VIEW.'/mods/mod_varianten/produkt.phtml', false);
-				
-			}
-			
-		} // public function renderTemplate($produkt_id)
-
-		/**
-		 * Zeichnet das Interface fÃŒr die Bearbeitung der Varianten
-		 */
-		public function drawVarianten($produkt_id)
-		{
-					    			
-			$this->shop->view['vp_data'] = $this->loadVarianten($produkt_id);
-			 
-			if ($this->shop->hasMod('wpsg_mod_fuellmenge'))
-			{
-				
-				$this->shop->view['vp_productdata'] = $this->shop->cache->loadProduct($produkt_id);
-				$this->shop->view['vp_arFeinheiten'] = explode(',', $this->shop->get_option('wpsg_mod_fuellmenge_einheit'));
-				
-			}
-
-			// Wenn es ÃŒber Ajax aufgerufen wird fehlt hier die ProduktID !
-			if (!isset($this->shop->view['data']['id'])) $this->shop->view['data']['id'] = $produkt_id;
-									 
-			return $this->shop->render(WPSG_PATH_VIEW.'/mods/mod_varianten/drawVarianten.phtml');
-						
-		} // public function drawVarianten($produkt_id)
-		
-		/**
-		 * Gibt den Namen der Variante zurÃŒck
-		 */
-		public function getVariantenName($vp_data, $var_id)
-		{
-			
-			$name = $vp_data[$var_id]['name'];
-			 
-			if (wpsg_isSizedString($_REQUEST['wpsg_lang']))
-			{
-				if ($vp_data[$var_id]['lang'][$_REQUEST['wpsg_lang']]['name'] != "")
-				{
-					$name = $vp_data[$var_id]['lang'][$_REQUEST['wpsg_lang']]['name'];
-				}
-			} 
-			
-			return ((trim($name) == "")?"----":$name);
-			
-		} // public function getVariantenName($vp_data, $v_id)
-		
-		/**
-		 * Gibt den Namen der Variation zurÃŒck
-		 */
-		public function getVariName($vp_data, $var_id, $vari_id)
-		{
-			
-			$name = $vp_data[$var_id]['vari'][$vari_id]['name'];	
-								
-			if (wpsg_isSizedString($_REQUEST['wpsg_lang']))
-			{
-				if ($vp_data[$var_id]['lang'][$_REQUEST['wpsg_lang']]['vari'][$vari_id]['name'] != "")
-				{
-					$name = $vp_data[$var_id]['lang'][$_REQUEST['wpsg_lang']]['vari'][$vari_id]['name'];
-				}
-			}
-		
-			return ((trim($name) == "")?"----":$name);
-			
-		} // public function getVariName($vp_data, $var_id, $vari_id)
-		
-		/**
-		 * Gibt true zurÃŒck, wenn der Preis im Produkttemplate angezeigt werden soll
-		 * Andersrum programmiert, da die Default Einstellung anzeigen ist
-		 */
-		public function showVariPrice($vari_price)
-		{
-			
-			switch ($this->shop->get_option('wpsg_mod_varianten_showvariprice'))
-			{
-				
-				case '1': // nur wenn grÃ¶Ãer 0
-					
-					if ($vari_price <= 0) return false;
-					
-					break;
-					
-				case '2': // nie anzeigen
-					
-					return false;
-					
-					break;
-				
-			}
-			
-			return true;
-			
-		} // public function showVariPrice($vari_price)
-		
-		/**
-		 * LÃ€dt die Varianteninformationen aus dem serialisierten Array
-		 * @param $noTrans Wird diese Variable auf true gesetzt, so wird die Ãbersetzung nicht geladen (Wie Backend) Wichtig wenn die Varianten wieder gespeichert werden sollen!
-		 */
-		public function loadVarianten($produkt_id, $noTrans = false, $noCache = false)
-		{
-			
-			if (is_admin()) $noCache = true;
-			
-			if (!$noCache && array_key_exists($produkt_id.$noTrans, $this->cache_variData)) return $this->cache_variData[$produkt_id.$noTrans];
-						 
-			// Ãbersetzung verarbeiten
-			if (is_admin() || $noTrans === true)
-			{
-				
-				$vp_data = @unserialize($this->db->fetchOne("SELECT `mod_varianten` FROM `".WPSG_TBL_PRODUCTS."` WHERE `id` = '".wpsg_q($produkt_id)."'"));
-				if (!is_array($vp_data)) $vp_data = array();
-				
-			} 
-			else
-			{
-			
-				// Im Frontend geht es nach der Sprache auf der der Shop aktuell lÃ€uft	
-				if ($this->shop->isOtherLang())			
-				{
-										
-					$parent_lang_id = $this->db->fetchOne("SELECT `lang_parent` FROM `".WPSG_TBL_PRODUCTS."` WHERE `id` = '".wpsg_q($produkt_id)."'");					
-					if (!wpsg_isSizedInt($parent_lang_id)) $parent_lang_id = $produkt_id;				
-					
-					$vp_data = @unserialize($this->db->fetchOne("SELECT `mod_varianten` FROM `".WPSG_TBL_PRODUCTS."` WHERE `id` = '".wpsg_q($parent_lang_id)."'"));
-					if (!is_array($vp_data)) $vp_data = array();
-					
-					foreach ($vp_data as $k => $v)
-					{
-	
-						// Den Namen der Variante auf die aktuelle Sprache stellen
-						if (wpsg_isSizedString($vp_data[$k]['lang'][$this->shop->getCurrentLanguage()]['name'])) $vp_data[$k]['name'] = $vp_data[$k]['lang'][$this->shop->getCurrentLanguage()]['name'];
-						
-						if (wpsg_isSizedArray($vp_data[$k]['vari']))
-						{
-							
-							foreach ($vp_data[$k]['vari'] as $k2 => $vari)
-							{
-								
-								// Den Namen der Variation auf die aktuelle Sprache korrigieren
-								if (wpsg_isSizedString($vp_data[$k]['lang'][$this->shop->getCurrentLanguage()]['vari'][$k2]['name'])) $vp_data[$k]['vari'][$k2]['name'] = $vp_data[$k]['lang'][$this->shop->getCurrentLanguage()]['vari'][$k2]['name'];
-								
-							}
-							
-						}
-						
-					}
-					
-				}
-				else
-				{
-					
-					$vp_data = @unserialize($this->db->fetchOne("SELECT `mod_varianten` FROM `".WPSG_TBL_PRODUCTS."` WHERE `id` = '".wpsg_q($produkt_id)."'"));
-					if (!is_array($vp_data)) $vp_data = array();
-					
-				}
-				
-			}
-			 						
-			$this->cache_variData[$produkt_id.$noTrans] = $vp_data; 
-			
-			return $vp_data;
-			
-		} // public function loadVarianten($produkt_id)
-		
-		/**
-		 * LÃ€dt einen Array mit den fÃŒr das Frontend mÃ¶glichen Varianten/Variationen
-		 */
-		public function laodPossibleVarianten($produkt_id, $noTrans = false)
-		{
-			
-			$arVariData = $this->loadVarianten($produkt_id, $noTrans);
-			
-			foreach ($arVariData as $var_key => $var)
-			{
-				
-				if ($var['typ'] == 'checkbox')
-				{
-					
-					if ($var['aktiv'] != '1') unset($arVariData[$var_key]);
-					
-				}
-				else 
-				{
-					 
-					if ($var['aktiv'] != '1')
-					{
-							
-						unset($arVariData[$var_key]);
-							
-					}
-					else
-					{
-						
-						$akt_vari = false;
-						
-						foreach ($var['vari'] as $vari_key => $vari)
-						{
-							
-							if ($vari['aktiv'] != '1' || ($this->shop->hasMod('wpsg_mod_stock') && !wpsg_isSizedInt($vari['stock'])))
-							{
-								
-								unset($arVariData[$var_key]['vari'][$vari_key]);
-								
-							}
-							else
-							{
-								
-								$akt_vari = true;
-								
-							}
-							
-						}
-						
-						if ($akt_vari === false)
-						{
-							
-							unset($arVariData[$var_key]);
-							
-						}
-						
-					}
-					
-				}
-				
-			}
-			
-			return $arVariData;
-			
-		} // public function laodPossibleVarianten($produkt_id, $noTrans)
-		
-		/**
-		 * Gibt den Warenbestand fÃŒr ein Produkt anhand seiner Variantenkonfiguration zurÃŒck
-		 */
-		public function getStockForVarianten($vari_key)
-		{
-			
-			
-			$produkt_id = preg_replace('/(^vp_)|(\/(.*)$)/', '', $vari_key);
-			$vari_teil = preg_replace('/(.*)\//', '', $vari_key);
-			
-			$vari_data = $this->loadVarianten($produkt_id);			 
-			$arVarianten = explode(":", $vari_teil);
-			 
-			$arStock = array();
-			
-			foreach ((array)$arVarianten as $variante)
-			{
-				
-				$arVariante = explode("_", $variante);
-				
-				$variante_id = $arVariante[0];
-				$vari_id = $arVariante[1];
-				
-				if ($vari_data[$variante_id]['typ'] == 'checkbox')
-				{
-					
-					// Checkbox betrachte ich gar nicht mehr
-					// Nur betrachten Wenn Checkbox aktiviert ist
-					//if ($vari_id == '1') $arStock[] = $vari_data[$variante_id]['stock'];
-						
-				}
-				else
-				{
-					
-					$arStock[] = $vari_data[$variante_id]['vari'][$vari_id]['stock'];
-					
-				}
-				
-			}
- 
-			if (!wpsg_isSizedArray($arStock))
-			{
-				
-				// Hier greife ich jetzt auf den Produktbestand zurÃŒck
-				// Tritt auf, wenn z.B. nur die Checkboxvariante definiert ist
-				
-				$product_data = $this->shop->cache->loadProduct($produkt_id);				
-				return $product_data['stock'];
-				
-			}
-			
-			return min($arStock);
-			 
-		} // public function getStockForVarianten($vari_key)
-		
-		/**
-		 * Reduziert den Bestand der Variationen in dem Array
-		 */
-		public function reduceStock($produkt_key, $menge, $reduce = true)
-		{
-	
-			$produkt_id = preg_replace('/(^vp_)|(\/(.*)$)/', '', $produkt_key);
-			$vari_teil = preg_replace('/(.*)\//', '', $produkt_key);			
-			$arVarianten = explode(':', $vari_teil);
-			
-			$vari_data = $this->loadVarianten($produkt_id, true, true);
-  
-			foreach ($arVarianten as $variante)
-			{
-				
-				$arVariante = explode('_', $variante);
-				$variante_id = $arVariante[0];
-				$vari_id = $arVariante[1];
-				
-				if ($reduce === true)
-				{
-				
-					$vari_data[$variante_id]['vari'][$vari_id]['stock'] -= $menge;
-					
-				}
-				else
-				{
-				
-					$vari_data[$variante_id]['vari'][$vari_id]['stock'] += $menge;
-
-				}
-								
-			}
-			
-			// Array zurÃŒckspeichern
-			$this->saveVarianten($produkt_id, $vari_data);
-						
-		} // public function reduceStock($produkt_id, $menge)
-		
-		/**
-		 * Gibt einen VariantenschlÃŒssel fÃŒr die Standard Variantenauswahl zurÃŒck
-		 */
-		public function getDefaultVariKey($product_key)
-		{
-			 
-			if (is_numeric($product_key))
-			{
-
-				$arVariData = $this->laodPossibleVarianten($product_key, true);
-				
-				if (!wpsg_isSizedArray($arVariData)) return $product_key;
-				
-				$arVariDefault = array();
-				 
-				foreach ($arVariData as $var_key => $var)
-				{
-
-					$first_vari_key = '0';
-					
-					if (wpsg_isSizedArray($var['vari']))
-					{
-						
-						$arKeys = array_keys($var['vari']);
-						$first_vari_key = array_shift($arKeys);
-						
-					}
-										
-					$arVariDefault[] = $var_key.'_'.$first_vari_key;
-					
-				}
-
-				return 'vp_'.$product_key.'/'.implode(':', $arVariDefault); 
-				
-			}
-			else
-			{
-				
-				// Ist schon ein ProduktschlÃŒssel
-				return $product_key;
-				
-			}
-			
-		} // public function getDefaultVariKey($product_id)
-		
-		/**
-		 * Speichert die Varianten
-		 */
-		public function saveVarianten($produkt_id, $vp_data)
-		{
-
-			$vp_data = $this->clearArrayForSerialization($vp_data);
-			
-			$this->db->UpdateQuery(WPSG_TBL_PRODUCTS, array(
-				"mod_varianten" => wpsg_q(serialize($vp_data))
-			), "`id` = '".wpsg_q($produkt_id)."'");
-		  
-		} // public function saveVarianten($produkt_id, $vp_data)
-
-		/**
-		 * Liest die Informationen anhand eines VariantenschlÃŒssels aus
-		 */
-		public function getVariantenInfoArray($vari_key)
-		{
-			
-			$produkt_id = preg_replace('/(vp_)|(\/(.*))/', '', $vari_key);								
-			$arVari = explode(':', preg_replace('/vp_'.$produkt_id.'\//', '', $vari_key));
-	
-			$vp_data = $this->loadVarianten($produkt_id);
-	
-			$arKey = array();
-			$arAKey = array();
-			$arPics = array();
-			
-			$arReturn = array();
-			
-			if ($this->shop->hasMod('wpsg_mod_fuellmenge')) $arReturn['fmenge'] = 0;
-			if ($this->shop->hasMod('wpsg_mod_weight')) $arReturn['weight'] = 0;
-			
-			foreach ($arVari as $var_key)
-			{
-				
-				$var_id = preg_replace('/\_(.*)/', '', $var_key);
-				$var_value = preg_replace('/(.*)\_/', '', $var_key);
-			
-				if ($vp_data[$var_id]['typ'] == 'checkbox')
-				{
-					
-					$arPicsVariante = array();
-						
-					if (isset($vp_data[$var_id]['pic']))
-					{
-					
-						$arPicsVariante = wpsg_trim(explode(',', $vp_data[$var_id]['pic']));						
-																	
-					}
-					
-					if ($var_value == '1')
-					{  
-					 
-						$r = array(
-							'name' => $vp_data[$var_id]['name'],
-							'preis' => $vp_data[$var_id]['preis'],
-							'artnr'	=> $vp_data[$var_id]['vari'][2]['artnr'],
-							'pics' => $arPicsVariante
-						);
-						 
-						if ($this->shop->hasMod('wpsg_mod_weight') && wpsg_isSizedInt($vp_data[$var_id]['weight']))
-						{
-							
-							$r['weight'] = $vp_data[$var_id]['weight'];
-							$arReturn['weight'] += $r['weight'];
-							
-						}						
-
-						if ($this->shop->hasMod('wpsg_mod_fuellmenge') && wpsg_isSizedInt($vp_data[$var_id]['fmenge']))
-						{
-							
-							$r['fmenge'] = $vp_data[$var_id]['fmenge'];
-							$arReturn['fmenge'] += $r['fmenge'];
-							
-						}
-												
-						$arReturn[] = $r;
-						
-						$arKey[] = $vp_data[$var_id]['name'];
-						
-						$arPics = array_intersect($arPics, $arPicsVariante);
-						
-					}
-					else
-					{
-						
-						// Checkbox ist nicht markiert
-						//$arPics = array_unique(array_merge($arPics, $arPicsVariante));
-						
-					}
-					
-				}				
-				else 
-				{
-					
-					$arPicsVariante = array();
-					
-					if (isset($vp_data[$var_id]['vari'][$var_value]['pic']))
-					{
-						
-						$arPicsVariante = wpsg_trim(explode(',', $vp_data[$var_id]['vari'][$var_value]['pic']));							
-						$arPics = array_unique(array_merge($arPics, $arPicsVariante));
-						
-					}
-					 
-					$r = array(
-						'name' 	=> $vp_data[$var_id]['name'],
-						'value' => $vp_data[$var_id]['vari'][$var_value]['name'],
-						'preis'	=> $vp_data[$var_id]['vari'][$var_value]['preis'],
-						'artnr'	=> @$vp_data[$var_id]['vari'][$var_value]['artnr'],
-						'pics' => $arPicsVariante
-					);
-					
-					if ($this->shop->hasMod('wpsg_mod_weight') && wpsg_isSizedInt($vp_data[$var_id]['vari'][$var_value]['weight']))
-					{
-					
-						$r['weight'] = $vp_data[$var_id]['vari'][$var_value]['weight'];
-						$arReturn['weight'] += $r['weight'];
-					
-					}
-					
-					if ($this->shop->hasMod('wpsg_mod_fuellmenge') && wpsg_isSizedInt($vp_data[$var_id]['vari'][$var_value]['fmenge']))
-					{
-						
-						$r['fmenge'] = $vp_data[$var_id]['vari'][$var_value]['fmenge'];
-						$arReturn['fmenge'] += $r['fmenge'];
-						
-					}
-					
-					$arReturn[] = $r;
-					
-					$arKey[] = $vp_data[$var_id]['vari'][$var_value]['name'];
-					$arAKey[] = @$vp_data[$var_id]['vari'][$var_value]['artnr'];
-										
-				}
-				
-			}
-			
-			$arReturn['key'] = implode(' / ', $arKey);
-			$arReturn['akey'] = implode(' / ', $arAKey);
-			$arReturn['pics'] = array_unique($arPics);
-
-			return $arReturn;			
-			
-		} // public function getVariantenText($vari_key)
-				
-		private function checkPics(&$arPics, $produkt_id)
-		{
-			
-			foreach ($arPics as $k => $v)
-			{
-				
-				if (!file_exists($this->shop->callMod('wpsg_mod_produktbilder', 'getPicPath', array($produkt_id)).'/'.$v))
-				{
-					unset($arPics[$k]);
-				}
-				
-			}
-			
-			return $arPics;
-			
-		} // private function checkPics($arPics, $produkt_id)
-				
-		private function clearArrayForSerialization($ar)
-		{
-			
-			foreach ((array)$ar as $k => $v)
-			{
-				
-				if (wpsg_isSizedArray($v))
-				{
-					
-					$ar[$k] = $this->clearArrayForSerialization($v);
-					
-				}
-				else
-				{
-					
-					$ar[$k] = preg_replace('/\'|\`|\ÂŽ|\"/', '', $v);					
-					
-				}
-				
-			}
-			
-			return $ar;
-			
-		} // private function clearArrayForSerialization($ar)
-		
-	} // class wpsg_mod_varianten extends wpsg_mod_basic
-
-?>
Index: /system/intern/mods/wpsg_mod_varianten.class.php
===================================================================
--- /system/intern/mods/wpsg_mod_varianten.class.php	(revision 5987)
+++ /system/intern/mods/wpsg_mod_varianten.class.php	(revision 5987)
@@ -0,0 +1,1784 @@
+<?php
+
+	/**
+	 * Dieses Modul erlaubt verschiedene Produktvariationen
+	 */
+	class wpsg_mod_varianten extends wpsg_mod_basic
+	{
+		
+		var $cache_variData;
+		
+		var $lizenz = 1;
+		var $id = 98;
+		var $hilfeURL = 'http://wpshopgermany.de/?p=1057';
+						
+		/**
+		 * Costructor
+		 */
+		public function __construct()
+		{
+			
+			parent::__construct();
+			
+			$this->name = __('Varianten', 'wpsg');
+			$this->group = __('Produkte', 'wpsg');
+			$this->desc = __('ErmÃ¶glicht verschiedene Produktvariationen.', 'wpsg');
+
+			$this->cache_variData = array();
+			
+		} // public function __construct()
+		
+		public function install()
+		{
+			
+			require_once(WPSG_PATH_WP.'/wp-admin/includes/upgrade.php');
+
+			/**
+			 * Produkttabelle erweitern
+			 */
+			$sql = "CREATE TABLE ".WPSG_TBL_PRODUCTS." (
+			  	mod_varianten mediumtext NOT NULL
+			) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;";
+			
+			dbDelta($sql);
+			
+			$this->shop->checkDefault('wpsg_vp_imageselect_width', 25);
+			$this->shop->checkDefault('wpsg_vp_imageselect_height', 25);
+			$this->shop->checkDefault('wpsg_vp_imageselect_mode', 'cz');
+			
+		} // public function install()
+		
+		public function template_redirect()
+		{
+			
+			if (wpsg_isSizedString($_REQUEST['action'], 'wpsg_varianten_switch'))
+			{
+				
+				if (wpsg_isSizedInt($_REQUEST['wpsg_post_id']))
+				{
+					
+					global $post;
+					$post = get_post($_REQUEST['wpsg_post_id']);
+										
+				}
+				
+				$product_key = $_REQUEST['product_key'];
+				$product_id = $this->shop->getProduktId($product_key);
+				
+				$product_data = $this->shop->loadProduktArray($product_id, array(
+					'id' => $product_key, 
+					'menge' => $_REQUEST['quantity'],
+					'referer' => $_REQUEST['referer']
+				));				
+				 
+				// Damit das Div die gleiche Index Id bekommt
+				$GLOBALS['wpsg_produkt_index'] = $_REQUEST['product_index'] - 1;
+				
+				$this->shop->noReleatedProducts = true;
+								
+				if (wpsg_isSizedString($_REQUEST['template'])) $template = $_REQUEST['template'];
+				else $template = false;
+				
+				die($this->shop->renderProdukt($product_data, $template));
+								
+			}
+			
+		} // public function template_redirect()
+		
+		public function loadProduktArray(&$produkt_data) 
+		{
+	 
+			if (!$this->isVariantsProductKey($produkt_data['id'])) return;
+			 
+			$arVari = $this->loadVarianten($this->shop->getProduktId($produkt_data['id']));
+			$product_id = $this->shop->getProduktId($produkt_data['id']);
+			
+			$produkt_data['preis_original'] = $produkt_data['preis'];
+			
+			$mwst_value = $this->shop->getCalcTaxValue($produkt_data['mwst_key']); 
+			 
+			/* Gesamtpreis */
+			if ($this->shop->get_option('wpsg_preisangaben') == WPSG_NETTO) $preis = $produkt_data['preis_defaultLand_netto'];
+			else $preis = $produkt_data['preis_defaultLand_brutto']; 
+				
+			$arVarSelected = $this->getSetVariArray($produkt_data['id']);
+			$arVarDatabase = $this->loadVarianten($this->shop->getProduktId($produkt_data['id']), true);
+					
+			foreach ($arVarSelected as $var => $vari)
+			{
+					
+				
+				if ($arVarDatabase[$var]['typ'] == 'checkbox' && $vari == '1')
+				{
+		
+					// Aktivierte Checkbox
+					$preis += wpsg_tf($arVarDatabase[$var]['preis']);
+								
+				}
+				else
+				{
+		 
+					// Select, Radio
+					$preis += wpsg_tf($arVarDatabase[$var]['vari'][$vari]['preis']);
+		
+				}
+					
+			}
+			
+			// Preis umrechnen fÃŒr Standardland
+			if ($this->shop->get_option('wpsg_preisangaben') == WPSG_NETTO)
+			{
+				
+				// Preisangaben im Backend in Netto -> Brutto berechnen
+				$produkt_data['preis_brutto'] = wpsg_calculatePreis($preis, WPSG_BRUTTO, $mwst_value);
+				$produkt_data['preis_netto'] = $preis;
+				
+			}
+			else
+			{
+				
+				// Preis im Backend ist in Brutto
+				$produkt_data['preis_brutto'] = $preis;
+				$produkt_data['preis_netto'] = wpsg_calculatePreis($preis, WPSG_NETTO, $mwst_value);
+				
+			}
+
+			$produkt_data['preis_defaultLand_brutto'] = $produkt_data['preis_brutto'];
+			$produkt_data['preis_defaultLand_netto'] = $produkt_data['preis_netto'];
+			
+			// Jetzt habe ich Netto/Brutto Werte im Standardland
+			// Wenn es jetzt ein Leistungsort Produkt ist, dann muss ich die Steuer des Ziellandes bestimmen
+			if (wpsg_isSizedInt($produkt_data['euleistungsortregel']) && $this->shop->getDefaultCountry(true) != $this->shop->getFrontendCountry(true))
+			{
+			
+				$oFrontendCountry = $this->shop->getFrontendCountry();
+			
+				$produkt_data['mwst_value'] = $oFrontendCountry->getTax($produkt_data['mwst_key']);
+				$produkt_data['preis_brutto'] = wpsg_calculatePreis($produkt_data['preis_netto'], WPSG_BRUTTO, $produkt_data['mwst_value']);
+			
+			}
+			 
+			if ($this->shop->getFrontendTaxview() == WPSG_BRUTTO) $produkt_data['preis'] = $produkt_data['preis_brutto'];
+			else $produkt_data['preis'] = $produkt_data['preis_netto'];
+						
+			// Mindest- und Maximalpreis hinzufÃŒgen			
+			$bMinPrice = wpsg_tf($produkt_data['preis_original']);
+			$bMaxPrice = wpsg_tf($produkt_data['preis_original']);
+			 
+			if ($this->shop->hasMod('wpsg_mod_weight'))
+			{
+				
+				$bMinWeight = wpsg_tf($produkt_data['weight']);
+				$bMaxWeight = wpsg_tf($produkt_data['weight']);
+				
+			}
+			
+			foreach ($arVari as $k => $v)
+			{
+
+				if ($v['aktiv'] == '1')
+				{
+				 
+					if ($v['typ'] == 'checkbox')
+					{
+						
+						// Hier muss ich beim Min Preis nix tun, wenn nicht angehakt dann wird nix addiert
+						$bMaxPrice += wpsg_tf($v['preis']);
+						
+						if ($this->shop->hasMod('wpsg_mod_weight'))
+						{
+							
+							!isset ($v['weight']) or $bMaxWeight += wpsg_tf($v['weight']);
+							
+						}
+						
+						// Preis der Variante an die Ausgabe im Frontend anpassen
+						// if ($this->shop->getFrontendTaxview() == WPSG_NETTO && $this->shop->getBackendTaxview() == WPSG_BRUTTO) $arVari[$k]['preis'] = wpsg_calculatePreis($v['preis'], WPSG_NETTO, $mwst_value);
+						
+					}
+					else
+					{	
+							
+						$bMinPriceVari = false;
+						$bMaxPriceVari = false;
+						
+						if ($this->shop->hasMod('wpsg_mod_weight'))
+						{
+							
+							$bMinWeightVari = false;
+							$bMaxWeightVari = false;
+							
+						}
+						
+						foreach ($v['vari'] as $k2 => $v2)
+						{
+							
+							if ($v2['aktiv'] == '1')
+							{
+								
+								if ($bMinPriceVari === false || wpsg_tf($v2['preis']) < $bMinPriceVari) $bMinPriceVari = wpsg_tf($v2['preis']);
+								if ($bMaxPriceVari === false || wpsg_tf($v2['preis']) > $bMaxPriceVari) $bMaxPriceVari = wpsg_tf($v2['preis']);
+								
+								if ($this->shop->hasMod('wpsg_mod_weight'))
+								{
+									
+									if ($bMinWeightVari === false || !isset ($v['weight']) or wpsg_tf($v2['weight']) < $bMinWeightVari) $bMinWeightVari = !isset ($v['weight']) or wpsg_tf($v2['weight']);
+									if ($bMaxWeightVari === false || !isset ($v['weight']) or wpsg_tf($v2['weight']) > $bMaxWeightVari) $bMaxWeightVari = !isset ($v['weight']) or wpsg_tf($v2['weight']);
+									
+								}
+								
+							}
+							
+							// Preis der Variante an die Ausgabe im Frontend anpassen
+							// if ($this->shop->getFrontendTaxview() == WPSG_NETTO && $this->shop->getBackendTaxview() == WPSG_BRUTTO) $arVari[$k]['vari'][$k2]['preis'] = wpsg_calculatePreis($v2['preis'], WPSG_NETTO, $mwst_value);
+														
+						}
+
+						if ($bMinPriceVari !== false) $bMinPrice += $bMinPriceVari;
+						if ($bMaxPriceVari !== false) $bMaxPrice += $bMaxPriceVari;
+						
+						if ($this->shop->hasMod('wpsg_mod_weight'))
+						{
+							
+							if ($bMinWeightVari !== false) $bMinWeight += $bMinWeightVari;
+							if ($bMaxWeightVari !== false) $bMaxWeight += $bMaxWeightVari;
+							
+						}						
+						
+					}
+					
+				}
+				
+			}
+			 
+			$produkt_data['min_preis'] = wpsg_tf($bMinPrice);
+			$produkt_data['max_preis'] = wpsg_tf($bMaxPrice);
+			
+			if ($this->shop->hasMod('wpsg_mod_weight'))
+			{
+				
+				$produkt_data['min_weight'] = wpsg_tf($bMinWeight);
+				$produkt_data['max_weight'] = wpsg_tf($bMaxWeight);
+				
+			}
+			
+			/* Eventuell Variantenbild */
+			if ($this->shop->hasMod('wpsg_mod_produktbilder'))
+			{
+				
+				$arImages = $this->getKombiVariImages($produkt_data['id']);
+				
+				if (wpsg_isSizedArray($arImages))
+				{
+					
+					$image = $arImages[array_rand($arImages)];
+					
+					$produkt_data['varianten_image'] = $image;
+					
+				}
+				
+			}
+			
+		} // public function loadProduktArray(&$produkt_data) 
+		
+		public function produkt_ajax()
+		{
+			
+			//error_reporting(E_ALL);
+			
+			if (isset($_REQUEST['cmd']) && $_REQUEST['cmd'] == 'wpsg_vp_add')
+			{
+				 
+				$vp_data = $this->loadVarianten($_REQUEST['edit_id']);
+				
+				$data = array(
+					"name" => $_REQUEST['name'],
+					"typ" => $_REQUEST['typ'],
+					"aktiv" => "1"
+				);
+				
+				if ($_REQUEST['typ'] == "checkbox")
+				{
+					$data['preis'] = "0";
+				}
+				else
+				{
+					$data['vari'] = array();
+				}
+				
+				$vp_data[] = $data;
+				
+				$this->saveVarianten($_REQUEST['edit_id'], $vp_data);
+				
+				$this->shop->view['message'] = array(0, __("Variante erfolgreich angelegt.", "wpsg"));
+				
+				die($this->drawVarianten($_REQUEST['edit_id']));
+				
+			}
+			else if ($_REQUEST['cmd'] == 'wpsg_var_reorder')
+			{
+				
+				parse_str($_REQUEST['wpsg_reorder'], $wpsg_reorder);
+				
+				$vp_data = $this->loadVarianten($_REQUEST['edit_id']);
+				$vp_data_neu = array();
+				 				
+				foreach ($wpsg_reorder['variante'] as $order)
+				{
+					
+					if (array_key_exists($order, $vp_data))
+					{
+						
+						$vp_data_neu[] = $vp_data[$order];
+						unset($vp_data[$order]);
+						
+					}
+					else
+					{
+						
+						$this->shop->throwErrorCode('98_1');
+						
+					}
+					
+				}
+				
+				if (wpsg_isSizedArray($vp_data))
+				{
+						
+					$this->shop->throwErrorCode('98_2');
+						
+				}
+				
+				$this->saveVarianten($_REQUEST['edit_id'], $vp_data_neu);
+												
+				$this->shop->view['message'] = array(0, __('Variantenreihenfolge gespeichert.', 'wpsg'));
+				
+				die($this->drawVarianten($_REQUEST['edit_id']));
+				
+			}
+			else if ($_REQUEST['cmd'] == 'wpsg_vari_reorder')
+			{
+				
+				parse_str($_REQUEST['wpsg_reorder'], $wpsg_reorder);
+				
+				$vp_data = $this->loadVarianten($_REQUEST['edit_id']);
+				 
+				foreach ($wpsg_reorder as $var_key => $order)
+				{
+					
+					$var_id = preg_replace('/^variorder\_/', '', $var_key);
+					   
+					wpsg_array_reorder($vp_data[$var_id]['vari'], $order);
+					
+					if (wpsg_isSizedArray($vp_data[$var_id]['lang']))
+					{
+						
+						foreach ($vp_data[$var_id]['lang'] as $lang_key => $lang_vari)
+						{
+							
+							wpsg_array_reorder($vp_data[$var_id]['lang'][$lang_key]['vari'], $order);
+							
+						}
+						
+					}
+					
+				}
+
+				$this->saveVarianten($_REQUEST['edit_id'], $vp_data);
+				
+				$this->shop->view['message'] = array(0, __("Variationenreihenfolge gespeichert.", "wpsg"));
+				
+				die($this->drawVarianten($_REQUEST['edit_id']));
+				
+			}
+			else if ($_REQUEST['cmd'] == 'wpsg_vp_refreh')
+			{
+				
+				die($this->drawVarianten($_REQUEST['edit_id']));
+				
+			}
+			else if ($_REQUEST['cmd'] == "wpsg_vp_del")
+			{
+				
+				$vp_data = $this->loadVarianten($_REQUEST['edit_id']);
+				
+				unset($vp_data[$_REQUEST['var_id']]);
+				
+				$this->saveVarianten($_REQUEST['edit_id'], $vp_data);
+				
+				$this->shop->view['message'] = array(0, __("Variante wurde erfolgreich gelÃ¶scht.", "wpsg"));				
+				die($this->drawVarianten($_REQUEST['edit_id']));
+				
+			}
+			else if ($_REQUEST['cmd'] == "wpsg_vp_deaktiv")
+			{
+ 	
+				$vp_data = $this->loadVarianten($_REQUEST['edit_id']);
+				
+				if ($_REQUEST['status'] == "1")
+				{
+					
+					$vp_data[$_REQUEST['var_id']]['aktiv'] = 1;
+					$this->shop->view['message'] = array(0, __("Variante wurde erfolgreich aktiviert.", "wpsg"));
+						
+				}
+				else
+				{
+					
+					$vp_data[$_REQUEST['var_id']]['aktiv'] = 0;
+					$this->shop->view['message'] = array(0, __("Variante wurde erfolgreich deaktiviert.", "wpsg"));
+					
+				}
+				
+				$this->saveVarianten($_REQUEST['edit_id'], $vp_data); 				
+				die($this->drawVarianten($_REQUEST['edit_id']));				
+				
+			}
+			else if ($_REQUEST['cmd'] == "wpsg_vp_addVariation")
+			{
+				
+				$vp_data = $this->loadVarianten($_REQUEST['edit_id']);
+				
+				$vp_data[$_REQUEST['var_id']]['vari'][] = array(
+					"name" => $_REQUEST['vari_name'],
+					"preis" => wpsg_tf($_REQUEST['vari_preis']),
+					"aktiv" => "1"
+				);
+				
+				$this->shop->view['message'] = array(0, __("Variation wurde erfolgreich angelegt.", "wpsg"));
+				
+				$this->saveVarianten($_REQUEST['edit_id'], $vp_data);
+				die($this->drawVarianten($_REQUEST['edit_id']));
+				
+			}
+			else if ($_REQUEST['cmd'] == "wpsg_vp_vari_del")
+			{
+				
+				$vp_data = $this->loadVarianten($_REQUEST['edit_id']);
+				
+				unset($vp_data[$_REQUEST['var_id']]['vari'][$_REQUEST['vari_id']]);				
+				
+				if (wpsg_isSizedArray($vp_data[$_REQUEST['var_id']]['lang']))
+				{
+						
+					foreach ($vp_data[$_REQUEST['var_id']]['lang'] as $lang_key => $lang_vari)						
+					{
+						
+						unset($vp_data[$_REQUEST['var_id']]['lang'][$lang_key]['vari'][$_REQUEST['vari_id']]);
+						
+					}
+			
+				}
+				
+				$this->shop->view['message'] = array(0, __("Variation wurde erfolgreich gelÃ¶scht.", "wpsg"));
+				
+				$this->saveVarianten($_REQUEST['edit_id'], $vp_data);
+				die($this->drawVarianten($_REQUEST['edit_id']));
+				
+			}
+			else if ($_REQUEST['cmd'] == "wpsg_vp_vari_deaktiv")
+			{
+				
+				$vp_data = $this->loadVarianten($_REQUEST['edit_id']);
+				
+				if ($_REQUEST['status'] == "1")
+				{
+					
+					$vp_data[$_REQUEST['var_id']]['vari'][$_REQUEST['vari_id']]['aktiv'] = 1;
+					$this->shop->view['message'] = array(0, __("Variation wurde erfolgreich aktiviert.", "wpsg"));
+						
+				}
+				else
+				{
+					
+					$vp_data[$_REQUEST['var_id']]['vari'][$_REQUEST['vari_id']]['aktiv'] = 0;
+					$this->shop->view['message'] = array(0, __("Variation wurde erfolgreich deaktiviert.", "wpsg"));
+					
+				}
+				
+				$this->saveVarianten($_REQUEST['edit_id'], $vp_data);
+				die($this->drawVarianten($_REQUEST['edit_id']));
+				
+			}
+			else if ($_REQUEST['cmd'] == 'wpsg_var_setImageOrder')
+			{
+				
+				$vp_data = $this->loadVarianten($_REQUEST['edit_id']);
+				
+				if ($_REQUEST['vari_id'] == -1)
+				{
+					
+					$vp_data[$_REQUEST['var_id']]['picOrder'] = $_REQUEST['wpsg_reorder'];
+					
+				}
+				else 
+				{
+				
+					$vp_data[$_REQUEST['var_id']]['vari'][$_REQUEST['vari_id']]['picOrder'] = $_REQUEST['wpsg_reorder'];
+					
+				}
+				 
+				$this->saveVarianten($_REQUEST['edit_id'], $vp_data);
+				
+				die("1");
+				
+			}
+			else if ($_REQUEST['cmd'] == 'wpsg_vp_vari_setPic')
+			{
+								
+				$vp_data = $this->loadVarianten($_REQUEST['edit_id']);
+				
+				if ($_REQUEST['vari_id'] >= 0)
+				{
+					
+					$arPic = explode(",", $vp_data[$_REQUEST['var_id']]['vari'][$_REQUEST['vari_id']]['pic']);
+					
+					if (in_array($_REQUEST['pic'], $arPic))
+					{
+						unset($arPic[array_search($_REQUEST['pic'], $arPic)]);
+					}
+					else
+					{
+						$arPic[] = $_REQUEST['pic'];
+					}
+					
+					$vp_data[$_REQUEST['var_id']]['vari'][$_REQUEST['vari_id']]['pic'] = implode(",", $arPic);
+					
+				}
+				else
+				{
+					
+					$arPic = explode(",", $vp_data[$_REQUEST['var_id']]['pic']);
+					
+					if (in_array($_REQUEST['pic'], $arPic))
+					{
+						unset($arPic[array_search($_REQUEST['pic'], $arPic)]);
+					}
+					else
+					{
+						$arPic[] = $_REQUEST['pic'];
+					}
+					
+					$vp_data[$_REQUEST['var_id']]['pic'] = implode(",", $arPic);
+						
+				}
+				
+				$this->saveVarianten($_REQUEST['edit_id'], $vp_data);
+				
+				die("1");
+				
+			}
+			else if ($_REQUEST['cmd'] == 'wpsg_vp_vari_inlineEdit')
+			{
+				
+								
+				$vp_data = $this->loadVarianten($_REQUEST['edit_id']);
+				$product_data = $this->shop->cache->loadProduct($_REQUEST['edit_id']);
+				 
+				if ($_REQUEST['typ'] == "vari_name") 
+				{
+					
+					if (wpsg_isSizedString($_REQUEST['wpsg_lang']))
+					{
+						$vp_data[$_REQUEST['var_id']]['lang'][$_REQUEST['wpsg_lang']]['vari'][$_REQUEST['vari_id']]['name'] = wpsg_q($_REQUEST['value']);	
+					}
+					else
+					{					
+						$vp_data[$_REQUEST['var_id']]['vari'][$_REQUEST['vari_id']]['name'] = wpsg_q($_REQUEST['value']);
+					}
+					
+				}				
+				else if ($_REQUEST['typ'] == "vari_artnr") 
+				{
+					
+					if (wpsg_isSizedString($_REQUEST['wpsg_lang']))
+					{
+						$vp_data[$_REQUEST['var_id']]['lang'][$_REQUEST['wpsg_lang']]['vari'][$_REQUEST['vari_id']]['artnr'] = wpsg_q($_REQUEST['value']);	
+					}
+					else
+					{
+						$vp_data[$_REQUEST['var_id']]['vari'][$_REQUEST['vari_id']]['artnr'] = wpsg_q($_REQUEST['value']);
+					}
+					
+				}
+				else if ($_REQUEST['typ'] == "vari_preis")
+				{
+					
+					$_REQUEST['value'] = wpsg_tf($_REQUEST['value']);
+					$vp_data[$_REQUEST['var_id']]['vari'][$_REQUEST['vari_id']]['preis'] = $_REQUEST['value'];
+					$_REQUEST['value'] = wpsg_ff($_REQUEST['value'], $this->shop->get_option('wpsg_currency'));
+					
+				}
+				else if ($_REQUEST['typ'] == "vari_fmenge")
+				{
+						
+					$arFeinheiten = explode(',', $this->shop->get_option('wpsg_mod_fuellmenge_einheit'));
+					
+					$_REQUEST['value'] = wpsg_ff(wpsg_tf($_REQUEST['value']), $arFeinheiten[$product_data['feinheit']]);
+					$vp_data[$_REQUEST['var_id']]['vari'][$_REQUEST['vari_id']]['fmenge'] = wpsg_tf($_REQUEST['value']);
+						
+				}
+				else if ($_REQUEST['typ'] == "vari_weight")
+				{
+					
+					$_REQUEST['value'] = wpsg_tf($_REQUEST['value']);
+					$vp_data[$_REQUEST['var_id']]['vari'][$_REQUEST['vari_id']]['weight'] = $_REQUEST['value'];
+										
+				}
+				else if ($_REQUEST['typ'] == "vari_stock")
+				{
+		 
+					$_REQUEST['value'] = intval($_REQUEST['value']);
+					$vp_data[$_REQUEST['var_id']]['vari'][$_REQUEST['vari_id']]['stock'] = $_REQUEST['value'];
+		 			
+				}
+				else if ($_REQUEST['typ'] == "var_name")
+				{
+					
+					if (wpsg_isSizedString($_REQUEST['wpsg_lang']))
+					{
+						$vp_data[$_REQUEST['var_id']]['lang'][$_REQUEST['wpsg_lang']]['name'] = $_REQUEST['value'];	
+					}
+					else
+					{
+						$vp_data[$_REQUEST['var_id']]['name'] = $_REQUEST['value'];
+					}
+						
+				}
+				else if ($_REQUEST['typ'] == "var_preis")
+				{
+					
+					$_REQUEST['value'] = wpsg_tf($_REQUEST['value']);
+					$vp_data[$_REQUEST['var_id']]['preis'] = $_REQUEST['value'];
+					$_REQUEST['value'] = wpsg_ff($_REQUEST['value'], $this->shop->get_option('wpsg_currency'));
+					
+				}
+				else if ($_REQUEST['typ'] == "var_weight")
+				{
+					 
+					$_REQUEST['value'] = wpsg_tf($_REQUEST['value']);
+					$vp_data[$_REQUEST['var_id']]['weight'] = $_REQUEST['value'];
+					
+				}
+				else if ($_REQUEST['typ'] == "var_fmenge")
+				{
+					
+					$arFeinheiten = explode(',', $this->shop->get_option('wpsg_mod_fuellmenge_einheit'));
+						
+					$_REQUEST['value'] = wpsg_ff(wpsg_tf($_REQUEST['value']), $arFeinheiten[$product_data['feinheit']]);
+					$vp_data[$_REQUEST['var_id']]['fmenge'] = wpsg_tf($_REQUEST['value']);
+					
+				}
+				else if ($_REQUEST['typ'] == "var_artnr")
+				{
+					
+					if (wpsg_isSizedString($_REQUEST['wpsg_lang']))
+					{
+						$vp_data[$_REQUEST['var_id']]['lang'][$_REQUEST['wpsg_lang']]['artnr'] = wpsg_q($_REQUEST['value']);	
+					}
+					else
+					{
+						$vp_data[$_REQUEST['var_id']]['artnr'] = wpsg_q($_REQUEST['value']);
+					}
+					
+				}
+				else if ($_REQUEST['typ'] == "var_stock")
+				{
+	 
+					$_REQUEST['value'] = intval($_REQUEST['value']);
+					$vp_data[$_REQUEST['var_id']]['stock'] = $_REQUEST['value'];
+					
+				}
+				
+				$this->saveVarianten($_REQUEST['edit_id'], $vp_data);
+				
+				die(strval($_REQUEST['value']));
+				
+			}
+			
+		} // public function produkt_ajax()
+		
+		public function settings_save()
+		{
+			
+			$this->shop->update_option('wpsg_vp_showpic', $_REQUEST['wpsg_vp_showpic']);
+			$this->shop->update_option('wpsg_vp_detailview', $_REQUEST['wpsg_vp_detailview']);
+			$this->shop->update_option('wpsg_vp_showpic_width', $_REQUEST['wpsg_vp_showpic_width']);
+			$this->shop->update_option('wpsg_vp_showpic_height', $_REQUEST['wpsg_vp_showpic_height']);
+			$this->shop->update_option('wpsg_vp_replaceanr', $_REQUEST['wpsg_vp_replaceanr']);
+			$this->shop->update_option('wpsg_vp_imageselect_width', $_REQUEST['wpsg_vp_imageselect_width']);
+			$this->shop->update_option('wpsg_vp_imageselect_height', $_REQUEST['wpsg_vp_imageselect_height']);
+			$this->shop->update_option('wpsg_mod_vp_showProduct', $_REQUEST['wpsg_mod_vp_showProduct']);
+			$this->shop->update_option('wpsg_vp_imageselect_mode', $_REQUEST['wpsg_vp_imageselect_mode']);
+			
+		} // public function settings_save()
+		
+		public function settings_edit()
+		{
+			
+			return $this->shop->render(WPSG_PATH_VIEW.'/mods/mod_varianten/settings_edit.phtml');
+			
+		} // public function settings_edit()
+		
+		public function product_addedit_content(&$product_content, &$product_data)
+		{
+				
+			/*
+			// FÃŒr die Varianten brauche ich immer das original Array ...
+			$product_data['id'] = $this->db->fetchOne("SELECT `lang_parent` FROM `".WPSG_TBL_PRODUCTS."` WHERE `id` = '".wpsg_q($product_data['id'])."'");
+									
+			$this->shop->view['wpsg_mod_varianten']['data'] = $product_data;
+				
+			$product_content['wpsg_mod_varianten'] = array(
+					'title' => __('Varianten', 'wpsg'),
+					'content' => $this->shop->render(WPSG_PATH_VIEW.'/mods/mod_varianten/produkt_addedit_content.phtml', false)
+			);
+			*/
+				
+		}
+
+		/*
+		public function produkt_edit_content(&$produkt_data) 
+		{ 
+			
+			if (wpsg_isSizedString($_REQUEST['wpsg_lang']))
+			{
+				
+				// FÃŒr die Varianten brauche ich immer das original Array ...
+				$produkt_data['id'] = $this->db->fetchOne("SELECT `lang_parent` FROM `".WPSG_TBL_PRODUCTS."` WHERE `id` = '".wpsg_q($produkt_data['id'])."'");				
+				
+			}
+			
+			$this->shop->view['wpsg_mod_varianten']['data'] = $produkt_data;
+			 			
+			$this->shop->render(WPSG_PATH_VIEW.'/mods/mod_varianten/produkt_edit_content.phtml');	
+			
+		} // public function produkt_edit_content(&$produkt_data)
+		
+		*/
+		
+		public function produkt_edit_afterForm(&$product_id) { }
+		
+		public function wpsg_enqueue_scripts()
+		{
+			
+			if (!is_admin())
+			{
+							
+				wp_enqueue_script('wpsg_mod_varianten_js', $this->shop->getRessourceURL('mods/mod_varianten/varianten.js'));
+				
+				wp_localize_script('wpsg_mod_varianten_js', 'wpsg_vp_showpic', array('wpsg_vp_showpic' => $this->shop->get_option('wpsg_vp_showpic')));
+				
+			}
+			
+		} // public function wpsg_enqueue_scripts()
+		
+		public function basket_preInsert()
+		{
+
+			if (is_array($_REQUEST['wpsg_vp']) && sizeof($_REQUEST['wpsg_vp']) > 0)
+			{
+								
+				$var_key = 'vp_'.$_REQUEST['wpsg']['produkt_id'].'/';
+				
+				foreach ($_REQUEST['wpsg_vp'] as $var => $var_value)
+				{
+					
+					$var_key .= $var."_".$var_value.":";
+					
+				}
+				
+				$var_key = substr($var_key, 0, -1);
+
+				$_REQUEST['wpsg']['produkt_id'] = $var_key;
+				
+			}
+			
+		} // public function basket_preInsert()
+				 		
+		public function getProductAnr($product_key, &$anr) 
+		{ 
+
+			if ($this->isVariantsProductKey($product_key) && wpsg_isSizedInt($this->shop->get_option('wpsg_vp_replaceanr')))
+			{
+
+				$arVariantenInfo = $this->getVariantenInfoArray($product_key);
+				
+				if (wpsg_isSizedString($arVariantenInfo['akey'])) $anr = $arVariantenInfo['akey'];
+				
+				// Artikelnummer gebildet, keine weiteren Module betrachten
+				return -2;
+				
+			}
+			
+		} // public function getProductAnr($product_key, &$anr)
+				
+		public function basket_row(&$p, $i) 
+		{ 
+			
+			if (!preg_match('/vp_(.*)/', $p['id'])) return;
+			
+			$this->shop->view['variante'] = $this->getVariantenInfoArray($p['id']);
+			
+			$this->shop->view['i'] = $i;
+			
+			$this->shop->render(WPSG_PATH_VIEW.'/mods/mod_varianten/basket_row.phtml');
+			
+		} // public function basket_row(&$p)
+		
+		public function overview_row(&$p, $i)
+		{
+			
+			if (!preg_match('/vp_(.*)/', $p['id'])) return;
+			
+			$this->shop->view['variante'] = $this->getVariantenInfoArray($p['id']);
+			$this->shop->view['i'] = $i;
+			
+			return $this->shop->render(WPSG_PATH_VIEW.'/mods/mod_varianten/overview_row.phtml');
+			
+		} // public function overview_row(&$p, $i)
+		
+		public function order_view_row(&$p, $i) 
+		{ 
+			
+			if (!preg_match('/vp_(.*)/', $p['id'])) return;
+			
+			$this->shop->view['variante'] = $this->getVariantenInfoArray($p['id']);
+			$this->shop->view['i'] = $i;
+			
+			return $this->shop->render(WPSG_PATH_VIEW.'/mods/mod_varianten/order_view_row.phtml');
+			
+		} // public function order_view_row(&$p)
+				
+		public function mail_row($index, $produkt)
+		{
+			
+			if (preg_match('/vp_(.*)/', $produkt['id']))
+			{
+			
+				$this->shop->view['produkt'] = $produkt;
+				$this->shop->view['variante'] = $this->getVariantenInfoArray($produkt['id']);
+			
+				if ($this->shop->htmlMail === true)
+				{
+				
+					$this->shop->render(WPSG_PATH_VIEW.'/mods/mod_varianten/mail_row_html.phtml');
+					
+				}
+				else
+				{
+					
+					$this->shop->render(WPSG_PATH_VIEW.'/mods/mod_varianten/mail_row.phtml');
+				
+				}
+			
+			}
+			
+		} // public function mail_row($index, $produkt)
+		
+		public function admin_presentation() 
+		{ 
+			
+			echo wpsg_drawForm_Select('wpsg_mod_varianten_showvariprice', __('Variantenpreis im Produkttemplate anzeigen', 'wpsg'), array(
+				'0' => __('immer anzeigen', 'wpsg'),
+				'1' => __('nur wenn grÃ¶Ãer 0', 'wpsg'),
+				'2' => __('nie anzeigen', 'wpsg')
+			), $this->shop->get_option('wpsg_mod_varianten_showvariprice'));
+			
+		} // public function admin_presentation()
+		
+		public function admin_presentation_submit() 
+		{ 
+			
+			$this->shop->update_option('wpsg_mod_varianten_showvariprice', $_REQUEST['wpsg_mod_varianten_showvariprice']);	
+			
+		} // public function admin_presentation_submit()
+		
+		public function wpsg_mod_export_loadFields(&$arFields) 
+		{ 
+
+			$arFields[20]['fields']['product_vname'] = __('Name der Variante', 'wpsg');
+			$arFields[20]['fields']['product_vanr'] = __('Artikelnummer der Variante', 'wpsg');
+			
+		} // public function wpsg_mod_export_loadFields(&$arFields) 
+		
+		public function wpsg_mod_export_getValue(&$return, $field_value, $o_id, $p_id, $productkey, $product_index, $profil_separator) 
+		{ 
+
+			if ($this->isVariantsProductKey($productkey))
+			{
+
+				$var_info = $this->getVariantenInfoArray($productkey);
+				
+				$var_vname = $var_info['key'];
+				$var_vanr = $var_info['akey'];
+				
+			}
+			else
+			{
+				
+				// Damit das nicht definiert nicht im Export erscheint, fÃŒr Produkte die keine Variante sind 
+				
+				$var_vname = '';
+				$var_vanr = '';
+				
+			}
+			
+			switch ($field_value)
+			{
+			
+				case 'product_vname': $return = $var_vname; break;
+				case 'product_vanr': $return = $var_vanr; break;
+			
+			}
+			
+		} // public function wpsg_mod_export_getValue(&$return, $field_value, $o_id, $p_id, $productkey, $product_index, $profil_separator) 
+		
+		/* Modulfunktionen */ 
+		
+		/**
+		 * Gibt die MÃ¶glichken Bilder einer Variantenkombination zurÃŒck
+		 */
+		public function getKombiVariImages($var_key, $var_id = false)
+		{
+			
+			if (!$this->shop->hasMod('wpsg_mod_produktbilder')) return false;
+					
+			$arVarSelected = $this->getSetVariArray($var_key);			
+			$product_id = $this->shop->getProduktID($var_key);
+			$arVari = $this->loadVarianten($product_id);
+		
+			$handle = opendir($this->shop->callMod('wpsg_mod_produktbilder', 'getPicPath', array($product_id)));
+				
+			// Bilder des Produktes laden
+			$arBilder = array(); $i = 1;
+			while($filename = readdir($handle))
+			{
+		
+				$file = $this->shop->callMod('wpsg_mod_produktbilder', 'getPicPath', array($product_id)).'/'.$filename;
+		
+				if (is_file($file) && $file != "." && $file != "..") $arBilder[] = $filename; $i ++;
+		
+			}
+		
+			// Schauen ob ein Bild nach dem Dateinamen dabei ist
+			foreach ($arBilder as $bild)
+			{
+				
+				$image = false;
+				$filename = preg_replace("/\.([^\.]*)/", "", $bild);
+				if ($filename == "vp_".str_replace(":", "-", $var_key)) $image = $bild;
+					
+				if ($image !== false) return array($image);
+				
+			}
+		
+			foreach ($arVari as $var_key => $var)
+			{
+	
+				if (array_key_exists($var_key, $arVarSelected))
+				{
+
+					if ($var_id === $var_key) continue;
+					
+					if ($var['typ'] == "checkbox")
+					{
+							
+						if ($arVarSelected[$var_key] == "1")
+						{
+							$arBilder = array_intersect($arBilder, explode(",", $var['pic']));
+						}
+						else
+						{
+							$arBilder = array_diff($arBilder, explode(",", $var['pic']));
+						}
+							
+					}
+					else
+					{
+												
+						$arBilder = array_intersect($arBilder, explode(",", wpsg_getStr($var['vari'][$arVarSelected[$var_key]]['pic'])));
+							
+					}
+						
+				}
+					
+			}
+				
+			$arBilder = $this->checkPics($arBilder, $product_id);
+				
+			if (wpsg_isSizedArray($arBilder))
+			{
+	
+				return $arBilder;
+					
+			}
+			else
+			{
+				
+				return array();
+				
+			}
+		
+		}
+				
+		/**
+		 * Gibt das Bild fÃŒr die Grafikauswahl zurÃŒck
+		 * @param int $product_id
+		 * @param int $var_id
+		 * @param int $vari_id
+		 */
+		public function getImageSelectImage($product_id, $var_id, $vari_id, $vari_key)
+		{
+
+			$arVariBilder = $this->getVariImages($product_id, $var_id, $vari_id);			
+			$arVariPossibleBilder = $this->getKombiVariImages($vari_key, $var_id);
+			
+			$arBilderIntersect = array_intersect($arVariBilder, $arVariPossibleBilder);			
+			if (wpsg_isSizedArray($arBilderIntersect)) $arVariBilder = $arBilderIntersect;
+			
+			return array_shift($arVariBilder);
+			
+		} // public function getImageSelectImage($product_id, $var_id, $vari_id)
+		
+		/**
+		 * Gibt die Bilder als Array fÃŒr die Variation zurÃŒck
+		 * Beachtet die Reihenfolge die im Backend ÃŒber Drag&Drop definiert ist
+		 * @param int $var_id Key der Variante
+		 * @param int $vari_id Key der Variation
+		 */
+		public function getVariImages($product_id, $var_id, $vari_id)
+		{
+			
+			$vp_data = $this->loadVarianten($product_id);
+			
+			$arProductBilder = $this->shop->callMod('wpsg_mod_produktbilder', 'getProduktBilder', array($product_id));
+			 
+			$arReturn = array();
+			 
+			// Bilder in Reihenfolge
+			if ($vp_data[$var_id]['typ'] == 'checkbox' && wpsg_isSizedArray($vp_data[$var_id]['picOrder'])) $arReturn = $vp_data[$var_id]['picOrder']; 
+			else if (wpsg_isSizedArray($vp_data[$var_id]['vari'][$vari_id]['picOrder'])) $arReturn = $vp_data[$var_id]['vari'][$vari_id]['picOrder'];
+			
+			// PrÃŒfen ob die Bilder noch in Produktbilder Array drin sind
+			foreach ($arReturn as $k => $v)
+			{
+				
+				if (!in_array($v, $arProductBilder)) unset($arReturn[$k]);
+				else unset($arProductBilder[array_search($v, $arProductBilder)]);
+				
+			}
+			
+			// Bilder aus dem ProduktArray noch hinzufÃŒgen, die eventuell nicht im sortierten Array enthalten sind
+			foreach ($arProductBilder as $k => $v)
+			{
+				
+				$arReturn[] = $v;
+				
+			}
+			
+			$arImageSelect = array();
+			
+			// Sind die Bilder in der Variante ausgewÃ€hlt?
+			if (!is_admin())
+			{
+			
+				if ($vp_data[$var_id]['typ'] == 'checkbox' && wpsg_isSizedString($vp_data[$var_id]['pic'])) $arImageSelect = explode(',', $vp_data[$var_id]['pic']);
+				else if (wpsg_isSizedString($vp_data[$var_id]['vari'][$vari_id]['pic'])) $arImageSelect = explode(',', $vp_data[$var_id]['vari'][$vari_id]['pic']);
+			
+				foreach ($arReturn as $k => $v)
+				{
+				
+					if (!in_array($v, $arImageSelect)) unset($arReturn[$k]);
+				
+				}
+				
+			}
+						
+			return $arReturn;
+									
+		} // public function getVariImages($product_id, $var_id, $vari_id)
+				
+		/**
+		 * Gibt einen Array zurÃŒck, bei denen die SchlÃŒssel die Varianten sind und die Werte die gewÃ€hlten Variationen
+		 */
+		private function getSetVariArray($product_key)
+		{
+
+			if (!$this->isVariantsProductKey($product_key)) return array();
+			
+			$arVariSet = explode(':', preg_replace('/^vp_\d*\//', '', $product_key));
+			$arReturn = array();
+			
+			foreach ($arVariSet as $var_combi)
+			{
+				
+				$var_combi = explode('_', $var_combi);
+				$var = $var_combi[0];
+				$vari = $var_combi[1];
+				
+				$arReturn[$var] = $vari;
+				
+			}
+			
+			return $arReturn;
+			
+		}
+		
+		/**
+		 * Gibt true zurÃŒck, wenn der ÃŒbergebene Produktkey ein Varianten Produktkey ist. Sonst false.
+		 * @param \String $productkey
+		 */
+		public function isVariantsProductKey($productkey)
+		{
+			
+			if (preg_match('/^vp_\d+/', $productkey))
+			{
+				
+				return true;
+				
+			}
+			else 
+			{
+
+				return false;
+				
+			}
+			
+		} // public function isVariantsProductKey($productkey)
+		
+		/**
+		 * Ãbernimmt die Auswahl der Variante im Produkttemplate
+		 */
+		public function renderTemplate($product_key)
+		{
+			 
+			$produkt_id = $this->shop->getProduktId($product_key);
+			$produkt_data = $this->shop->cache->loadProduct($produkt_id);
+			$tax_value = $this->shop->getCalcTaxValue($produkt_data['mwst_key']);
+												
+			if ($this->shop->isOtherLang())
+			{
+			
+				$produkt_trans_id = $this->db->fetchOne("SELECT `id` FROM `".WPSG_TBL_PRODUCTS."` WHERE `lang_parent` = '".wpsg_q($produkt_id)."' AND `lang_code` = '".wpsg_q($this->shop->getCurrentLanguageCode())."'");
+					
+				if (wpsg_isSizedInt($produkt_trans_id)) $produkt_id = $produkt_trans_id;
+				
+			}
+	 
+			$vp_data = $this->loadVarianten($produkt_id);
+									
+			if (is_array($vp_data) && sizeof($vp_data) > 0)
+			{
+				
+				$this->shop->view['data']['vp_data'] = $vp_data;
+				$this->shop->view['wpsg_mod_varianten']['set'] = $this->getSetVariArray($product_key);
+				
+				// Rabattpreise vorkalkulieren
+				//$this->shop->callMod('wpsg_mod_discount', 'addDiscountToVari', array(&$produkt_id, &$this->shop->view['data']['vp_data']));
+				 
+				foreach ($this->shop->view['data']['vp_data'] as $k => $v)
+				{
+					
+					if ($v['typ'] == "checkbox")
+					{
+						
+						if (get_option("wpsg_vp_showpic") == "1" && wpsg_isSizedString($v['pic']))
+						{
+							
+							$this->shop->view['data']['vp_data'][$k]['showpic'] = $this->getImageSelectImage($produkt_id, $k, $k2, $product_key);
+						 							
+						}
+						
+						// Preis an Ausgabe im Frontend anpassen
+						if ($this->shop->getFrontendTaxview() == WPSG_NETTO && $this->shop->getBackendTaxview() == WPSG_BRUTTO) $this->shop->view['data']['vp_data'][$k]['preis'] = wpsg_calculatePreis($v['preis'], WPSG_NETTO, $tax_value);
+						 
+					}
+					else
+					{ 
+						
+						foreach ($v['vari'] as $k2 => $v2)
+						{
+
+							if (get_option("wpsg_vp_showpic") == "1" && wpsg_isSizedString($v2['pic']))
+							{
+							 								
+								$this->shop->view['data']['vp_data'][$k]['vari'][$k2]['showpic'] = $this->getImageSelectImage($produkt_id, $k, $k2, $product_key);
+								
+							}
+							
+							// Preis an Ausgabe im Frontend anpassen
+							if ($this->shop->getFrontendTaxview() == WPSG_NETTO && $this->shop->getBackendTaxview() == WPSG_BRUTTO) $this->shop->view['data']['vp_data'][$k]['vari'][$k2]['preis'] = wpsg_calculatePreis($v2['preis'], WPSG_NETTO, $tax_value);
+							
+						}
+						
+					}
+					
+				}
+					 
+								
+				return $this->shop->render(WPSG_PATH_VIEW.'/mods/mod_varianten/produkt.phtml', false);
+				
+			}
+			
+		} // public function renderTemplate($produkt_id)
+
+		/**
+		 * Zeichnet das Interface fÃŒr die Bearbeitung der Varianten
+		 */
+		public function drawVarianten($produkt_id)
+		{
+					    			
+			$this->shop->view['vp_data'] = $this->loadVarianten($produkt_id);
+			 
+			if ($this->shop->hasMod('wpsg_mod_fuellmenge'))
+			{
+				
+				$this->shop->view['vp_productdata'] = $this->shop->cache->loadProduct($produkt_id);
+				$this->shop->view['vp_arFeinheiten'] = explode(',', $this->shop->get_option('wpsg_mod_fuellmenge_einheit'));
+				
+			}
+
+			// Wenn es ÃŒber Ajax aufgerufen wird fehlt hier die ProduktID !
+			if (!isset($this->shop->view['data']['id'])) $this->shop->view['data']['id'] = $produkt_id;
+									 
+			return $this->shop->render(WPSG_PATH_VIEW.'/mods/mod_varianten/drawVarianten.phtml');
+						
+		} // public function drawVarianten($produkt_id)
+		
+		/**
+		 * Gibt den Namen der Variante zurÃŒck
+		 */
+		public function getVariantenName($vp_data, $var_id)
+		{
+			
+			$name = $vp_data[$var_id]['name'];
+			 
+			if (wpsg_isSizedString($_REQUEST['wpsg_lang']))
+			{
+				if ($vp_data[$var_id]['lang'][$_REQUEST['wpsg_lang']]['name'] != "")
+				{
+					$name = $vp_data[$var_id]['lang'][$_REQUEST['wpsg_lang']]['name'];
+				}
+			} 
+			
+			return ((trim($name) == "")?"----":$name);
+			
+		} // public function getVariantenName($vp_data, $v_id)
+		
+		/**
+		 * Gibt den Namen der Variation zurÃŒck
+		 */
+		public function getVariName($vp_data, $var_id, $vari_id)
+		{
+			
+			$name = $vp_data[$var_id]['vari'][$vari_id]['name'];	
+								
+			if (wpsg_isSizedString($_REQUEST['wpsg_lang']))
+			{
+				if ($vp_data[$var_id]['lang'][$_REQUEST['wpsg_lang']]['vari'][$vari_id]['name'] != "")
+				{
+					$name = $vp_data[$var_id]['lang'][$_REQUEST['wpsg_lang']]['vari'][$vari_id]['name'];
+				}
+			}
+		
+			return ((trim($name) == "")?"----":$name);
+			
+		} // public function getVariName($vp_data, $var_id, $vari_id)
+		
+		/**
+		 * Gibt true zurÃŒck, wenn der Preis im Produkttemplate angezeigt werden soll
+		 * Andersrum programmiert, da die Default Einstellung anzeigen ist
+		 */
+		public function showVariPrice($vari_price)
+		{
+			
+			switch ($this->shop->get_option('wpsg_mod_varianten_showvariprice'))
+			{
+				
+				case '1': // nur wenn grÃ¶Ãer 0
+					
+					if ($vari_price <= 0) return false;
+					
+					break;
+					
+				case '2': // nie anzeigen
+					
+					return false;
+					
+					break;
+				
+			}
+			
+			return true;
+			
+		} // public function showVariPrice($vari_price)
+		
+		/**
+		 * LÃ€dt die Varianteninformationen aus dem serialisierten Array
+		 * @param $noTrans Wird diese Variable auf true gesetzt, so wird die Ãbersetzung nicht geladen (Wie Backend) Wichtig wenn die Varianten wieder gespeichert werden sollen!
+		 */
+		public function loadVarianten($produkt_id, $noTrans = false, $noCache = false)
+		{
+			
+			if (is_admin()) $noCache = true;
+			
+			if (!$noCache && array_key_exists($produkt_id.$noTrans, $this->cache_variData)) return $this->cache_variData[$produkt_id.$noTrans];
+						 
+			// Ãbersetzung verarbeiten
+			if (is_admin() || $noTrans === true)
+			{
+				
+				$vp_data = @unserialize($this->db->fetchOne("SELECT `mod_varianten` FROM `".WPSG_TBL_PRODUCTS."` WHERE `id` = '".wpsg_q($produkt_id)."'"));
+				if (!is_array($vp_data)) $vp_data = array();
+				
+			} 
+			else
+			{
+			
+				// Im Frontend geht es nach der Sprache auf der der Shop aktuell lÃ€uft	
+				if ($this->shop->isOtherLang())			
+				{
+										
+					$parent_lang_id = $this->db->fetchOne("SELECT `lang_parent` FROM `".WPSG_TBL_PRODUCTS."` WHERE `id` = '".wpsg_q($produkt_id)."'");					
+					if (!wpsg_isSizedInt($parent_lang_id)) $parent_lang_id = $produkt_id;				
+					
+					$vp_data = @unserialize($this->db->fetchOne("SELECT `mod_varianten` FROM `".WPSG_TBL_PRODUCTS."` WHERE `id` = '".wpsg_q($parent_lang_id)."'"));
+					if (!is_array($vp_data)) $vp_data = array();
+					
+					foreach ($vp_data as $k => $v)
+					{
+	
+						// Den Namen der Variante auf die aktuelle Sprache stellen
+						if (wpsg_isSizedString($vp_data[$k]['lang'][$this->shop->getCurrentLanguage()]['name'])) $vp_data[$k]['name'] = $vp_data[$k]['lang'][$this->shop->getCurrentLanguage()]['name'];
+						
+						if (wpsg_isSizedArray($vp_data[$k]['vari']))
+						{
+							
+							foreach ($vp_data[$k]['vari'] as $k2 => $vari)
+							{
+								
+								// Den Namen der Variation auf die aktuelle Sprache korrigieren
+								if (wpsg_isSizedString($vp_data[$k]['lang'][$this->shop->getCurrentLanguage()]['vari'][$k2]['name'])) $vp_data[$k]['vari'][$k2]['name'] = $vp_data[$k]['lang'][$this->shop->getCurrentLanguage()]['vari'][$k2]['name'];
+								
+							}
+							
+						}
+						
+					}
+					
+				}
+				else
+				{
+					
+					$vp_data = @unserialize($this->db->fetchOne("SELECT `mod_varianten` FROM `".WPSG_TBL_PRODUCTS."` WHERE `id` = '".wpsg_q($produkt_id)."'"));
+					if (!is_array($vp_data)) $vp_data = array();
+					
+				}
+				
+			}
+			 						
+			$this->cache_variData[$produkt_id.$noTrans] = $vp_data; 
+			
+			return $vp_data;
+			
+		} // public function loadVarianten($produkt_id)
+		
+		/**
+		 * LÃ€dt einen Array mit den fÃŒr das Frontend mÃ¶glichen Varianten/Variationen
+		 */
+		public function laodPossibleVarianten($produkt_id, $noTrans = false)
+		{
+			
+			$arVariData = $this->loadVarianten($produkt_id, $noTrans);
+			
+			foreach ($arVariData as $var_key => $var)
+			{
+				
+				if ($var['typ'] == 'checkbox')
+				{
+					
+					if ($var['aktiv'] != '1') unset($arVariData[$var_key]);
+					
+				}
+				else 
+				{
+					 
+					if ($var['aktiv'] != '1')
+					{
+							
+						unset($arVariData[$var_key]);
+							
+					}
+					else
+					{
+						
+						$akt_vari = false;
+						
+						foreach ($var['vari'] as $vari_key => $vari)
+						{
+							
+							if ($vari['aktiv'] != '1' || ($this->shop->hasMod('wpsg_mod_stock') && !wpsg_isSizedInt($vari['stock'])))
+							{
+								
+								unset($arVariData[$var_key]['vari'][$vari_key]);
+								
+							}
+							else
+							{
+								
+								$akt_vari = true;
+								
+							}
+							
+						}
+						
+						if ($akt_vari === false)
+						{
+							
+							unset($arVariData[$var_key]);
+							
+						}
+						
+					}
+					
+				}
+				
+			}
+			
+			return $arVariData;
+			
+		} // public function laodPossibleVarianten($produkt_id, $noTrans)
+		
+		/**
+		 * Gibt den Warenbestand fÃŒr ein Produkt anhand seiner Variantenkonfiguration zurÃŒck
+		 */
+		public function getStockForVarianten($vari_key)
+		{
+			
+			
+			$produkt_id = preg_replace('/(^vp_)|(\/(.*)$)/', '', $vari_key);
+			$vari_teil = preg_replace('/(.*)\//', '', $vari_key);
+			
+			$vari_data = $this->loadVarianten($produkt_id);			 
+			$arVarianten = explode(":", $vari_teil);
+			 
+			$arStock = array();
+			
+			foreach ((array)$arVarianten as $variante)
+			{
+				
+				$arVariante = explode("_", $variante);
+				
+				$variante_id = $arVariante[0];
+				$vari_id = $arVariante[1];
+				
+				if ($vari_data[$variante_id]['typ'] == 'checkbox')
+				{
+					
+					// Checkbox betrachte ich gar nicht mehr
+					// Nur betrachten Wenn Checkbox aktiviert ist
+					//if ($vari_id == '1') $arStock[] = $vari_data[$variante_id]['stock'];
+						
+				}
+				else
+				{
+					
+					$arStock[] = $vari_data[$variante_id]['vari'][$vari_id]['stock'];
+					
+				}
+				
+			}
+ 
+			if (!wpsg_isSizedArray($arStock))
+			{
+				
+				// Hier greife ich jetzt auf den Produktbestand zurÃŒck
+				// Tritt auf, wenn z.B. nur die Checkboxvariante definiert ist
+				
+				$product_data = $this->shop->cache->loadProduct($produkt_id);				
+				return $product_data['stock'];
+				
+			}
+			
+			return min($arStock);
+			 
+		} // public function getStockForVarianten($vari_key)
+		
+		/**
+		 * Reduziert den Bestand der Variationen in dem Array
+		 */
+		public function reduceStock($produkt_key, $menge, $reduce = true)
+		{
+	
+			$produkt_id = preg_replace('/(^vp_)|(\/(.*)$)/', '', $produkt_key);
+			$vari_teil = preg_replace('/(.*)\//', '', $produkt_key);			
+			$arVarianten = explode(':', $vari_teil);
+			
+			$vari_data = $this->loadVarianten($produkt_id, true, true);
+  
+			foreach ($arVarianten as $variante)
+			{
+				
+				$arVariante = explode('_', $variante);
+				$variante_id = $arVariante[0];
+				$vari_id = $arVariante[1];
+				
+				if ($reduce === true)
+				{
+				
+					$vari_data[$variante_id]['vari'][$vari_id]['stock'] -= $menge;
+					
+				}
+				else
+				{
+				
+					$vari_data[$variante_id]['vari'][$vari_id]['stock'] += $menge;
+
+				}
+								
+			}
+			
+			// Array zurÃŒckspeichern
+			$this->saveVarianten($produkt_id, $vari_data);
+						
+		} // public function reduceStock($produkt_id, $menge)
+		
+		/**
+		 * Gibt einen VariantenschlÃŒssel fÃŒr die Standard Variantenauswahl zurÃŒck
+		 */
+		public function getDefaultVariKey($product_key)
+		{
+			 
+			if (is_numeric($product_key))
+			{
+
+				$arVariData = $this->laodPossibleVarianten($product_key, true);
+				
+				if (!wpsg_isSizedArray($arVariData)) return $product_key;
+				
+				$arVariDefault = array();
+				 
+				foreach ($arVariData as $var_key => $var)
+				{
+
+					$first_vari_key = '0';
+					
+					if (wpsg_isSizedArray($var['vari']))
+					{
+						
+						$arKeys = array_keys($var['vari']);
+						$first_vari_key = array_shift($arKeys);
+						
+					}
+										
+					$arVariDefault[] = $var_key.'_'.$first_vari_key;
+					
+				}
+
+				return 'vp_'.$product_key.'/'.implode(':', $arVariDefault); 
+				
+			}
+			else
+			{
+				
+				// Ist schon ein ProduktschlÃŒssel
+				return $product_key;
+				
+			}
+			
+		} // public function getDefaultVariKey($product_id)
+		
+		/**
+		 * Speichert die Varianten
+		 */
+		public function saveVarianten($produkt_id, $vp_data)
+		{
+
+			$vp_data = $this->clearArrayForSerialization($vp_data);
+			
+			$this->db->UpdateQuery(WPSG_TBL_PRODUCTS, array(
+				"mod_varianten" => wpsg_q(serialize($vp_data))
+			), "`id` = '".wpsg_q($produkt_id)."'");
+		  
+		} // public function saveVarianten($produkt_id, $vp_data)
+
+		/**
+		 * Liest die Informationen anhand eines VariantenschlÃŒssels aus
+		 */
+		public function getVariantenInfoArray($vari_key)
+		{
+			
+			$produkt_id = preg_replace('/(vp_)|(\/(.*))/', '', $vari_key);								
+			$arVari = explode(':', preg_replace('/vp_'.$produkt_id.'\//', '', $vari_key));
+	
+			$vp_data = $this->loadVarianten($produkt_id);
+	
+			$arKey = array();
+			$arAKey = array();
+			$arPics = array();
+			
+			$arReturn = array();
+			
+			if ($this->shop->hasMod('wpsg_mod_fuellmenge')) $arReturn['fmenge'] = 0;
+			if ($this->shop->hasMod('wpsg_mod_weight')) $arReturn['weight'] = 0;
+			
+			foreach ($arVari as $var_key)
+			{
+				
+				$var_id = preg_replace('/\_(.*)/', '', $var_key);
+				$var_value = preg_replace('/(.*)\_/', '', $var_key);
+			
+				if ($vp_data[$var_id]['typ'] == 'checkbox')
+				{
+					
+					$arPicsVariante = array();
+						
+					if (isset($vp_data[$var_id]['pic']))
+					{
+					
+						$arPicsVariante = wpsg_trim(explode(',', $vp_data[$var_id]['pic']));						
+																	
+					}
+					
+					if ($var_value == '1')
+					{  
+					 
+						$r = array(
+							'name' => $vp_data[$var_id]['name'],
+							'preis' => $vp_data[$var_id]['preis'],
+							'artnr'	=> $vp_data[$var_id]['vari'][2]['artnr'],
+							'pics' => $arPicsVariante
+						);
+						 
+						if ($this->shop->hasMod('wpsg_mod_weight') && wpsg_isSizedInt($vp_data[$var_id]['weight']))
+						{
+							
+							$r['weight'] = $vp_data[$var_id]['weight'];
+							$arReturn['weight'] += $r['weight'];
+							
+						}						
+
+						if ($this->shop->hasMod('wpsg_mod_fuellmenge') && wpsg_isSizedInt($vp_data[$var_id]['fmenge']))
+						{
+							
+							$r['fmenge'] = $vp_data[$var_id]['fmenge'];
+							$arReturn['fmenge'] += $r['fmenge'];
+							
+						}
+												
+						$arReturn[] = $r;
+						
+						$arKey[] = $vp_data[$var_id]['name'];
+						
+						$arPics = array_intersect($arPics, $arPicsVariante);
+						
+					}
+					else
+					{
+						
+						// Checkbox ist nicht markiert
+						//$arPics = array_unique(array_merge($arPics, $arPicsVariante));
+						
+					}
+					
+				}				
+				else 
+				{
+					
+					$arPicsVariante = array();
+					
+					if (isset($vp_data[$var_id]['vari'][$var_value]['pic']))
+					{
+						
+						$arPicsVariante = wpsg_trim(explode(',', $vp_data[$var_id]['vari'][$var_value]['pic']));							
+						$arPics = array_unique(array_merge($arPics, $arPicsVariante));
+						
+					}
+					 
+					$r = array(
+						'name' 	=> $vp_data[$var_id]['name'],
+						'value' => $vp_data[$var_id]['vari'][$var_value]['name'],
+						'preis'	=> $vp_data[$var_id]['vari'][$var_value]['preis'],
+						'artnr'	=> @$vp_data[$var_id]['vari'][$var_value]['artnr'],
+						'pics' => $arPicsVariante
+					);
+					
+					if ($this->shop->hasMod('wpsg_mod_weight') && wpsg_isSizedInt($vp_data[$var_id]['vari'][$var_value]['weight']))
+					{
+					
+						$r['weight'] = $vp_data[$var_id]['vari'][$var_value]['weight'];
+						$arReturn['weight'] += $r['weight'];
+					
+					}
+					
+					if ($this->shop->hasMod('wpsg_mod_fuellmenge') && wpsg_isSizedInt($vp_data[$var_id]['vari'][$var_value]['fmenge']))
+					{
+						
+						$r['fmenge'] = $vp_data[$var_id]['vari'][$var_value]['fmenge'];
+						$arReturn['fmenge'] += $r['fmenge'];
+						
+					}
+					
+					$arReturn[] = $r;
+					
+					$arKey[] = $vp_data[$var_id]['vari'][$var_value]['name'];
+					$arAKey[] = @$vp_data[$var_id]['vari'][$var_value]['artnr'];
+										
+				}
+				
+			}
+			
+			$arReturn['key'] = implode(' / ', $arKey);
+			$arReturn['akey'] = implode(' / ', $arAKey);
+			$arReturn['pics'] = array_unique($arPics);
+
+			return $arReturn;			
+			
+		} // public function getVariantenText($vari_key)
+				
+		private function checkPics(&$arPics, $produkt_id)
+		{
+			
+			foreach ($arPics as $k => $v)
+			{
+				
+				if (!file_exists($this->shop->callMod('wpsg_mod_produktbilder', 'getPicPath', array($produkt_id)).'/'.$v))
+				{
+					unset($arPics[$k]);
+				}
+				
+			}
+			
+			return $arPics;
+			
+		} // private function checkPics($arPics, $produkt_id)
+				
+		private function clearArrayForSerialization($ar)
+		{
+			
+			foreach ((array)$ar as $k => $v)
+			{
+				
+				if (wpsg_isSizedArray($v))
+				{
+					
+					$ar[$k] = $this->clearArrayForSerialization($v);
+					
+				}
+				else
+				{
+					
+					$ar[$k] = preg_replace('/\'|\`|\ÂŽ|\"/', '', $v);					
+					
+				}
+				
+			}
+			
+			return $ar;
+			
+		} // private function clearArrayForSerialization($ar)
+		
+	} // class wpsg_mod_varianten extends wpsg_mod_basic
+
+?>
Index: /system/intern/views/mod_varianten/basket_row.phtml
===================================================================
--- /system/intern/views/mod_varianten/basket_row.phtml	(revision 5987)
+++ /system/intern/views/mod_varianten/basket_row.phtml	(revision 5987)
@@ -0,0 +1,23 @@
+ <?php
+
+	/**
+	 * Render ein Variantenprodukt im Warenkorb (basket.phtml)
+	 */
+
+?>
+<?php //wpsg_debug($this->view['variante']) ?> 
+<tr class="wpsg_<?php echo (($this->view['i'] % 2 == 0)?'odd':'even'); ?>">
+	<td><?php echo __('Variante', 'wpsg'); ?>:</td>
+	<td colspan="<?php echo ((sizeof($this->view['basket']['mwst']) > 1 || $this->get_option('wpsg_showMwstAlways') == '1')?'3':'2'); ?>">
+		<?php if (get_option('wpsg_vp_detailview') == 1) { ?>
+		<?php foreach ($this->view['variante'] as $vari => $value) { ?>
+		<?php if (is_numeric($vari)) { ?>
+		<?php echo $value['name'] ?>: <?php echo $value['value'] ?>; <?php echo __('Art. Nr.', 'wpsg').': '.$value['artnr'] ?>; <?php echo $value['preis'] ?> <?php echo $this->get_option('wpsg_currency') ?>
+		<br />
+		<?php } ?>
+		<?php } ?>							
+		<?php } else { ?>
+		<?php echo $this->view['variante']['key']; ?>
+		<?php } ?>
+	</td>
+</tr>
Index: /system/intern/views/mod_varianten/drawVarianten.phtml
===================================================================
--- /system/intern/views/mod_varianten/drawVarianten.phtml	(revision 5987)
+++ /system/intern/views/mod_varianten/drawVarianten.phtml	(revision 5987)
@@ -0,0 +1,535 @@
+<?php
+
+	/**
+	 * Template fÃŒr das Interface der Varianten im Produktbackend
+	 * Sollte nicht angepasst werden
+	 */
+
+?> 
+<?php if (isset($this->view['message'])) { ?>
+<?php if ($this->view['message'][0] == "1") { ?>
+<span style="color:red;"><?php echo $this->view['message'][1]; ?></span><br /><br />
+<?php } else { ?>
+<span style="color:green;"><?php echo $this->view['message'][1]; ?></span><br /><br />
+<?php } ?>
+<?php } ?>
+   
+<?php if (sizeof($this->view['vp_data']) <= 0) { ?>
+<p><?php echo __("Es wurden noch keine Varianten zu diesem Produkt angelegt.", "wpsg"); ?></p>
+<?php } else { ?>
+ 
+	<div class="var_order_wrap">
+	<?php $i = 0; foreach ($this->view['vp_data'] as $k => $var) { $i ++; ?>
+		<div id="variante_<?php echo $k; ?>" class="var_order">
+		
+			<div style="font-weight:bold; display:inline;">
+				<span class="sortable_handler"><?php echo $k.": "; ?></span>
+				<div class="wpsg_editable" id="varname_<?php echo $k; ?>" style="font-weight:bold;"><?php echo $this->callMod('wpsg_mod_varianten', 'getVariantenName', array($this->view['vp_data'], $k)); ?></div>				
+				<?php if ($var['typ'] == "checkbox") { ?>
+				(<?php echo __("Checkbox", "wpsg"); ?>)
+				<?php } else if ($var['typ'] == "select") { ?>
+				(<?php echo __("Selectbox", "wpsg"); ?>)
+				<?php } else if ($var['typ'] == "radio") { ?>
+				(<?php echo __("Radio Auswahl", "wpsg"); ?>)
+				<?php } else if ($var['typ'] == 'image') { ?>
+				(<?php echo __('Grafikauswahl', 'wpsg'); ?>)
+				<?php } ?>
+			</div>
+			
+			<?php if (!wpsg_isSizedString($_REQUEST['wpsg_lang'])) { ?>
+				<a href="#" title="<?php echo __('Variante lÃ¶schen', 'wpsg'); ?>" onclick="return wpsg_vp_del(<?php echo $k; ?>);" style="float:right; margin-left:10px;"><img src="<?php echo $this->getRessourceURL('gfx/bin.png'); ?>" alt="<?php echo __("Variante lÃ¶schen", "wpsg"); ?>" /></a>
+				<?php if ($var['aktiv'] == "1") { ?>
+				<a href="#" title="<?php echo __('Variante deaktivieren', 'wpsg'); ?>" onclick="return wpsg_vp_deaktiv(<?php echo $k; ?>, 0);" style="float:right; margin-left:10px;"><img src="<?php echo $this->getRessourceURL('gfx/hide.png'); ?>" alt="<?php echo __('Variante deaktivieren', 'wpsg'); ?>" /></a>
+				<?php } else { ?>
+				<a href="#" title="<?php echo __('Variante aktivieren', 'wpsg'); ?>" onclick="return wpsg_vp_deaktiv(<?php echo $k; ?>, 1);" style="float:right; margin-left:10px;"><img src="<?php echo $this->getRessourceURL('gfx/show.png'); ?>" alt="<?php echo __('Variante aktivieren', 'wpsg'); ?>" /></a>
+				<?php } ?><br />
+			<?php } ?>
+			
+			<script type="text/javascript">
+
+				jQuery("#varname_<?php echo $k; ?>").wpsg_editable("<?php echo WPSG_URL_WP; ?>wp-admin/admin.php?page=wpsg-Produkt&action=ajax&mod=wpsg_mod_varianten&cmd=wpsg_vp_vari_inlineEdit&noheader=1", {
+					submitdata: {  
+			    		typ: "var_name",
+			    		var_id: <?php echo $k; ?>,
+			    		edit_id: <?php echo $this->view['data']['id']; ?>,
+					    <?php if (wpsg_isSizedString($_REQUEST['wpsg_lang'])) { ?>
+					    wpsg_lang: "<?php echo $_REQUEST['wpsg_lang']; ?>",
+					    <?php } ?> 
+					},
+					submit: '<?php echo __('Speichern', 'wpsg'); ?>',
+					placeholder: '<?php echo __('Zum Bearbeiten anklicken ...', 'wpsg'); ?>',
+					indicator: '<?php echo __('Speicher ...', 'wpsg'); ?>',
+			    	tooltip: '<?php echo __('Zum Bearbeiten anklicken ...', 'wpsg'); ?>'
+				});
+			
+			</script>
+			
+			<?php if ($var['typ'] == "checkbox") { ?>
+			
+			<table style="width:100%;">
+				<tr>
+					<th style="width:34px;">&nbsp;</th>
+					<th class="col_variname"></th>
+				<!--<th class="col_variartnr"><?php echo __("Varianten Art. Nr.", "wpsg"); ?></th> -->
+					<th class="col_preis"><?php echo __("Preis", "wpsg"); ?></th> 
+					<?php if ($this->hasMod('wpsg_mod_weight')) { ?>	
+					<th class="col_weight" style="width:75px; text-align:left;"><?php echo __("Gewicht", "wpsg"); ?></th>
+					<?php } ?>					
+					<?php if ($this->hasMod('wpsg_mod_stock') && $var['typ'] != 'checkbox') { ?>
+					<th class="col_stock"><?php echo __("Bestand", "wpsg"); ?></th>
+					<?php } ?>
+					<th></th>	 						
+				</tr>
+				<tr style="line-height:25px;">
+					<td></td>
+					<td></td>
+				<!-- <td class="wpsg_editable col_variartnr" id="variartnr_<?php echo $k; ?>"><?php echo ($var['artnr'] != "")? $var['artnr']:''; ?></td> -->
+					<td class="wpsg_editable col_preis" id="varpreis_<?php echo $k; ?>"><?php echo (($var['preis'] != "")?wpsg_ff($var['preis'], $this->get_option('wpsg_currency')):wpsg_ff(0, $this->get_option('wpsg_currency'))); ?></td>
+					<?php if ($this->hasMod('wpsg_mod_weight')) { $ModCol ++; ?>
+					<td class="wpsg_editable col_weight" id="varweight_<?php echo $k; ?>"><?php echo (($var['weight'] != "")?$var['weight']:"0"); ?></td>
+					<?php } ?>
+					<?php if ($this->hasMod('wpsg_mod_stock') && $var['typ'] != 'checkbox') { $ModCol ++;  ?>
+					<td class="wpsg_editable col_stock" id="varstock_<?php echo $k; ?>">						
+					<?php echo (($var['stock'] != "")?intval($var['stock']):"0"); ?>
+					</td>
+					<?php } ?> 
+				</tr>
+				<?php if ($this->hasMod('wpsg_mod_produktbilder')) { ?>
+				<tr class="wpsg_mod_varianten_productimage_row">
+					<td colspan="2">&nbsp;</td>
+					<td style="padding-bottom:10px;" colspan="<?php echo $ModCol + 3; ?>" id="wpsg_mod_varianten_productimage_<?php echo $k; ?>">
+					
+				   		<?php $j = 0; foreach ((array)$this->callMod('wpsg_mod_varianten', 'getVariImages', array($this->view['data']['id'], $k, -1)) as $file) { $j ++; $url_tn = $this->callMod('wpsg_mod_produktbilder', 'makeTn', array($this->view['data']['id'], $file, 25, 25, 's')); ?>
+				   		<a class="<?php echo ((in_array($file, explode(",", $var['pic'])))?'mark':''); ?> pic" id="<?php echo $file; ?>" onclick="return wpsg_vp_vari_setPic(this, <?php echo $k; ?>, -1, '<?php echo $file; ?>', <?php echo $j; ?>);" href=""><img src="<?php echo $url_tn; ?>" alt="" /></a>
+				   		<?php } ?>					   		
+				   								 
+					</td>
+					<td>
+					
+						<?php if (wpsg_isSizedInt($j)) { ?>
+				   		<script type="text/javascript">/* <![CDATA[ */
+
+				   			jQuery(document).ready(function() {   
+
+						   		jQuery('#wpsg_mod_varianten_productimage_<?php echo $k; ?>').sortable( {
+									items: 'a',
+									helper : 'clone',  
+									update: function(event, ui) {
+
+										wpsg_vp_ajaxloading_show();
+										
+										var wpsg_reorder = jQuery(this).sortable('toArray');
+
+										jQuery.ajax( {			
+											url: '<?php echo WPSG_URL_WP; ?>wp-admin/admin.php?page=wpsg-Produkt&action=ajax&mod=wpsg_mod_varianten&cmd=wpsg_var_setImageOrder&noheader=1&edit_id=<?php echo $this->view['data']['id']; ?>',
+											async: false,
+											data: {				
+												'var_id': <?php echo $k; ?>,
+												'vari_id': -1,
+												'wpsg_reorder': wpsg_reorder
+											},
+											success: function(data) { 
+
+												if (data != '1') alert(data); 
+												wpsg_vp_ajaxloading_hide();
+
+											}
+										} );
+																					 
+									}			
+								} ).disableSelection();
+
+				   			} );
+				   		
+					   		/* ]]> */</script>
+				   		
+				   		<?php } ?>
+					
+					</td>
+				</tr>
+				<?php } ?>
+			</table>
+			 
+			<?php if (!wpsg_isSizedString($_REQUEST['wpsg_lang'])) { ?>
+			<script type="text/javascript">
+
+				jQuery("#variartnr_<?php echo $k; ?>").wpsg_editable("<?php echo WPSG_URL_WP; ?>wp-admin/admin.php?page=wpsg-Produkt&action=ajax&mod=wpsg_mod_varianten&cmd=wpsg_vp_vari_inlineEdit&noheader=1", {
+					submitdata: {  
+			    		typ: "var_artnr",
+			    		edit_id: <?php echo $this->view['data']['id']; ?>,
+			    		var_id: <?php echo $k; ?>,
+	    				<?php if (wpsg_isSizedString($_REQUEST['wpsg_lang'])) { ?>
+					    wpsg_lang: "<?php echo $_REQUEST['wpsg_lang']; ?>",
+					    <?php } ?> 
+					},
+					submit: '<?php echo __('Speichern', 'wpsg'); ?>',
+					placeholder: '<?php echo __('Zum Bearbeiten anklicken ...', 'wpsg'); ?>',
+					indicator: '<?php echo __('Speicher ...', 'wpsg'); ?>',
+			    	tooltip: '<?php echo __('Zum Bearbeiten anklicken ...', 'wpsg'); ?>'
+				});
+
+				jQuery("#varpreis_<?php echo $k; ?>").wpsg_editable("<?php echo WPSG_URL_WP; ?>wp-admin/admin.php?page=wpsg-Produkt&action=ajax&mod=wpsg_mod_varianten&cmd=wpsg_vp_vari_inlineEdit&noheader=1", {
+					submitdata: {									
+						typ: "var_preis",
+						edit_id: <?php echo $this->view['data']['id']; ?>,
+						var_id: <?php echo $k; ?>
+					},
+					submit: '<?php echo __('Speichern', 'wpsg'); ?>',
+					placeholder: '<?php echo __('Zum Bearbeiten anklicken ...', 'wpsg'); ?>',
+					indicator: '<?php echo __('Speicher ...', 'wpsg'); ?>',
+			    	tooltip: '<?php echo __('Zum Bearbeiten anklicken ...', 'wpsg'); ?>'
+				});
+
+				<?php if ($this->hasMod('wpsg_mod_weight')) { ?>
+
+				jQuery("#varweight_<?php echo $k; ?>").wpsg_editable("<?php echo WPSG_URL_WP; ?>wp-admin/admin.php?page=wpsg-Produkt&action=ajax&mod=wpsg_mod_varianten&cmd=wpsg_vp_vari_inlineEdit&noheader=1", {
+					submitdata: {									
+						typ: "var_weight",
+						edit_id: <?php echo $this->view['data']['id']; ?>,
+						var_id: <?php echo $k; ?>
+					},
+					submit: '<?php echo __('Speichern', 'wpsg'); ?>',
+					placeholder: '<?php echo __('Zum Bearbeiten anklicken ...', 'wpsg'); ?>',
+					indicator: '<?php echo __('Speicher ...', 'wpsg'); ?>',
+			    	tooltip: '<?php echo __('Zum Bearbeiten anklicken ...', 'wpsg'); ?>'
+				});
+				
+				<?php } ?>
+
+				<?php if ($this->hasMod('wpsg_mod_stock') && $var['typ'] != 'checkbox') { ?>
+
+				jQuery("#varstock_<?php echo $k; ?>").wpsg_editable("<?php echo WPSG_URL_WP; ?>wp-admin/admin.php?page=wpsg-Produkt&action=ajax&mod=wpsg_mod_varianten&cmd=wpsg_vp_vari_inlineEdit&noheader=1", {
+					submitdata: {
+						typ: "var_stock",	
+						edit_id: <?php echo $this->view['data']['id']; ?>,
+						var_id: <?php echo $k; ?>
+					},
+					submit: '<?php echo __('Speichern', 'wpsg'); ?>',
+					placeholder: '<?php echo __('Zum Bearbeiten anklicken ...', 'wpsg'); ?>',
+					indicator: '<?php echo __('Speicher ...', 'wpsg'); ?>',
+			    	tooltip: '<?php echo __('Zum Bearbeiten anklicken ...', 'wpsg'); ?>'
+				});
+				
+				<?php } ?>
+			
+			</script>
+			<?php } ?>
+			
+			<?php } else { ?>
+			<table style="width:100%;" class="wpsg_mod_varianten_orderwrap wpsg_mod_varianten_orderwrap_<?php echo $var['typ']; ?>">
+				<tbody>
+					<?php if (sizeof((array)$var['vari']) > 0) { ?>
+					<tr>
+						<th style="width:15px;">&nbsp;</th>
+						<th style="width:15px;">&nbsp;</th>
+						<th class="col_variname"></th>
+						<th class="col_variartnr"><?php echo __("Varianten Art. Nr.", "wpsg"); ?></th>					
+						<th class="col_preis"><?php echo __("Preis", "wpsg"); ?></th>
+						<?php if ($this->hasMod('wpsg_mod_fuellmenge')) { ?>
+						<th class="col_fmenge"><?php echo __('FÃŒllmenge', 'wpsg'); ?></th>
+						<?php } ?>
+						<?php if ($this->hasMod('wpsg_mod_weight')) { ?>
+						<th style="width:75px; text-align:left;"><?php echo __("Gewicht", "wpsg"); ?></th>
+						<?php } ?>
+						<?php if ($this->hasMod('wpsg_mod_stock')) { ?>
+						<th class="col_stock"><?php echo __("Bestand", "wpsg"); ?></th>
+						<?php } ?>
+						<th></th>
+						<th></th>
+					</tr>
+					<?php } ?>
+					<?php foreach ((array)$var['vari'] as $kv => $vari) { $ModCol = 0; ?>
+					<tr style="line-height:25px;" id="<?php echo 'variorder_'.$k.'_'.$kv; ?>" class="wpsg_mod_varianten_order">
+						<td></td>
+						<td class="sortable_handler"><?php echo $kv.": "; ?></td>
+						<td class="wpsg_editable col_variname" id="variname_<?php echo $k; ?>_<?php echo $kv; ?>"><?php 
+							echo $this->callMod('wpsg_mod_varianten', 'getVariName', array($this->view['vp_data'], $k, $kv)); 
+						?></td>
+						<td class="wpsg_editable col_variartnr" id="variartnr_<?php echo $k; ?>_<?php echo $kv; ?>"><?php echo (wpsg_isSizedString($vari['artnr']))? $vari['artnr']:''; ?></td>
+						<td class="col_preis wpsg_editable" id="varipreis_<?php echo $k; ?>_<?php echo $kv; ?>"><?php echo (($vari['preis'] != "")?wpsg_ff($vari['preis'], $this->get_option('wpsg_currency')):wpsg_ff(0, $this->get_option('wpsg_currency'))); ?></td>
+						<?php if ($this->hasMod('wpsg_mod_fuellmenge')) { $ModCol ++; ?>
+						<td class="col_fmenge wpsg_editable" id="varifmenge_<?php echo $k; ?>_<?php echo $kv; ?>"><?php echo (($vari['fmenge'] != "")?wpsg_ff($vari['fmenge'], $this->view['vp_arFeinheiten'][$this->view['vp_productdata']['feinheit']]):"0"); ?></td>
+						<?php } ?>
+						<?php if ($this->hasMod('wpsg_mod_weight')) { $ModCol ++; ?>
+						<td class="col_variweight wpsg_editable" id="variweight_<?php echo $k; ?>_<?php echo $kv; ?>"><?php echo ((wpsg_isSizedString($vari['weight']))?$vari['weight']:'0'); ?></td>					
+						<?php } ?>
+						<?php if ($this->hasMod('wpsg_mod_stock')) { $ModCol ++; ?>
+						<td class="col_stock wpsg_editable" id="varistock_<?php echo $k; ?>_<?php echo $kv; ?>"><?php echo (($vari['stock'] != "")?intval($vari['stock']):'0'); ?></td>
+						<?php } ?> 
+						<td>
+							
+							<?php if (!wpsg_isSizedString($_REQUEST['wpsg_lang'])) { ?>
+								<a href="#" title="<?php echo __("Variation lÃ¶schen", "wpsg"); ?>" style="float:right; margin-left:10px;" onclick="return wpsg_vp_vari_del(<?php echo $k; ?>, <?php echo $kv; ?>);"><img src="<?php echo $this->getRessourceURL('gfx/bin.png'); ?>" alt="<?php echo __("Variation lÃ¶schen", "wpsg"); ?>" /></a>		
+								<?php if ($vari['aktiv'] == "1") { ?>						
+								<a href="#" title="<?php echo __("Variation deaktivieren", "wpsg"); ?>" style="float:right; margin-left:10px;" onclick="return wpsg_vp_vari_deaktiv(<?php echo $k; ?>, <?php echo $kv; ?>, 0);"><img src="<?php echo $this->getRessourceURL('gfx/hide.png'); ?>" alt="<?php echo __("Variation deaktivieren", "wpsg"); ?>" /></a>						
+								<?php } else { ?>
+								<a href="#" title="<?php echo __("Variation aktivieren", "wpsg"); ?>" style="float:right; margin-left:10px;" onclick="return wpsg_vp_vari_deaktiv(<?php echo $k; ?>, <?php echo $kv; ?>, 1);"><img src="<?php echo $this->getRessourceURL('gfx/show.png'); ?>" alt="<?php echo __("Variation aktivieren", "wpsg"); ?>" /></a>
+								<?php } ?>
+							<?php } ?>
+							
+							<script type="text/javascript">
+							
+								jQuery("#variname_<?php echo $k; ?>_<?php echo $kv; ?>").wpsg_editable("<?php echo WPSG_URL_WP; ?>wp-admin/admin.php?page=wpsg-Produkt&action=ajax&mod=wpsg_mod_varianten&cmd=wpsg_vp_vari_inlineEdit&noheader=1", {
+									submitdata: {  
+							    		typ: "vari_name",
+							    		edit_id: <?php echo $this->view['data']['id']; ?>,
+							    		var_id: <?php echo $k; ?>,
+					    				<?php if (wpsg_isSizedString($_REQUEST['wpsg_lang'])) { ?>
+									    wpsg_lang: "<?php echo $_REQUEST['wpsg_lang']; ?>",
+									    <?php } ?>
+							    		vari_id: <?php echo $kv; ?>
+									},
+									submit: '<?php echo __('Speichern', 'wpsg'); ?>',
+									placeholder: '<?php echo __('Zum Bearbeiten anklicken ...', 'wpsg'); ?>',
+									indicator: '<?php echo __('Speicher ...', 'wpsg'); ?>',
+							    	tooltip: '<?php echo __('Zum Bearbeiten anklicken ...', 'wpsg'); ?>'
+								});
+								
+								<?php if (!wpsg_isSizedString($_REQUEST['wpsg_lang'])) { ?>
+								jQuery("#variartnr_<?php echo $k; ?>_<?php echo $kv; ?>").wpsg_editable("<?php echo WPSG_URL_WP; ?>wp-admin/admin.php?page=wpsg-Produkt&action=ajax&mod=wpsg_mod_varianten&cmd=wpsg_vp_vari_inlineEdit&noheader=1", {
+									submitdata: {  
+							    		typ: "vari_artnr",
+							    		edit_id: <?php echo $this->view['data']['id']; ?>,
+							    		var_id: <?php echo $k; ?>,
+					    				<?php if (wpsg_isSizedString($_REQUEST['wpsg_lang'])) { ?>
+									    wpsg_lang: "<?php echo $_REQUEST['wpsg_lang']; ?>",
+									    <?php } ?>
+							    		vari_id: <?php echo $kv; ?>
+									},
+									submit: '<?php echo __('Speichern', 'wpsg'); ?>',
+									placeholder: '<?php echo __('Zum Bearbeiten anklicken ...', 'wpsg'); ?>',
+									indicator: '<?php echo __('Speicher ...', 'wpsg'); ?>',
+							    	tooltip: '<?php echo __('Zum Bearbeiten anklicken ...', 'wpsg'); ?>'
+								});
+													
+								jQuery("#varipreis_<?php echo $k; ?>_<?php echo $kv; ?>").wpsg_editable("<?php echo WPSG_URL_WP; ?>wp-admin/admin.php?page=wpsg-Produkt&action=ajax&mod=wpsg_mod_varianten&cmd=wpsg_vp_vari_inlineEdit&noheader=1", {
+									submitdata: {									
+										typ: "vari_preis",
+										edit_id: <?php echo $this->view['data']['id']; ?>,
+										var_id: <?php echo $k; ?>,
+										vari_id: <?php echo $kv; ?>
+									},
+									submit: '<?php echo __('Speichern', 'wpsg'); ?>',
+									placeholder: '<?php echo __('Zum Bearbeiten anklicken ...', 'wpsg'); ?>',
+									indicator: '<?php echo __('Speicher ...', 'wpsg'); ?>',
+							    	tooltip: '<?php echo __('Zum Bearbeiten anklicken ...', 'wpsg'); ?>'
+								});
+	
+								<?php if ($this->hasMod('wpsg_mod_fuellmenge')) { ?>
+								jQuery("#varifmenge_<?php echo $k; ?>_<?php echo $kv; ?>").wpsg_editable("<?php echo WPSG_URL_WP; ?>wp-admin/admin.php?page=wpsg-Produkt&action=ajax&mod=wpsg_mod_varianten&cmd=wpsg_vp_vari_inlineEdit&noheader=1", {
+									submitdata: {									
+										typ: "vari_fmenge",
+										edit_id: <?php echo $this->view['data']['id']; ?>,
+										var_id: <?php echo $k; ?>,
+										vari_id: <?php echo $kv; ?>
+									},
+									submit: '<?php echo __('Speichern', 'wpsg'); ?>',
+									placeholder: '<?php echo __('Zum Bearbeiten anklicken ...', 'wpsg'); ?>',
+									indicator: '<?php echo __('Speicher ...', 'wpsg'); ?>',
+							    	tooltip: '<?php echo __('Zum Bearbeiten anklicken ...', 'wpsg'); ?>'
+								});
+								<?php } ?>
+								
+								<?php if ($this->hasMod('wpsg_mod_weight')) { ?>
+	
+								jQuery("#variweight_<?php echo $k; ?>_<?php echo $kv; ?>").wpsg_editable("<?php echo WPSG_URL_WP; ?>wp-admin/admin.php?page=wpsg-Produkt&action=ajax&mod=wpsg_mod_varianten&cmd=wpsg_vp_vari_inlineEdit&noheader=1", {
+									submitdata: {
+										typ: "vari_weight",
+										edit_id: <?php echo $this->view['data']['id']; ?>,
+										var_id: <?php echo $k; ?>,
+										vari_id: <?php echo $kv; ?>
+									},
+									indicator: "<?php echo __("Speicher...", "wpsg"); ?>",
+									tooltip: "<?php echo __("Zum Bearbeiten anklicken und mit Enter bestÃ€tigen ...", "wpsg"); ?>"
+								});
+								
+								<?php } ?>
+	
+								<?php if ($this->hasMod('wpsg_mod_stock')) { ?>
+	
+								jQuery("#varistock_<?php echo $k; ?>_<?php echo $kv; ?>").wpsg_editable("<?php echo WPSG_URL_WP; ?>wp-admin/admin.php?page=wpsg-Produkt&action=ajax&mod=wpsg_mod_varianten&cmd=wpsg_vp_vari_inlineEdit&noheader=1", {
+									submitdata: {
+										typ: "vari_stock",
+										edit_id: <?php echo $this->view['data']['id']; ?>,
+										var_id: <?php echo $k; ?>,
+										vari_id: <?php echo $kv; ?>
+									},
+									submit: '<?php echo __('Speichern', 'wpsg'); ?>',
+									placeholder: '<?php echo __('Zum Bearbeiten anklicken ...', 'wpsg'); ?>',
+									indicator: '<?php echo __('Speicher ...', 'wpsg'); ?>',
+							    	tooltip: '<?php echo __('Zum Bearbeiten anklicken ...', 'wpsg'); ?>'
+								});
+								
+								<?php } ?>
+								<?php } ?>
+							
+							</script>
+							
+						</td>
+					</tr>
+					<?php if ($this->hasMod('wpsg_mod_produktbilder')) { ?>
+					<tr class="wpsg_mod_varianten_productimage_row">
+						<td colspan="2">&nbsp;</td>
+						<td style="padding-bottom:10px;" colspan="<?php echo $ModCol + 3; ?>" id="wpsg_mod_varianten_productimage_<?php echo $k; ?>_<?php echo $kv; ?>">
+						
+					   		<?php $j = 0; foreach ((array)$this->callMod('wpsg_mod_varianten', 'getVariImages', array($this->view['data']['id'], $k, $kv)) as $file) { $j ++; $url_tn = $this->callMod('wpsg_mod_produktbilder', 'makeTn', array($this->view['data']['id'], $file, 25, 25, 's')); ?>
+					   		<a class="<?php echo ((in_array($file, explode(",", $vari['pic'])))?'mark':''); ?> pic" id="<?php echo $file; ?>" onclick="return wpsg_vp_vari_setPic(this, <?php echo $k; ?>, <?php echo $kv; ?>, '<?php echo $file; ?>', <?php echo $j; ?>);" href=""><img src="<?php echo $url_tn; ?>" alt="" /></a>
+					   		<?php } ?>					   		
+					   								 
+						</td>
+						<td>
+						
+							<?php if (wpsg_isSizedInt($j)) { ?>
+					   		<script type="text/javascript">/* <![CDATA[ */
+
+					   			jQuery(document).ready(function() {   
+					   				
+							   		jQuery('#wpsg_mod_varianten_productimage_<?php echo $k; ?>_<?php echo $kv; ?>').sortable( {
+										items: 'a',
+										helper : 'clone',  
+										update: function(event, ui) {
+
+											wpsg_vp_ajaxloading_show();
+											
+											var wpsg_reorder = jQuery(this).sortable('toArray');
+
+											jQuery.ajax( {			
+												url: '<?php echo WPSG_URL_WP; ?>wp-admin/admin.php?page=wpsg-Produkt&action=ajax&mod=wpsg_mod_varianten&cmd=wpsg_var_setImageOrder&noheader=1&edit_id=<?php echo $this->view['data']['id']; ?>',
+												async: false,
+												data: {				
+													'var_id': <?php echo $k; ?>,
+													'vari_id': <?php echo $kv; ?>,
+													'wpsg_reorder': wpsg_reorder
+												},
+												success: function(data) { 
+
+													if (data != '1') alert(data);
+													wpsg_vp_ajaxloading_hide(); 
+
+												}
+											} );
+																						 
+										}			
+									} ).disableSelection();
+
+					   			} );
+					   		
+						   		/* ]]> */</script>
+					   		
+					   		<?php } ?>
+						
+						</td>
+					</tr>
+					<?php } ?>
+					<?php } ?>
+					
+					<?php if (!wpsg_isSizedString($_REQUEST['wpsg_lang'])) { ?>
+					<tr>
+						<td colspan="2"></td>
+						<td><?php echo __("Neue Variation", "wpsg"); ?>: <input type="text" onkeypress="return wpsg_vp_addVariation_input(event, <?php echo $k; ?>);" class="variation_neu" value="" /></td>
+						<td colspan="5"> 
+							<input type="button" onclick="return wpsg_vp_addVariation(<?php echo $k; ?>);" value="<?php echo __("Anlegen", "wpsg"); ?>" class="button" />
+						</td>
+					</tr>			
+					<?php } ?>
+				
+				</tbody>
+			</table>
+			<?php } ?>
+					
+		</div>
+		<hr />		
+	<?php } ?>
+
+	</div>
+	
+<?php } ?>
+
+<script type="text/javascript">/* <![CDATA[ */
+						
+	jQuery(document).ready(function() {                                           	
+
+		<?php if (!wpsg_isSizedString($_REQUEST['wpsg_lang'])) { ?>
+		jQuery('.var_order_wrap').sortable( {
+			items: 'div.var_order',
+			helper: wpsg_Tablefix,
+			handler: '.sortable_handler',
+			update: function(event, ui) {
+
+				var wpsg_reorder = jQuery(this).sortable('serialize');
+				
+				wpsg_vp_ajaxloading_show();
+			 				
+				jQuery.ajax( {			
+					url: '<?php echo WPSG_URL_WP; ?>wp-admin/admin.php?page=wpsg-Produkt&action=ajax&mod=wpsg_mod_varianten&cmd=wpsg_var_reorder&noheader=1&edit_id=<?php echo $this->view['data']['id']; ?>',
+					async: false,
+					data: {		
+						'wpsg_lang': '<?php echo @$_REQUEST['wpsg_lang']; ?>',		
+						'wpsg_reorder': wpsg_reorder
+					},
+					success: function(data) {
+						
+						jQuery("#wpsg_vp_drawVarianten").html(data);
+						wpsg_vp_ajaxloading_hide();
+						
+					}
+				} );
+				
+			}			
+		} );
+		 
+		jQuery('.wpsg_mod_varianten_orderwrap tbody').sortable( {
+			helper: wpsg_Tablefix,
+			items: 'tr.wpsg_mod_varianten_order',
+			handler: '.sortable_handler',
+			update: function(event, ui) {
+
+				var wpsg_reorder = jQuery(this).sortable('serialize');
+		 
+				wpsg_vp_ajaxloading_show();
+								
+				jQuery.ajax( {			
+					url: '<?php echo WPSG_URL_WP; ?>wp-admin/admin.php?page=wpsg-Produkt&action=ajax&mod=wpsg_mod_varianten&cmd=wpsg_vari_reorder&noheader=1&edit_id=<?php echo $this->view['data']['id']; ?>',
+					async: false,
+					data: {				
+						'wpsg_lang': '<?php echo @$_REQUEST['wpsg_lang']; ?>',
+						'wpsg_reorder': wpsg_reorder
+					},
+					success: function(data) {
+						
+						jQuery("#wpsg_vp_drawVarianten").html(data);
+						wpsg_vp_ajaxloading_hide();
+						
+					}
+				} );
+				
+			}
+		} );
+		
+		jQuery('.wpsg_mod_varianten_orderwrap tbody tr.wpsg_mod_varianten_order').disableSelection();
+		<?php } ?>
+
+	} );
+
+/* ]]> */</script>
+
+<br />
+
+<?php if (!wpsg_isSizedString($_REQUEST['wpsg_lang'])) { ?>
+<label for="wpsg_vp_vartyp">
+	<?php echo __("Neue Variante", "wpsg"); ?>
+</label>
+<input type="text" id="wpsg_vp_varneu" onkeypress="return wpsg_vp_add_input(event);" value="" />
+<select id="wpsg_vp_vartyp">
+	<option value="radio"><?php echo __("Auswahl durch Radio Buttons", "wpsg"); ?></option>
+	<option value="select"><?php echo __("Auswahl ÃŒber eine Selectbox", "wpsg"); ?></option>
+	<option value="checkbox"><?php echo __("Ãber eine Checkbox aktivierbar", "wpsg"); ?></option>		
+	<?php if ($this->hasMod('wpsg_mod_produktbilder')) { ?>
+	<option value="image"><?php echo __("Grafikauswahl", "wpsg"); ?></option>
+	<?php } ?>
+</select>
+<input type="button" onclick="wpsg_vp_add();" value="<?php echo __("Anlegen", "wpsg"); ?>" class="button" />
+<br />
+<?php } ?>
+
+<div class="wpsg_mod_varianten_ajaxloading" style="display:none;"><img src="<?php echo $this->getRessourceURL('gfx/ajax-loader.gif'); ?>" alt="<?php echo __('Bitte warten', 'wpsg'); ?>" /></div>
Index: /system/intern/views/mod_varianten/mail_row.phtml
===================================================================
--- /system/intern/views/mod_varianten/mail_row.phtml	(revision 5987)
+++ /system/intern/views/mod_varianten/mail_row.phtml	(revision 5987)
@@ -0,0 +1,18 @@
+<?php
+	
+	/**
+	 * Mit diesem Template kann die Zeile eines Produktes im Mailtemplate erweitert werden
+	 */
+
+?>
+<?php //wpsg_debug($this->view['variante']) ?>
+<?php if (get_option('wpsg_vp_detailview') == 1) { ?>
+<?php echo wpsg_pad_left($p['menge'], 5); ?><?php echo wpsg_translate(__('Variante:', 'wpsg'), "")."\n" ?>
+<?php foreach ($this->view['variante'] as $vari => $value) { ?>
+<?php if (is_numeric($vari)) { ?>
+<?php echo wpsg_pad_left($p['menge'], 8); ?> <?php echo '- '.$value['name'] ?>: <?php echo $value['value'] ?>; <?php echo __('Art. Nr.', 'wpsg').': '.$value['artnr'] ?>; <?php echo $value['preis'] ?> <?php echo $this->get_option('wpsg_currency')."\n" ?>
+<?php } ?>
+<?php } ?>
+<?php } else { ?>
+<?php echo wpsg_pad_right(' ', 5); ?><?php echo __('Variante', 'wpsg'); ?>: <?php echo $this->view['variante']['key']; ?>
+<?php } ?> 
Index: /system/intern/views/mod_varianten/mail_row_html.phtml
===================================================================
--- /system/intern/views/mod_varianten/mail_row_html.phtml	(revision 5987)
+++ /system/intern/views/mod_varianten/mail_row_html.phtml	(revision 5987)
@@ -0,0 +1,22 @@
+<?php
+	
+	/**
+	 * Mit diesem Template kann die Zeile eines Produktes im Mailtemplate HTML erweitert werden
+	 */
+
+?>
+<tr class="productrow productrow2 <?php echo ((($this->view['i'] % 2) == 0)?'productrow_odd':'productrow_even'); ?>">
+	<td style="padding:4px; line-height:100%; vertical-align:middle;" class="col_pos">&nbsp;</td>
+	<td style="padding:4px; line-height:100%; vertical-align:middle;" class="col_name"><?php echo __('Variante', 'wpsg'); ?>:</td>
+	<td style="padding:4px; line-height:100%; vertical-align:middle;" class="col_variant_value" colspan="<?php echo ((sizeof($this->view['basket']['mwst']) > 1 || $this->get_option('wpsg_showMwstAlways') == '1')?'4':'3'); ?>">
+		<?php if (get_option('wpsg_vp_detailview') == 1) { ?>
+			<?php foreach ($this->view['variante'] as $vari => $value) { ?>
+			<?php if (is_numeric($vari)) { ?>
+				<?php echo wpsg_pad_left($p['menge'], 8); ?> <?php echo '- '.$value['name'] ?>: <?php echo $value['value'] ?>; <?php echo __('Art. Nr.', 'wpsg').': '.$value['artnr'] ?>; <?php echo $value['preis'] ?> <?php echo $this->get_option('wpsg_currency'); ?><br />
+			<?php } ?>
+			<?php } ?>						
+		<?php } else { ?>
+			<?php echo $this->view['variante']['key']; ?>
+		<?php } ?>
+	</td> 
+</tr> 
Index: /system/intern/views/mod_varianten/order_view_row.phtml
===================================================================
--- /system/intern/views/mod_varianten/order_view_row.phtml	(revision 5987)
+++ /system/intern/views/mod_varianten/order_view_row.phtml	(revision 5987)
@@ -0,0 +1,22 @@
+<?php
+
+	/**
+	 * Template fÃŒr die Zeile eines Variantenprodukts bei der Produktansicht in der Bestellverwaltung
+	 */
+
+?>
+<tr class="wpsg_<?php echo (($this->view['i'] == 0)?'odd':'even'); ?>">
+	<td style="padding:4px; line-height:100%; vertical-align:middle;"><?php echo __('Variante', 'wpsg'); ?>:</td>
+	<td style="padding:4px; line-height:100%; vertical-align:middle;" align="right" colspan="<?php echo ((sizeof($this->view['basket']['mwst']) > 1 || $this->get_option('wpsg_showMwstAlways') == '1')?'4':'3'); ?>">
+		<?php if ($this->get_option('wpsg_vp_detailview') == 1) { ?>
+		<?php foreach ($this->view['variante'] as $vari => $value) { ?>
+		<?php if (is_numeric($vari)) { ?>
+		<?php echo $value['name'] ?>: <?php echo $value['value'] ?>; <?php echo __('Art. Nr.', 'wpsg').': '.$value['artnr'] ?>; <?php echo $value['preis'] ?> <?php echo $this->get_option('wpsg_currency') ?>
+		<br />
+		<?php } ?>
+		<?php } ?>							
+		<?php } else { ?>
+		<?php echo $this->view['variante']['key']; ?>
+		<?php } ?>
+	</td>
+</tr>
Index: /system/intern/views/mod_varianten/overview_row.phtml
===================================================================
--- /system/intern/views/mod_varianten/overview_row.phtml	(revision 5987)
+++ /system/intern/views/mod_varianten/overview_row.phtml	(revision 5987)
@@ -0,0 +1,22 @@
+<?php
+
+	/**
+	 * Wird nach den Produkten in der Bestellzusammenfassung (overview) bei Variantenprodukten verwendet
+	 */
+
+?>
+<tr class="wpsg_<?php echo (($this->view['i'] == 0)?'odd':'even'); ?>">
+	<td><?php echo __('Variante', 'wpsg'); ?>:</td>
+	<td colspan="<?php echo ((sizeof($this->view['basket']['mwst']) > 1 || $this->get_option('wpsg_showMwstAlways') == '1')?'2':'1'); ?>" class="wpsg_mod_varianten_value">
+		<?php if (get_option('wpsg_vp_detailview') == 1) { ?>
+		<?php foreach ($this->view['variante'] as $vari => $value) { ?>
+		<?php if (is_numeric($vari)) { ?>
+		<?php echo $value['name'] ?>: <?php echo $value['value'] ?>; <?php echo __('Art. Nr.', 'wpsg').': '.$value['artnr'] ?>; <?php echo $value['preis'] ?> <?php echo $this->get_option('wpsg_currency') ?>
+		<br />
+		<?php } ?>
+		<?php } ?>							
+		<?php } else { ?>
+		<?php echo $this->view['variante']['key']; ?>
+		<?php } ?>
+	</td>
+</tr>
Index: /system/intern/views/mod_varianten/produkt.phtml
===================================================================
--- /system/intern/views/mod_varianten/produkt.phtml	(revision 5987)
+++ /system/intern/views/mod_varianten/produkt.phtml	(revision 5987)
@@ -0,0 +1,211 @@
+<?php
+
+	/**
+	 * Template fÃŒr die Varianten wird vom Produkttemplate z.B. standard.phtml geladen
+	 */
+ 
+?>
+ 
+<script type="text/javascript">/* <![CDATA[ */
+ 
+	wpsg_vp_vari[<?php echo $this->getProduktId($this->view['data']['id']); ?>] = new Array();
+	 
+/* ]]> */</script>
+
+<?php $vAktiv = false; if (is_array($this->view['data']['vp_data']) && sizeof($this->view['data']['vp_data']) > 0) { ?>
+
+	<?php foreach ($this->view['data']['vp_data'] as $k => $var) { 
+		
+		if ($var['aktiv'] == "1") { 
+
+			$vAktiv = true; ?>
+		
+			<div class="wpsg_vp_field wpsg_vp_field_<?php echo $this->getProduktId($this->view['data']['id']); ?>">
+				
+				<script type="text/javascript">/* <![CDATA[ */
+		
+					wpsg_vp_vari[<?php echo $this->getProduktId($this->view['data']['id']); ?>][<?php echo $k; ?>] = "<?php echo $var['typ']; ?>";			
+								
+				/* ]]> */</script>
+				
+				<?php if ($var['typ'] != 'radio') { ?>
+					<label class="wpsg_vp_field_label" for="wpsg_vpfield_<?php echo $this->getProduktId($this->view['data']['id']); ?>_<?php echo $k; ?>">
+						<?php echo $var['name']; ?>
+					</label>
+				<?php } else { ?>
+					<span class="wpsg_vp_field"><?php echo $var['name']; ?></span>
+				<?php } ?>
+				
+				<div class="wpsg_vp_field_typ_<?php echo $var['typ']; ?>">
+				
+					<?php /* SELECT-Box START */ ?>
+					<?php if ($var['typ'] == "select") { ?>
+						<label>			 			
+							<select onchange="wpsg_vp_switch(<?php echo $this->getProduktId($this->view['data']['id']); ?>, <?php echo $this->view['product_index']; ?>);" name="wpsg_vp[<?php echo $k; ?>]" id="wpsg_vpfield_<?php echo $this->getProduktId($this->view['data']['id']); ?>_<?php echo $k; ?>">
+							<?php foreach ($var['vari'] as $kv => $vari) { 
+								if ($vari['aktiv'] == "1") { $j ++; ?>
+									<?php if (!$this->hasMod('wpsg_mod_stock') || $vari['stock'] > 0 || $this->get_option('wpsg_mod_vp_showProduct') === '1') { ?>
+											
+										<?php /* Lagerbestand > 0 */ ?>
+										<?php if (!$this->hasMod('wpsg_mod_stock') || $vari['stock'] > 0) { ?>
+										
+											<option value="<?php echo $kv; ?>" <?php echo (($this->view['wpsg_mod_varianten']['set'][$k] == $kv)?'selected="selected"':''); ?>>						
+											<?php echo $vari['name']; ?>
+												
+												<?php /* Abfrage Preisanzeige nur fÃŒr eingeloggte Benutzer START */?>
+												<?php if (($this->callMod('wpsg_mod_kundenverwaltung', 'isLoggedIn') && ($this->get_option('wpsg_mod_kundenverwaltung_preisAnzeige') == '1')) || ($this->get_option('wpsg_mod_kundenverwaltung_preisAnzeige') == '0')) { ?>			
+													<?php if ($this->callMod('wpsg_mod_varianten', 'showVariPrice', array($vari['preis']))) { ?>
+														(<?php echo wpsg_ff($vari['preis'], $this->get_option('wpsg_currency')); ?>)
+													<?php } ?>
+												<?php }else{?>
+													<?php echo wpsg_translate(__('(Preise nur fÃŒr eingeloggte Benutzer)', 'wpsg')); ?>
+												<?php } ?>
+												<?php /* Abfrage ENDE */ ?>
+											</option>
+											
+										<?php /* Lagerbestand der Variante=0 - wird angezeigt, ist aber nicht auswÃ€hlbar */ ?>
+										<?php } else { ?>
+											<option disabled="disabled" value="<?php echo $kv; ?>" <?php echo (($this->view['wpsg_mod_varianten']['set'][$k] == $kv)?'selected="selected"':''); ?>>						
+												<?php echo $vari['name']; ?>
+												<?php if ($this->callMod('wpsg_mod_varianten', 'showVariPrice', array($vari['preis']))) { ?>
+													(<?php echo wpsg_ff($vari['preis'], $this->get_option('wpsg_currency')); ?>)
+												<?php } ?>
+											</option>
+										<?php } /* Lagerbestandsabfrage ENDE */ ?>
+											
+									<?php } ?>
+								<?php } ?>
+							<?php } ?>	
+							</select> 
+							<?php if ($this->get_option("wpsg_vp_showpic") == "1" && $this->hasMod('wpsg_mod_produktbilder')) { ?>
+								<span class="wpsg_vp_field_image">				
+									<?php foreach ($var['vari'] as $kv => $vari) { 
+										if ($vari['aktiv'] == "1" && isset($vari['showpic'])) { ?>
+											<span class="wpsg_vp_image wpsg_vp_image_<?php echo $kv; ?>" style="display:<?php echo (($this->view['wpsg_mod_varianten']['set'][$k] == $kv)?'block':'none'); ?>;">
+												
+												<?php 
+													
+												$img_src = $this->callMod('wpsg_mod_produktbilder', 'makeTn', array(
+													$this->getProduktId($this->view['data']['id']), 
+													$vari['showpic'],
+													$this->get_option("wpsg_vp_showpic_width"),
+													$this->get_option("wpsg_vp_showpic_height"), 
+													's'
+												));
+													
+												?><img src="<?php echo $img_src; ?>" alt="" />
+																		
+											</span>
+										<?php } ?>
+									<?php } ?>
+								</span>
+							<?php } ?>		
+						</label>
+					<?php } /* SELECT-Box ENDE */ ?>
+					
+					<?php /* IMAGE START */ ?>
+					<?php if ($var['typ'] == 'image' && $this->hasMod('wpsg_mod_produktbilder')) { ?>
+						<div class="wpsg_mod_varianten_imageselect wpsg_mod_varianten_imageselect_<?php echo $k; ?>">
+						<input type="hidden" name="wpsg_vp[<?php echo $k; ?>]" value="<?php echo $this->view['wpsg_mod_varianten']['set'][$k]; ?>" />
+							<?php foreach ($var['vari'] as $kv => $vari) { 
+								if ($vari['aktiv'] == '1' && (!$this->hasMod('wpsg_mod_stock') || $vari['stock'] > 0)) { ?>
+									<?php $img = $this->callMod('wpsg_mod_varianten', 'getImageSelectImage', array($this->getProduktId($this->view['data']['id']), $k, $kv, $this->view['data']['product_key'])); ?>								
+									<?php if (wpsg_isSizedString($img)) { ?>
+										<a data-wpsg-id="<?php echo $kv; ?>" class="image <?php echo (($this->view['wpsg_mod_varianten']['set'][$k] == $kv)?'akt':''); ?>" onclick="jQuery(this).parent().find('a').removeClass('akt'); jQuery(this).addClass('akt'); wpsg_vp_switch(<?php echo $this->getProduktId($this->view['data']['id']); ?>, <?php echo $this->view['product_index']; ?>); return false;" href="#">
+											<img src="<?php echo $this->callMod('wpsg_mod_produktbilder', 'makeTn', array($this->getProduktId($this->view['data']['id']), $img, $this->get_option('wpsg_vp_imageselect_width'), $this->get_option('wpsg_vp_imageselect_height'), $this->get_option('wpsg_vp_imageselect_mode'))); ?>" />
+										</a>
+									<?php } ?>
+								<?php } ?>
+							<?php } ?>	
+						</div>
+					<?php } /* IMAGE ENDE */ ?>
+					
+					<?php /* Radio-Buttons START */ ?>
+					<?php if ($var['typ'] == "radio") { ?>			
+						<?php $j = 0; foreach ($var['vari'] as $kv => $vari) { if ($vari['aktiv'] == "1") { $j ++; ?>
+							<?php if (!$this->hasMod('wpsg_mod_stock') || $vari['stock'] > 0 || $this->get_option('wpsg_mod_vp_showProduct') === '1') { ?>					
+								<label>
+								
+									<?php if (!$this->hasMod('wpsg_mod_stock') || $vari['stock'] > 0) { ?>
+										<input <?php echo (($this->view['wpsg_mod_varianten']['set'][$k] == $kv)?'checked="checked"':''); ?> id="wpsg_vpfield_<?php echo $this->getProduktId($this->view['data']['id']); ?>_<?php echo $k; ?>_<?php echo $j; ?>" onclick="wpsg_vp_switch(<?php echo $this->getProduktId($this->view['data']['id']); ?>, <?php echo $this->view['product_index']; ?>);" type="radio" name="wpsg_vp[<?php echo $k; ?>]" value="<?php echo $kv; ?>" />&nbsp;<?php echo $vari['name']; ?>
+									<?php /* Lagerbestand der Variante=0 - wird angezeigt, ist aber nicht auswÃ€hlbar */ ?>
+									<?php } else { ?>
+										<input disabled="disabled" <?php echo (($this->view['wpsg_mod_varianten']['set'][$k] == $kv)?'checked="checked"':''); ?> id="wpsg_vpfield_<?php echo $this->getProduktId($this->view['data']['id']); ?>_<?php echo $k; ?>_<?php echo $j; ?>" onclick="wpsg_vp_switch(<?php echo $this->getProduktId($this->view['data']['id']); ?>, <?php echo $this->view['product_index']; ?>);" type="radio" name="wpsg_vp[<?php echo $k; ?>]" value="<?php echo $kv; ?>" />&nbsp;<?php echo $vari['name']; ?>
+									<?php } ?>
+									
+									<?php /* Abfrage Preisanzeige nur fÃŒr eingeloggte Benutzer START */?>
+									<?php if (($this->callMod('wpsg_mod_kundenverwaltung', 'isLoggedIn') && ($this->get_option('wpsg_mod_kundenverwaltung_preisAnzeige') == '1')) || ($this->get_option('wpsg_mod_kundenverwaltung_preisAnzeige') == '0')) { ?>			
+							
+										<?php if ($this->callMod('wpsg_mod_varianten', 'showVariPrice', array($vari['preis']))) { ?>
+											<span class="wpsg_vp_vari_preisinfo">(<?php echo wpsg_ff($vari['preis'], $this->get_option('wpsg_currency')); ?>)</span>
+										<?php } ?>
+										
+									<?php }else{?>
+											<?php echo wpsg_translate(__('(Preise nur fÃŒr eingeloggte Benutzer)', 'wpsg')); ?>
+									<?php } ?>
+									<?php /* Abfrage ENDE */ ?>
+										
+										<?php if ($this->get_option("wpsg_vp_showpic") == "1" && isset($vari['showpic']) && $vari['showpic'] != false) { ?>
+										<span class="wpsg_vp_field_image">
+										
+											<?php 
+													
+											$img_src = $this->callMod('wpsg_mod_produktbilder', 'makeTn', array(
+												$this->getProduktId($this->view['data']['id']), 
+												$vari['showpic'],
+												$this->get_option("wpsg_vp_showpic_width"),
+												$this->get_option("wpsg_vp_showpic_height"), 
+												's'
+											));
+									
+											?><img src="<?php echo $img_src; ?>" alt="" />
+								
+										</span>
+										<?php } /* if image */ ?>		
+								</label>
+							<?php } /* If aktiv && stock */ ?>
+						<?php } } /* Foreach/Aktiv Radio ENDE */ ?>
+                    <?php } /* Radio ENDE */ ?>
+
+					<?php /* Checkboxen START */ ?>
+					<?php if ($var['typ'] == "checkbox" && $var['aktiv'] == 1) { ?>
+					<label>
+						<input onchange="wpsg_vp_switch(<?php echo $this->getProduktId($this->view['data']['id']); ?>, <?php echo $this->view['product_index']; ?>);" type="hidden" value="0" name="wpsg_vp[<?php echo $k; ?>]" />
+						<input <?php echo (($this->view['wpsg_mod_varianten']['set'][$k] == '1')?'checked="checked"':''); ?> onchange="wpsg_vp_switch(<?php echo $this->getProduktId($this->view['data']['id']); ?>, <?php echo $this->view['product_index']; ?>);" type="checkbox" value="1" name="wpsg_vp[<?php echo $k; ?>]" />
+						<?php /* Abfrage Preisanzeige nur fÃŒr eingeloggte Benutzer START */?>
+						<?php if (($this->callMod('wpsg_mod_kundenverwaltung', 'isLoggedIn') && ($this->get_option('wpsg_mod_kundenverwaltung_preisAnzeige') == '1')) || ($this->get_option('wpsg_mod_kundenverwaltung_preisAnzeige') == '0')) { ?>				
+							<?php if ($this->callMod('wpsg_mod_varianten', 'showVariPrice', array($var['preis']))) { ?>
+								<span class="wpsg_vp_vari_preisinfo">(<?php echo wpsg_ff($var['preis'], $this->get_option('wpsg_currency')); ?>)</span>
+							<?php } ?>	
+						<?php } else {?>
+							<?php echo wpsg_translate(__('(Preise nur fÃŒr eingeloggte Benutzer)', 'wpsg')); ?>
+						<?php } ?>
+						<?php /* Abfrage ENDE */ ?>
+						
+						<?php if ($this->get_option("wpsg_vp_showpic") == "1" && $var['showpic'] != false) { ?>
+						<span class="wpsg_vp_field_image">
+							
+							<?php 
+								
+							$img_src = $this->callMod('wpsg_mod_produktbilder', 'makeTn', array(
+								$this->getProduktId($this->view['data']['id']), 
+								$var['showpic'],
+								$this->get_option("wpsg_vp_showpic_width"),
+								$this->get_option("wpsg_vp_showpic_height"), 
+								's'
+							));
+									
+							?><img src="<?php echo $img_src; ?>" alt="" />
+						</span>
+						<?php } ?>
+					</label>
+					<?php } /* Checkboxen ENDE */ ?>
+
+				    <div style="clear:both;"></div>
+
+                </div>
+            </div>
+
+		<?php } /* $var['aktiv'] == "1" */ ?>
+	<?php } /* foreach ($this->view['data']['vp_data'] as $k => $var) */ ?>
+<?php } /* $vAktiv = false; ENDE */ ?>
Index: /system/intern/views/mod_varianten/produkt_addedit_content.phtml
===================================================================
--- /system/intern/views/mod_varianten/produkt_addedit_content.phtml	(revision 5987)
+++ /system/intern/views/mod_varianten/produkt_addedit_content.phtml	(revision 5987)
@@ -0,0 +1,304 @@
+<?php
+
+	/**
+	 * Template fÃŒr die Varianten innerhalb der Produktverwaltung
+	 */
+
+?>
+<script type="text/javascript">
+
+	<?php if (!isset($_REQUEST['wpsg_lang'])) { ?>
+
+	function wpsg_vp_add()
+	{
+
+		if (jQuery('#wpsg_vp_varneu').val() == '') { alert('<?php echo __('Bitte einen Namen fÃŒr die neue Variante angeben!', 'wpsg'); ?>'); return; } 
+
+		var val_name = jQuery("#wpsg_vp_varneu").val();
+		var val_typ = jQuery("#wpsg_vp_vartyp").val();
+		
+		wpsg_vp_ajaxloading_show();
+		
+		jQuery.ajax( {			
+			url: '<?php echo WPSG_URL_WP; ?>wp-admin/admin.php?page=wpsg-Produkt&action=ajax&mod=wpsg_mod_varianten&cmd=wpsg_vp_add&noheader=1&edit_id=<?php echo $this->view['wpsg_mod_varianten']['data']['id']; ?>',
+			async: false,
+			data: {				
+				name: val_name,
+				typ: val_typ
+			},
+			success: function(data) {
+				
+				jQuery("#wpsg_vp_drawVarianten").html(data);
+				wpsg_vp_ajaxloading_hide();
+				
+			}
+		} );
+		
+	} // function wpsg_vp_add()
+
+	/**
+	 * Wird von dem Input Feld bei neuen Varianten aufgerufen (onkeypress) um 
+	 */
+	function wpsg_vp_add_input(ev)
+	{
+
+		if (ev && ev.which == 13)
+		{
+
+			wpsg_vp_add();
+			
+		} 
+		
+	} // function wpsg_vp_add_input(ev)
+
+	function wpsg_vp_addVariation_input(ev, k)
+	{
+
+		if (ev && ev.which == 13)
+		{
+
+			wpsg_vp_addVariation(k);
+			
+		} 
+		
+	} 
+
+	function wpsg_vp_refresh()
+	{
+
+		wpsg_vp_ajaxloading_show();
+
+		jQuery.ajax( {
+ 			url: '<?php echo WPSG_URL_WP; ?>wp-admin/admin.php?page=wpsg-Produkt&action=ajax&mod=wpsg_mod_varianten&cmd=wpsg_vp_refreh&noheader=1&edit_id=<?php echo $this->view['wpsg_mod_varianten']['data']['id']; ?>',
+			success: function(data) { 
+
+				jQuery("#wpsg_vp_drawVarianten").html(data);
+				wpsg_vp_ajaxloading_hide(); 
+
+			}
+		} ); 
+
+		return false;
+		
+	}
+	
+	function wpsg_vp_del(var_id)
+	{
+
+		if (!confirm("<?php echo __("Sind Sie sich sicher, dass Sie die Variante und alle Variationen lÃ¶schen mÃ¶chten?", "wpsg"); ?>")) return false;
+
+		wpsg_vp_ajaxloading_show();
+				
+		jQuery.ajax( {
+			url: '<?php echo WPSG_URL_WP; ?>wp-admin/admin.php?page=wpsg-Produkt&action=ajax&mod=wpsg_mod_varianten&cmd=wpsg_vp_del&noheader=1&edit_id=<?php echo $this->view['wpsg_mod_varianten']['data']['id']; ?>',
+			async: false,
+			data: {				
+				var_id: var_id
+			},
+			success: function(data) {
+				
+				jQuery("#wpsg_vp_drawVarianten").html(data);
+				wpsg_vp_ajaxloading_hide();
+				
+			}
+		} ); 
+
+		return false;
+		
+	} // function wpsg_vp_del(var_id)
+
+	function wpsg_vp_deaktiv(var_id, status)
+	{
+
+		wpsg_vp_ajaxloading_show();
+		
+		jQuery.ajax( {
+			url: '<?php echo WPSG_URL_WP; ?>wp-admin/admin.php?page=wpsg-Produkt&action=ajax&mod=wpsg_mod_varianten&cmd=wpsg_vp_deaktiv&noheader=1&edit_id=<?php echo $this->view['wpsg_mod_varianten']['data']['id']; ?>',
+			async: false,
+			data: {				
+				var_id: var_id,
+				status: status
+			},
+			success: function(data) {
+				
+				jQuery("#wpsg_vp_drawVarianten").html(data);
+				wpsg_vp_ajaxloading_hide();
+				
+			}
+		} ); 
+
+		return false;
+		
+	} // function wpsg_vp_deaktiv(var_id, status)
+
+	function wpsg_vp_addVariation(var_id)
+	{
+
+		var vari_name = jQuery("#variante_" + var_id).find(".variation_neu").val();
+		var vari_preis = jQuery("#variante_" + var_id).find(".variation_preis").val();
+
+		wpsg_vp_ajaxloading_show();
+
+		jQuery.ajax( {
+			url: '<?php echo WPSG_URL_WP; ?>wp-admin/admin.php?page=wpsg-Produkt&action=ajax&mod=wpsg_mod_varianten&cmd=wpsg_vp_addVariation&noheader=1&edit_id=<?php echo $this->view['wpsg_mod_varianten']['data']['id']; ?>',
+			async: false,
+			data: {				
+				var_id: var_id,
+				vari_name: vari_name,
+				vari_preis: vari_preis
+			},
+			success: function(data) {
+				 
+				jQuery("#wpsg_vp_drawVarianten").html(data);
+				wpsg_vp_ajaxloading_hide();
+				
+			}
+		} ); 
+
+		return false;
+		
+	}
+
+	function wpsg_vp_vari_del(var_id, vari_id)
+	{
+
+		if (!confirm("<?php echo __("Sind Sie sich sicher, dass Sie die Variation lÃ¶schen mÃ¶chten?", "wpsg"); ?>")) return false;
+		
+		wpsg_vp_ajaxloading_show();
+
+		jQuery.ajax( {
+			url: '<?php echo WPSG_URL_WP; ?>wp-admin/admin.php?page=wpsg-Produkt&action=ajax&mod=wpsg_mod_varianten&cmd=wpsg_vp_vari_del&noheader=1&edit_id=<?php echo $this->view['wpsg_mod_varianten']['data']['id']; ?>',
+			async: false,
+			data: {				
+				var_id: var_id,
+				vari_id: vari_id
+			},
+			success: function(data) {
+				 
+				jQuery("#wpsg_vp_drawVarianten").html(data);
+				wpsg_vp_ajaxloading_hide();
+				
+			}
+		} ); 
+
+		return false;
+		
+	}
+
+	function wpsg_vp_vari_deaktiv(var_id, vari_id, status)
+	{
+
+		wpsg_vp_ajaxloading_show();
+		
+		jQuery.ajax( {
+			url: '<?php echo WPSG_URL_WP; ?>wp-admin/admin.php?page=wpsg-Produkt&action=ajax&mod=wpsg_mod_varianten&cmd=wpsg_vp_vari_deaktiv&noheader=1&edit_id=<?php echo $this->view['wpsg_mod_varianten']['data']['id']; ?>',
+			async: false,
+			data: {				
+				var_id: var_id,
+				vari_id: vari_id,
+				status: status
+			},
+			success: function(data) {
+				 
+				jQuery("#wpsg_vp_drawVarianten").html(data);
+				wpsg_vp_ajaxloading_hide();
+				
+			}
+		} ); 
+
+		return false;
+		
+	}
+
+	<?php } ?>
+
+	function wpsg_vp_ajaxloading_show()
+	{
+
+		jQuery('.wpsg_mod_varianten_ajaxloading').show();
+		
+	}
+
+	function wpsg_vp_ajaxloading_hide()
+	{
+
+		jQuery('.wpsg_mod_varianten_ajaxloading').hide();
+		
+	} 
+	
+	function wpsg_vp_vari_setPic(htmlElement, var_id, vari_id, pic, pic_index)
+	{
+
+		<?php if (!isset($_REQUEST['wpsg_lang'])) { ?>
+
+		wpsg_vp_ajaxloading_show();
+		
+		jQuery.ajax( {
+			url: "<?php echo WPSG_URL_WP; ?>wp-admin/admin.php?page=wpsg-Produkt&action=ajax&mod=wpsg_mod_varianten&cmd=wpsg_vp_vari_setPic&noheader=1&edit_id=<?php echo $this->view['wpsg_mod_varianten']['data']['id']; ?>",
+			async: false,
+			data: {				
+				var_id: var_id,
+				vari_id: vari_id,
+				pic: pic
+			},
+			success: function(data) { 
+				
+				if (vari_id >= 0)
+				{
+					
+					if (jQuery(htmlElement).hasClass('mark'))
+					{
+						jQuery(htmlElement).removeClass('mark');
+					}
+					else
+					{
+						jQuery(htmlElement).addClass('mark');
+					}
+					
+				}
+				else
+				{
+					
+					if (jQuery(htmlElement).hasClass('mark'))
+					{
+						jQuery(htmlElement).removeClass('mark');
+					}
+					else
+					{
+						jQuery(htmlElement).addClass('mark');
+					}
+					
+				}
+
+				wpsg_vp_ajaxloading_hide();
+				
+			}
+		} ); 
+
+		<?php } ?>
+		
+		return false;
+		
+	}
+
+</script>
+  
+
+<div class="panel panel-default" id="wpsg_varianten">
+	<div class="panel-heading clearfix">
+		<h3 class="panel-title">
+			<?php echo __('Varianten', 'wpsg'); ?>	
+		</h3>
+	</div>
+	<div class="panel-body" id="wpsg_vp_drawVarianten">
+		<?php if ($this->view['data']['id'] > 0) { ?>
+		<?php echo $this->callMod('wpsg_mod_varianten', 'drawVarianten', array(&$this->view['wpsg_mod_varianten']['data']['id'])); ?>
+		<?php } else { ?>
+		<p><?php echo __('Varianten kÃ¶nnen erst nach einmaligem Speichern des Produkts angelegt werden.', 'wpsg'); ?></p>
+		<?php } ?>
+
+		<br /><br />
+		
+		<a href="<?php echo WPSG_URL_WP; ?>wp-admin/admin.php?page=wpsg-Admin&action=module&modul=wpsg_mod_varianten><span class="wpsg-glyphicon glyphicon glyphicon-wrench"></span><?php echo __('Zur Konfiguration der Varianten', 'wpsg'); ?></a>
+	</div>
+</div>
Index: /system/intern/views/mod_varianten/settings_edit.phtml
===================================================================
--- /system/intern/views/mod_varianten/settings_edit.phtml	(revision 5987)
+++ /system/intern/views/mod_varianten/settings_edit.phtml	(revision 5987)
@@ -0,0 +1,27 @@
+<?php
+
+	/**
+	 * Einstellungen des Variantenmoduls
+	 */
+
+?>
+<?php echo wpsg_drawForm_Checkbox('wpsg_vp_showpic', __('Direkte Anzeige eines Variantenbildes', 'wpsg'), $this->get_option('wpsg_vp_showpic'), array('help' => 'wpsg_vp_showpic')); ?>
+<?php echo wpsg_drawForm_Checkbox('wpsg_vp_detailview', __('Erweiterte Variantenanzeige aktivieren', 'wpsg'), $this->get_option('wpsg_vp_detailview'), array('help' => 'wpsg_vp_detailview')); ?>
+<?php echo wpsg_drawForm_Checkbox('wpsg_mod_vp_showProduct', __('Ausverkaufte Varianten anzeigen', 'wpsg'), $this->get_option('wpsg_mod_vp_showProduct'), array('help' => 'wpsg_mod_vp_showProduct')); ?>
+<br />
+<?php echo wpsg_drawForm_Input('wpsg_vp_showpic_width', __('Breite des Vorschaubildes', 'wpsg'), $this->get_option('wpsg_vp_showpic_width'), array('help' => 'wpsg_vp_showpic_width')); ?>
+<?php echo wpsg_drawForm_Input('wpsg_vp_showpic_height', __('HÃ¶he des Vorschaubildes', 'wpsg'), $this->get_option('wpsg_vp_showpic_height'), array('help' => 'wpsg_vp_showpic_height')); ?>
+<?php echo wpsg_drawForm_Checkbox('wpsg_vp_replaceanr', __('Produktartikelnummer ersetzen', 'wpsg'), $this->get_option('wpsg_vp_replaceanr'), array('hint' => __('Ersetzt die Produktartikelnummer durch die zusammengesetzte Artikelnummern der Varianten.', 'wpsg'), 'help' => 'wpsg_vp_replaceanr')); ?>
+
+<?php if ($this->hasMod('wpsg_mod_produktbilder')) { ?>
+<br />
+<h3><?php echo __('Bild fÃŒr Varianten mit "Grafikauswahl"', 'wpsg'); ?></h3>
+<?php echo wpsg_drawForm_Input('wpsg_vp_imageselect_width', __('Breite des Vorschaubildes', 'wpsg'), $this->get_option('wpsg_vp_imageselect_width'), array('help' => 'wpsg_vp_imageselect_width')); ?>
+<?php echo wpsg_drawForm_Input('wpsg_vp_imageselect_height', __('HÃ¶he des Vorschaubildes', 'wpsg'), $this->get_option('wpsg_vp_imageselect_height'), array('help' => 'wpsg_vp_imageselect_height')); ?>
+<?php echo wpsg_drawForm_Select('wpsg_vp_imageselect_mode', __('Bild Modus', 'wpsg'), $this->callMod('wpsg_mod_produktbilder', 'getImageModes'), $this->get_option('wpsg_vp_imageselect_mode'), array('help' => 'wpsg_vp_imageselect_mode')); ?>
+<br />
+<?php } ?>
+
+<div class="wpsg_hinweis">
+	<?php echo __('Die direkte Anzeige, zeigt die Bilder direkt an. Es wird dabei fÃŒr jede Variation ein Bild angezeigt. Bei Selectboxen erfolgt die Anzeige ÃŒber den Wechsel der Selectbox. ', 'wpsg'); ?>
+</div>
Index: /system/intern/views/mod_varianten/varianten.js
===================================================================
--- /system/intern/views/mod_varianten/varianten.js	(revision 5987)
+++ /system/intern/views/mod_varianten/varianten.js	(revision 5987)
@@ -0,0 +1,58 @@
+
+	var wpsg_vp_vari = new Array();	
+		  
+	function wpsg_vp_switch(product_id, product_index)
+	{
+			 
+		var var_key = 'vp_' + product_id + "/";
+				
+		for (var i = 0; i < wpsg_vp_vari[product_id].length; i ++)
+		{
+			
+			var_key += i + "_";
+			
+			if (wpsg_vp_vari[product_id][i] == "select")
+			{				
+				var_key += jQuery('#wpsg_produktform_' + product_index + ' .wpsg_produkt_' + product_id + " #wpsg_vpfield_" + product_id + "_" + i).val();				
+			}
+			else if (wpsg_vp_vari[product_id][i] == "radio")
+			{
+				var_key += jQuery('#wpsg_produktform_' + product_index + ' .wpsg_produkt_' + product_id + ' input[name="wpsg_vp[' + i + ']"]:checked').val();
+			}
+			else if (wpsg_vp_vari[product_id][i] == "checkbox")
+			{
+				var_key += jQuery('#wpsg_produktform_' + product_index + ' .wpsg_produkt_' + product_id + ' input[name="wpsg_vp[' + i + ']"]:checked').length;
+			} 
+			else if (wpsg_vp_vari[product_id][i] == "image")
+			{
+				var_key += jQuery('#wpsg_produktform_' + product_index + ' .wpsg_produkt_' + product_id + ' .wpsg_mod_varianten_imageselect_' + i + ' .akt').attr("data-wpsg-id");
+			}
+			
+			if (i < (wpsg_vp_vari[product_id].length - 1)) var_key += ":";
+			
+		}
+		 
+		jQuery('#wpsg_produktform_' + product_index).append('<div class="wpsg_product_layer"><img src="' + wpsg_ajax.img_ajaxloading + '" alt="' + wpsg_ajax.label_pleasewait + '" /></div>');
+ 
+		jQuery.ajax( {
+			'url': wpsg_ajax.ajaxurl,
+			'method': 'get',
+			'data': {
+				'action': 'wpsg_varianten_switch',
+				'wpsg_post_id': jQuery('#wpsg_produktform_' + product_index + ' input[name="wpsg_post_id"]').val(),
+				'quantity': jQuery('#wpsg_menge_' + product_index).val(),
+				'template': jQuery('#wpsg_produktform_' + product_index + ' input[name="wpsg[template]"]').val(),
+				'referer': jQuery('#wpsg_produktform_' + product_index + ' input[name="myReferer"]').val(),
+				'form_data': jQuery('#wpsg_produktform_' + product_index).serialize(),
+				'product_key': var_key,
+				'product_index': product_index
+			},
+			'success': function(data) {
+		 
+				jQuery('#wpsg_produktform_' + product_index).replaceWith(data);
+				
+			}
+		} );
+		
+	} // function wpsg_vp_switch(produkt_id)
+	
