
/**
 * 引数フォームのサブミットボタンをすべて無効か
 * 
 * @param form
 * @return
 */
function enableSubmit(form, enable) {
	if (enable) {
		$(":submit").removeAttr("disabled");
	} else {
		$(":submit").attr("disabled", "disabled");
	}
}


function transition(form, url) {
	form.action = url;
	form.submit();
}

/**
 * 登録時の確認ダイアログ表示
 *  
 * @return
 */
function registConfirm() {
	return confirm("入力内容を登録します。よろしいですか？");
}

/**
 * Csv登録時の確認ダイアログ表示
 * 
 * @return
 */
function csvRegistConfirm() {
	return confirm("指定されたCsvを登録します。よろしいですか？");
}

function delConfirm(message) {
	return confirm("指定された" + message +"を削除します。よろしいですか?");
}


function setErrorStyle(id) {
	var elem = document.getElementById(id);
	elem.className = "error";
}

/**
 * 引数の文字列中に数値以外の文字が存在した場合は、その文字を削除して返す。
 * 
 * @param val
 * @return
 */
function parseMoney(val) {
	
	var ret = "";
	
	for (var index = 0 ; index <= val.length ; index++) {
	
		if (index == 0) {
			reg = "\^[\-0-9]+$";
		} else {
			reg = "\^[0-9]+$";
		}
		
		if (val.substr(index, 1).match(reg)) {
			ret += val.substr(index, 1);
		}
		
	}
	
	if (ret == "") {
		ret = "0";
	}
	
	return ret;
}


function parseNumeric(val) {
	
	var ret = '';
	var len = val.length - 1;
	var diff = "０".charCodeAt(0) - "0".charCodeAt(0);

	reg = "\^[0-9０-９]+$";
	
	for (var index = 0 ; index <= len ; index++) {
	
		chr = val.charAt(index);
		
		if (chr.match(reg)) {
			
			if (chr >= '０' && chr <= '９') {
				ret += String.fromCharCode(chr.charCodeAt(0) - diff);
			} else {
				ret += chr;
			}			
			 
		}
	}
	
	if (ret == "") {
		ret = "0";
	}
	
	return ret;
	
}

/**
 * 日付の変換を行う。
 * 
 * YYYY/MM/DD -> YYYY/MM/DD ※そのまま
 * MM/DD      -> YYYY/MM/DD ※年は今年で補完
 * YY/MM/DD   -> YYYY/MM/DD 
 * 上記以外   -> 変換せずにそのまま返す.
 * 
 * @param $val
 * @return
 */
function parse_date_type(val) {
	
	var parse_str = '';
	
	var now = new Date();
	
	if (val.match('^[0-9]{2}\/[0-9]+\/[0-9]+$')) {
		parse_str = '20' + val;
	} else if (val.match('^[0-9]+\/[0-9]+\/[0-9]+$')) {
		// YYYY/MM/DD形式
		parse_str = val;
	} else if (val.match('^[0-9]+\/[0-9]+$')) {
		// MM/DD形式⇒年を補完
		parse_str = now.getFullYear() + '/' + val;
	} else if (val.match('^[0-9]{2}\/[0-9]+\/[0-9]+$')) {
		// YY/MM/DD形式⇒
	} else {
		return val;
	}

	// 日付型チェック
	if (isDate(parse_str)) {
		// 日付型
		// YYYY/MM/DDにする
		dateAry = parse_str.split('/');
		
		dateAry[1] = '00' + dateAry[1];
		dateAry[2] = '00' + dateAry[2];
		
		return dateAry[0] + '/' + dateAry[1].slice(-2) + '/' + dateAry[2].slice(-2);
	}
	
	return val;
}

/**
 * 引数が日付として有効かチェックする.
 * 
 * YYYY/MM/DD
 * 
 * @param val
 * @return
 */
function isDate(val) {
	
	if (val.length == 0 || val == '') {
		return false;
	}
	
	var dateAry = val.split('/');
	
	if (dateAry.length == 3) {
	
		var date = new Date(dateAry[0], dateAry[1] - 1, dateAry[2]);
		
		if (date.getFullYear() == dateAry[0] && 
			(date.getMonth() == dateAry[1] - 1) &&
			date.getDate() == dateAry[2]) {
			return true;
		}
	}
	
	return false;
	
}

/**
 * ロード時に画面にメッセージを表示する
 * @param message
 * @return
 */
function onLoadShowMessage(message) {
	addListener(window, 'load', function() { alert(message);}, false);
}

/**
 * 入力値が切り替わったときに表示する。
 * @param id
 * @param compareValue 比較用のデータ
 * @return
 */
function onChangeValueChanged(id, compareValue) {

	var elem = document.getElementById(id);

	addListener(elem, 'change', function() {valueChanged(id, compareValue);}, false);
}

/**
 * 日付テキストボックスの変更時の日付変換処理
 * 
 * @param id
 * @return
 */
function onChangeDateType(id) {
	var elem = document.getElementById(id);
	addListener(elem, 'change', function() {elem.value = parse_date_type(elem.value);}, false);
}

/**
 * 引数のidのデータとoldValueがかわ
 * 
 * @param id
 * @param oldValue
 * @return
 */
function valueChanged(id, oldValue) {

	var elem = document.getElementById(id);

	if (elem != null) {
		if (elem.value == oldValue) {
			// 変更有
			elem.style.backgroundColor = '#FFFFFF';
		} else {
			// 変更有
			elem.style.backgroundColor = '#FFE4E1';
		}
	}
	
}

/**
 * イベントを登録
 * 
 * @param elem
 * @param eventType
 * @param func
 * @param cap
 * @return
 */
function addListener(elem, eventType, func, cap)
{
    if(elem.addEventListener)
    {
        elem.addEventListener(eventType, func, cap);
    }
    else if(elem.attachEvent)
    {
        elem.attachEvent('on' + eventType, func);
    }
}


/**
 * 金額型のチェック
 * 　TODO:かなり怪しい
 * 
 * @param val
 * @return
 */
function isMoney(val) {

	if (val.match('^[0-9]+$')) {
		return true;
	}
	
	return false;
}

/**
 * 郵便番号ボタンの処理
 *
 */
function searchAjaxAddress(zipcode1, zipcode2, setState, setAddr1, setAddr2, setAddr3) {

	// 郵便番号が未入力の場合は何もしない
	if ($("#" + zipcode1).val() + $("#" + zipcode2).val() == '') {
		return;
	}
	
	jQuery.ajax({
		cache: false,
		url: "/nenga/common/search_zip.php",        // リクエスト先Url
		dataType: "json",            // データ形式
		data: {                        // 送信するデータ
			"zip_code": $("#" + zipcode1).val() + $("#" + zipcode2).val()
		},
		success:function(data, dataTypes) {    // 成功時の処理
			if (data != false) {

				var existed = false;

				$("#" + setState + " option").each(function()
				{
					if (data.state_id == $(this).val()) {
						existed = true;
					}
				});
				
				if (existed) {
					$("#" + setState).val(data.state_id);
					$("#" + setAddr1).val(data.city);
					$("#" + setAddr2).val(data.domain_name);
					$("#" + setAddr3).val(data.bill_name);
					
					$("#" + setState).removeClass("errorField");
					$("#" + zipcode2).removeClass("errorField");
					$("#" + setAddr1).removeClass("errorField");
					$("#" + setAddr2).removeClass("errorField");
					$("#" + setAddr3).removeClass("errorField");

				} else {
					// 取得した郵便番号に該当する都道府県が、選択肢に存在しない
//					$.validationEngine.buildPrompt($("#" + zipcode2),"入力された郵便番号は指定することができません。","error")
				}
			} else {
//				$.validationEngine.buildPrompt($("#" + zipcode2),"入力された「郵便番号」が、郵便番号情報に存在しないか、指定できません。","error")
			}
		},
		error: function(XMLHttpRequest, status, errorThrown) {
			alert(status);
		}
	});
}


/**
 * 郵便番号ボタンの処理
 *
 */
function searchAjaxAllAddress(zipcode, addr) {

	// 郵便番号が未入力の場合は何もしない
	if ($("#" + zipcode).val() == '') {
		return;
	}
	
	$.ajax({
		cache: false,
		url: "/nenga/common/search_zip.php",        // リクエスト先Url
		dataType: "json",            // データ形式
		data: {                        // 送信するデータ
			"zip_code": $("#" + zipcode).val().replace('-', '')
		},
		success:function(data, dataTypes) {    // 成功時の処理
			if (data != false) {
				$("#" + addr).val(data.state_name + data.city + data.domain_name + data.bill_name);
				$("#" + zipcode).removeClass("errorField");
				$("#" + addr).removeClass("errorField");
			} else {
			}
		},
		error: function(XMLHttpRequest, status, errorThrown) {
			alert(status);
		}
	});
}

/**
 * チェックNGフィールドにエラー時の背景色追加
 * @param $id
 * @return
 */
function setCheckNgField(index, ng_id, message) {
	
	// idは不要 
	if (ng_id == "") {
		return;
	}

	var ng = document.getElementById(ng_id); 

	if (ng == null || ng == undefined) {
		return;
	}
	
	if (index == 0) {
		ng.focus();
//		$("#" + ng_id).focus();
	}
	
	ng.setAttribute("class", ng.getAttribute("class") + " errorField");
//	$("#" + ng_id).addClass("errorField");
	
	
}

function noPaste(event) {
	if (event.ctrlKey && event.keyCode==86) {
		return false;
	}
	return event;
}

function comma(val) {
	
	var i;
	
	val = String(val);
	
	for (i = 0 ; i < (val.length / 3) ; i++) {
		val = val.replace(/^([+-]?\d+)(\d\d\d)/,"$1,$2");
	}
	
	return val;
}

function initDatePicker() {
	
	monthName = ['年&nbsp;1月','年&nbsp;2月','年&nbsp;3月','年&nbsp;4月','年&nbsp;5月','年&nbsp;6月', '年&nbsp;7月','年&nbsp;8月','年&nbsp;9月','年&nbsp;10月','年&nbsp;11月','年&nbsp;12月'];
	dayName = ['日','月','火','水','木','金','土'];
	           
	$.datepicker.regional['ja'] = {
		clearText: '', clearStatus: '',   
	    closeText: '閉じる', closeStatus: '',   
	    prevText: '前月', prevStatus: '',   
	    nextText: '次月', nextStatus: '',   
	    currentText: '今日', currentStatus: '',   
	    monthNames: monthName,   
	    monthNamesShort: monthName,   
	    monthStatus: '', yearStatus: '',   
	    weekHeader: 'Wk', weekStatus: '',   
	    dayNames: dayName,   
	    dayNamesShort: dayName,   
	    dayNamesMin: dayName,   
	    dayStatus: 'DD', dateStatus: 'D, M d',   
	    dateFormat: 'yy/mm/dd', firstDay: 0,    
	    initStatus: '',
	    isRTL: false,
	    showMonthAfterYear: true
	};
	
	$.datepicker.setDefaults($.extend($.datepicker.regional['ja']));
}

function mypage_fault() {
	$.validationEngine.buildPrompt($("#mypage_block"), "ログインが必要です");
}

