var error_message = "";
var alertColor = "#FFFF99";
function registConfirm(formNo, mes) {
	var skip = '';
	if( formNo == undefined ) formNo = 0;
	if( !checkParams(formNo) ) return false;

	var msg;
	if( mes == null ) msg = "以下の内容で登録しますか？\n";
	else msg = mes+"\n";
	var i;
	for( i=0 ; i<document.forms[formNo].length ; i++ ) {
		var element = document.forms[formNo].elements[i];
		if( element.type == 'submit' ) continue;

		if( skip != '' ) {
			var rep = new RegExp("^"+skip);
			var result = rep.exec(element.name);
			if( result != null ) { continue; }
			else { skip = ''; }
		}
		if( typeof(buildup_param) == "object" ) {
			for( j=0 ; j<buildup_param.length ; j++ ) {
				var rep = new RegExp("^"+buildup_param[j]);
				var result = rep.exec(element.name);
				if( result != null ) {
					msg += BuildUp(buildup_param[j], formNo);
					skip = buildup_param[j];
					break;
				}
			}
			if( skip != '' ) continue;
		}
		if( element.type == 'text' ) {
			var rep = new RegExp("(.*)_(y|m|d)$");
			var result = rep.exec(element.name);
			if( result == null ) {
				var rep2 = new RegExp("(.*)_confirm$");
				var result2 = rep2.exec(element.name);
				if( result2 == null ) msg += field_names[element.name]+"："+element.value+"\n";
			}
			else {
				msg += field_names[result[1]]+"："+element.value+"年"+
					eval("document.forms[formNo]."+result[1]+"_m").value+"月"+
					eval("document.forms[formNo]."+result[1]+"_d").value+"日\n";
				skip = result[1];
			}
		}
		if( element.type == 'password' ) {
			var rep = new RegExp("(.*)_confirm$");
			var result = rep.exec(element.name);
			if( result == null ) msg += field_names[element.name]+"：******\n";
		}
		else if( element.type == 'checkbox' ) {
			checked = element.checked?"On":"Off";
			var rep = new RegExp("(.*)\\\[\\\]$");
			var result = rep.exec(element.name);
			if( result == null ) {
				msg += field_names[element.name]+"："+checked+"\n";
			}
			else {
				var text_value = '';
				var text_elements = document.getElementsByName(result[1]+"_"+element.value);
				if( text_elements.length != 0 ) {
					for( var sub_index=0 ; sub_index<text_elements.length ; sub_index++ ) {
						if( text_elements[sub_index].type == 'text' ) {
							text_value = "("+text_elements[sub_index].value+")";
							skip = result[1]+"_"+element.value;
							break;
						}
					}
				}
				if( element.checked ) {
					var labels = document.getElementsByTagName('label');
					for( var label_index=0 ; label_index<labels.length ; label_index++ ) {
						if( labels[label_index].htmlFor == result[1]+"_"+element.value ) {
							msg += field_names[result[1]]+"："+labels[label_index].innerHTML+text_value+"\n";
							break;
						}
					}
				}
			}
		}
		else if( element.type == 'radio' ) {
			checked = element.checked?"On":"Off";
			var rep = new RegExp("(.*)\\\[\\\]$");
			var result = rep.exec(element.name);
			if( result == null ) {
				var rep2 = new RegExp("update_image.*");
				var result2 = rep2.exec(element.name);
				if( result2 == null ) msg += field_names[element.name]+"："+checked+"\n";
			}
			else {
				if( element.checked ) {
					var labels = document.getElementsByTagName('label');
					for( var label_index=0 ; label_index<labels.length ; label_index++ ) {
						if( labels[label_index].htmlFor == result[1]+"_"+element.value ) {
							msg += field_names[result[1]]+"："+labels[label_index].innerHTML+"\n";
							break;
						}
					}
				}
			}
		}
		else if( element.type == 'select-one' ) {
			msg += field_names[element.name]+"："+element.options[element.selectedIndex].text+"\n";
		}
		else if( element.type == 'textarea' ) {
			msg += field_names[element.name]+"：\n"+element.value+"\n";
		}
		else if( element.type == 'file' ) {
			var rep = new RegExp("upload_(.*)$");
			var result = rep.exec(element.name);
			if( result == null ) {
				upload = (element.value!='')?"アップロード":"なし";
				msg += field_names[element.name]+"："+upload+"\n";
			}
			else {
				var basename = result[1];
				var org_element = document.getElementsByName(basename)[0]
				var radio_elements = document.getElementsByName('update_'+basename);
				for( j=0 ; j<radio_elements.length ; j++ ) {
					if( radio_elements[j].checked ) {
						radio_status = radio_elements[j].value;
						break;
					}
				}
				switch( radio_status ) {
					case 'nochange': status = "変更しない"; break;
					case 'upload':
						if( element.value == '' ) {
							alert(field_names[org_element.name]+"のアップロードファイルが指定されていません。\n");
							return false;
						}
						status = "アップロード"; break;
					case 'delete':   status = "削除"; break;
				}
				msg += field_names[org_element.name]+"："+status+"\n";
			}
		}
//		else {
//			alert(element.type);
//		}
	}
	if( confirm(msg) ) {
		document.forms[formNo]._confirmed.value = 1;
		return true;
	}
	return false;
}

function editCheck(formNo) {
	if( formNo == undefined ) formNo = 0;
	if( document.forms[formNo].subcmd.value == 'update' ) {
		return checkParams(formNo);
	}
	else if( document.forms[formNo].subcmd.value == 'mail' ) {
		return true;
	}
	else if( document.forms[formNo].subcmd.value == 'delete' ) {
		return deleteConfirm(null,formNo);
	}
	return false;
}

function deleteConfirm(newLocation, formNo) {
	if( formNo == undefined ) formNo = 0;
	var msg = "登録データを削除しますか？";
	if( newLocation == null ) {
		if( confirm(msg) ) {
			document.forms[formNo]._confirmed.value = 1;
			return true;
		}
		return false;
	}
	else {
		if( confirm(msg) ) {
			location.href = newLocation+"&_confirmed=1";
		}
		void(0);
	}
}

function mdelConfirm(newLocation, formNo) {
	if( formNo == undefined ) formNo = 0;
	var delCnt = 0;
	for( i=0 ; i<document.forms[formNo].length ; i++ ) {
		var element = document.forms[formNo].elements[i];
		if( (element.name == "del[]") && element.checked ) {
			delCnt++;
		}
	}
	if( delCnt == 0 ) {
		var msg = "削除するデータをチェックして下さい。";
		alert(msg);
		return false;
	}
	var msg = delCnt+" 件のデータを削除しますか？";
	if( newLocation == null ) {
		if( confirm(msg) ) {
			document.forms[formNo]._confirmed.value = 1;
			return true;
		}
		return false;
	}
	else {
		if( confirm(msg) ) {
			location.href = newLocation+"&_confirmed=1";
		}
		void(0);
	}
}

function updateConfirm(formNo) {
	return registConfirm(formNo);
}

function checkParams(formNo) {
	error_message = "";
	var num_required = required_fields.length;
	for( i=0 ; i<num_required ; i++ ) {
		if( typeof(CustomCheck) == "function" ) {
			if( CustomCheck(required_fields[i], formNo) ) continue;
		}
		if( required_fields[i].match(/.*_date/) ) {
			ymd = new Array(required_fields[i]+"_y",required_fields[i]+"_m",required_fields[i]+"_d");
			var alert_done = false;
			for( j=0 ; j<ymd.length ; j++ ) {
				var element = document.getElementsByName(ymd[j])[0];
				if( element.value == "" ) {
					if( !alert_done ) error_message += field_names[required_fields[i]]+" が記入されていません。\n";
					element.style.backgroundColor = alertColor;
					alert_done = true;
				}
			}
		}
		else {
			var element = document.getElementsByName(required_fields[i])[0];
			if( element == null ) {
				var elements = document.getElementsByName(required_fields[i]+"[]");
				if( (elements != null) && (elements.length > 0) ) {
					var x;
					var checked = false;
					for( x=0 ; x<elements.length ; x++ ) {
						if( elements[x].type == "hidden" ) continue;
						if( elements[x].checked ) {
							checked = true;
							break;
						}
					}
					if( !checked ) {
						error_message += field_names[required_fields[i]]+" が指定されていません。\n";
						for( x=0 ; x<elements.length ; x++ ) {
							if( elements[x].type == "hidden" ) continue;
							elements[x].style.backgroundColor = alertColor;
						}
					}
				}
			}
			else if( element.value == "" ) {
				if( field_names[required_fields[i]] == null ) {
					alert(required_fields[i]+' not defined');
				}
				error_message += field_names[required_fields[i]]+" が記入されていません。\n";
				element.style.backgroundColor = alertColor;
			}
		}
	}
	if( error_message ) {
		alert("エラー：\n"+error_message);
		return false;
	}
	var element_length = document.forms[formNo].length;
	for( i=0 ; i<element_length ; i++ ) {
		var element = document.forms[formNo].elements[i];
		if( element.value == '' ) continue;
		else if( element.type == 'submit' ) continue;
		else if( element.name == 'url' ) checkUrl(element.name, element.value);
		else if( element.name == 'mail' ) checkMail(element.name, element.value);
		else if( element.name == 'passwd' ) checkPasswd(element.name, element.value, document.forms[formNo].passwd_confirm);
		else if( element.name == 'zip' ) checkZipTel(element.name, element.value);
//		else if( element.name == 'tel' ) checkZipTel(element.name, element.value);
		else if( element.name == 'fax' ) checkZipTel(element.name, element.value);
		else if( in_array(element.name, numeric_fields) != -1 ) checkNumeric(element.name, element.value);
		else {
			var rep = new RegExp("(.*)_(y|m|d)$");
			var result = rep.exec(element.name);
			if( result != null ) {
				if( result[2] == 'y' ) {
					if( !element.value.match(/^[0-9]{4}$/) ) {
						error_message += field_names[result[1]]+" は西暦年、月、日を半角数字で入力してください。\n";
						element.style.backgroundColor = alertColor;
					}
				}
				else if( !element.value.match(/^[0-9]{1,2}?$/) ){
					error_message += field_names[result[1]]+" は西暦年、月、日を半角数字で入力してください。\n";
					element.style.backgroundColor = alertColor;
				}
				continue;
			}
			rep = new RegExp("(.*)_confirm$");
			result = rep.exec(element.name);
			if( result != null ) {
				var verifyElement = document.getElementsByName(result[1])[0];
				if( (verifyElement != null) &&
					(element.value != verifyElement.value) ) {
					error_message += field_names[result[1]]+" が一致していません。\n";
					element.style.backgroundColor = alertColor;
				}
			}
		}
	}
	if( error_message ) {
		alert("エラー：\n"+error_message);
		return false;
	}
	return true;
}

function checkLoginParams() {
	var error_message = '';
	if( document.login.username.value == "" ) {
		error_message += "ユーザ名を入力して下さい。\n";
	}
	if( document.login.passwd.value == "" ) {
		error_message += "パスワードを入力して下さい。\n";
	}
	if( error_message == '' ) return true;
	else {
		alert(error_message);
		return false;
	}
}

function in_array(str , arr){
  var max = arr.length;
  for( var i=0; i<max ; i++ ){
    if (str == arr[i])
      return i;
  }
  return -1;
}

function checkNumeric(name, value){
	if( value ){
		if( value.match(/[^0-9]/g) ){
			error_message += field_names[name]+" は半角数字で入力してください。:"+value+"\n";
		}
	}
}

function checkUrl(name, value){
	if( value ){
		if( !value.match(/^s?https?:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:@&=>+\$,%#]+/i) ){
			error_message += field_names[name]+" がＵＲＬの形式ではありません。\n";
		}
	}
}

function checkMail(name, value){
	if( value ){
		if( !value.match(/[!#-9A-~]+@+[a-z0-9]+.+[!#-9A-~]/i) ){
			error_message += field_names[name]+" がメールアドレスの形式ではありません。\n";
		}
	}
}

function checkPasswd(name, value, confirm){
	if( value ){
		if( value.match(/[^0-9a-zA-Z]/g) ){
			error_message += field_names[name]+" は半角数字で入力してください。\n";
		}
		if( confirm != null ) {
			if( (confirm.value == '') || value.match(/[^0-9a-zA-Z]/g) ) {
				error_message += field_names[name]+" 確認は半角数字で入力してください。\n";
			}
		}
	}
}

function checkZipTel(name, value){
	if( value ){
		if( value.match(/[^0-9-]/g) ){
			error_message += field_names[name]+" は半角の数字およびハイフンで入力してください。:"+value+"\n";
		}
	}
}

function resetBackground(name, color) {
	if( elements = document.getElementsByName(name+"[]") ) {
		var x;
		for( x=0 ; x<elements.length ; x++ ) {
			if( elements[x].type == "hidden" ) continue;
			elements[x].style.backgroundColor = color;
		}
	}
}
