/* функции */
function ShowError(InObj,InKey,InStr) {
  if (String(InKey) != "undefined") {
    alert(MESS[InKey]+InStr);
  }
  try {
    InObj.focus();
  } catch (e) {
    // ничего не делать, если не удалось
  }
}

function ShowMess(InMess) {
  return MESS[InMess];
}

function AirForm_submit(InStep)
{
  var TmpRes = true;
  
	switch(InStep) {
	  case "search": {
	    var sJType = $("form :radio[name=direction]:checked").val();
	    if (sJType == "RT" || sJType == "OW") {
	      // проверим заполненность городов	    
	      var arFieldsList = new Array();
	      arFieldsList['DEPART'] = "depart";
	      arFieldsList['ARRIVAL'] = "arrival";
	      var oField;
	      var sValue;
	      var arPointNames = new Array();	    
	      for (var key in arFieldsList) {
	        oField = document.getElementById(arFieldsList[key]);
	        sValue = trim(oField.value);
	        arPointNames[key] = sValue
	        if (sValue == "") {
	          ShowError(oField,"JS_AIR_FORM_SUBMIT_SEARCH_ERROR_NO_"+key,"");	        
	          TmpRes = false;
	          break;
	        }
	      }
	      // проверка совпадения городов
	      if (TmpRes) {
	        TmpRes = arPointNames['DEPART'] != arPointNames['ARRIVAL'];
	        if (!TmpRes) {
	          oField = document.getElementById(arFieldsList['ARRIVAL']);
	          ShowError(oField,"JS_AIR_FORM_SUBMIT_SEARCH_ERROR_DEPART_COINCIDE_ARRIVAL","");
	        }
	      }
  	    
	      // проверка дат
	      var arDateFieldsList = new Array();
	      arDateFieldsList['DATETO'] = "to";
	      arDateFieldsList['DATEBACK'] = "back";
	      var arDates = new Array();
	      var direct = document.getElementById("direction_rt").checked;
	      if (TmpRes) {
	        for(var key in arDateFieldsList) {
	          if ((key != 'DATEBACK')||(direct)) {
              oField = document.getElementById("date"+arDateFieldsList[key]);
              sValue = trim(oField.value);
              if (sValue != "") {
                // проверим совпадение формата
                var filter = /^[0-9]{2}\.[0-9]{2}\.[0-9]{4}$/;
                TmpRes = filter.test(sValue)
                if (TmpRes) {
                  // проверим существование даты
                  arTmpDate = sValue.split(".");
                  TmpRes = isDate(arTmpDate[0], arTmpDate[1], arTmpDate[2]);
                  if (!TmpRes){
                    ShowError(oField,"JS_AIR_FORM_SUBMIT_SEARCH_ERROR_"+key+"_NOT_A_DATE","");
                    break;
                  }
                  else {
                    sTime = document.getElementById("time"+arDateFieldsList[key]).value;
                    sHH = sTime.substr(4,2);
                    sMM = sTime.substr(6,2);
                    arDates[key] = new Date(arTmpDate[2], arTmpDate[1]-1, arTmpDate[0], sHH, sMM);
                  }
                }
                else {
                  ShowError(oField,"JS_AIR_FORM_SUBMIT_SEARCH_ERROR_"+key+"_FORMAT","");
                  break;
                }
              }
              else {
                ShowError(oField,"JS_AIR_FORM_SUBMIT_SEARCH_ERROR_NO_"+key,"");
                TmpRes = false;
                break;
              }
	          }
	        }
	      }
	      // проверим что бы дата туда была больше либо равна текущей
	      if (false) { //TmpRes) {
	        var Today = new Date(); // Today - сегодня, а не эквивалент DATETO
	        Today = new Date(Today.getFullYear(), Today.getMonth(), Today.getDate(), Today.getHours(), Today.getMinutes());
	        // посчитаем минимально-возможную дату:
	        //  для этого к сегодняшней дате надо прибавить TIMELIMIT, определяющий
	        //  за сколько минимально часов до вылета можно бронироть билеты. 
	        //  Переменная iTimeLimit определяется в шаблоне!
	        var iMinDay = Today.getTime() + iTimeLimit * 60 * 60 * 1000;
	        Today.setTime(iMinDay);
	        TmpRes = arDates['DATETO'] >= Today;
	        if (!TmpRes){
	          oField = document.getElementById(arDateFieldsList['DATETO']);
	          var TodayStr = (Today.getDate()<10 ? "0" : "")+Today.getDate();
	          TodayStr += "."+(Today.getMonth()<9 ? "0" : "")+(Today.getMonth()+1);
	          TodayStr += "."+Today.getFullYear();
	          TodayStr += " "+(Today.getHours()<10 ? "0" : "")+Today.getHours();
	          TodayStr += ":"+(Today.getMinutes()<10 ? "0" : "")+Today.getMinutes();
	          ShowError(oField,"JS_AIR_FORM_SUBMIT_SEARCH_ERROR_DATETO_LESS_MINDAY"," "+TodayStr);
	        }
	      }
	      // проверим что бы дата туда была меньше либо равна даты обратно
	      if (false) {//(TmpRes)&&(direct)) {
	        TmpRes = arDates['DATETO'] <= arDates['DATEBACK'];
	        if (!TmpRes){
	          var DateTo = arDates['DATETO'];
	          oField = document.getElementById(arDateFieldsList['DATEBACK']);
	          var DateToStr = (DateTo.getDate()<10 ? "0" : "")+DateTo.getDate();
	          DateToStr += "."+(DateTo.getMonth()<9 ? "0" : "")+(DateTo.getMonth()+1);
	          DateToStr += "."+DateTo.getFullYear();
	          DateToStr += " "+(DateTo.getHours()<10 ? "0" : "")+DateTo.getHours();
	          DateToStr += ":"+(DateTo.getMinutes()<10 ? "0" : "")+DateTo.getMinutes();
	          ShowError(oField,"JS_AIR_FORM_SUBMIT_SEARCH_ERROR_DATETO_MORE_DATEBACK","("+DateToStr+")");
	        }
	      }
	    }
	    else if (sJType == "MT") {
	      var sError = "";
	      var arDep = new Array();
	      var arArr = new Array();
	      var iDepCount = 0;
	      $("input[name^='mt_depart']").each(function(){
	        if($(this).val() == "") {
	          sError = ShowMess("JS_AIR_FORM_MT_SUBMIT_EMPTY_DEPART");
	          $(this).focus();
	          TmpRes = false;
	        }
	        else {
	          arDep[iDepCount++] = $(this).val();
	        }
	      });
	      if (!TmpRes) {
	        alert(sError);
	        break;
	      }
	      var iArrCount = 0;
	      $("input[name^='mt_arrival']").each(function(){
	        if($(this).val() == "") {
	          sError = ShowMess("JS_AIR_FORM_MT_SUBMIT_EMPTY_ARRIVAL");
	          $(this).focus();
	          TmpRes = false;
	        }
	        else {
	          arArr[iArrCount++] = $(this).val();
	        }
	      });
	      if (!TmpRes) {
	        alert(sError);
	        break;
	      }
	      $("input[name^='mt_date']").each(function(){
	        if($(this).val() == "") {
	          sError = ShowMess("JS_AIR_FORM_MT_SUBMIT_EMPTY_DATE");
	          $(this).focus();
	          TmpRes = false;
	        }
	      });
	      if (!TmpRes) {
	        alert(sError);
	        break;
	      }
	      if (iDepCount == iArrCount) {
	        for (iLineCount = 0; iLineCount < iDepCount; iLineCount++) {
  	        if (arDep[iLineCount] == arArr[iLineCount]) {
  	          alert(ShowMess("JS_AIR_FORM_MT_SUBMIT_DEPART_COINCIDE_WITH_ARRIVAL"));
  	          $("input[name^='mt_arrival']:eq("+iLineCount+")").focus();
  	          TmpRes = false;
  	          break;
  	        }
	        }
	      }
	    }
	    // проверим что бы общее кол-во людей было меньше 9
	    var arPassengersFieldsList = new Array("adult","child","infant");
	    if (TmpRes) {
	      TmpPersonCount = 0;
	      for(var key in arPassengersFieldsList) {
	        sValue = arPassengersFieldsList[key];
	        iValue = Number(document.getElementById(sValue).value);
	        TmpPersonCount += iValue;
	      }
	      TmpRes = TmpPersonCount < 10;
	      if (!TmpRes){
	        oField = document.getElementById(arPassengersFieldsList[0]);
	        ShowError(oField,"JS_AIR_FORM_SUBMIT_SEARCH_ERROR_TO_MANY_PEOPLE","");
	      }
	    }
	    break;
	  }
    case "passenger" :checkPassenger: {
      var sValue = "";
      for(var key in arRequiredFields) {
        oField = document.getElementById(arRequiredFields[key]);
        sValue = oField.value;
        TmpRes = (trim(sValue) != "");
        if (!TmpRes) {
          sName = arRequiredFieldNames[key];
          ShowError(oField,"JS_AIR_FORM_SUBMIT_PASSENGER_ERROR_NO_FIELD",sName);
          break checkPassenger;
        }
      }
      for(var key in arFields) {
        if(key != "length") {
          oField = document.getElementById(arFields[key]);
          sName = oField.name;
          sValue = oField.value;        
          sType = (sName.indexOf("[") >= 0) ? sName.substring(0,sName.indexOf("[")) : "other" ;
          sShowedName = arFieldNames[key];
          
          switch(sType) {
            case "TYPE":
              var sPassengerType = sValue;
              break;
            case "DOCTYPE":
              var sDocType = sValue;
              break;
            case "DOCCOUNTRY":
              var sDocCountry = sValue;
            case "SURNAME":
            case "NAME":
            case "MIDDLE":
              var filter = /^[a-zA-Zа-яА-Я\s\-\']*$/;
              TmpRes = filter.test(sValue);
              if(!TmpRes){
                ShowError(oField,"JS_AIR_FORM_SUBMIT_PASSENGER_ERROR_FIELD_FORMAT",sShowedName);
                break checkPassenger;
              }
              break;
            case "BIRTHDAY":
            case "DOCEXPIRE":
              // если проверяем поле DOCEXPIRE надо посмотреть тип документа и если
              // в этом документе необязательно есть срок годности и поле пустое - завершить проверку
              if ((sType == "DOCEXPIRE") && ((sDocType == "СР") || (sDocType == "ПС") || (sDocType == "НП"))) {
                break;
              }
              var filter = /^[0-9]{2}\.[0-9]{2}\.[0-9]{4}$/;
              TmpRes = filter.test(sValue);
              if(!TmpRes) {
                ShowError(oField,"JS_AIR_FORM_SUBMIT_PASSENGER_ERROR_DATE_FORMAT",sShowedName);
                break checkPassenger;
              }
              else {
                arTmpDate = sValue.split(".");
                TmpRes = isDate(arTmpDate[0], arTmpDate[1], arTmpDate[2]);
                if (!TmpRes){
                  ShowError(oField,"JS_AIR_FORM_SUBMIT_PASSENGER_ERROR_"+sType+"_NOT_A_DATE","");
                  break checkPassenger;
                }
                else {
                  var TheDate = new Date(arTmpDate[2], arTmpDate[1], arTmpDate[0]);
                  var Today = new Date();
                  var DateDiff = Today.getTime() - TheDate.getTime();
                  switch(sType) {
                    case "BIRTHDAY" :
                      var PassengerYearsOld = DateDiff / (1000 * 60 * 60 * 24 * 365);
                      if(sPassengerType == "ADULT") {
                        TmpRes = (PassengerYearsOld >= 12);
                        if(!TmpRes){
                          ShowError(oField,"JS_AIR_FORM_SUBMIT_PASSENGER_ERROR_PASSENGER_NOT_ADULT_PAST","");
                          break checkPassenger;
                        }
                      }
                      else if(sPassengerType == "CHILD") {
                        TmpRes = ((PassengerYearsOld >= 2) && (PassengerYearsOld < 12));
                        if(!TmpRes){
                          ShowError(oField,"JS_AIR_FORM_SUBMIT_PASSENGER_ERROR_PASSENGER_NOT_CHILD_PAST","");
                          break checkPassenger;
                        }
                      }
                      else if(sPassengerType == "INFANT") {
                        TmpRes = ((PassengerYearsOld >= 0) && (PassengerYearsOld < 2));
                        if(!TmpRes){
                          ShowError(oField,"JS_AIR_FORM_SUBMIT_PASSENGER_ERROR_PASSENGER_NOT_INFANT_PAST","");
                          break checkPassenger;
                        }
                      }
                      break;
                    case "DOCEXPIRE" :
                      TmpRes = DateDiff < 0;
                      if(!TmpRes){
                        ShowError(oField,"JS_AIR_FORM_SUBMIT_PASSENGER_ERROR_DOCEXPIRE_PAST","");
                        break checkPassenger;
                      }
                      break;
                  }
                }
              }
              break;
            case "DOCNUMBER":
              TmpRes = (sValue.length >= 3);
              if(!TmpRes){
                ShowError(oField,"JS_AIR_FORM_SUBMIT_PASSENGER_ERROR_SHORT_DOCNUMBER","");
                break checkPassenger;
              }
              else {
                switch(sDocType){
                  case "ПС":
                    var filter = /^[0-9]{10}$/;
                    TmpRes = filter.test(sValue);
                    var TmpDocType = "PS";
                    break;
                  case "ПСП":
                    var filter = /^[0-9]{9}$/;
                    TmpRes = filter.test(sValue);
                    var TmpDocType = "PSP";
                    break;
                  case "НП":
                    var filter = (sDocCountry == "RU") ? /^[0-9]{10}$/ : /^[0-9a-zA-Zа-яА-Я]{3,}$/;
                    TmpRes = filter.test(sValue);
                    var TmpDocType = (sDocCountry == "RU") ? "PS" : "NP";
                    break;
                  case "СР":
                    var filter = /^[0-9a-zA-Zа-яА-Я-]{3,}$/;
                    TmpRes = filter.test(sValue);
                    var TmpDocType = "SR";
                    break;
                }
                if(!TmpRes){
                  ShowError(oField,"JS_AIR_FORM_SUBMIT_PASSENGER_ERROR_"+TmpDocType+"_DOCNUMBER","");
                  break checkPassenger;
                }
                
              }
              break;
            case "C_NAME" :
              var filter = /^[a-zA-Zа-яА-Я\s\-\']*$/;
              TmpRes = filter.test(sValue);
              if(!TmpRes){
                ShowError(oField,"JS_AIR_FORM_SUBMIT_PASSENGER_ERROR_FIELD_FORMAT",sShowedName);
                break checkPassenger;
              }
              break;
            case "C_PHONE" :
              var filter = /^([0-9\-\+\s\(\)])+$/;
              TmpRes = filter.test(sValue);
              if(!TmpRes){
                ShowError(oField,"JS_AIR_FORM_SUBMIT_PASSENGER_ERROR_FIELD_FORMAT_C_PHONE","");
                break checkPassenger;
              }
              break;
            case "C_EMAIL" :
              var filter = /^([a-z0-9_\.-])+@(([a-z0-9-])+\.)+([a-z0-9]{2,4})+$/i;
              TmpRes = filter.test(sValue);
              if(!TmpRes){
                ShowError(oField,"JS_AIR_FORM_SUBMIT_PASSENGER_ERROR_FIELD_FORMAT_C_EMAIL","");
                break checkPassenger;
              }
              break;
          }
        }
      }
      break;
    }
	}
	return TmpRes;
}

function AirTimetableForm_submit()
{
  return AirForm_submit("search");
}

function flight_click(InID,InTimeLimit) {
  document.getElementById(InID).checked = true;
  if (InTimeLimit != "") {
    $("#"+InID).parents("div.offer").find("div.timelimit b").html(InTimeLimit);
  }
}

function SwapPoints(InID1,InID2)
{
  var TmpStr = document.getElementById(InID1).value;
  document.getElementById(InID1).value = document.getElementById(InID2).value;
  document.getElementById(InID2).value = TmpStr;
}