/*
    This is the source code for the validation function.
    Add the following code just after the </HEAD> in the files where the
    generalised validation functionality is required.
    <SCRIPT language="JavaScript1.2" src="gen_validation.js"></SCRIPT>
*/

    /*
    *   File : gen_validation.js
    *
    *   Author : Prasanth M J
    *
    *   CreativeProgrammers.com -
	*	Turn your Programming Expertise into Achievements!
    *   Visit http://www.creativeprogrammers.com
    *
    *   Email : prasanth@creativeprogrammers.com
    */
//---------------------------------EMail Check ------------------------------------

/*  checks the validity of an email address entered
*   returns true or false
*
*/


//javascriptが使用不可になっている場合。
/*if (navigator.javaEnabled()) {
}
else {
confirm("Javaが使えない状態です。\nブラウザ設定でJavaの項目をチェックしてください。");
}
*/

//チェックボックスに一つもチェックがない場合の処理
function check(field) {
var chk_flg = "0";
  for (i = 0; i < field.length; i++) {
    if(field[i].checked == true){
      chk_flg="1";
    }
  }
  if(field.checked==true){
       chk_flg="1";
  }
  if (chk_flg=="0") {
    strError="削除対象がありません。";
    alert(strError);
    return false;
  }
  else{
    warning="チェックしたメンバーを削除します。\nよろしいですか。"
    if(confirm(warning)){
      return true;
    }
    else{
      return false;
    }
  }
}

//全角文字列の判別
function checkZenkaku(msg){
    var i,msg2,msg3;
    var char_length = ("あ".length);

    //スペースを取り除く
    msg2 = msg.replace(/ /g,"");
    if(msg2.length == 0){
        return false;
    }
    for(i=0;i<msg2.length;i=i+char_length){
        msg3 = msg2.charAt(i);
        if((msg3 >= "!" && msg3 <= "~") || (msg3 >= "｡" && msg3 <= "ﾟ")){
            return false;
        }
    }
    return true;
}





/*項目間チェックのためのグローバル変数宣言追加*/
var jspdata = new Array();


function validateEmail(email)
{
// a very simple email validation checking.
// you can add more complex email checking if it helps
    email=email.toLowerCase();
    var splitted = email.match("^(.+)@(.+)$");
    if(splitted == null) return false;
    if(splitted[1] != null )
    {
      var regexp_user=/^\"?[/\w-_+?\.]*\"?$/;
      if(splitted[1].match(regexp_user) == null) return false;
    }
    if(splitted[2] != null)
    {
      var regexp_domain=/^[\w-\.]*\.[a-z]{2,4}$/;
      if(splitted[2].match(regexp_domain) == null)
      {
	    var regexp_ip =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
	    if(splitted[2].match(regexp_ip) == null) return false;
      }// if
      return true;
    }
return false;
}
/* function validateData
*  Checks each field in a form
*  Called from validateForm function
*/
function validateData(strValidateStr,objValue,strError)
{
    var epos = strValidateStr.search("=");
    var  command  = "";
    var  cmdvalue = "";
    if(epos >= 0)
    {
     command  = strValidateStr.substring(0,epos);
     cmdvalue = strValidateStr.substr(epos+1);
    }
    else
    {
     command = strValidateStr;
    }

    switch(command)


    {//実行前にYES／NO確認
      case "confirm":
         {
         if(!strError || strError.length ==0)
              {
                strError = "実行してよろしいですか？";
              }//if
          if(confirm(strError)){
            return true;
          }
          else{
            return false;
          }
           break;
         }
         //チェックボックスが空かどうかチェック
        case "checkbox":
         {
           if(objValue.checked==false)
           {
              if(!strError || strError.length ==0)
              {
                strError = "チェックボックスがチェックされていません。";
              }//if
              alert(strError);
              return false;
           }//if
           break;
         }

	//textareaの行数チェック（最後の行の改行は考慮済）
        case "textarea":
        {
          txt = objValue.value;
          txt = txt.toLowerCase();
          //改行を\nに統一　（unix＝\n mac=\r win=\r\n)
          txt = txt.split("\r\n").join("\n");
          txt = txt.split("\r").join("\n");
          keep = txt.split("\n");


          if(keep.length > eval(cmdvalue))
          {
            if((keep[cmdvalue].length == 0 &&  keep.length == (eval(cmdvalue)+1))==false)
            {
              if(!strError || strError.length ==0)
              {
                strError = cmdvalue + "行を超えています。";
              }
              alert(strError);
              return false;
            }
          }
        //最大文字数とemail型かのチェック
        iarea = 0;
        emailnum = keep.length
        //最終行がＮＵＬＬかどうか
        nullflg = false;
        if(keep[emailnum -1].length == 0)
        {
          nullflg = true;
        }
        //もし最終行がnullとして存在していたら、チェック対象を1行減らす
        if(nullflg)
        {
          emailnum = emailnum -1;
        }
        while(iarea < emailnum){
          if(keep[iarea].length > 50)
          {
            alert(iarea+1 +"行目のアドレスが50文字を超えています。");
            return false
          }
          if(!validateEmail(keep[iarea]))
          {
            alert(iarea+1 +"行目のアドレスがemail型ではありません。");
            return false
          }
          //同じアドレスが2行以上入力されていないか、チェック
          j=0;
          while(j < emailnum)
          {
            if(j != iarea && (keep[j].indexOf(keep[iarea],0)) != -1)
            {
            alert( keep[j] +"が2行以上存在します。");
            return false
            }
            j++
          }
          iarea++;
        }
        break;
        }


	/*項目間チェックロジック追加*/
	/*check=？：？の値の項目とチェックをする。１＝１つ目の項目、２＝２つ目の項目*/
		case "check":
		 {
		   if(objValue.value != jspdata[cmdvalue-1].value){
		      if(!strError || strError.length ==0)
              {
                strError = "確認と内容が違っています。\n正しく入力してください。";
              }//if
			  alert(strError);
			  return false;
			  }
			  break;
		 }

        case "req":
        case "required":
         {
           if(eval(objValue.value.length) == 0)
           {
              if(!strError || strError.length ==0)
              {
                strError = objValue.name + " : Required Field";
              }//if
              alert(strError);
              return false;
           }//if
           break;
         }//case required
        case "maxlength":
        case "maxlen":
          {
             if(eval(objValue.value.length) >  eval(cmdvalue))
             {
               if(!strError || strError.length ==0)
               {
                 strError = objValue.name + " : "+cmdvalue+" 最大文字数";
               }//if
               alert(strError );
               return false;
             }//if
             break;
          }//case maxlen
        case "minlength":
        case "minlen":
           {
             if(eval(objValue.value.length) <  eval(cmdvalue))
             {
               if(!strError || strError.length ==0)
               {
                 strError = objValue.name + " : " + cmdvalue + " 未入力があります。";
               }//if
               alert(strError);
               return false;
             }//if
             break;
            }//case minlen
        case "alnum":
        case "alphanumeric":
           {
              var charpos = objValue.value.search("[^a-z0-9]");
              if(objValue.value.length > 0 &&  charpos >= 0)
              {
               if(!strError || strError.length ==0)
                {
                  strError = objValue.name+": 半角英数で入力して下さい。";
                }//if
                alert(strError);
                return false;
              }//if
              break;
           }//case alphanumeric
        case "num":
        case "numeric":
           {
              var charpos = objValue.value.search("[^0-9]");
              if(objValue.value.length > 0 &&  charpos >= 0)
              {
                if(!strError || strError.length ==0)
                {
                  strError = objValue.name+": 半角数字で入力して下さい。";
                }//if
                alert(strError);
                return false;
              }//if
              break;
           }//numeric
        case "alphabetic":
        case "alpha":
           {
              var charpos = objValue.value.search("[^a-z]");
              if(objValue.value.length > 0 &&  charpos >= 0)
              {
                  if(!strError || strError.length ==0)
                {
                  strError = objValue.name+":  半角英字で入力して下さい。";
                }//if
                alert(strError);
                return false;
              }//if
              break;
           }//alpha
        case "alnumhyphen":/*emailアカウントに使用できる文字*/
			{
              var charpos = objValue.value.search("[^a-z0-9\-_.]");
              if(objValue.value.length > 0 &&  charpos >= 0)
              {
                  if(!strError || strError.length ==0)
                {
                  strError = "入力可能な文字は、 a-z,0-9,-,_,.　です。\n全角文字やその他の記号は使用できません。";
                }//if
                alert(strError);
                return false;
              }//if
			break;
			}
        case "zenkaku":
          {
          //半角英数字でないとき
            if(checkZenkaku(objValue.value) == false){
              objValue.focus();
              objValue.select();
              //警告コメント
                 if(!strError || strError.length ==0)
                {
                  strError = "全角文字を入力してください。";
                }//if
                alert(strError);
                return false;
            }//if
            break;
          }//case zenkaku
        case "email":
          {
               if(!validateEmail(objValue.value))
               {
                 if(!strError || strError.length ==0)
                 {
                    strError =　"有効なﾒｰﾙｱﾄﾞﾚｽを入力して下さい。";
                 }//if
                 alert(strError);
                 return false;
               }//if
           break;
          }//case email
        case "lt":
        case "lessthan":
         {
            if(isNaN(objValue.value))
            {
              alert("番号でなければなりませぬ。");
              return false;
            }//if
            if(eval(objValue.value) >=  eval(cmdvalue))
            {
              if(!strError || strError.length ==0)
              {
                strError = "短か過ぎます。 "+ cmdvalue;
              }//if
              alert(strError);
              return false;
             }//if
            break;
         }//case lessthan
        case "gt":
        case "greaterthan":
         {
            if(isNaN(objValue.value))
            {
              alert("番号でなければなりません。 ");
              return false;
            }//if
             if(eval(objValue.value) <=  eval(cmdvalue))
             {
               if(!strError || strError.length ==0)
               {
                 strError = objValue.name + " : value should be greater than "+ cmdvalue;
               }//if
               alert(strError);
               return false;
             }//if
            break;
         }//case greaterthan
        case "regexp":
         {
            if(!objValue.value.match(cmdvalue))
            {
              if(!strError || strError.length ==0)
              {
                strError = objValue.name+": 文字が違います。";
              }//if
              alert(strError);
              return false;
            }//if
           break;
         }//case regexp
        case "dontselect":
         {
            if(objValue.selectedIndex == null)
            {
              alert("BUG: 何れか選択して下さい。");
              return false;
            }
            if(objValue.selectedIndex == eval(cmdvalue))
            {
             if(!strError || strError.length ==0)
              {
              strError = objValue.name+": 何れか選択して下さい。";
              }//if
              alert(strError);
              return false;
             }
             break;
         }//case dontselect
    }//switch
    return true;
}

/*
* function validateForm
* the function that can be used to validate any form
* returns false if the validation fails; true if success
* arguments :
*   objFrm     : the form object
*   arrObjDesc : an array of objects describing the validations to conduct on each
*        input item.
*          The array should consist of one object per input item in the order the input
*          elements are present in the form. Each object consist of zero or more validation
*          objects. Each of these validation object is a pair consisting of the validation
*          descriptor string and an optional Error message.
*/

function validateForm(objFrm,arrObjDesc)
{
 for(var itrobj=0; itrobj < arrObjDesc.length/*チェックする項目数*/; itrobj++)
 {
 	/*項目間チェックのためグローバル配列へのデータ（オブジェクト）格納（０から）*/
 	  jspdata[itrobj]=objFrm[itrobj];

   if(objFrm.elements.length <= itrobj)
   {
        alert("BUG: Obj descriptor for a non existent form element");
        return false;
   }//if
   for(var itrdesc=0; itrdesc < arrObjDesc[itrobj].length ;itrdesc++)
   {

	        if(validateData(arrObjDesc[itrobj][itrdesc][0],
                 objFrm[itrobj],arrObjDesc[itrobj][itrdesc][1]) == false)
       {
	     objFrm[itrobj].focus();
         return false;
       }//if
   }//for
 }//for
 return true;
}



function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
