source: branches/version-2_13_0/html/js/eccube.js @ 23167

Revision 23167, 19.9 KB checked in by m_uehara, 12 years ago (diff)

#2234 別のお届け先のグレーアウト処理を修正

RevLine 
[23058]1/*
2 * This file is part of EC-CUBE
3 *
4 * Copyright(c) 2000-2013 LOCKON CO.,LTD. All Rights Reserved.
5 *
6 * http://www.lockon.co.jp/
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License
10 * as published by the Free Software Foundation; either version 2
11 * of the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
21 */
22
[23103]23(function( window, undefined ){
24
25
26    // 名前空間の重複を防ぐ
27    if (window.eccube === undefined) {
28        window.eccube = {};
[23066]29    }
30
[23103]31    var eccube = window.eccube;
[23066]32
[23106]33    eccube.defaults = {
34        formId:'form1',
35        windowFeatures:{
36            scrollbars:'yes',
37            resizable:'yes',
38            toolbar:'no',
39            location:'no',
40            directories:'no',
41            status:'no',
42            focus:true,
43            formTarget:''
44        }
[23103]45    };
[23061]46
[23106]47    eccube.openWindow = function(URL,name,width,height,option) {
48        var features = "width="+width+",height="+height;
49        if (option === undefined) {
50            option = eccube.defaults.windowFeatures;
51        } else {
52            option = $.extend(eccube.defaults.windowFeatures, option);
53        }
54        features = features + ",scrollbars=" + option.scrollbars +
55                ",resizable=" + option.resizable +
56                ",toolbar=" + option.toolbar +
57                ",location=" + option.location +
58                ",directories=" + option.directories +
59                ",status=" + option.status;
60        if (option.hasOwnProperty('menubar')) {
61            features = features + ",menubar=" + option['menubar'];
62        }
63        var WIN = window.open(URL,name,features);
64        if (option.formTarget !== "") {
65            document.forms[option.formTarget].target = name;
66        }
67        if (option.focus) {
68            WIN.focus();
69        }
[23103]70    };
[23061]71
[23103]72    // 親ウィンドウの存在確認.
73    eccube.isOpener = function() {
74        var ua = navigator.userAgent;
[23106]75        if( window.opener ) {
76            if( ua.indexOf('MSIE 4') !== -1 && ua.indexOf('Win') !== -1 ) {
77                if (window.opener.hasOwnProperty('closed')) {
78                    return !window.opener['closed'];
79                } else {
80                    return false;
81                }
[23103]82            } else {
[23106]83                return typeof window.opener.document === 'object';
[23103]84            }
[23061]85        } else {
[23103]86            return false;
[23061]87        }
[23103]88    };
[23061]89
[23103]90    // 郵便番号入力呼び出し.
91    eccube.getAddress = function(php_url, tagname1, tagname2, input1, input2) {
[23106]92        var zip1 = document['form1'][tagname1].value;
93        var zip2 = document['form1'][tagname2].value;
[23103]94
[23106]95        if(zip1.length === 3 && zip2.length === 4) {
[23103]96            $.get(
97                php_url,
98                {zip1: zip1, zip2: zip2, input1: input1, input2: input2},
99                function(data) {
100                    var arrData = data.split("|");
101                    if (arrData.length > 1) {
102                        eccube.putAddress(input1, input2, arrData[0], arrData[1], arrData[2]);
103                    } else {
[23106]104                        window.alert(data);
[23103]105                    }
[23071]106                }
[23103]107            );
108        } else {
[23106]109            window.alert("郵便番号を正しく入力して下さい。");
[23103]110        }
111    };
[23062]112
[23103]113    // 郵便番号から検索した住所を渡す.
114    eccube.putAddress = function(input1, input2, state, city, town) {
[23106]115        if(state !== "") {
[23103]116            // 項目に値を入力する.
[23106]117            document['form1'][input1].selectedIndex = state;
118            document['form1'][input2].value = city + town;
[23103]119        }
120    };
[23062]121
[23103]122    eccube.setFocus = function(name) {
[23106]123        if(document['form1'].hasOwnProperty(name)) {
124            document['form1'][name].focus();
[23103]125        }
126    };
[23062]127
[23103]128    // モードとキーを指定してSUBMITを行う。
129    eccube.setModeAndSubmit = function(mode, keyname, keyid) {
130        switch(mode) {
131            case 'delete_category':
132                if(!window.confirm('選択したカテゴリとカテゴリ内の全てのカテゴリを削除します')){
133                    return;
134                }
135                break;
136            case 'delete':
137                if(!window.confirm('一度削除したデータは、元に戻せません。\n削除しても宜しいですか?')){
138                    return;
139                }
140                break;
141            case 'confirm':
142                if(!window.confirm('登録しても宜しいですか')){
143                    return;
144                }
145                break;
146            case 'delete_all':
147                if(!window.confirm('検索結果を全て削除しても宜しいですか')){
148                    return;
149                }
150                break;
151            default:
152                break;
153        }
[23106]154        document['form1']['mode'].value = mode;
155        if(keyname !== undefined && keyname !== "" && keyid !== undefined && keyid !== "") {
156            document['form1'][keyname].value = keyid;
[23103]157        }
[23106]158        document['form1'].submit();
[23103]159    };
[23062]160
[23103]161    eccube.fnFormModeSubmit = function(form, mode, keyname, keyid) {
162        switch(mode) {
163            case 'delete':
164                if(!window.confirm('一度削除したデータは、元に戻せません。\n削除しても宜しいですか?')){
165                    return;
166                }
167                break;
168            case 'confirm':
169                if(!window.confirm('登録しても宜しいですか')){
170                    return;
171                }
172                break;
173            case 'regist':
174                if(!window.confirm('登録しても宜しいですか')){
175                    return;
176                }
177                break;
178            default:
179                break;
180        }
[23140]181        var values = {mode:mode};
[23106]182        if(keyname !== undefined && keyname !== "" && keyid !== undefined && keyid !== "") {
[23140]183            values[keyname] = keyid;
[23103]184        }
[23140]185        eccube.submitForm(values, form);
[23103]186    };
[23071]187
[23140]188    eccube.setValueAndSubmit = function(form, key, val, msg) {
189        var ret;
190        if (msg !== undefined) {
191            ret = window.confirm(msg);
192        } else {
193            ret = true;
194        }
195        if (ret) {
196            var formElement = $("form#" + form);
197            formElement.find("*[name=" + key + "]").val(val);
198            formElement.submit();
199        }
[23103]200        return false;
201    };
[23071]202
[23103]203    eccube.setValue = function(key, val, form) {
204        if (typeof form === 'undefined') {
[23106]205            form = eccube.defaults.formId;
[23062]206        }
[23104]207        var formElement = $("form#" + form);
208        formElement.find("*[name=" + key + "]").val(val);
[23103]209    };
[23062]210
[23103]211    eccube.changeAction = function(url) {
[23106]212        document['form1'].action = url;
[23103]213    };
214
215    // ページナビで使用する。
216    eccube.movePage = function(pageno, mode, form) {
[23140]217        if (form === undefined) {
[23106]218            form = eccube.defaults.formId;
[23063]219        }
[23104]220        var formElement = $("form#" + form);
221        formElement.find("input[name=pageno]").val(pageno);
[23140]222        if (mode !== undefined) {
223            formElement.find("input[name='mode']").val(mode);
[23103]224        }
[23104]225        formElement.submit();
[23103]226    };
[23063]227
[23140]228    eccube.submitForm = function(values, form){
229        var formElement;
230        if (form !== undefined && typeof form === "string" && form !== "") {
231            formElement = $("form#" + form);
232        } else if (form !== undefined && typeof form === "object") {
233            formElement = form;
234        } else {
235            formElement = $("form#" + eccube.defaults.formId);
[23063]236        }
[23140]237        if (values !== undefined && typeof values === "object") {
238            $.each(values, function(index, value) {
239                formElement.find("input,select").filter("[name='" + index + "']").val(value);
240            });
241        }
242        formElement.submit();
[23103]243    };
[23063]244
[23103]245    // ポイント入力制限。
246    eccube.togglePointForm = function() {
[23106]247        if(document['form1']['point_check']) {
[23103]248            var list = ['use_point'];
249            var color;
250            var flag;
251
[23106]252            if(!document['form1']['point_check'][0].checked) {
[23103]253                color = "#dddddd";
254                flag = true;
255            } else {
256                color = "";
257                flag = false;
[23071]258            }
[23063]259
[23103]260            var len = list.length;
[23106]261            for(var i = 0; i < len; i++) {
262                if(document['form1'][list[i]]) {
263                    var current_color = document['form1'][list[i]].style.backgroundColor;
264                    if (color !== "#dddddd" && (current_color === "#ffe8e8" || current_color === "rgb(255, 232, 232)"))
[23103]265                    {
266                        continue;
267                    }
[23106]268                    document['form1'][list[i]].disabled = flag;
269                    document['form1'][list[i]].style.backgroundColor = color;
[23103]270                }
[23071]271            }
[23103]272        }
273    };
[23063]274
[23103]275    // 別のお届け先入力制限。
276    eccube.toggleDeliveryForm = function() {
[23106]277        if(!document['form1']) {
[23103]278            return;
279        }
[23106]280        if(document['form1']['deliv_check']) {
[23103]281            var list = [
282                'shipping_name01',
283                'shipping_name02',
284                'shipping_kana01',
285                'shipping_kana02',
286                'shipping_pref',
287                'shipping_zip01',
288                'shipping_zip02',
289                'shipping_addr01',
290                'shipping_addr02',
291                'shipping_tel01',
292                'shipping_tel02',
[23167]293                'shipping_tel03',
294                'shipping_company_name',
295                'shipping_country_id',
296                'shipping_zipcode',
297                'shipping_fax01',
298                'shipping_fax02',
299                'shipping_fax03'
[23103]300            ];
[23063]301
[23106]302            if(!document['form1']['deliv_check'].checked) {
[23103]303                eccube.changeDisabled(list, '#dddddd');
304            } else {
305                eccube.changeDisabled(list, '');
306            }
307        }
308    };
[23064]309
[23103]310    // 最初に設定されていた色を保存しておく。
311    eccube.savedColor = [];
[23064]312
[23103]313    eccube.changeDisabled = function(list, color) {
314        var len = list.length;
[23064]315
[23106]316        for(var i = 0; i < len; i++) {
317            if(document['form1'][list[i]]) {
318                if(color === "") {
[23103]319                    // 有効にする。
[23106]320                    document['form1'][list[i]].removeAttribute('disabled');
321                    document['form1'][list[i]].style.backgroundColor = eccube.savedColor[list[i]];
[23103]322                } else {
323                    // 無効にする。
[23106]324                    document['form1'][list[i]].setAttribute('disabled', 'disabled');
325                    eccube.savedColor[list[i]] = document['form1'][list[i]].style.backgroundColor;
326                    document['form1'][list[i]].style.backgroundColor = color;//"#f0f0f0";
[23064]327                }
328            }
329        }
[23103]330    };
[23064]331
[23103]332    // ログイン時の入力チェック
333    eccube.checkLoginFormInputted = function(form, emailKey, passKey) {
[23104]334        var formElement = $("form#" + form);
[23103]335        var checkItems = [];
[23064]336
[23103]337        if (typeof emailKey === 'undefined') {
338            checkItems[0] = 'login_email';
[23064]339        } else {
[23103]340            checkItems[0] = emailKey;
[23064]341        }
[23103]342        if (typeof passKey === 'undefined') {
343            checkItems[1] = 'login_pass';
344        } else {
345            checkItems[1] = passKey;
346        }
[23064]347
[23103]348        var max = checkItems.length;
349        var errorFlag = false;
[23064]350
[23103]351        // 必須項目のチェック
352        for(var cnt = 0; cnt < max; cnt++) {
[23106]353            if(formElement.find("input[name=" + checkItems[cnt] + "]").val() === "") {
[23103]354                errorFlag = true;
355                break;
[23064]356            }
357        }
358
[23103]359        // 必須項目が入力されていない場合
[23106]360        if(errorFlag === true) {
361            window.alert('メールアドレス/パスワードを入力して下さい。');
[23103]362            return false;
363        } else {
364            return true;
365        }
366    };
[23064]367
[23103]368    //親ウィンドウのページを変更する.
369    eccube.changeParentUrl = function(url) {
370        // 親ウィンドウの存在確認
371        if(eccube.isOpener()) {
372            window.opener.location.href = url;
373        } else {
374            window.close();
375        }
376    };
[23064]377
[23103]378    //文字数をカウントする。
379    //引数1:フォーム名称
380    //引数2:文字数カウント対象
381    //引数3:カウント結果格納対象
382    eccube.countChars = function(form,sch,cnt) {
[23104]383        var formElement = $("form#" + form);
384        formElement.find("input[name="+cnt+"]").val(formElement.find("*[name="+sch+"]").val().length);
[23103]385    };
[23064]386
[23103]387    // テキストエリアのサイズを変更する.
388    eccube.toggleRows = function(buttonSelector, textAreaSelector, max, min) {
389        if ($(textAreaSelector).attr('rows') <= min) {
390            $(textAreaSelector).attr('rows', max);
391            $(buttonSelector).text('縮小');
392        } else {
393            $(textAreaSelector).attr('rows', min);
394            $(buttonSelector).text('拡大');
[23064]395        }
[23103]396    };
[23064]397
[23103]398    /**
399     * 規格2のプルダウンを設定する.
400     */
401    eccube.setClassCategories = function($form, product_id, $sele1, $sele2, selected_id2) {
402        if ($sele1 && $sele1.length) {
403            var classcat_id1 = $sele1.val() ? $sele1.val() : '';
404            if ($sele2 && $sele2.length) {
405                // 規格2の選択肢をクリア
406                $sele2.children().remove();
[23065]407
[23103]408                var classcat2;
[23065]409
[23103]410                // 商品一覧時
[23106]411                if (eccube.hasOwnProperty('productsClassCategories')) {
412                    classcat2 = eccube['productsClassCategories'][product_id][classcat_id1];
[23103]413                }
414                // 詳細表示時
415                else {
[23106]416                    classcat2 = eccube['classCategories'][classcat_id1];
[23103]417                }
[23065]418
[23103]419                // 規格2の要素を設定
420                for (var key in classcat2) {
[23106]421                    if (classcat2.hasOwnProperty(key)) {
422                        var id = classcat2[key]['classcategory_id2'];
423                        var name = classcat2[key]['name'];
424                        var option = $('<option />').val(id ? id : '').text(name);
425                        if (id === selected_id2) {
426                            option.attr('selected', true);
427                        }
428                        $sele2.append(option);
[23103]429                    }
430                }
431                eccube.checkStock($form, product_id, $sele1.val() ? $sele1.val() : '__unselected2',
432                    $sele2.val() ? $sele2.val() : '');
[23065]433            }
[23103]434        }
435    };
[23065]436
[23103]437    /**
438     * 規格の選択状態に応じて, フィールドを設定する.
439     */
440    eccube.checkStock = function($form, product_id, classcat_id1, classcat_id2) {
[23065]441
[23103]442        classcat_id2 = classcat_id2 ? classcat_id2 : '';
[23065]443
[23103]444        var classcat2;
[23065]445
[23103]446        // 商品一覧時
[23106]447        if (eccube.hasOwnProperty('productsClassCategories')) {
448            classcat2 = eccube['productsClassCategories'][product_id][classcat_id1]['#' + classcat_id2];
[23065]449        }
[23103]450        // 詳細表示時
451        else {
[23106]452            classcat2 = eccube['classCategories'][classcat_id1]['#' + classcat_id2];
[23103]453        }
[23065]454
[23103]455        // 商品コード
456        var $product_code_default = $form.find('[id^=product_code_default]');
457        var $product_code_dynamic = $form.find('[id^=product_code_dynamic]');
[23106]458        if (classcat2 && typeof classcat2['product_code'] !== 'undefined') {
[23103]459            $product_code_default.hide();
460            $product_code_dynamic.show();
461            $product_code_dynamic.text(classcat2['product_code']);
462        } else {
463            $product_code_default.show();
464            $product_code_dynamic.hide();
465        }
[23065]466
[23103]467        // 在庫(品切れ)
468        var $cartbtn_default = $form.find('[id^=cartbtn_default]');
469        var $cartbtn_dynamic = $form.find('[id^=cartbtn_dynamic]');
470        if (classcat2 && classcat2['stock_find'] === false) {
[23065]471
[23103]472            $cartbtn_dynamic.text('申し訳ございませんが、只今品切れ中です。').show();
473            $cartbtn_default.hide();
474        } else {
475            $cartbtn_dynamic.hide();
476            $cartbtn_default.show();
477        }
[23065]478
[23103]479        // 通常価格
480        var $price01_default = $form.find('[id^=price01_default]');
481        var $price01_dynamic = $form.find('[id^=price01_dynamic]');
[23106]482        if (classcat2 && typeof classcat2['price01'] !== 'undefined' && String(classcat2['price01']).length >= 1) {
[23065]483
[23103]484            $price01_dynamic.text(classcat2['price01']).show();
485            $price01_default.hide();
486        } else {
487            $price01_dynamic.hide();
488            $price01_default.show();
489        }
[23065]490
[23103]491        // 販売価格
492        var $price02_default = $form.find('[id^=price02_default]');
493        var $price02_dynamic = $form.find('[id^=price02_dynamic]');
[23106]494        if (classcat2 && typeof classcat2['price02'] !== 'undefined' && String(classcat2['price02']).length >= 1) {
[23065]495
[23103]496            $price02_dynamic.text(classcat2['price02']).show();
497            $price02_default.hide();
498        } else {
499            $price02_dynamic.hide();
500            $price02_default.show();
501        }
[23065]502
[23103]503        // ポイント
504        var $point_default = $form.find('[id^=point_default]');
505        var $point_dynamic = $form.find('[id^=point_dynamic]');
[23106]506        if (classcat2 && typeof classcat2['point'] !== 'undefined' && String(classcat2['point']).length >= 1) {
[23065]507
[23103]508            $point_dynamic.text(classcat2['point']).show();
509            $point_default.hide();
510        } else {
511            $point_dynamic.hide();
512            $point_default.show();
513        }
[23065]514
[23103]515        // 商品規格
516        var $product_class_id_dynamic = $form.find('[id^=product_class_id]');
[23106]517        if (classcat2 && typeof classcat2['product_class_id'] !== 'undefined' && String(classcat2['product_class_id']).length >= 1) {
[23103]518            $product_class_id_dynamic.val(classcat2['product_class_id']);
519        } else {
520            $product_class_id_dynamic.val('');
521        }
522    };
[23065]523
[23103]524    // グローバルに使用できるようにする
525    window.eccube = eccube;
[23065]526
[23103]527    /**
528     * Initialize.
529     */
530    $(function() {
531        // 規格1選択時
532        $('select[name=classcategory_id1]')
533            .change(function() {
534                var $form = $(this).parents('form');
535                var product_id = $form.find('input[name=product_id]').val();
536                var $sele1 = $(this);
537                var $sele2 = $form.find('select[name=classcategory_id2]');
[23065]538
[23103]539                // 規格1のみの場合
540                if (!$sele2.length) {
541                    eccube.checkStock($form, product_id, $sele1.val(), '0');
542                    // 規格2ありの場合
543                } else {
544                    eccube.setClassCategories($form, product_id, $sele1, $sele2);
545                }
546            });
[23065]547
[23103]548        // 規格2選択時
549        $('select[name=classcategory_id2]')
550            .change(function() {
551                var $form = $(this).parents('form');
552                var product_id = $form.find('input[name=product_id]').val();
553                var $sele1 = $form.find('select[name=classcategory_id1]');
554                var $sele2 = $(this);
555                eccube.checkStock($form, product_id, $sele1.val(), $sele2.val());
556            });
[23115]557
558        // マウスオーバーで画像切り替え
559        $(".hover_change_image").each(function(){
560            var target = $(this);
561            var srcOrig = target.attr("src");
562            var srcOver = srcOrig.substr(0, srcOrig.lastIndexOf('.')) + '_on' + srcOrig.substr(srcOrig.lastIndexOf('.'));
563            target.hover(
564                function(){
565                    target.attr("src", srcOver);
566                },
567                function(){
568                    target.attr("src", srcOrig);
569                }
570            );
571        });
[23103]572    });
573})(window);
Note: See TracBrowser for help on using the repository browser.