/******************************************************************************
 * FILE      : $Id: front.js,v 1.2 2007/12/21 00:48:35 hgotou Exp $
 * VERSION   : $Revision: 1.2 $
 * DATE      : $Date: 2007/12/21 00:48:35 $
 * HISTORY   : 
 * COPYRIGHT : Copyright(c) 2000-2006 Nikon Systems Inc. All Rights Reserved.
 ******************************************************************************/

/* ----------------------------------------------------------------------------
 * パラメータ定義
 * ---------------------------------------------------------------------------- */
var submitFlag   = false; // フォーム2重送信フラグ

var timer;
initTimer();

/* ----------------------------------------------------------------------------
 * HTTPアクセス系
 * ---------------------------------------------------------------------------- */

/*
 * 指定されたURLにアクセスします。
 *
 * @param  url  アクセスするURL
 * @author Junya,SHIBATO
 */
function accessUrl(url) {
    if ( getSubmitFlag() ) {
        return;
    } 

    initTimer();
    timer = setInterval('initSubmitFlag()', 3000);

    setSubmitFlag( true );
    location.href = url;
}


/*
 * 指定されたフォームを送信します。
 *
 * @param form  フォームオブジェクト
 * @param url  アクセスするURL
 * @param target  ターゲット
 * @author Junya,SHIBATO
 */
function formSubmit(form, url, target) {

    if ( getSubmitFlag() ) {
        return;
    } 

    form.action = url;
    if (target != null) {
        form.target = target;
    } else {
        form.target = "_top";
    }

    initTimer();
    timer = setInterval('initSubmitFlag()', 3000);

    setSubmitFlag(true);
    form.submit();
}

function formSubmitOnce(form, url, target) {
    if ( form.submitClickFlag.value=="true" ) {
        return;
    } 

    form.action = url;
    if (target != null) {
        form.target = target;
    } else {
        form.target = "_top";
    }

    form.submitClickFlag.value=true;
    form.submit();
}

/*
 * 2重処理フラグ初期化用のタイマー初期化
 *
 * @author Junya,SHIBATO
 */

function initTimer() {

    if (timer != null ) {
        clearInterval(timer);
    }
}

/*
 * 2重送信フラグ取得 
 *
 * @return true: 送信中/ false:未送信
 * @author Junya,SHIBATO
 */
function getSubmitFlag() {

    return window.self != window.top
         ? window.top.submitFlag
         : submitFlag;
}

/*
 * 2重送信フラグ設定
 *
 */
function setSubmitFlag( flag ) {

    if ( window.self != window.top ) {
        window.top.submitFlag = flag;
    } else {
        submitFlag = flag;
    }
}

/*
 * 2重送信フラグ初期化
 *
 */
function initSubmitFlag() {
    initTimer();
    setSubmitFlag(false);
}


/* ----------------------------------------------------------------------------
 * ウィンドウ操作系
 * ---------------------------------------------------------------------------- */

/*
 * 指定されたパラメータ情報よりウィンドウをオープンします。
 * 
 * @param url  URL
 * @param name  ウィンドウオブジェクト名
 * @param scroll  スクロールバー設定 (yes/no)
 * @param width  ウィンドウ幅
 * @param height  ウィンドウ高さ
 * @param top  ウィンドウ位置 (画面上端からの距離)
 * @param left  ウィンドウ位置 (画面左端からの距離)
 * @param tool  ツールバー設定 (yes/no)
 * @param directories  ユーザ設定ツールバー設定 (yes/no)
 * @param location  ロケーションバー設定 (yes/no)
 * @param status  ステータスバー設定 (yes/no)
 * @param resizable  リサイズ設定 (yes/no)
 * @param menu  メニューバー設定 (yes/no)
 * @return  ウィンドウオブジェクト
 * @author Junya,SHIBATO
 */
function openWindow(
    url,
    name,
    scroll,
    width,
    height,
    top,
    left,
    tool,
    directories,
    location,
    status,
    resizable,
    menu) {
    top  = top  ? top  : (window.screen.height - height) / 2;
    left = left ? left : (window.screen.width - width) / 2;
    var option = 
        "scrollbars=" + scroll + 
        ",width=" + width + 
        ",height=" + height + 
        ",top=" + top + 
        ",left=" + left + 
        ",toolber=" + tool + 
        ",directories=" + directories + 
        ",location=" + location + 
        ",status=" + status  + 
        ",resizable=" + resizable + 
        ",menubar=" + menu;
    return window.open(url, name, option);
}

/*
 * ウィンドウを閉じる。
 * 
 * @author Junya,SHIBATO
 */
function windowClose() {
    window.close();
}

/*
 * ウィンドウを閉じる。firefox対応
 * 
 * @author masanori mori
 */
function close_win(){
	var nvua = navigator.userAgent;
	if(nvua.indexOf('MSIE') >= 0){
	if(nvua.indexOf('MSIE 5.0') == -1) {
	top.opener = '';
	}
	}
	else if(nvua.indexOf('Gecko') >= 0){
	top.name = 'CLOSE_WINDOW';
	wid = window.open('','CLOSE_WINDOW');
	}
	top.close();
}

/* ----------------------------------------------------------------------------
 * ダイアログ表示系
 * ---------------------------------------------------------------------------- */

/*
 * 確認ダイアログを表示します。
 * 
 * @param str  確認メッセージ
 * @return 選択値
 * @author Junya,SHIBATO
 */
function openConfirm(str) {
    return window.confirm(str);
}


/*
 * 警告ダイアログを表示します。
 * 
 * @param str  警告メッセージ
 * @author Junya,SHIBATO
 */
function openAlert(str) {
    window.alert(str);
}


/*
 * 入力ダイアログを表示します。
 * 
 * @param str  入力説明メッセージ
 * @return 入力値
 * @author Junya,SHIBATO
 */
function openPrompt(str) {
    return window.prompt(str);
}


/* ----------------------------------------------------------------------------
 * 選択値操作系
 * ---------------------------------------------------------------------------- */
/*
 * 繰返項目のチェックボックスをＯＮにする。
 *
 * @param form     フォームオブジェクト
 * @param name     配列名
 * @param property チェックボックスプロパティ
 * @author Junya Shibato
 */
function allCheck( form , name , property ) {

    var cbName;
    var obj;

    for ( i = 0; ; i++ ) {
        cbName = name + "[" + i + "]." + property;
        obj = form.elements[ cbName ];
        if ( obj == null ) {
            break;
        }
        obj.checked = true;
    }
}
/*
 * 繰返項目のチェックボックスをＯＮにする。
 *
 * @param form     フォームオブジェクト
 * @param name     配列名
 * @param property チェックボックスプロパティ
 * @author Junya Shibato
 */
function allCheckSimple( form , name ) {

    var cbName;
    var obj;

    for ( i = 0; ; i++ ) {
        cbName = name + "[" + i + "]";
        obj = form.elements[ cbName ];
        if ( obj == null ) {
            break;
        }
        obj.checked = true;
    }
}


/*
 * 繰返項目のチェックボックスをＯＦＦにする。
 *
 * @param form     フォームオブジェクト
 * @param name     配列名
 * @param property チェックボックスプロパティ
 * @author Junya Shibato
 */
function allUncheck( form , name , property ) {

    var cbName;
    var obj;

    for ( i = 0; ; i++ ) {
        cbName = name + "[" + i + "]." + property;
        obj = form.elements[ cbName ];
        if ( obj == null ) {
            break;
        }
        obj.checked = false;
    }
}
/*
 * 繰返項目のチェックボックスをＯＦＦにする。
 *
 * @param form     フォームオブジェクト
 * @param name     配列名
 * @param property チェックボックスプロパティ
 * @author Junya Shibato
 */
function allUncheckSimple( form , name ) {

    var cbName;
    var obj;

    for ( i = 0; ; i++ ) {
        cbName = name + "[" + i + "]";
        obj = form.elements[ cbName ];
        if ( obj == null ) {
            break;
        }
        obj.checked = false;
    }
}


/*
 * 繰返項目のセレクトボックスを指定のインデックス要素を選択状態とする。
 *
 * @param form     フォームオブジェクト
 * @param name     配列名
 * @param property チェックボックスプロパティ
 * @param index index インデックス
 * @author Junya Shibato
 */
function selectOption( form , name , property, index ) {
    for ( i = 0; ; i++ ) {
        cbName = name + "[" + i + "]." + property;
        obj = form.elements[ cbName ];
        if ( obj == null ) {
            break;
        }
        obj[index].selected = true;
    }
}


/* ----------------------------------------------------------------------------
 * 入力値検証系
 * ---------------------------------------------------------------------------- */

/*
 * NULL判定を行います。
 * 
 * @param str  判定対象文字列
 * @return 判定対象文字列がNULLの場合 true、NULLでない場合 false を返します。
 * @author Junya,SHIBATO
 */
function isNull(str) {
    return str == null;
}

/*
 * 「NULL」＆「空文字」判定 ( == null || == "" ) を行います。
 * 
 * @param str  対象文字列
 * @return 対象文字列が「NULL」もしくは「空文字」である場合 true、それ以外の場合 false を返します。
 * @author Junya,SHIBATO
 */
function isEmpty(str) {
    
    return str == null || str.length == 0;
}

/*
 * 「正規表現」判定 ( == 正規表現 ) を行います。
 * ※「NULL」もしくは「空文字」である場合は判定を行わずに true を返します。
 *
 * @param str  対象文字列
 * @return 対象文字列が「正規表現」にマッチする場合 true、それ以外の場合 false を返します。
 * @author Junya,SHIBATO
 */
function isMask(str, pattern) {
    
    if (isEmpty(str)) {
        return true;
    } else {
        return str.match(pattern);
    }
}


/*
 * 「１０進数、整数」判定を行います。
 * ※「NULL」もしくは「空文字」である場合は判定を行わずに true を返します。
 *
 * @param str  対象文字列
 * @return 対象文字列が「１０進数、整数」である場合 true、それ以外の場合 false を返します。
 * @author Junya,SHIBATO
 */
function isInteger(str) {

    if (isEmpty(str)) {
        return true;
    } else {
//      return !isNaN(str) && parseInt(str) == parseFloat(str);
        return !isNaN(str) && isMask(str, /^[-]?[0-9]+$/g);
    }
}


/*
 * 「１０進数、整数」＆「下限数値」判定を行います。
 * ※「NULL」もしくは「空文字」である場合は判定を行わずに true を返します。
 *
 * @param str  対象文字列
 * @param min  下限数値
 * @return 対象文字列が「１０進数、整数」かつ「下限数値・以上」である場合 true、それ以外の場合 false を返します。
 * @author Junya,SHIBATO
 */
function isIntegerMin(str, min) {
    
    if (isEmpty(str)) {
        return true;
    } else {
        return isInteger(str) && isInteger(min) && parseInt(min) <= parseInt(str);
    }
}


/*
 * 「１０進数、整数」＆「上限数値」判定を行います。
 * ※「NULL」もしくは「空文字」である場合は判定を行わずに true を返します。
 *
 * @param str  対象文字列
 * @param max  上限数値
 * @return 対象文字列が「１０進数、整数」かつ「上限数値・以下」である場合 true、それ以外の場合 false を返します。
 * @author Junya,SHIBATO
 */
function isIntegerMax(str, max) {
    
    if (isEmpty(str)) {
        return true;
    } else {
        return isInteger(str) && isInteger(max) && parseInt(str) <= parseInt(max);
    }
}

/* ----------------------------------------------------------------------------
 * 入力値操作系
 * ---------------------------------------------------------------------------- */

/*
 * 空白削除
 *
 * @param  str 文字列
 * @return 左右の空白が削除された文字列
 * @author Junya,SHIBATO
 */
function trim( str ) {

    while (true) {

        if( str.length == 0 ) {
            return "";
        }

        var lChar = str.charAt(0);
        if ( lChar == " " || lChar == "　") {
            str = lTrim( str );
        }
        
        if( str.length == 0 ) {
            return "";
        }

        var rChar = str.charAt(str.length-1);
        if ( rChar == " " || rChar == "　") {
            str = rTrim( str );
        } 

        if ( lChar != " " && lChar != "　" && rChar != " " && rChar != "　") {
            break;
        }

    }
    return str;
}

/*
 * 左側空白削除
 *
 * @param  str 文字列
 * @return 左側の空白が削除された文字列
 * @author Junya,SHIBATO
 */
function lTrim( str ) {

    str = String( str );
    str = str.replace( /^　+/g, "" );
    return str.replace( /^\s+/g, "" );
}

/*
 * 右側空白削除
 *
 * @param  str 文字列
 * @return     右側の空白が削除された文字列
 * @author Junya,SHIBATO
 */
function rTrim( str ) {

    str = String( str );
    str = str.replace( /　+$/g, "" );
    return str.replace( /\s+$/g, "" );
}

/* ----------------------------------------------------------------------------
 * その他
 * ---------------------------------------------------------------------------- */

/*
 * 自分自身の画面を印刷します。
 *
 * @author Junya Shibato
 */
function printWindow() {
    self.print();
}

function changeDisabled( form ) {
/*-----------------------------------------------------------------------------
 *　パスワードを変更するチェックボックスがクリックされるたびに
 *パスワード欄のDisableを切り替えます。
 *----------------------------------------------------------------------------*/

    if (form.password.disabled == false) {
        form.password.value = "";
        form.passwordConfirm.value = "";
        form.password.disabled = true;
        form.passwordConfirm.disabled = true;
    } else {
        form.password.disabled = false;
        form.passwordConfirm.disabled = false;
    }
}

/* ----------------------------------------------------------------------------
 * AJAX
 * ---------------------------------------------------------------------------- */

/**
 * 郵便番号検索。
 *
 * @param {Object} form formオブジェクト
 */
function findAddressByZip(form) {

    var zip1 = form.postNo1.value;
    var zip2 = form.postNo2.value;
    var state = form.address1;
    var address1 = form.address2;
    var address2 = form.address3;

    if (zip1 == null || zip1.length != 3 || !isInteger(zip1)) {
        alertZipBlock();
        return;
    }
    if (zip2 == null || zip2.length != 4 || !isInteger(zip2)) {
        alertZipBlock();
        return;
    }
    if (state == null || address1 == null || address2 == null) {
         alertZipBlock();
       return;
    }

    if (form.button_43.disabled) {
        //alertZipBlock();
        return;
    }
    form.button_43.disabled =true;

    zipService.findAddressInfo(zip1, zip2, {
        callback:function(address) {
            if (address == null) {
                form.button_43.disabled =false;
                alertZipBlock();
                return;
            }
            for (var i = 0; i < state.length; i++) {
                if (state.options[i].text == address.state) {
                    state.options[i].selected = true;
                    break;
                }
            }
            address1.value = address.address1;
            address2.value = address.address2;
            alertZipNone();
            form.button_43.disabled =false;
        },
        errorHandler:function(errorString, exception) {
            form.button_43.disabled =false;
            alertZipBlock();
            //alert('エラー:' + errorString);
        }
   });
}

function initZipArea() {
    if(document.getElementById('zipAlert') != null) {
        document.getElementById('zipAlert').style.display='none';
    }
}

function alertZipNone() {
    if(document.getElementById) {
        document.getElementById('zipAlert').style.display='none';
    }
}

function alertZipBlock() {
    if(document.getElementById) {
        document.getElementById('zipAlert').style.display='block';
    }
}
