//////////////////////////////////////////////////////////////////////////////// // カート処理:START //////////////////////////////////////////////////////////////////////////////// // 定数定義 var ORDER_MAX = 20; var COOKIE_KEY_BASE_STR = 'PartsCart'; // グローバル変数 var v_parts_list; // 画像差し替え function img_change( img_elm, img_path ) { // ドラッグ中は処理しない // if ( ddv_press_flg == false ) { img_elm.src = img_path; // } return; } // クッキーI/F ///////////////////////////////////////////////////////////////////// // Cookie読み込み関数 // @param string key_str 求める値のキー // @return string 値(ない時は空文字"") function cookie_read( key_str ) { var cookie_str; // Cookie文字列 var data_array; // キーデータ配列 var oExp; // 正規表現 var word_array; // ワード配列 var ac; // データ配列カウンタ var return_str; // 戻り値 // 初期化 return_str = ''; // Cookie文字列抽出 cookie_str = document.cookie; // ";"で区切って"キー=値"の配列にする data_array = cookie_str.split(";"); // すべての半角スペースを表す正規表現作成 oExp = new RegExp(" ", "g"); // 引数keyから半角スペースを除去 key_str = key_str.replace(oExp, ""); // 語句ごとにマッチする要素を検索 for ( ac = 0; ac < data_array.length; ac++ ) { // さらに"="で区切る word_array = data_array[ac].split("="); // 半角スペース除去 word_array[0] = word_array[0].replace(oExp, ""); // マッチしたら値を返す if ( key_str == word_array[0] ) { // 戻り値に設定 return_str = word_array[1]; // 検索処理終了 break; } } return return_str; } // Cookie書き込み関数 // @param string key_str データキー (半角英数 _ のみ) // @param string value データの値(日本語可) // @param int days データを保持する日数( 0 の時は有効期限は省略) function cookie_write( key_str, value, days ) { var write_str; // 書き込み文字列 var now_date; // 現在日時 // 書き込みデータ設定:key=value write_str = key_str + "=" + escape(value) + ";"; // 日数指定有無チェック if ( days != 0 ) { // 現在の日時取得 now_date = new Date(); // days日後の日時設定 now_date.setDate( now_date.getDate() + days ); // 書き込みデータ設定:有効期限 write_str += "expires=" + now_date.toGMTString() + ";"; } write_str += "path=/;"; // Cookieに書き出し document.cookie = write_str; // alert( write_str ) ; return; } // Cookieの削除 // @param string key_str キー function cookie_delete( key_str ) { var write_str; // 書き込み文字列 var now_date; // 現在日時 // 現在の日時取得 now_date = new Date(); // Cookie 文字列設定 write_str = key_str + "=;expires=" + now_date.toGMTString(); // Cookie に書き出し document.cookie = write_str; } // クッキーのキー文字列作成 // @param string user_id ユーザID // @param int suffix サフィックス番号 // @return string キー文字列 function cookie_key_make( user_id, suffix ) { var key_str; // キー文字列 // ベース文字列設定 key_str = COOKIE_KEY_BASE_STR; // ユーザID追加 key_str += user_id; // 10以下の時は0追加 if( suffix < 10 ) { key_str += '0'; } // サフィックス番号追加 key_str += suffix; return key_str; } // クッキーからカート情報全取得 // @param string user_id ユーザID // @return array オーダーリスト配列 function cart_inf_parts_list_cookie_get( user_id ) { var parts_list; // オーダーリスト配列 var oc; // オーダーリストカウンタ var key_str; // キー文字列 var value_str; // データ文字列 var value_array; // データ配列 // カート情報配列作成 parts_list = new Array(); // cookieからカート情報取得 for ( oc = 0; oc < ORDER_MAX; oc++ ) { // キー作成 key_str = cookie_key_make( user_id, oc ); // データ取得 value_str = cookie_read( key_str ); if ( value_str != '' ) { // データをパーツ番号[0]と注文数[1]にスプリット value_array = value_str.split('_'); // オーダーリスト配列に設定 parts_list[value_array[0]] = value_array[1]; } } return parts_list; } // クッキーからカート情報全削除 // @param string user_id ユーザID // @return array オーダーリスト配列 function cart_inf_parts_list_cookie_del( user_id ) { var oc; // オーダーリストカウンタ var key_str; // キー文字列 // cookieからカート情報取得 for ( oc = 0; oc < ORDER_MAX; oc++ ) { // キー作成 key_str = cookie_key_make( user_id, oc ); // データ取得 cookie_delete( key_str ); } return; } // クッキーにカート情報書き込み // @param string user_id ユーザID // @param array parts_list パーツリスト配列 function cart_inf_parts_list_cookie_set( user_id, parts_list ) { var suffix; // サフィックス番号 var key_str; // キー文字列 var value_str; // データ文字列 var value_array; // データ配列 // 初期化 suffix = 0; // cookieにリスト情報全書き込み for ( var pc in parts_list ) { // オーダー数が0のものは書き込まない(削除) if ( parts_list[pc] > 0 ) { // キー作成 key_str = cookie_key_make( user_id, suffix ); // データ作成 value_str = pc + '_' + parts_list[pc]; // クッキー書き込み cookie_write( key_str, value_str, 0 ); // サフィックスインクリメント suffix++; } } // 不要キー削除 for ( var oc = suffix; oc < ORDER_MAX; oc++ ) { // キー作成 key_str = cookie_key_make( user_id, suffix ); // クッキー書き込み cookie_write( key_str, value_str, -1 ); // サフィックスインクリメント suffix++; } return; } // カート画面-Coookie間データI/F // カート情報全取得 // @return パーツリスト function cart_inf_parts_list_get() { return v_parts_list; } // カート情報数取得 // @return パーツリス数 function cart_inf_parts_list_cnt_get() { return array_cnt_get( v_parts_list ); } // カート情報にパーツ注文数取得 // @param string parts_no パーツ番号 // @return パーツ注文数 function cart_inf_parts_order_cnt_get( parts_no ) { return v_parts_list[parts_no]; } // カート情報にパーツ注文数設定取得 // @param string parts_no パーツ番号 // @param int order_cnt パーツ注文数 function cart_inf_parts_order_cnt_set( parts_no, order_cnt ) { v_parts_list[parts_no] = order_cnt; } // カート情報から指定パーツ削除 // @param string parts_no パーツ番号 function cart_inf_parts_delete( parts_no ) { var parts_list_wk; // ワークにコピー parts_list_wk = v_parts_list; // カート情報再構築 v_parts_list = new Array(); // cookieにリスト情報全書き込み for ( var pc in parts_list_wk ) { // 削除対象以外をコピー if ( pc != parts_no ) { v_parts_list[pc] = parts_list_wk[pc]; } } return; } // カート画面I/F //////////////////////////////////////////////////////////////////// // メッセージ初期化処理 function dsp_cart_message_init( ) { var div_type; var elms = document.getElementsByTagName("span"); for ( var ec = 0; ec < elms.length; ec++ ) { div_type = elms[ec].getAttribute('div_type'); // if ( div_type == 'add_message' || div_type == 'change_message') { if ( div_type == 'add_message' || div_type == 'fail_message' || div_type == 'cnt_over_message' || div_type == 'change_message') { elms[ec].style.display='none'; } } return; } // メッセージ設定処理 // @param string type メッセージ種類 // @param string parts_no メッセージ表示対象パーツ番号 // @param string sub_id サブID function dsp_cart_message_show( type, parts_no, sub_id ) { var div_id; var div_elm div_id = type + '_'+ parts_no + sub_id; div_elm = document.getElementById( div_id ); if ( div_elm != null ) { div_elm.style.display=''; } return; } // カートに入れるボタンクリック処理 // @param string user_id ユーザID // @param string table_id tableタグのID // @param string form_name form名称 // @param string parts_no パーツ番号 // @param string parts_name パーツ名称 // @param string parts_sub_name パーツサブ名称 // @param string parts_price 単価 function dsp_cart_add_click( user_id, table_id, form_name, parts_no, parts_name, parts_sub_name, parts_price, package_mess, sub_id , img_elm ) { var order_cnt; // 注文数 var package_num; // 単位数 var order_cnt_elm; // 注文数エレメント var order_cnt_id; // 注文数エレメントID var irc = 0; // 戻り値 // カート追加メッセージ初期化 dsp_cart_message_init(); // 注文数エレメントID設定 order_cnt_id = form_name + '_order_cnt' + sub_id; // 注文数エレメント取得 order_cnt_elm = document.getElementById( order_cnt_id ); // 注文数取得 order_cnt = Number( order_cnt_elm.value ); // 単位数 package_num = Number( order_cnt_elm.getAttribute('package_num') ); if ( order_cnt > 0 ) { // カート追加処理 irc = dsp_cart_add( table_id, parts_no, order_cnt, parts_name, parts_sub_name, parts_price, package_num, package_mess ); if (irc == 0) { // カート追加メッセージ表示 dsp_cart_message_show('add_message', parts_no, sub_id); } else if ( irc == -1 ) { // カート追加失敗メッセージ表示 dsp_cart_message_show('fail_message', parts_no, sub_id); } else if ( irc == -2 ) { // カート追加失敗メッセージ表示 dsp_cart_message_show( 'cnt_over_message', parts_no, sub_id ); } // カート表示設定完了後処理 dsp_cart_last_process( user_id, table_id ); } // 注文数取得 order_cnt_elm.value = 1; return; } //カートに入れるボタンクリック処理 //@param string user_id ユーザID //@param string table_id tableタグのID //@param string form_name form名称 //@param string parts_no パーツ番号 //@param string parts_name パーツ名称 //@param string parts_sub_name パーツサブ名称 //@param string parts_price 単価 function dsp_cart_add_click_submit( user_id, table_id, form_name, parts_no, parts_name, parts_sub_name, parts_price, package_mess, sub_id , img_elm ) { var order_cnt; // 注文数 var package_num; // 単位数 var order_cnt_elm; // 注文数エレメント var order_cnt_id; // 注文数エレメントID var irc = 0; // 戻り値 // カート追加メッセージ初期化 dsp_cart_message_init(); // 注文数エレメントID設定 order_cnt_id = form_name + '_order_cnt' + sub_id; // 注文数エレメント取得 order_cnt_elm = document.getElementById( order_cnt_id ); // 注文数取得 order_cnt = Number( order_cnt_elm.value ); // 単位数 package_num = Number( order_cnt_elm.getAttribute('package_num') ); if ( order_cnt > 0 ) { // カート追加処理 irc = dsp_cart_add_submit( user_id, parts_no, order_cnt, parts_name, parts_sub_name, parts_price, package_num, package_mess ); if (irc == 0) { // カート追加メッセージ表示 dsp_cart_message_show('add_message', parts_no, sub_id); } else if ( irc == -1 ) { // カート追加失敗メッセージ表示 dsp_cart_message_show('fail_message', parts_no, sub_id); } else if ( irc == -2 ) { // カート追加失敗メッセージ表示 dsp_cart_message_show( 'cnt_over_message', parts_no, sub_id ); } // カート表示設定完了後処理 // dsp_cart_last_process( user_id, table_id ); // ページ遷移 top.Main.location.href='/lc/parts_catalog/view/' ; } // 注文数取得 // order_cnt_elm.value = 1; return; } // 画像をカートにドラッグで追加処理 // @param string user_id ユーザID // @param string table_id tableタグのID // @param string form_name form名称 // @param string parts_no パーツ番号 // @param string parts_name パーツ名称 // @param string parts_sub_name パーツサブ名称 // @param string parts_price 単価 // @param string package_num 単位数 function dsp_cart_add_drag( user_id, table_id, parts_no, parts_name, parts_sub_name, parts_price, package_num, package_mess, sub_id ) { var order_cnt; // オーダー数 var irc = 0; // 戻り値 // カート追加メッセージ初期化 dsp_cart_message_init(); // オーダー数設定 order_cnt = 1; // カート追加処理 irc = dsp_cart_add( table_id, parts_no, order_cnt, parts_name, parts_sub_name, parts_price, package_num, package_mess ); if ( irc == 0 ) { // カート追加メッセージ表示 dsp_cart_message_show( 'add_message', parts_no, sub_id ); } else if ( irc == -1 ) { // カート追加メッセージ表示 dsp_cart_message_show( 'fail_message', parts_no, sub_id ); } else if ( irc == -2 ) { // カート追加メッセージ表示 dsp_cart_message_show( 'cnt_over_message', parts_no, sub_id ); } // カート表示設定完了後処理 dsp_cart_last_process( user_id, table_id ); return; } // 画像をカートからドラッグで削除処理 // @param string user_id ユーザID // @param string table_id tableタグのID // @param string form_name form名称 // @param string parts_no パーツ番号 // @param string parts_name パーツ名称 // @param string parts_sub_name パーツサブ名称 // @param string parts_price 単価 // @param string package_num 単位数 function dsp_cart_del_drag( user_id, table_id, parts_no, parts_name, parts_sub_name, parts_price, package_num, package_mess, sub_id ) { var order_cnt; // オーダー数 // カート追加メッセージ初期化 dsp_cart_message_init(); // オーダー数設定 order_cnt = -9999 ; // カート追加処理 dsp_cart_add( table_id, parts_no, order_cnt, parts_name, parts_sub_name, parts_price, package_num, package_mess ); // カート追加メッセージ表示 dsp_cart_message_show( 'change_message', parts_no, sub_id ); // カート表示設定完了後処理 dsp_cart_last_process( user_id, table_id ); return; } // 数量変更ボタンクリック処理 // @param string user_id ユーザID // @param string table_id tableタグのID // @param object this_elm 関数呼び出し元エレメント function dsp_cart_cnt_change_click( user_id, table_id, this_elm ) { var parent_tr_elm; // 親TRエレメント var parts_no; // パーツ番号 var package_num; // 単位数 var pack_order_cnt ; var pack_order_cnt_base; var pack_max_cnt ; var base_order_cnt; // 元の注文数 var order_cnt; // 注文数 var order_cnt_elm; // 注文数エレメント var order_cnt_id; // 注文数エレメントID // 数量変更メッセージ初期化 dsp_cart_message_init(); parent_tr_elm = elm_parent_search( this_elm, 'TR' ); if ( parent_tr_elm != null ) { if ( parent_tr_elm.id != ( table_id + '_base' ) ) { // パーツ番号取得 parts_no = parent_tr_elm.id.substr( parent_tr_elm.id.length-9, 9 ); // 注文数エレメントID設定 order_cnt_id = parent_tr_elm.id + '_order_cnt'; // 注文数エレメント取得 order_cnt_elm = document.getElementById( order_cnt_id ); // 注文数取得 order_cnt = Number( order_cnt_elm.value ); if ( order_cnt == 0 ) { // trエレメント削除 parent_tr_elm.parentNode.deleteRow( parent_tr_elm.sectionRowIndex ); // カート情報からパーツ削除 cart_inf_parts_delete( parts_no ); // カート表示設定完了後処理 dsp_cart_last_process( user_id, table_id ); } else if ( order_cnt > 0 ) { // 数量変更有無チェック base_order_cnt = cart_inf_parts_order_cnt_get( parts_no ); if ( isNaN( order_cnt ) ) { order_cnt = base_order_cnt ; } if ( base_order_cnt != order_cnt ) { // 単位数 package_num = Number( order_cnt_elm.getAttribute('package_num') ); pack_order_cnt = Number( order_cnt ) * package_num; pack_order_cnt_base = base_order_cnt * package_num; pack_max_cnt = parseInt( ( 9999 / package_num ) ) * package_num ; if ( pack_order_cnt > pack_max_cnt ) { order_cnt = parseInt( ( 9999 / package_num ) ) ; order_cnt_elm.value = order_cnt; // 上限オーバー表示 dsp_cart_message_show('fail_message', parts_no, ''); } if (base_order_cnt != order_cnt) { // カート情報に注文数設定 cart_inf_parts_order_cnt_set(parts_no, order_cnt); // 数量変更表示 dsp_cart_message_show('change_message', parts_no, ''); } } // カート表示設定完了後処理 dsp_cart_last_process( user_id, table_id ); } else { // 入力前のデータに戻す order_cnt_elm.value = cart_inf_parts_order_cnt_get( parts_no ); } } } return; } // カート追加処理 // @param string table_id tableタグのID // @param string parts_no パーツ番号 // @param string order_cnt 注文数 // @param string parts_name パーツ名称 // @param string parts_sub_name パーツサブ名称 // @param string parts_price 単価 // @param string package_num 単位数 // @return int 戻り値(0:成功,-1以下:失敗) function dsp_cart_add( table_id, parts_no, order_cnt, parts_name, parts_sub_name, parts_price, package_num, package_mess ) { var table_elm; // tableエレメント var tr_elm; var irc; var status = 0; // tableエレメント取得 table_elm = document.getElementById( table_id ); if ( table_elm != null ) { // 指定パーツが既にカートにあるかチェック tr_elm = dsp_cart_parts_tr_get( table_elm, parts_no ); if ( tr_elm != null ) { // 数量追加 irc = dsp_cart_parts_cnt_add( tr_elm, parts_no, order_cnt, package_num ); if (irc != 0) { // 数量追加不可 status = -1; } } else { // カート最大数チェック if ( cart_inf_parts_list_cnt_get() < ORDER_MAX ) { // 新規tr追加 irc = dsp_cart_parts_add(table_elm, parts_no, order_cnt, parts_name, parts_sub_name, parts_price, package_num, package_mess); if (irc != 0) { // 数量追加不可 status = -1; } } else { // カート最大数オーバー status = -2; } } } return status; } //カート追加処理 //@param string table_id tableタグのID //@param string parts_no パーツ番号 //@param string order_cnt 注文数 //@param string parts_name パーツ名称 //@param string parts_sub_name パーツサブ名称 //@param string parts_price 単価 //@param string package_num 単位数 //@return int 戻り値(0:成功,-1以下:失敗) function dsp_cart_add_submit( user_id, parts_no, order_cnt, parts_name, parts_sub_name, parts_price, package_num, package_mess ) { var irc; var status = 0; var parts_list = cart_inf_parts_list_cookie_get( user_id ) ; var parts_cnt = array_cnt_get( parts_list ) ; var parts_order_max = parseInt( 9999 / Number(package_num) ) ; if ( parts_cnt != undefined ) { var parts_old_cnt = cart_inf_parts_order_cnt_get( parts_no ) ; } else { var parts_old_cnt = 0 ; } // tableエレメント取得 //table_elm = document.getElementById( table_id ); // alert( parts_no + ':' + parts_cnt + ':' + parts_old_cnt ); //if ( table_elm != null ) { if ( parts_cnt < ORDER_MAX ) { // 指定パーツが既にカートにあるかチェック // tr_elm = dsp_cart_parts_tr_get( table_elm, parts_no ); if ( parts_cnt == 0 ) { if ( Number(order_cnt) < parts_order_max ) { // 数量追加 cart_inf_parts_order_cnt_set( parts_no, order_cnt ) ; } else { // カート最大数オーバー cart_inf_parts_order_cnt_set( parts_no, parts_order_max ) ; } } else { if ( parts_old_cnt == undefined ) { check_cnt = Number(order_cnt) ; } else { check_cnt = Number(parts_old_cnt) + Number(order_cnt) ; } // カート最大数チェック if ( check_cnt < parts_order_max ) { // 新規tr追加 cart_inf_parts_order_cnt_set( parts_no, check_cnt ) ; } else { // カート最大数オーバー cart_inf_parts_order_cnt_set( parts_no, parts_order_max ) ; } } parts_list = cart_inf_parts_list_get() ; cart_inf_parts_list_cookie_set( user_id, parts_list ) ; //} } else { // 品種数オーバー status = -1 ; } // alert( parts_no + ':' + parts_cnt + ':' + parts_old_cnt ); return status; } // 指定パーツ番号のtr取得処理 // @param object table_elm tableエレメント // @param string parts_no パーツ番号 // @return object trエレメント function dsp_cart_parts_tr_get( table_elm, parts_no ) { var tr_elm; // trエレメント var tr_id; // trエレメントID // trエレメントID設定 tr_id = table_elm.id + '_' + parts_no; // trエレメント取得 tr_elm = document.getElementById( tr_id ); return tr_elm; } // カート数量追加 // @param object tr_elm trエレメント // @param string parts_no パーツ番号 // @param int order_cnt 注文数 // @param string package_num 単位数 function dsp_cart_parts_cnt_add( tr_elm, parts_no, order_cnt, package_num ) { var order_cnt_elm; // 注文数エレメント(inputタグ) var order_cnt_id; // 注文数エレメントID(inputタグ) var order_cnt_base; // すでにカートに入っている注文数 var order_cnt_sum; // 注文数合計 var pack_order_cnt ; var pack_order_cnt_base; var pack_order_cnt_sum ; var pack_max_cnt ; var package_num_int ; var status = 0; // 注文数エレメントID設定 order_cnt_id = tr_elm.id + '_order_cnt'; // 注文数エレメント取得 order_cnt_elm = document.getElementById( order_cnt_id ); // 現在設定値取得 package_num_int = Number(package_num); order_cnt_base = Number(cart_inf_parts_order_cnt_get( parts_no )); order_cnt_sum = order_cnt_base + Number(order_cnt); pack_order_cnt = Number(order_cnt) * package_num_int; pack_order_cnt_base = order_cnt_base * package_num_int; pack_order_cnt_sum = pack_order_cnt_base + pack_order_cnt; // 注文数チェック if ( pack_order_cnt_sum > 0 ) { pack_max_cnt = parseInt( ( 9999 / package_num_int ) ) * package_num_int ; // 9999件以上になる時は追加不可 if ( pack_order_cnt_base < pack_max_cnt || order_cnt < 0 ) { if ( pack_order_cnt_sum > pack_max_cnt) { order_cnt_sum = parseInt( ( 9999 / package_num_int ) ) ; status = -1; } // 注文数変更 order_cnt_elm.value = order_cnt_sum; // カート情報にパーツ注文数設定 cart_inf_parts_order_cnt_set(parts_no, order_cnt_sum); } else { // 追加不可 status = -1; } } else { // trエレメント削除 tr_elm.parentNode.deleteRow( tr_elm.sectionRowIndex ); // カート情報からパーツ削除 cart_inf_parts_delete( parts_no ); } return status; } // 新規パーツtr追加 // @param object table_elm tableエレメント // @param string parts_no パーツ番号 // @param string order_cnt 注文数 // @param string parts_name パーツ名称 // @param string parts_sub_name パーツサブ名称 // @param string parts_price 単価 // @param string package_num 単位数 function dsp_cart_parts_add( table_elm, parts_no, order_cnt, parts_name, parts_sub_name, parts_price, package_num, package_mess ) { var base_tr_elm; // コピー元trエレメント var base_tr_id; // コピー元trエレメントID var copy_tr_elm; // コピー先trエレメント var copy_tr_id; // コピー元trエレメントID var add_tr_elm; // 追加したtrエレメント var status = 0; var pack_order_cnt ; var pack_max_cnt ; var package_num_int ; package_num_int = Number(package_num); pack_order_cnt = Number(order_cnt) * package_num_int; pack_max_cnt = parseInt( ( 9999 / package_num_int ) ) * package_num_int ; if ( pack_order_cnt > pack_max_cnt) { order_cnt = parseInt( ( 9999 / package_num_int ) ) ; status = -1; } // コピー元trエレメントID設定 base_tr_id = table_elm.id + '_base'; // trエレメント取得 base_tr_elm = document.getElementById( base_tr_id ); if ( base_tr_elm != null ) { // trエレメントコピー copy_tr_elm = dsp_cart_parts_tr_elm_copy( table_elm.id, base_tr_elm, parts_no, order_cnt, parts_name, parts_sub_name, parts_price, package_num, package_mess ); // コピーtrエレメントをtableに追加 add_tr_elm = dsp_cart_parts_tr_elm_add( table_elm, copy_tr_elm ); // ドラッグ&ドロップ用マウスダウンイベント設定 dsp_cart_parts_tr_drag_event_set( add_tr_elm ); // カート情報追加 cart_inf_parts_order_cnt_set( parts_no, order_cnt ); } return status; } // tableエレメントにtrエレメント追加 // @param object table_elm_id tableエレメントID // @param object base_tr_elm trエレメント // @param string parts_no パーツ番号 // @param string order_cnt 注文数 // @param string parts_name パーツ名称 // @param string parts_sub_name パーツサブ名称 // @param string parts_price 単価 // @return object trエレメント function dsp_cart_parts_tr_elm_add( table_elm, add_tr_elm ) { var tr_elm; var order_cnt_elm; var add_order_cnt_elm; // IE if ( document.all ) { tr_elm = table_elm.appendChild(add_tr_elm); } else if (document.getElementsByTagName) { // FireFox tr_elm = table_elm.insertRow(-1); tr_elm.id = add_tr_elm.id; tr_elm.innerHTML = add_tr_elm.innerHTML; order_cnt_elm = elm_child_search( tr_elm, tr_elm.id + '_order_cnt' ); add_order_cnt_elm = elm_child_search( add_tr_elm, add_tr_elm.id + '_order_cnt' ); order_cnt_elm.value = add_order_cnt_elm.value; } return tr_elm; } // trエレメント値設定 // @param object table_elm_id tableエレメントID // @param object base_tr_elm trエレメント // @param string parts_no パーツ番号 // @param string order_cnt 注文数 // @param string parts_name パーツ名称 // @param string parts_sub_name パーツサブ名称 // @param string parts_price 単価 // @param string package_num 単位数 // @param string package_mess 単位数確認メッセージ // @return object trエレメント function dsp_cart_parts_tr_elm_copy( table_elm_id, base_tr_elm, parts_no, order_cnt, parts_name, parts_sub_name, parts_price, package_num, package_mess ) { var copy_tr_elm; // コピーtrエレメント var base_parts_no_id; // パーツ番号エレメントID var base_order_cnt_id; // 注文数エレメントID var base_name_dummy_id; // ダミー名称エレメントID var base_name_id; // 名称エレメントID var base_price_id; // 単価エレメントID var base_package_mess_id; // 単位数確認メッセージエレメントID var base_drag_img_id; // ドラッグ用画像エレメント var base_message_id; // メッセージ表示用エレメント var base_fail_message_id; // メッセージ表示用エレメント var copy_parts_no_id; // パーツ番号エレメントID var copy_order_cnt_id; // 注文数エレメントID var copy_name_dummy_id; // ダミー名称エレメントID var copy_name_id; // 名称エレメントID var copy_price_id; // 単価エレメントID var copy_package_mess_id; // 単位数確認メッセージエレメントID var copy_drag_img_id; // ドラッグ用画像エレメントID var copy_message_id; // メッセージ表示用エレメントID var copy_fail_message_id; // メッセージ表示用エレメントID var parts_no_elm; // パーツ番号エレメント var order_cnt_elm; // 注文数エレメント var name_dummy_elm; // ダミー名称エレメント var name_elm; // 名称エレメント var price_elm; // 単価エレメント var package_mess_elm; // 単位数確認メッセージエレメント var drag_img_elm; // ドラッグ用画像エレメント var message_elm; // メッセージ表示用エレメント var fail_message_elm; // メッセージ表示用エレメント var parent_font_elm; // 名称エレメントの親fontタグ var parent_a_elm; // ドラッグ用画像エレメントの親aタグ // trエレメントコピー copy_tr_elm = base_tr_elm.cloneNode(true); // コピーtrエレメント用ID設定 copy_tr_elm.id = table_elm_id + '_' + parts_no; // コピーtrエレメント表示設定 copy_tr_elm.style.display = "block"; // 各エレメントID作成 base_parts_no_id = base_tr_elm.id + '_parts_no'; base_order_cnt_id = base_tr_elm.id + '_order_cnt'; base_name_dummy_id = base_tr_elm.id + '_name_dummy'; base_name_id = base_tr_elm.id + '_name'; base_price_id = base_tr_elm.id + '_price'; base_package_mess_id = base_tr_elm.id + '_package_mess'; base_drag_img_id = base_tr_elm.id + '_drag_img'; base_message_id = 'change_message_base'; base_fail_message_id = 'fail_message_base'; copy_parts_no_id = copy_tr_elm.id + '_parts_no'; copy_order_cnt_id = copy_tr_elm.id + '_order_cnt'; copy_name_dummy_id = copy_tr_elm.id + '_name_dummy'; copy_name_id = copy_tr_elm.id + '_name'; copy_price_id = copy_tr_elm.id + '_price'; copy_package_mess_id = copy_tr_elm.id + '_package_mess'; copy_drag_img_id = copy_tr_elm.id + '_drag_img'; copy_message_id = 'change_message_' + parts_no; copy_fail_message_id = 'fail_message_' + parts_no; // コピーtrエレメントから子ノード取得 parts_no_elm = elm_child_search( copy_tr_elm, base_parts_no_id ); order_cnt_elm = elm_child_search( copy_tr_elm, base_order_cnt_id ); name_dummy_elm = elm_child_search( copy_tr_elm, base_name_dummy_id ); name_elm = elm_child_search( copy_tr_elm, base_name_id ); price_elm = elm_child_search( copy_tr_elm, base_price_id ); package_mess_elm = elm_child_search( copy_tr_elm, base_package_mess_id ); drag_img_elm = elm_child_search( copy_tr_elm, base_drag_img_id ); message_elm = elm_child_search( copy_tr_elm, base_message_id ); fail_message_elm = elm_child_search( copy_tr_elm, base_fail_message_id ); // パーツ番号エレメント設定 parts_no_elm.id = copy_parts_no_id; parts_no_elm.innerHTML = parts_no; // 注文数エレメント設定 order_cnt_elm.id = copy_order_cnt_id; order_cnt_elm.value = order_cnt; order_cnt_elm.setAttribute( 'package_num', package_num ); // ダミー名称エレメント設定 name_dummy_elm.parentNode.style.display = 'none'; parent_font_elm = elm_parent_search( name_dummy_elm, 'FONT' ); parent_font_elm.style.display = 'none'; // 名称エレメント設定 name_elm.id = copy_name_id; name_elm.innerHTML = parts_name + parts_sub_name; // 名称エレメントの親fontタグ検索 parent_font_elm = elm_parent_search( drag_img_elm, 'FONT' ); parent_font_elm.style.display = ''; // 単価エレメント設定 price_elm.id = copy_price_id; //if (base_price_id > 1) { if ( Number( parts_price.replace(/\,/g,'') ) > 0 ) { if ( Number( parts_price.replace(/\,/g,'') ) != 1 ) { price_elm.innerHTML = parts_price + '円'; } else { price_elm.innerHTML = 'お問合せください'; } } else { price_elm.innerHTML = 'お問合せください'; } // 単位数確認メッセージエレメント設定 package_mess_elm.id = copy_package_mess_id; package_mess_elm.innerHTML = package_mess; // ドラッグ用画像エレメント設定 drag_img_elm.id = copy_drag_img_id; drag_img_elm.setAttribute( 'drag_id' , parts_no + '-cart'); drag_img_elm.setAttribute( 'drag_parts_no' , parts_no ); drag_img_elm.setAttribute( 'drag_parts_name' , parts_name ); drag_img_elm.setAttribute( 'drag_parts_sub_name' , parts_sub_name ); drag_img_elm.setAttribute( 'drag_parts_price' , parts_price ); drag_img_elm.setAttribute( 'drag_parts_package_num' , package_num ); drag_img_elm.setAttribute( 'drag_parts_package_mess', package_mess ); drag_img_elm.style.display = ''; // メッセージ表示用エレメントID設定 message_elm.id = copy_message_id; fail_message_elm.id = copy_fail_message_id; // ドラッグ用画像エレメントの親aタグ検索 parent_a_elm = elm_parent_search( drag_img_elm, 'A' ); parent_a_elm.href = parent_a_elm.href + parts_no; return copy_tr_elm; } // trエレメント値設定 // @param object tr_elm trエレメント function dsp_cart_parts_tr_drag_event_set( tr_elm ) { var drag_img_id; // ドラッグ用画像エレメント var drag_img_elm; // ドラッグ用画像エレメント // 各エレメントID作成 drag_img_id = tr_elm.id + '_drag_img'; // コピーtrエレメントから子ノード取得 drag_img_elm = elm_child_search( tr_elm, drag_img_id ); // マウスイベント設定 drag_img_elm.onmousedown = dd_onMouseDown; return; } // カート表示最終処理 // @param string user_id 検索対象エレメント // @param string table_id 検索エレメントID function dsp_cart_last_process( user_id, table_id ) { var parts_list; // パーツリスト var parts_list_cnt; // パーツリスト数 var base_tr_id; // ベースtrエレメントID var base_tr_elm; // ベースtrエレメント // パーツリスト取得 parts_list = cart_inf_parts_list_get(); // ベースtrエレメント取得 base_tr_id = table_id + '_base'; base_tr_elm = document.getElementById( base_tr_id ); // POST情報設定 dsp_cart_post_data_set( table_id, parts_list ); // パーツリスト数取得 parts_list_cnt = array_cnt_get( parts_list ); // パーツリスト数チェック // alert( parts_list_cnt ) ; if ( parts_list_cnt > 0 ) { // ベースtrは非表示 base_tr_elm.style.display = "none"; } else { // ベースtr表示 base_tr_elm.style.display = "block"; } // 小計再計算 dsp_cart_total_price_calc( user_id, table_id ); // Cookie設定 cart_inf_parts_list_cookie_set( user_id, parts_list ); // 購入画面へボタン表示設定 dsp_cart_order_btn_set( table_id ); // ドロップ位置再設定 // dd_pos_init(); return; } // POST情報再設定 // @param string table_id 検索エレメントID function dsp_cart_post_data_set( table_id, parts_list ) { var post_tr_elm; // POST用trエレメント var post_parts_no_elm; // POST用パーツ番号エレメント var post_order_cnt_elm; // POST用注文数エレメント var post_cart_list_cnt_elm; // POST用カートリスト数 var post_tr_id; // POST用trエレメントID var suffix; var parts_list_cnt; // パーツリスト数 var counter; // パーツリスト数 // POST用trエレメント用ID設定 post_tr_id = table_id + '_post_data'; post_tr_elm = document.getElementById( post_tr_id ); if (post_tr_elm != null) { // 元情報削除 dsp_cart_post_data_delete(); // パーツリスト数取得 parts_list_cnt = array_cnt_get(parts_list); // パーツリスト数チェック if (parts_list_cnt > 0) { counter = 0; post_cnt = 0; // カートリスト for (var pc in parts_list) { post_cnt = counter + 1; suffix = ''; // エレメント生成 post_parts_no_elm = document.createElement('input'); post_order_cnt_elm = document.createElement('input'); // サフィックス作成 if (post_cnt < 10) { suffix = '0'; } suffix +=post_cnt; // 名称設定 post_parts_no_elm.name = 'APO_HSC' + suffix; post_order_cnt_elm.name = 'PPO_HSS' + suffix; post_parts_no_elm.id = 'APO_HSC' + suffix; post_order_cnt_elm.id = 'PPO_HSS' + suffix; post_parts_no_elm.type = 'hidden'; post_order_cnt_elm.type = 'hidden'; post_parts_no_elm.value = pc; post_order_cnt_elm.value = parts_list[pc]; // POST用trの子ノードに設定 post_tr_elm.appendChild(post_parts_no_elm); post_tr_elm.appendChild(post_order_cnt_elm); // カウンタインクリメント counter++; } // カートリスト数定 post_cart_list_cnt_elm = document.createElement('input'); post_cart_list_cnt_elm.name = 'PPO_ADD1'; post_cart_list_cnt_elm.id = 'PPO_ADD1'; post_cart_list_cnt_elm.type = 'hidden'; post_cart_list_cnt_elm.value = counter; // POST用trの子ノードに設定 post_tr_elm.appendChild(post_cart_list_cnt_elm); } } return; } // POST情報削除 function dsp_cart_post_data_delete() { var post_parts_no_name; // POST用パーツ番号エレメント var post_order_cnt_name; // POST用注文数エレメント var post_cart_list_cnt_name; // POST用カートリスト数 var post_parts_no_elm; // POST用パーツ番号エレメント var post_order_cnt_elm; // POST用注文数エレメント var post_cart_list_cnt_elm; // POST用カートリスト数 var suffix; var parts_list_cnt; // パーツリスト数 // カートリスト for (var pc = 0; pc < ORDER_MAX; pc++ ) { suffix = ''; // サフィックス作成 if ( pc < 10) { suffix = '0'; } suffix += pc; // 名称設定 post_parts_no_name = 'APO_HSC' + suffix; post_order_cnt_name = 'PPO_HSS' + suffix; // POST用エレメント取得 post_parts_no_elm = document.getElementById( post_parts_no_name ); post_order_cnt_elm = document.getElementById( post_order_cnt_name ); // POST用エレメント削除 if( post_parts_no_elm != null ) { post_parts_no_elm.parentNode.removeChild( post_parts_no_elm ); } if (post_order_cnt_elm != null ) { post_order_cnt_elm.parentNode.removeChild(post_order_cnt_elm); } } // カートリスト数エレメント取得 post_cart_list_cnt_name = 'PPO_ADD1'; post_cart_list_cnt_elm = document.getElementById( post_cart_list_cnt_name ); // カートリスト数エレメント削除 if (post_cart_list_cnt_elm != null ) { post_cart_list_cnt_elm.parentNode.removeChild( post_cart_list_cnt_elm ); } return; } // 小計再計算 // @param string table_id 検索エレメントID // @return object 検索結果エレメント function dsp_cart_total_price_calc( user_id, table_id ) { var total_price_id; var total_price_elm; var base_tr_id; // ベースtrエレメントID var base_tr_elm; // ベースtrエレメント var tr_id; var tr_elm; var order_cnt_id; var order_cnt_elm; var price_id; var price_elm; var parts_list; var parts_list_cnt; // パーツリスト数 var order_cnt_int; var pack_order_cnt_int ; var pack_max_cnt ; var total_order_count ; var price_int; var package_num_int; var total_price; var total_price_str; // cookieデータ作成 key_str = COOKIE_KEY_BASE_STR + user_id ; // ベースtrエレメント取得 base_tr_id = table_id + '_base'; base_tr_elm = document.getElementById( base_tr_id ); // 小計エレメントID取得 total_price_id = table_id + '_total_price'; // 小計エレメント抽出 total_price_elm = document.getElementById( total_price_id ); // カートリスト取得 parts_list = cart_inf_parts_list_get(); // パーツリスト数取得 parts_list_cnt = array_cnt_get( parts_list ); // パーツリスト数チェック if ( parts_list_cnt > 0 ) { // 初期化 total_price = 0 ; total_order_count = 0 ; // カートリスト内の for ( var pc in parts_list ) { // 各エレメントID取得 tr_id = table_id + '_' + pc; order_cnt_id = tr_id + '_order_cnt'; price_id = tr_id + '_price'; // 各エレメント取得 tr_elm = document.getElementById( tr_id ); order_cnt_elm = elm_child_search( tr_elm, order_cnt_id ); price_elm = elm_child_search( tr_elm, price_id ); // 数値変換 order_cnt_int = Number( order_cnt_elm.value ); if ( isNaN( order_cnt_int ) ) { order_cnt_int = Number( parts_list[ pc ] ) ; order_cnt_elm.value = order_cnt_int ; } else { order_cnt_elm.value = order_cnt_int ; } price_int = parseInt( price_elm.innerHTML.replace(/\,/g,'') ); package_num_int = Number( order_cnt_elm.getAttribute('package_num') ); // 最小単位込計算 pack_order_cnt_int = order_cnt_int * package_num_int ; pack_max_cnt = parseInt( ( 9999 / package_num_int ) ) * package_num_int ; // 最小単位込最大数入替え if ( pack_order_cnt_int > pack_max_cnt ) { order_cnt_int = parseInt( ( 9999 / package_num_int ) ) ; order_cnt_elm.value = order_cnt_int ; // 上限オーバー dsp_cart_message_show('fail_message', pc, ''); } // カートの全個数取得 total_order_count = total_order_count + order_cnt_int ; // リストの更新 parts_list[ pc ] = order_cnt_int ; if ( order_cnt_int > 0 ) { // 小計計算 total_price = total_price + ( price_int * order_cnt_int * package_num_int ); } else { // 小計計算 total_price = total_price + 0 ; // trエレメント削除 tr_elm.parentNode.deleteRow( tr_elm.sectionRowIndex ); // カート情報からパーツ削除 cart_inf_parts_delete( pc ); } } if ( total_order_count > 0 ) { if ( total_price > 0 ) { // 3桁カンマ区切り変換 total_price_str = num_comma_split( total_price ); // 合計価格を表示 total_price_elm.innerHTML = total_price_str + '円'; } else { // 合計に「お問合わせください」表示 total_price_elm.innerHTML = 'お問合せください'; } } else { cookie_delete( key_str ); // ベースtr表示 base_tr_elm.style.display = ""; base_tr_elm.style.background = "white" ; // 合計に------表示 total_price_elm.innerHTML = '-----円'; } } else { cookie_delete( key_str ); // ベースtr表示 base_tr_elm.style.display = ""; base_tr_elm.style.background = "white" ; // 合計に------表示 total_price_elm.innerHTML = '-----円'; } return; } // 購入画面へボタン表示設定 // @param string table_id 検索エレメントID // @return object 検索結果エレメント function dsp_cart_order_btn_set( table_id ) { var parts_list; var parts_list_cnt; // パーツリスト数 var order_cnt_int; var input_order_image1_id; // 注文ボタンエレメントID var input_order_image2_id; // 注文ボタンエレメントID var input_order_image1_elm; // 注文ボタンエレメント var input_order_image2_elm; // 注文ボタンエレメント var img_order_image1_id; // 注文ボタン不可エレメントID var img_order_image2_id; // 注文ボタン不可エレメントID var img_order_image1_elm; // 注文ボタン不可エレメント var img_order_image2_elm; // 注文ボタン不可エレメント // 注文ボタンエレメントID取得 input_order_image1_id = table_id + '_input_order1'; input_order_image2_id = table_id + '_input_order2'; img_order_image1_id = table_id + '_img_order1'; img_order_image2_id = table_id + '_img_order2'; // 注文ボタンエレメント抽出 input_order_image1_elm = document.getElementById( input_order_image1_id ); input_order_image2_elm = document.getElementById( input_order_image2_id ); img_order_image1_elm = document.getElementById( img_order_image1_id ); img_order_image2_elm = document.getElementById( img_order_image2_id ); // カートリスト取得 parts_list = cart_inf_parts_list_get(); // パーツリスト数取得 parts_list_cnt = array_cnt_get( parts_list ); // パーツリスト数チェック if ( parts_list_cnt > 0 ) { // 注文可 input_order_image1_elm.style.display = ""; input_order_image2_elm.style.display = ""; img_order_image1_elm.style.display = "none"; img_order_image2_elm.style.display = "none"; } else { // 注文不可 input_order_image1_elm.style.display = "none"; input_order_image2_elm.style.display = "none"; img_order_image1_elm.style.display = ""; img_order_image2_elm.style.display = ""; } return; } // エレメント操作部品 // 対象エレメントから指定IDの子ノード検索 // @param object base_elm 検索対象エレメント // @param string search_id 検索エレメントID // @return object 検索結果エレメント function elm_child_search( base_elm, search_id ) { var cc; var result_elm; // 初期化 result_elm = null; // 子ノード有無チェック if ( base_elm.childNodes.length > 0 ) { // 子ノードを検索 for ( cc = 0; cc < base_elm.childNodes.length; cc++ ) { // 子ノードのIDチェック if ( base_elm.childNodes[cc].id == search_id ) { // 検索結果設定 result_elm = base_elm.childNodes[cc]; break; } else { // 子ノード検索(再帰呼び出し) result_elm = elm_child_search( base_elm.childNodes[cc], search_id ); if ( result_elm != null ) { // 見つけたため、検索終了 break; } } } } return result_elm; } // エレメント操作部品 // 対象エレメントから指定キー,値の子ノード検索 // @param object base_elm 検索対象エレメント // @param string search_key 検索エレメントKEY // @param string search_data 検索エレメント値 // @return object 検索結果エレメント function elm_child_search2( base_elm, search_key, search_data ) { var cc; var result_elm; // 初期化 result_elm = null; // 子ノード有無チェック if ( base_elm.childNodes.length > 0 ) { // 子ノードを検索 for ( cc = 0; cc < base_elm.childNodes.length; cc++ ) { // 子ノードのIDチェック if ( base_elm.childNodes[cc].attributes != null && base_elm.childNodes[cc].getAttribute(search_key) == search_data ) { // 検索結果設定 result_elm = base_elm.childNodes[cc]; break; } else { // 子ノード検索(再帰呼び出し) result_elm = elm_child_search2( base_elm.childNodes[cc], search_key, search_data ); if ( result_elm != null ) { // 見つけたため、検索終了 break; } } } } return result_elm; } // 対象エレメントから指定タグの親ノード検索 // @param object base_elm 検索対象エレメント // @param string search_tag 検索エレメントタグ // @return object 検索結果エレメント function elm_parent_search( base_elm, search_tag ) { var result_elm; var search_elm; // 初期化 result_elm = null; search_elm = base_elm; while ( search_elm.parentNode != null ) { // 親ノードのタグチェック if ( search_elm.parentNode.tagName == search_tag ) { // 検索結果設定 result_elm = search_elm.parentNode; break; } else { search_elm = search_elm.parentNode; } } return result_elm; } // JavaScript汎用部品 // 連想配列用配列数取得関数 // note:JavaScriptでは、連想配列のlengthは当てにならない為、この関数を利用 // @param array array_ 配列 // @return int 配列数 function array_cnt_get( check_array ) { var cnt = 0; for( var key_word in check_array ) { cnt++; } return cnt; } // 数値3桁区切り function num_comma_split( str ) { var to = String( str ); var tmp = ""; while (to != (tmp = to.replace( /^([+-]?\d+)(\d\d\d)/,"$1,$2")) ) { to = tmp; } return to; } //////////////////////////////////////////////////////////////////////////////// // カート処理:END ////////////////////////////////////////////////////////////////////////////////