﻿
// Ajax auth setup.

$.fn.loadProductSetOnDemand = function(options){
    var element = this,
        settings = { 
            setId: 0,
            startPage: 1,
            rpp: 0,
            vsQuery: '',
            element: ''
        };

    if (!element.length) {
        return false;
    }

    if (options) {
        $.extend(settings, options);
    }

    var model = {
        retData: ko.observableArray(),
        products: ko.observable(0),
        compeleteProducts:ko.observable(0),
        total: ko.observable(),
        setId: settings.setId,
        pageIndex: ko.observable(1),
        pageSize: ko.observable(1),
        pageCount: ko.observable(1),
        pages: ko.observableArray([]),
        productFrom: ko.observable(),
        productTo: ko.observable(),
        nextPage: function () {
            if (this.pageIndex() >= this.pageCount()) {
                return false;
            }
            this.pageIndex(this.pageIndex() + 1);
            loadCurrentPage('NXTPSL');
            return false;
        },
        previousPage: function () {
            if (this.pageIndex() <= 1) {
                return false;
            }
            this.pageIndex(this.pageIndex() - 1);
            loadCurrentPage('PRVPSL');

            return false;
        },
        gotoPage: function (page) {
            this.pageIndex(page.pageNumber());
        },
        ImageSource: function (mdl) {
            var ret = '/images/toolbar_icon.png',
                vsUrl = Module.ProductSetAutoUpdate.Scene7BaseAndRender;
                imgUrl = mdl.ImageUrl;
            if (imgUrl) { 
                if (mdl.HasVirtualSample && settings.vsQuery != 'stock') {
                    var src = vsUrl + imgUrl.replace(/\media\//g, '') + settings.vsQuery;
                    recordVSImpressionStats(src, mdl.Id);
                } else {
                    var src = Module.ProductSetAutoUpdate.URL.api + '/v1/' + imgUrl;// + (settings.vsQuery !== null ? '&' : '?') + 'size=small';
                }
                ret = src;
            }
            return ret;
        }
    }

    var vsSetup = function () {
        var vsCookie = getCookie('VSCookie'),
            vsText = getCookie('VSTxt'),
            vsBlankProd = getCookie('VS_Blank_Product'),
            useTextPref = Module.ProductSetAutoUpdate.UseText,
            useStockImage = Module.ProductSetAutoUpdate.UseStockImage;

        /* text */
        var vsTextObj = vsText.replace('TextURL=?', '').replace(/\?/g, '&').replace(/\$/g, '').replace(/is{/g, '').replace(/ugc{/g, '').replace(/}/g, '').replace(/ASI\//g, '');
        vsTextObj = queryStringToJSON('?' + vsTextObj);
        /* logo */
        var vsCookieObj = vsCookie.replace('LogoURL=?', '').replace(/\?/g, '&').replace(/\$/g, '').replace(/is{/g, '').replace(/ugc{/g, '').replace(/}/g, '').replace(/ASI\//g, '');
        vsCookieObj = queryStringToJSON('?' + vsCookieObj);
        /* blank */
        vsBlankProdObj = queryStringToJSON('?' + vsBlankProd);

        vsCookie = vsCookie.replace('LogoURL=', '');
        vsText = vsText.replace('TextURL=', '');

        if (typeof vsCookieObj.logoid === 'undefined' && typeof vsTextObj.text === 'undefined' && typeof vsBlankProdObj.useblankprod === 'undefined') {
            /* use preference settings set up by distributor */
            if (useStockImage === 'False') {
                if (useTextPref === 'True') {
                    var textSeg = Module.ProductSetAutoUpdate.TextSegmentFromPref;
                    var newTextUrl = textSeg.replace('&amp;', '&');
                    settings.vsQuery = Module.ProductSetAutoUpdate.BaseTextSeg + newTextUrl + Module.ProductSetAutoUpdate.EndTextSeg;
                }
                else {
                    var logo = Module.ProductSetAutoUpdate.DefaultLogoFromPref;
                    var logoUrl = Module.ProductSetAutoUpdate.DefaultLogoUrl;
                    settings.vsQuery = logoUrl.replace('logo', logo);
                }
            }
            else {
                settings.vsQuery = 'stock';
            }
        }
        else {
            /* user has made a change - these changes override distributor settings in pref */
            if (vsBlankProdObj.useblankprod !== '0') {
                settings.vsQuery = '';
            } else if (vsCookieObj.logoid !== '0') {
                settings.vsQuery = vsCookie;
            } else if (vsTextObj.text) {
                settings.vsQuery = vsText;
            } else {
                settings.vsQuery = 'stock';
            }
        }
    }

    var queryStringToJSON = function (url) {
        if (url === '')
            return '';
        var pairs = (url || location.search).slice(1).split('&');
        var result = {};
        for (var idx = 0; idx < pairs.length; idx++) {
          var pair = pairs[idx].split('=');
          if (!!pair[0])
            result[pair[0].toLowerCase()] = decodeURIComponent(pair[1] || '');
        }
        return result;
    }
    var shuffle = function (array) {
        var currentIndex = array.length, temp, randomIndex;
        while (0 !== currentIndex) {
            randomIndex = Math.floor(Math.random() * currentIndex);
            currentIndex -= 1;
            temp = array[currentIndex];
            array[currentIndex] = array[randomIndex];
            array[randomIndex] = temp;
        }
        return array;
    }
    var loadCurrentPage = function (action)
    {
        var productFrom = model.pageIndex() * settings.rpp - settings.rpp + 1,
                       productTo = model.pageIndex() * settings.rpp,
                       productIds = [];
        model.products(model.compeleteProducts().slice(productFrom - 1, productTo));
        totalResult = model.compeleteProducts().length;
        if (totalResult < productTo) {
            productTo = totalResult;
        }
        $.each(model.products(), function (idx, obj) {
            productIds.push(obj.Id);
        });
        /* STATS CAPTURE */
        recordProductSetObjectStats(totalResult, settings.setId);
        recordProductSetInboundStats();
        recordProductsViewedPerPageStats(productIds, settings.setId);
        if (action) {
            recordProductSetAutoAction(action);
        }
        /* END STATS CAPTURE */
        //model.products(data.Results);
        model.total(totalResult);
        //model.pageIndex(data.Page);
        model.pageCount(Math.ceil(totalResult / settings.rpp));
        model.productFrom(totalResult ? productFrom : 0);
        model.productTo(totalResult ? productTo : 0);
    }
    var loadService = function (page) {
      var requestUrl = Module.ProductSetAutoUpdate.URL.api + '/v1/products/{0}/{1}.json?q={2}&rpp={3}&sort={4}&dl={5}&include_detail={6}&callback=?'; //0=type,1=id,2=query,3=page,4=results_per_page,5=sort,6=dl,7=include_detail
        $.ajax({
            type: 'GET',
            dataType: 'json',
            url: String.format(requestUrl, 'collection', settings.setId, '', 113, 'RNDM', '', false),
            cache: false,
            success: function (data) {
                data = data.d ? data.d : data;
                if (data && data.Results.length>0) {
                    model.pageIndex(1);
                    model.compeleteProducts(shuffle(data.Results));
                    loadCurrentPage();
                } else {
                    element.parents('.ProductSetAutoUpdate').hide();
                }
            }
        });
    }
    if (settings.setId && settings.setId != 0 && element) {
        vsSetup();
        ko.applyBindings(model, $(element)[0]);
        loadService(settings.startPage);
        element.find('.prodImg img').lazyload({ effect: 'fadeIn', failimage: failImg }).trigger("appear");
    } else {
        element.parents('.ProductSetAutoUpdate').hide();
    }
}

function recordProductSetObjectStats(total, setId) {    
    if (setId && Module.ProductSetAutoUpdate.BusinessLevel_CD) {
        asi.StatBuffer.getInstance().addRecord(asi.app.getModule('PRDATU').getStatRecord({ "schemaCode": "OPST11", "immediate": false, "productset_id": setId, "businesslevel_cd": Module.ProductSetAutoUpdate.BusinessLevel_CD, "product_cnt": total }));
    }
}

function recordProductSetInboundStats () {
    asi.StatBuffer.getInstance().addRecord(asi.app.getModule('PRDATU').getStatRecord({ "schemaCode": "ICNN11", "immediate": false, "inboundcall_cd": "UNKNOW" }));
}

function recordProductsViewedPerPageStats(productIds, setId) {
    if (setId && productIds.length > 0) {
        asi.StatBuffer.getInstance().addRecord(asi.app.getModule('PRDATU').getStatRecord({ "schemaCode": "OPRD19", "immediate": false, "product_ids": productIds.toString(), "productset_id": setId, "hits_cnt": productIds.length, "adaction_cd": "POTD" }));
    }
}

function recordProductSetAutoAction (actionCD) {
    asi.StatBuffer.getInstance().addRecord(asi.app.getModule('PRDATU').getStatRecord({ "schemaCode": "ACNN11", "immediate": false, "appaction_cd": actionCD }));
}

function onProductDetail(productId, setId, isVSOpen) {
    asi.StatBuffer.getInstance().addRecord(asi.app.getModule('PRDATU').getStatRecord({ "schemaCode": "OPRD19", "immediate": false, "product_ids": productId.toString(), "productset_id": setId, "hits_cnt": 1, "adaction_cd": "POCT" }));
    var url = Module.ProductSetAutoUpdate.URL.ProductDetailsBasic + '&productID=' + productId + '&tab=ProductSet&autoLaunchVS=' + isVSOpen + '&ProdSetIds=' + setId;
    post_to_url(url, {}, '_self');
}

function recordVSImpressionStats (imageUrl, prodId) {
    var defaultLogoIsSet = Module.ProductSetAutoUpdate.DefaultLogoIsSet == 'True' ? true : false;
    var textUsed = imageUrl.toUpperCase().indexOf("TEXT500") >= 0 ? true : false;
    var collectStat = !textUsed && defaultLogoIsSet ? false : true;
    var useBlank = Module.ProductSetAutoUpdate.UseBlank == 'True' ? true : false;
    if (collectStat) {
        if (prodId) {
            asi.StatBuffer.getInstance().addRecord(asi.app.getModule('PRDATU').getStatRecord({ "schemaCode": "ACVS11", "immediate": false, "product_id": prodId, "isvstextused": (textUsed ? "1" : "0"), "isvsblankused": (useBlank ? "1" : "0"), "appaction_cd": "VSIPST" }));
        }
    }
}

function LoadStockImage(stockImageURL) {
    $('.prodImg img').attr('src', stockImageURL);
}

function imgError(img) {
    img.onerror = "";
    var orig = $(img).attr('data-original');
    img.src = orig;
}

//  var CC = Module.ProductSetAutoUpdate.WrapperId;