/**
 * Logiec Core
 * 共通javascript
 *
 * @author  BRAIN WAVE
 * @version 2009-01-23
 */

/**
 * cookieCheck
 * クッキーの有効・無効をチェックする
 */
function cookieCheck() {
    if (navigator.cookieEnabled == false) {
        if (document.getElementById("cookie")) {
            document.getElementById("cookie").style.display = 'block';
        }
    }
}

/**
 * numberFormat
 * 3桁ごとにカンマを入れる
 */
function numberFormat(str) {
    var num = new String(str).replace(/,/g, "");
    while(num != (num = num.replace(/^(-?\d+)(\d{3})/, "$1,$2")));
    return num;
}

/**
 * document.getElementsByClassName
 * class名から要素オブジェクトの配列を取り出す
 *
 * @param   className  クラス名
 * @return             要素オブジェクト
 */
document.getElementsByClassName = function (className) {
    var i, j, eltClass;
    var objAll = document.getElementsByTagName ? document.getElementsByTagName("*") : document.all;
    var objCN = new Array();
    for (i = 0; i < objAll.length; i++) {
        eltClass = objAll[i].className.split(/\s+/);
        for (j = 0; j < eltClass.length; j++) {
            if (eltClass[j] == className) {
                objCN.push(objAll[i]);
                break;
            }
        }
    }
    return objCN;
}

/**
 * 指定したクラスのチェックボックスを一括チェック/アンチェックする
 *
 * @param  myself          クリックするチェックボックス自身の参照
 * @param  targetClass     対象のチェックボックスのクラス名
 * @param  offTargetClass  対象のチェックボックスがONの時、チェックを外すチェックボックスのクラス名
 */
function allCheckSwitch(myself, targetClass, offTargetClass) {

    // class名から対象の要素オブジェクトの配列を取り出す
    var targetCheckboxes = document.getElementsByClassName(targetClass);

    //  チェックONの場合
    if (myself.checked == true) {

        // 対となるクラスが設定されている場合
        if (offTargetClass) {

            // class名から対となる要素オブジェクトの配列を取り出す
            var offTargetCheckboxes = document.getElementsByClassName(offTargetClass);

            // チェックOFFにする
            for (var i = 0; i < offTargetCheckboxes.length; i++) {
                if (offTargetCheckboxes[i].nodeName == 'INPUT' && offTargetCheckboxes[i].type == 'checkbox'
                    && offTargetCheckboxes[i].disabled == true) {
                    offTargetCheckboxes[i].checked = false;
                }
            }
        }

        // チェックONにする
        for (var i = 0; i < targetCheckboxes.length; i++) {
            if (targetCheckboxes[i].nodeName == 'INPUT' && targetCheckboxes[i].type == 'checkbox'
                && targetCheckboxes[i].disabled == false) {
                targetCheckboxes[i].checked = true;
            }
        }

    //  チェックOFFの場合
    } else {

        // チェックOFFにする
        for (var i = 0; i < targetCheckboxes.length; i++) {
            if (targetCheckboxes[i].nodeName == 'INPUT' && targetCheckboxes[i].type == 'checkbox') {
                targetCheckboxes[i].checked = false;
            }
        }
    }
}

/**
 * 指定したクラスのチェックボックスを一括チェック/アンチェックする
 *
 * @param  myself          クリックするチェックボックス自身の参照
 * @param  targetClass     対象のチェックボックスのクラス名
 * @param  offTargetClass  対象のチェックボックスがONの時、チェックを外すチェックボックスのクラス名
 */
function checkSwitch(myself, targetId) {

    //  チェックONの場合
    if (myself.checked == true) {

        // 対となるチェックボックスをチェックOFFにする
        document.getElementById(targetId).checked = false;
    }
}

/**
 * seePage
 * リンク先を表示する
 * @param  url  リンク先
 */
function seePage(url) {
    location.href = url;
}

/**
 * selfClose
 * 自身のウィンドウを閉じる
 */
function selfClose() {
    self.close();
}

/**
 * changeImage
 * マウスオーバー・アウトで画像を変える
 * @param  targetId  画像タグのID
 * @param  imgSrc    セットする画像のURL
 * @param  width     セットする画像の横幅
 * @param  height    セットする画像の縦幅
 */
function changeImage(targetId, imgSrc, width, height) {
  if (document.getElementById(targetId)) {
    if (width) {
        document.getElementById(targetId).setAttribute("width",  width);
    }
    if (height) {
        document.getElementById(targetId).setAttribute("height", height);
    }
    document.getElementById(targetId).setAttribute("src",    imgSrc);
  }
}

/**
 * copyValue
 * 入力ボックスの値を別の入力ボックスにコピーする
 *
 * @param  formName  フォームの名前
 * @param  copyFrom  コピー元の名前
 * @param  copyTo    コピー先の名前
 * @param  maxCnt    コピー先が複数の場合は、その数（省略可）
 * @return void
 */
function copyValue(formName, copyFrom, copyTo, maxCnt)
{
    if (maxCnt) {
        var i;
        for (i = 0; i < maxCnt; i++) {
            var num = i + 1;
            eval('document.' + formName + '.' + copyTo + num).value = eval('document.' + formName + '.' + copyFrom).value;
        }
    } else {
        eval('document.' + formName + '.' + copyTo).value = eval('document.' + formName + '.' + copyFrom).value;
    }
}

/**
 * submitData
 * パラメータを送信する
 * @param  action     フォームの送信先
 * @param  formName   フォームの名前
 * @param  keyName    値をセットするhiddenの名前（省略可）
 * @param  valueData  セットする値（省略可）
 * @param  target     フォームのターゲット（POPUPの場合は、ウィンドウ名）（省略可）
 * @param  width      POPUPの場合は、POPUPウィンドウの横幅（省略可）
 * @param  height     POPUPの場合は、POPUPウィンドウの縦幅（省略可）
 */
function submitData(action, formName, keyName, valueData, target, width, height) {

    // オブジェクトをセットする
    var formObj = eval('document.' + formName);
    if (keyName) {
        var keyObj = eval('document.' + formName + '.' + keyName);
    }

    // パラメータをセットする
    if (keyName) {
        keyObj.value = valueData;
    }

    // ターゲットをセットする
    if (target) {
        if (!width) {
            width = '';
        }
        if (!height) {
            height = '';
        }
        if (target != '_blank' && target != '_self') {
            windowOpen('', target, width, height);
        }
        formObj.target = target;
    } else {
        formObj.target = '_self';
    }

    // 送信先URLをセットして送信する
    formObj.action = action;
    formObj.submit();
}

/**
 * submitData
 * パラメータを送信する
 * @param  action     フォームの送信先
 * @param  formName   フォームの名前
 * @param  keyName    値をセットするhiddenの名前（省略可）
 * @param  valueData  セットする値（省略可）
 */
function sslSubmitData(action, formName, keyName, valueData) {

    // オブジェクトをセットする
    var formObj = eval('document.' + formName);
    if (keyName) {
        var keyObj = eval('document.' + formName + '.' + keyName);
    }

    // パラメータをセットする
    if (keyName) {
        keyObj.value = valueData;
    }

    // 送信先URLをセットして送信する
    var domain = location.hostname;
    formObj.action = 'https://' + domain + action;
    formObj.submit();
}

/**
 * 確認メッセージを出す
 * @param  message  確認メッセージ
 */
function confSubmit(message, action, formName, keyName, valueData, target) {
    if (confirm(message)) {
        submitData(action, formName, keyName, valueData, target);
    }
}

/**
 * submitOpener
 * 親ウィンドウにパラメータを送信する
 * @param  action      フォームの送信先
 * @param  formName    フォームの名前
 * @param  windowName  親ウィンドウに名付けるウィンドウ名
 */
function submitOpener(action, formName, windowName) {
    try {
//        parent.window.opener.name = windowName;
        formObj = eval('document.' + formName);
        formObj.action = action;
        formObj.target = windowName;
        formObj.submit();
        self.blur();
        parent.window.opener.focus();
    } catch(Exception) {
        try {
            windowOpen(action, windowName, '', '', '0', '0', 'yes', 'yes', 'yes', 'yes', 'yes', 'yes');
            formObj = eval('document.' + formName);
            formObj.action = action;
            formObj.target = windowName;
            formObj.submit();
        } catch(Exception) {
        }
    }
}

/**
 * windowOpen
 * ウィンドウを開く
 * @param  url         表示するURL
 * @param  windowName  ウィンドウ名
 * @param  width       ウィンドウの横幅（省略時：最大幅）
 * @param  height      ウィンドウの縦幅（省略時：最大幅）
 * @param  left        ウィンドウ位置左（省略時：0）
 * @param  top         ウィンドウ位置上（省略時：0）
 * @param  resizable   リサイズの可否      （省略時：no）
 * @param  scrollbars  スクロールバーの有無（省略時：yes）
 * @param  menubar     メニューバーの有無  （省略時：no）
 * @param  toolbar     ツールバーの有無    （省略時：no）
 * @param  location    アドレスバーの有無  （省略時：no）
 * @param  status      ステータスバーの有無（省略時：no）
 */
function windowOpen(url, windowName, width, height, left, top, resizable, scrollbars, menubar, toolbar, location, status) {

    // オプション用変数を初期化する
    var option = new Array();

    // ウィンドウ横幅をセットする
    if (width && width != '' && width.match(/^[0-9]+/)) {
        option.push( 'width=' + width );
    } else {
        width = screen.availWidth;
        option.push( 'width=' + width );
    }

    // ウィンドウ縦幅をセットする
    if (height && height != '' && height.match(/^[0-9]+/)) {
        option.push( 'height=' + height );
    } else {
        height = screen.availHeight;
        option.push( 'height=' + height );
    }

    // ウィンドウ位置左をセットする
    if (left && left != '' && left.match(/^[0-9]+/)) {
        option.push( 'left=' + left );
    } else {
        option.push( 'left=0' );
    }

    // ウィンドウ位置上をセットする
    if (top && top != '' && top.match(/^[0-9]+/)) {
        option.push( 'top=' + top );
    } else {
        option.push( 'top=0' );
    }

    // リサイズの可否をセットする
    if (resizable && resizable == 'yes') {
        option.push( 'resizable=yes' );
    } else {
        option.push( 'resizable=no' );
    }

    // スクロールバーの有無をセットする
    if (scrollbars && scrollbars == 'no') {
        option.push( 'scrollbars=no' );
    } else {
        option.push( 'scrollbars=yes' );
    }

    // メニューバーの有無をセットする
    if (menubar && menubar == 'yes') {
        option.push( 'menubar=yes' );
    } else {
        option.push( 'menubar=no' );
    }

    // ツールバーの有無をセットする
    if (toolbar && toolbar == 'yes') {
        option.push( 'toolbar=yes' );
    } else {
        option.push( 'toolbar=no' );
    }

    // アドレスバーの有無をセットする
    if (location && location == 'yes') {
       option.push( 'location=yes' );
    } else {
       option.push( 'location=no' );
    }

    // ステータスバーの有無をセットする
    if (status && status == 'yes') {
        option.push( 'status=yes' );
    } else {
        option.push( 'status=no' );
    }

    // セットしたオプションをカンマ区切りにして文字列化する
    option = option.join( ', ' );

    // 指定された条件でウィンドウを開く
    newWindow = window.open(url, windowName, option);
//    newWindow = parent.window.open(url, windowName, option);

    if (newWindow != null) {
        newWindow.focus();
    }

var now = new Date();

var year = now.getYear(); // 年
var month = now.getMonth() + 1; // 月
var day = now.getDate(); // 日
var hour = now.getHours(); // 時
var min = now.getMinutes(); // 分
var sec = now.getSeconds(); // 秒

// 数値が1桁の場合、頭に0を付けて2桁で表示する指定
if(month < 10) { month = "0" + month; }
if(day < 10) { day = "0" + day; }
if(hour < 10) { hour = "0" + hour; }
if(min < 10) { min = "0" + min; }
if(sec < 10) { sec = "0" + sec; }

var openTime = year + month + day + hour + min + sec;
window.name = openTime;



}

/**
 * todayDateAdd
 * ウィンドウを開く
 * @param  formName    フォーム名
 * @param  name        名前
 */
function todayDateAdd(formName, name){
    myDate  = new Date();
    y       = myDate.getFullYear();
    m       = myDate.getMonth()+1;
    d       = myDate.getDate();
    formObj = eval('document.' + formName + '.' + name);
    formObj.value = y + "年" + m + "月" + d + "日 ：　" + "\n" + formObj.value;
}

/**
 * focusApp
 * ウィンドウを開く
 * @param  formName    フォーム名
 * @param  name        名前
 */
function focusApp(formName, name){
    formObj = eval('document.' + formName + '.' + name);
    formObj.focus();
}

/**
 * Enterキー押下時の制御.
 *
 * keyで設定した場所にフォーカスがある場合、valueで指定したボタンを押下する.
 * それ以外の場合、通常のボタンを押下する
 *
 * generalButtonId  通常、押下されるボタンのID  (null可)
 * @param key   array このIDの要素にフォーカスがある場合、特定のボタンを押下する (null可)
 * @param value array 特定のボタン (null可)
 *
 */
function setOnEnterButton(generalButtonId, key, value){

    //連想配列を作る
    var namedArray = new Array();
    if(key != null){
        for (i = 0; i < key.length; i++){
            namedArray[key[i]] = value[i];
        }
    }
    var generalButton = (generalButtonId != null) ? document.getElementById(generalButtonId) : null;

    document.onkeypress=function(e){
        e = e ? e : event;
        var keyCode= e.charCode ? e.charCode : ((e.which) ? e.which : e.keyCode);
        var elem = e.target ? e.target : e.srcElement;

        //ENTERキーが押下された場合
        if(Number(keyCode) == 13) {

            //指定された場所にフォーカスがある場合、指定のボタンを自動押下する
            for (var i in namedArray) {
                if(elem.id != null && elem.id == i){
                    //指定されたボタンを自動押下
                    document.getElementById(namedArray[i]).click();
                    return false;
                }
            }
            //buttonやsubmitにフォーカスがある場合を除き、通常ボタンの押下処理をする
            if(generalButton!= null && !isIgnoreEnterKeySubmitElement(elem)){
                generalButton.click();
            }

            //入力要素ならEnter処理を無効にする
            switch(elem.type){
            case "text":
            case "radio":
            case "checkbox":
            case "password":
                return false;
            }
            return true;
        }
    };
}

/**
 * submit処理を無視するかどうか
 * @param elem フォーカスのあたっている要素
 * @return  submit処理を無視する場合はtrue それ以外はfalse
 *
 */
function isIgnoreEnterKeySubmitElement(elem){
    var tag = elem.tagName;
    if(tag.toLowerCase() == "textarea"){
        return true;
    }
    switch(elem.type){
    case "button":
    case "submit":
    case "reset":
    case "image":
    case "file":
        return true;
    }
    return false;
}
