var cart = Class.create();
cart.prototype = {
    initialize: function(){
        if(addUrlConf != ''){
            this.addUrl = addUrlConf;
        } else {
            this.addUrl = '/servlet/Satellite?c=Page&cid=1176785317105&pagename=france%2FPage%2FCartXMLTemplate';
        }
        if(showUrlConf != ''){
            this.showUrl = showUrlConf;
        } else {
            this.showUrl = '/servlet/Satellite?c=Page&cid=1176785317105&pagename=france%2FPage%2FCartXMLTemplate';
        }
        this.logincart = $('LOGINCART');
        this.category = $('TYPE');//商品種別
        this.count = $('COUNT');//冊数
        Element.setStyle(this.count, {'font-weight': 'bold'});
        this.viewcartBtn = $$('div.view a img')[0];//カートを見るボタン
        this.addtocartBtns = $$('td.tright input');//カートに追加ボタン
        this.f = $$('form');//カート部分のフォーム
        //observeの代わり
        if(this.f[2]){
            this.f[2].onsubmit = function(){
                return false;
            }
        }
        //バスケットエリア
        this.basket = '<div id="basket"style="position: absolute; z-index: 100; margin-top:0!important;"></div>';
        this.basket = this.createBasket(this.basket);
        Element.setStyle(this.basket, {
        'position': 'absolute',
        'overflow': 'hidden',
        'width': Element.getDimensions(this.logincart).width + 'px'
        });

        Element.observe(window.document, 'mousemove', this.capture.bindAsEventListener(this));
        Element.observe(this.viewcartBtn, 'mouseover', this.viewCart.bindAsEventListener(this));
        this.addtocartBtns.invoke('observe', 'click', this.addToCart.bindAsEventListener(this));

    },

    createBasket: function(elem){
        new Insertion.After(this.logincart, elem);
        return $('basket');
    },

    capture: function(e){
        this.mouseX = Event.pointerX(e);
        this.mouseY = Event.pointerY(e);

        if($('CARTOV') && !this.sw){
            if(!Position.within(this.quickCart, this.mouseX, this.mouseY) && !Position.within(this.logincart, this.mouseX, this.mouseY)){
                this.way = -1;
                this.doSlideCart(true, 500);
            }
        }
    },

    doSlideCart: function(sw, time){
        this.sw = sw;
        this.time = time;
        if(this.timer)clearTimeout(this.timer);
        if(this.interval) clearInterval(this.interval);
        this.interval = setInterval(this.slideCart.bind(this),1);
    },

    slideCart: function(){
        var currentY = Number(Element.getStyle(this.quickCart, 'top').match(/[-0-9]+/));

        var targetY = (this.way == 1)? 0 : this.quickCartHeight * this.way;

        var step;
        new function(){
            step = Math.ceil((currentY - targetY)/5);
            currentY -= step;
        }
        Element.setStyle(this.quickCart, {'top': currentY + 'px'});
        if(this.way == 1 && step > -1){
            clearInterval(this.interval);
            this.way = -1;
            if(this.sw){
                this.timer = setTimeout(this.doSlideCart.bind(this),3000);
            }
        }else if(this.way == -1 && step <= 0){
            clearInterval(this.interval);
            Element.remove(this.quickCart);
            var cartflag = document.getElementsByClassName('cartflag');
            if(cartflag.length > 0){
                this.addToCart;
            }
        }
    },

    addToCart: function(e){
        if(e) var elem = Event.element(e);
        if(elem) var thisname = elem.name;
        var body = document.getElementsByTagName('body');

        var flagHTML = '<input type="hidden" class="cartflag" value="'+thisname+'">';
        new Insertion.Bottom(body[0], flagHTML);

        var cartflag = document.getElementsByClassName('cartflag');
        if(cartflag.length > 0){
            var thisname = cartflag[0].value;
            Element.remove(cartflag[0]);
        }
        thissplit = thisname.split("_");
        var cate = thissplit[0];
        var bid = thissplit[1];
        //本の種類チェック
        var res = checkbook(cate);
        if(!res){
            var vali = chkerror(bid, cate)
            if(!vali){
                var param = 'cate=' + cate + '&bid=' + bid;
                var url = this.addUrl;
                //new Insertion.Bottom(body[0], '<input type="hidden" id="ajaxSt">');
                var myAjax = new Ajax.Request(
                url,
                {method: 'post', parameters: param, onComplete: this.showAddedBook.bind(this)});
            }else{
                alert(vali);
            }
        }else{
            alert(res);
        }
        // }
        if(e) Event.stop(e);
    },
    viewCart: function(){
        if(!$('CARTOV') || this.sw){
            this.cookies = document.cookie + ";";
            //クッキー利用可でクッキーが存在する場合
            if(navigator.cookieEnabled && iscookie(this.cookies, "numbers_f")){
                //クッキーの取得
                var j, s, v;
                this.bary = new Array();
                this.numbers = iscookie(this.cookies, "numbers_f");
                this.btype = cookieparts(this.numbers, "btype");
                this.pall = cookieparts(this.numbers, "pall");
                this.call = cookieparts(this.numbers, "call");
                names = new Array("title", "subtitle", "headtitle", "author", "price");
                for(s=0; s<5; s++){
                    if(this.cookies.indexOf("cook_f"+s+"=") != -1){
                        this.cook = iscookie(this.cookies, "cook_f"+s);
                        this.bary[s] = new Array();
                        for(v=0; v<names.length; v++){
                            this.bary[s][names[v]] = cookieparts(this.cook, names[v]);
                        }
                    }
                }
                //クッキーの取得完了
                this.inserthtml(this);
            }else{
                //AJAX
                var param = "";
                var url = this.showUrl;
                var ajax = new Ajax.Request(
                url,
                {method: 'post', parameters: param, onComplete: this.showBooks.bind(this)});
            }
        }
    },
    showBooks: function(res){
        var xmlsorce = res.responseXML;
        var books = xmlsorce.getElementsByTagName('books');
        var k, j;
        this.pall = '';
        var eflag = 0;
        this.call = 0;
        var cate = books[0].getAttribute('category');
        this.btype = getflag(cate);
        //エラー判定
        for(k=0; k<books.length; k++){
            for(j=0; j<books[k].childNodes.length; j++){
                if(books[k].childNodes[j].tagName=='error'){
                    eflag = 1;
                    break;
                }
                if(books[k].childNodes[j].tagName=='total'){
                    this.pall += books[k].childNodes[j].firstChild.nodeValue;
                }
                if(books[k].childNodes[j].tagName=='all_book'){
                    this.call += parseInt(books[k].childNodes[j].firstChild.nodeValue);
                }
            }
        }
        if(eflag == 0){
            books = new Array;
            books = xmlsorce.getElementsByTagName('book');
            var u, r;
            this.bary = new Array;
            for(u=0; u<books.length; u++){
                this.bary[u] = new Array;
                for(r=0; r<books[u].childNodes.length; r++){
                    if(this_array(books[u].childNodes[r].tagName)){
                        if(books[u].childNodes[r].firstChild){
                            this.bary[u][books[u].childNodes[r].nodeName] = books[u].childNodes[r].firstChild.nodeValue;
                        } else {
                            this.bary[u][books[u].childNodes[r].nodeName] = '';
                        }
                    }
                }
            }
        }
        this.inserthtml(this);
    },
    inserthtml: function(req){
        var showall = '<div id="CARTOV"><div class="frame">';
        //showall += '<p class="more">新しくカートに入れた書籍<span><a href=">/servlet/Satellite?c=Page&cid=1176198273200&p=1174985087058&pagename=france%2FSimple3Layout">全てを見る</a></span></p>';
        showall += '<p class="more">新しくカートに入れた書籍<span><a href="/servlet/Satellite?c=Page&cid=1177852941757&p=1174985087058&pagename=france%2FSimple4Layout">全てを見る</a></span></p>';
        showall += '<table class="item">';
        for(w=0; w<this.bary.length; w++){
            if(!req.btype) req.btype = '';
            if(!req.bary[w]['headtitle']) req.bary[w]['headtitle'] = '';
            if(!req.bary[w]['title']) req.bary[w]['title'] = '';
            if(!req.bary[w]['subtitle']) req.bary[w]['subtitle'] = '';
            if(!req.bary[w]['author']) req.bary[w]['author'] = '';
            if(!req.bary[w]['price']) req.bary[w]['price'] = '';
            showall += '<tr><th scope="row"><span>'+req.btype+'</span><br /><em>'+req.bary[w]['headtitle']+'&nbsp;'+req.bary[w]['title']+'&nbsp;'+req.bary[w]['subtitle']+'</em>';
            showall += '<br />'+req.bary[w]['author']+'</th><td>'+pricelimit(req.bary[w]['price'])+'円</td></tr>';
        }
        showall += '<tr><th scope="row" class="sum">合計金額（税込）</th>';
        if(!req.pall) req.pall = '';
        showall += '<td class="sum"><span id="SUM">'+pricelimit(req.pall)+'円</span></td></tr></table>';
        //showall += '<div class="view"><a href="/servlet/Satellite?c=Page&cid=1176198273200&p=1174985087058&pagename=france%2FSimple3Layout"><img src="/common_img/btn_viewcart.gif" alt="カートを見る" width="93" height="22" /></a></div></div></div>';
        showall += '<div class="view"><a href="/servlet/Satellite?c=Page&cid=1177852941757&p=1174985087058&pagename=france%2FSimple4Layout"><img src="/common_img/btn_viewcart.gif" alt="カートを見る" width="93" height="22" /></a></div></div></div>';
        Element.update(this.basket, '');
        Element.update(this.basket, showall);
        this.quickCart = $('CARTOV');
        this.quickCartHeight = Element.getDimensions(this.quickCart).height + 10;
        this.way = 1;
        Element.setStyle(this.quickCart, {'top': '-' + this.quickCartHeight + 'px', 'visibility': 'visible'});
        this.doSlideCart(false);
    },
    showAddedBook: function(res){
        var xmlsorce = res.responseXML;
        var books = xmlsorce.getElementsByTagName('books');
        var k, j;
        var pall = '';
        var error = '';
        var eflag = 0;
        var call = 0;
        var w, first_title, first_sub, first_head, first_author, first_price = '';
        var cate = books[0].getAttribute('category');
        var btype = getflag(cate);
        for(k=0; k<books.length; k++){
            for(j=0; j<books[k].childNodes.length; j++){
                if(books[k].childNodes[j].tagName=='error'){
                    error += books[k].childNodes[j].firstChild.nodeValue;
                    eflag = 1;
                    break;
                }
                if(books[k].childNodes[j].tagName=='total'){
                    pall += books[k].childNodes[j].firstChild.nodeValue;
                }
                if(books[k].childNodes[j].tagName=='all_book'){
                    call += parseInt(books[k].childNodes[j].firstChild.nodeValue);
                    call += '冊';
                }
            }
        }
        if(eflag == 0){
            books = new Array;
            books = xmlsorce.getElementsByTagName('book');
            var u, r;
            bary = new Array;
            for(u=0; u<books.length; u++){
                bary[u] = new Array;
                for(r=0; r<books[u].childNodes.length; r++){
                    if(this_array(books[u].childNodes[r].tagName)){
                        if(books[u].childNodes[r].firstChild){
                            bary[u][books[u].childNodes[r].nodeName] = books[u].childNodes[r].firstChild.nodeValue;
                        } else {
                            bary[u][books[u].childNodes[r].nodeName] = '';
                        }
                    }
                }
            }
        }else{
            alert(error);
            return false;
        }
        var first = '<div id="CARTOV"><div class="frame"><p class="put">下記商品がカートに追加されました</p><table class="item"><tr>';
        for(w=0; w<bary.length; w++){
            if(first_price == ''){
                first_title = bary[w]['title'];
                first_sub = bary[w]['subtitle'];
                first_head = bary[w]['headtitle'];
                first_author = bary[w]['author'];
                first_price = bary[w]['price'];
            }
        }
        first += '<th scope="row"><span>'+btype+'</span><br /><em>'+first_head+'&nbsp;'+first_title+'&nbsp;'+first_sub+'</em>';
        first += '<br />'+first_author+'&nbsp;著</th><td>'+pricelimit(first_price)+'円</td></tr></table></div></div>';

        Element.update(this.basket, '');
        Element.update(this.basket, first);
        Element.update(this.category, '');
        Element.update(this.category, btype);
        Element.update(this.count, '');
        Element.update(this.count, call);

        this.quickCart = $('CARTOV');
        this.quickCartHeight = Element.getDimensions(this.quickCart).height + 10;
        this.way = 1;
        Element.setStyle(this.quickCart, {'top': '-' + this.quickCartHeight + 'px', 'visibility': 'visible'});
        insertcookie(btype, pall, call, bary);
        //Element.remove('ajaxSt');
        this.doSlideCart(true);
    }
}


Element.observe(window, 'load', function(){
    if($('tag_menu')) displaylink();
    if($('tag_str')) safeenter();
    new cart();
    if($('mb5')) displaytag();

});

//クッキーがあるか検査
function iscookie(thecookie, param){
    rat = param + "=";
    cookiestart = thecookie.indexOf(rat);
    if(cookiestart != -1){
        cookieend = thecookie.indexOf(";", cookiestart);
        return unescape(thecookie.substring(cookiestart + rat.length, cookieend));
    }else{
        return false;
    }
}

//各クッキー取得
function cookieparts(thecookie, param){
    if(thecookie){
        var rat = "@"+param+"@";
        var starter1 = thecookie.indexOf(rat);
        var starter2 = (rat).length;
        var starter = starter1+starter2;
        var ender   = thecookie.indexOf("@"+param+"End");
        var cook = unescape(thecookie.substring(starter, ender));
        return cook;
    } else {
        return false;
    }
}

function getflag(cate){
    if(cate==0) return '本';
    if(cate==1) return '電子書籍';
    if(cate==2) return 'ドラマCD';
    return false;
}


function this_array(param){
    if(param == 'headtitle' || param == 'title' || param == 'subtitle' || param == 'author' || param == 'price'){
        return true;
    }else{
        return false;
    }
}


function pricelimit(sourceStr) {
    var destStr = sourceStr;
    var tmpStr = "";
    while (destStr != (tmpStr = destStr.replace(/^([+-]?\d+)(\d\d\d)/,"$1,$2"))) {
        destStr = tmpStr;
    }
    return destStr;
}

function checkbook(b_flag){
    var cookies = document.cookie + ";";
    var numcoo = iscookie(cookies, "numbers_f");
    var cooflag = cookieparts(numcoo, "btype");
    if(cooflag){
        if(cooflag == getflag(b_flag)){
            return false;
        }else{
            if(b_flag==0){
                return '本は電子書籍と同時に購入できません。\n詳しくはショッピングカートをご確認ください。';
            }
            if(b_flag==1){
                return '電子書籍は本と同時に購入できません。\n詳しくはショッピングカートをご確認ください。';
            }
            if(b_flag==2){
                return false;
            }
        }
    }else{
        return false;
    }
}

function chkerror(bid, cate){
    //if(bid.length == 4){
    if(cate == 0 || cate == 1 || cate == 2 || cate == 3){
        return false;
    }
    //}
    return '選択された商品が特定できません。再度商品を選択してください。';
}

function insertcookie(btype, pall, call, bary){

    document.cookie = "numbers_f=@btype@"+escape(btype)+'@btypeEnd'+"@pall@"+escape(pall)+'@pallEnd'+"@call@"+escape(call)+'@callEnd;';
    var g='';
    for(g=0; g<bary.length; g++){
        document.cookie = "cook_f"+g+"=@title@"+escape(bary[g]['title'])+'@titleEnd'+"@subtitle@"+escape(bary[g]['subtitle'])+'@subtitleEnd'+"@headtitle@"+escape(bary[g]['headtitle'])+'@headtitleEnd'+"@author@"+escape(bary[g]['author'])+'@authorEnd'+"@price@"+escape(bary[g]['price'])+'@priceEnd;';
    }
}

function safeenter(){
    Element.observe($('tag_str'), 'focus', function(){
        Element.observe(window.document, 'keypress', kd = function(event){
            if(event.keyCode==13){
                Event.stop(event);
            }
        });
    });
    Element.observe($('tag_str'), 'blur', function(){
        Element.stopObserving(window.document, 'keypress', kd);
    });
}