var ROOT_URL = 'http://crystal.jemmy.co.jp';
var loginName = '';
var isLogin = false;
var birthYear = '';
var birthMonth = '';
var birthDay = '';
var usablePoint = '';
var pointLimito = '';
var shnCdList = '';
var shnNameList = '';
var teikaList = '';
var cmnSuList = '';
var cmnTotalSu = '';
var cmnTotalKin = '';
//===============================================================================
// 概　要：varExpr1がnullの場合にはvarExpr2を戻し、varExpr1がNULLでない場合にはvarExpr1を戻す
// 引　数：varExpr1:検査対象データ
// 　　　：varExpr2:検査対象データがNULLのときに戻すデータ
// 　　　：ZeroStrIsNull:長さ0の文字列をNULLと同等に扱うかを表すフラグ(省略時は同等に扱わない)
// 戻り値：概要の通り
// 作成者：
// 作成日：2006/02/06
//-------------------------------------------------------------------------------
// 更新者：
// 更新日：
//===============================================================================
function __NVL(varExpr1, varExpr2, ZeroStrIsNull /* = false */) {
	var expr1;
	if (typeof varExpr1 == 'string') {
		expr1 = varExpr1;
	} else if (varExpr1 == null) {
		expr1 = null;
	} else if (varExpr1.data != undefined) {
		expr1 = varExpr1.data;
	} else if (varExpr1.value != undefined) {
		expr1 = varExpr1.value;
	} else {
		expr1 = varExpr1;
	}
//		expr1 = Try.these(
//			function() {return varExpr1.data;},
//			function() {return varExpr1.value;}
//		);
//	}
	if (ZeroStrIsNull == undefined) ZeroStrIsNull = false;	// ZeroStrIsNull が省略されていたらfalseとする
	// 検査対象データがNULLの場合
	if (expr1 == null) {
		return varExpr2;
	} else {
		if (ZeroStrIsNull && expr1 == '') {
			return varExpr2;
		} else {
			return expr1;
		}
	}
}

//===============================================================================
// 概　要：押されたキ－コードを返す
// 引　数：e:eventオブジェクト
// 戻り値：概要の通り
// 作成者：
// 作成日：2006/02/06
//-------------------------------------------------------------------------------
// 更新者：
// 更新日：
//===============================================================================
function __getKeyCode(e) {  
	if (document.all) {
		return event.keyCode;
	} else if (document.getElementById) {
		//return (e.keyCode != 0) ? e.keyCode : e.charCode;
		if (e.keyCode != 0) {
			return e.keyCode;
		} else {
			return e.charCode;
		}
	} else if (document.layers) {
		return e.which;
	}
}

//===============================================================================
// 概　要：テキストフィールドで数値(-,0～9,.)以外の入力をキャンセルする
// 　　　：テキストフィールドのOnKeyPressイベントで使用する
// 引　数：e:イベントオブジェクト(Mozilla用)
// 戻り値：数値ならtrue、そうでなければfalse
// 作成者：
// 作成日：2006/02/06
//-------------------------------------------------------------------------------
// 更新者：
// 更新日：
//===============================================================================
function __onlyNum(e) {
	//e = (e) ? e : ((window.event) ? e : null);
	if (e) {
		e = e;
	} else if (window.event) {
		e = window.event;
	} else {
		e = null;
	}
	if (e) {
		var KC = __getKeyCode(e);
		if (((KC < 48) || (KC > 57)) && (KC != 45) && (KC != 46) && (KC != 8) && (KC != 9) && (KC != 35) && (KC != 36) && (KC != 37) && (KC != 39)){	// 45:- 46:. 8:bs 9:tab 35:end 36:home 37:l-arrow 39:r-arrow
			e.returnValue = false;
			return false;
		}
	}
	return true;
}

//===============================================================================
// 概　要：テキストフィールドで郵便番号用文字(-,0～9)以外の入力をキャンセルする
// 　　　：テキストフィールドのOnKeyPressイベントで使用する
// 引　数：e:イベントオブジェクト(Mozilla用)
// 戻り値：数値ならtrue、そうでなければfalse
// 作成者：
// 作成日：2006/02/06
//-------------------------------------------------------------------------------
// 更新者：
// 更新日：
//===============================================================================
function __onlyZip(e) {
	//e = (e) ? e : ((window.event) ? e : null);
	if (e) {
		e = e;
	} else if (window.event) {
		e = window.event;
	} else {
		e = null;
	}
	if (e) {
		var KC = __getKeyCode(e);
		if (((KC < 48) || (KC > 57)) && (KC != 45) && (KC != 8) && (KC != 9) && (KC != 35) && (KC != 36) && (KC != 37) && (KC != 39)){	// 45:- 8:bs 9:tab 35:end 36:home 37:l-arrow 39:r-arrow
			e.returnValue = false;
			return false;
		}
	}
	return true;
}

//===============================================================================
// 概　要：テキストフィールドで日付用文字(-,/,.,0～9)以外の入力をキャンセルする
// 　　　：テキストフィールドのOnKeyPressイベントで使用する
// 引　数：e:イベントオブジェクト(Mozilla用)
// 戻り値：数値ならtrue、そうでなければfalse
// 作成者：
// 作成日：2006/02/06
//-------------------------------------------------------------------------------
// 更新者：
// 更新日：
//===============================================================================
function __onlyDate(e) {
	//e = (e) ? e : ((window.event) ? e : null);
	if (e) {
		e = e;
	} else if (window.event) {
		e = window.event;
	} else {
		e = null;
	}
	if (e) {
		var KC = __getKeyCode(e);
		if (((KC < 48) || (KC > 57)) && (KC != 45) && (KC != 46) && (KC != 47) && (KC != 8) && (KC != 9) && (KC != 35) && (KC != 36) && (KC != 37) && (KC != 39)){	// 45:- 46:. 8:bs 9:tab 35:end 36:home 37:l-arrow 39:r-arrow
			e.returnValue = false;
			return false;
		}
	}
	return true;
}

//===============================================================================
// 概　要：渡された文字列が日付として有効かチェックする
// 　　　：テキストフィールドのOnKeyPressイベントで使用する
// 引　数：str: チェック対象文字列
// 戻り値：有効ならtrue、そうでなければfalse
// 作成者：
// 作成日：2006/02/06
//-------------------------------------------------------------------------------
// 更新者：
// 更新日：
//===============================================================================
function __IsValidDate(str) {
	var yyyy,mm,dd,strdata1, strdata2, strdata3, strdata4;

	strdata1 = str.match(/^(\d\d\d\d)\/(\d\d)\/(\d\d)$/);
	strdata2 = str.match(/^(\d\d\d\d)\/(\d\d)\/(\d)$/);
	strdata3 = str.match(/^(\d\d\d\d)\/(\d)\/(\d\d)$/);
	strdata4 = str.match(/^(\d\d\d\d)\/(\d)\/(\d)$/);
	if (!strdata1 && !strdata2 && !strdata3 && !strdata4) return false;

	yyyy = eval(RegExp.$1);
	mm = eval(RegExp.$2);
	dd = eval(RegExp.$3);

	if ((mm < 1) || (mm > 12)) return false;
	if ((dd < 1) || (dd > 31)) return false;

    if ((mm == 1) || (mm == 3) || (mm == 5) || (mm == 7) || (mm == 8) || (mm == 10) || (mm == 12)) {
		if ((dd < 1) || (dd > 31)) return false;
	} else {
		if ((dd < 1) || (dd > 30)) return false;
	}
    if (mm == 2) {
		if ((yyyy % 400 == 0) || ((yyyy % 4 == 0) && (yyyy % 100 != 0))) {
			if (dd > 29) return false;
		} else {
			if (dd > 28) return false;
		}
    }
	return true;
}
//===============================================================================
// 概　要：渡された値が数値ならtrue、そうでなければfalseを返す
// 　　　：オブジェクトが渡された場合、そのvalueプロパティの値を評価する
// 引　数：fld:valueプロパティを持つオブジェクトもしくは文字列
// 戻り値：数値ならtrue、そうでなければfalse
// 作成者：
// 作成日：2006/02/06
//-------------------------------------------------------------------------------
// 更新者：
// 更新日：
//===============================================================================
function __IsNum(fld) {
	var rg = new RegExp('^-?[0-9]+\.?[0-9]*$','g');
	var str = __NVL(fld, '');
	if (str) {
		mt = str.match(rg);
		if (!mt) {
			return false;
		}
	}
	return true;
}

//===============================================================================
// 概　要：渡された値が全角のみならtrue、そうでなければfalseを返す
// 　　　：オブジェクトが渡された場合、そのvalueプロパティの値を評価する
// 引　数：fld:valueプロパティを持つオブジェクトもしくは文字列
// 戻り値：すべて全角ならtrue、そうでなければfalse
// 作成者：
// 作成日：2006/02/06
//-------------------------------------------------------------------------------
// 更新者：
// 更新日：
//===============================================================================
function __IsZenkaku(fld) {
	var str = __NVL(fld, '');
	for (var i = 0; i < str.length; ++i) {
		var c = str.charCodeAt(i);
		//  半角カタカナは不許可
		if (c < 256 || (c >= 0xff61 && c <= 0xff9f)) {
			return false;
		}
	}
	return true;
}

//===============================================================================
// 概　要：渡された値が半角のみならtrue、そうでなければfalseを返す
// 　　　：オブジェクトが渡された場合、そのvalueプロパティの値を評価する
// 引　数：fld:valueプロパティを持つオブジェクトもしくは文字列
// 戻り値：すべて全角ならtrue、そうでなければfalse
// 作成者：
// 作成日：2006/02/06
//-------------------------------------------------------------------------------
// 更新者：
// 更新日：
//===============================================================================
function __IsHankaku(fld) {
	var str = __NVL(fld, '');
	for (var i = 0; i < str.length; ++i) {
		var c = str.charCodeAt(i);
		//  半角カタカナは不許可
		if (c >= 256 || (c >= 0xff61 && c <= 0xff9f)) {
			return false;
		}
	}
	return true;
}

//===============================================================================
// 概　要：渡された値のバイト数を返す
// 　　　：オブジェクトが渡された場合、そのvalueプロパティの値を評価する
// 引　数：fld:valueプロパティを持つオブジェクトもしくは文字列
// 戻り値：文字列のバイト数
// 作成者：
// 作成日：2006/02/06
//-------------------------------------------------------------------------------
// 更新者：
// 更新日：
//===============================================================================
function __getByteCount(fld) {
	var str = __NVL(fld, '');
	var count = 0;
	for ( var i = 0; i < str.length; ++i ) {
		var sub = str.substring(i, i + 1);
		//全角の場合２バイト追加。
		if (__IsZenkaku(sub)) {
			count += 2;
		} else {
			count += 1;
		}
	}
	return count;
}

//===============================================================================
// 概　要：クライアントエリアの幅と高さを返す
// 　　　：オブジェクトが渡された場合、そのvalueプロパティの値を評価する
// 引　数：なし
// 戻り値：幅(Width)と高さ(Height)を要素に持つArrayオブジェクト
// 作成者：
// 作成日：2006/02/06
//-------------------------------------------------------------------------------
// 更新者：
// 更新日：
//===============================================================================
function __getWindowSize() {
	var winSize = new Array();

	if (document.all) {
		winSize["Width"] = document.body.clientWidth;
		winSize["Height"] = document.body.clientHeight;
	} else {
		winSize["Width"] = window.innerWidth;
		winSize["Height"] = window.innerHeight;
	}
	return winSize;
}
//===============================================================================
// 概　要：渡された数値を表す文字列に3桁ごとカンマを入れて返す
// 引　数：数値を表す文字列
// 戻り値：3桁ごとカンマを入れた文字列
// 作成者：
// 作成日：2006/02/06
//-------------------------------------------------------------------------------
// 更新者：
// 更新日：
//===============================================================================
function __formatNumber(str) {
	var result = String(str);
	if (result.length == 0) return '';
	result = result.replace(/\,/g,"");
	result = result.match(/./g).reverse().join("");
	result = result.replace(/(\d{3})/g,"$1,");
	result = result.match(/./g).reverse().join("").replace(/^,/,"");
	return result;
}
//===============================================================================
// 概　要：渡された文字列のエスケープされたHTMLマークアップを解除して返す
// 　　　：基本的にprototype.jsのunescapeHTMLと同じだが、本関数は\r、\nをunescapeしない
// 　　　：(要prototype.js)
// 引　数：エスケープを解除する文字列
// 戻り値：エスケープを解除した文字列
// 作成者：
// 作成日：2006/02/06
//-------------------------------------------------------------------------------
// 更新者：
// 更新日：
//===============================================================================
function __unescapeHTML(str) {
	var result = String(str);
	if (result.length == 0) return '';
	result = result.replace(/\r/g, '\\r');
	result = result.replace(/\n/g, '\\n');
	result = result.unescapeHTML();
	result = result.replace(/\\r/g, '\r');
	result = result.replace(/\\n/g, '\n');
	return result;
}

function __basename(path) {
	var str = path.replace(/.*\//, '');
	return str.replace(/.*\\/, '');
}
