var RATE = [
    0,
    0,
    0,
    100,
    0,
    0,
    0,
    0,
    0,　
    0,
    0
];

if (typeof page !== 'undefined' && page === 0) {
    var page = 0;
} else {
    var page = page || 5;
}
var 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 DEFAULT_PRODUCTS = [
    '0000000040',
    '0000010874',
    '0000000594',
    '0000010922',
    '0000010602',
    '0000010736',
    '0000010116',
    '0000000669',
    '0000000539',
    '0000000680'
];

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 {
            jQuery.noConflict();
            recommendInitialize(jQuery, ppzData);
        }
    }, 100);
};
var makeRecommend = function (json) {
    var ID = json.ID;
    var NAME = json.Name;
    var TEXT = json.Text;
    var RecommendClass = json.RecommendClass;
    ppzData.ID = ID;
    ppzData.rid = ID;
    ppzData.title = NAME;
    ppzData.text = TEXT;
    ppzData.RecommendClass = RecommendClass;

    setRecommend(ppzData);
};

var recommendInitialize = function ($, ppzData) {
    var page = ppzData.Page;
    if (typeof page === 'undefined') var page = 5;

    var urlQueryParameter = (function (query) {
        var UrlQueryParameter = {};
        var vars = query.split("&");
        for (var i = 0; i < vars.length; i++) {
            var pair = vars[i].split("=");
            UrlQueryParameter[pair[0]] = pair[1];
        }
        return UrlQueryParameter;
    })(window.location.search.substring(1));

    var option = { page: page };
    if (typeof urlQueryParameter.pageClass !== 'undefined') option.pageClass = urlQueryParameter.pageClass;

    /*固定化*/
    option.pageClass = 'B';
    /*固定化*/

    var jqxhr = $.ajax({
        url: "/sc/js_sn/random_recommend.ashx",
        data: option,
        type: "GET",
        dataType: "jsonp"
    })
    .done(function (json) {
        if (typeof urlQueryParameter.type !== 'undefined') json.BIT = (urlQueryParameter.type === 'A') ? true : false;
        setAB_CSS(json.BIT);
        switch (json.ID) {
            case 24:
                json.ID = (json.BIT) ? 62 : 63;
                break;
            case 25:
                json.ID = (json.BIT) ? 64 : 65;
                break;
            case 26:
                json.ID = (json.BIT) ? 66 : 67;
                break;
            case 27:
                json.ID = (json.BIT) ? 68 : 69;
                break;
            default:
                break;
        }

        setMeasurementCSS(json.ID, json.RecommendClass, ppzData.Page);
        if (100 > json.CODE && RATE[ppzData.Page] > json.Rate && json.ID > 0) {
            $(function () {
                var $api_set_kamo = $("script[src*='api_set_kamo']");
                if ($api_set_kamo.size() > 0 && typeof $api_set_kamo.attr('src').split('GroupCode=')[1] !== 'undefined') ppzData.item_id = $api_set_kamo.attr('src').split('GroupCode=')[1];
                makeRecommend(json);
            });
        }
    })
    .fail(function () {
        console.log('error');
    })
};

var setMeasurementCSS = function (ID, RecommendClass, Page) {
    var _css = document.createElement('link');
    with (_css) {
        href = '//www.sourcenext.com/sc/rt/cart/recommend_A/?i=recommend_ID-' + ID + '_class-' + RecommendClass + '_Page-' + (Page + 1);
        type = 'text/css';
        rel = 'stylesheet';
    }
    var head = document.getElementsByTagName('head');
    head.item(0).appendChild(_css);
};
var setAB_CSS = function (bit) {
    var _css = document.createElement('link');
    with (_css) {
        href = '/sc/rt/cart/recommend-TYPE-' + ((bit) ? 'A' : 'B');
        type = 'text/css';
        rel = 'stylesheet';
    }
    var head = document.getElementsByTagName('head');
    head.item(0).appendChild(_css);
};

var recommendCB = function (input) {
    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) {
        console.log(gpCode);
        var jqxhr = $.ajax({
            url: '/sc/js_sn/api/get_recommend_data.aspx',
            type: 'get',
            data: { 'groupcode': gpCode, mycan: 1 },
            dataType: "jsonp"
        })
        .done(function (data) {
            console.log(data[0]);
            console.log(data[0].Url);
            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) {
                _gaq.push(['_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');
                    _gaq.push(['_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').size() > 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) {
    var $ = jQuery;
    var 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.aspx/',
        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) {
    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 = '';   //タイムアウト発生時の表示
        /*
        console.log('--ppz-----------------');
        console.log(ppz);
        console.log('----------------------');
        */
        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');
        jq.type = 'text/javascript';
        jq.src = '/js_sc/jq/jquery-1_9_0_min/';
        jq.async = false;
        var s = document.getElementsByTagName('script')[0];
        s.parentNode.insertBefore(jq, s);
    })();
    jQueryCheck();
} else {
    recommendInitialize(jQuery, ppzData);
}


