Event.observe(window, 'load', common_init);
function common_init(event)
{
  var i = 0;

  var forms = $$('form');
  if(forms)
  {
    for(i=0;i<forms.length;i++)
    {
      Event.observe(forms[i],"submit",call_checkErrors);
    }
  }
  
  var numerics = $$("input.edit_numeric");
  for(i=0;i<numerics.length;i++)
  {
    Element.writeAttribute(numerics[i], "style", "ime-mode:disable");
  }
  
  var zips = $$("input.edit_zip");
  for(i=0;i<zips.length;i++)
  {
    Element.writeAttribute(zips[i], "style", "ime-mode:disable");
    Event.observe(zips[i], "change", setAddressByZip);
  }

  var tels = $$("input.edit_tel");
  for(i=0;i<tels.length;i++)
  {
    Element.writeAttribute(tels[i], "style", "ime-mode:disable");
  }

  var adashs = $$("input.edit_alphadash");
  for(i=0;i<adashs.length;i++)
  {
    Element.writeAttribute(adashs[i], "style", "ime-mode:disable");
  }
}

function call_checkErrors(e)
{
  var form = Event.element(e);
  var ret = checkErrors(form);
  if(!ret)
  {
    Event.stop(e);
  }
}

function checkErrors(form)
{
  cleanAllErrorMsg();

  var i = 0;
  var flag = false;

  if(form)
  {
    flag = true;
    
    var notnulls = $$('input.edit_notnull');
    if(notnulls)
    {
      for(i=0;i<notnulls.length;i++)
      {
        if(Element.descendantOf(notnulls[i], form) && notnulls[i].value.length==0)
        {
          flag = false;
          createErrorMsg(notnulls[i], "必須項目です");
        }
      }
    }

    var notnullz = $$('select.edit_notnull');
    if(notnullz)
    {
      for(i=0;i<notnullz.length;i++)
      {
        if(Element.descendantOf(notnullz[i], form) && notnullz[i].options[notnullz[i].selectedIndex].value=="")
        {
          flag = false;
          createErrorMsg(notnullz[i], "必須選択項目です");
        }
      }
    }

    var radio_notnulls = $$('input.edit_radio_notnull');
    var radio_name = "";
    var _samenames = "";
    var radioflag = "";
    if(radio_notnulls)
    {
      for(i=0;i<radio_notnulls.length;i++)
      {
        if(!radio_notnulls[i].checked)
        {
          radio_name = radio_notnulls[i].name;
          _samenames = $$("input[name=" + radio_name + "]");
          radioflag = false;
          for(var j=0;j<_samenames.length;j++)
          {
            if(_samenames[j].checked)
            {
              radioflag = true;
            }
          }
          
          if(!radioflag)
          {
            flag = false;
            createErrorMsg(radio_notnulls[i], "選択必須項目です");
          }
        }
        
      }
    }

    var chk_notnulls = $$('input.edit_chk_notnull');
    var chk_name = "";
    var _chk_samenames = "";
    var chkflag = "";
    if(chk_notnulls)
    {
      for(i=0;i<chk_notnulls.length;i++)
      {
        if(!chk_notnulls[i].checked)
        {
          chk_name = chk_notnulls[i].name;
          _chk_samenames = $$("input[name='" + chk_name + "']");

          chkflag = false;
          for(var j=0;j<_chk_samenames.length;j++)
          {
            if(_chk_samenames[j].checked)
            {
              chkflag = true;
            }
          }
          
          if(!chkflag)
          {
            flag = false;
            createErrorMsg(chk_notnulls[i], "選択必須項目です");
          }
        }
        
      }
    }

    var notzeros = $$('input.edit_notzero');
    if(notzeros)
    {
      for(i=0;i<notzeros.length;i++)
      { 
        if(Element.descendantOf(notzeros[i], form) && parseInt(notzeros[i].value)<=0)
        {
          flag = false;
          createErrorMsg(notzeros[i], "1以上の数を入力して下さい。");
        }
      }
    }

    var numerics = $$('input.edit_numeric');
    if(numerics)
    {
      for(i=0;i<numerics.length;i++)
      {
        if(Element.descendantOf(numerics[i], form) && numerics[i].value!="" && (isNaN(parseInt(numerics[i].value)) || parseInt(numerics[i].value)>2147483647 || parseInt(numerics[i].value)<-2147483647))
        {
          flag = false;
          createErrorMsg(numerics[i], "正しい数値を入力して下さい。");
        }
      }
    }

    var zips = $$('input.edit_zip');
    if(zips)
    {
      for(i=0;i<zips.length;i++)
      {
        if(Element.descendantOf(zips[i], form) && zips[i].value!="" && !isValidZipCode(zips[i].value))
        {
          flag = false;
          createErrorMsg(zips[i], "郵便番号が正しく入力されていません。");
        }
      }
    }

   var tels = $$('input.edit_tel');
   var tel2 = "";
   var tel3 = "";
   var tel = "";
   if(tels)
   {
     for(i=0;i<tels.length;i++)
     {
       if(Element.descendantOf(tels[i], form) && tels[i].value!="")
       {
         tel2 = Element.next(tels[i], "input");
         tel3 = Element.next(tels[i], "input");
         if(tel2 && tel3)
         {
           tel = tels[i].value.toString() + tel2.value.toString() + tel3.value.toString()
           if(tel.length>11 || tel.length<10)
           {
             flag = false;
             createErrorMsg(tels[i], "電話番号が正しく入力されていません。");
           }
         }
       }
     }
   }


    var years = $$('select.edit_year');
    var month = "";
    var day = "";
    var yv = "";
    var mv = "";
    var dv = "";
    var sd = "";
    if(years)
    {
      for(i=0;i<years.length;i++)
      {
        if(Element.descendantOf(years[i], form))
        {
          yv = years[i].options[years[i].selectedIndex].value;
          month = Element.next(years[i], "select.edit_month");
          day = Element.next(years[i], "select.edit_day");
          if(month && day)
          {
            mv = month.options[month.selectedIndex].value;
            dv = day.options[day.selectedIndex].value;
            
            if(mv!="" && dv!="")
            {
              yv = parseInt(yv,10);
              mv = parseInt(mv,10)-1;
              dv = parseInt(dv,10);
            
              sd = new Date(yv,mv,dv);
              if(isNaN(sd) || sd.getFullYear()!=yv || sd.getMonth()!=mv || sd.getDate()!=dv)
              {
                flag = false;
                createErrorMsg(years[i], "正しい日付を選択してください。");
              }
            }
          }
        }
      }
    }


    var months = $$('select.edit_month');
    var year = "";
    var day = "";
    var yv = "";
    var mv = "";
    var dv = "";
    var sd = "";
    if(months)
    {
      for(i=0;i<months.length;i++)
      {
        if(Element.descendantOf(months[i], form))
        {
          mv = months[i].options[months[i].selectedIndex].value;
          year = Element.previous(months[i], "input.edit_year");
          day = Element.next(months[i], "select.edit_day");
          if(year && day)
          {
            yv = year.value;
            dv = day.options[day.selectedIndex].value;
            
            if(yv!="" && dv!="")
            {
              yv = parseInt(yv,10);
              mv = parseInt(mv,10)-1;
              dv = parseInt(dv,10);
              sd = new Date(yv,mv,dv);
              if(isNaN(sd) || sd.getFullYear()!=yv || sd.getMonth()!=mv || sd.getDate()!=dv)
              {
                flag = false;
                createErrorMsg(year, "正しい日付を設定してください。");
              }
            }
          }
        }
      }
    }


    var dates = $$('input.edit_date');
    var _flag = false;
    var y = 0;
    var m = 0;
    var d = 0;
    var _d = "";
    var dar = "";
    var dstr = "";
    var st_date = 0;
    var ed_date = 0;
    if(dates)
    {
      for(i=0;i<dates.length;i++)
      {
        if(Element.descendantOf(dates[i], form) && dates[i].value!="")
        {
          _flag = false;
          if(dates[i].value.indexOf("/"))
          {
            dates[i].value = dates[i].value.replace("/","-").replace("/","-");
          }
          dar = dates[i].value.split("-");
          if(dar.length==3)
          {
             y = parseInt(dar[0],10);
             m = parseInt(dar[1],10)-1;
             d = parseInt(dar[2],10);
            _d = new Date(y,m,d);
            if(!isNaN(_d) && _d.getFullYear()==y && _d.getMonth()==m, _d.getDate()==d)
            {
              _flag = true;
              if(dates[i].id=='start_date')
              {
                st_date = _d;
              }
              if(dates[i].id=='end_date')
              {
                ed_date = _d;
              }
            }
          }
          if(!_flag)
          {
            flag = false;
            createErrorMsg(dates[i], "正しい日付を入力してください。");
          }
        }
      }
    }
  }


  if(st_date && ed_date && st_date!=0 && ed_date!=0)
  {
    if(ed_date.getTime() - st_date.getTime()<0)
    {
      flag = false;
      createErrorMsg($('end_date'), "正しい終了日を入力して下さい。（開始日より前の日付が入力されています）");
    }
  }


  var more6s = $$("input.edit_more6");
  if(more6s)
  {
    for(i=0;i<more6s.length;i++)
    {
      if(more6s[i].value.length<6)
      {
        flag = false;
        createErrorMsg(more6s[i], "6文字以上入力してください");
      }
    }
  }


  return flag;
}

function createErrorMsg(elm, msg)
{
  var p = Element.extend(document.createElement('p'));
  Element.addClassName(p, "error");
  Element.addClassName(p, "tx_red");
  p.innerHTML = msg;
  
  ins = Element.up(elm, "td");
  if(ins)
  {
    Element.insert(ins, { top:p });
  }
  else
  {
    Element.insert(elm, { before:p });
  }
}

function cleanAllErrorMsg()
{
  var msgs = $$("p.error");
  for(var i=0;i<msgs.length;i++)
  {
    Element.remove(msgs[i]);
  }
}

function submitForm(_form)
{
  cleanAllErrorMsg();
  var form = $(_form);

  if(form && checkErrors(form))
  {
    form.submit();
  }
}

function isValidZipCode(zip)
{
  var flag = false;
  if(zip.length==7)
  {
    var _zip = parseInt(zip, 10);
    if(_zip>=10000 && _zip<=9999999)
    {
      flag = true;
    }
  }
  return flag;
}

function setAddressByZip(e)
{
  var zipinput = Event.element(e);
  if(zipinput && isValidZipCode(zipinput.value))
  {
    var pref = getPrefSelect(zipinput);
    var address = getAddressInput(zipinput);
    if(address && address.value=="")
    {
      var a = new Ajax.Request(secure_url + "ajax/search_address_by_zipcode", { parameters:{ zip:zipinput.value }, onSuccess:
             function(t)
             { 
               if(t.responseText!="none")
               {
                 var values = t.responseText.split(",");
                 if(values.length==2)
                 {
                   
                   for(var i=0;i<pref.options.length;i++)
                   {
                     if(pref.options[i].value==values[0])
                     {
                       pref.selectedIndex = i;
                     }
                   }
                   address.value = "";
                   address.focus();
                   address.value = values[1];
                 }
               }
             }
         });
    }
  }
}

function getAddressInput(zipinput)
{
  var address =  Element.next(zipinput, "input[type=text]");
  if(!address)
  {
    address = Element.down(Element.next(Element.up(zipinput, "tr"),"tr",1),"input[type=text]");
  }
  return address;
}

function getPrefSelect(zipinput)
{
  var pref = Element.next(zipinput, "select");
  if(!pref)
  {
    pref = Element.down(Element.next(Element.up(zipinput, "tr"),"tr"),"select");
  }
  return pref;
}
