/**
 * JavaScript ユーティリティ
 *
 * @author ATS
 * @version 1.0
 */

// フォームデータ送信
function submitForm(form,url){
    try {
        form.action = url;
        form.submit();
    } catch(e) {
        if (e.number == -2147024891) {
            alert(e.message);
        }
        FreezeScreenOff();
    }
}

// 確認ダイアログ表示後フォームデータ送信
function submitFormMsg(form,url,msg){
    yn = confirm(msg);
    if( yn == true ) {
        try {
            form.action = url;
            form.submit();
        } catch(e) {
            if (e.number == -2147024891) {
                alert(e.message);
            }
            FreezeScreenOff();
        }
    } else {
        FreezeScreenOff();
    }
}

// フォームデータ送信（一覧用インデックス付加）
function submitIndex(form,url,idxnm,idx) {
    form.action = url + "?" + idxnm + "=" + idx;
    form.submit();
}

// 確認ダイアログ表示後フォームデータ送信（一覧用インデックス付加）
function submitIndexMsg(form,url,idxnm,idx,msg) {
    yn = confirm(msg);
    if( yn == true ) {
        form.action = url + "?" + idxnm + "=" + idx;
        form.submit();
    } else {
        FreezeScreenOff();
    }
}

// サブウィンドウポップアップ
var sWin;
function openSubWin(url){
    sWin = window.open(url,"OpenSubWin","width=900,height=650,resizable=0,scrollbars=1,status=0");
}
function closeSubWin(){
    if (sWin){
        sWin.close();
    }
}

// 入力制限：半角英数字のみ入力可
function inputHanCheck(formnm) {
    var str = formnm.value;
    var len = str.length;
    if (str.match(/[^A-Za-z0-9\s-]+/)) {
        if (str.charAt(len-1).match(/[^A-Za-z0-9\s-]+/)) {
            formnm.value = str.substring(0, len-1);
        } else {
            var wkstr = "";
            for (i = 0; i < len; i++) {
                if (!str.charAt(i).match(/[^A-Za-z0-9\s-]+/)) {
                    wkstr = wkstr + str.charAt(i);
                }
            }
            formnm.value = wkstr;
        }
    }
}

// 入力制限：数字のみ入力可
function inputNumCheck(formnm) {
    var str = formnm.value;
    var len = str.length;
    if (str.match(/[^0-9]+/)) {
        if (str.charAt(len-1).match(/[^0-9]+/)) {
            formnm.value = str.substring(0, len-1);
        } else {
            var wkstr = "";
            for (i = 0; i < len; i++) {
                if (!str.charAt(i).match(/[^0-9]+/)) {
                    wkstr = wkstr + str.charAt(i);
                }
            }
            formnm.value = wkstr;
        }
    }
}

//入力制限：数字と「-」のみ入力可
function inputNumCheckTel(formnm) {
    var str = formnm.value;
    var len = str.length;
    if (str.match(/[^0-9\s-]+/)) {
        if (str.charAt(len-1).match(/[^0-9\s-]+/)) {
            formnm.value = str.substring(0, len-1);
        } else {
            var wkstr = "";
            for (i = 0; i < len; i++) {
                if (!str.charAt(i).match(/[^0-9\s-]+/)) {
                    wkstr = wkstr + str.charAt(i);
                }
            }
            formnm.value = wkstr;
        }
    }
}

// テキストエリアを自動で広げます
function resizeTextarea(ev,wev,co){
    var textarea;
    if (navigator.userAgent.indexOf("MSIE") != -1) {
        textarea = wev.target || wev.srcElement;
    } else {
        textarea = ev.target || ev.srcElement;
    }
    var value = textarea.value;
    var cols = textarea.getAttribute("cols");
    var lines = 1;
    var letters = 0;
    for (var i = 0, l = value.length; i < l; i++) {
        if (value.charAt(i) == '\n') {
            lines++;
            letters = 0;
        } else if (value.charCodeAt(i) > 0x7f) {
            letters += 2;
        } else {
            letters++;
        }
        if (letters >= cols) {
            lines++;
            letters = 0;
        }
    }
    if (lines < co) lines = co;
    textarea.setAttribute("rows", lines);
}

// 二重送信防御幕 (freezeTime=幕を表示する秒数)
function FreezeScreen(freezeTime) {
    var outerPane = document.getElementById('FreezePane');
    var innerPane = document.getElementById('InnerFreezePane');
    if (outerPane) outerPane.style.height = getHeight() + 'px';
    
    // IEだけの処理
    if(getBrowserName()=="Explorer") displaySelectElement('start');
    
    // 幕を表示
    if (outerPane) outerPane.className = 'FreezePaneOn';
    if (innerPane) innerPane.innerHTML = '処理中・・・';
    FitInnerPane();
    window.onscroll = function(){
        FitInnerPane();
    }
    
    // 幕の時間設定
    if (freezeTime == 0) {
        // 解除しない場合の処理 (特になし)
    } else if (freezeTime > 0){
        // 解除までの秒数が指定されている場合の処理
        setTimeout('FreezeScreenOff()',freezeTime*1000);
    }
}
// 各環境のウインドウの高さを取得
function getHeight() {
    
    var WindowHeight;
    if ( window.innerHeight ) { WindowHeight = window.innerHeight; }
    else if ( document.documentElement && document.documentElement.clientHeight != 0 ) { WindowHeight = document.documentElement.clientHeight; }
    else if ( document.body ) { WindowHeight = document.body.clientHeight; }
    
    var ScrollHeight;
    if ( document.documentElement.scrollHeight ) { ScrollHeight = document.documentElement.scrollHeight; }
    else if ( document.body ) { ScrollHeight = document.body.scrollHeight; }
    
    if ( WindowHeight >= ScrollHeight ) return WindowHeight;
    return ScrollHeight;
}
// メッセージ文を画面内に表示する
function FitInnerPane() {
    document.getElementById('InnerFreezePane').style.top =
    (document.body.scrollTop || document.documentElement.scrollTop) + 300 + 'px';
}

// 二重送信防御幕－解除
function FreezeScreenOff() {
    // 幕を表示
    var outerPane = document.getElementById('FreezePane');
    if (outerPane) outerPane.className = 'FreezePaneOff';
    // セレクトボックスを表示
    displaySelectElement('end');
    
    window.onscroll = function(){    }
}

// ファイル出力時等の特殊な幕の処理
function OutputFreeze() {
    FreezeScreen(0);
    var innerPane = document.getElementById('InnerFreezePane');
    if (innerPane) innerPane.innerHTML = 'ファイル作成中・・・';
    
    window.onfocus = function(){
        FreezeScreenOff();
    }
}

// セレクトボックス対処
function displaySelectElement(mode) {
    var elems = document.getElementsByTagName("select");
    if(mode=="start") {
        for (i = 0; i < elems.length; i++) {
            elems[i].style.visibility= "hidden";
        }
    } else if(mode=="end") {
        for (i = 0; i < elems.length; i++) {
            elems[i].style.visibility= "visible";
        }
    }
}

// ブラウザチェック
function getBrowserName(){
  var aName = navigator.appName.toUpperCase();
  var uName = navigator.userAgent.toUpperCase();
  if (uName.indexOf("SAFARI") >= 0) return "Safari";
  if (uName.indexOf("OPERA") >= 0) return "Opera";
  if (aName.indexOf("NETSCAPE") >= 0) return "Netscape";
  if (aName.indexOf("MICROSOFT") >= 0) return "Explorer";
  return "";
}

// POST送信（fname：form名、iname：inputタグ名、value：値、url：送信先）
function submitFormPost(fname, iname, value, url) {
    var form = document.createElement('form');
    document.body.appendChild(form);
    var input = document.createElement('input');
    input.setAttribute('type', 'hidden');
    input.setAttribute('name', iname);
    input.setAttribute('value', value);
    form.appendChild(input);
    form.setAttribute('name', fname);
    form.setAttribute('action', url);
    form.setAttribute('method', 'post');
    form.submit();
}

// 確認ダイアログ表示後POST送信（fname：form名、iname：inputタグ名、value：値、url：送信先、msg：確認メッセージ）
function submitFormPostMsg(fname, iname, value, url, msg) {
    yn = confirm(msg);
    if(yn == true) {
        var form = document.createElement('form');
        document.body.appendChild(form);
        var input = document.createElement('input');
        input.setAttribute('type', 'hidden');
        input.setAttribute('name', iname);
        input.setAttribute('value', value);
        form.appendChild(input);
        form.setAttribute('name', fname);
        form.setAttribute('action', url);
        form.setAttribute('method', 'post');
        form.submit();
    } else {
        FreezeScreenOff();
    }
}

// POST送信（submitFormPostと同じだがinamesとvaluesは配列）
function submitFormPosts(fname, inames, values, url) {
    var form = document.createElement('form');
    document.body.appendChild(form);

    for (i = 0; i < inames.length; i++) {
        var input = document.createElement('input');
        input.setAttribute('type', 'hidden');
        input.setAttribute('name', inames[i]);
        input.setAttribute('value', values[i]);
        form.appendChild(input);
    }

    form.setAttribute('name', fname);
    form.setAttribute('action', url);
    form.setAttribute('method', 'post');
    form.submit();
}

