﻿function ErrorCheck()
{
  this.message = new Array;
  this.result = false;
  this.message_area_id = null;
}

ErrorCheck.prototype.clear = function()
{
  this.message = new Array;
  this.result = false;
}

ErrorCheck.prototype.setMessage = function(msg)
{
  this.message.push(msg);
}

ErrorCheck.prototype.setResult = function(bool)
{
  return this.result = this.result || bool;
}

ErrorCheck.prototype.getValue = function(id)
{
  var result = '';
  var elm = document.getElementById(id);
  if(typeof(elm) == 'object' && elm != null){
    if(elm.nodeName == 'INPUT'){
      result = elm.value;
    }else if(elm.nodeName == 'SELECT'){
//      result = elm.options[elm.selectedIndex].value;
      result = elm.value;
    }else if(elm.nodeName == 'TEXTAREA'){
      result = elm.value;
    }
  }
  return result;
}

ErrorCheck.prototype.displayMessage = function(id)
{
  var output = '';
  for(var i in this.message){
    output += this.message[i] + '<br />';
  }
  document.getElementById(id).innerHTML = output;
}

ErrorCheck.prototype.start = function(item)
{
  this.clear();
  var fields = item.fields;
  for(i = 0, max = fields.length; i < max; i++){
    field = fields[i];
    if(typeof(field['func']) == 'object'){
      for(var j in field['func']){
        if(this[field['func'][j]](field['id'], field['title'])){
          break;
        }
      }
    }else{
      this[field['func']](field['id'], field['title']);
    }
  }
  this.displayMessage(item.message_filed);
  if(this.result && item.message_postion != ''){
    location.href = '#' + item.message_postion;
  }
  return this.result;
}

ErrorCheck.prototype.check = function(val, reg, msg)
{
  var result = false;
  if(val != '' && val.search(reg) == -1){
    this.setMessage(msg);
    result = this.setResult(true);
  }
  return result;
}

ErrorCheck.prototype.notEmpty = function(id, field_title)
{
  var result = false;
  if(this.getValue(id) == ''){
    this.setMessage(field_title + ' は必須の入力項目です。');
    result = this.setResult(true);
  }
  return result;
}

ErrorCheck.prototype.mail = function(id, field_title)
{
  return this.check(this.getValue(id), 
    /^[a-z0-9_\.\-]+@([a-z0-9][a-z0-9-]+\.)+[a-z]{2,4}$/, 
    field_title + ' の形式が間違っています。'
  );
}

ErrorCheck.prototype.phone = function(id, field_title)
{
  return this.check(this.getValue(id), 
    /^\d{2,4}-\d{2,4}-\d{4}$/, 
    field_title + ' の形式が間違っています。'
  );
}

ErrorCheck.prototype.url = function(id, field_title)
{
  return this.check(this.getValue(id), 
    /^https?:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+$/, 
    field_title + ' の形式が間違っています。'
  );
}

ErrorCheck.prototype.zip = function(id, field_title)
{
  return this.check(this.getValue(id), 
    /^\d{3}-\d{4}$/, 
    field_title + ' の形式が間違っています。'
  );
}

ErrorCheck.prototype.match = function(id, field_title)
{
  var result = false;
  if(this.getValue(id[0]) != this.getValue(id[1])){
    this.setMessage(field_title.join(' と ') + ' が一致していません。');
    result = this.setResult(true);
  }
  return result;
}
