function onlinehelp(action)
{
	var link = "?action=fchelp&show=" + action;
	window.open(link, "ヘルプ","location=0,status=1,scrollbars=1,width=800,height=600");
}

function fc_check_loginstatus()
{
	document.location = '/flexcontrol/';
}

var execflag = false;

function fc_startexec()
{
  if(execflag == true){
		alert('処理中です。');
		return false;
	}
	execflag = true;
	return true;
}

function fc_endexec()
{
	execflag = false;
}

var callbackmethod = '';

function fc_exec(script)
{
	if(execflag == true){
		alert('execte');
		return;
	}
	eval(script);
	execflag = true;
}

function fc_callback(result)
{
	eval(callbackmethod+"(result);");
	execflag = false;
	callbackmethod = '';
	return true;
}

var NAME_MIN = 1;
var NAME_MBYTE_CHAR_MAX = 120;
var NAME_BYTE_CHAR_MAX = NAME_MBYTE_CHAR_MAX * 2;
var UID_MIN = 1;
var UID_MAX = 240;
var PASSWORD_MIN = 5;
var PASSWORD_CLEAR_MAX = 24;
var PASSWORD_ENCRYPT_MAX = 128;
var LOCAL_MIN = 1;
var LOCAL_MAX = 64;
var DOMAIN_MIN = 4;
var DOMAIN_MAX = 175;
var MAIL_MIN = LOCAL_MIN + DOMAIN_MIN + 1;
var MAIL_MAX = LOCAL_MAX + DOMAIN_MAX + 1;
var QUOTA_MIN = 1;
var QUOTA_MAX = 4;
var QUOTA_VALUE_MAX = 2000;
var QUOTAFOLDER_MIN = 1;
var QUOTAFOLDER_MAX = 6;
var QUOTAFOLDER_VALUE_MAX = 999999;
var HOMEDIR_MIN = 4;
var HOMEDIR_MAX = 512;
var IPADDR_MIN = 0;
var IPADDR_MAX = 15;
var PORT_MIN = 0;
var PORT_MAX = 5;
var DIRNAME_MAX = 255;
var FORWARD_MIN = MAIL_MIN;
var FORWARD_MAX = MAIL_MAX;
var FILTER_KEYWORD_MIN = 1;
var FILTER_KEYWORD_MBYTE_CHAR_MAX = 60;
var FILTER_KEYWORD_BYTE_CHAR_MAX = FILTER_KEYWORD_MBYTE_CHAR_MAX * 2;
var VACATION_SUBJECT_MIN = 0;
var VACATION_SUBJECT_MBYTE_CHAR_MAX = 16;
var VACATION_SUBJECT_BYTE_CHAR_MAX = VACATION_SUBJECT_MBYTE_CHAR_MAX * 2;
var VACATION_BODY_MIN = 0;
var VACATION_BODY_MBYTE_CHAR_MAX = 512;
var VACATION_BODY_BYTE_CHAR_MAX = VACATION_BODY_MBYTE_CHAR_MAX * 2;
var JOBNAME_MIN = 0;
var JOBNAME_MBYTE_CHAR_MAX = 16;
var JOBNAME_BYTE_CHAR_MAX = JOBNAME_MBYTE_CHAR_MAX * 2;
var pattern1 = /[\.]{2}|^[.]|[.]$/;
var pattern2 = /^[a-zA-Z0-9!{}_\$\-\.\^]+$/;
var pattern3 = /^[a-zA-Z0-9!{}_\$\-\.\^]+@[a-zA-Z0-9!{}_\$\-\.\^]+$/;

function set_filter_maxlength()
{
	if (MAIL_MAX > FILTER_KEYWORD_BYTE_CHAR_MAX)
	 return MAIL_MAX;
	return FILTER_KEYWORD_BYTE_CHAR_MAX;
}

// check char
function check_uid_char(uid)
{
	if (check_mailpart_char(uid) || check_mail_char(uid)) 
		return true;
	return false;
}

function check_uid_char_usersearch(uid)
{
	if (check_mailpart_char(uid) || check_mail_char_usersearch(uid))
		return true;
	return false;
}

function check_mailpart_char(str)
{
	if (str.match(pattern1) == null && str.match(pattern2) != null) 
		return true;
	return false;
}

function check_mailpart_search_char(str)
{
	var pattern = /[\.]{2}/;
  if (str.match(pattern) == null && str.match(pattern2) != null)
    return true;
  return false;
}

function check_mail_char(mail)
{
	mailpart = mail.split("@");
	if (mailpart.length != 2)
		return false;
	if (check_mailpart_char(mailpart[0]) && check_local_length(mailpart[0]) && 
			check_mailpart_char(mailpart[1]) && check_domain_length(mailpart[1])) {
		return true;
	}
	return false;
}

function check_external_mail_char(mail)
{
	mailpart = mail.split("@");
	if (mailpart.length != 2)
		return false;
	if (check_local_length(mailpart[0]) && check_domain_length(mailpart[1])) 
		return true;
	
	return false;
}

function check_mail_char_usersearch(mail)
{
	mailpart = mail.split("@")
	if (mailpart.length == 1) {
		if (check_mailpart_char(mailpart[0]) && mailpart[0].length <= DOMAIN_MAX) {
			return true;
		} else {
			return false;
		}
	} else if (mailpart.length == 2) {
		if (mailpart[0] == '' && mailpart[1] == '')
			return true;
			
		if (mailpart[0] != '' && !check_mailpart_char(mailpart[0]) || mailpart[0].length > LOCAL_MAX) 
			return false;
		
		if (mailpart[1] != '' && !check_mailpart_char(mailpart[1]) || mailpart[1].length > DOMAIN_MAX) 
			return false;
		
		return true;
	
	} else {
		return false;
	}
	return false;
}

function check_homedir_char(homedir)
{
	if (homedir.match(/\/$/) != null) 
		return false;
	return true;
}

function check_ipaddress_char(ipaddress)
{
	if (ipaddress.match(/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/) != null) {
		octet = ipaddress.split(".");
		if (octet.length != 4) 
			return false;
		for (i = 0; i < octet.length; i++) {
			if (!(octet[i] >= 0 && octet[i]<= 255 ))
				return false;
			if (octet[i].match(/^0[0-9]+/) != null)
				return false;
		}
		return true
	}
	return false;
}

function check_port_char(port)
{
	if (port.match(/^[0-9]{1,5}$/) != null && 0 <= port && port <= 65535) {
		if (port.match(/^0[0-9].*/) == null)
			return true;
	}
	return false;
}

// check length
function check_clear_password_length(password)
{
	if (password.length < PASSWORD_MIN || password.length > PASSWORD_CLEAR_MAX) 
		return false;
	return true;
}

function check_encrypt_password_length(password)
{
	if (password.length < PASSWORD_MIN || password.length > PASSWORD_ENCRYPT_MAX) 
		return false;
	return true;
}

function check_local_length(local)
{
	if (local.length < LOCAL_MIN || local.length > LOCAL_MAX) 
		return false;
	return true;
}

function check_domain_length(domain)
{
	if (domain.length < DOMAIN_MIN || domain.length > DOMAIN_MAX) 
		return false;
	return true;
}

function check_mail_length(mail)
{
	if (mail.length < MAIL_MIN || mail.length > MAIL_MAX) 
		return false;
	return true;
}

function check_filter_length(filter)
{
	if (filter.length < FILTER_KEYWORD_MIN || filter.length > FILTER_KEYWORD_BYTE_CHAR_MAX) 
		return false;
	return true;
}

// check input value
function check_login(login)
{
	if (!login) {
		alert("ログイン名が入力されていません。");
		return false;
	}
	if (!check_uid_char(login)) {
		alert("ログイン名の形式が正しくない、または無効な文字を入力しています。");
		return false;
	}
	if (!login.length > MAIL_MAX) {
		alert("ログイン名は"+MAIL_MAX+"文字以下で入力して下さい。");
		return false;
	}
	return true;
}

function check_name(name)
{
	if (!name) { 
		alert("氏名が入力されていません。");
		return false;
	}
	if (name.length < NAME_MIN || name.length > NAME_BYTE_CHAR_MAX) {
		alert("氏名は"+ NAME_BYTE_CHAR_MAX + "文字以下で入力して下さい。");
		return false;
	}
	return true;
}

function check_uid(uid)
{
	if (!uid) {
		alert("ユーザIDが入力されていません。");
		return false;
	}
	if (!check_uid_char(uid)){
		alert("ユーザIDの形式が正しくない、または無効な文字を入力しています。");
		return false;
	} 
	if (uid.length < UID_MIN || uid.length > UID_MAX) {
			alert("ユーザIDは"+ UID_MIN +"文字以上、"+ UID_MAX + "文字以下で入力して下さい。");
			return false;
	}
	return true;
}

function check_uid_usersearch(uid)
{
	if (!check_uid_char_usersearch(uid)){
		alert("ユーザIDの形式が正しくない、または無効な文字を入力しています。");
		return false;
	} 
	if (uid.length < UID_MIN || uid.length > UID_MAX) {
			alert("ユーザIDは"+ UID_MIN +"文字以上、"+ UID_MAX + "文字以下で入力して下さい。");
			return false;
	}
	return true;
}

function check_password_cleartext(password)
{
	if (password.match(/^\{CRYPT\}.*|^\{SSHA\}.*/) != null)
		return false;
	return true;
}

function check_clear_password(password,name)
{

  if (password.match(/[\{\}]/)) {
		alert(name+"の形式が正しくありません。");
	  return false;
	}
	if (!check_clear_password_length(password)) {
		alert(name+"は"+PASSWORD_MIN+"文字以上、"+PASSWORD_CLEAR_MAX+"文字以下で入力して下さい。");
		return false;
	}
	return true;

}

function check_encrypt_password(password,name)
{
	if (password.match(/^\{CRYPT\}$|^\{SSHA\}$/) != null){
		alert(name + "の形式が正しくありません。");
		return false;
	}
	if (!check_encrypt_password_length(password)) {
		alert(name+"は"+PASSWORD_MIN+"文字以上、"+PASSWORD_ENCRYPT_MAX+"文字>以下で入力して下さい。");
		return false;
	}
	return true;
}

function check_one_password(password,name)
{
	if (check_password_cleartext(password)) {
		if (!check_clear_password(password,name)) {
			return false;
		}
	} else {
		if (!check_encrypt_password(password,name)) {
			return false;
		} 
	}
	return true;
}

function check_change_password(oldpassword, password1, password2)
{

	if (!oldpassword) {
		alert("現パスワードが入力されていません。");
		return false;
	}
	if (!password1) {
		alert("新パスワードが入力されていません。");
		return false;
	}
	if (!password1) {
		alert("新パスワード(確認用)が入力されていません。");
		return false;
	}

  if (password1 != password2) {
		alert("新パスワードと新パスワード(確認用)は同じものを入力して下さい。");
		return false;
	}

  if (!check_clear_password(password1,'新パスワード'))
	    return false;

	return true;
}


function check_password(password1, password2)
{
	if (!password1) {
		alert("パスワードが入力されていません。");
		return false;
	}

	if (!password2) {
		alert("パスワード(確認用)が入力されていません。");
		return false;
	}

	if (password1 != password2) {
		alert("パスワードとパスワード(確認用)は同じものを入力して下さい。");
		return false;
	}
	if (!check_one_password(password1,'パスワード')) 
		return false;
	
	return true;
}

function check_mail(mail)
{
	if (!check_mail_char(mail)) {
		alert("メールアドレスの形式が正しくない、または無効な文字を入力しています。");
		return false;
	}
	if (mail.length < MAIL_MIN || mail.length > MAIL_MAX) {
		alert("メールアドレスは"+ MAIL_MIN +"文字以上、"+ MAIL_MAX + "文字以下で入力して下さい。");
		return false;
	}
	return true;
}

function check_mail_usersearch(mail)
{
	if (!check_mail_char_usersearch(mail)) {
		alert("メールアドレスの形式が正しくない、または無効な文字を入力しています。");
		return false;
	}
	if (mail.length > MAIL_MAX) {
		alert("メールアドレスは"+ MAIL_MAX + "文字以下で入力して下さい。");
		return false;
	}
	return true;
}

function check_local(local)
{
	if (!local) {
		alert("メールアドレスローカル部が入力されていません。");
		return false;
	}
	if (!check_mailpart_char(local)) {
		alert("メールアドレスローカル部に無効な文字を入力しています。");
		return false;
	}
	if (local.length < LOCAL_MIN || local.length > LOCAL_MAX) {
		msg = "メールアドレスローカル部は"+ LOCAL_MIN +"文字以上、"+ LOCAL_MAX + "文字以下で入力して下さい。";
		alert(msg);
		return false;
	}
	return true;
}

function check_local_usersearch(local) 
{
	if (!check_mailpart_char(local)) {
		alert("メールアドレスローカル部に無効な文字を入力しています。");
		return false;
	}
	if (local.length > LOCAL_MAX) {
		msg = "メールアドレスローカル部は"+ LOCAL_MAX + "文字以下で入力して下さい。";
		alert(msg);
		return false;
	}
	return true;
}

function check_domain(domain)
{
	if (!domain) {
		alert("ドメイン名が入力されていません。");
		return false;
	}
	if (!check_mailpart_char(domain)) {
		alert("ドメイン名に無効な文字を入力しています。");
		return false;
	}
	if (domain.length < DOMAIN_MIN || domain.length > DOMAIN_MAX) {
		alert("ドメイン名は"+ DOMAIN_MIN +"文字以上、"+ DOMAIN_MAX + "文字以下で入力して下さい。");
		return false;
	}
	return true;
}

function check_domain_usersearch(domain)
{
	if (!check_mailpart_char(domain)) {
		alert("ドメイン名に無効な文字を入力しています。");
		return false;
	}
	if (domain.length < DOMAIN_MIN || domain.length > DOMAIN_MAX) {
		alert("ドメイン名は"+ DOMAIN_MIN +"文字以上、"+ DOMAIN_MAX + "文字以下で入力して下さい。");
		return false;
	}
	return true;
}

function check_domainname(domain)
{
  if (!domain) {
    alert("ドメイン名が入力されていません。");
    return false;
  }
  if (!check_mailpart_char(domain)) {
    alert("ドメイン名に無効な文字を入力しています。");
    return false;
  }
  if (domain.length < DOMAIN_MIN || domain.length > DOMAIN_MAX) {
    alert("ドメイン名は"+ DOMAIN_MIN +"文字以上、"+ DOMAIN_MAX + "文字以下で入力して下さい。");
    return false;
  }
  return true;
}

function common_check_quota(quota)
{
	if (!quota) {
		alert("容量制限が入力されていません。");
		return false;
	}
	if (quota.match(/^[0-9]+$/) == null || quota.match(/^0[0-9].*/) != null) {
		alert("容量制限の入力形式が正しくない、また無効な文字を入力しています。");
		return false;
	}
	if (quota.length < QUOTA_MIN || quota.length > QUOTA_MAX) {
		msg = "容量制限は"+ QUOTA_MIN +"桁以上、"+ QUOTA_MAX + "桁以下で入力して下さい。";
		alert(msg);
		return false;
	}
	return true;
}

function check_quota(quota, message_limit)
{
	if (!common_check_quota(quota))
		return false;
	
	if (quota != 0 && 
			(quota < parseInt(message_limit) || quota > QUOTA_VALUE_MAX)) {
		msg = "容量制限は無制限(0)、または"+ message_limit + "MB以上、";
		msg = msg + QUOTA_VALUE_MAX + "MB以内で設定して下さい。";
		alert(msg);
		return false;
	}
	return true;
}

function check_domainadmin_quota(quota, max_quota, message_limit)
{
	if (!common_check_quota(quota))
		return false;
	
	if (parseInt(quota) == 0) {
		alert("容量制限を無制限(0)に設定することはできません。")
		return false
	}
	if (quota < parseInt(message_limit) || parseInt(quota) > parseInt(max_quota)) {
		alert("容量制限は"+message_limit+"MB以上、"+max_quota+"MB以内で設定して下さい。");
		return false;
	}
	return true;
}

function check_quotafolder(quotafolder)
{
	if (!quotafolder) {
		alert("通数制限が入力されていません。");
		return false;
	}
	if (quotafolder.match(/^[0-9]+$/) == null || quotafolder.match(/^0[0-9].*/) != null) {
		alert("通数制限の入力形式が正しくない、また無効な文字を入力しています。");
		return false;
	}
	if (quotafolder.length < QUOTAFOLDER_MIN || quotafolder.length > QUOTAFOLDER_MAX) {
		alert("通数制限は"+ QUOTAFOLDER_MIN +"桁以上、"+ QUOTAFOLDER_MAX + "桁以下で入力して下さい。");
		return false;
	}
	return true;
}

function check_domainadmin_quotafolder(quotafolder, max_quotafolder)
{
	if (!check_quotafolder(quotafolder))
		return false;
	if (parseInt(quotafolder) == 0) {
		alert("通数制限を無制限(0)に設定することはできません。")
		return false
	}
	if (parseInt(quotafolder) > parseInt(max_quotafolder)) {
		alert("通数制限は"+max_quotafolder+"通以内で設定して下さい。");
		return false;
	}
	return true;
}

function check_homedir(homedir)
{
	if (!homedir) {
		alert("ホームディレクトリが入力されていません。");
		return false;
	}
	if (homedir.match(/^\/.*\/.*[^\/]$/) == null) {
		alert("ホームディレクトリの形式が正しくありません。");
		return false;
	}
	if (homedir.match(/\/[^\/]{256,}/) != null) {
		alert("ホームディレクトリのディレクトリ名は"+ DIRNAME_MAX +"文字以下で入力して下さい。");
		return false;
	}
	if (homedir.length < HOMEDIR_MIN || homedir.length > HOMEDIR_MAX) {
		alert("ホームディレクトリは"+ HOMEDIR_MIN +"文字以上、"+ HOMEDIR_MAX + "文字以下で入力して下さい。");
		return false;
	}
	return true;
}

function check_alias(alias)
{
	if (!check_mail_char(alias)) {
		alert("エイリアスの形式が正しくない、または無効な文字を入力しています。");
		return false;
	}
	return true;
}

function check_fmsrouting(ipaddress, port)
{
	if ((!ipaddress && port) || (ipaddress && !port)) {
		alert("IPアドレスとポート番号は両方とも入力して下さい。");
		return false;
	}
	if (ipaddress != '' && port != '') {
		if (!check_ipaddress_char(ipaddress)){
			alert("IPアドレスの形式が正しくありません。");
			return false;
		}
		if (!check_port_char(port)) {
			alert("ポート番号の形式が正しくありません。");
			return false;
		}
	}
	return true;
}

function check_mail_duplicate(alias, mail)
{
	for (i = 0; i < alias.length - 1; i++) {
		for (j = i + 1; j < alias.length; j++) {
			if (alias[i].toLowerCase() == alias[j].toLowerCase()) {
				alert("エイリアスが重複しています。");
				return false;
			}
		}
	}
	for (i = 0; i < alias.length; i++) {
		if (alias[i].toLowerCase() == mail.toLowerCase()) {
			alert("エイリアスに自分のメールアドレスは設定できません。");
			return false;
		}
	}
	return true;
}

function check_forward_duplicate(forward, mail, alias)
{
 	for (i = 0; i < forward.length - 1; i++) {
   	for (j = i + 1; j < forward.length; j++) {
     	if (forward[i].toLowerCase() == forward[j].toLowerCase()) {
       	alert("転送先アドレスが重複しています。");
       	return false;
     	}
   	}
 	}

 	for (i = 0; i < forward.length; i++) {
   	if (forward[i].toLowerCase() == mail.toLowerCase()) {
     	alert("転送先アドレスに自分のメールアドレスは設定できません。");
     	return false;
   	}
 	}
	
	if (alias) {
		for (i = 0; i < alias.length; i++) {
			for (j = 0; j < forward.length; j++) {
				if (alias[i].toLowerCase() == forward[j].toLowerCase()) {
					alert("転送先アドレスに自分のエイリアスは設定できません。");
					return false;
				}
			}
		}
	}
 	return true;
}

function check_forward(forward)
{
	if (!check_external_mail_char(forward)) {
		alert("転送先アドレスの形式が正しくない、または無効な文字を入力しています。");
		return false;
	}
	if (forward.length < FORWARD_MIN || forward.length > FORWARD_MAX){
		alert("転送先アドレスは"+ FORWARD_MIN +"文字以上、"+ FORWARD_MAX + "文字以下で入力して下さい。");	
		return false;
	}
	return true;
}

function check_reject_filter(rfilter, obj)
{
	if (obj == 'Subject') {
		if (!check_filter_length(rfilter)) {
			alert("件名キーワードは"+FILTER_KEYWORD_BYTE_CHAR_MAX+"文字以下で入力して下さい。");
			return false;	
		}
	} else {
		if (rfilter.length > MAIL_MAX) {
			alert("条件キーワードは"+MAIL_MAX+"文字以下で入力して下さい。");
			return false;	
		}
	}
	return true;	
}

function check_vacation_filter(vfilter, obj)
{
	if (vfilter != '') {
		if (obj == 'Subject') {
			if (!check_filter_length(vfilter)) {
				alert("件名キーワードは"+FILTER_KEYWORD_BYTE_CHAR_MAX+"文字以下で入力して下さい。");
				return false;	
			}
		} else {
			if (vfilter.length > MAIL_MAX) {
				alert("条件キーワードは"+MAIL_MAX+"文字以下で入力して下さい。");
				return false;	
			}
		}
	}	
	return true;	
}

function check_vacation_subject(vsubject)
{
	if (vsubject != '') {
		if (vsubject.length < VACATION_SUBJECT_MIN || vsubject.length > VACATION_SUBJECT_BYTE_CHAR_MAX) {
			alert("件名は"+VACATION_SUBJECT_BYTE_CHAR_MAX+"文字以下で入力して下さい。");
			return false;	
		}
	}
	return true;	
}

function check_vacation_body(vbody)
{
	if (vbody != '') {
		if (vbody.length < VACATION_BODY_MIN || vbody.length > VACATION_BODY_BYTE_CHAR_MAX) {
			alert("本文は"+VACATION_BODY_BYTE_CHAR_MAX+"文字以下で入力して下さい。");
			return false;	
		}
	}
	return true;	
}

function check_jobname(jobname)
{
  if (jobname != '') {
		if (jobname.length < JOBNAME_MIN || jobname.length > JOBNAME_BYTE_CHAR_MAX) {
    	alert("ジョブ名は"+JOBNAME_BYTE_CHAR_MAX + "文字以下で入力して下さい。");
    	return false;
  	}
	}
  return true;
}

function get_domainpart(mail)
{
  str = mail.split("@");
  return str[1];
}

function check_mydomain(mydomain, target, name)
{
  if (mydomain != target.toLowerCase()) {
    alert(name+"に管理ドメイン以外のメールアドレスが入力されています。");
    return false;
  }
  return true;
}

