/*
 * This file is part of EC-CUBE
 *
 * Copyright(c) 2000-2007 LOCKON CO.,LTD. All Rights Reserved.
 *
 * http://www.lockon.co.jp/
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */
// 親ウィンドウの存在確認.
function fnIsopener() {
    var ua = navigator.userAgent;
    if( !!window.opener ) {
        if( ua.indexOf('MSIE 4')!=-1 && ua.indexOf('Win')!=-1 ) {
            return !window.opener.closed;
        } else {
            return typeof window.opener.document == 'object';
        }
    } else {
        return false;
    }
}

// 郵便番号入力呼び出し.
function fnCallAddress(php_url, tagname1, tagname2, input1, input2) {
    zip1 = document.form1[tagname1].value;
    zip2 = document.form1[tagname2].value;
    
    if(zip1.length == 3 && zip2.length == 4) {
        url = php_url + "?zip1=" + zip1 + "&zip2=" + zip2 + "&input1=" + input1 + "&input2=" + input2;
        window.open(url,"nomenu","width=500,height=350,scrollbars=yes,resizable=yes,toolbar=no,location=no,directories=no,status=no");
    } else {
        alert("郵便番号を正しく入力して下さい。");
    }
}

// 郵便番号から検索した住所を渡す.
function fnPutAddress(input1, input2) {
    // 親ウィンドウの存在確認。.
    if(fnIsopener()) {
        if(document.form1['state'].value != "") {
            // 項目に値を入力する.
            state_id = document.form1['state'].value;
            town = document.form1['city'].value + document.form1['town'].value;
            window.opener.document.form1[input1].selectedIndex = state_id;
            window.opener.document.form1[input2].value = town;
        }
    } else {
        window.close();
    }        
}

function fnOpenNoMenu(URL) {
    window.open(URL,"nomenu","scrollbars=yes,resizable=yes,toolbar=no,location=no,directories=no,status=no");
}

function fnOpenWindow(URL,name,width,height) {
    window.open(URL,name,"width="+width+",height="+height+",scrollbars=yes,resizable=no,toolbar=no,location=no,directories=no,status=no");
}

function fnSetFocus(name) {
    if(document.form1[name]) {
        document.form1[name].focus();
    }
}

// セレクトボックスに項目を割り当てる.
function fnSetSelect(name1, name2, val) {
    sele1 = document.form1[name1]; 
    sele2 = document.form1[name2];
    
    if(sele1 && sele2) {
        index=sele1.selectedIndex;
        
        // セレクトボックスのクリア    
        count=sele2.options.length
        for(i = count; i >= 0; i--) {
            sele2.options[i]=null;
        }
        
        // セレクトボックスに値を割り当てる。
        len = lists[index].length
        for(i = 0; i < len; i++) {
            sele2.options[i]=new Option(lists[index][i], vals[index][i]);
            if(val != "" && vals[index][i] == val) {
                sele2.options[i].selected = true;
            }
        }
    }
}

// Enterキー入力をキャンセルする。(IEに対応)
function fnCancelEnter()
{
    if (gCssUA.indexOf("WIN") != -1 && gCssUA.indexOf("MSIE") != -1) {
        if (window.event.keyCode == 13)
        {
            return false;
        }
    }
    return true;
}

// モードとキーを指定してSUBMITを行う。
function fnModeSubmit(mode, keyname, keyid) {
    switch(mode) {
    case 'delete_category':
        if(!window.confirm('選択したカテゴリとカテゴリ内のすべてのカテゴリを削除します')){
            return;
        }
        break;
    case 'delete':
        if(!window.confirm('一度削除したデータは、元に戻せません。\n削除しても宜しいですか？')){
            return;
        }
        break;
    case 'regist':
        if(!window.confirm('登録しても宜しいですか')){
            return;
        }
        break;
    case 'confirm':
        if(!window.confirm('登録しても宜しいですか')){
            return;
        }
        break;
    case 'overwrite':
        if(!window.confirm('上書きしても宜しいですか')){
            return;
        }
        break;
    case 'delete_all':
        if(!window.confirm('検索結果をすべて削除しても宜しいですか')){
            return;
        }
        break;
    case 'refusal':
        if(!window.confirm('退会を実行しても宜しいですか')){
            return;
        }
        break;
    default:
        break;
    }
    document.form1['mode'].value = mode;
    if(keyname != "" && keyid != "") {
        document.form1[keyname].value = keyid;
    }
    document.form1.submit();
}

function fnFormModeSubmit(form, mode, keyname, keyid) {
    switch(mode) {
    case 'delete':
        if(!window.confirm('一度削除したデータは、元に戻せません。\n削除しても宜しいですか？')){
            return;
        }
        break;
    case 'confirm':
        if(!window.confirm('登録しても宜しいですか')){
            return;
        }
        break;
    case 'regist':
        if(!window.confirm('登録しても宜しいですか')){
            return;
        }
        break;
    default:
        break;
    }
    document.forms[form]['mode'].value = mode;
    if(keyname != "" && keyid != "") {
        document.forms[form][keyname].value = keyid;
    }
    document.forms[form].submit();
}

function fnSetFormSubmit(form, key, val) {
    document.forms[form][key].value = val;
    document.forms[form].submit();
    return false;
}

function fnSetFormVal(form, key, val) {
    document.forms[form][key].value = val;
}

function fnChangeAction(url) {
    document.form1.action = url;
}

// ページナビで使用する。
function fnNaviPage(pageno) {
    document.form1['pageno'].value = pageno;
    document.form1.submit();
}

function fnSearchPageNavi(pageno) {
    document.form1['pageno'].value = pageno;
    document.form1['mode'].value = 'search';
    document.form1.submit();
    }

    function fnSubmit(){
    document.form1.submit();
}

// ポイント入力制限。
function fnCheckInputPoint() {
    if(document.form1['point_check']) {
        list = new Array('use_point');
        if(!document.form1['point_check'][1].checked) {
            color = "#dddddd";
            flag = true;
        } else {
            color = "";
            flag = false;
        }
        
        len = list.length
        for(i = 0; i < len; i++) {
            if(document.form1[list[i]]) {
                document.form1[list[i]].disabled = flag;
                document.form1[list[i]].style.backgroundColor = color;
            }
        }
    }
}

// 別のお届け先入力制限。
function fnCheckInputDeliv() {
    if(!document.form1) {
        return;
    }
    if(document.form1['deliv_check']) {
        list = new Array(
                        'deliv_name01',
                        'deliv_name02',
                        'deliv_kana01',
                        'deliv_kana02',
                        'deliv_pref',
                        'deliv_zip01',
                        'deliv_zip02',
                        'deliv_addr01',
                        'deliv_addr02',
                        'deliv_tel01',
                        'deliv_tel02',
                        'deliv_tel03'
                        );
    
        if(!document.form1['deliv_check'].checked) {
            fnChangeDisabled(list, '#dddddd');
        } else {
            fnChangeDisabled(list, '');
        }
    }
}


// 購入時会員登録入力制限。
function fnCheckInputMember() {
    if(document.form1['member_check']) {
        list = new Array(
                        'password',
                        'password_confirm',
                        'reminder',
                        'reminder_answer'
                        );

        if(!document.form1['member_check'].checked) {
            fnChangeDisabled(list, '#dddddd');
        } else {
            fnChangeDisabled(list, '');
        }
    }
}

// 最初に設定されていた色を保存しておく。
var g_savecolor = new Array();

function fnChangeDisabled(list, color) {
    len = list.length;
    
    for(i = 0; i < len; i++) {
        if(document.form1[list[i]]) {
            if(color == "") {
                // 有効にする。
                document.form1[list[i]].disabled = false;
                document.form1[list[i]].style.backgroundColor = g_savecolor[list[i]];
            } else {
                // 無効にする。
                document.form1[list[i]].disabled = true;
                g_savecolor[list[i]] = document.form1[list[i]].style.backgroundColor;
                document.form1[list[i]].style.backgroundColor = color;//"#f0f0f0";    
            }            
        }
    }
}


// ログイン時の入力チェック
function fnCheckLogin(formname) {
    var lstitem = new Array();
    
    if(formname == 'login_mypage'){
    lstitem[0] = 'mypage_login_email';
    lstitem[1] = 'mypage_login_pass';
    }else{
    lstitem[0] = 'login_email';
    lstitem[1] = 'login_pass';
    }
    var max = lstitem.length;
    var errflg = false;
    var cnt = 0;
    
    //　必須項目のチェック
    for(cnt = 0; cnt < max; cnt++) {
        if(document.forms[formname][lstitem[cnt]].value == "") {
            errflg = true;
            break;
        }
    }
    
    // 必須項目が入力されていない場合    
    if(errflg == true) {
        alert('メールアドレス/パスワードを入力して下さい。');
        return false;
    }
}
    
// 時間の計測.
function fnPassTime(){
    end_time = new Date();
    time = end_time.getTime() - start_time.getTime();
    alert((time/1000));
}
start_time = new Date();

//親ウィンドウのページを変更する.
function fnUpdateParent(url) {
    // 親ウィンドウの存在確認
    if(fnIsopener()) {
        window.opener.location.href = url;
    } else {
        window.close();
    }        
}

//親ウィンドウのページを変更する.
function fnUpdateParent02(mode, keyname, keyid, url) {
    // 親ウィンドウの存在確認
    if(fnIsopener()) {
        window.opener.location.href = url;
        // モードの設定
        document.form1['mode'].value = mode;
        if(keyname != "" && keyid != "") {
            document.form1[keyname].value = keyid;
        }
        document.form1.submit();
    } else {
        window.close();
    }        
}

//特定のキーをSUBMITする.
function fnKeySubmit(keyname, keyid) {
    if(keyname != "" && keyid != "") {
        document.form1[keyname].value = keyid;
    }
    document.form1.submit();
}

//文字数をカウントする。
//引数1：フォーム名称
//引数2：文字数カウント対象
//引数3：カウント結果格納対象
function fnCharCount(form,sch,cnt) {
    document.forms[form][cnt].value= document.forms[form][sch].value.length;
}


// テキストエリアのサイズを変更する.
function ChangeSize(button, TextArea, Max, Min, row_tmp){
    
    if(TextArea.rows <= Min){
        TextArea.rows=Max; button.value="小さくする"; row_tmp.value=Max;
    }else{
        TextArea.rows =Min; button.value="大きくする"; row_tmp.value=Min;
    }
}

// 値をセット
function setElementValue(data, tag_type, value, text, change, default_value, select_value) {
    var count = data.length;
    var ret = false;

    // データが存在しない場合はデフォルト値を設定する
    if (default_value != undefined) {
        // 指定がない場合は「選択してください」を表示
        var elem = document.createElement(tag_type);
        elem.value = '';
        elem.appendChild(document.createTextNode(default_value));
        $("#" + change).append(elem);
    }
   
    for (var i = 0; i < count; i++) {
        var elem = document.createElement(tag_type);
        elem.value = data[i][value];
        elem.appendChild(document.createTextNode(data[i][text]));
        $("#" + change).append(elem);
        
        if(select_value == elem.value){
            ret = true;
            break;
        }
    }
    
    return ret;
}

// クリア
function clearSelect(id,name){
    $('#'+ id).empty();
    var elem = document.createElement('option');
    elem.value = '';
    elem.appendChild(document.createTextNode(name));
    $("#" + id).append(elem);

}

// TODO:下記の冗長した関数は一つのコールバック関数にまとめる
// 車種selectボックスの変更の値取得
function selectUpdatePartsMaker(data) {
    setElementValue(data, 'option', 'parts_maker_id', 'parts_maker_name', 'parts_maker_id', 'メーカー名');
}
function selectUpdatePartsMakerBottom(data) {
    setElementValue(data, 'option', 'parts_maker_id', 'parts_maker_name', 'parts_maker_id_bottom', 'メーカー名');
}

// 車種selectボックスの変更の値取得
function selectUpdateDisplacement(data) {
    setElementValue(data, 'option', 'displacement', 'displacement_name', 'displacement', '排気量');
    // 車種、年式クリア
    clearSelect('car_line_id','車種名');
    clearSelect('model_year_id','年式');
}

// 車種selectボックスの変更の値取得
function selectUpdateDisplacementBottom(data) {
    setElementValue(data, 'option', 'displacement', 'displacement_name', 'displacement_bottom', '排気量');
    // 車種、年式クリア
    clearSelect('car_line_id_bottom','車種名');
    clearSelect('model_year_id_bottom','年式');
}

// 車種selectボックスの変更の値取得
function selectUpdate(data) {
    setElementValue(data, 'option', 'car_line_id', 'car_line_name', 'car_line_id', '車種名');
    // 年式クリア
    clearSelect('model_year_id','年式');
}

// 車種selectボックスの変更の値取得(一覧ボトム検索項目用)
function selectUpdateBottom(data) {
    setElementValue(data, 'option', 'car_line_id', 'car_line_name', 'car_line_id_bottom', '車種名');
    // 年式クリア
    clearSelect('model_year_id_bottom','年式');
}

// 車種-年式selectボックスの変更
function selectUpdateCarLineModelYear(data) {
    setElementValue(data, 'option', 'model_year_id', 'car_line_model_year_name', 'model_year_id_unselect');
}

// 年式selectボックスの変更
function selectUpdateModelYear(data) {
    setElementValue(data, 'option', 'model_year_id', 'model_year_name', 'model_year_id', '年式');
}

// 年式selectボックスの変更(一覧ボトム検索項目用)
function selectUpdateModelYearBottom(data) {
    setElementValue(data, 'option', 'model_year_id', 'model_year_name', 'model_year_id_bottom', '年式');
}

// カテゴリselectボックスの変更（カテゴリ１）
function selectUpdateCategory1(data) {
    var ret = false;
    ret = setElementValue(data, 'option', 'category_id', 'category_name', 'category_id1', '種類を選ぶ', cat1_value);
    
    if(ret == true){
        fnSetValue('category_id1',cat1_value);
    }else{
        clearSelect('category_id2','更に絞り込む');
    }
}

// カテゴリselectボックスの変更（カテゴリ２）
function selectUpdateCategory2(data) {
    setElementValue(data, 'option', 'category_id', 'category_name', 'category_id2', '更に絞り込む');
    fnSetValue('category_id2',cat2_value);
}

// カテゴリselectボックスの変更（ヘッダー検索部分用）
function selectUpdateHeaderCategory2(data) {
    setElementValue(data, 'option', 'category_id', 'category_name', 'header_category_id2', '更に絞り込む');
    // 第三階層初期化
    $('#'+ 'header_category_id3').empty();
    var elem = document.createElement('option');
    elem.value = '';
    elem.appendChild(document.createTextNode('更に絞り込む'));
    $("#" + 'header_category_id3').append(elem);
}

// カテゴリselectボックスの変更（ヘッダー検索部分用）
function selectUpdateHeaderCategory3(data) {
    setElementValue(data, 'option', 'category_id', 'category_name', 'header_category_id3', '更に絞り込む');
}
// カテゴリselectボックスの変更（メーカー検索部分用）
function selectUpdateMakerCategory2(data) {
    setElementValue(data, 'option', 'category_id', 'category_name', 'maker_category_id2', '更に絞り込む');
    // 第三階層初期化
    $('#'+ 'maker_category_id3').empty();
    var elem = document.createElement('option');
    elem.value = '';
    elem.appendChild(document.createTextNode('更に絞り込む'));
    $("#" + 'maker_category_id3').append(elem);
}

// カテゴリselectボックスの変更（ヘッダー検索部分用）
function selectUpdateMakerCategory3(data) {
    setElementValue(data, 'option', 'category_id', 'category_name', 'maker_category_id3', '更に絞り込む');
}

// カテゴリselectボックスの変更(一覧ボトム検索項目用)
function selectUpdateCategory1Bottom(data) {
    var ret = false;
    ret = setElementValue(data, 'option', 'category_id', 'category_name', 'category_id1_bottom', '種類を選ぶ', cat1_value);
    if(ret){
        fnSetValue('category_id1_bottom',cat1_value);
    }else{
        clearSelect('category_id2_bottom','更に絞り込む');
    }
}

// カテゴリselectボックスの変更(一覧ボトム検索項目用)
function selectUpdateCategory2Bottom(data) {
    setElementValue(data, 'option', 'category_id', 'category_name', 'category_id2_bottom', '更に絞り込む');
    fnSetValue('category_id2_bottom',cat2_value);
}

/**
 * Ajaxによるselectボックス変更用関数
 *
 * @param array 引数として渡すセレクトボックス名（複数指定）
 * @param string 変更されるセレクトボックス名
 * @param string GET送信先ＵＲＬ
 * @param string GET送信後コールバックで呼び出される関数名
 * @param string GET時のモードを指定（PHPで操作を分けたいとき用に拡張）
 * @param string フルパスを指定（フルパスを指定したいときに拡張？不明なので削除予定）
 * @param array GETで飛ばすKey名を変更したいとき用に拡張
 */
function fnSelectCheck(arrkeys, change_name, send_url, callback, mode, send_full_url, arrGetKeyName) {

    var value = $('#'+ change_name).val();
    // セレクトボックスのクリア
    $('#'+ change_name).empty();

    // １つでも選択されている場合のみ実行
    var key_count = arrkeys.length;
    var set_flg = false;
    
    // PHP側に渡す値を定義(未定義の場合はselect)
    if (mode == undefined) mode = 'select';
    var sendData = {mode: mode};
    // 配列の要素数だけ値を設定する
    for(i = 0; i < key_count; i++) {
        var value = "";
        if ($('#'+arrkeys[i]).val() > 0) {
            value = $('#'+arrkeys[i]).val();
            set_flg = true;
        }
        
        // TODO:一覧のページ下部用にGETで送信する値を指定できるように拡張
        if (arrGetKeyName == undefined) {
            sendData[arrkeys[i]] = value;
        } else {
            sendData[arrGetKeyName[i]] = value;
        }
    }
    // エラーがなければ実行
    if (set_flg == true) {
        // send_full_urlはフロントの商品一覧でのみ指定あり（mod_rewriteの影響）
        if (send_full_url == undefined) send_full_url = '';
        if (send_full_url != ""){
            $.getJSON(send_full_url, sendData, callback);
        }else{
            $.getJSON(send_url, sendData, callback);
        }
    } else {
        callback('');
    }
}


/**
 * Ajaxによるselectボックス変更用関数(値がセットされていなくても実行)
 *
 * @param array 引数として渡すセレクトボックス名（複数指定）
 * @param string 変更されるセレクトボックス名
 * @param string GET送信先ＵＲＬ
 * @param string GET送信後コールバックで呼び出される関数名
 * @param string GET時のモードを指定（PHPで操作を分けたいとき用に拡張）
 * @param string フルパスを指定（フルパスを指定したいときに拡張？不明なので削除予定）
 * @param array GETで飛ばすKey名を変更したいとき用に拡張
 */
function fnSelectCheck2(arrkeys, change_name, send_url, callback, mode, send_full_url, arrGetKeyName) {
    // セレクトボックスのクリア
    $('#'+ change_name).empty();

    // 全て選択されている場合のみ実行
    var key_count = arrkeys.length;
    // PHP側に渡す値を定義(未定義の場合はselect)
    if (mode == undefined) mode = 'select';
    var sendData = {mode: mode};
    // 配列の要素数だけ値を設定する
    for(i = 0; i < key_count; i++) {
        // TODO:一覧のページ下部用にGETで送信する値を指定できるように拡張
        if (arrGetKeyName == undefined) {
            sendData[arrkeys[i]] = $('#'+arrkeys[i]).val();
        } else {
            sendData[arrGetKeyName[i]] = $('#'+arrkeys[i]).val();
        }
    }
    
    // send_full_urlはフロントの商品一覧でのみ指定あり（mod_rewriteの影響）
    if (send_full_url == undefined) send_full_url = '';
    if (send_full_url != ""){
        $.getJSON(send_full_url, sendData, callback);
    }else{
        $.getJSON(send_url, sendData, callback);
    }
}

// 選択中のカテゴリを保持
var cat1_value="";
function fnSetCat1Value(value){
    cat1_value = value;
}
var cat2_value="";
function fnSetCat2Value(value){
    cat2_value = value;
}

function fnSetValue(id,value){
    // 元の値をセット
    // 値がセットされない場合があるので、1ミリ秒間をおく
    setTimeout('$("#'+id+'").val('+value+')',1);
    
    if (typeof document.documentElement.style.maxHeight != "undefined") {
        // IE 7.0 以上 または Gecko などモダンブラウザー
        setTimeout("fnc = document.getElementById('"+id+"').onchange; fnc();",1);
    }else {
        // IE 6.0 以下
        setTimeout("fnc = document.getElementById('"+id+"').onchange; fnc();",1);
    }
}
