function get_field_name(field_name) {
   field_name = field_name.replace(/_/, ' ')
   return field_name.replace(/^([a-z]).*$/, '$1').toUpperCase() + field_name.substr(1)
}
function observe_input(jHandle, type) {
   var jHandle_id = jHandle.attr('id')
   var error_id = jHandle_id + '_error'
   switch(type) {
      case 'presence':
         if(jHandle.val().length) {
            jQuery('#' + error_id).html('okay').addClass('okay').removeClass('bad')
         } else {
            jQuery('#' + error_id).html('cannot be blank').removeClass('okay').addClass('bad')
         }
         break
      case 'format':
         if(jHandle.val().match(validates_format[jHandle_id])) {
            jQuery('#' + error_id).html('okay').addClass('okay').removeClass('bad')
         } else {
            jQuery('#' + error_id).html('must be valid').removeClass('okay').addClass('bad')
         }
         break
      case 'confirmation':
         jHandle = jQuery('#' + jHandle_id.replace(/_confirm$/, ''))
         jHandle_id = jHandle.attr('id')
         error_id = jHandle_id + '_error'
         if(jHandle.val() == jQuery('#' + jHandle_id + '_confirm').val()) {
            jQuery('#' + error_id).html('okay').addClass('okay').removeClass('bad')
            jQuery('#' + jHandle_id + '_confirm_error').html('okay').addClass('okay').removeClass('bad')
         } else {
            jQuery('#' + error_id).html('*').removeClass('okay').addClass('bad')
            jQuery('#' + jHandle_id + '_confirm_error').html('must match *').removeClass('okay').addClass('bad')
         }
         break
   }
}
function set_error(id, type, format) {
   jQuery('#'+id).keyup(function() { observe_input(jQuery(this),type) } )
   var error_id = id + '_error'
   var error_jHandle = jQuery('#'+error_id)

   if(type == 'presence') {
      error_jHandle.html('cannot be blank').addClass('bad')
   }
   if(type == 'format') {
      error_jHandle.html('must be valid').addClass('bad')
      validates_format[id] = format
   }
   if(type == 'confirmation') {
      error_jHandle.html('*').addClass('bad')
      jQuery('#'+id+'_confirm_error').html('must match *').addClass('bad') 
      jQuery('#'+id+'_confirm').keyup(function() { observe_input(jQuery(this),type,'confirm') } )
   }
}
function model_validate_form(jFormHandle) {
   var success = true
   var jHandle
   var field_name
   var class_name
   jQuery('.validation_error').html('').removeClass('okay')

   for(var i=0; i < validates_format.length; i++) {
      class_name = validates_format[i++]
      field_name = validates_format[i++]
      input_id = class_name + '_' + field_name 
      jHandle = jFormHandle.find('input#' + input_id + '[data-validate=1]')
      if(jHandle.attr('name') == class_name + '[' + field_name + ']') {
         if(!jHandle.val().match(validates_format[i])) {
            set_error(input_id, 'format', validates_format[i])
            success = false
         }
      }
   }
   for(var i=0; i < validates_confirmation.length; i++) {
      class_name = validates_confirmation[i++]
      field_name = validates_confirmation[i]
      input_id = class_name + '_' + field_name 
      jHandle = jFormHandle.find('input#' + input_id + '[data-validate=1]')
      if(jHandle.attr('name') == class_name + '[' + field_name + ']') {
         jConfHandle = jQuery('input#' + class_name + '_' + field_name + '_confirm')
         if(jConfHandle.attr('name') && jConfHandle.val() != jHandle.val()) {
            set_error(input_id, 'confirmation')
            success = false
         }
      }
   }
   for(var i=0; i < validates_presence.length; i++) {
      class_name = validates_presence[i++]
      field_name = validates_presence[i]
      input_id = class_name + '_' + field_name 
      jHandle = jFormHandle.find('input#' + input_id + '[data-validate=1]')
      if(jHandle.attr('name') == class_name + '[' + field_name + ']') {
         if(!jHandle.val().length) {
            set_error(input_id, 'presence')
            success = false
         }
      }
   }
   return success
}

