var cart = Class.create();
cart.prototype = {
	initialize: function(){

                if(addUrlConf != ''){
                    this.addUrl = addUrlConf;
                } else {
                    this.addUrl = '/servlet/Satellite?c=Page&cid=1177646699508&pagename=printemps%2FPage%2FP_CartXMLTemplate';
		}
                if(showUrlConf != ''){
                    this.showUrl = showUrlConf;
                } else {
                    this.showUrl = '/servlet/Satellite?c=Page&cid=1177646699508&pagename=printemps%2FPage%2FP_CartXMLTemplate';
                }
		this.category = $('TYPE');//商品種別
		this.count = $('COUNT');//冊数
		this.viewcartBtn = $$('td.l_first a img')[0];//カートを見るボタン
		this.addtocartBtns = document.getElementsByClassName('addcart');//カートに追加ボタン
		this.f = $('cartForm');//カート部分のフォーム
		//observeの代わり
		if(this.f){
			this.f.onsubmit = function(){
				return false;
			}
		}

		//バスケットエリア
		this.basket = '<div id="basket"></div>';
		this.basket = this.createBasket(this.basket);
		Element.setStyle(this.basket, {
		'position': 'absolute',
		'overflow': 'hidden'
		});

		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($('cbtns'), 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($('cbtns'), 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);
			if(navigator.appVersion.indexOf("Safari") > -1 || navigator.appName.charAt(0)=="N") Element.setStyle(this.basket, {'height': '0px'});
			//opera
			if(navigator.appVersion.indexOf("Opera") > -1) var x=1; Element.setStyle(this.basket, {'height': '0px'});
                        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 id = thissplit[1];
		//本の種類チェック
		var res = checkbook(cate);
		if(!res){
			var vali = chkerror(id, cate)
			if(!vali){
//				var param = thisname;
				var param = 'cate=' + cate + '&bid=' + id;
				var url = this.addUrl;
				var myAjax = new Ajax.Request(
				url,
				{method: 'post', parameters: param, onComplete: this.showAddedBook.bind(this)});
			}else{
				alert(vali);
			}
		}else{
			alert(res);
		}
		Event.stop(e);
	},

	viewCart: function(){
		if(!$('CARTOV') || this.sw){
			this.cookies = document.cookie + ";";
			//クッキー利用可でクッキーが存在する場合
            if(navigator.cookieEnabled && iscookie(this.cookies, "numbers")){
                //クッキーの取得
                var j, s, v;
                this.bary = new Array();
                this.numbers = iscookie(this.cookies, "numbers");
                this.btype = cookieparts(this.numbers, "btype");
                this.pall = cookieparts(this.numbers, "pall");
                this.call = cookieparts(this.numbers, "call");

                //this.btype = iscookie(this.cookies, "btype");
                //this.pall = iscookie(this.cookies, "pall");
                //this.call = iscookie(this.cookies, "call");
                names = new Array("title", "subtitle", "headtitle", "author", "price");
                for(s=0; s<5; s++){
                    if(this.cookies.indexOf("cook"+s+"=") != -1){
                        this.cook = iscookie(this.cookies, "cook"+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 id="CONT"><ul class="items">';
		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'] = '';
			if(w==this.bary.length-1){
				var li = '<li class="last">';
			}else{
				var li = '<li>';
			}
			showall += li+'<p class="type">■'+req.btype+'</p>';
			showall += '<p class="title"><span>'+req.bary[w]['headtitle']+'</span>'+req.bary[w]['title']+'<span>'+req.bary[w]['subtitle']+'</span>';
			showall += '<span class="author">'+req.bary[w]['author']+'</span></p>';
			showall += '<p class="price">'+pricelimit(req.bary[w]['price'])+'円</p></li>';
		}
                if(!req.pall) req.pall = '';
		showall += '</ul><table class="sum"><tr><th scope="row">商品合計金額（税込）</th><td><span id="SUM">'+pricelimit(req.pall)+'円</span></td>';
		showall += '</tr></table><table class="view"><tr><th scope="row"><a href="/servlet/Satellite?c=Page&cid=1176805806023&p=1177177319462&pagename=printemps%2FP-Simple3" class="arrow"> カートを見る</a></th>';
		showall += '<td><a href="/servlet/Satellite?c=Page&cid=1176805806023&p=1177177319462&pagename=printemps%2FP-Simple3"><img src="/common_img_p/header_btn02.gif" alt="レジへ進む" width="117" height="24" border="0" class="view" />';
		showall += '</a></td></tr></table></div></div>';

		Element.update(this.basket, '');
		Element.update(this.basket, showall);
		this.quickCart = $('CARTOV');
		this.innerCart = $('CONT');

		if (navigator.appVersion.indexOf("MSIE 7") != -1){
			Element.setStyle(this.innerCart, {'position': 'static', 'visibility': 'visible', 'display': 'block', 'height': '100%'});
			Element.setStyle(this.quickCart, {'position': 'static', 'visibility': 'visible', 'display': 'block', 'height': '100%'});
			Element.setStyle(this.basket, {'position': 'static', 'visibility': 'visible', 'display': 'block', 'height': '100%'});
		}
		var qhw = Element.getDimensions(this.innerCart);
		this.quickCartHeight = qhw.height;
		this.quickCartWidth = qhw.width;

		this.way = 1;

		Element.setStyle(this.quickCart, {'height': this.quickCartHeight + 'px', 'width': this.quickCartWidth+4 + 'px'});
		Element.setStyle(this.basket, {'height': this.quickCartHeight + 'px', 'width': this.quickCartWidth+5 + 'px'});
		Element.setStyle(this.innerCart, {'left': '1px'});

		if (navigator.appVersion.indexOf("MSIE 7") != -1){
			Element.setStyle(this.innerCart, {'position': 'absolute'});
			Element.setStyle(this.quickCart, {'position': 'relative'});
			Element.setStyle(this.basket, {'position': 'absolute'});
		}

		Element.setStyle(this.quickCart, {'top': '-' + this.quickCartHeight + 'px'});

		//alert(Element.getDimensions(this.quickCart).height);
		//alert(Element.getDimensions(this.basket).height);

		/*Element.setStyle(this.basket, {'border': '1px solid black'});
		Element.setStyle($('CARTOV'), {'border': '1px solid red'});
		Element.setStyle($('CONT'), {'border': '1px solid green'});*/
		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);
                                        if(cate == 0 || cate == 1){
					    call +='冊';
                                        } else {
                                            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 id="CONT"><p class="put">下記商品がカートに追加されました</p><ul class="items">';
		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 += '<li class="last"><p class="type">■'+btype+'</p>';
		first += '<p class="title"><span>'+first_head+'</span>'+first_title+'<span>'+first_sub+'</span>';
		first += '<span class="author">'+first_author+'</span></p>';
		first += '<p class="price">'+pricelimit(first_price)+'円</p>';
		first += '</li></ul><table class="view"><tr><th scope="row"><a href="/servlet/Satellite?c=Page&cid=1176805806023&p=1177177319462&pagename=printemps%2FP-Simple3" class="arrow"> カートを見る</a></th>';
		first += '<td><a href="/servlet/Satellite?c=Page&cid=1176805806023&p=1177177319462&pagename=printemps%2FP-Simple3"><img src="/common_img_p/header_btn02.gif" alt="レジへ進む" width="117" height="24" border="0" class="view" />';
		first += '</a></td></tr></table></div></div>';

		//for ie7
		if (navigator.appVersion.indexOf("MSIE 7") != -1){
			Element.setStyle($$('#NAVI table.l_btnarea td.l_second')[0], {'text-align': 'left'});
			Element.setStyle(this.category, {'text-align': 'center'});
			Element.setStyle(this.count, {'text-align': 'center'});
		}
		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.innerCart = $('CONT');

		if (navigator.appVersion.indexOf("MSIE 7") != -1){
			Element.setStyle(this.innerCart, {'position': 'static', 'visibility': 'visible', 'display': 'block', 'height': '100%'});
			Element.setStyle(this.quickCart, {'position': 'static', 'visibility': 'visible', 'display': 'block', 'height': '100%'});
			Element.setStyle(this.basket, {'position': 'static', 'visibility': 'visible', 'display': 'block', 'height': '100%'});
		}
		var qhw = Element.getDimensions(this.innerCart);
		this.quickCartHeight = qhw.height;
		this.quickCartWidth = qhw.width;
		this.way = 1;
		Element.setStyle(this.quickCart, {'height': this.quickCartHeight + 'px', 'width': this.quickCartWidth+4 + 'px'});
		Element.setStyle(this.basket, {'height': this.quickCartHeight + 'px', 'width': this.quickCartWidth+5 + 'px'});
		Element.setStyle(this.innerCart, {'left': '1px'});
		if (navigator.appVersion.indexOf("MSIE 7") != -1){
			Element.setStyle(this.innerCart, {'position': 'absolute'});
			Element.setStyle(this.quickCart, {'position': 'relative'});
			Element.setStyle(this.basket, {'position': 'absolute'});
		}
		Element.setStyle(this.quickCart, {'top': '-' + this.quickCartHeight + 'px'});
		
		insertcookie(btype, pall, call, bary);
		this.doSlideCart(true);
	}
}


Element.observe(window, 'load', function(){
	new cart();
});

//クッキーがあるか検査
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';
	if(cate==3) 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");
    var cooflag = cookieparts(numcoo, "btype");
	if(cooflag){
		if(cooflag == getflag(b_flag)){
			if(b_flag == '3'){
				return 'ドラマCDの予約は1点づつとなります。';
			}
			return false;
		}else{
			if(cooflag.indexOf('本') != -1){
				if(b_flag == '1') return '電子書籍は本と同時に購入できません。';
				if(b_flag == '2' || b_flag == '3') return 'ドラマCDは本と同時に購入できません。';
			}
			if(cooflag.indexOf('電子書籍') != -1){
				if(b_flag == '0') return '本は電子書籍と同時に購入できません。';
				if(b_flag == '2' || b_flag == '3') return 'ドラマCDは電子書籍と同時に購入できません。';
			}
			if(cooflag.indexOf('ドラマCD') != -1){
				if(b_flag == '0') return '本はドラマCDと同時に購入できません。';
				if(b_flag == '1') return '電子書籍はドラマCDと同時に購入できません。';
				if(b_flag == '3') return 'ドラマCDの予約と購入は同時にできません。';
			}
		}
	}else{
		return false;
	}
}

function chkerror(id, cate){
	if(id.length == 4){
		if(cate == 0 || cate == 1 || cate == 2 || cate == 3){
			return false;
		}
	}
	return '選択された商品が特定できません。再度商品を選択してください。';
}

function insertcookie(btype, pall, call, bary){

    document.cookie = "numbers=@btype@"+escape(btype)+'@btypeEnd'+"@pall@"+escape(pall)+'@pallEnd'+"@call@"+escape(call)+'@callEnd;';
    var g='';
    for(g=0; g<bary.length; g++){
        document.cookie = "cook"+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;';
    }
}