<?php

/* Copyright LogiVert (www.logivert.com) */
header('P3P: CP="CAO PSA OUR"');
header('Content-Type:text/html; charset=utf-8');
date_default_timezone_set("Europe/Amsterdam");

ini_set('display_errors', 0);
ini_set('error_log', 'lvlog/php.log');
error_reporting(0);

if (ini_get('default_charset')) {
    ini_set('default_charset', 'utf-8');
}
include_once('smarty/Smarty.class.php');
include('framework/init.php');
include_once('framework/canonicaltag.php');
include_once('framework/customxml.class.php');
include_once('framework/cookiecheck.php');
include_once('framework/functions.php');
include_once('framework/freeblocks.php');
include_once('framework/freemenus.php');
$pg = new POSTGET();
session_start();

global $conf;
global $shop_root_dir;
global $globallang;
$conf = new ConfigLoader(array("lvconfig/options.xml", "lvconfig/text.xml", "lvconfig/languages_selection.xml", "lvconfig/member_area.xml"));
$c = new CustomXML("lvconfig/options.xml");
$text = new CustomXML("lvconfig/options.xml");
$lvShowPriceMode = $conf->data['LV_OPTIONS']['LV_SHOWPRICE_MODE'];
if (isset($conf->data['LV_OPTIONS']['LV_BLOCKED']) && ($conf->data['LV_OPTIONS']['LV_BLOCKED'] == 1)) {
    echo '<html><meta name="robots" content="noindex, nofollow" />This site is blocked by administrator.</html>';
    exit;
}
$deviceMustbeset = ((!isset($_SESSION['lv_device']) || ($_SESSION['lv_device'] == '')) && ((isset($conf->data['LV_OPTIONS']['LV_MOBILE_ENABLED']) && ($conf->data['LV_OPTIONS']['LV_MOBILE_ENABLED'] == 1)) || (isset($conf->data['LV_OPTIONS']['LV_SOCIAL_ENABLED']) && ($conf->data['LV_OPTIONS']['LV_SOCIAL_ENABLED'] == 1))));
setSessionDevice($conf, $pg);
$tpl = new Template($_SESSION['lv_device']);
$tpl->assign('LV_DEVICE', $_SESSION['lv_device']);

$ociDebug = false;
$ociLog = new Log(__DIR__ . '/lvlog/oci.log', $ociDebug);
if(isset($_SESSION['oci']) && $_SESSION['oci'] == true) {
    $ociData = array(
        'module' => $_SESSION['oci_module'],
        'return' => $_SESSION['oci_return'],
    );
    $oci = new Oci($ociData);
}

if (isset($conf->data['LV_OPTIONS']['LV_BUDGETCOUNTER']) && ($conf->data['LV_OPTIONS']['LV_BUDGETCOUNTER'] == 1)) {
    $oBudget = new BudgetCounter();
    $oBudget->getBudgetDetails();
    $fCurBudgetAmount = $oBudget->getCurrentBudget();
    $tpl->assign('fBudget', $fCurBudgetAmount);
    $tpl->assign('aBudgetDetails', $oBudget->getBudgetDetails());
}

if ($pg->exists("action")) {
    if ($pg->action == "a") {
        $pg->action = "article";
    } elseif ($pg->action == "e") {
        $pg->action = "extra";
    } elseif ($pg->action == "p") {
        $pg->action = "page";
    }
    $action = $pg->action;
} else {
    $action = "";
}
if ($pg->exists("time")) {
    $pg->_unset("time");
}
if ($pg->exists("oldurl")) {
    $oldurl = $pg->oldurl;
    $oldurl = urldecode($oldurl);
    $oldurl = str_replace('&amp;', '&', $oldurl);
    if ((strlen($oldurl) > 0) && ($oldurl[0] == '/')) {
        $oldurl = substr($oldurl, 1);
    }
} else {
    $oldurl = '';
}
checkSettingsConf($conf, $action);
$httpreferrer = $_SERVER['HTTP_REFERER'];
$fullhttps = $conf->data['LV_OPTIONS']['LV_ORDER_SSL_FULL'];

if (($fullhttps != 1) && ($action != "order") && isset($httpreferrer) && (strpos($httpreferrer, 'ttps://' . $_SERVER['HTTP_HOST']) == 1)) {
    lvredirect(redirectToHttp($dir, $pg));
} else {
    $shop_root_dir = getShopRootDir($fullhttps, $action, $conf, $isSSL);
    $_SESSION['http_pref'] = $shop_root_dir;
    $tpl->assign('http_pref', $shop_root_dir);
    $tpl->assign('isssl', $isSSL);
    if (isset($conf->data['LV_OPTIONS']['LV_MSHOP_SOURCE']) && ($conf->data['LV_OPTIONS']['LV_MSHOP_SOURCE'] != '')) {
        $_SESSION['http_mshop'] = $conf->data['LV_OPTIONS']['LV_MSHOP_SOURCE'];
    } else {
        $_SESSION['http_mshop'] = $_SESSION['http_pref'];
    };
    $tpl->assign('http_mshop', $_SESSION['http_mshop']);
    $_SESSION['http_pref_payment'] = str_replace('https://', 'http://', $shop_root_dir);
    $tpl->assign('http_pref_payment', str_replace('https://', 'http://', $shop_root_dir));
    $tpl->assign('refferer', (isset($httpreferrer) ? $httpreferrer : NULL));
    if (isset($_SESSION['vatitems'])) {
        $vatitems = $_SESSION['vatitems'];
    } else {
        $vatitems_xml = new CustomXML('lvconfig/vatitems.xml');
        $vatitems = array();
        foreach ($vatitems_xml->xml['LV_VATITEMS']['LV_VATITEM'] as $v) {
            $vatitems[$v['LV_NUMBER']] = $v;
        } unset($vatitems_xml);
        $_SESSION['vatitems'] = $vatitems;
    }
    try {
        $tpl->xmlArray2Smarty($conf->data['LV_OPTIONS']);
        $tpl->xmlArray2Smarty($conf->data['LV_TEXT']);
        $tpl->xmlArray2Smarty(array('LV_LANGUAGES_SELECTION' => $conf->data['LV_LANGUAGES_SELECTION']));
        $language = new Language($tpl);
        if ($pg->exists("lang") && $language->isLanguageExists(strtoupper($pg->lang))) {
            $pg->lang = strtolower($pg->lang);
            $tpl->assign('LV_LANGUAGECODE', $pg->lang);
            $language->setLanguage($pg->lang);
            $url = $_SERVER['REQUEST_URI'];
            $url = str_replace(('&amp;lang=' . $pg->lang), '', $url);
            $url = str_replace(('&lang=' . $pg->lang), '', $url);
            if (strpos($url, 'action=') == false) {
                if (strpos($url, 'index.php?') != false) {
                    $url = str_replace('index.php?', 'index.php', $url);
                } $url = str_replace('index.php', 'index.php?action=home', $url);
            }
            if (strpos($url, '/index.php?') != false) {
                $url = substr($url, strpos($url, '/index.php?') + 1);
            }
            $tpl->assign('curr_url', $url);
        } else {
            if (isset($_SESSION['globallang'])) {
                $language->setLanguage($_SESSION['globallang']);
            } else {
                $language->setLanguage($conf->data['LV_OPTIONS']['LV_LANGUAGECODE']);
            }
        }
        $tpl->assign('RECOMMENDED_PRICE_SHOW_LANG', "LV_LANG_" . strtoupper($language->getCurrentLanguage()));
        $currentLanguage = $language->getCurrentLanguage();
        if (!isset($tpl->tpl_vars['curr_url']) || $tpl->tpl_vars['curr_url'] == '') {
            if (isset($conf->data['LV_OPTIONS']['LV_STATIC_URLS']) && ($conf->data['LV_OPTIONS']['LV_STATIC_URLS'] != '1')) {
                $url = $shop_root_dir . 'index.php?action=home';
                if (strpos($url, '/index.php?') != false) {
                    $url = substr($url, strpos($url, '/index.php?') + 1);
                }
                $tpl->assign('curr_url', $url);
            } else {
                $tpl->assign('curr_url', $_SERVER['REQUEST_URI']);
            }
        }
    } catch (Exception $e) {
        
    }
    $tpl->assign('LV_LANGUAGECODE', strtolower($tpl->tpl_vars['LV_LANGUAGECODE']));

    if ($pg->exists('group_id')) {
        $group_id = $pg->group_id;
    } else {
        $group_id = 0;
    }
    try {
        $group = new Groups($group_id, $currentLanguage);
    } catch (Exception $e) {
        echo $e->__toString();
    }
    $tpl->assign('LV_MAIN_GROUPS', $group->main);
    $tpl->assign('LV_GROUPS_FULLSTRUCT', $group->fullstruct);
    getGroupLevelId($tpl, $group);
    $attr = new Attributes($conf, $pg->values['attr'], $currentLanguage);
    if ($attr->set) {
        $tpl->assign('LV_ATTR_FULLSTRUCT', $attr->fullstruct);
    }

    $extrapages = new extrapages($tpl, "lvconfig/extrapages.xml", $currentLanguage);
    if (isset($conf->data['LV_OPTIONS']['LV_FREEBLOCKS_ENABLED']) && ($conf->data['LV_OPTIONS']['LV_FREEBLOCKS_ENABLED'] == 1)) {
        constructFreeblocks($tpl, "lvconfig/freeblocks.xml", $currentLanguage);
    };
    constructFreemenus($tpl, "lvconfig/freemenu.xml", $currentLanguage);
    $tpl->assign('LV_PATH', $group->path);
    $tpl->assign('LV_SUBGROUPS', $group->sub);
    $tpl->assign('LV_CURRENT_GROUP', $group->current);
    $validator = new Login($tpl);
    // Affiliates
    if ($pg->exists('lv_af') && (preg_match('/^\d*$/', $pg->lv_af) == 1)) {
        $_SESSION['lv_af'] = $pg->lv_af;
        setcookie($GLOBALS['conf']->data['LV_OPTIONS']['LV_SESSIONID'] . 'LastLvAf', $pg->lv_af, time() + (86400 * 14));
    } elseif (isset($_SESSION['lv_af'])) {
        if ($_SESSION['Alpha'] != -1) {
            unset($_SESSION['lv_af']);
        }
    } elseif ($_COOKIE[$GLOBALS['conf']->data['LV_OPTIONS']['LV_SESSIONID'] . 'LastLvAf'] != '') {
        $_SESSION['lv_af'] = $_COOKIE[$GLOBALS['conf']->data['LV_OPTIONS']['LV_SESSIONID'] . 'LastLvAf'];
    }
    //login
    $tpl->assign('member_mode', $member_mode = $conf->data['logivert']['LV_MEMBER_MODE']);
    $tpl->assign('member_showarticles', $member_showarticles = $conf->data['logivert']['LV_MEMBER_SHOWARTICLES']);
    if (isset($conf->data['logivert']['LV_MEMBER_EMAILLOGIN'])) {
        $tpl->assign('member_emaillogin', $conf->data['logivert']['LV_MEMBER_EMAILLOGIN']);
    } else {
        $tpl->assign('member_emaillogin', '0');
    }
    $tpl->assign('member_showprices', "1");
    if ($pg->exists('passerror')) {
        if ($pg->passerror == 2) {
            $tpl->assign('loginerror', $tpl->getTemplateVars('LV_LOGIN_INSERVICEMODE'));
        } else {
            $tpl->assign('loginerror', $tpl->getTemplateVars('LV_LOGIN_ERROR'));
        }
    }
    if ($member_mode == "Necessary") {
        if ($action == "register") {
            $action = "home";
        }
        if (($action != "login") && ($tpl->getTemplateVars('username') == "")) {
            $tpl->assign('LV_SHOPPINGCART_ENABLED', "0");
            $tpl->assign('LV_ATTPROMOARTICLES_ENABLED', "0");
            // if login is necessary, user isn't logged in and articles may not be shown to "un"logged users then show home page psp_paymentStatus
            if ($member_showarticles != 1) {
                if (($action != "extra") && ($action != "home") && ($action != "formmail") && ($action != "recover") && ($action != "psp_paymentStatus")) {
                    $action = "home";
                }
            }
            $hidearticlegroups = (isset($conf->data['logivert']['LV_MEMBER_HIDEARTICLEGROUPS']) ? $conf->data['logivert']['LV_MEMBER_HIDEARTICLEGROUPS'] : '0');
        }
        if ($tpl->getTemplateVars('username') == "") {
            $tpl->assign('member_showprices', "0");
        }
    }
    $tpl->assign('hidearticlegroups', (isset($hidearticlegroups) ? $hidearticlegroups : '0'));
    if ($_SESSION['Alpha'] != -1) {
        $tpl->assign('member_invisib_inorder_countryselect', $conf->data['logivert']['LV_MEMBER_INVISIB_INORDER_COUNTRYSELECT']);
        $tpl->assign('member_invisib_inorder_wayofdelivery', $conf->data['logivert']['LV_MEMBER_INVISIB_INORDER_WAYOFDELIVERY']);
        $tpl->assign('member_invisib_inorder_wayofpayment', $conf->data['logivert']['LV_MEMBER_INVISIB_INORDER_WAYOFPAYMENT']);
        $tpl->assign('member_invisib_inorder_step2', $conf->data['logivert']['LV_MEMBER_INVISIB_INORDER_STEP2']);
    }
    //
    if ($conf->data['LV_OPTIONS']['LV_CLIENT_DISPLAY_CHANGE_ENABLED']) {
        if (!isset($_SESSION['artldisplay']) || ($_SESSION['artldisplay'])) {
            $_SESSION['artldisplay'] = $conf->data['LV_OPTIONS']['LV_ARTLIST_COMPACTDISPLAY'];
        }
        if ($_SESSION['artldisplay'] == "0") {
            $conf->data['LV_OPTIONS']['LV_ARTLIST_COMPACTDISPLAY'] = "0";
            $conf->data['LV_OPTIONS']['LV_ARTLIST_LINEDISPLAY'] = "1";
            $tpl->assign('LV_CLIENT_ARTICLE_DISPLAY', 1);
        } else {
            $conf->data['LV_OPTIONS']['LV_ARTLIST_COMPACTDISPLAY'] = "1";
            $conf->data['LV_OPTIONS']['LV_ARTLIST_LINEDISPLAY'] = "0";
            $tpl->assign('LV_CLIENT_ARTICLE_DISPLAY', 0);
        }
    }
    $highlightblocks = new Highlightblocks($tpl);
    $attention = new Attention($tpl, $currentLanguage, true);
    $attention->Assign(-1, true);
    $promotion = new Attention($tpl, $currentLanguage, false);
    $promotion->Assign(-1, false);
    $tpl->assign('LV_ATTPROMOARTICLES_ENABLED', "1");
    if (($action == "") && ($conf->data['LV_OPTIONS']['LV_LANGUAGE_SELECTION_PAGE'] == 0)) {
        $action = "home";
    };
    setBaseMetatags($tpl, $deviceMustbeset, $baseMetatags, $shop_root_dir);
    $tpl->assign('tags', getTags());
    $tpl->assign('customblocks', getCustomblocks($conf->data['LV_OPTIONS']['LV_CUSTOMBLOCKS_ENABLED']));
    if ((($action == "search") || ($action == "advanced_search_results")) && ((isset($conf->data['LV_OPTIONS']['LV_SEARCH_DETAILRESULT'])) && ($conf->data['LV_OPTIONS']['LV_SEARCH_DETAILRESULT'] == 1))) {
        $action = $action . "_detail";
    }
    if ($action == "psp_success_url" || $action == "psp_cancel_url") {
        $next_action = 'home';

        $lastOrderName = $_COOKIE[$GLOBALS['conf']->data['LV_OPTIONS']['LV_SESSIONID'] . 'LastOrderName'];
        $path = "./data/orders/";
        if ($lastOrderName != '') {
            if ((is_dir($path)) && (file_exists($path . $lastOrderName))) {
                $lastOrder = new CustomXML($path . $lastOrderName);
                $lastOrder_xml = $lastOrder->xml['Logivert'];
            }
        } else {
            require_once('framework/psp_common.class.php');
            $lastOrder_xml = psp_findAndLoadOrderFile($pg, $path);
        }

        if ($action == "psp_success_url") {
            include_once('framework/psp_common.class.php');
            $payment_successful = psp_check_success_return($lastOrder_xml, $pg);
            if ($payment_successful == 1) {
                if ($conf->data['LV_OPTIONS']['LV_GA_ECOM_TRACKING_ON'] == "payment_success") {
                    if (!isset($lastOrder_xml['orders']['ITEM'][0])) {
                        $lastOrder_xml['orders']['ITEM'] = array(0 => $lastOrder_xml['orders']['ITEM']);
                    }
                    $totalcostArts = 0;
                    foreach ($lastOrder_xml['orders']['ITEM'] as $v) {
                        $totalcostArts = $totalcostArts + $v['quantity'] * $v['unit_price_show'];
                    }
                    $tpl->assign('last_order', $lastOrder_xml['orders']['ITEM']);
                    $tpl->assign('last_order_id', $lastOrder_xml['order_number']);
                    $tpl->assign('last_total_cost', $lastOrder_xml['total_cost']);
                    $tpl->assign('last_ship_price', $lastOrder_xml['ship_price']);
                    $tpl->assign('last_order_costs', $lastOrder_xml['total_cost'] - $totalcostArts);
                    $tpl->assign('order', $lastOrder_xml['orders']['ITEM']);
                    $tpl->assign('order_id', $lastOrder_xml['order_number']);
                    $tpl->assign('total_cost', $lastOrder_xml['total_cost']);
                    $tpl->assign('ship_price', $lastOrder_xml['ship_price']);
                    $tpl->assign('order_costs', $lastOrder_xml['total_cost'] - $totalcostArts);
                    $tpl->assign('LV_OPTIONS_SITEFOOTERTEXT', $tpl->tpl_vars['LV_OPTIONS_SITEFOOTERTEXT'] . $conf->data['LV_OPTIONS']['LV_PSP_SUCCESS_URL_CODE']);
                }
                if (isset($lastOrder_xml['payment_successpage']) && ($lastOrder_xml['payment_successpage'] != '')) {
                    $next_action = 'extra';
                    $pg->extra = $lastOrder_xml['payment_successpage'];
                }
            } else {
                if (isset($lastOrder_xml['payment_cancelpage']) && ($lastOrder_xml['payment_cancelpage'] != '')) {
                    $next_action = 'extra';
                    $pg->extra = $lastOrder_xml['payment_cancelpage'];
                }
            }
        } else {
            if (isset($lastOrder_xml['payment_cancelpage']) && ($lastOrder_xml['payment_cancelpage'] != '')) {
                $next_action = 'extra';
                $pg->extra = $lastOrder_xml['payment_cancelpage'];
            }
        }
        $action = $next_action;
    }
    if (isset($conf->data['LV_OPTIONS']['LV_SLIDESHOW']) && ($conf->data['LV_OPTIONS']['LV_SLIDESHOW'] == 4)) {
        $slide = new ConfigLoader(array("lvconfig/slide.xml"));
        if (isset($slide->data['LV_SLIDE']) && isset($slide->data['LV_SLIDE']['LV_ITEM'])) {
            $tpl->xmlArray2Smarty(array('LV_SLIDE' => $slide->data['LV_SLIDE']['LV_ITEM']));
        }
    }
    $tpl->assign('action', $action);

    switch ($action) {
        case "home":
            // Check if sitemap.xml exists. This is only needed if some error occured while creating the sitemap by the offline back-office. The creation of the sitemap offline is beter optimized, it's thereby adviced to use the sitemap created by the offline back-office.
            if (!file_exists('sitemap.xml')) {
                $sitemap = new Genmap($language);
            }
            try {
                $conf_home = new ConfigLoader(array("lvconfig/articles_promotion_block.xml", "lvconfig/articles_promotion.xml"));
                if (isset($conf_home->data['LV_ARTICLES_ATTENTION_BLOCK'])) {
                    $tpl->xmlArray2Smarty(array('LV_ARTICLES_ATTENTION_BLOCK' => $conf_home->data['LV_ARTICLES_ATTENTION_BLOCK']));
                }
                if (isset($conf_home->data['LV_ARTICLES_PROMOTION_BLOCK'])) {
                    $tpl->xmlArray2Smarty(array('LV_ARTICLES_PROMOTION_BLOCK' => $conf_home->data['LV_ARTICLES_PROMOTION_BLOCK']));
                }
                addBasketToTemplate($tpl, $currentLanguage, $lvShowPriceMode);
            } catch (Exception $e) {
                echo $e->__toString();
            }
            $baseMetatags .= $language->xml_array['LV_META_TAGS'];
            $tpl->assign('LV_METATAG', AddCanonicalTag($baseMetatags, $shop_root_dir, $action, '', '', $currentLanguage));

            $oNews = new News();
            $aLastItems = $oNews->getLastItems(3);

            if ($conf->data['LV_OPTIONS']['LV_HOMEPAGE'] && $conf->data['LV_OPTIONS']['LV_HOMEPAGE'] != "") {
                lvredirect($conf->data['LV_OPTIONS']['LV_HOMEPAGE']);
            } else {
                $tpl->assign('layout_include', 'page.home.html');
                $tpl->assign('aNewsItems', $aLastItems);
                lvDisplay($tpl, 'layout.html');
            }
            break;

        case "article":
            try {
                if ($pg->exists('srchval')) {
                    lvRegisterSearch(html_entity_decode($pg->srchval, NULL, 'UTF-8'), $currentLanguage, '1');
                }
                if (($pg->exists('justinbasket')) && ($pg->justinbasket == 'true')) {
                    $tpl->assign('justinbasket', 1);
                } else {
                    $tpl->assign('justinbasket', 0);
                }
                addBasketToTemplate($tpl, $currentLanguage, $lvShowPriceMode);
                $art = new Article($pg->aid);
                if ($art->data['artnotavailable'] == 1) {
                    $tpl->assign('layout_include', 'page.errors.html');
                    $errors = $language->xml_array['LV_TEXT_ARTNOTAVAILABLE'];
                    $tpl->assign('errors', $errors);
                } else {
                    $article = $art->data;
                    if ($pg->exists('svariant') && $pg->svariant == 1) {
                        
                    } else {
                        if ($article['has_variantparents'] == 1) {
                            $art = new Article($article['variantparents']['variant_parent']);
                            $article = $art->data;
                            $pg->aid = $article['nr'];
                        }
                    }
                    $curr_lang = 'lang_' . $currentLanguage;
                    $article['description'] = $article['description'][$curr_lang];
                    $article['descriptionandmeasure'] = $article['descriptionandmeasure'][$curr_lang];
                    $article['measure'] = $article['measure'][$curr_lang];
                    $article['urlitem'] = $article['urlitem'][$curr_lang];
                    if (isset($article['specification'])) {
                        $article['specification'] = $article['specification'][$curr_lang];
                    }
                    if (isset($article['shortmemo'])) {
                        $article['shortmemo'] = $article['shortmemo'][$curr_lang];
                    }
                    if (isset($article['longmemo'])) {
                        $article['longmemo'] = $article['longmemo'][$curr_lang];
                    }
                    $curr_lang2 = 'LV_ARTICLES_' . strtoupper($curr_lang);
                    if (isset($article['lightbox']) && isset($article['lightbox']['lightbox_big'])) {
                        $article['use_lightbox'] = 1;
                        if (!is_array($article['lightbox']['lightbox_big']['picture'])) {
                            $article['lightbox']['lightbox_big']['picture'] = array(0 => $article['lightbox']['lightbox_big']['picture']);
                        }
                        if (!is_array($article['lightbox']['lightbox_small']['picture'])) {
                            $article['lightbox']['lightbox_small']['picture'] = array(0 => $article['lightbox']['lightbox_small']['picture']);
                        }
                    } else {
                        $article['use_lightbox'] = 0;
                    }
                    if (!isset($article['bottom_scripts'])) {
                        $article['bottom_scripts'] = '';
                    }
                    if ($article['use_variants'] == 0) {
                        $article = $art->article_language_conversions($article, $art->get_stock_quantity($art['nr']), $currentLanguage, $art->get_stockslave_quantity($art['nr']));
                    } elseif ($article['use_variants'] == 1) {
                        $article_variants = array();
                        if (isset($article['variants']['variant'])) {
                            if (!is_array($article['variants']['variant'][0])) {
                                $article['variants']['variant'] = array(0 => $article['variants']['variant']);
                            }
                            foreach ($article['variants']['variant'] as $v) {
                                $a = $art->get_another_product($v['variant_art'], 1);
                                if ($a) {
                                    $a['stdam'] = $v['variant_stdam'];
                                    $a = $art->article_language_conversions($a, $art->get_stock_quantity($a['nr']), $currentLanguage, $art->get_stockslave_quantity($a['nr']));
                                    $a['descriptionandmeasure'] = $a['descriptionandmeasure'][$curr_lang];
                                    if (isset($a['shortmemo'])) {
                                        $a['shortmemo'] = $a['shortmemo'][$curr_lang];
                                    }
                                    if (isset($a['longmemo'])) {
                                        $a['longmemo'] = $a['longmemo'][$curr_lang];
                                    }
                                    if (isset($a['options_struct']['options_struct_item'][0]) && (sizeof($a['options_struct']['options_struct_item'][0]) == 0)) {
                                        unset($a['options_struct']);
                                    }
                                    if (isset($a['text_struct']['text_struct_item'][0]) && (sizeof($a['text_struct']['text_struct_item'][0]) == 0)) {
                                        unset($a['text_struct']);
                                    }
                                    $real_vat = 0;
                                    if (isset($vatitems[$a['vat']])) {
                                        if (isset($vatitems[$a['vat']]['LV_PERCENTAGE'])) {
                                            $real_vat = $vatitems[$a['vat']]['LV_PERCENTAGE'];
                                        }
                                    }
                                    $a['vat'] = $real_vat;
                                    $a['price_currname'] = $a['price_currname'][$curr_lang];
                                    $a['availability']['availability_text'] = $a['availability'][$curr_lang]['availability_text'];
                                    if (isset($a['pictbiblio']['item'])) {
                                        $a['pictbiblio']['item'] = $art->get_picturebiblio($a['pictbiblio']['item']);
                                    }
                                    $a['stock_qty'] = $art->get_stock_quantity($a['nr']);
                                    $article_variants[] = $a;
                                }
                            }
                        } elseif (isset($article['variants']['variant_article'])) {
                            if (!is_array($article['variants']['variant_article'])) {
                                $article['variants']['variant_article'] = array(0 => $article['variants']['variant_article']);
                            }
                            foreach ($article['variants']['variant_article'] as $v) {
                                $a = $art->get_another_product($v, 1);
                                if ($a) {
                                    $a = $art->article_language_conversions($a, $art->get_stock_quantity($a['nr']), $currentLanguage, $art->get_stockslave_quantity($a['nr']));
                                    $a['descriptionandmeasure'] = $a['descriptionandmeasure'][$curr_lang];
                                    if (isset($a['shortmemo'])) {
                                        $a['shortmemo'] = $a['shortmemo'][$curr_lang];
                                    }
                                    if (isset($a['longmemo'])) {
                                        $a['longmemo'] = $a['longmemo'][$curr_lang];
                                    }
                                    if (isset($a['options_struct']['options_struct_item'][0]) && (sizeof($a['options_struct']['options_struct_item'][0]) == 0)) {
                                        unset($a['options_struct']);
                                    }
                                    if (isset($a['text_struct']['text_struct_item'][0]) && (sizeof($a['text_struct']['text_struct_item'][0]) == 0)) {
                                        unset($a['text_struct']);
                                    }
                                    $real_vat = 0;
                                    if (isset($vatitems[$a['vat']])) {
                                        if (isset($vatitems[$a['vat']]['LV_PERCENTAGE'])) {
                                            $real_vat = $vatitems[$a['vat']]['LV_PERCENTAGE'];
                                        }
                                    }
                                    $a['vat'] = $real_vat;
                                    $a['price_currname'] = $a['price_currname'][$curr_lang];
                                    $a['availability']['availability_text'] = $a['availability'][$curr_lang]['availability_text'];
                                    if (isset($a['pictbiblio']['item'])) {
                                        $a['pictbiblio']['item'] = $art->get_picturebiblio($a['pictbiblio']['item']);
                                    }
                                    $a['stock_qty'] = $art->get_stock_quantity($a['nr']);
                                    $article_variants[] = $a;
                                }
                            }
                        }
                        $tpl->assign('article_variants', $article_variants);
                    }
                    if (isset($article['related_products']['item'])) {
                        if (!is_array(current($article['related_products']['item']))) {
                            $article['related_products']['item'] = array(0 => $article['related_products']['item']);
                        }
                        foreach ($article['related_products']['item'] as $k => $v) {
                            $a = $art->get_another_product($v['article_nr']);
                            if ($a) {
                                if (is_array(current($a['LV_ARTICLES_GROUP']))) {
                                    $a_group = $a['LV_ARTICLES_GROUP']['LV_ARTICLES_ITEM'][0];
                                } else {
                                    $a_group = $a['LV_ARTICLES_GROUP']['LV_ARTICLES_ITEM'];
                                }
                                $article['related_products']['item'][$k]['group_id'] = $a_group;
                                $article['related_products']['item'][$k]['descriptionandmeasure'] = $a['LV_ARTICLES_DESCRIPTIONANDMEASURE'][$curr_lang2];
                                $article['related_products']['item'][$k]['picturemini'] = $a['LV_ARTICLES_PICTUREMINI'];
                                $article['related_products']['item'][$k]['picturesmall'] = $a['LV_ARTICLES_PICTURESMALL'];
                                $article['related_products']['item'][$k]['price_currname'] = $a['LV_ARTICLES_PRICE_CURRNAME'][$curr_lang2];
                                $article['related_products']['item'][$k]['showprice_mode'] = $a['LV_ARTICLES_SHOWPRICE_MODE'];
                                $article['related_products']['item'][$k]['urlitem'] = $a['LV_ARTICLES_URLITEM'][$curr_lang2];
                                $article['related_products']['item'][$k]['nr'] = $a['LV_ARTICLES_NR'];
                                $article['related_products']['item'][$k]['show_pricetext'] = $a['LV_ARTICLES_SHOW_PRICETEXT'];
                                $article['related_products']['item'][$k]['shoppingcart_disabled'] = $a['LV_ARTICLES_SHOPPINGCART_DISABLED'];
                                $real_vat = 0;
                                if (isset($vatitems[$a['LV_ARTICLES_VAT']])) {
                                    if (isset($vatitems[$a['LV_ARTICLES_VAT']]['LV_PERCENTAGE'])) {
                                        $real_vat = $vatitems[$a['LV_ARTICLES_VAT']]['LV_PERCENTAGE'];
                                    }
                                }
                                $article['related_products']['item'][$k]['vat'] = $real_vat;
                            }
                        }
                    }
                    // Cross Marketing
                    if (isset($article['cm']['cm_text'])) {
                        $article['cm']['cm_text'] = $article['cm']['cm_text'][$curr_lang];
                        if (isset($article['cm']['cm_item'])) {
                            if (!is_array($article['cm']['cm_item'])) {
                                $article['cm']['cm_item'] = array(0 => $article['cm']['cm_item']);
                            }
                            foreach ($article['cm']['cm_item'] as $v) {
                                $a = $art->get_another_product($v);
                                if ($a) {
                                    if (is_array(current($a['LV_ARTICLES_GROUP']))) {
                                        $a_group = $a['LV_ARTICLES_GROUP']['LV_ARTICLES_ITEM'][0];
                                    } else {
                                        $a_group = $a['LV_ARTICLES_GROUP']['LV_ARTICLES_ITEM'];
                                    }
                                    $real_vat = 0;
                                    if (isset($vatitems[$a['LV_ARTICLES_VAT']])) {
                                        if (isset($vatitems[$a['LV_ARTICLES_VAT']]['LV_PERCENTAGE'])) {
                                            $real_vat = $vatitems[$a['LV_ARTICLES_VAT']]['LV_PERCENTAGE'];
                                        }
                                    }
                                    $article['cm']['products'][] = array(
                                        'nr' => $a['LV_ARTICLES_NR'],
                                        'group_id' => $a_group,
                                        'picturesmall' => $a['LV_ARTICLES_PICTURESMALL'],
                                        'picturemini' => $a['LV_ARTICLES_PICTUREMINI'],
                                        'description' => $a['LV_ARTICLES_DESCRIPTION'][$curr_lang2],
                                        'measure' => $a['LV_ARTICLES_MEASURE'][$curr_lang2],
                                        'descriptionandmeasure' => $a['LV_ARTICLES_DESCRIPTIONANDMEASURE'][$curr_lang2],
                                        'urlitem' => $a['LV_ARTICLES_URLITEM'][$curr_lang2],
                                        'price_currname' => $a['LV_ARTICLES_PRICE_CURRNAME'][$curr_lang2],
                                        'price' => $a['LV_ARTICLES_PRICE_SHOW'],
                                        'showprice_mode' => $a['LV_ARTICLES_SHOWPRICE_MODE'],
                                        'vat' => $real_vat,
                                        'first_group' => $a['first_group'],
                                        'show_pricetext' => $a['LV_ARTICLES_SHOW_PRICETEXT'],
                                        'shoppingcart_disabled' => $a['LV_ARTICLES_SHOPPINGCART_DISABLED']
                                    );
                                }
                            }
                        }
                    }
                    if (isset($article['ecotaxes']['ecotax']) && !is_array(current($article['ecotaxes']['ecotax']))) {
                        $article['ecotaxes']['ecotax'] = array(0 => $article['ecotaxes']['ecotax']);
                    }
                    if (!empty($article['recommendedprice'])) {
                        if (is_array($article['recommendedprice'])) {
                            $tpl->assign('INVALID_RECOMMENDED_PRICE', 'true');
                        } else {
                            $tpl->assign('INVALID_RECOMMENDED_PRICE', 'false');
                        }
                    } else {
                        $tpl->assign('INVALID_RECOMMENDED_PRICE', 'false');
                    }
                    if (isset($conf->data['LV_OPTIONS']['LV_REVIEW_ENABLED']) && ($conf->data['LV_OPTIONS']['LV_REVIEW_ENABLED'] == 1)) {
                        if (isset($article['review_total']) && ($article['review_total'] >= 1)) {
                            $article['reviews'] = $art->get_reviews($pg->aid, strtoupper($currentLanguage));
                        }
                    }
                    $article = $art->setArticleAttributes($conf, $article, $attr, $currentLanguage);
                    $real_vat = 0;
                    if (isset($vatitems[$article['vat']])) {
                        if (isset($vatitems[$article['vat']]['LV_PERCENTAGE'])) {
                            $real_vat = $vatitems[$article['vat']]['LV_PERCENTAGE'];
                        }
                    }
                    $article['vat'] = $real_vat;
                    $article['availability']['availability_text'] = $article['availability'][$curr_lang]['availability_text'];
                    if (($article['options_struct'] != '') && isset($article['options_struct']['options_struct_item'][0]) && (sizeof($article['options_struct']['options_struct_item'][0]) == 0)) {
                        unset($article['options_struct']);
                    }
                    if (($article['text_struct'] != '') && isset($article['text_struct']['text_struct_item'][0]) && (sizeof($article['text_struct']['text_struct_item'][0]) == 0)) {
                        unset($article['text_struct']);
                    }
                    $article['stock_qty'] = $art->get_stock_quantity($article['nr']);
                    $tpl->assign('article', $article);
                    $tpl->assign('group_id', $group_id);
                    $tpl->assign('group_id_level1', $group->level1);
                    $tpl->assign('oMultiWishlist', new WishlistMulti());
                    $art->get_another_product($pg->aid);
                    $tpl->assign('LV_OPTIONS_SITETITLE', $art->xml['Logivert']['LV_META_TITLE']['LV_' . strtoupper($currentLanguage)]);
                    $baseMetatags .= $art->xml['Logivert']['LV_META_TAGS']['LV_' . strtoupper($currentLanguage)];
                    $tpl->assign('LV_METATAG', AddCanonicalTag($baseMetatags, $shop_root_dir, $action, $pg->aid, $art->data['urlitem'][$curr_lang], $currentLanguage));

             if (isset($article['recept']) && ($article['recept']='1')) {
               $tpl->assign('layout_include','page.recipes.html');
             } else {
               $tpl->assign('layout_include','page.art.html');
             }
           }
           lvDisplay($tpl,'layout.html');
         } catch (Exception $e) { lvredirect('index.php?action=home&lang='.strtoupper($currentLanguage)); }
         break;

        case "extra":
            try {
                if (strpos($pg->extra, 'A_') !== 0) {
                    $pg->extra = 'A_' . $pg->extra;
                }
                addBasketToTemplate($tpl, $currentLanguage, $lvShowPriceMode);
                $extrapages->AssignPage($pg->extra, $currentLanguage);
                $extra = new extrapage($pg->extra);
                $tpl->assign('extra', $pg->extra);
                $tpl->assign('LV_OPTIONS_SITETITLE', $extra->xml['LV_EXTRAPAGE']['LV_SEARCHTITLE']['LV_' . strtoupper($currentLanguage)]);
                if (isset($extra->xml['LV_EXTRAPAGE']['LV_META_TAGS']) && isset($extra->xml['LV_EXTRAPAGE']['LV_META_TAGS']['LV_' . strtoupper($currentLanguage)])) {
                    $baseMetatags .= $extra->xml['LV_EXTRAPAGE']['LV_META_TAGS']['LV_' . strtoupper($currentLanguage)];
                }
                $tpl->assign('LV_METATAG', AddCanonicalTag($baseMetatags, $shop_root_dir, $action, $pg->extra, '', $currentLanguage));
                $tpl->assign('formvalues', $_SESSION['formvalues']);
                $tpl->assign('formsent', $_SESSION['formsent']);
                $tpl->assign('errors', $_SESSION['errors']);
                $_SESSION['formvalues'] = null;
                $_SESSION['formsent'] = "";
                $_SESSION['errors'] = "";
                $tpl->assign('layout_include', 'page.extra.html');
                lvDisplay($tpl, 'layout.html');
            } catch (Exception $e) {
                lvredirect('index.php?action=home&lang=' . strtoupper($currentLanguage));
            }
            break;

        case "page": // fallthrough
        case "filter":
        case "tags":
        case "search_detail":
        case "advanced_search_results_detail":
            if (isset($group->current) || ($action == "filter") || ($action == "tags") || ($action == "search_detail") || ($action == "advanced_search_results_detail")) {
                if (($pg->exists('justinbasket')) && ($pg->justinbasket == 'true')) {
                    $tpl->assign('justinbasket', 1);
                } else {
                    $tpl->assign('justinbasket', 0);
                }
                addBasketToTemplate($tpl, $currentLanguage, $lvShowPriceMode);
                if ($pg->exists('page')) {
                    $page = $pg->page;
                } else {
                    $page = 0;
                }
                $tpl->assign('current_page', $page);
                $tpl->assign('group_id', $group_id);
                $tpl->assign('group_id_level1', $group->level1);
                $art = new Articles();
                $first = $page * $conf->data['LV_OPTIONS']['LV_ARTICLES_PER_PAGE'];
                switch ($action) {
                    case "page":
                        $tpl->assign('oMultiWishlist', new WishlistMulti());
                        $resource = $art->Select(('limit ' . $first . ',' . $conf->data['LV_OPTIONS']['LV_ARTICLES_PER_PAGE']), $group_id);
                        $pages = ceil($art->quantity_in_group / $conf->data['LV_OPTIONS']['LV_ARTICLES_PER_PAGE']);
                        break;
                    case "filter":
                        $search = new Search($currentLanguage);
                        $res = $search->artsWithAttributes(implode(",", $pg->values['attr']), $pg->values['price_from'], $pg->values['price_to']);
                        $resource = $art->Select(('limit ' . $first . ',999999'), "", $res);
                        $tpl->assign('attr', $pg->values['attr']);
                        $tpl->assign('price_from', $pg->values['price_from']);
                        $tpl->assign('price_to', $pg->values['price_to']);
                        $tpl->assign('scrollTop', $pg->values['scrollTop']);
                        $pages = 1;
                        break;
                    case "tags":
                        $search = new Search($currentLanguage);
                        $res = $search->artsWithArttags($pg->values['tagid'], $tagname);
                        $resource = $art->Select(('limit ' . $first . ',999999'), "", $res);
                        $pages = 1;
                        break;
                    case "search_detail":
                        $search = new Search($currentLanguage);
                        //$search_string=mb_strtolower(htmlspecialchars($pg->srchval, ENT_QUOTES, 'UTF-8'));
                        $search_string = mb_strtolower($pg->srchval);
                        lvRegisterSearch(html_entity_decode($pg->srchval, NULL, 'UTF-8'), $currentLanguage, '0');
                        $res = $search->find($search_string, null, true);
                        $resource = $art->Select(('limit ' . $first . ',999999'), "", $res);
                        $pages = 1;
                        break;
                    case "advanced_search_results_detail":
                        $advanced = getAdvancedForSearchResults($pg, $group);
                        $search = new Search($currentLanguage);
                        $res = $search->find($pg->keywords, $advanced, true);
                        $resource = $art->Select(('limit ' . $first . ',999999'), "", $res);
                        $pages = 1;
                        break;
                }
                $tpl->assign('pages', $pages);
                $articles = array();
                $stock = array();
                $curr_lang = 'lang_' . $currentLanguage;
                while ($a = $art->Fetch($resource)) {
                    $a->data = $a->article_language_conversions($a->data, $a->get_stock_quantity($a->data['nr']), $currentLanguage, $a->get_stockslave_quantity($a->data['nr']));
                    $a = $a->data;
                    $a['description'] = $a['description'][$curr_lang];
                    $a['descriptionandmeasure'] = $a['descriptionandmeasure'][$curr_lang];
                    $a['measure'] = $a['measure'][$curr_lang];
                    $a['specification'] = $a['specification'][$curr_lang];
                    $a['urlitem'] = $a['urlitem'][$curr_lang];
                    $a['compordertextvisible']['compordertext'] = (isset($a['compordertextvisible'][$curr_lang]['compordertext']) ? $a['compordertextvisible'][$curr_lang]['compordertext'] : "");
                    $a['shortmemo'] = $a['shortmemo'][$curr_lang];
                    if (isset($a['ecotaxes']['ecotax']) && !is_array(current($a['ecotaxes']['ecotax']))) {
                        $a['ecotaxes']['ecotax'] = array(0 => $a['ecotaxes']['ecotax']);
                    }
                    if (isset($a['options_struct']['options_struct_item'][0]) && (sizeof($a['options_struct']['options_struct_item'][0]) == 0)) {
                        unset($a['options_struct']);
                    }
                    if (isset($a['text_struct']['text_struct_item'][0]) && (sizeof($a['text_struct']['text_struct_item'][0]) == 0)) {
                        unset($a['text_struct']);
                    }
                    $real_vat = 0;
                    if (isset($vatitems[$a['vat']])) {
                        if (isset($vatitems[$a['vat']]['LV_PERCENTAGE'])) {
                            $real_vat = $vatitems[$a['vat']]['LV_PERCENTAGE'];
                        } else {
                            
                        }
                    } else {
                        
                    }
                    $a['vat'] = $real_vat;
                    $a['availability']['availability_text'] = $a['availability'][$curr_lang]['availability_text'];
                    if (!isset($a['calcform']) || ($a['calcform'] == '')) {
                        $a['calcform'] = 0;
                    };
                    $articles[] = $a;
                }
                $art->Free($resource);
                switch ($action) { // Set meta tags
                    case "page":
                        if (isset($group->current)) {
                            $tpl->assign('LV_OPTIONS_SITETITLE', $group->current['LV_SEARCHTITLE']['LV_' . strtoupper($currentLanguage)]);
                            $baseMetatags .= $group->current['LV_METATAG']['LV_' . strtoupper($currentLanguage)];
                            $tpl->assign('LV_METATAG', AddCanonicalTag($baseMetatags, $shop_root_dir, $action, $pg->group_id, $group->current['LV_GROUP_URLITEM'], $currentLanguage));
                        }
                        break;
                    case "filter":
                        $tpl->assign('LV_OPTIONS_SITETITLE', $language->xml_array['LV_TEXT_FILTER']);
                        $tpl->assign('LV_METATAG', $baseMetatags);
                        break;
                }
                $tpl->assign('articles', $articles);
                $tpl->assign('stock', $stock);
                $tpl->assign('sortart', $_SESSION['sortart']);

                if (isset($group->current['LV_RECEPT']) && ($group->current['LV_RECEPT'] = '1')) {
                    $tpl->assign('layout_include', 'page.recipelist.html');
                } else {
                    $tpl->assign('layout_include', 'page.artlist.html');
                }
                lvDisplay($tpl, 'layout.html');
            } else {
                lvredirect('index.php?action=home&lang=' . strtoupper($currentLanguage));
            }
            break;

        case "showbasket":
            if (!isset($_SESSION)) {
                session_start();
            }
            $basket = new Basket();
            $errors = '';
            if ($pg->exists('calculate')) {
                if ($pg->exists('quantity') && is_array($pg->quantity)) {
                    if ($pg->exists('ids') && is_array($pg->ids) && (count($pg->quantity) == count($pg->ids))) {
                        $i = 0;
                        $j = 0;
                        unset($OrderedNumberManuf);
                        $OrderedNumberManuf = array();
                        $z = count($pg->quantity);
                        foreach ($basket->data['articles'] as $tm) {
                            $tmp[$tm['id']][$j++] = $tm['ArtQuantity'];
                        }
                        $art = new Article($tm['id']);
                        while ($i < $z) {
                            unset($addarr);
                            if ($pg->exists('additional')) {
                                $addarr = unserialize(urldecode($pg->additional[$i]));
                            };
                            unset($addarr2);
                            $addarr2 = array();
                            $addarr2['artid'] = $pg->ids[$i];
                            foreach ($addarr as $k => $v) {
                                $addarr2[$k] = $v['value'];
                            }
                            if ($basket->find_in_cart($pg->ids[$i], 'articles', $addarr2, $currentLanguage) == -1) {
                                $errors .= diplayError('no such article in the cart');
                                $i++;
                                continue;
                            }
                            // Check minimum and maximum quantity
                            $art = new Article($pg->ids[$i]);
                            if ($pg->quantity[$i] < $art['minimumquantity']) {
                                $errors .= diplayError($art['descriptionandmeasure']['lang_' . $currentLanguage] . ': ' . $language->xml_array['LV_TEXT_AT_LEAST'] . ' ' . $art['minimumquantity']);
                            } elseif (isset($art['maximumquantity']) && ($pg->quantity[$i] > $art['maximumquantity'])) {
                                $errors .= diplayError($art['descriptionandmeasure']['lang_' . $currentLanguage] . ': ' . $language->xml_array['LV_TEXT_AT_MAX'] . ' ' . $art['maximumquantity']);
                            } else {
                                // Check stock
                                if ($art->article_canbeordered($pg->quantity[$i])) {
                                    if (!array_key_exists($pg->ids[$i], $tmp)) {
                                        $i++;
                                        continue;
                                    }
                                    if ($pg->quantity[$i] < $tmp[$pg->ids[$i]][$i]) {
                                        if ($pg->exists('additional')) {
                                            $basket->remove_from_cart($pg->ids[$i], ($tmp[$pg->ids[$i]][$i] - $pg->quantity[$i]), 'articles', $addarr2, $currentLanguage);
                                        } else {
                                            $basket->remove_from_cart($pg->ids[$i], ($tmp[$pg->ids[$i]][$i] - $pg->quantity[$i]), 'articles', Null, $currentLanguage);
                                        }
                                    } elseif ($pg->quantity[$i] > $tmp[$pg->ids[$i]][$i]) {
                                        if ($pg->exists('additional')) {
                                            $basket->add_to_cart($pg->ids[$i], ($pg->quantity[$i] - $tmp[$pg->ids[$i]][$i]), $currentLanguage, $lvShowPriceMode, 'articles', $addarr2);
                                        } else {
                                            $basket->add_to_cart($pg->ids[$i], ($pg->quantity[$i] - $tmp[$pg->ids[$i]][$i]), $currentLanguage, $lvShowPriceMode, 'articles');
                                        }
                                    }
                                } else {
                                    $art = $art->get_another_product($pg->ids[$i]);
                                    $errors .= diplayError($art['LV_ARTICLES_DESCRIPTIONANDMEASURE']['LV_ARTICLES_LANG_' . strtoupper($currentLanguage)] . ': ' . $language->xml_array['LV_TEXT_MORE_THAN_IN_STOCK']);
                                }
                            }
                            unset($addarr2);
                            unset($addarr);
                            $i++;
                        }
                        unset($tmp);
                    }
                }
            } else {
                if (isset($basket->data['articles'])) {
                    foreach ($basket->data['articles'] as $cartLine) {
                        $art = new Article($cartLine['id']);
                        if (!$art->article_canbeordered($cartLine['ArtQuantity'])) {
                            $lang = strtolower($currentLanguage);
                            $errors .= diplayError($art->data['description']["lang_{$lang}"] . ': ' . $language->xml_array['LV_TEXT_MORE_THAN_IN_STOCK']);
                        }
                    }
                }
            }

            // Check on minimum manufacturer order amount
            if (($tpl->tpl_vars['LV_MINIMUMMANUFACTURERORDERAMOUNT_ENABLED'] == 1) && (file_exists("lvconfig/manufacturers.xml")) && ($basket->data['articles'] != NULL)) {
                unset($OrderedNumberManuf);
                foreach ($basket->data['articles'] as $tm) { // collect manufacturers and quantities of this order
                    unset($art);
                    $art = new Article($tm['id']);
                    $OrderedNumberManuf[$art->data['manufacturer']] = (isset($OrderedNumberManuf) ? $OrderedNumberManuf[$art->data['manufacturer']] : 0) + $tm['ArtQuantity'];
                }
                unset($art);
                $manufacturers = new CustomXML("lvconfig/manufacturers.xml");
                $manufacturers_array = $manufacturers->xml['LV_MANUFACTURERS']['LV_MANUFACTURER'];
                $manufacturersminorder_array = $manufacturers->xml['LV_MANUFACTURERS']['LV_MINIMUMORDERAMOUNT'];
                foreach ($OrderedNumberManuf as $ONMkey => $ONMvalue) { // Check the manufacturer quantities of this order with the minimums
                    if ($ONMkey != '') {
                        $minimumorderamount = $manufacturersminorder_array[array_search($ONMkey, $manufacturers_array)];
                        if ($ONMvalue < $minimumorderamount) {
                            $errors .= diplayError($ONMkey . ': ' . $language->xml_array['LV_TEXT_AT_LEAST'] . ' ' . $minimumorderamount);
                        }
                    }
                }
                unset($OrderedNumberManuf);
                unset($manufacturers);
                unset($manufacturers_array);
                unset($manufacturersminorder_array);
            }
            $basket_summary = $basket->get_summary($lvShowPriceMode, $currentLanguage);

            if (isset($conf->data['LV_OPTIONS']['LV_BUDGETCOUNTER']) && ($conf->data['LV_OPTIONS']['LV_BUDGETCOUNTER'] == 1)) {
                $oBudget = new BudgetCounter();
                $fCurBudgetAmount = $oBudget->getCurrentBudget();
                $tpl->assign('budgetamount', $fCurBudgetAmount);
            }

            $tpl->assign('basket_summary', (isset($basket_summary[0]) ? $basket_summary[0] : NULL));
            $tpl->assign('basket_summary_addit', (isset($basket_summary[1]) ? $basket_summary[1] : NULL));
            $tpl->assign('basket_summary_gifts', $basket_summary[1]['summary_gifts']);
            $tpl->assign('basket_gifts_total_price', $basket_summary[1]['basket_gifts_total_price']);
            $tpl->assign('basket_total_price', $basket_summary[1]['basket_total_price']);
            $tpl->assign('ecotaxes_total_price', $basket_summary[1]['ecotaxes_total']);
            $tpl->assign('discount_on_total_order', $basket_summary[1]['discount_on_total_order']);
            $tpl->assign('discount_on_total_order_amount', $basket_summary[1]['discount_on_total_order_amount']);
            if ($errors != '') {
                $tpl->assign('errors', $errors);
            }
            if (!empty($basket_summary[1]['gift_articles']) && (count($basket->data['gifts']) < $basket->gifts_quantity)) {
                $tpl->assign('gift_articles', $basket_summary[1]['gift_articles']);
                $tpl->assign('gift_articles_on', 1);
            } else {
                $tpl->assign('gift_articles_on', 0);
            }
            if (isset($conf->data['LV_OPTIONS']['LV_ORDER_SSL']) && ($conf->data['LV_OPTIONS']['LV_ORDER_SSL'] == 1)) {
                $_SESSION['document_root'] = $_SERVER['DOCUMENT_ROOT'] . str_replace('\\', '/', dirname($_SERVER['PHP_SELF']));
                $_SESSION['http_document_root'] = 'http://' . $_SERVER['HTTP_HOST'] . str_replace('\\', '/', dirname($_SERVER['PHP_SELF']));
                $action_url = 'https://' . $_SERVER['HTTP_HOST'] . str_replace('\\', '/', dirname($_SERVER['PHP_SELF']));
                if (isset($conf->data['LV_OPTIONS']['LV_ORDER_SSL_NO_WWW']) && ($conf->data['LV_OPTIONS']['LV_ORDER_SSL_NO_WWW'] == 1)) {
                    $action_url = str_replace('//www.', '//', $action_url);
                }
            } else {
                $action_url = $shop_root_dir . 'index.php';
            }
            $tpl->assign('LV_METATAG', AddCanonicalTag($baseMetatags, $shop_root_dir, $action, '', '', $currentLanguage));
            $tpl->assign('action_url', $action_url);
            $tpl->assign('layout_include', 'page.cart.html');
            lvDisplay($tpl, 'layout.html');
            break;

        case "budget":
            if (isset($_SESSION)) {
                $basket = new Basket();
                $basket_summary = $basket->get_summary($lvShowPriceMode, $currentLanguage);
                $tpl->assign('basket_summary', (isset($basket_summary[0]) ? $basket_summary[0] : NULL));
                $tpl->assign('basket_summary_addit', (isset($basket_summary[1]) ? $basket_summary[1] : NULL));
            }

            $tpl->assign('layout_include', 'page.budget.html');
            $oBudget = new BudgetCounter();
            $tpl->assign('oBudget', $oBudget);
            $tpl->assign('sDisplayMode', $oBudget->getDisplayMode());
            $tpl->assign('action_url', 'budget.php?action=toevoegen');
            lvDisplay($tpl, 'layout.html');
            break;

        case "budgetperiod":
            if (isset($_SESSION)) {
                $basket = new Basket();
                $basket_summary = $basket->get_summary($lvShowPriceMode, $currentLanguage);
                $tpl->assign('basket_summary', (isset($basket_summary[0]) ? $basket_summary[0] : NULL));
                $tpl->assign('basket_summary_addit', (isset($basket_summary[1]) ? $basket_summary[1] : NULL));
            }

         $tpl->assign('layout_include','page.budgetperiod.html');
         $oBudget = new BudgetCounter();

         $tpl->assign('oBudget',$oBudget);
         $tpl->assign('sDisplayMode',$oBudget->getDisplayMode());
         lvDisplay($tpl,'layout.html');
         break;

       case "bulkselect":
          if(isset($_SESSION)) {
             $basket=new Basket();
             $basket_summary=$basket->get_summary($lvShowPriceMode, $currentLanguage);
             $tpl->assign('basket_summary',(isset($basket_summary[0]) ? $basket_summary[0] : NULL));
             $tpl->assign('basket_summary_addit',(isset($basket_summary[1]) ? $basket_summary[1] : NULL));
          }
          
          $oBulk = New Bulkmeal();
          $aWeeks = $oBulk->getNext4Weeks();
          $tpl->assign('aWeeks',$aWeeks);
          $tpl->assign('layout_include','page.bulkselect.html');
          lvDisplay($tpl,'layout.html');
          break;

       case "bulkhistory":
          if(isset($_SESSION)) {
             $basket=new Basket();
             $basket_summary=$basket->get_summary($lvShowPriceMode, $currentLanguage);
             $tpl->assign('basket_summary',(isset($basket_summary[0]) ? $basket_summary[0] : NULL));
             $tpl->assign('basket_summary_addit',(isset($basket_summary[1]) ? $basket_summary[1] : NULL));
          }

          $oBulk = New Bulkmeal();
          $aWeeks = $oBulk->getLast6Weeks();
          $tpl->assign('aWeeks',$aWeeks);
          $tpl->assign('bHistory',true);
          $tpl->assign('layout_include','page.bulkselect.html');
          lvDisplay($tpl,'layout.html');
          break;

       case "budgetperiodprint":
          $tpl->assign('sHtml',$_SESSION['periodhtml']);
          lvDisplay($tpl,'printlayout.html');
          break;

       case "wishlist":
          if(isset($_SESSION)) {
             $basket=new Basket();
             $basket_summary=$basket->get_summary($lvShowPriceMode, $currentLanguage);
             $tpl->assign('basket_summary',(isset($basket_summary[0]) ? $basket_summary[0] : NULL));
             $tpl->assign('basket_summary_addit',(isset($basket_summary[1]) ? $basket_summary[1] : NULL));
          }

          $oRecepten = new Wishlist();    
          $tpl->assign('oRecepten',$oRecepten->getAllListData());

          $tpl->assign('layout_include','page.multiwishlist.html');
          $tpl->assign('oMultiWishlist',new WishlistMulti());
          lvDisplay($tpl,'layout.html');
          break;

       case "showwishlist":
          if(isset($_SESSION)) {
             $basket=new Basket();
             $basket_summary=$basket->get_summary($lvShowPriceMode, $currentLanguage);
             $tpl->assign('basket_summary',(isset($basket_summary[0]) ? $basket_summary[0] : NULL));
             $tpl->assign('basket_summary_addit',(isset($basket_summary[1]) ? $basket_summary[1] : NULL));
          }

          $tpl->assign('layout_include','page.showwishlist.html');
          $oMultiWishlist = new WishlistMulti();
          $aArticles = array();

          foreach($oMultiWishlist->getItemsFromList($_GET['wid']) as $aArticle) {
            $oArticle = new Article($aArticle['art_id']);
            $aArticles[] = $oArticle->data;
          }
          $oWishlist = new WishlistMulti();
          $tpl->assign('aWishlists', $oWishlist->getWishlists());
          $tpl->assign('oMultiWishlist',$oWishlist);
          $tpl->assign('iWishlist',$_GET['wid']);
          $tpl->assign('sWishlistName',$oWishlist->getName($_GET['wid']));
          $tpl->assign('aArticles',$aArticles);
          lvDisplay($tpl,'layout.html');
          break;
        
       case "news":
          if(isset($_SESSION)) {
             $basket=new Basket();
             $basket_summary=$basket->get_summary($lvShowPriceMode, $currentLanguage);
             $tpl->assign('basket_summary',(isset($basket_summary[0]) ? $basket_summary[0] : NULL));
             $tpl->assign('basket_summary_addit',(isset($basket_summary[1]) ? $basket_summary[1] : NULL));
          }

          $oNews = new News();
          $aLastFive = $oNews->getLastFive();
          $tpl->assign('layout_include','page.news.html');
          $tpl->assign('aLastFive',$aLastFive);
          $tpl->assign('aYears',$oNews->getYears());
          $tpl->assign('aLastTitles',$oNews->getLastTitles());
          lvDisplay($tpl,'layout.html');
          break;
        
       case "newsmonth":
          if(isset($_SESSION)) {
             $basket=new Basket();
             $basket_summary=$basket->get_summary($lvShowPriceMode, $currentLanguage);
             $tpl->assign('basket_summary',(isset($basket_summary[0]) ? $basket_summary[0] : NULL));
             $tpl->assign('basket_summary_addit',(isset($basket_summary[1]) ? $basket_summary[1] : NULL));
          }
          $oNews = new News();
          $tpl->assign('layout_include','page.newsmonth.html');
          $tpl->assign('aNewsItems',$oNews->getItemsPerMonth($_GET['year'],$_GET['month']));
          $tpl->assign('aYears',$oNews->getYears());
          $tpl->assign('aLastTitles',$oNews->getLastTitles());
          lvDisplay($tpl,'layout.html');
          break;
        
       case "newsitem":
          if(isset($_SESSION)) {
             $basket=new Basket();
             $basket_summary=$basket->get_summary($lvShowPriceMode, $currentLanguage);
             $tpl->assign('basket_summary',(isset($basket_summary[0]) ? $basket_summary[0] : NULL));
             $tpl->assign('basket_summary_addit',(isset($basket_summary[1]) ? $basket_summary[1] : NULL));
          }
          $oNews = new News();
          $tpl->assign('layout_include','page.newsitem.html');
          $tpl->assign('aNews',$oNews->getNewsItem($_GET['id']));
          $tpl->assign('aListTitles',$oNews->getLastTitles());
          $tpl->assign('aYears',$oNews->getYears());
          lvDisplay($tpl,'layout.html');      
          break;

       case "blog":
          if(isset($_SESSION)) {
             $basket=new Basket();
             $basket_summary=$basket->get_summary($lvShowPriceMode, $currentLanguage);
             $tpl->assign('basket_summary',(isset($basket_summary[0]) ? $basket_summary[0] : NULL));
             $tpl->assign('basket_summary_addit',(isset($basket_summary[1]) ? $basket_summary[1] : NULL));
          }
          $oBlog = new Blog();
          $aLastFive = $oBlog->getLastFive();
          //var_dump($oNews->getItemsPerYear(2015));die;
          
          $tpl->assign('layout_include','page.blog.html');
          $tpl->assign('aLastFive',$aLastFive);
          $tpl->assign('aYears',$oBlog->getYears());
          $tpl->assign('aLastTitles',$oBlog->getLastTitles());
          lvDisplay($tpl,'layout.html');
          break;

       case "blogmonth":
          if(isset($_SESSION)) {
             $basket=new Basket();
             $basket_summary=$basket->get_summary($lvShowPriceMode, $currentLanguage);
             $tpl->assign('basket_summary',(isset($basket_summary[0]) ? $basket_summary[0] : NULL));
             $tpl->assign('basket_summary_addit',(isset($basket_summary[1]) ? $basket_summary[1] : NULL));
          }
          $oBlog = new Blog();
          $tpl->assign('layout_include','page.blogmonth.html');
          $tpl->assign('aNewsItems',$oBlog->getItemsPerMonth($_GET['year'],$_GET['month']));
          $tpl->assign('aYears',$oBlog->getYears());
          $tpl->assign('aLastTitles',$oBlog->getLastTitles());
          lvDisplay($tpl,'layout.html');
          break;

       case "blogitem":
          if(isset($_SESSION)) {
             $basket=new Basket();
             $basket_summary=$basket->get_summary($lvShowPriceMode, $currentLanguage);
             $tpl->assign('basket_summary',(isset($basket_summary[0]) ? $basket_summary[0] : NULL));
             $tpl->assign('basket_summary_addit',(isset($basket_summary[1]) ? $basket_summary[1] : NULL));
          }
          $oBlog = new News();
          $tpl->assign('layout_include','page.blogitem.html');
          $tpl->assign('aNews',$oBlog->getNewsItem($_GET['id']));
          $tpl->assign('aListTitles',$oBlog->getLastTitles());
          $tpl->assign('aYears',$oBlog->getYears());
          lvDisplay($tpl,'layout.html');      
          break;

       case "bulkmeal":
          if(isset($_SESSION)) {
             $basket=new Basket();
             $basket_summary=$basket->get_summary($lvShowPriceMode, $currentLanguage);
             $tpl->assign('basket_summary',(isset($basket_summary[0]) ? $basket_summary[0] : NULL));
             $tpl->assign('basket_summary_addit',(isset($basket_summary[1]) ? $basket_summary[1] : NULL));
          }
          $oBulk = new Bulkmeal();
          $bulkdate = $_GET['date'];
          $aDailyMenus = $oBulk->getMenus($bulkdate);
          $_SESSION['bulkdate'] = $bulkdate;
          $sDateNice = $oBulk->NiceDate($bulkdate);
          if (count($aDailyMenus) === 1) {
            $aMenu1 = $aDailyMenus[0];
            $aMenu2 = array();
          } else {
            $aMenu1 = $aDailyMenus[0];
            $aMenu2 = $aDailyMenus[1];
          }
          $aCourses = array();
          if (isset($aMenu1['courses'])) {
            foreach($aMenu1['courses'] as $key => $aCourse) {
              $aCourses[$key] = '';
            }
          }
          if (isset($aMenu2['courses'])) {
            foreach($aMenu2['courses'] as $key => $aCourse) {
              $aCourses[$key] = '';
            }
          }
          $tpl->assign('layout_include','page.bulkmeals.html');
          $tpl->assign('aDailyMenus',$aDailyMenus);
          $tpl->assign('aCourses',$aCourses);
          $tpl->assign('aMenu1',$aMenu1);
          $tpl->assign('aMenu2',$aMenu2);
          $tpl->assign('sBulkDate',$sDateNice);
          $tpl->assign('sBulkIntDate', $bulkdate);
          $tpl->assign('isOrdered', $oBulk->isOrdered($bulkdate));
          $tpl->assign('isCreated', $oBulk->hasMenu($bulkdate));
          lvDisplay($tpl,'layout.html');  
          break;

       case "bulkorder":
          if(isset($_SESSION)) {
             $basket=new Basket();
             $basket_summary=$basket->get_summary($lvShowPriceMode, $currentLanguage);
             $tpl->assign('basket_summary',(isset($basket_summary[0]) ? $basket_summary[0] : NULL));
             $tpl->assign('basket_summary_addit',(isset($basket_summary[1]) ? $basket_summary[1] : NULL));
          }
          $oBulk = new Bulkmeal();
          $sDateNice = $oBulk->NiceDate($_SESSION['bulkdate']);
          $tpl->assign('layout_include','page.bulkorder.html');
          $tpl->assign('aMenus', $_SESSION['bulkmeal']);
          $tpl->assign('sNiceDate', $sDateNice);
          $tpl->assign('sDailyMenuDate', $_SESSION['bulkdate']);
          $tpl->assign('aAlternatives', $_SESSION['alternatives']);
          lvDisplay($tpl,'layout.html');      
          break;

        case "order" :
            $p_lang = strtoupper($currentLanguage);
            if (isset($_SESSION)) {
                $basket = new Basket();
                $basket_summary = $basket->get_summary_small($currentLanguage, $lvShowPriceMode);
                $tpl->assign('basket_summary', (isset($basket_summary[0]) ? $basket_summary[0] : NULL));
                $tpl->assign('basket_summary_addit', (isset($basket_summary[1]) ? $basket_summary[1] : NULL));
                if (empty($basket_summary)) {
                    lvredirect('index.php?action=showbasket&lang=' . strtoupper($currentLanguage));
                    exit;
                }
            }

         if (isset($conf->data['LV_OPTIONS']['LV_BUDGETCOUNTER']) && ($conf->data['LV_OPTIONS']['LV_BUDGETCOUNTER']==1)) {
           $oBudget = new BudgetCounter();
           $fCurBudgetAmount = $oBudget->getCurrentBudget();
           $tpl->assign('budgetamount',$fCurBudgetAmount);
         }

            addBasketToTemplate($tpl, $currentLanguage, $lvShowPriceMode);
            if ($pg->exists('step')) {
                $order_step = $pg->step;
            } else {
                $order_step = 1;
            }
            $tpl->assign('action_url', 'index.php');
            if (!$pg->exists('error')) {
                $_SESSION['out_array'] = array();
            }
            $baseMetatags .= $language->xml_array['LV_META_TAGS'];
            $tpl->assign('LV_METATAG', AddCanonicalTag($baseMetatags, $shop_root_dir, $action, $order_step, '', $currentLanguage));

            switch ($order_step) {
                case 1 :
                    if (!isset($_SESSION['order_object'])) {
                        $order = new Order('', $currentLanguage);
                    } else {
                        $order = unserialize($_SESSION['order_object']);
                    }
                    if ($_SESSION['Alpha'] != -1) {
                        $order->load_user_data($_SESSION['Alpha']);
                    }
                    if (!isset($_SESSION['out_array']['return_step_on_error'])) {
                        $_SESSION['out_array']['return_step_on_error'] = 0;
                    }
                    if (isset($_POST['step']) && $_POST['step'] == 1) {
                        if (isset($_POST['country']))
                            $order->set_country($_POST['country']);
                        if (isset($_POST['way_of_delivery']))
                            $order->set_way_of_delivery($_POST['way_of_delivery']);
                    }
                    $step_data = $order->get_data_for_step1();
                    $country = $step_data['country'];
                    $tpl->assign('step_data', $step_data);
                    $tpl->assign('country', $country);
                    $conf_order = new ConfigLoader(array("lvconfig/shipitems.xml", "lvconfig/paymethoditems.xml", "lvconfig/countries.xml"));
                    if (!isset($conf_order->data['LV_COUNTRIES']['LV_COUNTRY'][0])) {
                        $conf_order->data['LV_COUNTRIES']['LV_COUNTRY'] = array(0 => $conf_order->data['LV_COUNTRIES']['LV_COUNTRY']);
                    }
                    $countries_list = $conf_order->data['LV_COUNTRIES']['LV_COUNTRY'];
                    $order->set_country_name($countries_list[$country]['LV_NAME']);
                    $country_id = -1;
                    foreach ($countries_list as $k => $v) {
                        if ($v['LV_ID'] == $country) {
                            $country_id = $k;
                            if (($v['LV_ID'] != 0) && ($v['LV_EU'] == 1)) {
                                $intracom = 1;
                            } else {
                                $intracom = 0;
                            }
                        }
                    }
                    $ship_items = array();
                    $ship_items_temp = array();
                    if (isset($countries_list[$country_id]['LV_SHIPITEMS']['LV_ITEMNUMBER'])) {
                        if (count($countries_list[$country_id]['LV_SHIPITEMS']['LV_ITEMNUMBER']) == 1) {
                            $countries_list[$country_id]['LV_SHIPITEMS']['LV_ITEMNUMBER'] = array(0 => $countries_list[$country_id]['LV_SHIPITEMS']['LV_ITEMNUMBER']);
                        }
                    }
                    if (!isset($conf_order->data['LV_SHIPITEMS']['ITEM']['0'])) {
                        $conf_order->data['LV_SHIPITEMS']['ITEM'] = array(0 => $conf_order->data['LV_SHIPITEMS']['ITEM']);
                    }
                    foreach ($conf_order->data['LV_SHIPITEMS']['ITEM'] as $key => $v) {
                        if ((!isset($basket->data['shipitems_excluded'])) || ($basket->data['shipitems_excluded'] == NULL) || (!in_array($v['LV_SHIPITEMNUMBER'], $basket->data['shipitems_excluded']))) {
                            $v["LV_SHIPDESCRIPTION"] = $v["LV_SHIPDESCRIPTION_$p_lang"];
                            $ship_items[$v['LV_SHIPITEMNUMBER']] = $v;
                            if (isset($countries_list[$country_id]['LV_SHIPITEMS']['LV_ITEMNUMBER'])) {
                                if (in_array($v['LV_SHIPITEMNUMBER'], $countries_list[$country_id]['LV_SHIPITEMS']['LV_ITEMNUMBER'])) {
                                    // Check maximum weight
                                    if ((isset($v['LV_MAXWEIGHT']) && ($v['LV_MAXWEIGHT'] > 0) && ($v['LV_MAXWEIGHT'] < $basket->data['additional']['weight_total'])) ||
                                            (isset($v['LV_MINWEIGHT']) && ($v['LV_MINWEIGHT'] > 0) && ($v['LV_MINWEIGHT'] > $basket->data['additional']['weight_total']))) {
                                        //do not add -> max weight for ship item has been reached
                                    } else {
                                        // Check min and max order
                                        if ((isset($v['LV_MINORDER']) && isset($v['LV_MAXORDER'])) &&
                                                ((round($v['LV_MINORDER'], 2) > round($basket->data['additional']['basket_total_price_exvat'], 2)) ||
                                                (($v['LV_MAXORDER'] > 0) && (round($v['LV_MAXORDER'], 2) < round($basket->data['additional']['basket_total_price_exvat'], 2))))) {
                                            //do not add -> order total to low or to high
                                        } else {
                                            $ship_items_temp[$v['LV_SHIPITEMNUMBER']] = $v['LV_SHIPDESCRIPTION'];
                                        }
                                    }
                                }
                            }
                        }
                    }
                    asort($ship_items_temp);
                    $countries_list[$country]['LV_SHIPITEMS']['LV_ITEMNUMBER'] = array_keys($ship_items_temp);
                    unset($ship_items_temp);
                    $paymethods = array();
                    $paymethods_temp = array();
                    $paymethods_temp2 = array();
                    $paymethods_array = $conf_order->data['LV_PAYMETHODITEMS']['ITEM'];
                    if (!isset($paymethods_array['0'])) {
                        $paymethods_array = array(0 => $paymethods_array);
                    }
                    if (isset($countries_list[$country_id]['LV_PAYMETHODITEMS']['LV_ITEMNUMBER'])) {
                        if (count($countries_list[$country_id]['LV_PAYMETHODITEMS']['LV_ITEMNUMBER']) == 1) {
                            $countries_list[$country_id]['LV_PAYMETHODITEMS']['LV_ITEMNUMBER'] = array(0 => $countries_list[$country_id]['LV_PAYMETHODITEMS']['LV_ITEMNUMBER']);
                        }
                    }
                    foreach ($paymethods_array as $k => $v) {
                        if ((!isset($basket->data['paymethod_excluded'])) || ($basket->data['paymethod_excluded'] == NULL) || (!in_array($v['LV_PAYMETHODITEMNUMBER'], $basket->data['paymethod_excluded']))) {
                            if (isset($v['LV_EXCLCUSTOMERS']['LV_SPECIALGROUP']) && (!is_array($v['LV_EXCLCUSTOMERS']['LV_SPECIALGROUP']) || !isset($v['LV_EXCLCUSTOMERS']['LV_SPECIALGROUP'][0]))) {
                                $v['LV_EXCLCUSTOMERS']['LV_SPECIALGROUP'] = array(0 => $v['LV_EXCLCUSTOMERS']['LV_SPECIALGROUP']);
                            }
                            if (isset($paymethods_array[$k]['LV_MAXORDERAMOUNT']) && ($paymethods_array[$k]['LV_MAXORDERAMOUNT'] < $basket->data['additional']['basket_total_price'])) {
                                
                            } elseif ((($_SESSION['Alpha'] == -1) && isset($v['LV_EXCLCUSTOMERSWITHOUTLOGIN']) && ($v['LV_EXCLCUSTOMERSWITHOUTLOGIN'] == 1)) ||
                                    (($_SESSION['Alpha'] != -1) && in_array($order->userspecialgroup, $v['LV_EXCLCUSTOMERS']['LV_SPECIALGROUP'])) ||
                                    (($_SESSION['Alpha'] != -1) && isset($v['LV_EXCLCUSTOMERSWITHOUTLOGIN']) && ($v['LV_EXCLCUSTOMERSWITHOUTLOGIN'] == 1) && ($order->userspecialgroup == '0'))) {
                                // do not add
                            } else {
                                $paymethods[$v['LV_PAYMETHODITEMNUMBER']] = $v;
                                if (in_array($v['LV_PAYMETHODITEMNUMBER'], $countries_list[$country]['LV_PAYMETHODITEMS']['LV_ITEMNUMBER'])) {
                                    $paymethods_temp[$v['LV_PAYMETHODITEMNUMBER']] = $v["LV_PAYMETHODDESCRIPTION_$p_lang"];
                                }
                            }
                        }
                    }
                    // Check if all paymethoditem are active with selected shipitem
                    if (isset($conf->data['LV_OPTIONS']['LV_CARTSTEP1_SHIPPINGCHANGE_ENABLED']) && ($conf->data['LV_OPTIONS']['LV_CARTSTEP1_SHIPPINGCHANGE_ENABLED'] == 1)) {
                        if (isset($step_data['way_of_delivery'])) {
                            $way_of_delivery = $step_data['way_of_delivery'];
                        } else {
                            $way_of_delivery = key($ship_items);
                        }
                        if (isset($ship_items[$way_of_delivery]['LV_PAYMETHODITEMS']['LV_ITEMNUMBER'])) {
                            if (count($ship_items[$way_of_delivery]['LV_PAYMETHODITEMS']['LV_ITEMNUMBER']) == 1) {
                                $ship_items[$way_of_delivery]['LV_PAYMETHODITEMS']['LV_ITEMNUMBER'] = array(0 => $ship_items[$way_of_delivery]['LV_PAYMETHODITEMS']['LV_ITEMNUMBER']);
                            }
                        }
                        foreach ($ship_items[$way_of_delivery]['LV_PAYMETHODITEMS']['LV_ITEMNUMBER'] as $v) {
                            if (isset($paymethods_temp[$v])) {
                                $paymethods_temp2[$v] = $paymethods_temp[$v];
                            }
                        }
                    } else {
                        $paymethods_temp2 = $paymethods_temp;
                    }
                    asort($paymethods_temp2);
                    $countries_list[$country]['LV_PAYMETHODITEMS']['LV_ITEMNUMBER'] = array_keys($paymethods_temp2);
                    foreach ($paymethods as $k => $v) {
                        $paymethods[$k]['LV_PAYMETHODDESCRIPTION'] = $paymethods[$k]["LV_PAYMETHODDESCRIPTION_$p_lang"];
                        $paymethods[$k]['LV_PAYMETHODINFOFIELD'] = (isset($paymethods[$k]['LV_PAYMETHODINFOFIELDS']["LV_LANGUAGE_$p_lang"]) ? $paymethods[$k]['LV_PAYMETHODINFOFIELDS']["LV_LANGUAGE_$p_lang"] : '');
                        if (isset($paymethods[$k]['LV_PAYMENT_PSP_TRANSLIST'])) {
                          /* ideal banken */
                          if ($paymethods[$k]['LV_PAYMENT_PSP_TRANSLIST']==1) {
                              include_once('framework/psp_common.class.php');
                              $paymethods[$k]['LV_PAYMENT_PSP_TRANSLISTAR'] = psp_translist(strtolower($paymethods[$k]['LV_PAYMENT_PSP_TRANSACTION']), $paymethods[$k]['LV_PAYMETHODITEMNUMBER']);
                          /* sisow giropay banklist */
                          } elseif ($paymethods[$k]['LV_PAYMENT_PSP_TRANSLIST']==2) {
                            
                          /* sisow EPS banklist */
                          } elseif ($paymethods[$k]['LV_PAYMENT_PSP_TRANSLIST']==3) {
                            
                          }
                        } else {
                          $paymethods[$k]['LV_PAYMENT_PSP_TRANSLIST'] = 0;
                        }
                    }
                    unset($paymethods_temp);
                    unset($paymethods_temp2);
                    // check if deliverydate is disabled by selected shipitem
                    if (isset($step_data['way_of_delivery'])) {
                        $way_of_delivery = $step_data['way_of_delivery'];
                    } else {
                        $way_of_delivery = key($ship_items);
                    }
                    if ((!isset($conf->data['LV_OPTIONS']['LV_DELIVERYDATE_ENABLED']) || ($conf->data['LV_OPTIONS']['LV_DELIVERYDATE_ENABLED'] == 0)) || (isset($ship_items[$way_of_delivery]['LV_DELIVERYDATE_DISABLED']) && ($ship_items[$way_of_delivery]['LV_DELIVERYDATE_DISABLED'] == 1))) {
                        $tpl->assign('LV_DELIVERYDATE_ENABLED', 0);
                        $_SESSION['Deliverydate_enabled'] = 0;
                    } else {
                        $_SESSION['Deliverydate_enabled'] = 1;
                    }
                    $tpl->assign('LV_SHIPITEMS', $ship_items);
                    $tpl->assign('LV_PAYMETHODITEMS', $paymethods);
                    $tpl->assign('countries_list', $countries_list);
                    $tpl->assign('intracom', $intracom);
                    if (isset($tpl->tpl_vars['LV_DELIVERYDATE_ENABLED']) && ($tpl->tpl_vars['LV_DELIVERYDATE_ENABLED']->value == 1)) {
                        //check if logged in and set user deliverydate_unavailabledates
                        if (isset($_SESSION, $_SESSION['Alpha']) && $_SESSION['Alpha'] != -1) {
                            $user = new CustomXML('data/users/user_' . $_SESSION['Alpha'] . '.xml');
                            $user->xml = $user->xml['Logivert'];
                            if (isset($user->xml['deliverydate_unavailabledates']) && !empty($user->xml['deliverydate_unavailabledates'])) {
                                $tpl->tpl_vars['LV_DELIVERYDATE_UNAVAILABLEDATES']->value = $user->xml['deliverydate_unavailabledates'];
                            }
                            unset($user);
                        }
                        if (!isset($tpl->tpl_vars['LV_DELIVERYDATE_FROM'])) {
                            $tpl->tpl_vars['LV_DELIVERYDATE_FROM']->value = 1;
                        }
                        if ($tpl->tpl_vars['LV_DELIVERYDATE_FROM']->value < $basket_summary[2]) {
                            $tpl->tpl_vars['LV_DELIVERYDATE_FROM']->value = $basket_summary[2];
                        }
                        $startDeliveryDateFrom = $tpl->tpl_vars['LV_DELIVERYDATE_FROM']->value;

               $procDaysBeforeDeliv = 0;
               if (isset($tpl->tpl_vars['LV_PROCESSINGDATE_UNAVAILABLEDATES']) && ($tpl->tpl_vars['LV_PROCESSINGDATE_UNAVAILABLEDATES']->value!='')) {
                 $today = date("j-n-Y");
                 $procDaysBeforeDeliv = 0;
                 if (isset($tpl->tpl_vars['LV_DELIVERYDATE_FROM_SWITCHTIME']) && ($tpl->tpl_vars['LV_DELIVERYDATE_FROM_SWITCHTIME']->value!=0)) {
                   if ($tpl->tpl_vars['LV_DELIVERYDATE_FROM_SWITCHTIME']->value <= date('H')) {
                     $today = date("j-n-Y", strtotime($today.' +1 day'));
                     $procDaysBeforeDeliv++;
                   }
                 }
                 if ((!isset($tpl->tpl_vars['LV_DELIVERYDATE_MINPROCESSINGDAYS'])) || ($tpl->tpl_vars['LV_DELIVERYDATE_MINPROCESSINGDAYS']->value=='0')) {
                   // One processingday before delivery is enough
                   if ($procDaysBeforeDeliv == 0) {
                     $deliverydatebefore = date("j-n-Y", strtotime($today .' +'.($tpl->tpl_vars['LV_DELIVERYDATE_FROM']->value-1).' day'));
                     while (!(strpos($tpl->tpl_vars['LV_PROCESSINGDATE_UNAVAILABLEDATES']->value, '"'.$deliverydatebefore.'"') === false)) {
                       $tpl->tpl_vars['LV_DELIVERYDATE_FROM']->value++;
                       $deliverydatebefore = date("j-n-Y", strtotime($today .' +'.($tpl->tpl_vars['LV_DELIVERYDATE_FROM']->value-1).' day'));
                     }
                   }
                 } else {
                   /*$i = 0;
                   $starti = $i;
                   while ($i < $tpl->tpl_vars['LV_DELIVERYDATE_FROM']->value) {
                     $thisDay = date("j-n-Y", strtotime($today .' +'.($starti+$procDaysBeforeDeliv).' day')); 
                     $procDaysBeforeDeliv++;
                     if (strpos($tpl->tpl_vars['LV_PROCESSINGDATE_UNAVAILABLEDATES']->value, '"'.$thisDay.'"') === false) {
                       $i++;
                     }
                   }
                   
                   if ($startDeliveryDateFrom < $procDaysBeforeDeliv) {
                     $tpl->tpl_vars['LV_DELIVERYDATE_FROM']->value = $procDaysBeforeDeliv;
                     $deliverydatebefore = date("j-n-Y", strtotime($today .' +'.($tpl->tpl_vars['LV_DELIVERYDATE_FROM']->value).' day'));
                     While (strpos($tpl->tpl_vars['LV_DELIVERYDATE_UNAVAILABLEDATES']->value, '"'.$deliverydatebefore.'"') !== false) {
                       $tpl->tpl_vars['LV_DELIVERYDATE_FROM']->value++;
                       $deliverydatebefore = date("j-n-Y", strtotime($today .' +'.($tpl->tpl_vars['LV_DELIVERYDATE_FROM']->value).' day'));
                     }
                   }*/
                   
                   $i = 0;
                   //$starti = $i;
                   $startprocDaysBeforeDeliv = $procDaysBeforeDeliv;
                   while ($i < ($tpl->tpl_vars['LV_DELIVERYDATE_FROM']->value)) {
                   //while ($i < $tpl->tpl_vars['LV_DELIVERYDATE_FROM']->value) {
                     //$thisDay = date("j-n-Y", strtotime($today .' +'.($starti+$procDaysBeforeDeliv).' day')); 
                     
                     
                     $thisDay = date("j-n-Y", strtotime($today .' +'.($procDaysBeforeDeliv - $startprocDaysBeforeDeliv).' day')); 
                     
                     
                     //$loctoday = date("j-n-Y");
                     //$thisDay = date("j-n-Y", strtotime($loctoday .' +'.($starti+$procDaysBeforeDeliv).' day')); 
                     $procDaysBeforeDeliv++;
                     if (strpos($tpl->tpl_vars['LV_PROCESSINGDATE_UNAVAILABLEDATES']->value, '"'.$thisDay.'"') === false) {
                       $i++;
                     }
                   }
                   
                   
                   if ($startDeliveryDateFrom < $procDaysBeforeDeliv) {
                     $tpl->tpl_vars['LV_DELIVERYDATE_FROM']->value = $procDaysBeforeDeliv - $startprocDaysBeforeDeliv;
                     $deliverydatebefore = date("j-n-Y", strtotime($today .' +'.($tpl->tpl_vars['LV_DELIVERYDATE_FROM']->value).' day'));
                     While (strpos($tpl->tpl_vars['LV_DELIVERYDATE_UNAVAILABLEDATES']->value, '"'.$deliverydatebefore.'"') !== false) {
                       $tpl->tpl_vars['LV_DELIVERYDATE_FROM']->value++;
                       $deliverydatebefore = date("j-n-Y", strtotime($today .' +'.($tpl->tpl_vars['LV_DELIVERYDATE_FROM']->value).' day'));
                     }
                   }
                 }
               }
               
               /*if (($procDaysBeforeDeliv<=$startDeliveryDateFrom) && isset($tpl->tpl_vars['LV_DELIVERYDATE_FROM_SWITCHTIME']) && ($tpl->tpl_vars['LV_DELIVERYDATE_FROM_SWITCHTIME']->value!=0)) {
                 if ($tpl->tpl_vars['LV_DELIVERYDATE_FROM_SWITCHTIME']->value <= date('H')) {
                   $tpl->tpl_vars['LV_DELIVERYDATE_FROM']->value++;
                 }
               }*/
               
               if (isset($tpl->tpl_vars['LV_DELIVERYDATE_FROM_SWITCHTIME']) && ($tpl->tpl_vars['LV_DELIVERYDATE_FROM_SWITCHTIME']->value!=0)) {
                 if ($tpl->tpl_vars['LV_DELIVERYDATE_FROM_SWITCHTIME']->value <= date('H')) {
                   $tpl->tpl_vars['LV_DELIVERYDATE_FROM']->value++;
                 }
               }

               if (isset($step_data['delivery_date'])) {
                 $delDatAsDatTime = DateTime::createFromFormat('d-m-Y', $step_data['delivery_date']);
                 $delDateFrom = new DateTime();
                 $delDateFrom->modify('+'.$tpl->tpl_vars['LV_DELIVERYDATE_FROM']->value.' day');
                 if ($delDatAsDatTime < $delDateFrom) {
                   $tpl->tpl_vars['step_data']->value['delivery_date'] = $delDateFrom->format('d-m-Y');
                 }
               }
             }
             if (isset($_SESSION['out_array']['ERROR']) && $_SESSION['out_array']['ERROR'][0]) {
                 $errors="";
                 foreach ($_SESSION['out_array']['ERROR'] as $err) {
                     if(is_array($err))
                     {
                         $langvar = array_shift($err);
                         // Here, $err only contains the variables to contain in the error message.
                         $error = vsprintf($language->xml_array[$langvar], $err);
                     } else {
                         $error = $language->xml_array[$err];
                     }
                     $errors.= diplayError($error);
                 }
                 $tpl->assign("error_str",$errors);
             }
             $_SESSION['order_object']=serialize($order);
             $tpl->assign('layout_include','page.cart_step1.html');
             lvDisplay($tpl,'layout.html');
             break;

                case 2:
                    if (!isset($_SESSION['order_object'])) {
                        lvredirect('index.php?action=showbasket&lang=' . strtoupper($currentLanguage));
                    }
                    $order = unserialize($_SESSION['order_object']);
                    if ($_SESSION['out_array']['return_step_on_error'] != 2 && isset($_POST['step']) && $_POST['step'] == 2) {
                        $out = $order->step1($pg->values, $conf->data['logivert']['LV_MEMBER_MODE']);
                        $_SESSION['out_array'] = $order->get_errors();
                    }
                    $order_data = $order->get_data_for_step2();
                    if (isset($order->paymethod_birthdatedisabled) && ($order->paymethod_birthdatedisabled == 1)) {
                        $tpl->assign('LV_CARTSTEP2_BIRTHDATE_ENABLED', 0);
                    }
                    if ($order_data['paymethod_infofields'] != '') {
                        $order_data['paymethod_infofield'] = $order_data['paymethod_infofields']["LV_LANGUAGE_$p_lang"];
                        if ($order_data['paymethod_infofield'] == '') {
                            unset($order_data['paymethod_infofield']);
                        }
                        if (isset($order_data['paymethod_infofield']) && !isset($order_data['paymethod_infofield']['LV_FIELD'][0])) {
                            $order_data['paymethod_infofield']['LV_FIELD'] = array(0 => $order_data['paymethod_infofield']['LV_FIELD']);
                        }
                    }
                    $tpl->xmlArray2Smarty($order_data);
                    $_SESSION['order_object'] = serialize($order);
                    $errors = "";
                    if ($_SESSION['out_array']['return_step_on_error'] == 1) {
                        lvredirect('index.php?action=order&step=1&error=1&lang=' . strtoupper($currentLanguage));
                    } elseif ($_SESSION['out_array']['return_step_on_error'] == 2) {
                        if ($_SESSION['out_array']['ERROR'][0]) {
                            foreach ($_SESSION['out_array']['ERROR'] as $err) {
                                if (is_array($err)) {
                                    $langvar = array_shift($err);
                                    // Here, $err only contains the variables to contain in the error message.
                                    $error = vsprintf($language->xml_array[$langvar], $err);
                                } elseif (substr($err, 0, 3)!='LV_') {
                                    $error = $err;
                                } else {
                                    $error = $language->xml_array[$err];
                                }
                                $errors .= diplayError($error);
                            }
                        }
                    }
                    if (isset($pg->values['errorstring']) && ($pg->values['errorstring'] != '')) {
                        $errors .= diplayError($pg->values['errorstring']);
                    }
                    $tpl->assign("error_str", $errors);
                    if (isset($_SESSION['Deliverydate_enabled']) && ($_SESSION['Deliverydate_enabled'] == 1)) {
                        $tpl->assign('LV_DELIVERYDATE_ENABLED', 1);
                    } else {
                        $tpl->assign('LV_DELIVERYDATE_ENABLED', 0);
                    }
                    $tpl->assign('LV_TEXT_GENERALCONDITION', str_replace(array('<br>', '<br/>', '<BR>', '<BR />', '<BR/>'), "<br />", $language->xml_array['LV_TEXT_GENERALCONDITION']));
                    $tpl->assign('layout_include', 'page.cart_step2.html');
                    if (($_SESSION['Alpha'] != -1) && (isset($conf->data['logivert']['LV_MEMBER_INVISIB_INORDER_STEP2'])) && ($conf->data['logivert']['LV_MEMBER_INVISIB_INORDER_STEP2'] == 1)) {
                        $order_step = 3;
                    } else {
                        lvDisplay($tpl, 'layout.html');
                        break;
                    }

            case 3: 
                if (!isset($_SESSION['order_object'])) {
                    lvredirect('index.php?action=showbasket&lang=' . strtoupper($currentLanguage));
                }
                $order = unserialize($_SESSION['order_object']);
                if ($_SESSION['out_array']['return_step_on_error'] != 3 && $pg->exists('step') && $pg->step == 3) {
                    $out = $order->step2($pg->values, $tpl);
                    $_SESSION['out_array'] = $order->get_errors();
                }
                $_SESSION['order_object'] = serialize($order);
                $order_data = $order->get_data_for_step3();
                if ($_SESSION['out_array']['return_step_on_error'] == 2) {
                    lvredirect('index.php?action=order&step=2&error=1&lang=' . strtoupper($currentLanguage));
                }
                $tpl->xmlArray2Smarty($order_data);
                if (isset($_SESSION['Deliverydate_enabled']) && ($_SESSION['Deliverydate_enabled'] == 1)) {
                    $tpl->assign('LV_DELIVERYDATE_ENABLED', 1);
                } else {
                    $tpl->assign('LV_DELIVERYDATE_ENABLED', 0);
                }
                
                if($conf->data['LV_OPTIONS']['LV_GA_ECOM_TRACKING_ON'] == "pre_order") {
                    if (!isset($order_data['ORDER']['ITEM'][0])) {
                        $order_data['ORDER']['ITEM'] = array(0 => $order_data['ORDER']['ITEM']);
                    }
                    $totalcostArts = 0;
                    foreach ($order_data['ORDER']['ITEM'] as $orderLine) {
                        $totalcostArts += $orderLine['quantity'] * $orderLine['unit_price_show'];
                    }
                    $tpl->assign('order', $order_data['ORDER']['ITEM']);
                    $tpl->assign('order_id', $order_data['order_id']);
                    $tpl->assign('total_cost', $order_data['total_price']);
                    $tpl->assign('ship_price', $order_data['ship_price']);
                    $tpl->assign('order_costs', $order_data['total_price'] - $totalcostArts);
                    $tpl->assign('LV_OPTIONS_SITEFOOTERTEXT', $tpl->tpl_vars['LV_OPTIONS_SITEFOOTERTEXT'] . $conf->data['LV_OPTIONS']['LV_ORDERTRACKING']);
                }
                $tpl->assign('layout_include', 'page.cart_step3.html');
                lvDisplay($tpl, 'layout.html');
                break;

                case 4:
                    include_once('framework/beforestep4.class.php');
                    if (!isset($_SESSION['order_object'])) {
                        lvredirect('index.php?action=showbasket&lang=' . strtoupper($currentLanguage));
                    }
                    $order = unserialize($_SESSION['order_object']);
                    
                    // Extra order data added on final step.
                    $array = array();
                    if($pg->exists('comments') && strlen($pg->comments) > 0) {
                        $remarks = $order->getRemarks();
                        if(strlen($remarks) > 0) $remarks .= "\n";
                        $array['remarks'] = $remarks .$pg->comments;
                    }
                    if($pg->exists('garantQuantity') && intval($pg->garantQuantity) > 0) {
                        $array['budget_garant'] = array(
                            'quantity' => intval($pg->garantQuantity),
                            'defaultQuantity' => $_SESSION['userDefaults']['bulkmeals']['persons'],
                            'allowOverride' => (int) $_SESSION['budget_garant']['allow_override'],
                            'budget' => $_SESSION['budget_garant']['budget'],
                            'totalBudget' => $_SESSION['budget_garant']['budget'] * intval($pg->garantQuantity)
                        );
                    }
                    $order->loadOrderDataFromArray($array);
                    
                    $paysystem_form = $order->step3($tpl, $order, $status, $paymentid);
                    actions_beforePaymentsystemStatusCheck($order);
                    if (((!is_string($status)) && ($status == 0)) || ((is_string($status)) && ($status == 'redirect'))) {
                        $data = $order->get_data_for_step4();
                        $tpl->xmlArray2Smarty($data);
                        $tpl->assign('form', $paysystem_form);
                        // Let's flip this case:
                        // if (isset($conf->data['LV_OPTIONS']['LV_NOMAILFORORDERCONFIRMATION']) && ($conf->data['LV_OPTIONS']['LV_NOMAILFORORDERCONFIRMATION'] == 1)) {
                        //    
                        //} else {
                        
                        // Only send mails if:
                        // - Configuration Flag disabling the mail does not exist or contains a different value than 1, AND
                        // - We are NOT in OCI mode, or when we are in OCI mode, we are in OCI Order mode.
                        if((!isset($conf->data['LV_OPTIONS']['LV_NOMAILFORORDERCONFIRMATION']) || ($conf->data['LV_OPTIONS']['LV_NOMAILFORORDERCONFIRMATION'] != 1)) &&
                            !isset($oci) || (isset($_SESSION['OCI_MODE']) && $_SESSION['OCI_MODE'] == 'order')) {
                            
                            $barcode = isset($conf->data['LV_OPTIONS']['LV_BARCODE_ORDER']) && ($conf->data['LV_OPTIONS']['LV_BARCODE_ORDER'] == 1);
                            $tpl->assign('barcode', $barcode);
                            
                            $mail = new mail();
                            $mail->setMessage($tpl->fetch("order_confirmation.html"));
                            $mail->setSubject($language->xml_array['LV_OPTIONS_SITETITLE']);
                            $customer_name = $tpl->getTemplateVars('first_name') . ' ' . $tpl->getTemplateVars('last_name');
                            $customeremail = array($tpl->getTemplateVars('email') => $customer_name);

                            // Mail to Customer
                            $mail->addAddress('to', $customeremail);
                            $mail->send();

                            // Mail to Shop Owner
                            // Deze worden verstuurd vanuit het Mailadres van de site, met de naam van de klant.
                            // Replies gaan direct naar de klant.
                            $ListOfOwnerEmails = explode(",", $conf->data['LV_OPTIONS']['SHOP_OWNER_EMAIL']);
                            foreach ($ListOfOwnerEmails as $OwnerEmail) {
                                $shopowneremail = array($OwnerEmail => $language->xml_array['LV_OPTIONS_SITETITLE']);
                                $mail->clearAllRecipients();
                                $mail->addAddress('from', $customer_name, true); // True overschrijft de originele instelling.
                                $mail->addAddress('replyto', $customeremail, true);
                                $mail->addAddress('to', $shopowneremail);
                                $mail->addHeader('X-On-Behalf-Of', $customeremail);
                                $mail->addHeader('On-Behalf-Of', $customeremail);
                                $mail->send();
                            }
                        }
                        // Mail to Affiliate, but only send it if:
						// - Affiliate Mailing has been enabled AND
                        // - We are NOT in OCI mode or, if we are, we are in OCI Order Mode
                        if((isset($_SESSION['lv_af']) && isset($conf->data['LV_OPTIONS']['LV_MAILAFFILIATE'])) &&
                           !isset($oci) || (isset($_SESSION['OCI_MODE']) && $_SESSION['OCI_MODE'] == 'order')) {
                            include_once('framework/affiliates.class.php');
                            $aff = new affiliates($conf, $_SESSION['lv_af']);
                            if ($aff->email != '') {
                                $mail = new mail();
                                $mail->setSubject($language->xml_array['LV_OPTIONS_SITETITLE']);
                                $mail->setMessage($tpl->fetch("order_confirmation_aff.html"));
                                $mail->addAddress('to', $aff->email);
                                if (!$mail->send()) {
                                    throw new Exception('Mail to Affiliate failed. ' . $mail->getErrors());
                                }
                            }
                        }
                        actions_beforeStep4($order);
                        $tpl->assign('basket_summary_full', $basket_summary);
                        
                        // Perform Bulkmeal operations if:
                        // - We are not in OCI mode
                        // - We are in OCI Order mode
                        if ((isset($basket_summary[1]['menudates']) && count($basket_summary[1]['menudates']) > 0) &&
                            !isset($oci) || (isset($_SESSION['OCI_MODE']) && $_SESSION['OCI_MODE'] == 'order')) {
                            $obj = new Bulkmeal();
                            foreach ($basket_summary[1]['menudates'] as $menudate) {
                                $obj->addOrderedDay($menudate, true);
                            }
                            $obj->save();
                        }
						
						// Perform Stock Operations if:
                        // - We are not in OCI mode
                        // - We are in OCI Order mode
                        if (isset($_SESSION['useStock']) && ($_SESSION['useStock'] > 0) &&
							!isset($oci) || (isset($_SESSION['OCI_MODE']) && $_SESSION['OCI_MODE'] == 'order')) {
                            $basket->clear_cart('all', True, True);
                        } else {
                            $basket->clear_cart('all', False);
                        }
                        unset($order_curr_lang);
                        
                        if(isset($oci)) {
                            switch($_SESSION['OCI_MODE']) {
                                case 'catalog':
                                    $oci->doAction('oci_checkout');
                                    break;
                                case 'order':
                                    $oci->doAction('oci_finalize_order');
                                    break;
                            }
                            $oci->finishOciCall();
                        }
                        // If OCI is not set, or not redirecting, finish the Order Process as usual
                        if ((!is_string($status)) && ($status == 0)) {
                            $tpl->assign('layout_include', 'page.cart_step4.html');
                            lvDisplay($tpl, 'layout.html');
                        } else {
                            lvredirect($paymentid);
                        }
                    } else {
                        lvredirect('index.php?action=order&step=2&error=1&errorstring=' . urlencode($paymentid) . '&lang=' . strtoupper($currentLanguage));
                    }
                    break;

                default:
                    $tpl->assign('layout_include', 'page.cart_step1.html');
                    lvDisplay($tpl, 'layout.html');
                    break;
            }
            break;

        case "cancel_order":
            if (isset($_SESSION['out_array'])) {
                unset($_SESSION['out_array']);
            }
            if (isset($_SESSION['order_object'])) {
                $order = unserialize($_SESSION['order_object']);
                if ($order->ordername != '') {
                    unlink('data/orders/' . $order->ordername);
                } unset($_SESSION['order_object'], $order);
            }
            lvredirect('index.php?action=showbasket&lang=' . strtoupper($currentLanguage));
            break;

        case "start_with_empty_cart":
            $basket = new Basket();
            $basket->clear_cart('all', False);
            lvredirect('index.php');
            break;

        case "add_multi_to_cart":
            if (CookiesEnabled($tpl)) {
                try {
                    $multi_articles = $pg->article;
                } catch (Exception $e) {
                    echo $e->__toString();
                }
                $basket = new Basket();
                $errors = '';
                $valid = 1;
                foreach ($multi_articles as $key => $value) {
                    if ($value['quantity'] > 0) {
                        $basket->check_before_add_to_cart($value['artid'], $value['quantity'], $value['additional'], $errors, $valid, $language, $currentLanguage, 1);
                        if ($valid == 1) {
                            $basket->add_to_cart($value['artid'], $value['quantity'], $currentLanguage, $lvShowPriceMode, 'articles', $value['additional']);
                        } else {
                            $_SESSION['errors'] = $errors;
                            $_SESSION['errorsbackurl'] = $httpreferrer;
                            lvredirect('index.php?action=errors&lang=' . strtoupper($currentLanguage));
                            exit;
                        }
                    }
                }
                if ($conf->data['LV_OPTIONS']['LV_SHOWORDERPAGEAFTERINBASKET_ENABLED']) {
                    lvredirect('index.php?action=showbasket&lang=' . strtoupper($currentLanguage));
                } else {
                    lvredirect(lvURLAndVariable($httpreferrer, 'justinbasket=true'));
                }
            } else {
                lvredirect('index.php?action=home&lang=' . strtoupper($currentLanguage));
                exit;
            }
            break;

        case "add_to_cart_bulkorder":
            if (CookiesEnabled($tpl)) {
                if ($pg->exists('artid') && $pg->exists('quantity')) {
                    $basket = new Basket();
                    $errors = '';
                    $valid = 1;
                    foreach ($pg->values as $k => $v) {
                        $pg->values[$k] = htmlspecialchars_decode($v);
                    }
                    $basket->check_before_add_to_cart($pg->artid, $pg->quantity, $pg->values, $errors, $valid, $language, $currentLanguage);
                    if ($valid == 1) {
                        $basket->add_to_cart($pg->artid, $pg->quantity, $currentLanguage, $lvShowPriceMode, 'articles', $pg->values);
                        echo "OK";
                    } else {
                        echo "NOT OK";
                    }
                }
            }
            exit();
            break;

        case "add_to_cart":
            if (CookiesEnabled($tpl)) {
                if ($pg->exists('artid') && $pg->exists('quantity')) {
                    $basket = new Basket();
                    $errors = '';
                    $valid = 1;
                    foreach ($pg->values as $k => $v) {
                        $pg->values[$k] = htmlspecialchars_decode($v);
                    }
                    $basket->check_before_add_to_cart($pg->artid, $pg->quantity, $pg->values, $errors, $valid, $language, $currentLanguage);
                    if ($valid == 1) {
                        $basket->add_to_cart($pg->artid, $pg->quantity, $currentLanguage, $lvShowPriceMode, 'articles', $pg->values);
                    } else {
                        $_SESSION['errors'] = $errors;
                        $_SESSION['errorsbackurl'] = $httpreferrer;
                        lvredirect('index.php?action=errors&lang=' . strtoupper($currentLanguage));
                    }
                    if ($conf->data['LV_OPTIONS']['LV_SHOWORDERPAGEAFTERINBASKET_ENABLED']) {
                        lvredirect('index.php?action=showbasket&lang=' . strtoupper($currentLanguage));
                    } else {
                        lvredirect(lvURLAndVariable($httpreferrer, 'justinbasket=true'));
                    }
                    exit;
                } else {
                    if ($conf->data['LV_OPTIONS']['LV_HOMEPAGE'] && $conf->data['LV_OPTIONS']['LV_HOMEPAGE'] != "") {
                        lvredirect($conf->data['LV_OPTIONS']['LV_HOMEPAGE']);
                    } else {
                        lvredirect('index.php?action=home&lang=' . strtoupper($currentLanguage));
                    }
                }
            }
            break;

        case "add_to_cart_gift":
            if (CookiesEnabled($tpl)) {
                if ($pg->exists('aid')) {
                    $errors = '';
                    $valid = 1;
                    if (!lvarticlefile_exists($conf->data['LV_OPTIONS']['LV_CNST_PATH_DATAARTS_DOT'] . '/article_' . $pg->aid . '.xml', $pg->aid)) {
                        exit;
                    }
                    $basket = new Basket();
                    if (count($basket->data['gifts']) < $basket->gifts_quantity) {
                        $res = $basket->get_summary($lvShowPriceMode, $currentLanguage);
                        if (empty($res[1]['gift_articles']) || !in_array($pg->aid, $res[1]['gifts_ids'])) {
                            $valid = 0;
                            $errors .= diplayError('no such gift found');
                        }
                    } else {
                        $valid = 0;
                        $errors .= diplayError('you cannot add more gifts');
                    }
                    if ($valid == 1) {
                        $basket->add_to_cart($pg->aid, 1, $currentLanguage, $lvShowPriceMode, 'gifts');
                    } else {
                        $tpl->assign('errors', $errors);
                        $tpl->assign('layout_include', 'page.errors.html');
                        lvDisplay($tpl, 'layout.html');
                        exit;
                    }
                }
                lvredirect($httpreferrer);
            }
            break;

        case "remove_from_cart":
            if ($pg->exists('cartkey')) {
                $basket = new Basket();
                $basket->removeart_from_cart_bycartid($pg->cartkey);
            }
            lvredirect($httpreferrer);
            break;

        case "remove_from_cart_gift":
            if ($pg->exists('artid')) {
                $basket = new Basket();
                if ($basket->find_in_cart($pg->artid, 'gifts', Null, $currentLanguage) != -1) {
                    $basket->remove_from_cart($pg->artid, 'all', 'gifts', Null, $currentLanguage);
                }
            }
            lvredirect($httpreferrer);
            break;

        case "member":
            addBasketToTemplate($tpl, $currentLanguage, $lvShowPriceMode);
            addCountriesListToTemplate($tpl);
            $marea = new member($tpl, $currentLanguage);
            $marea->Display();
            break;

        case "mupdate":
            addCountriesListToTemplate($tpl);
            $marea = new member($tpl, $currentLanguage);
            $marea->Update();
            break;

        case "login":
            if (CookiesEnabled($tpl)) {
                if (!$validator->ProceedAuth($errorType)) {
                    $url = ($conf->data['LV_OPTIONS']['LV_HOMEPAGE'] && $conf->data['LV_OPTIONS']['LV_HOMEPAGE'] != "") ? $conf->data['LV_OPTIONS']['LV_HOMEPAGE'] : ('index.php?action=home&lang=' . strtoupper($currentLanguage));
                    lvredirect($url . (strpos($url, '?') ? '&' : '?') . 'passerror=' . $errorType . '&lang=' . strtoupper($currentLanguage));
                } else {
                    if ($oldurl != '') {
                        $basket = new Basket();
                        $basket->load_data_savecart();
                        lvredirect($oldurl);
                    } else {
                        if ($conf->data['LV_OPTIONS']['LV_HOMEPAGE'] && $conf->data['LV_OPTIONS']['LV_HOMEPAGE'] != "") {
                            lvredirect($conf->data['LV_OPTIONS']['LV_HOMEPAGE']);
                        } else {
                            lvredirect('index.php?action=home&lang=' . strtoupper($currentLanguage));
                        }
                    }
                }
            }
            break;

        case "logout":
            $validator->Logout();
            $basket = new Basket();
            $basket->clear_cart('all', False);
            if ($conf->data['LV_OPTIONS']['LV_HOMEPAGE'] && $conf->data['LV_OPTIONS']['LV_HOMEPAGE'] != "") {
                lvredirect($conf->data['LV_OPTIONS']['LV_HOMEPAGE']);
            } else {
                lvredirect('index.php?action=home&lang=' . strtoupper($currentLanguage));
            }
            break;

        case "register":
            if (CookiesEnabled($tpl)) {
                addBasketToTemplate($tpl, $currentLanguage, $lvShowPriceMode);
                addCountriesListToTemplate($tpl);
                $marea = new member($tpl, $currentLanguage);
                if ($marea->Register($currentLanguage)) {
                    $validator = new Login($tpl);
                    if (($pg->exists('form_login')) && is_string($pg->form_login) && ($pg->form_login != '')) {
                        $validator->Verify($pg->form_login, $pg->form_password);
                    } else {
                        $validator->Verify($pg->form_email, $pg->form_password);
                    }
                    if ($conf->data['LV_OPTIONS']['LV_HOMEPAGE'] && $conf->data['LV_OPTIONS']['LV_HOMEPAGE'] != "") {
                        lvredirect($conf->data['LV_OPTIONS']['LV_HOMEPAGE']);
                    } else {
                        if ($conf->data['LV_OPTIONS']['LV_HOMEPAGE'] && $conf->data['LV_OPTIONS']['LV_HOMEPAGE'] != "") {
                            lvredirect($conf->data['LV_OPTIONS']['LV_HOMEPAGE']);
                        } else {
                            lvredirect('index.php?action=home&lang=' . strtoupper($currentLanguage));
                        }
                    }
                }
            }
            break;

        case "add_to_wish_list":
            if (CookiesEnabled($tpl)) {
                if ($_SESSION['Alpha'] == -1) {
                    lvredirect('index.php?action=register&lang=' . strtoupper($currentLanguage));
                }
                $wish = new WishList();
                try {
                    $wish->add2list($pg->artid, $language);
                    $tpl->assign('artid', $pg->artid);
                } catch (Exception $e) {
                    
                }
                lvredirect($httpreferrer);
            }
            break;

        case "remove_from_wish_list":
            if ($_SESSION['Alpha'] == -1) {
                lvredirect('index.php?action=register&lang=' . strtoupper($currentLanguage));
            }
            $wish = new WishList();
            try {
                $wish->delete($pg->artid);
                $tpl->assign('artid', $pg->artid);
            } catch (Exception $e) {
                
            }
            lvredirect($httpreferrer);
            break;

        case "remove_from_pwish_list":
            if ($_SESSION['Alpha'] == -1) {
                lvredirect('index.php?action=register&lang=' . strtoupper($currentLanguage));
            }
            try {
                $wish = new Pwishlist($pg->list_id, "public");
                $wish->delete($pg->artid);
                $tpl->assign('artid', $pg->artid);
            } catch (Exception $e) {
                
            }
            lvredirect($httpreferrer);
            break;

        case "add_to_public_wishlist":
            if (CookiesEnabled($tpl)) {
                if ($_SESSION['Alpha'] == -1) {
                    lvredirect('index.php?action=register&lang=' . strtoupper($currentLanguage));
                }
                try {
                    $listid = $pg->listid;
                    $artid = $pg->artid;
                } catch (Exception $e) {
                    
                }
                if (isset($listid) & isset($artid)) {
                    try {
                        $wish = new Pwishlist($listid, "public");
                        $wish->add2list($artid, $language);
                    } catch (Exception $e) {
                        
                    } lvredirect($httpreferrer);
                }
            }
            break;

        case "private_wishlist":
            try {
                if ($pg->send_email) {
                    $wish = new WishList();
                    $wish->sendByMail($pg->allboxes, $tpl, $pg->email, $currentLanguage);
                }
            } catch (Exception $e) {
                
            }
            try {
                if ($pg->into_cart) {
                    $wish = new WishList();
                    $wish->addtocart($pg->allboxes, $tpl, $language, $lvShowPriceMode);
                }
            } catch (Exception $e) {
                
            }
            try {
                if ($pg->into_public_whish_list) {
                    $wishes = split(",", $pg->allboxes);
                    unset($wishes[0]);
                    try {
                        $listid = $pg->listid;
                        $wish = new Pwishlist($listid, "public");
                        foreach ($wishes as $key => $value) {
                            if (is_numeric($value)) {
                                $wish->add2list($value, $language);
                            }
                        }
                    } catch (Exception $e) {
                        
                    }
                    lvredirect($httpreferrer);
                }
            } catch (Exception $e) {
                
            }
            break;

        case "wish_send_invitation":
            addBasketToTemplate($tpl, $currentLanguage, $lvShowPriceMode);
            if ($pg->exists('emails')) {
                try {
                    $emails = $pg->emails;
                } catch (Exception $e) {
                    unset($emails);
                }
            } else {
                unset($emails);
            }
            try {
                $listid = $pg->listid;
                $tpl->assign("listid", $listid);
            } catch (Exception $e) {
                
            }
            if (!$emails) {
                $refferer = $httpreferrer;
                if (!$refferer) {
                    $refferer = "http://" . $_SERVER['HTTP_HOST'];
                }
                $tpl->assign('backurl', $refferer);
                $tpl->assign('layout_include', 'page.invitation.html');
                lvDisplay($tpl, 'layout.html');
                exit;
            } else {
                $wish = new Pwishlist($listid, "public");
                $wish->SendInvitation($emails, $tpl, $currentLanguage);
                exit;
            }
            break;

        case "public_wishlist":
            try {
                if ($pg->send_email) {
                    $wish = new Pwishlist($pg->list_id, $tpl);
                    $wish->sendByMail($pg->allboxes, $tpl, $pg->email, $currentLanguage);
                }
            } catch (Exception $e) {
                
            }
            try {
                if ($pg->into_cart) {
                    $wish = new Pwishlist($pg->list_id, $tpl);
                    $wish->addtocart($pg->allboxes, $tpl, $language, $lvShowPriceMode);
                }
            } catch (Exception $e) {
                
            }
            break;

        case "ff_tab":
            break;

        case "recover":
            $data = new POST();
            $recovery_lang = $currentLanguage;
            addBasketToTemplate($tpl, $currentLanguage, $lvShowPriceMode);
            if ($data->exists('login')) {
                $locLogin = $data->login;
            } elseif ($data->exists('email')) {
                $locLogin = $data->email;
            } else {
                $locLogin = '';
            }
            if (($locLogin != '') && ($data->exists('email'))) {
                $users = new Users();
                if ($users->loginExists($locLogin)) {
                    $userdata = $users->GetUserData($locLogin);
                    if (strtolower($userdata['email']) == strtolower($data->email)) {
                        $password = substr(sha1(rand()), 0, 10);
                        $tpl->assign('sent', 1);
                        $userdata['password'] = $password;
                        $userdata['sitetitle'] = $language->xml_array['LV_OPTIONS_SITETITLE'];
                        $users->Update($locLogin, $userdata);
                        $mail = new mail();
                        $msg = file_get_contents("./lvconfig/recovery_letter_$recovery_lang");
                        foreach ($userdata as $key => $value) {
                            $msg = str_replace("[$key]", $value, $msg);
                        }
                        $mail->setMessage($msg);
                        $mail->setSubject($language->xml_array['LV_OPTIONS_SITETITLE'] . ' - ' . $language->xml_array['LV_FIELD_PASSWORD']);
                        $mail->addAddress('to', $userdata['email']);
                        $mail->send();
                        $users->Update($locLogin, $userdata);
                    } else {
                        $tpl->assign('error', $tpl->getTemplateVars('LV_INCORRECT_EMAIL'));
                    }
                }
            }
            $tpl->assign('layout_include', 'page.recovery.html');
            lvDisplay($tpl, 'layout.html');
            break;

       case "advanced_search":
         if (file_exists("lvconfig/manufacturers.xml")) {
           $manufacturers = new CustomXML("lvconfig/manufacturers.xml");
           $manufacturers_array = $manufacturers->xml['LV_MANUFACTURERS']['LV_MANUFACTURER'];
           $tpl->assign("manufacturers", $manufacturers_array);
         }
         if (file_exists("lvconfig/groups.xml")) {
           $sys_groups = new CustomXML("lvconfig/groups.xml");
           $sys_groups_array = $sys_groups->xml['LV_GROUPS']['ITEM'];
         }
         $tpl->assign('num',sizeof($sys_groups->xml['LV_GROUPS']['ITEM'])-1);
         addBasketToTemplate($tpl, $currentLanguage, $lvShowPriceMode);
         $tpl->assign('layout_include','page.search.advanced.html');
         lvDisplay($tpl,'layout.html');
         break;

       case "advanced_search_results":
         $advanced=getAdvancedForSearchResults($pg,$group);
         $search=new Search($currentLanguage);
         $res=$search->find($pg->keywords, $advanced);
         $tpl->assign('search_res',$res);
         addBasketToTemplate($tpl, $currentLanguage, $lvShowPriceMode);
         $tpl->assign('sortart',$_SESSION['sortart']);
         $tpl->assign('layout_include','page.search.html');
         lvDisplay($tpl,'layout.html');
         break;

        case "search":
            if (!$pg->exists('srchval') || $pg->srchval == '') {
                $pg->srchval = '<--NoSearchValues-->';
            }
            $search = new Search($currentLanguage);
            $search_string = mb_strtolower($pg->srchval);
            lvRegisterSearch(html_entity_decode($pg->srchval, NULL, 'UTF-8'), $currentLanguage, '0');
            $res = $search->find($search_string);
            $tpl->assign('search_res', $res);
            addBasketToTemplate($tpl, $currentLanguage, $lvShowPriceMode);
            $tpl->assign('sortart', $_SESSION['sortart']);
            $tpl->assign('layout_include', 'page.search.html');
            $oWishlist = new WishlistMulti();

            $tpl->assign('aWishlists', $oWishlist->getWishlists());
            $tpl->assign('oMultiWishlist', $oWishlist);
            lvDisplay($tpl, 'layout.html');
            break;

       case "errors":
         if (isset($_SESSION['errors']) && $_SESSION['errors']!='') {
           addBasketToTemplate($tpl, $currentLanguage, $lvShowPriceMode);
           $tpl->assign('errors',$_SESSION['errors']);
           $tpl->assign('backurl',(isset($_SESSION['errorsbackurl'])?$_SESSION['errorsbackurl']:$httpreferrer));
           $tpl->assign('layout_include','page.errors.html');
           lvDisplay($tpl,'layout.html');
         } else { 
           if($conf->data['LV_OPTIONS']['LV_HOMEPAGE'] && $conf->data['LV_OPTIONS']['LV_HOMEPAGE'] != "") {
             lvredirect($conf->data['LV_OPTIONS']['LV_HOMEPAGE']);
           } else {
             lvredirect('index.php?action=home&lang='.strtoupper($currentLanguage));
           }
         }
         break;

        case "formmail":
            $formm = new FormM();
            $formmAccept = $formm->acceptCaptchaForm($conf, $tpl);
            if ($formmAccept == "1") {
                $formm->sendFormmail($conf, $pg->lv_extra);
                $_SESSION['formvalues'] = null;
                $_SESSION['formsent'] = "1";
                $_SESSION['errors'] = "";
            } else {
                $_SESSION['formvalues'] = $formm->collectFormvalues();
                $_SESSION['formsent'] = "0";
                $_SESSION['errors'] = $formmAccept;
            }
            unset($formm);
            lvredirect('index.php?action=' . $pg->lv_action . '&extra=' . $pg->lv_extra . '&lang=' . $conf->data['LV_OPTIONS']['LV_MAIN_LANGUAGE']);
            break;

        case "writeareview":
            $art = new Article($pg->aid);
            $article = $art->data;
            $curr_lang = 'lang_' . $currentLanguage;
            $article['descriptionandmeasure'] = $article['descriptionandmeasure'][$curr_lang];
            if (isset($article['specification'])) {
                $article['specification'] = $article['specification'][$curr_lang];
            }
            $tpl->assign('formvalues', $_SESSION['formvalues']);
            $tpl->assign('formsent', $_SESSION['formsent']);
            $tpl->assign('errors', $_SESSION['errors']);
            $_SESSION['formvalues'] = null;
            $_SESSION['formsent'] = "";
            $_SESSION['errors'] = "";
            $tpl->assign('article', $article);
            $tpl->assign('layout_include', 'page.writeareview.html');
            lvDisplay($tpl, 'layout.html');
            break;

        case "writeareview_post":
            $formm = new FormM();
            $formmAccept = $formm->acceptCaptchaForm($conf, $tpl);
            if ($formmAccept == "1") {
                $review = new Review();
                $review->postReview($pg->aid, $pg->rate, $pg->title, $pg->text, $pg->name, $pg->email, $currentLanguage);
                unset($review);
                $_SESSION['formvalues'] = null;
                $_SESSION['errors'] = "";
                $_SESSION['formsent'] = "1";
            } else {
                $_SESSION['formvalues'] = $formm->collectFormvalues();
                $_SESSION['formsent'] = "0";
                $_SESSION['errors'] = $formmAccept;
            }
            unset($formm);
            lvredirect('index.php?action=writeareview&lang=' . $conf->data['LV_OPTIONS']['LV_MAIN_LANGUAGE'] . '&aid=' . $pg->aid);
            break;

        case "sort_art":
            $_SESSION['sortart'] = $pg->sorting;
            if (($_SESSION['sortart'] == '') || ($_SESSION['sortart'] == 0)) {
                $_SESSION['sortart'] = "1";
            }
            lvredirect($httpreferrer);
            break;

        case "artldisplay":
            $_SESSION['artldisplay'] = $pg->display;
            if ($_SESSION['artldisplay'] == '') {
                $_SESSION['artldisplay'] = "0";
            }
            lvredirect($httpreferrer);
            break;

       case "psp_paymentStatus":
         if (($pg->exists('pspitemnr')) && ($pg->exists('orderid'))) {
            if(!$pg->exists('transactioncode')) {
                $pg->transactioncode = 0;
            }
            if(!$pg->exists('transactionid')) {
                $pg->transactionid = 0;
            }
            include_once('framework/psp_common.class.php');
            psp_paymentStatus($pg->pspitemnr, $pg->transactionid, $pg->transactioncode, $pg->orderid);
         }
         break;

        case "oci_catalog":
        case "oci_order":
            // Only continue OCI Login if all required parameters have been set in the URL
            if ($pg->exists('module')) {
                $ociData = array(
                    'login' => $pg->exists('login') ? $pg->login : '',
                    'password' => $pg->exists('password') ? $pg->password : '',
                    'return' => $pg->exists('HOOK_URL') ? urldecode($pg->HOOK_URL) : '',
                    'module' => $pg->module,
                    'target' => $pg->exists('returntarget') ? $pg->returntarget : ''
                );
                $oci = new Oci($ociData);
                $ociLog->append('Instantiated OCI class');
                $ociLog->append("Module: {$oci->getModule()}");
                if($ociData['login'] != "" && $ociData['password'] != "") {
                    $ociLog->append('Checking Credentials');
                    try {
                        // Only perform the OCI Call if the credentials are right, otherwise drop back to Homepage.
                        if (!$validator->Verify($pg->login, $pg->password)) {
                            $ociLog->append("Invalid login");
                            throw new Exception($errorType);
                        }
                        $ociLog->append('Clearing basket');
                        $basket = new Basket();
                    } catch (Exception $ex) {
                        $urlAdd = "passerror={$ex->getMessage()}";
                    }
                }

                $ociLog->append('Do OCI Action: '. $action);
                $response = $oci->doAction($action);
                $ociLog->append($oci);
                $oci->finishOciCall($urlAdd);
                // Only break when in OCI mode / OCI parameters have been called.
                break;
            }
            
            // If one of the required OCI Parameters is missing, fall through to the Default Homepage step.

        default:
            if ($conf->data['LV_OPTIONS']['LV_HOMEPAGE'] && $conf->data['LV_OPTIONS']['LV_HOMEPAGE'] != "") {
                lvredirect($conf->data['LV_OPTIONS']['LV_HOMEPAGE']);
            } else {
                if ($conf->data['LV_OPTIONS']['LV_LANGUAGE_SELECTION_PAGE']) {
                    lvDisplay($tpl, 'index.html');
                } else {
                    lvredirect('index.php?action=home&lang=' . $conf->data['LV_OPTIONS']['LV_MAIN_LANGUAGE']);
                }
            }
            break;
    }
}
?>