window.CMI or= {} window.CMI.FormComponents or= {}

class CMI.FormComponents.TextField

@reset: (domElement) ->
  if domElement.val().length > 0 || domElement.is(':focus')
    domElement.parents(@_getInputBoxSelector()).addClass('cmi-active')
  else
    domElement.parents(@_getInputBoxSelector()).removeClass('cmi-active')

@animateChange: (domElement) ->
  domElement.parents(@_getInputBoxSelector()).addClass('cmi-active') if domElement.val().length != 0
  @validate_field(domElement, domElement.parents(@_getInputBoxSelector()))

@animateFocus: (domElement) ->
  domElement.parents(@_getInputBoxSelector()).addClass('cmi-active')

@animateBlur: (domElement) ->
  domElement.parents(@_getInputBoxSelector()).removeClass('cmi-active') if domElement.val().length == 0
  @validate_field(domElement, domElement.parents(@_getInputBoxSelector()))

@formReset: (domFormElement) ->
  domElement.parents(@_getInputBoxSelector()).removeClass('cmi-valid').removeClass('cmi-invalid')

  domFormElement.find('select.cmi-initialized').each ->
    reset_text = domFormElement.find('option[selected]').text()
    domFormElement.siblings('input.cmi-select-dropdown').val(reset_text)

# ---------------------------------------------
# helper

@validate_field: (domElement, parentDomElement) ->
  if domElement.val().length == 0
    if parentDomElement.hasClass('cmi-validate')
      parentDomElement.removeClass('cmi-valid')
      parentDomElement.removeClass('cmi-invalid')
  else if parentDomElement.hasClass('cmi-validate')
    if domElement.is(':valid')
      parentDomElement.removeClass('cmi-invalid')
      parentDomElement.addClass('cmi-valid')
    else
      parentDomElement.removeClass('cmi-valid')
      parentDomElement.addClass('cmi-invalid')

@_getInputBoxSelector: ->
  '.cmi-text-input, .cmi-select-input'