﻿
// **** GLOBAL STUFF ********************************

function pageLoad() {
    //GetCultureInfo();
    
    switch (_pageid) {
        case 'assortiment':
            if ($get('divbadgeProductDetail_ascx') != null) {
                ProductDetail_ascx_Load();
            }
            refreshCartContents();
            if (typeof fakeflashLoad == 'function') {
                fakeflashLoad();
            }
            break;

        case 'cart':
            launchCartWizard2();
            break;
        
        case 'barcode':
            if (al=='E' && !isB2BSelected()) {
                PopupSelectKlant();
            }
            refreshCartContents();
            break;
        
        case 'profile':
        case 'content':
        case 'corporate':
        case 'iframe':
            refreshCartContents();
            if (typeof (profilePageLoad) == 'function')
                profilePageLoad();
            break;
        default:
            break;
    }

    // handler aan searchbox hangen, mits de searchbox zichtbaar is
    if ($('#txtSearch') != null) {
        $('#txtSearch').typeWatch({ callback: searchresultPopup, wait: 400, highlight: true, captureLength: -1 });
    }

    // Heartbeat elke 5 minuten verzenden zolang de browser aan de IIS hangt.
    window.setInterval("HeartBeat();",5 * 60 * 1000);
    HeartBeat();

    CheckAnnouncements();

    $('#menubutton-' + _menuID).addClass("selected");

    getFilterState();   
}

function doReload() {
    window.location.reload();
}

function isB2BSelected() {
    return (bid!='');
}

function stopevent(evt) {
    if (evt.preventDefault) {
      evt.preventDefault();
      evt.stopPropagation();
    } else {
      evt.returnValue = false;
      evt.cancelBubble = true;
    }
}

var _currentArtikelCode;
var _currentMyArtikelCode;
var _searchmoreIsVisible=false;

var CARTwise = {
    setQS: function(param, value) {
        var blnFound = false;
        var arrParts = '';
        var strAppend = '';
        arrParts = window.location.href.split('&');
        for (i = 0; i < arrParts.length; i++) {
            var arrNameValue = arrParts[i].split('=');
            if (arrNameValue[0] == param) {
                arrParts[i] = param + '=' + value;
                blnFound = true;
                break;
            }
        }
        if (!blnFound) {
            strAppend = '&' + param + '=' + value;
        }
        return arrParts.join('&') + strAppend;
    },
    changeQS: function(srcstring, param, value) {
        var blnFound = false;
        var arrParts = '';
        var strAppend = '';
        var strHostPagePart = '';

        if (srcstring.indexOf('?') >= 0) {
            strHostPagePart = srcstring.split('?')[0];
            arrParts = srcstring.split('?')[1].split('&');
        } else {
            strHostPagePart = srcstring;
        }

        if (arrParts.length == 0) {
            strAppend = '?' + param + '=' + value;
            return strHostPagePart + strAppend;
        } else {
            for (i = 0; i < arrParts.length; i++) {
                var arrNameValue = arrParts[i].split('=');
                if (arrNameValue[0] == param) {
                    arrParts[i] = param + '=' + value;
                    blnFound = true;
                    break;
                }
            }
            if (!blnFound) {
                strAppend = '&' + param + '=' + value;
            }
            return strHostPagePart + '?' + arrParts.join('&') + strAppend;
        }
    },

    removeQS: function(srcstring, param) {
        var arrParts = '';
        var strNewParts = '';
        var strHostPagePart = '';
        if (srcstring.indexOf('?') >= 0) {
            strHostPagePart = srcstring.split('?')[0];
            arrParts = srcstring.split('?')[1].split('&');
        } else {
            return srcstring;
        }
        for (i = 0; i < arrParts.length; i++) {
            var arrNameValue = arrParts[i].split('=');
            if (arrNameValue[0] != param) {
                if (strNewParts.length > 0)
                    strNewParts += '&';
                strNewParts += arrParts[i];
            }
        }
        if (strNewParts.length > 0)
            strNewParts = '?' + strNewParts;
        return strHostPagePart + strNewParts;
    },

    arraySize: function(object) {
        if ($(object).size() > 1)
            return $(object).size();
        var size = 0;
        $.each(object, function() { size++; });
        return size;
    }
}

function GetCultureInfo() {
    ShopWebService.GetCulture(GetCulture_callback, generic_callbackerror);
}

function GetCulture_callback(result) {
    culture=result;
}

function generic_callbackerror(result) {
    window.status=result.get_message();
}

function HeartBeat() {
    ShopWebService.HeartBeat(sid,function (result) {
        //window.status='[HB]' + result + '[S]' + sid + '[U]' + uid;
        return true;
    },HeartBeatFailure_callback);
}

function HeartBeatFailure_callback(err) {
    //window.location.href='login.aspx';
}

function searchKeyPress(txtbox, evt) {
    if (evt.keyCode == 13) {
        //evt.cancelBubble=true;
        stopevent(evt);
        
        if (txtbox.value.substr(0,1)=='=') {
            if (_blnFormulaIsValid) {
                if (isNaN(parseInt(_strFormulaNumber))) {
                    alert(_ML('Zoeken.Geef een geldig aantal op'));
                } else {
                    ShopWebService.AddToCart(sid,_strFormulaArtCode,Number(_strFormulaNumber),cart_callback, generic_callbackerror);                    
                    resetFormulaPopupView();
                    txtbox.value='';
                }
            } else {
                //alert("Het artikel is niet gevonden.");
            }
        } else {
            dosearch();
        }
        return false;
    }
}

function searchboxKeyPress(txtbox,evt) {
    if (evt.keyCode == 13) {
        //evt.cancelBubble=true;
        stopevent(evt);
        dosearchSearchBox();
        return false;
    }
}

function subfilterKeyPress(txtbox,evt) {
    if (evt.keyCode == 13) {
        evt.cancelBubble=true;

        var strURL;
        strURL=CARTwise.changeQS(window.location.href,'finalfilter',txtbox.value);
        strURL=CARTwise.changeQS(strURL,'page','1');
        window.location.href=strURL;
        return false;
    }
}

function searchboxClicked(txtbox,evt) {
    if (txtbox.value.toLowerCase()==_ML("Zoeken.Zoek").toLowerCase()) {
        txtbox.value='';
    } else {
        txtbox.select();
    }
    txtbox.focus();
    stopevent(evt);
    return false;
}

function searchAreaClicked(div,evt) {
    toggleSearchMore();
}

function checknumber(value) {
    var anum=/(^\d+$)|(^\d+\.\d+$)/;
    if (anum.test(value))
        testresult=true
    else {
        alert(_ML('Algemeen.Voer a.u.b. een getal in'))
        testresult=false
    }
    return (testresult)
}

function checkCartAantal(value,minbesteleenheid) {
    if (!checknumber(value)) {
        return false;
    }
    
    if (value <= 0) {
        alert(_ML('Algemeen.Voer a.u.b. een aantal groter dan 0 in'));
        return false;
    }
    
    if (value > 1000000) {
        alert(_ML('Algemeen.Voer a.u.b. een aantal kleiner dan 1.000.000 in.'));
        return false;
    }
    
    // minimale besteleenheid checken
    if (value % minbesteleenheid != 0) {
        $get('spnMinOrderUnit').innerHTML=minbesteleenheid;
        $get('txtOrderUnitValue').value = (parseInt(value / minbesteleenheid) + 1) * minbesteleenheid;
        $("#divModals").show();
        $find("ModalBehaviourInvalidOrderUnit").show();
        _blnInvalidOrderUnitVisible=true;
        return false;
    }
    
    return true;
}

function dosearch() {
    var strSearch = encodeURIComponent($get('txtSearch').value);
    
    dosearch_callback(null, strSearch);

//    // Log het raadplegen van het resultaat (id=2)
//    ShopWebService.LogSearch(sid, _strPopupCurrentSearch, _strPopupCurrentSearchHits, 2, dosearch_callback, generic_callbackerror, strSearch);
}

function dosearch_callback(result, strSearch) {
    ShopWebService.ResetAllFilters(function(result) {
        ShopWebService.GetCurrentLanguageCode(function(res) { window.location.href = '/' + res + '/a?action=search&q=' + strSearch + '&page=1'; });
    })
}

function dosearchSearchBox() {
    var strSearch = encodeURIComponent($get('txtSearchBoxText').value);
    ShopWebService.GetCurrentLanguageCode(function(res){window.location.href='/' + res + '/a?action=search&q=' + strSearch + '&page=1';});
}

function showdetail(artikelcode_encoded, seo_url_encoded) {
    if (seo_url_encoded) {
        var url = CWUnEscape(seo_url_encoded);
        window.location.href = url;
    } else {
        ShopWebService.GetCurrentLanguageCode(function(res) { window.location.href = '/' + res + '/a?action=detail&artcode=' + artikelcode_encoded + '';});
    }
}

function comboNavigate(cbo, url) {
    window.location.href = url.replace(/{page}/gi,cbo.value)
}

var _currentCartAdd_method;
var _currentCartAdd_artikelcode;
var _currentCartAdd_buttonid;
var _currentCartAdd_columnindex;
var _currentCartAdd_doanimation;
var _currentCartAdd_aantalstub;
var _currentCartAdd_minbesteleenheid;
var _currentCartAddInputbox;
var _currentCartAdd_OrderRegel_PK;

function addtocartfromdetail_wrapper(artikelcode_encoded,buttonid,columnindex,doanimation,aantalstub,minbesteleenheid) {

    var aantal = $get(aantalstub + artikelcode_encoded).value;
    
    // stock check
    ShopWebService.StockCheck(sid, CWDecode(artikelcode_encoded), aantal, false, function(result) {
        switch (result) {
            case 'OK':
                //we got stock
                addtocartfromdetail(artikelcode_encoded, buttonid, columnindex, doanimation, aantalstub, minbesteleenheid);
                break;
            case 'NO_STOCK':
                show_nostock_msg();
                break;
            default:
                show_nostock_msg();
                break;
        }
    }, generic_callbackerror);
}

function addtocartfromdetail(artikelcode_encoded, buttonid, columnindex, doanimation, aantalstub, minbesteleenheid) {
    _currentCartAdd_method='addtocart';
    _currentCartAdd_artikelcode = CWDecode(artikelcode_encoded);
    _currentCartAdd_buttonid=buttonid;
    _currentCartAdd_columnindex=columnindex;
    _currentCartAdd_doanimation=doanimation;
    _currentCartAdd_aantalstub=aantalstub;
    _currentCartAdd_minbesteleenheid=minbesteleenheid;

    if (al=='E' && bid=='') {
        alert(_ML('Algemeen.Selecteer eerst een klant a.u.b.'));
        return false;
    }

    var obj = $get("cardimg_" + artikelcode_encoded);
    var aantal = $get(aantalstub + artikelcode_encoded).value;

    if (checkCartAantal(aantal,minbesteleenheid)) {
        buttonid.disabled=true;
        
        if (doanimation==true) {
            //do animation (for card and thumbnail view)
            obj.style.border = '1px solid red';
            obj.style.zIndex = 4000;            
            $(obj).animate({
                'left': 630 - (((_view == 'card') ? 0 : columnindex) * 200),
                'top': 0,
                'opacity': 0
            }, 1100, function af() { restoreCardImagePosition(artikelcode_encoded, aantal, obj.id, buttonid, doanimation, aantalstub) }
            );
        } else {
            //no animation (e.g. for list view)
            restoreCardImagePosition(artikelcode_encoded, aantal, '', buttonid, doanimation, aantalstub);
        }
    }
}


function addtocart_wrapper(artikelcode_encoded, buttonid, columnindex, doanimation, aantalstub, minbesteleenheid) {
    var aantal = $get(aantalstub + artikelcode_encoded).value;
    // stock check
    ShopWebService.StockCheck(sid, CWDecode(artikelcode_encoded), aantal, false, function(result) {
                        switch (result) {
                            case 'OK':
                                //we got stock
                                addtocart(artikelcode_encoded, buttonid, columnindex, doanimation, aantalstub, minbesteleenheid);
                                break;
                            case 'NO_STOCK':
                                show_nostock_msg();
                                break;
                            default:
                                show_nostock_msg();
                                break;
                        }
                    }, generic_callbackerror);
}

function addtocart(artikelcode_encoded, buttonid, columnindex, doanimation, aantalstub, minbesteleenheid) {
    _currentCartAdd_method = 'addtocart';
    _currentCartAdd_artikelcode = CWDecode(artikelcode_encoded);
    _currentCartAdd_buttonid=buttonid;
    _currentCartAdd_columnindex=columnindex;
    _currentCartAdd_doanimation=doanimation;
    _currentCartAdd_aantalstub=aantalstub;
    _currentCartAdd_minbesteleenheid=minbesteleenheid;

    if (al=='E' && bid=='') {
        alert(_ML('Algemeen.Selecteer eerst een klant a.u.b.'));
        return false;
    }

    var obj = $get("cardimg_" + artikelcode_encoded);
    var aantal = $get(aantalstub + artikelcode_encoded).value;

    if (checkCartAantal(aantal,minbesteleenheid)) {
        buttonid.disabled=true;
        
        if (doanimation==true) {
            //do animation (for card and thumbnail view)
            obj.style.border = '1px solid red';
            obj.style.zIndex = 4000;
            $(obj).animate({
                'left': (630 - (((_view == 'card') ? 0 : columnindex) * 200)),
                'top': 200 - obj.parentNode.parentNode.offsetTop,
                'opacity': 0
            }, 1100, function af() { restoreCardImagePosition(artikelcode_encoded, aantal, obj.id, buttonid, doanimation, aantalstub) }
            );
        } else {
            //no animation (e.g. for list view)
            restoreCardImagePosition(artikelcode_encoded, aantal, '', buttonid, doanimation, aantalstub);
        }
    }
}

function show_nostock_msg() {
    alert(_ML('Algemeen.Niet genoeg voorraad'));
}

function addtocartfromsearchpopup_wrapper(artikelcode_encoded, buttonid, columnindex, doanimation, aantalstub, minbesteleenheid) {
    var aantal = $get(aantalstub + artikelcode_encoded).value;

    ShopWebService.StockCheck(sid, CWDecode(artikelcode_encoded), aantal, false, function(result) {
                        switch (result) {
                            case 'OK':
                                //we got stock
                                addtocartfromsearchpopup(artikelcode_encoded, buttonid, columnindex, doanimation, aantalstub, minbesteleenheid);
                                break;
                            case 'NO_STOCK':
                                show_nostock_msg();
                                break;
                            default:
                                show_nostock_msg();
                                break;
                        }
                    }, generic_callbackerror);
}

function addtocartfromsearchpopup(artikelcode_encoded, buttonid, columnindex, doanimation, aantalstub, minbesteleenheid) {
    _currentCartAdd_method='addtocartfromsearchpopup';
    _currentCartAdd_artikelcode = CWDecode(artikelcode_encoded);
    _currentCartAdd_buttonid=buttonid;
    _currentCartAdd_columnindex=columnindex;
    _currentCartAdd_doanimation=doanimation;
    _currentCartAdd_aantalstub=aantalstub;
    _currentCartAdd_minbesteleenheid=minbesteleenheid;

    if (al=='E' && bid=='') {
        alert(_ML('Algemeen.Selecteer eerst een klant a.u.b.'));
        return false;
    }

    var obj = $get("cardimgpopup_" + artikelcode_encoded);
    var aantal = $get(aantalstub + artikelcode_encoded).value;

    if (checkCartAantal(aantal,minbesteleenheid)) {
        buttonid.disabled=true;

        // Log de bestelling (id=3)
        ShopWebService.LogSearch(sid, _strPopupCurrentSearch, _strPopupCurrentSearchHits, 3, LogSearch_callback, generic_callbackerror);
        
        if (doanimation==true) {
            //do animation (for card and thumbnail view)
            obj.style.border = '1px solid red';
            obj.style.zIndex = 4000;            
            $(obj).animate({
                'left': 800,
                'top': 50 - obj.parentNode.offsetTop,
                'opacity': 0
                }, 1100, function af() { restoreCardImagePosition(artikelcode_encoded, aantal, obj.id, buttonid, doanimation, aantalstub) }
            );
        } else {
            //no animation (e.g. for list view)
            restoreCardImagePosition(artikelcode_encoded, aantal, '', buttonid, doanimation, aantalstub);
        }
    }
}

function addtocartbasic_wrapper(artikelcode_encoded, aantal, minbesteleenheid, callback) {
    ShopWebService.StockCheck(sid, CWDecode(artikelcode_encoded), aantal, false, function(result) {
                        switch (result) {
                            case 'OK':
                                //we got stock
                                addtocartbasic(artikelcode_encoded, aantal, minbesteleenheid, callback);
                                break;
                            case 'NO_STOCK':
                                show_nostock_msg();
                                break;
                            default:
                                show_nostock_msg();
                                break;
                        }
                    }, generic_callbackerror);
}

function addtocartbasic(artikelcode_encoded, aantal, minbesteleenheid, callback) {
    if (al=='E' && bid=='') {
        alert(_ML('Algemeen.Selecteer eerst een klant a.u.b.'));
        return false;
    }
    
    if (checkCartAantal(aantal,minbesteleenheid)) {
        // Log de bestelling (id=3)
        ShopWebService.LogSearch(sid, _strPopupCurrentSearch, _strPopupCurrentSearchHits, 3, LogSearch_callback, generic_callbackerror);

        // Doe de bestelling
        if(callback)
          ShopWebService.AddToCart(sid, CWDecode(artikelcode_encoded), aantal, callback, generic_callbackerror);
        else
          ShopWebService.AddToCart(sid, CWDecode(artikelcode_encoded), aantal, cart_callback, generic_callbackerror);
    }
}

function removefromcart(artikelcode_encoded, callbackoptions) {
    ShopWebService.RemoveFromCart(sid, CWDecode(artikelcode_encoded), callbackoptions, cart_callback, generic_callbackerror);
}

function restoreCardImagePosition(artikelcode_encoded, aantal, id, buttonid, doanimation, aantalstub) {

    var obj;
    if (id!='') {
        obj=$get(id);
    }
    
    var txtAantal;

    txtAantal = $get(aantalstub + artikelcode_encoded)

    ShopWebService.AddToCart(sid,CWDecode(artikelcode_encoded),aantal,cart_callback, generic_callbackerror);

    if (doanimation==true) {
        //do animation (for card and thumbnail view)
        obj.style.zIndex = '';        
        $(obj).animate({
            'left': 0,
            'top': 0
            }, 0, function af() { restoreCardImageFadeIn(id.toString(), buttonid, doanimation) }
        );
    } else {
        //no animation (for list view)
        restoreCardImageFadeIn(id.toString(),buttonid,doanimation);
    }
}

function restoreCardImageFadeIn(id,buttonid,doanimation) {
    var obj = $get(id);

    if (doanimation==true) {
        //do animation (for card and thumbnail view)
        obj.style.border='1px solid white';

        $(obj).animate({
            'opacity': 1
            }, 1100, function af() { buttonid.disabled = false; }
        );
    } else {
        //no animation (for list view)
        buttonid.disabled=false;
    }
    
    // specifieke page callbacks na het toevoegen van een artikel
    if (_pageid=='barcode') {
        barcodeAddedToCartCallback();
    }
}

function cart_callback(result) {
    if (result.CallBackOptions=='reloadcartpage') {
        window.navigate('cart.aspx');
        return;
    }

    if ($get('divCartAantalArtikelen')==null) {return}; //indien cart niet zichtbaar is, dan stoppen we hier

    $get('divCartAantalArtikelen').innerHTML = _ML('Winkelwagen.Aantal artikelen') + ': ' + result.AantalArtikelen.toString()
    
    if (result.ReqArtikelCode!='') {
        var pnl=$get('pnlCartLine_' + CWEncode(result.ReqArtikelCode) + '_tdAantal')
        if (pnl!=null) {
            // In het geval van een remove uit de cart control is er geen item meer aanwezig in het middelste pane
            pnl.innerHTML = "(" + result.CurrentArtikelAantal + ") " + _ML('Winkelwagen.Artikelen in winkelwagen');;
        }
    }

    refreshCartContents(result);
}

function refreshCartContents(result) {
    var strHTML = '';
    
    if (typeof(result)=="undefined" || result==null ) {
        ShopWebService.LoadCart(sid, cart_callback, generic_callbackerror);
        return;
    }

    var intIndex = 0;
    var strDescription='';
    var strPreviousGroup='';

    ShopWebService.GetCurrentLanguageCode(function(res) {
        if (result != null) {
            $.each(result.CartItems, function(idx, item) {
                intIndex++;
                
                strDescription = item.Description;
                if (strDescription.length >= 26) {
                    strDescription = strDescription.substring(0, 24) + '..';
                }

                // Multi-level cart?
                if (_blnUseCartGrouping == 'true') {
                    if (strPreviousGroup != item.CartGrouping) {
                        strHTML += '<tr class="trCartRowGrouping"><td colspan="3" isexpanded="0" onclick="return toggleCartDockrowExpansion(this,event,\'' + item.CartGrouping.toUpperCase() + '\')">';
                        strHTML += '<img id="imgCartGrouping_' + item.CartGrouping.toUpperCase() + '" ';
                        strHTML += 'src="skins/' + _shopid + '/cartdock/collapsed.png" style="position:relative;top:2px;" />';
                        strHTML += '<span>' + item.CartGrouping.toUpperCase() + ' (' + item.CartGroupAantal + ')</span>';
                        strHTML += '</td></tr>';
                    }
                }

                strHTML += '<tr grouping="' + item.CartGrouping + '" class="'
                if (result.ReqArtikelCode == item.ArtikelCode) {
                    strHTML += 'trCartRowCurrent';
                } else {
                    if (intIndex % 2 == 1) {
                        strHTML += 'trCartRowAlternate';
                    } else {
                        strHTML += 'trCartRow';
                    }
                }
                if (_blnUseCartGrouping == 'true') {
                    strHTML += '" style="display:none;">';
                } else {
                    strHTML += '" >';
                }

                strHTML += '<td style="text-align:right;padding-right:4px;font-weight:bold;border-right:1px solid #e0e0e0;width:25px;">'
                strHTML += '<input type="text" maxlength="6" ';
                strHTML += 'onfocus="return CartAantal_enter(this,event,' + item.MinBestelEenheid + ');" ';
                strHTML += 'onblur="return CartAantal_blur_wrapper(this,event,' + item.MinBestelEenheid + ');" ';
                strHTML += 'onkeypress="return CartAantal_keypress(this,event,' + item.MinBestelEenheid + ');" ';
                strHTML += 'style="font-size:7pt;width:20px;border:1px solid #808080;text-align:right;" value="';
                strHTML += item.Aantal.toString() + '" ';
                strHTML += 'artcode="' + CWEncode(item.ArtikelCode) + '" />';
                strHTML += '</td>';

                strHTML += '<td style="width:165px;"><div style="width:165px;overflow:hidden;height:20px;"><a style="text-decoration:none;color:black;" href="/' + res + '/a?action=detail&artcode=';
                strHTML += CWEncode(item.ArtikelCode);
                strHTML += '">';
                strHTML += strDescription;
                strHTML += '</div></td>';

                strHTML += '<td style="color:#808080;cursor:pointer;border-left:1px solid #e0e0e0;padding-left:2px;padding-right:2px;" ';
                strHTML += "onclick=\"removefromcart('";
                strHTML += CWEncode(item.ArtikelCode);
                strHTML += "','')\">x</td></a>";
                strHTML += '</td>';

                strHTML += '</tr>';

                strPreviousGroup = item.ArtikelGroep;
            });
        }
        

        if (intIndex == 0) {
            $get("divAfronden").style.display = "none";
        } else {
            $get("divAfronden").style.display = "block";
        }

        if (intIndex != 0) {
            $get('divCartTotal').innerHTML = '<table id="tblCart" cellspacing="0" cellpadding="0" style="border-collapse:collapse;">' + strHTML + '</table>';
        } else {
            $get('divCartTotal').innerHTML = '';
        }
    });
}


function toggleCartDockrowExpansion(obj, evt, cartgroup) {
    var tbl = $get('tblCart');
    var blnExpand;
    
    if (obj.attributes['isexpanded'].value=='0') {
        $get('imgCartGrouping_' + cartgroup).src='skins/' + _shopid + '/cartdock/expanded.png';
        obj.attributes['isexpanded'].value='1';
        blnExpand=true;
    } else {
        $get('imgCartGrouping_' + cartgroup).src='skins/' + _shopid + '/cartdock/collapsed.png';
        obj.attributes['isexpanded'].value='0';
        blnExpand=false;
    }
    
    for (rowindex=0;rowindex<tbl.rows.length;rowindex++) {
        var r = tbl.rows[rowindex];
        if (r.attributes.grouping) {
            if (r.attributes['grouping'].value.toUpperCase()==cartgroup) {
                if (blnExpand) {
                    r.style.display='block';
                } else {
                    r.style.display='none';
                }
            }
        }
    }
}

var _strCartAantalPrevious;

function CartAantal_enter(inputbox,evt,minbesteleenheid) {
    inputbox.style.backgroundColor="#ffff00";
    _strCartAantalPrevious = inputbox.value;
    return false;
}

function CartAantal_blur_wrapper(inputbox, evt, minbesteleenheid) {
    var aantal = inputbox.value;

    // stock check
    ShopWebService.StockCheck(sid, CWDecode(inputbox.attributes['artcode'].value), aantal, true, function(result) {
        switch (result) {
            case 'OK':
                //we got stock
                CartAantal_blur(inputbox, evt, minbesteleenheid);
                break;
            case 'NO_STOCK':
                show_nostock_msg();
                inputbox.value = _strCartAantalPrevious;
                inputbox.style.backgroundColor = "white";
                return false;
                break;
            default:
                show_nostock_msg();
                inputbox.value = _strCartAantalPrevious;
                inputbox.style.backgroundColor = "white";
                return false;
                break;
        }
    }, generic_callbackerror);
}

function CartAantal_blur(inputbox,evt,minbesteleenheid) {
    _currentCartAdd_method='changeaantalindockingpanel';
    _currentCartAddInputbox=inputbox;
    _currentCartAdd_minbesteleenheid=minbesteleenheid;
    if (checkCartAantal(inputbox.value,minbesteleenheid)) {
        inputbox.style.backgroundColor="white";
        // LET OP: TC-specifiek
	    if (CWDecode(inputbox.attributes['artcode'].value)=='9999901') {
		    inputbox.value='1';
	    }
        CartAantal_updateaantal(inputbox, evt, inputbox.attributes['artcode'].value);
        return true;
    } else {
        inputbox.value=_strCartAantalPrevious;
        inputbox.style.backgroundColor="white";
        return false;
    }
}

function CartAantal_keypress(inputbox,evt,minbesteleenheid) {
    if (evt.keyCode == 13) {
        stopevent(evt);
        CartAantal_blur_wrapper(inputbox,evt,minbesteleenheid);
    }
}

function CartAantal_updateaantal(inputbox,evt,artikelcode_encoded) {
    var Aantal;

    Aantal = inputbox.value;
    ShopWebService.UpdateAantalByArtikelcode(sid,CWDecode(artikelcode_encoded),Aantal,CartAantal_updateaantal_callback, generic_callbackerror);
    return false;
}

function CartAantal_updateaantalfrominvalidqty(artikelcode_encoded, aantal) {
    _currentCartAddInputbox.value=aantal;
    CartAantal_blur_wrapper(_currentCartAddInputbox,window.event,_currentCartAdd_minbesteleenheid);
    return false;
}

function CartAantal_updateaantal_callback(result) {
    refreshCartContents(null);
}

function highlightcard(tr) {
    return false;
}

//function changeCartQty_wrapper(txtbox, artikelcode) {
//    var aantal = txtbox.value;

//    // stock check
//    ShopWebService.StockCheck(sid, artikelcode, aantal, true, function(result) {
//        switch (result) {
//            case 'OK':
//                //we got stock
//                changeCartQty(txtbox, artikelcode);
//                break;
//            case 'NO_STOCK':
//                show_nostock_msg();
//                txtbox.value = _strCartAantalPrevious;
//                txtbox.style.backgroundColor = "white";
//                return false;
//                break;
//            default:
//                show_nostock_msg();
//                txtbox.value = _strCartAantalPrevious;
//                txtbox.style.backgroundColor = "white";
//                return false;
//                break;
//        }
//    }, generic_callbackerror);
//}

//function changeCartQty(txtbox,artikelcode) {
//    $get('btnMakeOrder').disabled=true;
//    
//    ShopWebService.UpdateCartQty(sid,artikelcode,txtbox.value,cart_callback, generic_callbackerror);
//}

//function changeCartPrice(txtbox,artikelcode) {
//    $get('btnMakeOrder').disabled=true;
//    
//    ShopWebService.UpdateCartPrice(sid,artikelcode,txtbox.value,cart_callback, generic_callbackerror);
//}

function recalculateCart() {
    window.location.reload();
}

function makeOrder_callback(result) {
    $get('divCartContents').style.display='none';
    $get('divThankYou').style.display='block';
}

function getKeyCode(e) {
    var keynum;
    var keychar;
    var numcheck;
    var mycode;
    
    if (window.event) // IE
        {
        keynum = e.keyCode
        }
        else if(e.which) // Netscape/Firefox/Opera
        {
        keynum = e.which
        }
    
    switch(keynum) {
        case 13:
            mycode='enter';
            break;
        case 40:
            mycode='down';
            break;
        case 37:
            mycode='left';
            break;
        case 39:
            mycode='right';
            break;
        case 38:
            mycode='up';
            break;
        case 9:
            mycode='tab';
            break;
        case 27:
            mycode='esc';
            break;
        case 8:
            mycode='backspace';
            break;
        case 46:
            mycode='del';
            break;
        case 35:
            mycode='end';
            break;
        case 36:
            mycode='home';
            break;
        case 190:
            mycode='.';
            break

        //numpad
        case 96:
            mycode='0';
            break;
        case 97:
            mycode='1';
            break;
        case 98:
            mycode='2';
            break;
        case 99:
            mycode='3';
            break;
        case 100:
            mycode='4';
            break;
        case 101:
            mycode='5';
            break;
        case 102:
            mycode='6';
            break;
        case 103:
            mycode='7';
            break;
        case 104:
            mycode='8';
            break;
        case 105:
            mycode='9';
            break;
        case 110:
            mycode='.';
            break;
        default:
            mycode=String.fromCharCode(keynum);
            break;
    }
    return mycode;
}

function expandUpload(artcode_encoded) {
    $get('tblProductCard_' + artcode_encoded).style.height = "209px";
    $get('divUpload_' + artcode_encoded).style.display = 'block';
}

function toggleSearchMore() {
}

function changeSorting() {
    var strSorting;
    strSorting = $get("cboSorting").value;
    ShopWebService.ChangeSorting(sid,strSorting,changeSorting_callback, generic_callbackerror);
}

function changeSorting_callback(result) {
    window.location.reload();
}

function changeAantalPerPagina() {
    var intAantal;
    
    intAantal=$get("cboAantalPerPagina").value;
    ShopWebService.ChangeAantalPerPagina(sid,intAantal,changeAantalPerPagina_callback, generic_callbackerror);
}

function changeAantalPerPagina_callback(result) {
    window.location.reload();
}

function flashTR(tr) {
    tr.style.backgroundColor='#ffffd0';
    //
}

function flashTR_execute(tr) {
    //
}

function changeLanguage(languageCode, activeTreeTab) {
    if (activeTreeTab == null || window.location.href.indexOf('astab') == -1 ) {
        window.location.href = CARTwise.changeQS(window.location.href, 'lng', languageCode);
    } else {
        window.location.href = CARTwise.changeQS(CARTwise.changeQS(window.location.href, 'lng', languageCode), 'astab', activeTreeTab);
    }
    return false;
}

function CheckAnnouncements() {
    // automatische meldingen
    if (_blnShowAnnouncement) {
        ShowAnnouncementAndResetFlags();
    }
    
    // handmatige meldingen (bijv. orders zijn samengevoegd)
    if (_blnIsManualAnnouncement) {
        $get('divAnnouncement_Subject').innerHTML=_strManualAnnouncementSubject;
        $get('divAnnouncement_Message').innerHTML=_strManualAnnouncementMessage;
        ShowAnnouncementAndResetFlags();
    }
}

function ShowAnnouncementAndResetFlags() {
    ShopWebService.ResetAnnouncementFlags(sid, ResetAnnouncementFlags_callback, generic_callbackerror);
}

function ResetAnnouncementFlags_callback(result) {
    $("#divModals").show();
    $find('ModalBehaviourAnnouncement').show();
}

// Multi-language
function _ML(TranslationID, param0, param1, param2, param3, param4, param5, param6, param7, param8, param9) {
    var strText = _MLT[lang.toLowerCase() + '.' + TranslationID.toLowerCase()];

    if (param0!=undefined) {strText = strText.replace("{0}",param0);}
    if (param1!=undefined) {strText = strText.replace("{1}",param1);}
    if (param2!=undefined) {strText = strText.replace("{2}",param2);}
    if (param3!=undefined) {strText = strText.replace("{3}",param3);}
    if (param4!=undefined) {strText = strText.replace("{4}",param4);}
    if (param5!=undefined) {strText = strText.replace("{5}",param5);}
    if (param6!=undefined) {strText = strText.replace("{6}",param6);}
    if (param7!=undefined) {strText = strText.replace("{7}",param7);}
    if (param8!=undefined) {strText = strText.replace("{8}",param8);}
    if (param9!=undefined) {strText = strText.replace("{9}",param9);}
    
    if (strText == null) {
        return "[!" + TranslationID + " not found!]";
    }
    //ShopWebService.RecordTranslationHit(sid,TranslationID.toLowerCase(),function() {return true;}, generic_callbackerror);
     
    return strText;
}

function validateEmail(text) {
    var filter=/^.+@.+\..{2,4}$/;

    if (filter.test(text))
        return true;
    else {
        return false;
    }
}

function isMouseLeaveOrEnter(e, handler)
{		
	if (e.type != 'mouseout' && e.type != 'mouseover') return false;
	var reltg = e.relatedTarget ? e.relatedTarget :
	e.type == 'mouseout' ? e.toElement : e.fromElement;
	while (reltg && reltg != handler) reltg = reltg.parentNode;
	return (reltg != handler);
}

function basebutton_hover(div, evt) {
    div.style.backgroundColor='#505050';
    div.style.color='white';
}

function basebutton_leave(div, evt) {
    div.style.backgroundColor='#c0c0c0';
    div.style.color='#404040';
}

function abortAjaxCall(request) {
    if (request != null)
    {
        var executor = request.get_executor();

        if (executor.get_started())
        {
            executor.abort();
        }
    }
}


function fadeShow() {
    $get('divFade').style.zIndex = '4000';
    
    //IE
    if (document.body.clientHeight) {
        if (document.body.clientHeight < 1200) {
            $get('divFade').style.height='1200px';
        } else {
            $get('divFade').style.height=document.body.clientHeight.toString() + 'px';
        }
    }
    //FF
    if (document.height) {
        if (document.height < 1200) {
            $get('divFade').style.height='1200px';
        } else {
            $get('divFade').style.height=document.height.toString() + 'px';
        }
    }

    $get('divFade').style.display='block';
}

function fadeHide() {
    $get('divFade').style.zIndex = '4000';
    $get('divFade').style.display='none';
}

function addwholecategorytocart(obj, evt, aspath) {
    $get('divSnelBestellenBiri').innerHTML='Bezig met toevoegen van artikelen aan de winkelwagen..';
    ShopWebService.AddWholeCategoryToCart(sid, aspath, AddWholeCategoryToCart_callback, generic_callbackerror);
}

function AddWholeCategoryToCart_callback(result) {
    window.location.reload();
}

function navigateTo(url) {
    window.location.href=url;
}

/* ====== SPECS / FILTERS ======== */
var _filterState = null;

function getFilterState() {
    ShopWebService.GetFilterState(sid,
        function(result) {
            _filterState = result;

            createFilterPaneSliders();
        }, generic_callbackerror
    );
}

function createFilterPaneSliders() {
    $(".slidercontainer").each(
        function() {
            $(this).slider({
                range: true,
                min: parseInt($(this).attr("minvalue")),
                max: parseInt($(this).attr("maxvalue")),
                values: [parseInt($(this).attr("minvalue")), parseInt($(this).attr("maxvalue"))],
                slide: function(event, ui) {
                    var unit = $("[id='valuelabel-" + $(this).attr("specsyscode") + "']").attr("unit");
                    $("[id='valuelabel-" + $(this).attr("specsyscode") + "']").html(ui.values[0] + " " + unit + " - " + ui.values[1] + ' ' + unit);
                },
                stop: function(event, ui) {
                    var vlbl = $("[id='valuelabel-" + $(this).attr("specsyscode") + "']");

                    var unit = vlbl.attr("unit");
                    vlbl.html(ui.values[0] + " " + unit + " - " + ui.values[1] + ' ' + unit);
                    $(this).attr("selminvalue", ui.values[0]);
                    $(this).attr("selmaxvalue", ui.values[1]);

                    updateFilterState(this, $(this).attr("specsyscode"), $(this).attr("selminvalue") + ':' + $(this).attr("selmaxvalue"), false);
                }
            });
            var unit = $("[id='valuelabel-" + $(this).attr("specsyscode") + "']").attr("unit");
            $("[id='valuelabel-" + $(this).attr("specsyscode") + "']").html(parseInt($(this).attr("minvalue")) + ' ' + unit + " - " + parseInt($(this).attr("maxvalue")) + ' ' + unit);
        }
    );
}

function clearPartialFilterState(spec) {

    var blnHasValues = true;

    while (blnHasValues) {
        blnHasValues = false;
        for (si = 0; si < _filterState.Items.length; si++) {
            if (_filterState.Items[si].SysCode == spec) {
                _filterState.Items.splice(si, 1);
                blnHasValues = true;
                break;
            }
        }
    }

    // Update server-side filterstate
    ShopWebService.UpdateFilterState(_filterState,
        function() {
            applyFilters();
        }, generic_callbackerror
    );
}


function updateFilterState(obj, spec, value, forcerefresh) {

    // Find the spec in the filterstate items array
    var currentItem = null;
    var currentIndex = null;
    
    for (si = 0; si < _filterState.Items.length; si++) {
        var theItem; 
        theItem = _filterState.Items[si];
        if (theItem.SysCode == spec && (theItem.Value == value || $(obj).hasClass('filterselect') || $(obj).hasClass('slidercontainer'))) {
            currentItem = theItem;
            currentIndex = si;
            break;
        }
    }

    // Filterstate bijwerken
    if (currentItem != null && ($(obj).hasClass('filterselect') || $(obj).hasClass('slidercontainer'))) {
        _filterState.Items.splice(currentIndex, 1);
        currentItem = null;
    }

    if (currentItem == null) {
        _filterState.Items.push({ SysCode: spec, Value: value })
    } else {
        _filterState.Items.splice(currentIndex, 1)
    }

    // Update server-side filterstate
    ShopWebService.UpdateFilterState(_filterState,
        function() {
            if (forcerefresh) {
                applyFilters();
            }
        }, generic_callbackerror
    );
}

function killFilters() {
    ShopWebService.ResetAllFilters(
        function() {
            window.location.href = CARTwise.removeQS(window.location.href, 'f');
        }, generic_callbackerror
    );
}

function applyFilters() {
    window.location.href = CARTwise.setQS('f', '1');
}

function CompletePaymentMethod_callback(result) {
    window.parent.location.href = 'cart.aspx?cartwizardstep=voltooid';
}

/* URL and HTML encoding related */

function CWEscape(i) {
    // escapes /, 'and " 
    var s = i;
    s = s.replace(/\\/gi, "\\\\");
    s = s.replace(/\'/gi, "\\'");
    s = s.replace(/\"/gi, '\\"');
    return s;
}

function CWUnEscape(i) {
    // escapes /, 'and " 
    var s = i;
    s = s.replace(/\\\\/gi, "\\");
    s = s.replace(/\\'/gi, "'");
    s = s.replace(/\\"/gi, '"');
    return s;
}

function CWEncode(i) {
    var s = i;
    s = encodeURIComponent(s);
    s = s.replace(/\'/gi, "\%27");
    return s;
}

function CWDecode(i) {
    var s = i;
    s = decodeURIComponent(s);
    //s = s.replace(/\\%27/gi, "\'");
    return s;
}

function CWHtmlEncode(i) {
    Encoder.EncodeType = "entity";
    return Encoder.htmlEncode(i);
}

/* End URL and HTML encoding related */

