/**
 * グループ検索画面を呼び出します。
 * 
 * @param frm
 *            フォーム
 * @param act
 *            フォームのアクション
 * @param selected
 *            選択されたグループコード
 */
function display_grSearch(act, selected) {
    var frm = document.getElementById("tab");  
    frm.action = act;
    frm["grcd"].value = selected;
    frm.submit();
}

/**
 * 検索キーワードのチェックを行います。
 * @return
 */
function kubun_check(){
    //1:商品コード 2:製品番号 3:型式名 4:製品名 5:フリーワード
    var kubun = ""; 
    var keyword = "";
    kubun = document.frmKubun.search_sts.value;
    keyword = document.frmKubun.keyword.value;
    
    //入力必須チェック
    if(keyword == "" || keyword == null){
        alert("検索キーワードが設定されていません。");
        document.frmKubun.keyword.focus();
        return false;
    }
    
    //商品コード文字数チェック
    if(kubun == "1" && getDBCSStringByte(keyword) > 5){
        alert("商品コードが長すぎます。");
        document.frmKubun.keyword.focus();
        return false;
    }
    
    //製品番号文字数チェック
    if(kubun == "2" && getDBCSStringByte(keyword) > 9){
        alert("製品番号が長すぎます。");
        document.frmKubun.keyword.focus();
        return false;
    }
    
    //型式名文字数チェック
    if(kubun == "3" && getDBCSStringByte(keyword) > 50){
        alert("型式名が長すぎます。");
        document.frmKubun.keyword.focus();
        return false;
    }
    
    //製品名文字数チェック
    if(kubun == "4" && getDBCSStringByte(keyword) > 100){
        alert("製品名が長すぎます。");
        document.frmKubun.keyword.focus();
        return false;
    }
    
    //フリーワード文字数チェック
    if(kubun == "5" && getDBCSStringByte(keyword) > 40){
        alert("フリーワードが長すぎます。");
        document.frmKubun.keyword.focus();
        return false;
    }
    return true;
}

/**
 * 検索キーワードのチェックを行います(画面中部)。
 * @return
 */
function kubun_check2(){
    //1:商品コード 2:製品番号 3:型式名 4:製品名 5:フリーワード
    var kubun = "";
    var keyword = "";
    kubun = document.frmKubun2.search_sts.value;
    keyword = document.frmKubun2.keyword.value;
    
    //入力必須チェック
    if(keyword == "" || keyword == null){
        alert("検索キーワードが設定されていません。");
        document.frmKubun2.keyword.focus();
        return false;
    }
    
    //商品コード文字数チェック
    if(kubun == "1" && getDBCSStringByte(keyword) > 5){
        alert("商品コードが長すぎます。");
        document.frmKubun2.keyword.focus();
        return false;
    }
    
    //製品番号文字数チェック
    if(kubun == "2" && getDBCSStringByte(keyword) > 9){
        alert("製品番号が長すぎます。");
        document.frmKubun2.keyword.focus();
        return false;
    }
    
    //型式名文字数チェック
    if(kubun == "3" && getDBCSStringByte(keyword) > 50){
        alert("型式名が長すぎます。");
        document.frmKubun2.keyword.focus();
        return false;
    }
    
    //製品名文字数チェック
    if(kubun == "4" && getDBCSStringByte(keyword) > 100){
        alert("製品名が長すぎます。");
        document.frmKubun2.keyword.focus();
        return false;
    }
    
    //フリーワード文字数チェック
    if(kubun == "5" && getDBCSStringByte(keyword) > 40){
        alert("フリーワードが長すぎます。");
        document.frmKubun2.keyword.focus();
        return false;
    }
    var resString = keyword.toUpperCase(); 
    document.frmKubun2.keyword.value = resString;
    return true;      
}

/**
 * 商品一覧（シリーズ、用途）画面を呼び出します。
 * @param act
 *            フォームのアクション
 * @param sgcd
 *            選択されたサブグループコード
 * @param srcd
 *          　選択されたシリーズコード
 * @param srnm
 *          　選択されたシリーズ名
 * @param ytcd
 *          　選択された用途コード
 * @param ctg1
 *          　用途で探す(Y)かシリーズ名で探す(S)か
 * @param ctg2
 *          　用途名、またはサブグループ名
 * @return
 */
function display_shList(act, sgcd, srcd, srnm, ytcd, ctg1, ctg2) {
    var frm = document.getElementById("series");
    frm.action = act;
    frm["sgcd"].value = sgcd;
    frm["srcd"].value = srcd;
    frm["srnm"].value = srnm;
    frm["ytcd"].value = ytcd;
    frm["ctg1"].value = ctg1;
    frm["ctg2"].value = ctg2;
    frm.submit();
}

/**
 * サブグループラジオボタンが選択された時に、
 * チェックされたサブグループコード、サブグループ名を画面のhidden値にセットします。
 * @param sgcd　サブグループコード
 * @param sgnm　サブグループ名
 * @return
 */
function set_sgcd(sgcd, sgnm) {
    var frm = document.getElementById("condition_search");
    frm["sgcd"].value = sgcd;
    frm["sgnm"].value = sgnm;
}

/**
 * チェックボックスのチェックが外されたとき、
 * 該当するセレクトボックスの選択を全解除、
 * または該当するテキストボックスの入力内容をクリアします
 * 
 * @param target　セレクトボックス、またはテキストボックスのname
 * @param check　チェックボックスのname
 * @param mode 1:単一選択、2:複数選択、3:直接入力
 * @return
 */
function cancel_select(target, check, mode){
    //formを取得する
    var frm = document.getElementById("condition_search");
    if(mode == '2'){
        target = target + "[]";
        //チェックボックスにチェックが付いていない場合
        if(!frm.elements[check].checked ){
            //該当するセレクトボックスの選択を全解除する
            frm.elements[target].selectedIndex = -1; 
        }
    }if(mode == '3'){
        //チェックボックスにチェックが付いていない場合
        if(!frm.elements[check].checked ){
            //該当するテキストボックスの中身をクリアする
            frm.elements[target].value = ""; 
        }
    }
}

/* *******************************************************************************/
/* 文字列のバイト数を返す                                                  
/*    str　String    :   対象の文字列                                              
/*                                                                                  
/*  戻り値:                                                                            
/*     バイト数                                                                    
/********************************************************************************/
function getByteLength(str) {
    var r = 0;
    for (var i = 0; i < str.length; i++) {
        var c = str.charCodeAt(i);
        // Shift_JIS: 0x0 ～ 0x80, 0xa0  , 0xa1   ～ 0xdf  , 0xfd   ～ 0xff
        // Unicode  : 0x0 ～ 0x80, 0xf8f0, 0xff61 ～ 0xff9f, 0xf8f1 ～ 0xf8f3       
        if ( (c >= 0x0 && c < 0x81) || (c == 0xf8f0) || (c >= 0xff61 && c < 0xffa0) || (c >= 0xf8f1 && c < 0xf8f4)) {
            r += 1;
        } else {
            r += 2;
        }
    }
    return r;
}

/* *******************************************************************************/
/* シフトコードを含む、全角、半角混在の文字列のバイト数を返す                                */
/*    str　String    :   対象の文字列                                                                        */
/*  戻り値:                                                                                                */
/*     バイト数                                                                                         */
/* *******************************************************************************/
function getDBCSStringByte(str){
    var curChByte = 0;
    var prevChByte = 0;
    var len = 0;
    for(i = 0 ; i < str.length ; i++){
        ch = str.charAt(i);
        curChByte = getByteLength(ch);
        
        if(curChByte == 1){
            if(prevChByte == 2){
                len = len + 2;
            }else
            if(prevChByte == 1){
                len = len + 1;
            }else
            if(prevChByte == 0){
                len = len + 1;
            }
        }else
        if(curChByte == 2){
            if(prevChByte == 2){
                len = len + 2;
            }else
            if(prevChByte == 1){
                len = len + 3;
            }else
            if(prevChByte == 0){
                len = len + 2;
                //文字列最初のシフトコード
                len = len + 1;
            }
            
            //文字列最後のシフトコード
            if(i == str.length - 1){
                len = len + 1;
            }
        }
        prevChByte = curChByte;
    }
    return len;
}

/**
 * セレクトボックスの値が変更されたとき、
 * 対応するチェックボックスにチェックをつけます。
 * @param select_check チェックボックスのname
 * @return
 */
function select_change(select_check) {
    var frm = document.getElementById("condition_search");
    if(!frm.elements[select_check].checked ){
        frm.elements[select_check].checked = true;
    }
}