(function ($) {

  // Disable password strength checker
  Drupal.behaviors.password = {
    attach: function (context, settings) {
      return;
    }
  };

  Drupal.behaviors.baseball = {
    attach: function (context, settings) {

      // Hierarchy of leagues, divisions, and teams
      var season = Drupal.settings.baseball.season;

      // Program sign up info
      var programs = Drupal.settings.baseball.programs;

      // Players for current user
      var players = Drupal.settings.baseball.players;

      // Umpires
      var umpires = Drupal.settings.baseball.umpires;

      updateGameDivisions = function(season) {
				var league = $('#edit-field-game-league-und').val();
				$('#edit-field-game-division-und option:gt(0)').remove();
			  	if (typeof season[league]['division'] != 'undefined') {
						$.each(season[league]['division'], function(tid, division) {
							$('#edit-field-game-division-und').append($("<option></option>").attr("value", tid).text(division['name']));
						});
					}
				updateGameTeams(season);
				updateGameFields(season);
			}

			updateGameTeams = function(season) {
			   var league = $('#edit-field-game-league-und').val();
			   var division = $('#edit-field-game-division-und').val();
			   if (division != '_none') {
			     $('#edit-field-game-team-home-und option').remove();
			     $('#edit-field-game-team-away-und option').remove();

			     if (typeof season[league]['division'] != 'undefined') {
						 $.each(season[league]['division'][division]['teams'], function(nid, teamName) {
							 if (nid != '_none') {
							  $('#edit-field-game-team-home-und').append($("<option></option>").attr("value", nid).text(teamName));
								$('#edit-field-game-team-away-und').append($("<option></option>").attr("value", nid).text(teamName));
							 }
						 });
						 $('#edit-field-game-team-home-und').prepend($("<option></option>").attr("value", '_none').text('- Select Team -'));
						 $('#edit-field-game-team-away-und').prepend($("<option></option>").attr("value", '_none').text('- Select Team -'));
					 }
				 }
				 else {
				   $('#edit-field-game-team-home-und option:gt(0)').remove();
				   $('#edit-field-game-team-away-und option:gt(0)').remove();
				 }
				 updateGameFields(season);
			}

			updateGameFields = function(season) {
			   var league = $('#edit-field-game-league-und').val();
			   var division = $('#edit-field-game-division-und').val();
			   if (division != '_none') {
			   $('#edit-field-game-field-und option').remove();
					 if (typeof season[league]['division'] != 'undefined') {
						$.each(season[league]['division'][division]['fields'], function(nid, fieldName) {
							if (nid != '_none') {
								$('#edit-field-game-field-und').append($("<option></option>").attr("value", nid).text(fieldName));
							}
						});
						$('#edit-field-game-field-und').prepend($("<option></option>").attr("value", '_none').text('- Select Field -'));
					 }
				 }
				 else {
				   $('#edit-field-game-field-und option:gt(0)').remove();
				 }
			}

			updateAwayTeam = function(season) {
			   var home = $('#edit-field-game-team-home-und').val();
			   var away = $('#edit-field-game-team-away-und').val();
			   var league = $('#edit-field-game-league-und').val();
			   var division = $('#edit-field-game-division-und').val();
			   $('#edit-field-game-team-away-und option').remove();
			   if (typeof season[league]['division'] != 'undefined') {
					 $.each(season[league]['division'][division]['teams'], function(nid, teamName) {
						 if (nid != '_none') {
						  $('#edit-field-game-team-away-und').append($("<option></option>").attr("value", nid).text(teamName));
						 }
					 });
					 $('#edit-field-game-team-away-und').prepend($("<option></option>").attr("value", '_none').text('- Select Team -'));
				 }
				 $('#edit-field-game-team-away-und option[value="' + home + '"]').remove();
				 if (away != home) {
				   $('#edit-field-game-team-away-und').val(away);
				 }
			}

			updateHomeTeam = function(season) {
			   var home = $('#edit-field-game-team-home-und').val();
			   var away = $('#edit-field-game-team-away-und').val();
			   var league = $('#edit-field-game-league-und').val();
			   var division = $('#edit-field-game-division-und').val();
			   $('#edit-field-game-team-home-und option').remove();
			   if (typeof season[league]['division'] != 'undefined') {
					 $.each(season[league]['division'][division]['teams'], function(nid, teamName) {
						 if (nid != '_none') {
						  $('#edit-field-game-team-home-und').append($("<option></option>").attr("value", nid).text(teamName));
						 }
					 });
					 $('#edit-field-game-team-home-und').prepend($("<option></option>").attr("value", '_none').text('- Select Team -'));
			   }
			   $('#edit-field-game-team-home-und option[value="' + away + '"]').remove();
			   if (home != away) {
				   $('#edit-field-game-team-home-und').val(home);
				 }
			}

			updateBaseUmp = function(umpires) {
			   var base = $('#edit-field-game-base-ump-und').val();
			   var plate = $('#edit-field-game-plate-ump-und').val();
			   $('#edit-field-game-base-ump-und option').remove();
			   $.each(umpires, function(uid, umpireName) {
				 	if (uid != '_none') {
				 	 $('#edit-field-game-base-ump-und').append($("<option></option>").attr("value", uid).text(umpireName));
				  }
				 });
				 $('#edit-field-game-base-ump-und').prepend($("<option></option>").attr("value", '_none').text('- Select Umpire -'));
				 if (plate != '_none') {
				   $('#edit-field-game-base-ump-und option[value="' + plate + '"]').remove();
				 }
				 if (base != plate) {
				   $('#edit-field-game-base-ump-und').val(base);
				 }

			}

			updatePlateUmp = function(umpires) {
			   var base = $('#edit-field-game-base-ump-und').val();
			   var plate = $('#edit-field-game-plate-ump-und').val();
			   $('#edit-field-game-plate-ump-und option').remove();
			   $.each(umpires, function(uid, umpireName) {
				  if (uid != '_none') {
				   $('#edit-field-game-plate-ump-und').append($("<option></option>").attr("value", uid).text(umpireName));
				  }
				 });
				 $('#edit-field-game-plate-ump-und').prepend($("<option></option>").attr("value", '_none').text('- Select Umpire -'));
				 if (base != '_none') {
				   $('#edit-field-game-plate-ump-und option[value="' + base + '"]').remove();
				 }
				 if (base != plate) {
				   $('#edit-field-game-plate-ump-und').val(plate);
				 }
			}

			updateDivisions = function() {
			  var league = $('#edit-team-league').val();
			  $('#edit-team-division option:gt(0)').remove();
			  if (league != '_none') {
			  	// A league may not have any divisions
			  	if (typeof season[league]['division'] != 'undefined') {
						$.each(season[league]['division'], function(tid, division) {
							$('#edit-team-division').append($("<option></option>").attr("value", tid).text(division['name']));
						});
					}
				}

				if ($("#edit-team-name").length > 0){
	  			updateTeams();
				}
				updateFields();
			}

			updateTeams = function() {
			   var league = $('#edit-team-league').val();
			   var division = $('#edit-team-division').val();
			   if (division != '_none') {
			     $('#edit-team-name option').remove();
					 $.each(season[league]['division'][division]['teams'], function(nid, teamName) {
						if (nid != '_none') {
							$('#edit-team-name').append($("<option></option>").attr("value", nid).text(teamName));
						}
					 });
					 $('#edit-team-name').prepend($("<option></option>").attr("value", '_none').text('- Select Team -'));
				 }
				 else {
				   $('#edit-team-name option:gt(0)').remove();
				 }
				 updateFields();
			}

			updateFields = function() {
			  var league = $('#edit-team-league').val();
			  var division = $('#edit-team-division').val();
			  if (division != '_none') {
			  	$('#edit-field option').remove();
				 	$.each(season[league]['division'][division]['fields'], function(nid, fieldName) {
						if (nid != '_none') {
							$('#edit-field').append($("<option></option>").attr("value", nid).text(fieldName));
						}
					 });
					 $('#edit-field').prepend($("<option></option>").attr("value", '_none').text('- Select Field -'));
				}
				else {
				  $('#edit-field option:gt(0)').remove();
				}
			}

			updatePrograms = function() {
			  var league = $('#edit-league').val();
			  $('#edit-program option:gt(0)').remove();
			  if (league != '') {
					$.each(season[league]['programs'], function(tid, program) {
						$('#edit-program').append($("<option></option>").attr("value", tid).text(program['name']));
					});
				}
				updateRegistrationFee();
				updateProgramDescription();
			}

			updateRegistrationFee = function() {
			  var program = $('#edit-program').val();
			  if (program) {
			    $('#registration-fee').html('$' + programs[program]['fee']);
			    $('input[name="x_amount"]').val(programs[program]['fee']);
			  }
			}

			updateProgramDescription = function() {
			   var program = $('#edit-program').val();
			   var player = $('#edit-player').val();
			   if (program && player) {
			     $('input[name=x_description]').val(programs[program]['name'] + " Sign-Up Fee for " + players[player]);
			   }
			}

			updateFingerprint = function(fingerprints) {
			   var program = $('#edit-program').val();
			   if (program) {
			     $('input[name=x_fp_hash]').val(fingerprints[program]);
			   }
			}

			updateFormAction = function(teamPayments) {
				var fee = $('#registration-fee').text();
				var action = fee == '$0.00' ? teamPayments.drupalaction : teamPayments.authorizeaction;
			  $("#team-payments-payment-form").attr("action", action);
			}

      if ($('body').hasClass('context-dash')) {
         $('#block-system-user-menu ul li.first a').addClass('active');
       }

      if (typeof context !== 'undefined') {
         // Attach these events only on page load
         if (typeof context == 'object' && context.toString().indexOf('HTMLDocument') !=-1){

					 // Schedules
					 if ($('body').hasClass('page-schedules') ||  $('body').hasClass('page-results')) {
						 // Bind change events
						 $('#edit-team-league').change(function(){
							 updateDivisions();
						 })
						 .change();
						 $('#edit-team-division').change(function() {
							 updateTeams();
						 });
					  }

					   // Master Umpire Scheduling
						if ($('body').hasClass('page-master-umpire-scheduling') || $('body').hasClass('page-umpire-signup-form')) {
						 // Bind change events
						 $('#edit-team-league').change(function(){
							 updateDivisions();
						 });
						 $('#edit-team-division').change(function() {
							 updateFields();
						 });
						}
				 }
      }

			  // Add Game form
			  if ($('body').hasClass('page-node-add-game') || ($('body').hasClass('page-node-edit') && $('body').hasClass('node-type-game')) ) {

			    if ($('body').hasClass('page-node-add-game')) {
			      $('#edit-field-game-league-und').change(function(){
					    updateGameDivisions(season);
				    }).change();
				 }
				 else {
				   $('#edit-field-game-league-und').change(function(){
					   updateGameDivisions(season);
				   });
				 }
				 $('#edit-field-game-division-und').change(function() {
					 updateGameTeams(season);
				 });
				 $('#edit-field-game-team-home-und').change(function() {
					 updateAwayTeam(season);
				 });
				 $('#edit-field-game-team-away-und').change(function() {
					 updateHomeTeam(season);
				 });
				 $('#edit-field-game-base-ump-und').change(function() {
					 updatePlateUmp(umpires);
				 });
				 $('#edit-field-game-plate-ump-und').change(function() {
					 updateBaseUmp(umpires);
				 });
			  }



			  // Sign Up Form
			  if ($('body').hasClass('page-sign-up')) {

			    // Grab Authorize.Net hashes
          var fingerprints = Drupal.settings.team_payments.fingerprints;

          // Grab team payments variables
          var teamPayments = Drupal.settings.team_payments;

          // Bind change events
				  $('#edit-league').change(function(){
					 updatePrograms();
				 	});

				  // Bind change events
				  $('#edit-program').change(function(){
					 updateRegistrationFee();
					 updateProgramDescription();
					 updateFingerprint(teamPayments.fingerprints);
					 updateFormAction(teamPayments);
				 	}).change();

				 $('#edit-player').change(function(){
					 updateProgramDescription();
				 }).change();

				 // Add validation
				 if ($("#team-payments-payment-form").length > 0) {
           $("#team-payments-payment-form").validate();
         }
			  }

			  // Open links in new window
        $("a[rel*='external']").click(function() {
          window.open($(this).attr('href'), 'external', '');
          return false;
       });
    }
  };

})(jQuery);;

