var
    DEFAULT_PRODUCTS = [
        '0000000040',
        '0000010874',
        '0000000594',
        '0000010922',
        '0000010602',
        '0000010736',
        '0000010116',
        '0000000669',
        '0000000539',
        '0000000680'
    ],
    page = (page === 0)
        ? 0
        : page || 5,
    ppzData = {
        Page: page,
        item_id: (typeof item_id !== 'undefined') ? item_id : (typeof groupCode !== 'undefined') ? groupCode : '9999999999'
    };

if (!Array.prototype.filter) {
    Array.prototype.filter = function (fun/*, thisArg*/) {
        'use strict';

        if (this === void 0 || this === null) {
            throw new TypeError();
        }

        var t = Object(this);
        var len = t.length >>> 0;
        if (typeof fun !== 'function') {
            throw new TypeError();
        }

        var res = [];
        var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
        for (var i = 0; i < len; i++) {
            if (i in t) {
                var val = t[i];
                if (fun.call(thisArg, val, i, t)) {
                    res.push(val);
                }
            }
        }

        return res;
    };
}

var ketatori = function (num) {
    if (num) {
        if (isNaN(num)) {
            return num;
        } else {
            var temp = num.toString().split('.');
            temp[0] = temp[0].toString().replace(/([0-9]+?)(?=(?:[0-9]{3})+$)/g, '$1,')
            return temp.join('.');
        }
    } else {
        return num;
    }
};
var jQueryCheck = function () {
    setTimeout(function () {
        if (typeof jQuery === 'undefined') jQueryCheck();
        else recommendInitialize(jQuery, ppzData);
    }, 1000);
};
var makeRecommend = function (json) {
    console.log('makeRecommend');
    var ID = json.ID,
        NAME = json.Name,
        TEXT = json.Text,
        RecommendClass = json.RecommendClass;
    ppzData.ID = ID;
    ppzData.rid = ID;
    ppzData.title = NAME;
    ppzData.text = TEXT;
    ppzData.RecommendClass = RecommendClass;

    if (typeof sn !== 'undefined'
        && typeof sn.Method !== 'undefined'
        && typeof sn.Method.setBasicdata !== 'undefined') {
        sn.Method.setBasicdata(ppzData);
    }

    setRecommend(ppzData);
};
var recommendInitialize = function ($, ppzData) {
    console.log('recommendInitialize');
    var jqxhr = $
        .ajax({
            url: '/sc/js_sn/api/api-recommend_rate.ashx',
            type: 'GET',
            dataType: 'JSONP'
        })
        .done(function (json) {
            console.log(json);
            recommend($, ppzData, json.rate);
        })
        .fail(function () {
            console.log('error');
        })
        ;
};
var recommend = function ($, ppzData, RATEs) {
    console.log('recommend');
    var
        page = (typeof ppzData.Page === 'undefined')
            ? 5
            : ppzData.Page,
        option = {
            page: page,
            pageClass: 'B'//固定化
        },
        jqxhr,
        CATEGORY = 'recommend',
        RATE = RATEs[ppzData.Page],
        ACTION,
        View = 'View',
        ID,
        BitFlg,
        $api_set_kamo = $("script[src*='api_set_kamo']")
        ;

    jqxhr = $
        .ajax({
            url: '/sc/js_sn/random_recommend.ashx',
            data: option,
            type: 'GET',
            dataType: 'jsonp'
        })
        .done(function (json) {
            ID = json.ID;
            BitFlg = json.BIT;
            switch (ID) {
                case 24:
                    ID = (BitFlg) ? 62 : 63;
                    break;
                case 25:
                    ID = (BitFlg) ? 64 : 65;
                    break;
                case 26:
                    ID = (BitFlg) ? 66 : 67;
                    break;
                case 27:
                    ID = (BitFlg) ? 68 : 69;
                    break;
                default:
                    break;
            }

            ACTION = 'Page=' + page + '&ID=' + ID;
            if (100 > json.CODE && RATE > json.Rate && ID > 0) {
                $(function () {
                    if ($api_set_kamo.length > 0 && typeof $api_set_kamo.attr('src').split('GroupCode=')[1] !== 'undefined') ppzData.item_id = $api_set_kamo.attr('src').split('GroupCode=')[1];
                    makeRecommend(json);
                });
            } else View = 'not View';
            //ga('send', '_trackEvent', CATEGORY, ACTION, View, RATE);		Hit数節約のため
            console.log("Recommend Data Check: " + ACTION + "&RATE=" + RATE + "&BitFlg=" + BitFlg);
        })
        .fail(function () {
            console.log('error');
        });
};

var setAB_CSS = function (bit) {
    console.log('setAB_CSS');
    var css = document.createElement('link'),
        head = document.getElementsByTagName('head')
        ;
    with (css) {
        href = '/sc/rt/cart/recommend-TYPE-' + ((bit) ? 'A' : 'B');
        type = 'text/css';
        rel = 'stylesheet';
    }
    head.item(0).appendChild(css);
};

var recommendCB = recommendCB || function (input) {
    console.log('recommendCB');
    if (typeof jQuery === 'undefined') return;
    var $ = jQuery;
    $('#recommend').html('<p id="tt"><strong>' + ppzData.title + '</strong> ' + ppzData.text + '</p><div id="recommendOutBox"><div id="back"></div><div id="next"></div><div id="recommendBox"></div></div>');
    var count = 0;
    for (var index in input) {
        var item = input[index];
        count++;
        if (count > 20) break;
        $('#recommendBox').append((function () {
            var gpCode = index;
            var $template = template
                .replace(/@@pkimg@@/ig, item.Image)
                .replace(/@@name@@/ig, item.GroupName)
                .replace(/@@price@@/ig, ketatori(item.SalesPrice))
                .replace(/@@url@@/ig, ketatori(item.Url))
                .replace(/@@comid@@/ig, item.CommodityId)
                .replace(/@@close@@/ig, !item.IsOpen)
                .replace(/@@gpCode@@/ig, item.GroupCode)
                ;
            return $template;
        })());
        $('#item_' + item.comid).fadeIn(750);
    }

    var move = function (element, back, next, canvasWidth, moveDistance) {
        var element = element;
        var back = back;
        var next = next;
        var left = 0;
        var canvasWidth = canvasWidth;
        var moveDistance = moveDistance;
        return function (distance) {
            left += moveDistance * distance;
            if (left < 0) {
                back.css({ display: 'block' });
            } else {
                back.css({ display: 'none' });
            }
            if (element.width() + left <= canvasWidth) {
                next.css({ display: 'none' });
            } else {
                next.css({ display: 'block' });
            }
            element.css({ 'left': left });
        };
    };

    var getURL = function (gpCode) {
        var jqxhr = $.ajax({
            url: '/sc/js_sn/api/get_recommend_data.ashx',
            type: 'get',
            data: { 'groupcode': gpCode, mycan: 1 },
            dataType: "jsonp"
        })
            .done(function (data) {
                if (typeof data[0] !== 'undefined' && data[0].Url) ppz._click(data[0].Url, gpCode);
            });
    };

    $recommend = $('#recommend');
    $recommendBox = $('#recommendBox');
    var $back = $('#recommend #back');
    var $next = $('#recommend #next');

    if (count) {
        var width = count * 160;

        $recommendBox.css({ width: width });
        $recommend.css({ display: 'block' });
        var canvasWidth = $recommend.parent().width();
        var moveDistance = Math.floor(canvasWidth / 160) * 160;
        var moveRecommendBox = move($recommendBox, $back, $next, canvasWidth, moveDistance);

        var tgl = true;
        var $Box_hover = $('.Box_hover');
        $('.Box_hover').click(function () {
            var $this = $(this);
            var url = $(this).attr('data-url');
            var gpCode = $(this).attr('data-gpCode');
            if (tgl) {
                ga('send', '_trackEvent', 'CP', 'CP_製品詳細_' + gpCode, location.href);

                getURL(gpCode);
                /*
                ppz._click(url, gpCode);
                */
            }
        });
        $('.btn_box .cart')
            .hover(function () { tgl = false; }, function () { tgl = true; })
            .click(function () {
                var $this = $(this);
                var comid = $(this).attr('data-comid');
                var gpCode = $(this).attr('data-gpCode');
                ga('send', '_trackEvent', 'CP', 'CP_カート_' + gpCode, location.href);
                ppz._click('https://www.sourcenext.com/eshop/action/es_cartadd?com_id=' + comid, gpCode);
            });
        $back.click(function () {
            moveRecommendBox(1);
        });
        $next.click(function () {
            moveRecommendBox(-1);
        });
    }

    if ($('#ph_sub #next').length > 0) {
        var position = 0;
        var $boxOffset = $recommendBox.offset();
        var $boxHeight = $recommendBox.height();
        var $baseHeight = $recommend.height();
        var max = -$baseHeight;
        var move = -521;
        var clickTgl = true;

        $back.hide(100);
        if ($recommendBox.height() <= $recommend.height()) {
            $next.hide();
        } else {
            $next.click(function () {
                if (position + move <= 0) {
                    position = position + move;
                    $recommendBox.animate({ top: position + 'px' });
                }
                showBtn();
            });
            $back.click(function () {
                $('.loadImg').each(function () {
                    $this = $(this);
                    var src = $this.attr('data-src');
                    var className = $this.attr('class').replace(/loadImg/, '');
                    $this
                        .css({ 'background-image': 'url(' + src + ')' })
                        .attr('class', className);
                });
                if (($boxHeight + position) > move) {
                    position = position - move;
                    $recommendBox.animate({ top: position + 'px' });
                }
                showBtn();
            });
        }
        $recommend.animate({
            height: $('#recommend').prop('scrollHeight')
        })
        function showBtn() {
            if ($boxHeight + position > -move) {
                $next.show(100);
            } else {
                $next.hide(100);
            }
            if (position < 0) {
                $back.show(100);
            } else {
                $back.hide(100);
            }
        }
    } else {
    }
    $recommend
        .css({
            'border-color': '#666',
            'background-image': 'none'
        });
    $('#recommend').css({ display: 'block' });
};
var ppz_draw = function (input) {
    console.log('ppz_draw');
    var $ = jQuery, array = [];
    for (var i = 0; input.item_list.length > i; i++) {
        array.push(input.item_list[i].item_id);
    }

    var ppz_recommend = document.getElementById('recommend');
    Array.prototype.push.apply(array, DEFAULT_PRODUCTS);

    var _array = array.filter(function (x, i, self) {
        return self.indexOf(x) === i;
    });
    var jqxhr = $.ajax({
        url: '/sc/js_sn/api/get_recommend_data.ashx',
        type: 'GET',
        data: { groupcode: _array.join(','), mycan: 1 },
        dataType: 'jsonp'
    })
        .done(function (json) {
            recommendCB(json);
        })
        .fail(function () {
            console.log('error. groupcode is ' + array.join(','));
        });
};

var setRecommend = function (option) {
    console.log('setRecommend');
    ppz = new _PPZ();
    (function ($) {
        ppz.cid = 22014;
        ppz.rid = option.ID;
        ppz.rows = 20;
        ppz.item_id = option.item_id;   //カートに代入されている製品IDを代入
        ppz.cat = '';
        ppz.div_id = 'recommend';
        ppz.cb = 'ppz_draw';
        ppz.alt_html = '';   //タイムアウト発生時の表示

        if (option.item_id) {
            ppz.request();
        }
        else if (option.Page === 0) {
            option.item_id = 0;
            ppz.request();
        }
        else {
            $('#recommend').css({ display: 'none' })
        }
    })(jQuery);
};

if (typeof jQuery === 'undefined') {
    (function () {
        var
            jq = document.createElement('script'),
            s = document.getElementsByTagName('script')[0]
            ;
        jq.src = '/js_sc/jq/jQuery-latest/';
        s.parentNode.insertBefore(jq, s);
    })();
    jQueryCheck();
} else {
    recommendInitialize(jQuery, ppzData);
}
