function Normalize(obj) {
	obj.value = trim(obj.value.toNormal());
}

function ltrim(str){
    return str.replace(/^\s+/,"");
}

function rtrim(str){
    return str.replace(/\s+$/,"");
}
  
  //正規表現
function trim(str){
    return str.replace(/^\s*(.*?)\s*$/,"$1");
}

function LeapYear(iYear) {

	if ( (iYear % 100) == 0 ) {
		if ( (iYear % 400) == 0 ) {
				return true;
		}
	} else {
		if ( (iYear % 4) == 0 ) {
			return true;
		}
	}

	return false;
}

function CheckDate(iYear, iMonth, iDay) {

	var sDateArray = [31,28,31,30,31,30,31,31,30,31,30,31];

	if ( LeapYear(iYear) ) {
		sDateArray[1] = 29;
	}

	if ( iYear < 1900 || iYear > 2078 ) {
		return false;
	}

	if ( iMonth < 1 || iMonth > 12 ) {
		return false;
	}

	if ( iDay < 1 || iDay > sDateArray[iMonth-1] ) {
		return false;
	}

	return true;
}

function CheckDate2(iYear, iMonth, iDay) {

	// 全て入力なしはエラーにしない
	if ( iYear == '' && iMonth == '' && iDay == '' ) {
		return true;
	}

	// どれかひとつだけ入力なしはエラーにする。
	if ( iYear == '' || iMonth == '' || iDay == '' ) {
		return false;
	}

	return CheckDate(iYear, iMonth, iDay);
}

// メールアドレス関数
function CheckMailUser(user) {
	if ( user == '' ) {
		return true;
	}

	// if ( !ereg( '^[-!%#$&\'*+\\.0-9=?A-Z^_`a-z{|}~]+$', $user) ) {
	// Courierでは、\は削除される。あるいはメールソフトが削除してるかも(Datula)
	// !と%は特別な意味を持つが、SPAMの温床となりかねないので使わない。
	// なお、ログでは、~は.に置換されて表示されるが、~はきちんと識別されている。
	filter = /^[-#$&\'*+.0-9=?A-Z^_`a-z{|}~]+$/;
	if ( !filter.test(user) ) {
		return true;
	}
	// 加えて、! @ % : . は、userパートにおいて先頭、末尾であったり、それらが連続してはいけません。
	// しかし、docomoの場合も考え、.は連続しても許す(RFC違反ではあるが)
	filter = /^[!%:]|[!%:]$|[!%:]{2}/;
	if ( filter.test(user) ) {
		return true;
	}

	return false;
}

// メールアドレス関数
function CheckMailaddr(test) {
	var temp = test.split('@');
	if ( temp.length != 2 ) return true;
	var user = temp[0];
	var domain = temp[1];

	if ( domain == '' || user == '' || CheckHostname(domain) ) {
		return true;
	}

	// domainパートは.をひとつ含む3文字以上でなければならない。
	var filter = /.+\..+/;
	if ( !filter.test(domain) ) {
		return true;
	}

	// if ( !ereg( '^[-!%#$&\'*+\\.0-9=?A-Z^_`a-z{|}~]+$', $user) ) {
	// Courierでは、\は削除される。あるいはメールソフトが削除してるかも(Datula)
	// !と%は特別な意味を持つが、SPAMの温床となりかねないので使わない。
	// なお、ログでは、~は.に置換されて表示されるが、~はきちんと識別されている。
	filter = /^[-#$&\'*+.0-9=?A-Z^_`a-z{|}~]+$/;
	if ( !filter.test(user) ) {
		return true;
	}
	// 加えて、! @ % : . は、userパートにおいて先頭、末尾であったり、それらが連続してはいけません。
	// しかし、docomoの場合も考え、.は連続しても許す(RFC違反ではあるが)
	filter = /^[!%:]|[!%:]$|[!%:]{2}/;
	if ( filter.test(user) ) {
		return true;
	}

	return false;
}

function CheckURL(test) {
	var filter = /^(http|https):\/\//;
	if ( filter.test(test) ) return false;

	return true;
}

function CheckZip(test) {
	var filter = /^[0-9]{3}-[0-9]{4}$/;
	if ( filter.test(test) ) return false;

	return true;
}

function CheckHostname(test) {
	// 空白が混じってはならない。先頭と末尾の文字はハイフンや.であってはならない。
	// .. とドットが2つ以上連続してはダメ
	var filter = /^-|-$|^\.|\.$|\.\.+|\s+/;
	if ( filter.test(test) ) return true;

	var filter2 = /^[a-zA-Z0-9-\.]*$/;
	if ( filter2.test(test) ) return false;

	return true;
}

function CheckAscii(test) {
	var filter = /^[\x20-\x7e]+$/;
	if ( filter.test(test) ) return false;

	return true;
}

// 空白チェック関数
function checkNull(obj,msg){
  if(obj.value==''){
    alert('「'+msg+'」を入力してください。');
    obj.focus();
    return false;
  }
  return true;
}

function CheckTelNumber(obj,msg) {
	var filter = /^[0-9-+\.]+$/;
	if ( ! filter.test(obj.value) ) {
		alert('「'+msg+'」が誤っています。');
		obj.focus();
		return false;
	}
	return true;
}

// ラジオボタンチェック関数
function checkNullRadio(obj,msg){
  flg = 0;
  for(j=0;j<obj.length;j++) {
    if(obj[j].checked){
      flg = 1;
    }
  }
  if(!flg) {
    alert('「'+msg+'」を選択してください');
    obj[0].focus();
    return false;
  }
  return true;
}

function checkNullListbox(obj,msg){
  if(obj.value==''){
    alert('「'+msg+'」を選択してください。');
    obj.focus();
    return false;
  }
  return true;
}

function checkNullCheckbox(frm, arr, msg) {
  var firstfound = null;

  for (i = 0; i <= frm.elements.length; i++) {
   try{
     if(frm.elements[i].name == arr) {
       if ( firstfound == null ) {
            firstfound = frm.elements[i];
       }
       if ( frm.elements[i].checked ) {
            return true;
       }
     }
   } catch(er) {}
  }

  if ( firstfound != null ) {
          alert('「'+msg+'」を選択してください');
          firstfound.focus();
          return false;
  }
  return true;
}

function chkCheckbox(frm, arr, num) {

  for (i = 0; i <= frm.elements.length && num >= 0 ; i++) {
   try{
     if(frm.elements[i].name == arr) {
       if ( num-- == 0 && frm.elements[i].checked ) {
	    return true;
       }
     }
   } catch(er) {}
  }

  return false;
}

// すべて数字であるかチェック -(マイナス)も許さず
function checkDigit(obj){
  num = obj.value;

  for(var i=0;i<num.length;i++){
    if(isNaN(parseInt(num.charAt(i),10))) {
	    alert('半角数字で入力してください');
	    obj.focus();
	    return false;
	}
  }

  return true;
}

// 数字列のチェック
function checkNumber(num){
  for(var i=0;i<num.length;i++){
    if(isNaN(parseInt(num.charAt(i),10))) return 0;
  }
  //if(parseInt(num,10)<=0) return 0;
  return num.length;
}

// カタカナのチェック
function checkKatakana(obj,msg){
	str = obj.value;

	var filter = /^[ア-ンァィゥェォャュョッヶヶヮヴー\s]+$/;
	if ( !filter.test(str) ) {
		alert('「'+msg+'」はカタカナで入力してください');
		obj.focus();
		return false;
	}
	return true;
}

// ログイン等で使うID文字列のチェック
function CheckLoginID(test) {
	var filter = /^[a-z0-9][a-z0-9\-_\.]*[a-z0-9]*$/;
	if ( filter.test(test) ) return false;

	return true;
}

// 英数字かどうかのチェック
function CheckEisu(test) {
	var filter = /^[a-z0-9\-_]+$/;
	if ( filter.test(test) ) return false;

	return true;
}

function getCookie(name) {
	var bites = document.cookie.split("; "); // break cookie into array of bites
	for (var i=0; i < bites.length; i++) {
		nextbite = bites[i].split("="); // break into name and value
		if (nextbite[0] == name) // if name matches
			return unescape(nextbite[1]); // return value
	}
	return null;
}

function setCookie(name,value,path,expire) {
  document.cookie
    = name + '=' + escape(value)
    + ((path==null)?'':('; path=' + escape(path)))
    + ((expire==null)?'':('; expires='+expire.toGMTString()));
}

function delCookie(name,path,domain) {
        if (getCookie(name)) {
                document.cookie = name + "=" +
                ((path == null) ? "" : "; path=" + path) +
                ((domain == null) ? "" : "; domain=" + domain) +
                "; expires=Thu, 01-Jan-70 00:00:01 GMT";
        }
}

function popup(url) {
  var h=Math.min(600,screen.height-50);
  window.open(url,'popup','width=500,height='+h+',toolbar=0,scrollbars=1,location=0,statusbar=1,menubar=0,resizable=1');
  return false;
}

function focusField(name) {
  for(i=0; i < document.forms.length; ++i) {
	var obj = document.forms[i].elements[name];
	if (obj && obj.focus) {obj.focus();}
  }
}

function selectField(name) {
  for(i=0; i < document.forms.length; ++i) {
	var obj = document.forms[i].elements[name];
	if (obj && obj.focus){obj.focus();} 
	if (obj && obj.select){obj.select();}
  }
}

function getStyleObject(objectId) {
	// cross-browser function to get an object's style object given its id
	if(document.getElementById && document.getElementById(objectId)) {
		// W3C DOM
		return document.getElementById(objectId).style;
	} else if (document.all && document.all(objectId)) {
		// MSIE 4 DOM
		return document.all(objectId).style;
	} else if (document.layers && document.layers[objectId]) {
		// NN 4 DOM.. note: this won't find nested layers
		return document.layers[objectId];
	} else {
		return false;
	}
} 

function getObject(objectId) {
	// cross-browser function to get an object given its id
	// If you need to change the style of an object or its display/visibility
	// use one of the other methods in this template
	// This function won't work for NN 4 DOM ==> Only use internally
	if(document.getElementById && document.getElementById(objectId)) {
		// W3C DOM
		return document.getElementById(objectId);
	} else if (document.all && document.all(objectId)) {
		// MSIE 4 DOM
		return document.all(objectId);
	} else {
		return false;
	}
}

function changeObjectVisibility(objectId, newVisibility) {
	// get a reference to the cross-browser style object and make sure the object exists
	var styleObject = getStyleObject(objectId);
	if(styleObject) {
		styleObject.visibility = newVisibility;
		return true;
	} else {
		// we couldn't find the object, so we can't change its visibility
		return false;
	}
} 


function changeObjectDisplay(objectId, newDisplay) {
	// get a reference to the cross-browser style object and make sure the object exists
	var styleObject = getStyleObject(objectId);
	if(styleObject) {
		styleObject.display = newDisplay;
		return true;
	} else {
		// we couldn't find the object, so we can't change its visibility
		return false;
	}
}
