$(function() {

  var errorMsg = 'ネットワークエラーが発生しました。\nもう一度、操作をやり直してください。';

  var dType = 'json';
  var preUrl = '';
  if (dType == 'jsonp') {
    preUrl = 'http://kurumakaitorisatei.com';
  }

  /**
  * radioボタン変更時にメーカー取得
  */
  $("input[@type=radio].domestic").click(function() {
    waitingMakes();
    //モデル名をhiddenにセット
    var hiddenDomestic = $("input[@name=domestic]:checked").val();
    $("input#hiddenDomestic").val(hiddenDomestic);
    $.ajax({
      url : preUrl + '/api/makes.html',
      type : 'get',
      dataType : dType,
      data : {
        'domestic' : $("input[@name=domestic]:checked").val()
      },
      error : function() {
        alert(errorMsg);
      },
      success : function(data) {
        clearModelId();
        clearModelYear();
        clearTrimId();
        clearMakes();
        clearDoor();
        clearCC();
        clearColor();
        clearMileage();
        for (var i = 0; i < data.length; i++) {
          makerhtml = '<option value="' + data[i].id + '">' + data[i].name + '</option>';
          $(makerhtml).appendTo("select#makeid");
        }
        $("select#makeid").focus();
      }
    });
    //査定会社取得
    getAssessors();
  });

  /**
  * メーカーリスト変更時に車種取得
  */
  $("select#makeid").change(function() {
    waitingModelId();
    //メーカー名をhiddenにセット
    var selectedObj = ($(this).children("option:selected"));
    $("input#makename").val(selectedObj.text());
    $.ajax({
      url : preUrl + '/api/models.html',
      type : 'get',
      dataType : dType,
      data : {
        'makeid' : $(this).val()
      },
      error : function() {
        alert(errorMsg);
      },
      success : function(data) {
        clearModelId();
        clearModelYear();
        clearTrimId();
        clearDoor();
        clearCC();
        clearColor();
        clearMileage();
        for (var i = 0; i < data.length; i++) {
          modelhtml = '<option value="' + data[i].id + '">' + data[i].name + '</option>';
          $(modelhtml).appendTo("select#modelid");
        }
        $("select#modelid").focus();
      }
    });
  });

  /**
  * モデルリスト変更時に年式取得
  */
  $("select#modelid").change(function() {
    waitingModelYear();
    //選択してください→空valueを選択したら以降のリストはクリアする
    if ($(this).val() == '') {
      clearModelYear();
      clearTrimId();
      clearDoor();
      clearCC();
      clearColor();
      clearMileage();
      return ; 
    }
    //モデル名をhiddenにセット
    var selectedObj = ($(this).children("option:selected"));
    $("input#modelname").val(selectedObj.text());
    $.ajax({
      url : preUrl + '/api/years.html',
      type : 'get',
      dataType : dType,
      data : {
        'modelid' : $(this).val()
      },
      error : function() {
        alert(errorMsg);
      },
      success : function(data) {
        clearModelYear();
        clearTrimId();
        clearDoor();
        clearCC();
        clearColor();
        clearMileage();
        if (data.length == undefined) {
            html = '<option value="' + data.sei + '">' + data.gen + '年：西暦' + data.sei + '</option>';
            $(html).appendTo("select#modelyear");
        } else {
          for (var i = 0; i < data.length; i++) {
            html = '<option value="' + data[i].sei + '">' + data[i].gen + '年：西暦' + data[i].sei + '</option>';
            $(html).appendTo("select#modelyear");
          }
        }
        $("select#modelyear").focus();
      }
    });
    //査定会社取得
    getAssessors();
  });

  /**
  * 年式リスト変更時にグレード取得
  */
  $("select#modelyear").change(function() {
    waitingTrimId();
    //選択してください→空valueを選択したら以降のリストはクリアする
    if ($(this).val() == '') {
      clearTrimId();
      clearDoor();
      clearColor();
      clearCC();
      clearMileage();
      return ; 
    }
    $.ajax({
      url : preUrl + '/api/trims.html',
      type : 'get',
      dataType : dType,
      data : {
        'modelid' : $("select#modelid").val(),
        'modelyear' : $(this).val()
      },
      error : function() {
        alert(errorMsg);
      },
      success : function(data) {
        clearTrimId();
        clearDoor();
        clearColor();
        clearCC();
        clearMileage();
        var html = "";
        $("select#trimid").children("option:eq(1)").remove();
        if (data.length == undefined) {
            html = '<option value="' + data.id + '">' + data.name + '</option>';
            $(html).appendTo("select#trimid");
            html = '<option value="不明">不明</option>';
            $(html).appendTo("select#trimid");
        } else {
          for (var i = 0; i < data.length; i++) {
            html += '<option value="' + data[i].id + '">' + data[i].name + '</option>';
            //$(html).appendTo("select#trimid");
          }
          html += '<option value="不明">不明</option>';
          $(html).appendTo("select#trimid");
        }
        $("select#trimid").focus();
      }
    });
  });

  /**
  * グレード変更時に各種パラメタ変更
  */
  $("select#trimid").change(function() {
    waitingDoor();
    //グレード名をhiddenにセット
    var selectedObj = ($(this).children("option:selected"));
    $("input#gradename").val(selectedObj.text());
    if (selectedObj.text() != '不明') {
      $("input[name='unknownGrade']").attr('checked', false);
    }
    if (selectedObj.text() == '不明' || selectedObj.text() == '選択してください') {
      return false;
    } 
    $.ajax({
      url : preUrl + '/api/trimdetail.html',
      type : 'get',
      dataType : dType,
      data : {
        'trimid' : $(this).val()
      },
      error : function() {
        alert(errorMsg);
      },
      success : function(data) {
        //ドア数調整
        $("select#door").val(data.door).focus();
        //ステアリング調整
        var steering = "input#steering_" + data.steering;
        $(steering).attr("checked" ,"checked");
        //排気量調整
        $("input#cc").val(data.cc).focus();
        //燃料調整
        var fuel = "input#fuel_" + data.fuel;
        $(fuel).attr("checked" ,"checked");
        //ミッション調整
        var tm = "input#tm_" + data.tm;
        $(tm).attr("checked" ,"checked");
      }
    });
  });

  /**
  * 郵便番号変更時に査定会社取得
  */
  $("input#post4").keyup(function() {
    getAssessors();
  });
  $("input#post4").blur(function() {
    getAssessors();
  });

  /**
  * 事故有無変更時に郵便番号が入力済みなら査定会社取得
  */
  $("input[name='broken']").click(function() {
    getAssessors();
  });

   /**
  * メアドドメインチェック
  * 結果が返ってくるまではロック
  */
  $("input#pc_email").blur(function() {
    if ($(this).val().match(/^[a-zA-Z0-9_\.\-]+?@[A-Za-z0-9_\.\-]+\.+[A-Za-z\.\-\_]+$/)){
      $("div#checkMail").text(" ");
      var checkHtml = '<font color="#1e90ff"><b><blink>メールアドレス　チェック中</blink></b></font>';
      $(checkHtml).appendTo("div#checkMail");
      $.ajax({
        url : preUrl + '/assess/checkDomain.html',
        type : 'get',
        dataType : dType,
        data : {
          'pc_email' : encodeURI($(this).val())
        },
        async : false,
        error : function() {
          //alert('test');
        },
        success : function(data) {
          $("input#domainCheck").val(data.result);
          if (data.result == '1') {
            $("div#checkMail").text(" ");
            var checkHtml = '<font color="#1e90ff"><b>メールアドレス　チェック完了</b></font>';
            $(checkHtml).appendTo("div#checkMail");
          } else {
            $("div#checkMail").text(" ");
            var checkHtml = '<font color="red"><b>このメールアドレスは無効です。<br />綴り等を確認の上、もう一度入力してください</b></font>';
            $(checkHtml).appendTo("div#checkMail");
          }
        }
      });
    }
  });

  /**
  * グレード不明チェックボックスクリック時にグレードリスト変更
  */
  $("input[name='unknownGrade']").click(function() {
    if($(this).attr('checked')) {
      $("select#trimid").val('不明').focus(); 
      $("input#gradename").val('不明');
    } else {
      $("select#trimid").val('').focus(); 
      $("input#gradename").val('');
    }
  });
  
   /**
  * 郵便番号入力時に住所取得
  */
  $("input#post4").keyup(function() {
    getAddress();
  });
  $("input#post4").blur(function() {
    getAddress();
  });

  //初期化系メソッド
  function clearModelYear() {
    $("select#modelyear").empty();
    var html = '<option value="" selected="selected">選択してください</option>';
    $(html).appendTo("select#modelyear");
    $("select#modelyear").blur();
  }

  function clearModelId() {
    $("select#modelid").empty();
    var modelhtml = '<option value="" selected="selected">選択してください</option>';
    $(modelhtml).appendTo("select#modelid");
    $("select#modelid").blur();
  }

  function clearMakes() {
    $("select#makeid").empty();
    var makerhtml = '<option value="" selected="selected">選択してください</option>';
    $(makerhtml).appendTo("select#makeid");
    $("select#makeid").blur();
  }

  function clearTrimId() {
    $("select#trimid").empty();
    var trimhtml = '<option value="" selected="selected">選択してください</option>';
        trimhtml += '<option value="不明">不明</option>';
    $(trimhtml).appendTo("select#trimid");
    $("select#trimid").blur();
  }

  function clearDoor() {
    $("select#door").val('');
    $("select#door").focus();
  }

  function clearColor() {
    $("select#color").val('');
    $("select#color").focus();
  }

  function clearMileage() {
    $("select#mileage").val('');
    $("select#mileage").focus();
  }

  function clearCC() {
    $("input#cc").val('').focus();
  }

  function clearZip() {
    $("input#post3").val('').focus();
    $("input#post4").val('').focus();
  }

  function clearAddress() {
    $("select#region").val('').focus();
    $("input#city").val('').focus();
    $("input#street").val('').focus();
    $("input#blocknum").val('').focus();
    $("input#apt").val('').focus();
  }

  function getAddress() {
    if (($("input#post3").val().length + $("input#post4").val().length) != 7) {
      return;
    } else {
      $.ajax({
        url : preUrl + '/api/address.html',
        type : 'get',
        dataType : dType,
        data : {
          'postalcode' : encodeURI($("input#post3").val() + '-' + $("input#post4").val())
        },
        error : function() {
          alert(errorMsg);
        },
        success : function(data) {
          //都道府県
          $("select#region").val(data.region).focus();
          //市区
          $("input#city").val(data.city).focus();
          //町村
          $("input#street").val(data.street).focus();
        }
      });
    }
  }

  function getAssessors() {
    if (($("input#post3").val().length + $("input#post4").val().length) != 7) {
      return;
    } else {
      var noassessorhtml = '<font color="#1e90ff"><b>査定会社情報取得中･･･</b></font>';
      $(noassessorhtml).appendTo("div#disp_assess");
      //事故車確認
      var broken = ($("input[name='broken']").attr('checked')) ? 1 : 0;
      $.ajax({
        url : preUrl + '/api/assessors.html',
        type : 'get',
        dataType : dType,
        data : {
          'postalcode' : encodeURI($("input#post3").val() + '-' + $("input#post4").val()),
          'domestic' : $("input#hiddenDomestic").val(),
          'broken' : broken,
          'mobile' : 0,
          'makeid' : $("select#makeid").val(),
          'modelid' : $("select#modelid").val()
        },
        error : function() {
          alert(errorMsg);
        },
        success : function(data) {
          createAssessor(data);
        }
      });
    }
  }

  //査定会社取得メソッド
  function createAssessor(data) {
    $("div#disp_assess").text(" ");
    if (data.length == undefined || data == '') {
      var noassessorhtml = '<font color="red"><b>該当の地域に査定会社がありません。郵便番号を再入力してください。</b></font>';
      $(noassessorhtml).appendTo("div#disp_assess");
    } else {
      var assessorhtml = '<table border="0" id="cbxassess"><tr>'
      var i = 0
      var div = '_';
      for (i = 0; i < data.length; i++) {
        
        assessorhtml += '<td><input type="checkbox" class="cbx" id="' + data[i].id + '" name="cbxassessid[]" value="' + 
                            data[i].id + div + data[i].name + '" checked="checked" /></td>' + 
                            '<td width="120" align="left"><label for="' + data[i].id + '">' + data[i].name + '</label></td>';// +
      }
      assessorhtml += '</tr></table>'
      $(assessorhtml).appendTo("div#disp_assess");
    }
  }

  //データ取得中表示メソッド
  function waitingModelYear() {
    $("select#modelyear").empty();
    var html = '<option value="" selected="selected">データ取得中･･･</option>';
    $(html).appendTo("select#modelyear");
    $("select#modelyear").blur();
  }

  function waitingModelId() {
    $("select#modelid").empty();
    var modelhtml = '<option value="" selected="selected">データ取得中･･･</option>';
    $(modelhtml).appendTo("select#modelid");
    $("select#modelid").blur();
  }

  function waitingMakes() {
    $("select#makeid").empty();
    var makerhtml = '<option value="" selected="selected">データ取得中･･･</option>';
    $(makerhtml).appendTo("select#makeid");
    $("select#makeid").blur();
  }

  function waitingTrimId() {
    $("select#trimid").empty();
    var trimhtml = '<option value="" selected="selected">データ取得中･･･</option>';
    $(trimhtml).appendTo("select#trimid");
    $("select#trimid").blur();
  }

  function waitingDoor() {
    $("select#door").val('データ取得中･･･').focus();
  }

  function waitingCC() {
    $("input#cc").val('データ取得中･･･').focus();
  }

});
