/*
 *=============================================
 * Cartオブジェクト
 *
 * require: prototype.js, utils.js
 *=============================================
 */
function Cart(){
    //this.loadedEnd();
    
    //this.initForms();

}

Cart.prototype.isOnload = false;

Cart.prototype.initForms = function(){
    var forms = document.getElementsByName('form');

    for (var i=0; i<forms.length; i++){
        this.initForm(forms[i]);
    }
}

Cart.prototype.initForm = function(form){
    var obj = $(form);

    Event.observe(obj, 'submit', this.addGoods.bind(this, obj));

    var tr = $(form).parentNode.parentNode;
    Event.observe(tr, 'mouseover', function(e){ this.addClassName('over'); }.bind(tr));
    Event.observe(tr, 'mouseout', function(e){ this.removeClassName('over'); }.bind(tr));
}

/*
 * 商品追加
 */
Cart.prototype.addGoods = function(form, e){
    //var form  = Event.element(e);

    var goodsId;
    var num;
    if (form.id.match(/^value_/)){
         // firefoxでテキストボックスでEnterを押した場合
         // 現在 2008/01/20 r1380 ではここは通らない
         // ==check== テスト後に削除する
         goodsId = form.id.replace(/value_/, '');
         num = Form.Element.getValue($('value_' + goodsId));
         form = $(goodsId);
    }else{
        goodsId = form.id;
        num = Form.Element.getValue($('value_' + goodsId));
    }
    num = Utils.numberToHankaku(num);
    var goodsCode = Form.Element.getValue(
                         Form.getInputs(form, 'hidden', 'goodsCode')[0]);
    var goodsName = Form.Element.getValue(
                         Form.getInputs(form, 'hidden', 'goodsName')[0]);

    var price   = Form.getInputs(form, 'hidden', 'price')[0];
    var bargain = Form.getInputs(form, 'hidden', 'bargain')[0];
    var args = { goodsCode: goodsCode,
                 goodsName: goodsName,
                 goodsId: goodsId,
                 num: parseInt(num, 10),
                 price: parseInt(Form.Element.getValue(price), 10),
                 bargain: parseInt(Form.Element.getValue(bargain), 10)}
    this.getRequest('/Aja_AddGoods/'+goodsId+'/'+num, this.addGoodsResult, args);

    if (e){
        Event.stop(e);
    }
}

/*
 * 商品追加による合計金額の書き換えコールバック
 */
Cart.prototype.addGoodsResult = function(text, args){
    var tr = $(args['goodsId']).parentNode.parentNode;

    if (text){
        //alert(text);
        var obj = eval('('+text+')');

        if (obj['isReservation']){
            var resvGoodsNum = document.getElementsByClassName('resvGoodsNum');
            for (var i=0; i<resvGoodsNum.length; i++){
                resvGoodsNum[i].innerHTML = obj['sumNumber'];
            }
        }else{
            var existGoodsNum = document.getElementsByClassName('existGoodsNum');
            for (var i=0; i<existGoodsNum.length; i++){
                existGoodsNum[i].innerHTML = obj['sumNumber'];
            }
            var existSumPrice = document.getElementsByClassName('existSumPrice');
            for (var i=0; i<existSumPrice.length; i++){
                existSumPrice[i].innerHTML = obj['sumPrice'];
            }

            // 送料表示設定
            $('residualValue').innerHTML = obj['residualPrice'];
            if(obj['residualPrice'] == 0)
                $('residual').style.display = 'none';
            else
                $('residual').style.display = 'inline';

            // 送料無料表示設定
            if(obj['free'])
                $('freeable').style.display = 'inline';
            else
                $('freeable').style.display = 'none';
        }
        
        var message = obj['message'];
        if (obj['num'] > 0){
            $('submit_' + args['goodsId']).value = '変更';
            $('value_' + args['goodsId']).value = obj['num'];
            Element.addClassName(tr, 'inCart');
            tr.style.backgroundColor = '#FDF2DF'; // ==check== 色変えを効率良く
        }else{
            $('submit_' + args['goodsId']).value = '追加';
            $('value_' + args['goodsId']).value = 1;
            Element.removeClassName(tr, 'inCart');
        }
		//alert(message);
        this.loaded(message);
    }else{
        var message = args['goodsCode'] + ' ' + args['goodsName'] + 'の'
                        + action +'に失敗しました';

        this.loaded(message);
    }
}

/*
 * 商品追加によるメッセージ
 */
Cart.prototype.announceHandler = null;
Cart.prototype.loading = function(message){
    Element.show('announce');
    $('announceBody').innerHTML = message;
    if (this.announceHandler != null){
        clearTimeout(this.announceHandler);
    }
}

Cart.prototype.loaded = function(message){
    $('announceBody').innerHTML = message;
    this.announceHandler = setTimeout(this.loadedEnd, 5000);
}

Cart.prototype.loadedEnd = function(){
    Element.hide('announce');
}

/*
 * prototype.js の Ajax.Requestラッパ
 */
Cart.prototype.getRequest = function(url, callback, args){
    var cart = this;
    
    var tr = $(args['goodsId']).parentNode.parentNode;
    var action;
    if (Element.hasClassName(tr, 'inCart')){
        action = '変更' + '<p id="CartChangeGoodsIcon"></p>';
    }else{
        action = '追加' + '<p id="CartAddGoodsIcon"></p>';
    }
    
    var message = args['goodsCode'] + ' ' + args['goodsName'] + 'を'
                    + action + 'しています...';

    cart.loading(message);
    var time = new Date().getTime();
    var req = new Ajax.Request(
        url + '?' + time,
        {
            method: 'get',
            onComplete: function(req){
                callback.call(cart, req.responseText, args);
            }
        });
}

