{{# def.definitions }}
{{# def.errors }}
{{# def.setupKeyword }}
{{# def.setupNextLevel }}


{{## def.validateIfClause:_clause:
  {{
    $it.schema = it.schema['_clause'];
    $it.schemaPath = it.schemaPath + '._clause';
    $it.errSchemaPath = it.errSchemaPath + '/_clause';
  }}
  {{# def.insertSubschemaCode }}
  {{=$valid}} = {{=$nextValid}};
  {{? $thenPresent && $elsePresent }}
    {{ $ifClause = 'ifClause' + $lvl; }}
    var {{=$ifClause}} = '_clause';
  {{??}}
    {{ $ifClause = '\'_clause\''; }}
  {{?}}
#}}

{{
  var $thenSch = it.schema['then']
    , $elseSch = it.schema['else']
    , $thenPresent = $thenSch !== undefined && {{# def.nonEmptySchema:$thenSch }}
    , $elsePresent = $elseSch !== undefined && {{# def.nonEmptySchema:$elseSch }}
    , $currentBaseId = $it.baseId;
}}

{{? $thenPresent || $elsePresent }}
  {{
    var $ifClause;
    $it.createErrors = false;
    $it.schema = $schema;
    $it.schemaPath = $schemaPath;
    $it.errSchemaPath = $errSchemaPath;
  }}
  var {{=$errs}} = errors;
  var {{=$valid}} = true;

  {{# def.setCompositeRule }}
  {{# def.insertSubschemaCode }}
  {{ $it.createErrors = true; }}
  {{# def.resetErrors }}
  {{# def.resetCompositeRule }}

  {{? $thenPresent }}
    if ({{=$nextValid}}) {
      {{# def.validateIfClause:then }}
    }
    {{? $elsePresent }}
      else {
    {{?}}
  {{??}}
    if (!{{=$nextValid}}) {
  {{?}}

  {{? $elsePresent }}
      {{# def.validateIfClause:else }}
    }
  {{?}}

  if (!{{=$valid}}) {
    {{# def.extraError:'if' }}
  } 
  {{? $breakOnError }} else { {{?}}

  {{# def.cleanUp }}
{{??}}
  {{? $breakOnError }}
    if (true) {
  {{?}}
{{?}}