/**
 * e-manual 共通スクリプト
 *
 * @copyright 2009 BRAIN WAVE Co.,Ltd.
 * @version 0.0.1
 */


/**
 * フォームを送信する
 *
 * @param string formId フォームのID
 * @param string action フォームの送信先
 */
function submitForm(formId, action)
{
    try {
        var form = document.getElementById(formId);
        if (form != null) {
            var tmp = form.action;
            form.action = action;
            form.submit();
            form.action = tmp;
        }
    }
    catch (e) {
        if (e.number == -2147024891) {
            alert('アップロードするファイルを確認してください。');
        } else {
            throw e;
        }
    }
}


/**
 * フォームを送信する
 * (POSTする際、hiddenに値をセットしてsubmitする)
 * ※key/val は必ず一対であること
 *
 * @param string formId フォームのID
 * @param string action フォームの送信先
 * @param string key    hidden の name
 * @param string val    hidden の value
 */
function submitFormArgv(formId, action)
{
    // 引数の個数チェック
    // (引数の数は 2 + (2n) であること) n=hiddenの個数
    if (((arguments.length - 2) % 2) != 0) {
        return false;
    }

    // input タグを生成を動的に生成してsubmit
    var doc = document;
    var form = doc.getElementById(formId);
    if (form != null) {

        // hidden を生成
        var input = null;
        for (var i = 2 ; i < arguments.length; i += 2) {

            input = doc.createElement('input');
            input.type  = 'hidden';
            input.name  = arguments[i];
            input.value = arguments[i + 1];

            form.appendChild(input);
        }

        // フォームを送信する
        var tmp = form.action;
        form.action = action;
        form.submit();
        form.action = tmp;
    }
}


/**
 * フォームをリセットする
 *
 * @param string formId フォームのID
 */
function resetForm(formId)
{
    var form = document.getElementById(formId);
    if (form != null) {
        form.reset();
    }
}


/**
 * フォームをクリアする
 *
 * @param string formId フォームのID
 */
function clearForm(formId)
{
    var form = document.getElementById(formId);
    var elems = form.getElementsByTagName('input');
    if (elems != null) {
        for (var i = 0; i < elems.length; i++) {
            switch (elems[i].type) {

                case 'text':
                case 'file':
                    elems[i].value = '';
                    break;

                case 'checkbox':
                case 'radio':
                    elems[i].checked = false;
                    break;
            }
        }
    }

    elems = form.getElementsByTagName('select');
    if (elems != null) {
        for (var i = 0; i < elems.length; i++) {
            elems[i].value = '';
        }
    }

    elems = form.getElementsByTagName('textarea');
    if (elems != null) {
        for (var i = 0; i < elems.length; i++) {
            elems[i].value = '';
        }
    }
}


/**
 * メーカー検索ポップアップウィンドウを開く
 *
 * @param string url            トップのURL
 * @param string displayId      表示切り替え用ID
 * @param string makerSeqNoId   メーカーシーケンス番号戻り先ID
 * @param string makerNameId    メーカー名戻り先ID
 * @param string productSeqNoId 製品シーケンス番号戻り先ID（消去先）
 * @param string productNameId  製品名戻り先ID（消去先）
 * @param string categoryNameId カテゴリー名戻り先ID（消去先）
 */
function openMakerSearch(url, displayId, makerSeqNoId, makerNameId,
                         productSeqNoId, productNameId, categoryNameId)
{
    // URLに戻り案件名項目と戻り案件コード項目を追加
    url += 'searchmaker/index/?displayId=' + displayId
        +  '&makerSeqNoId=' + makerSeqNoId + '&makerNameId=' + makerNameId;

    if (typeof(productSeqNoId) != 'undefined') {
        url += '&productSeqNoId=' + productSeqNoId;
    }
    if (typeof(productNameId) != 'undefined') {
        url += '&productNameId=' + productNameId;
    }
    if (typeof(categoryNameId) != 'undefined') {
        url += '&categoryNameId=' + categoryNameId;
    }

    // ウィンドウ名を設定
    var windowName = 'search_maker';

    // ウィンドウサイズを設定
    var w = 650;    // 幅
    var h = 700;    // 高さ

    // センタリング
    var x = (window.screen.width - w) / 2;  // 左上X座標
    var y = (window.screen.height - h) / 2; // 左上Y座標

    // 指定された条件でウィンドウを開く
    var newWindow = window.open(url, windowName, ''
                                + 'left=' + x + ','     // ウィンドウ表示位置 左上X座標
                                + 'top=' + y + ','      // ウィンドウ表示位置 左上Y座標
                                + 'width=' + w + ','    // ウィンドウの幅
                                + 'height=' + h + ','   // ウィンドウの高さ
                                + 'resizable=no,'       // リサイズの可否
                                + 'scrollbars=yes,'     // スクロールバーの有無
                                + 'menubar=no,'         // メニューバーの有無
                                + 'toolbar=no,'         // ツールバーの有無
                                + 'location=no,'        // アドレスバーの有無
                                + 'status=no');         // ステータスバーの有無
}


/**
 * 製品検索ポップアップウィンドウを開く
 *
 * @param string url            トップのURL
 * @param string displayId      表示切り替え用ID
 * @param string productSeqNoId 製品シーケンス番号戻り先ID
 * @param string productNameId  製品名戻り先ID
 * @param string makerNameId    メーカー名戻り先ID
 * @param string categoryNameId カテゴリー名戻り先ID
 * @param string makerSeqNoId   メーカーシーケンス番号戻り先ID（消去先）
 */
function openProductSearch(url, displayId, productSeqNoId, productNameId, makerNameId, categoryNameId, makerSeqNoId)
{
    // URLに戻り案件名項目と戻り案件コード項目を追加
    url += 'searchproduct/index/?displayId=' + displayId
        +  '&productSeqNoId=' + productSeqNoId + '&productNameId=' + productNameId;

    if (typeof(makerNameId) != 'undefined') {
        url += '&makerNameId=' + makerNameId;
    }
    if (typeof(categoryNameId) != 'undefined') {
        url += '&categoryNameId=' + categoryNameId;
    }

    if (typeof(makerSeqNoId) != 'undefined') {
        url += '&makerSeqNoId=' + makerSeqNoId;
    }

    // ウィンドウ名を設定
    var windowName = 'search_product';

    // ウィンドウサイズを設定
    var w = 650;    // 幅
    var h = 700;    // 高さ

    // センタリング
    var x = (window.screen.width - w) / 2;  // 左上X座標
    var y = (window.screen.height - h) / 2; // 左上Y座標

    // 指定された条件でウィンドウを開く
    var newWindow = window.open(url, windowName, ''
                                + 'left=' + x + ','     // ウィンドウ表示位置 左上X座標
                                + 'top=' + y + ','      // ウィンドウ表示位置 左上Y座標
                                + 'width=' + w + ','    // ウィンドウの幅
                                + 'height=' + h + ','   // ウィンドウの高さ
                                + 'resizable=no,'       // リサイズの可否
                                + 'scrollbars=yes,'     // スクロールバーの有無
                                + 'menubar=no,'         // メニューバーの有無
                                + 'toolbar=no,'         // ツールバーの有無
                                + 'location=no,'        // アドレスバーの有無
                                + 'status=no');         // ステータスバーの有無
}


/**
 * 選択結果を親画面に返す
 * （可変個引数）
 *
 * @param string displayId 表示切り替え用
 * @param string id        値の設定先のID
 * @param string val       設定するID
 */
function setArgsParent()
{
    // 引数の個数チェック
    // (引数の数は 1 + (2n) であること) n=hiddenの個数
    if (((arguments.length - 1) % 2) != 0) {
        return false;
    }

    // 2つ目以降に値を設定する
    var doc = window.opener.document;
    for (var i = 1; i < arguments.length; i += 2) {
        var elem = doc.getElementById(arguments[i]);
        if (elem != null) {
            switch (elem.tagName.toLowerCase()) {

                case 'input':
                case 'textarea':
                    elem.value = arguments[i + 1];
                    break;

                default:
                    elem.innerHTML = arguments[i + 1];
                    break;
            }
        }
    }

    // 1つ目を表示する
    var elem = doc.getElementById(arguments[0]);
    if (elem != null) {
        elem.style.display = '';
    }

    // 子画面を閉じる
    self.window.close();
}


/**
 * 対象の項目に入力されている値をクリアする
 * （可変個引数）
 *
 * @param string displayId 表示切り替え用
 * @param string id        値の設定先のID
 */
function clearArgs()
{
    // 1つ目は非表示にする
    var doc = document;
    var elem = doc.getElementById(arguments[0]);
    if (elem != null) {
        elem.style.display = 'none';
    }

    // 2つ目以降はクリアする
    for (var i = 1; i < arguments.length; i++) {
        var elem = doc.getElementById(arguments[i]);
        if (elem != null) {
            switch (elem.tagName.toLowerCase()) {

                case 'input':
                case 'textarea':
                    elem.value = '';
                    break;

                default:
                    elem.innerHTML = '';
                    break;
            }
        }
    }
}


