/** =ajax/validation
************************************************************/
$(document).ready(function() {
	var $jsForm =  $('form.validate');
	if (!$('form.validate')) { return; }
	var submitOptions = {
	  clearForm: false,
	  beforeSubmit: function() {
	    $('<div class="loading">Sending<img src="/assets/styles/images/spinners/progress-bar.gif" alt="" /></div>').appendTo('.content-main .actions:first');
	    $('<div class="overlay"></div>').css({opacity: '.4'}).appendTo($jsForm);
	  },
	  success: function(responseText) {
      var response = $('<div>' + responseText + '</div>').find('.content-main:first').html();
      if (!$.trim(response)) {
        if (!$('.error-report').length) {
          $('<div class="error-report"></div>').appendTo('.actions');
        }
        response = '<ul>' + $('<div>' + responseText + '</div>').find('#content ul').html() + '</ul>';
        $('.error-report').html(response);
        $('.loading').remove();
      } else {
  	    $jsForm.fadeTo(400, 0.01, function() {
  				$jsForm.slideUp(600, function() {
  		      $('.loading').insertAfter(this).html(response).removeClass('loading');
  				});
      	});
      }

	    $('div.overlay').fadeOut(100, function() {
	      $(this).remove();
	    });
	  }
	};
	$jsForm.tinyvalidate({
	  submitOverride: function() {
	    $jsForm.ajaxSubmit(submitOptions);
	  },
	  summary: {
			insertTo: '.content-main .actions:first',
			insertType: 'append',
	    wrapper: '<div class="error-summary"></div>',
	    preMessage: 'There was a problem processing your request.<br>Please correct the {num} highlighted {field|fields} and try again.',
	  	lineItems: null
		}
	});

});
$(document).ready(function() {

  /** =expandable textareas
  ************************************************************/
  if (typeof $.fn.expandable !== 'undefined') {
  	$('textarea').expandable({
  	  init: true,
  	  duration: 100,
  	  interval: 400,
  	  by: 1
  	});
  }

  /** =handle country outside USA
  ************************************************************/

  var $country = $('#country'),
      $countryParent = $country.parent(),
      $cityState = $('#citystate');

  $country.change(function() {

    $countryParent.next('p').remove();
    if ($country.val() != 'United States') {
      $countryParent.after('<p>In the Address field below, please enter your complete postal address exactly as it should appear on an envelope, using the return (or Enter) key to separate lines in your address.</p>');
      $cityState.slideUp('fast', function() {
        $cityState.find(':input').each(function() {
          $(this).data('val', this.value);
          this.value = 'NA';
        });
      });
    } else {
      $cityState
        .find(':input').each(function(index) {
          this.value = $(this).data('val') == 'NA' ? '' : $(this).data('val') || '';
        })
        .end()
      .slideDown('fast');
    }
  }).trigger('change');

  /** =Change Programs of Interest based on Entrance Level
  ************************************************************/

  var $pi = $('#program_of_interest');
  if ($pi.length) {
    var allProgs = $pi.children().get(),
        progs = Array.prototype.slice.call(allProgs),
        choose = progs.shift(),
        na = $('<option value="">Not Applicable</option>')[0],
        undecided = progs.pop(),
        $level = $('fieldset.radios').find('input[name=entrance_level]');

    var levels = {
      undergraduate: {start: 0, end: 1, pre: choose, post: undecided},
      graduate: {start: 1, end: 2, pre: choose},
      special: {start: 0, end: 0, pre: na, disabled: true}
    };
    levels.guest = levels.youth = levels.special;
        
    $level.change(function() {
      
      var val = $(this).val().split(' ')[0].toLowerCase(),
          opts = allProgs,
          disabled = false;
          
      if ( val && levels[ val ] ) {
        var lev = levels[ val ];
        var theseProgs = progs.slice(lev.start, lev.end);
        
        disabled = !!lev.disabled;
        opts = $.makeArray(lev.pre) || [];
        $.merge( opts, $.merge(theseProgs, $.makeArray(lev.post)) );
      }
      
      $pi.html( opts ).find('option').eq(0).attr('selected', true);
      $pi.trigger('disable', disabled);
      
    }).filter(':checked').trigger('change');
  }


});

$(document).bind('disable', function(event, dis) {
  $(event.target).attr('disabled', dis)
    .parent().toggleClass('disabled', dis);
});
