// This array hold all the form fields that will get validated
var validations = new Array();

// Edit the validation array to suit your validation needs
validations[0]=["notblank", "を入力してください", "custom error message", "lname"];
validations[1]=["notblank", "を入力してください", "custom error message", "fname"];
validations[2]=["validemail", "を入力してください", "：不正なフォーマットです", "email_id"];
validations[3]=["ischosen", "を選択してください", "custom error message", "prefecture"];
validations[4]=["isvalidradio", "を選択してください", "custom error message", "email_type"];


var highlight_astrisk = true;
var highlight_label = true;
var highlight_input = false;

var highlight_class_text = "error_text_highlight";
var highlight_class_input = "error_input_highlight";

// Do not edit anything below here

// Sets up some global error variables
var error_msg = "";
var error_msg_br = "<br />"
var first_error;

function isEmpty(s) {
    if (s == null || s.length == 0)
        return true;
    
  return !/\S/.test(s);
}

function looksLikeEmail(field, id, cust_error_msg, cust_error_msg2){
  var s = field.value;
  if (isEmpty(s)) {
     error_msg = error_msg + document.getElementById(id + "_label").innerHTML + " " + cust_error_msg + error_msg_br;
     if (first_error == ""){
          first_error = field;
     }
     return false;
   }
  if (/^[a-zA-Z0-9._-]+@([a-zA-Z0-9.-]+\.)+[a-zA-Z0-9-]{2,4}$/.test(s))
     return true;
  error_msg = error_msg + document.getElementById(id + "_label").innerHTML + " " + cust_error_msg2 + error_msg_br;
  if (first_error == ""){
          first_error = field;
     }
  return false;
}

function isInteger(field, id, cust_error_msg, cust_error_msg2){
  var s = field.value;
  if (isEmpty(s)){
    error_msg = error_msg + document.getElementById(id + "_label").innerHTML + " " + cust_error_msg + error_msg_br;
     if (first_error == ""){
          first_error = field;
     }
     return false;
   }

  if (!(/^-?\d+$/.test(s))){
     error_msg = error_msg + document.getElementById(id + "_label").innerHTML + " " + cust_error_msg2 + error_msg_br;
     if (first_error == ""){
          first_error = field;
     }
     return false;
   }
 return true;
}

function IsNumeric(field, id, cust_error_msg, cust_error_msg2){
   var s = field.value;
   var strValidChars = "0123456789.-";
   var strChar;
   var blnResult = true;
   
   if (isEmpty(s)){
   error_msg = error_msg + document.getElementById(id + "_label").innerHTML + " " + cust_error_msg + error_msg_br;
     if (first_error == ""){
          first_error = field;
     }
     return false;
   }

   for (i = 0; i < s.length && blnResult == true; i++){
      strChar = s.charAt(i);
      if (strValidChars.indexOf(strChar) == -1){
      error_msg = error_msg + document.getElementById(id + "_label").innerHTML + " " + cust_error_msg2 + error_msg_br;
        if (first_error == ""){
          first_error = field;
     }
         blnResult = false;
         }
      }
   return blnResult;
   }

function isChosen(select, id, cust_error_msg) {
    if (select.selectedIndex == 0) {
    error_msg = error_msg + document.getElementById(id + "_label").innerHTML + " " + cust_error_msg + error_msg_br;
        return false;
    } 
    return true;
}

function isChecked(field, id, cust_error_msg) {
    var valid = false;
    var name = eval("document.testform." + id);
    for (var i = 0; i < name.length; i++) {
        if (name[i].checked) {
            valid = true;
        }
    }
    
    if (valid == false){
    error_msg = error_msg + document.getElementById(id + "_label").innerHTML + " " + cust_error_msg + error_msg_br;
    }
    return valid;
}

function isValidRadio(field, id, cust_error_msg) {
    var name = eval("document.app." + id);
    var valid = false;
    for (var i = 0; i < name.length; i++) {
        if (name[i].checked) {
            valid = true;
        }
    }
    
    if (valid == false){
        error_msg = error_msg + document.getElementById(id + "_label").innerHTML + " " + cust_error_msg + error_msg_br;
    }
    return valid;
}

function isSame(field,field2, id, cust_error_msg) {
    
        if (field.value != field2.value) {
            if (first_error == ""){
          first_error = field;
     }
            error_msg = error_msg + document.getElementById(id + "_label").innerHTML + " " + cust_error_msg + error_msg_br;
            return false;
        }
    return true;
}

function looksLikeDate(field, id, cust_error_msg, cust_error_msg2){
  var s = field.value;
  if (isEmpty(s)) {
    error_msg = error_msg + document.getElementById(id + "_label").innerHTML + " " + cust_error_msg + error_msg_br;
     if (first_error == ""){
          first_error = field;
     }
     return false;
   }
  if (/^(19|20)\d\d([- /.])([1-9]|0[1-9]|1[012])\2([1-9]|0[1-9]|[12][0-9]|3[01])$/.test(s)){
     return true;
    }else{
            error_msg = error_msg + document.getElementById(id + "_label").innerHTML + " " + cust_error_msg2 + error_msg_br;
            if (first_error == ""){
                first_error = field;
            }
        }
    return false;
}

function setErrorClass(id, bool){
    if (highlight_astrisk == true){
        document.getElementById(id + "_astrisk").className = highlight_class_text;
    }
    if (highlight_label == true){
        document.getElementById(id + "_label").className = highlight_class_text;
    }
    if (bool == true){
        document.getElementById(id).className = highlight_class_input;
    }
}

function removeErrorClass(id, bool)
{
    if (highlight_astrisk == true){
        document.getElementById(id + "_astrisk").className = "";
    }
    if (highlight_label == true){
        document.getElementById(id + "_label").className = "";
    }
    if (bool == true){
        document.getElementById(id).className = "";
    }
}

function write_error(error_msg)
{
    var divIdName = "error_msg";
    var newdiv = document.createElement('div');
    newdiv.setAttribute("id",divIdName);
    newdiv.innerHTML = error_msg;
    document.getElementById('error_msg_wrapper').appendChild(newdiv);
}

function remove_error()
{
    var olddiv = document.getElementById('error_msg');
    document.getElementById('error_msg_wrapper').removeChild(olddiv);
}

function validate(){
  first_error = "";
  if (document.getElementById('error_msg')){
        error_msg = "";
        remove_error();
    }
  var valid = true;
  var i;
  var checkToMake;
  var field;
  var field2;
  var id;
  var id2;
  var cust_error_msg;
  var cust_error_msg2;
    
  for (i = 0; i < validations.length; i++){
     field = document.getElementById(validations[i][3]);
     field2 = document.getElementById(validations[i][4]);
     checkToMake = validations[i][0];
     id = validations[i][3];
     if (validations[i][4]){
        id2 = validations[i][4]
     }
     cust_error_msg = validations[i][1];
     if (validations[i][2]){
        cust_error_msg2 = validations[i][2]
     }
     
     switch (checkToMake)     
    {
       case 'notblank': if (isEmpty(field.value)){
                           setErrorClass(id, true);
                           error_msg = error_msg + document.getElementById(id + "_label").innerHTML + " " + cust_error_msg + error_msg_br;
                           if (first_error == ""){
                                first_error = field;
                           }
                           valid = false;
                          }else{
                            removeErrorClass(id, true);
                          }
                        break;
       case 'validemail':  if (!looksLikeEmail(field, id, cust_error_msg, cust_error_msg2)){
                            setErrorClass(id, true);
                            valid = false;
                            }else{
                                removeErrorClass(id, true);
                            }
                           break;
       case 'isnumber':  if (!isInteger(field, id, cust_error_msg, cust_error_msg2)){
                            setErrorClass(id, true);
                            valid = false;
                            }else{
                                removeErrorClass(id, true);
                            }
                            break;
       case 'isnumeric':  if (!IsNumeric(field, id, cust_error_msg, cust_error_msg2)){
                            setErrorClass(id, true);
                            valid = false;
                            }else{
                                removeErrorClass(id, true);
                            }
                            break;
       case 'ischosen':  if (!isChosen(field, id, cust_error_msg)){
                            setErrorClass(id);
                            valid = false;
                            }else{
                                removeErrorClass(id);
                            }
                            break;
       case 'isvalidradio':  if (!isValidRadio(field, id, cust_error_msg)){
                            setErrorClass(id);
                            valid = false;
                            }else{
                                removeErrorClass(id);
                            }
                            break;
       case 'ischecked':  if (!isChecked(field, id, cust_error_msg)){
                            setErrorClass(id);
                            valid = false;
                            }else{
                                removeErrorClass(id);
                            }
                            break;
       case 'issame':  if (field.value != "" && field2.value != "")
                            {
                                if (!isSame(field,field2, id, cust_error_msg)){
                                setErrorClass(id, true);
                                setErrorClass(id2, true);
                                valid = false;
                                }else{
                                    removeErrorClass(id, true);
                                    removeErrorClass(id2, true);
                                }
                            }
                            break;
       case 'lookslikedate':  if (!looksLikeDate(field, id, cust_error_msg, cust_error_msg2)){
                            setErrorClass(id, true);
                            valid = false;
                            }else{
                                removeErrorClass(id, true);
                            }                     
                          
      }
   }
   if (first_error != ""){
        first_error.focus();
   }
   write_error(error_msg);
    
  return (valid);
}
